-Wimplicit-fallthrough warning fixes
[external/binutils.git] / bfd / elflink.c
1 /* ELF linking support for BFD.
2    Copyright (C) 1995-2016 Free Software Foundation, Inc.
3
4    This file is part of BFD, the Binary File Descriptor library.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19    MA 02110-1301, USA.  */
20
21 #include "sysdep.h"
22 #include "bfd.h"
23 #include "bfd_stdint.h"
24 #include "bfdlink.h"
25 #include "libbfd.h"
26 #define ARCH_SIZE 0
27 #include "elf-bfd.h"
28 #include "safe-ctype.h"
29 #include "libiberty.h"
30 #include "objalloc.h"
31 #if BFD_SUPPORTS_PLUGINS
32 #include "plugin-api.h"
33 #include "plugin.h"
34 #endif
35
36 /* This struct is used to pass information to routines called via
37    elf_link_hash_traverse which must return failure.  */
38
39 struct elf_info_failed
40 {
41   struct bfd_link_info *info;
42   bfd_boolean failed;
43 };
44
45 /* This structure is used to pass information to
46    _bfd_elf_link_find_version_dependencies.  */
47
48 struct elf_find_verdep_info
49 {
50   /* General link information.  */
51   struct bfd_link_info *info;
52   /* The number of dependencies.  */
53   unsigned int vers;
54   /* Whether we had a failure.  */
55   bfd_boolean failed;
56 };
57
58 static bfd_boolean _bfd_elf_fix_symbol_flags
59   (struct elf_link_hash_entry *, struct elf_info_failed *);
60
61 asection *
62 _bfd_elf_section_for_symbol (struct elf_reloc_cookie *cookie,
63                              unsigned long r_symndx,
64                              bfd_boolean discard)
65 {
66   if (r_symndx >= cookie->locsymcount
67       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
68     {
69       struct elf_link_hash_entry *h;
70
71       h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
72
73       while (h->root.type == bfd_link_hash_indirect
74              || h->root.type == bfd_link_hash_warning)
75         h = (struct elf_link_hash_entry *) h->root.u.i.link;
76
77       if ((h->root.type == bfd_link_hash_defined
78            || h->root.type == bfd_link_hash_defweak)
79            && discarded_section (h->root.u.def.section))
80         return h->root.u.def.section;
81       else
82         return NULL;
83     }
84   else
85     {
86       /* It's not a relocation against a global symbol,
87          but it could be a relocation against a local
88          symbol for a discarded section.  */
89       asection *isec;
90       Elf_Internal_Sym *isym;
91
92       /* Need to: get the symbol; get the section.  */
93       isym = &cookie->locsyms[r_symndx];
94       isec = bfd_section_from_elf_index (cookie->abfd, isym->st_shndx);
95       if (isec != NULL
96           && discard ? discarded_section (isec) : 1)
97         return isec;
98      }
99   return NULL;
100 }
101
102 /* Define a symbol in a dynamic linkage section.  */
103
104 struct elf_link_hash_entry *
105 _bfd_elf_define_linkage_sym (bfd *abfd,
106                              struct bfd_link_info *info,
107                              asection *sec,
108                              const char *name)
109 {
110   struct elf_link_hash_entry *h;
111   struct bfd_link_hash_entry *bh;
112   const struct elf_backend_data *bed;
113
114   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
115   if (h != NULL)
116     {
117       /* Zap symbol defined in an as-needed lib that wasn't linked.
118          This is a symptom of a larger problem:  Absolute symbols
119          defined in shared libraries can't be overridden, because we
120          lose the link to the bfd which is via the symbol section.  */
121       h->root.type = bfd_link_hash_new;
122     }
123
124   bh = &h->root;
125   bed = get_elf_backend_data (abfd);
126   if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL,
127                                          sec, 0, NULL, FALSE, bed->collect,
128                                          &bh))
129     return NULL;
130   h = (struct elf_link_hash_entry *) bh;
131   h->def_regular = 1;
132   h->non_elf = 0;
133   h->root.linker_def = 1;
134   h->type = STT_OBJECT;
135   if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
136     h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
137
138   (*bed->elf_backend_hide_symbol) (info, h, TRUE);
139   return h;
140 }
141
142 bfd_boolean
143 _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
144 {
145   flagword flags;
146   asection *s;
147   struct elf_link_hash_entry *h;
148   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
149   struct elf_link_hash_table *htab = elf_hash_table (info);
150
151   /* This function may be called more than once.  */
152   s = bfd_get_linker_section (abfd, ".got");
153   if (s != NULL)
154     return TRUE;
155
156   flags = bed->dynamic_sec_flags;
157
158   s = bfd_make_section_anyway_with_flags (abfd,
159                                           (bed->rela_plts_and_copies_p
160                                            ? ".rela.got" : ".rel.got"),
161                                           (bed->dynamic_sec_flags
162                                            | SEC_READONLY));
163   if (s == NULL
164       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
165     return FALSE;
166   htab->srelgot = s;
167
168   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
169   if (s == NULL
170       || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
171     return FALSE;
172   htab->sgot = s;
173
174   if (bed->want_got_plt)
175     {
176       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
177       if (s == NULL
178           || !bfd_set_section_alignment (abfd, s,
179                                          bed->s->log_file_align))
180         return FALSE;
181       htab->sgotplt = s;
182     }
183
184   /* The first bit of the global offset table is the header.  */
185   s->size += bed->got_header_size;
186
187   if (bed->want_got_sym)
188     {
189       /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
190          (or .got.plt) section.  We don't do this in the linker script
191          because we don't want to define the symbol if we are not creating
192          a global offset table.  */
193       h = _bfd_elf_define_linkage_sym (abfd, info, s,
194                                        "_GLOBAL_OFFSET_TABLE_");
195       elf_hash_table (info)->hgot = h;
196       if (h == NULL)
197         return FALSE;
198     }
199
200   return TRUE;
201 }
202 \f
203 /* Create a strtab to hold the dynamic symbol names.  */
204 static bfd_boolean
205 _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info)
206 {
207   struct elf_link_hash_table *hash_table;
208
209   hash_table = elf_hash_table (info);
210   if (hash_table->dynobj == NULL)
211     {
212       /* We may not set dynobj, an input file holding linker created
213          dynamic sections to abfd, which may be a dynamic object with
214          its own dynamic sections.  We need to find a normal input file
215          to hold linker created sections if possible.  */
216       if ((abfd->flags & (DYNAMIC | BFD_PLUGIN)) != 0)
217         {
218           bfd *ibfd;
219           for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
220             if ((ibfd->flags
221                  & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0)
222               {
223                 abfd = ibfd;
224                 break;
225               }
226         }
227       hash_table->dynobj = abfd;
228     }
229
230   if (hash_table->dynstr == NULL)
231     {
232       hash_table->dynstr = _bfd_elf_strtab_init ();
233       if (hash_table->dynstr == NULL)
234         return FALSE;
235     }
236   return TRUE;
237 }
238
239 /* Create some sections which will be filled in with dynamic linking
240    information.  ABFD is an input file which requires dynamic sections
241    to be created.  The dynamic sections take up virtual memory space
242    when the final executable is run, so we need to create them before
243    addresses are assigned to the output sections.  We work out the
244    actual contents and size of these sections later.  */
245
246 bfd_boolean
247 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
248 {
249   flagword flags;
250   asection *s;
251   const struct elf_backend_data *bed;
252   struct elf_link_hash_entry *h;
253
254   if (! is_elf_hash_table (info->hash))
255     return FALSE;
256
257   if (elf_hash_table (info)->dynamic_sections_created)
258     return TRUE;
259
260   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
261     return FALSE;
262
263   abfd = elf_hash_table (info)->dynobj;
264   bed = get_elf_backend_data (abfd);
265
266   flags = bed->dynamic_sec_flags;
267
268   /* A dynamically linked executable has a .interp section, but a
269      shared library does not.  */
270   if (bfd_link_executable (info) && !info->nointerp)
271     {
272       s = bfd_make_section_anyway_with_flags (abfd, ".interp",
273                                               flags | SEC_READONLY);
274       if (s == NULL)
275         return FALSE;
276     }
277
278   /* Create sections to hold version informations.  These are removed
279      if they are not needed.  */
280   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_d",
281                                           flags | SEC_READONLY);
282   if (s == NULL
283       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
284     return FALSE;
285
286   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version",
287                                           flags | SEC_READONLY);
288   if (s == NULL
289       || ! bfd_set_section_alignment (abfd, s, 1))
290     return FALSE;
291
292   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_r",
293                                           flags | SEC_READONLY);
294   if (s == NULL
295       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
296     return FALSE;
297
298   s = bfd_make_section_anyway_with_flags (abfd, ".dynsym",
299                                           flags | SEC_READONLY);
300   if (s == NULL
301       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
302     return FALSE;
303   elf_hash_table (info)->dynsym = s;
304
305   s = bfd_make_section_anyway_with_flags (abfd, ".dynstr",
306                                           flags | SEC_READONLY);
307   if (s == NULL)
308     return FALSE;
309
310   s = bfd_make_section_anyway_with_flags (abfd, ".dynamic", flags);
311   if (s == NULL
312       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
313     return FALSE;
314
315   /* The special symbol _DYNAMIC is always set to the start of the
316      .dynamic section.  We could set _DYNAMIC in a linker script, but we
317      only want to define it if we are, in fact, creating a .dynamic
318      section.  We don't want to define it if there is no .dynamic
319      section, since on some ELF platforms the start up code examines it
320      to decide how to initialize the process.  */
321   h = _bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC");
322   elf_hash_table (info)->hdynamic = h;
323   if (h == NULL)
324     return FALSE;
325
326   if (info->emit_hash)
327     {
328       s = bfd_make_section_anyway_with_flags (abfd, ".hash",
329                                               flags | SEC_READONLY);
330       if (s == NULL
331           || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
332         return FALSE;
333       elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
334     }
335
336   if (info->emit_gnu_hash)
337     {
338       s = bfd_make_section_anyway_with_flags (abfd, ".gnu.hash",
339                                               flags | SEC_READONLY);
340       if (s == NULL
341           || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
342         return FALSE;
343       /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section:
344          4 32-bit words followed by variable count of 64-bit words, then
345          variable count of 32-bit words.  */
346       if (bed->s->arch_size == 64)
347         elf_section_data (s)->this_hdr.sh_entsize = 0;
348       else
349         elf_section_data (s)->this_hdr.sh_entsize = 4;
350     }
351
352   /* Let the backend create the rest of the sections.  This lets the
353      backend set the right flags.  The backend will normally create
354      the .got and .plt sections.  */
355   if (bed->elf_backend_create_dynamic_sections == NULL
356       || ! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
357     return FALSE;
358
359   elf_hash_table (info)->dynamic_sections_created = TRUE;
360
361   return TRUE;
362 }
363
364 /* Create dynamic sections when linking against a dynamic object.  */
365
366 bfd_boolean
367 _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
368 {
369   flagword flags, pltflags;
370   struct elf_link_hash_entry *h;
371   asection *s;
372   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
373   struct elf_link_hash_table *htab = elf_hash_table (info);
374
375   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
376      .rel[a].bss sections.  */
377   flags = bed->dynamic_sec_flags;
378
379   pltflags = flags;
380   if (bed->plt_not_loaded)
381     /* We do not clear SEC_ALLOC here because we still want the OS to
382        allocate space for the section; it's just that there's nothing
383        to read in from the object file.  */
384     pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS);
385   else
386     pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD;
387   if (bed->plt_readonly)
388     pltflags |= SEC_READONLY;
389
390   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
391   if (s == NULL
392       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
393     return FALSE;
394   htab->splt = s;
395
396   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
397      .plt section.  */
398   if (bed->want_plt_sym)
399     {
400       h = _bfd_elf_define_linkage_sym (abfd, info, s,
401                                        "_PROCEDURE_LINKAGE_TABLE_");
402       elf_hash_table (info)->hplt = h;
403       if (h == NULL)
404         return FALSE;
405     }
406
407   s = bfd_make_section_anyway_with_flags (abfd,
408                                           (bed->rela_plts_and_copies_p
409                                            ? ".rela.plt" : ".rel.plt"),
410                                           flags | SEC_READONLY);
411   if (s == NULL
412       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
413     return FALSE;
414   htab->srelplt = s;
415
416   if (! _bfd_elf_create_got_section (abfd, info))
417     return FALSE;
418
419   if (bed->want_dynbss)
420     {
421       /* The .dynbss section is a place to put symbols which are defined
422          by dynamic objects, are referenced by regular objects, and are
423          not functions.  We must allocate space for them in the process
424          image and use a R_*_COPY reloc to tell the dynamic linker to
425          initialize them at run time.  The linker script puts the .dynbss
426          section into the .bss section of the final image.  */
427       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
428                                               (SEC_ALLOC | SEC_LINKER_CREATED));
429       if (s == NULL)
430         return FALSE;
431
432       /* The .rel[a].bss section holds copy relocs.  This section is not
433          normally needed.  We need to create it here, though, so that the
434          linker will map it to an output section.  We can't just create it
435          only if we need it, because we will not know whether we need it
436          until we have seen all the input files, and the first time the
437          main linker code calls BFD after examining all the input files
438          (size_dynamic_sections) the input sections have already been
439          mapped to the output sections.  If the section turns out not to
440          be needed, we can discard it later.  We will never need this
441          section when generating a shared object, since they do not use
442          copy relocs.  */
443       if (! bfd_link_pic (info))
444         {
445           s = bfd_make_section_anyway_with_flags (abfd,
446                                                   (bed->rela_plts_and_copies_p
447                                                    ? ".rela.bss" : ".rel.bss"),
448                                                   flags | SEC_READONLY);
449           if (s == NULL
450               || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
451             return FALSE;
452         }
453     }
454
455   return TRUE;
456 }
457 \f
458 /* Record a new dynamic symbol.  We record the dynamic symbols as we
459    read the input files, since we need to have a list of all of them
460    before we can determine the final sizes of the output sections.
461    Note that we may actually call this function even though we are not
462    going to output any dynamic symbols; in some cases we know that a
463    symbol should be in the dynamic symbol table, but only if there is
464    one.  */
465
466 bfd_boolean
467 bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
468                                     struct elf_link_hash_entry *h)
469 {
470   if (h->dynindx == -1)
471     {
472       struct elf_strtab_hash *dynstr;
473       char *p;
474       const char *name;
475       size_t indx;
476
477       /* XXX: The ABI draft says the linker must turn hidden and
478          internal symbols into STB_LOCAL symbols when producing the
479          DSO. However, if ld.so honors st_other in the dynamic table,
480          this would not be necessary.  */
481       switch (ELF_ST_VISIBILITY (h->other))
482         {
483         case STV_INTERNAL:
484         case STV_HIDDEN:
485           if (h->root.type != bfd_link_hash_undefined
486               && h->root.type != bfd_link_hash_undefweak)
487             {
488               h->forced_local = 1;
489               if (!elf_hash_table (info)->is_relocatable_executable)
490                 return TRUE;
491             }
492
493         default:
494           break;
495         }
496
497       h->dynindx = elf_hash_table (info)->dynsymcount;
498       ++elf_hash_table (info)->dynsymcount;
499
500       dynstr = elf_hash_table (info)->dynstr;
501       if (dynstr == NULL)
502         {
503           /* Create a strtab to hold the dynamic symbol names.  */
504           elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
505           if (dynstr == NULL)
506             return FALSE;
507         }
508
509       /* We don't put any version information in the dynamic string
510          table.  */
511       name = h->root.root.string;
512       p = strchr (name, ELF_VER_CHR);
513       if (p != NULL)
514         /* We know that the p points into writable memory.  In fact,
515            there are only a few symbols that have read-only names, being
516            those like _GLOBAL_OFFSET_TABLE_ that are created specially
517            by the backends.  Most symbols will have names pointing into
518            an ELF string table read from a file, or to objalloc memory.  */
519         *p = 0;
520
521       indx = _bfd_elf_strtab_add (dynstr, name, p != NULL);
522
523       if (p != NULL)
524         *p = ELF_VER_CHR;
525
526       if (indx == (size_t) -1)
527         return FALSE;
528       h->dynstr_index = indx;
529     }
530
531   return TRUE;
532 }
533 \f
534 /* Mark a symbol dynamic.  */
535
536 static void
537 bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info,
538                                   struct elf_link_hash_entry *h,
539                                   Elf_Internal_Sym *sym)
540 {
541   struct bfd_elf_dynamic_list *d = info->dynamic_list;
542
543   /* It may be called more than once on the same H.  */
544   if(h->dynamic || bfd_link_relocatable (info))
545     return;
546
547   if ((info->dynamic_data
548        && (h->type == STT_OBJECT
549            || h->type == STT_COMMON
550            || (sym != NULL
551                && (ELF_ST_TYPE (sym->st_info) == STT_OBJECT
552                    || ELF_ST_TYPE (sym->st_info) == STT_COMMON))))
553       || (d != NULL
554           && h->root.type == bfd_link_hash_new
555           && (*d->match) (&d->head, NULL, h->root.root.string)))
556     h->dynamic = 1;
557 }
558
559 /* Record an assignment to a symbol made by a linker script.  We need
560    this in case some dynamic object refers to this symbol.  */
561
562 bfd_boolean
563 bfd_elf_record_link_assignment (bfd *output_bfd,
564                                 struct bfd_link_info *info,
565                                 const char *name,
566                                 bfd_boolean provide,
567                                 bfd_boolean hidden)
568 {
569   struct elf_link_hash_entry *h, *hv;
570   struct elf_link_hash_table *htab;
571   const struct elf_backend_data *bed;
572
573   if (!is_elf_hash_table (info->hash))
574     return TRUE;
575
576   htab = elf_hash_table (info);
577   h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE);
578   if (h == NULL)
579     return provide;
580
581   if (h->versioned == unknown)
582     {
583       /* Set versioned if symbol version is unknown.  */
584       char *version = strrchr (name, ELF_VER_CHR);
585       if (version)
586         {
587           if (version > name && version[-1] != ELF_VER_CHR)
588             h->versioned = versioned_hidden;
589           else
590             h->versioned = versioned;
591         }
592     }
593
594   switch (h->root.type)
595     {
596     case bfd_link_hash_defined:
597     case bfd_link_hash_defweak:
598     case bfd_link_hash_common:
599       break;
600     case bfd_link_hash_undefweak:
601     case bfd_link_hash_undefined:
602       /* Since we're defining the symbol, don't let it seem to have not
603          been defined.  record_dynamic_symbol and size_dynamic_sections
604          may depend on this.  */
605       h->root.type = bfd_link_hash_new;
606       if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root)
607         bfd_link_repair_undef_list (&htab->root);
608       break;
609     case bfd_link_hash_new:
610       bfd_elf_link_mark_dynamic_symbol (info, h, NULL);
611       h->non_elf = 0;
612       break;
613     case bfd_link_hash_indirect:
614       /* We had a versioned symbol in a dynamic library.  We make the
615          the versioned symbol point to this one.  */
616       bed = get_elf_backend_data (output_bfd);
617       hv = h;
618       while (hv->root.type == bfd_link_hash_indirect
619              || hv->root.type == bfd_link_hash_warning)
620         hv = (struct elf_link_hash_entry *) hv->root.u.i.link;
621       /* We don't need to update h->root.u since linker will set them
622          later.  */
623       h->root.type = bfd_link_hash_undefined;
624       hv->root.type = bfd_link_hash_indirect;
625       hv->root.u.i.link = (struct bfd_link_hash_entry *) h;
626       (*bed->elf_backend_copy_indirect_symbol) (info, h, hv);
627       break;
628     case bfd_link_hash_warning:
629       abort ();
630       break;
631     }
632
633   /* If this symbol is being provided by the linker script, and it is
634      currently defined by a dynamic object, but not by a regular
635      object, then mark it as undefined so that the generic linker will
636      force the correct value.  */
637   if (provide
638       && h->def_dynamic
639       && !h->def_regular)
640     h->root.type = bfd_link_hash_undefined;
641
642   /* If this symbol is not being provided by the linker script, and it is
643      currently defined by a dynamic object, but not by a regular object,
644      then clear out any version information because the symbol will not be
645      associated with the dynamic object any more.  */
646   if (!provide
647       && h->def_dynamic
648       && !h->def_regular)
649     h->verinfo.verdef = NULL;
650
651   h->def_regular = 1;
652
653   if (hidden)
654     {
655       bed = get_elf_backend_data (output_bfd);
656       if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
657         h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
658       (*bed->elf_backend_hide_symbol) (info, h, TRUE);
659     }
660
661   /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects
662      and executables.  */
663   if (!bfd_link_relocatable (info)
664       && h->dynindx != -1
665       && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
666           || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL))
667     h->forced_local = 1;
668
669   if ((h->def_dynamic
670        || h->ref_dynamic
671        || bfd_link_dll (info)
672        || elf_hash_table (info)->is_relocatable_executable)
673       && h->dynindx == -1)
674     {
675       if (! bfd_elf_link_record_dynamic_symbol (info, h))
676         return FALSE;
677
678       /* If this is a weak defined symbol, and we know a corresponding
679          real symbol from the same dynamic object, make sure the real
680          symbol is also made into a dynamic symbol.  */
681       if (h->u.weakdef != NULL
682           && h->u.weakdef->dynindx == -1)
683         {
684           if (! bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
685             return FALSE;
686         }
687     }
688
689   return TRUE;
690 }
691
692 /* Record a new local dynamic symbol.  Returns 0 on failure, 1 on
693    success, and 2 on a failure caused by attempting to record a symbol
694    in a discarded section, eg. a discarded link-once section symbol.  */
695
696 int
697 bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info,
698                                           bfd *input_bfd,
699                                           long input_indx)
700 {
701   bfd_size_type amt;
702   struct elf_link_local_dynamic_entry *entry;
703   struct elf_link_hash_table *eht;
704   struct elf_strtab_hash *dynstr;
705   size_t dynstr_index;
706   char *name;
707   Elf_External_Sym_Shndx eshndx;
708   char esym[sizeof (Elf64_External_Sym)];
709
710   if (! is_elf_hash_table (info->hash))
711     return 0;
712
713   /* See if the entry exists already.  */
714   for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
715     if (entry->input_bfd == input_bfd && entry->input_indx == input_indx)
716       return 1;
717
718   amt = sizeof (*entry);
719   entry = (struct elf_link_local_dynamic_entry *) bfd_alloc (input_bfd, amt);
720   if (entry == NULL)
721     return 0;
722
723   /* Go find the symbol, so that we can find it's name.  */
724   if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr,
725                              1, input_indx, &entry->isym, esym, &eshndx))
726     {
727       bfd_release (input_bfd, entry);
728       return 0;
729     }
730
731   if (entry->isym.st_shndx != SHN_UNDEF
732       && entry->isym.st_shndx < SHN_LORESERVE)
733     {
734       asection *s;
735
736       s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx);
737       if (s == NULL || bfd_is_abs_section (s->output_section))
738         {
739           /* We can still bfd_release here as nothing has done another
740              bfd_alloc.  We can't do this later in this function.  */
741           bfd_release (input_bfd, entry);
742           return 2;
743         }
744     }
745
746   name = (bfd_elf_string_from_elf_section
747           (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link,
748            entry->isym.st_name));
749
750   dynstr = elf_hash_table (info)->dynstr;
751   if (dynstr == NULL)
752     {
753       /* Create a strtab to hold the dynamic symbol names.  */
754       elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
755       if (dynstr == NULL)
756         return 0;
757     }
758
759   dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE);
760   if (dynstr_index == (size_t) -1)
761     return 0;
762   entry->isym.st_name = dynstr_index;
763
764   eht = elf_hash_table (info);
765
766   entry->next = eht->dynlocal;
767   eht->dynlocal = entry;
768   entry->input_bfd = input_bfd;
769   entry->input_indx = input_indx;
770   eht->dynsymcount++;
771
772   /* Whatever binding the symbol had before, it's now local.  */
773   entry->isym.st_info
774     = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info));
775
776   /* The dynindx will be set at the end of size_dynamic_sections.  */
777
778   return 1;
779 }
780
781 /* Return the dynindex of a local dynamic symbol.  */
782
783 long
784 _bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info,
785                                     bfd *input_bfd,
786                                     long input_indx)
787 {
788   struct elf_link_local_dynamic_entry *e;
789
790   for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
791     if (e->input_bfd == input_bfd && e->input_indx == input_indx)
792       return e->dynindx;
793   return -1;
794 }
795
796 /* This function is used to renumber the dynamic symbols, if some of
797    them are removed because they are marked as local.  This is called
798    via elf_link_hash_traverse.  */
799
800 static bfd_boolean
801 elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h,
802                                       void *data)
803 {
804   size_t *count = (size_t *) data;
805
806   if (h->forced_local)
807     return TRUE;
808
809   if (h->dynindx != -1)
810     h->dynindx = ++(*count);
811
812   return TRUE;
813 }
814
815
816 /* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with
817    STB_LOCAL binding.  */
818
819 static bfd_boolean
820 elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h,
821                                             void *data)
822 {
823   size_t *count = (size_t *) data;
824
825   if (!h->forced_local)
826     return TRUE;
827
828   if (h->dynindx != -1)
829     h->dynindx = ++(*count);
830
831   return TRUE;
832 }
833
834 /* Return true if the dynamic symbol for a given section should be
835    omitted when creating a shared library.  */
836 bfd_boolean
837 _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
838                                    struct bfd_link_info *info,
839                                    asection *p)
840 {
841   struct elf_link_hash_table *htab;
842   asection *ip;
843
844   switch (elf_section_data (p)->this_hdr.sh_type)
845     {
846     case SHT_PROGBITS:
847     case SHT_NOBITS:
848       /* If sh_type is yet undecided, assume it could be
849          SHT_PROGBITS/SHT_NOBITS.  */
850     case SHT_NULL:
851       htab = elf_hash_table (info);
852       if (p == htab->tls_sec)
853         return FALSE;
854
855       if (htab->text_index_section != NULL)
856         return p != htab->text_index_section && p != htab->data_index_section;
857
858       return (htab->dynobj != NULL
859               && (ip = bfd_get_linker_section (htab->dynobj, p->name)) != NULL
860               && ip->output_section == p);
861
862       /* There shouldn't be section relative relocations
863          against any other section.  */
864     default:
865       return TRUE;
866     }
867 }
868
869 /* Assign dynsym indices.  In a shared library we generate a section
870    symbol for each output section, which come first.  Next come symbols
871    which have been forced to local binding.  Then all of the back-end
872    allocated local dynamic syms, followed by the rest of the global
873    symbols.  */
874
875 static unsigned long
876 _bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
877                                 struct bfd_link_info *info,
878                                 unsigned long *section_sym_count)
879 {
880   unsigned long dynsymcount = 0;
881
882   if (bfd_link_pic (info)
883       || elf_hash_table (info)->is_relocatable_executable)
884     {
885       const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
886       asection *p;
887       for (p = output_bfd->sections; p ; p = p->next)
888         if ((p->flags & SEC_EXCLUDE) == 0
889             && (p->flags & SEC_ALLOC) != 0
890             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
891           elf_section_data (p)->dynindx = ++dynsymcount;
892         else
893           elf_section_data (p)->dynindx = 0;
894     }
895   *section_sym_count = dynsymcount;
896
897   elf_link_hash_traverse (elf_hash_table (info),
898                           elf_link_renumber_local_hash_table_dynsyms,
899                           &dynsymcount);
900
901   if (elf_hash_table (info)->dynlocal)
902     {
903       struct elf_link_local_dynamic_entry *p;
904       for (p = elf_hash_table (info)->dynlocal; p ; p = p->next)
905         p->dynindx = ++dynsymcount;
906     }
907   elf_hash_table (info)->local_dynsymcount = dynsymcount;
908
909   elf_link_hash_traverse (elf_hash_table (info),
910                           elf_link_renumber_hash_table_dynsyms,
911                           &dynsymcount);
912
913   /* There is an unused NULL entry at the head of the table which we
914      must account for in our count even if the table is empty since it
915      is intended for the mandatory DT_SYMTAB tag (.dynsym section) in
916      .dynamic section.  */
917   dynsymcount++;
918
919   elf_hash_table (info)->dynsymcount = dynsymcount;
920   return dynsymcount;
921 }
922
923 /* Merge st_other field.  */
924
925 static void
926 elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h,
927                     const Elf_Internal_Sym *isym, asection *sec,
928                     bfd_boolean definition, bfd_boolean dynamic)
929 {
930   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
931
932   /* If st_other has a processor-specific meaning, specific
933      code might be needed here.  */
934   if (bed->elf_backend_merge_symbol_attribute)
935     (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
936                                                 dynamic);
937
938   if (!dynamic)
939     {
940       unsigned symvis = ELF_ST_VISIBILITY (isym->st_other);
941       unsigned hvis = ELF_ST_VISIBILITY (h->other);
942
943       /* Keep the most constraining visibility.  Leave the remainder
944          of the st_other field to elf_backend_merge_symbol_attribute.  */
945       if (symvis - 1 < hvis - 1)
946         h->other = symvis | (h->other & ~ELF_ST_VISIBILITY (-1));
947     }
948   else if (definition
949            && ELF_ST_VISIBILITY (isym->st_other) != STV_DEFAULT
950            && (sec->flags & SEC_READONLY) == 0)
951     h->protected_def = 1;
952 }
953
954 /* This function is called when we want to merge a new symbol with an
955    existing symbol.  It handles the various cases which arise when we
956    find a definition in a dynamic object, or when there is already a
957    definition in a dynamic object.  The new symbol is described by
958    NAME, SYM, PSEC, and PVALUE.  We set SYM_HASH to the hash table
959    entry.  We set POLDBFD to the old symbol's BFD.  We set POLD_WEAK
960    if the old symbol was weak.  We set POLD_ALIGNMENT to the alignment
961    of an old common symbol.  We set OVERRIDE if the old symbol is
962    overriding a new definition.  We set TYPE_CHANGE_OK if it is OK for
963    the type to change.  We set SIZE_CHANGE_OK if it is OK for the size
964    to change.  By OK to change, we mean that we shouldn't warn if the
965    type or size does change.  */
966
967 static bfd_boolean
968 _bfd_elf_merge_symbol (bfd *abfd,
969                        struct bfd_link_info *info,
970                        const char *name,
971                        Elf_Internal_Sym *sym,
972                        asection **psec,
973                        bfd_vma *pvalue,
974                        struct elf_link_hash_entry **sym_hash,
975                        bfd **poldbfd,
976                        bfd_boolean *pold_weak,
977                        unsigned int *pold_alignment,
978                        bfd_boolean *skip,
979                        bfd_boolean *override,
980                        bfd_boolean *type_change_ok,
981                        bfd_boolean *size_change_ok,
982                        bfd_boolean *matched)
983 {
984   asection *sec, *oldsec;
985   struct elf_link_hash_entry *h;
986   struct elf_link_hash_entry *hi;
987   struct elf_link_hash_entry *flip;
988   int bind;
989   bfd *oldbfd;
990   bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
991   bfd_boolean newweak, oldweak, newfunc, oldfunc;
992   const struct elf_backend_data *bed;
993   char *new_version;
994
995   *skip = FALSE;
996   *override = FALSE;
997
998   sec = *psec;
999   bind = ELF_ST_BIND (sym->st_info);
1000
1001   if (! bfd_is_und_section (sec))
1002     h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
1003   else
1004     h = ((struct elf_link_hash_entry *)
1005          bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
1006   if (h == NULL)
1007     return FALSE;
1008   *sym_hash = h;
1009
1010   bed = get_elf_backend_data (abfd);
1011
1012   /* NEW_VERSION is the symbol version of the new symbol.  */
1013   if (h->versioned != unversioned)
1014     {
1015       /* Symbol version is unknown or versioned.  */
1016       new_version = strrchr (name, ELF_VER_CHR);
1017       if (new_version)
1018         {
1019           if (h->versioned == unknown)
1020             {
1021               if (new_version > name && new_version[-1] != ELF_VER_CHR)
1022                 h->versioned = versioned_hidden;
1023               else
1024                 h->versioned = versioned;
1025             }
1026           new_version += 1;
1027           if (new_version[0] == '\0')
1028             new_version = NULL;
1029         }
1030       else
1031         h->versioned = unversioned;
1032     }
1033   else
1034     new_version = NULL;
1035
1036   /* For merging, we only care about real symbols.  But we need to make
1037      sure that indirect symbol dynamic flags are updated.  */
1038   hi = h;
1039   while (h->root.type == bfd_link_hash_indirect
1040          || h->root.type == bfd_link_hash_warning)
1041     h = (struct elf_link_hash_entry *) h->root.u.i.link;
1042
1043   if (!*matched)
1044     {
1045       if (hi == h || h->root.type == bfd_link_hash_new)
1046         *matched = TRUE;
1047       else
1048         {
1049           /* OLD_HIDDEN is true if the existing symbol is only visible
1050              to the symbol with the same symbol version.  NEW_HIDDEN is
1051              true if the new symbol is only visible to the symbol with
1052              the same symbol version.  */
1053           bfd_boolean old_hidden = h->versioned == versioned_hidden;
1054           bfd_boolean new_hidden = hi->versioned == versioned_hidden;
1055           if (!old_hidden && !new_hidden)
1056             /* The new symbol matches the existing symbol if both
1057                aren't hidden.  */
1058             *matched = TRUE;
1059           else
1060             {
1061               /* OLD_VERSION is the symbol version of the existing
1062                  symbol. */
1063               char *old_version;
1064
1065               if (h->versioned >= versioned)
1066                 old_version = strrchr (h->root.root.string,
1067                                        ELF_VER_CHR) + 1;
1068               else
1069                  old_version = NULL;
1070
1071               /* The new symbol matches the existing symbol if they
1072                  have the same symbol version.  */
1073               *matched = (old_version == new_version
1074                           || (old_version != NULL
1075                               && new_version != NULL
1076                               && strcmp (old_version, new_version) == 0));
1077             }
1078         }
1079     }
1080
1081   /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the
1082      existing symbol.  */
1083
1084   oldbfd = NULL;
1085   oldsec = NULL;
1086   switch (h->root.type)
1087     {
1088     default:
1089       break;
1090
1091     case bfd_link_hash_undefined:
1092     case bfd_link_hash_undefweak:
1093       oldbfd = h->root.u.undef.abfd;
1094       break;
1095
1096     case bfd_link_hash_defined:
1097     case bfd_link_hash_defweak:
1098       oldbfd = h->root.u.def.section->owner;
1099       oldsec = h->root.u.def.section;
1100       break;
1101
1102     case bfd_link_hash_common:
1103       oldbfd = h->root.u.c.p->section->owner;
1104       oldsec = h->root.u.c.p->section;
1105       if (pold_alignment)
1106         *pold_alignment = h->root.u.c.p->alignment_power;
1107       break;
1108     }
1109   if (poldbfd && *poldbfd == NULL)
1110     *poldbfd = oldbfd;
1111
1112   /* Differentiate strong and weak symbols.  */
1113   newweak = bind == STB_WEAK;
1114   oldweak = (h->root.type == bfd_link_hash_defweak
1115              || h->root.type == bfd_link_hash_undefweak);
1116   if (pold_weak)
1117     *pold_weak = oldweak;
1118
1119   /* This code is for coping with dynamic objects, and is only useful
1120      if we are doing an ELF link.  */
1121   if (!(*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
1122     return TRUE;
1123
1124   /* We have to check it for every instance since the first few may be
1125      references and not all compilers emit symbol type for undefined
1126      symbols.  */
1127   bfd_elf_link_mark_dynamic_symbol (info, h, sym);
1128
1129   /* NEWDYN and OLDDYN indicate whether the new or old symbol,
1130      respectively, is from a dynamic object.  */
1131
1132   newdyn = (abfd->flags & DYNAMIC) != 0;
1133
1134   /* ref_dynamic_nonweak and dynamic_def flags track actual undefined
1135      syms and defined syms in dynamic libraries respectively.
1136      ref_dynamic on the other hand can be set for a symbol defined in
1137      a dynamic library, and def_dynamic may not be set;  When the
1138      definition in a dynamic lib is overridden by a definition in the
1139      executable use of the symbol in the dynamic lib becomes a
1140      reference to the executable symbol.  */
1141   if (newdyn)
1142     {
1143       if (bfd_is_und_section (sec))
1144         {
1145           if (bind != STB_WEAK)
1146             {
1147               h->ref_dynamic_nonweak = 1;
1148               hi->ref_dynamic_nonweak = 1;
1149             }
1150         }
1151       else
1152         {
1153           /* Update the existing symbol only if they match. */
1154           if (*matched)
1155             h->dynamic_def = 1;
1156           hi->dynamic_def = 1;
1157         }
1158     }
1159
1160   /* If we just created the symbol, mark it as being an ELF symbol.
1161      Other than that, there is nothing to do--there is no merge issue
1162      with a newly defined symbol--so we just return.  */
1163
1164   if (h->root.type == bfd_link_hash_new)
1165     {
1166       h->non_elf = 0;
1167       return TRUE;
1168     }
1169
1170   /* In cases involving weak versioned symbols, we may wind up trying
1171      to merge a symbol with itself.  Catch that here, to avoid the
1172      confusion that results if we try to override a symbol with
1173      itself.  The additional tests catch cases like
1174      _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a
1175      dynamic object, which we do want to handle here.  */
1176   if (abfd == oldbfd
1177       && (newweak || oldweak)
1178       && ((abfd->flags & DYNAMIC) == 0
1179           || !h->def_regular))
1180     return TRUE;
1181
1182   olddyn = FALSE;
1183   if (oldbfd != NULL)
1184     olddyn = (oldbfd->flags & DYNAMIC) != 0;
1185   else if (oldsec != NULL)
1186     {
1187       /* This handles the special SHN_MIPS_{TEXT,DATA} section
1188          indices used by MIPS ELF.  */
1189       olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
1190     }
1191
1192   /* NEWDEF and OLDDEF indicate whether the new or old symbol,
1193      respectively, appear to be a definition rather than reference.  */
1194
1195   newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec);
1196
1197   olddef = (h->root.type != bfd_link_hash_undefined
1198             && h->root.type != bfd_link_hash_undefweak
1199             && h->root.type != bfd_link_hash_common);
1200
1201   /* NEWFUNC and OLDFUNC indicate whether the new or old symbol,
1202      respectively, appear to be a function.  */
1203
1204   newfunc = (ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1205              && bed->is_function_type (ELF_ST_TYPE (sym->st_info)));
1206
1207   oldfunc = (h->type != STT_NOTYPE
1208              && bed->is_function_type (h->type));
1209
1210   /* If creating a default indirect symbol ("foo" or "foo@") from a
1211      dynamic versioned definition ("foo@@") skip doing so if there is
1212      an existing regular definition with a different type.  We don't
1213      want, for example, a "time" variable in the executable overriding
1214      a "time" function in a shared library.  */
1215   if (pold_alignment == NULL
1216       && newdyn
1217       && newdef
1218       && !olddyn
1219       && (olddef || h->root.type == bfd_link_hash_common)
1220       && ELF_ST_TYPE (sym->st_info) != h->type
1221       && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1222       && h->type != STT_NOTYPE
1223       && !(newfunc && oldfunc))
1224     {
1225       *skip = TRUE;
1226       return TRUE;
1227     }
1228
1229   /* Check TLS symbols.  We don't check undefined symbols introduced
1230      by "ld -u" which have no type (and oldbfd NULL), and we don't
1231      check symbols from plugins because they also have no type.  */
1232   if (oldbfd != NULL
1233       && (oldbfd->flags & BFD_PLUGIN) == 0
1234       && (abfd->flags & BFD_PLUGIN) == 0
1235       && ELF_ST_TYPE (sym->st_info) != h->type
1236       && (ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS))
1237     {
1238       bfd *ntbfd, *tbfd;
1239       bfd_boolean ntdef, tdef;
1240       asection *ntsec, *tsec;
1241
1242       if (h->type == STT_TLS)
1243         {
1244           ntbfd = abfd;
1245           ntsec = sec;
1246           ntdef = newdef;
1247           tbfd = oldbfd;
1248           tsec = oldsec;
1249           tdef = olddef;
1250         }
1251       else
1252         {
1253           ntbfd = oldbfd;
1254           ntsec = oldsec;
1255           ntdef = olddef;
1256           tbfd = abfd;
1257           tsec = sec;
1258           tdef = newdef;
1259         }
1260
1261       if (tdef && ntdef)
1262         _bfd_error_handler
1263           (_("%s: TLS definition in %B section %A "
1264              "mismatches non-TLS definition in %B section %A"),
1265            tbfd, tsec, ntbfd, ntsec, h->root.root.string);
1266       else if (!tdef && !ntdef)
1267         _bfd_error_handler
1268           (_("%s: TLS reference in %B "
1269              "mismatches non-TLS reference in %B"),
1270            tbfd, ntbfd, h->root.root.string);
1271       else if (tdef)
1272         _bfd_error_handler
1273           (_("%s: TLS definition in %B section %A "
1274              "mismatches non-TLS reference in %B"),
1275            tbfd, tsec, ntbfd, h->root.root.string);
1276       else
1277         _bfd_error_handler
1278           (_("%s: TLS reference in %B "
1279              "mismatches non-TLS definition in %B section %A"),
1280            tbfd, ntbfd, ntsec, h->root.root.string);
1281
1282       bfd_set_error (bfd_error_bad_value);
1283       return FALSE;
1284     }
1285
1286   /* If the old symbol has non-default visibility, we ignore the new
1287      definition from a dynamic object.  */
1288   if (newdyn
1289       && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1290       && !bfd_is_und_section (sec))
1291     {
1292       *skip = TRUE;
1293       /* Make sure this symbol is dynamic.  */
1294       h->ref_dynamic = 1;
1295       hi->ref_dynamic = 1;
1296       /* A protected symbol has external availability. Make sure it is
1297          recorded as dynamic.
1298
1299          FIXME: Should we check type and size for protected symbol?  */
1300       if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
1301         return bfd_elf_link_record_dynamic_symbol (info, h);
1302       else
1303         return TRUE;
1304     }
1305   else if (!newdyn
1306            && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
1307            && h->def_dynamic)
1308     {
1309       /* If the new symbol with non-default visibility comes from a
1310          relocatable file and the old definition comes from a dynamic
1311          object, we remove the old definition.  */
1312       if (hi->root.type == bfd_link_hash_indirect)
1313         {
1314           /* Handle the case where the old dynamic definition is
1315              default versioned.  We need to copy the symbol info from
1316              the symbol with default version to the normal one if it
1317              was referenced before.  */
1318           if (h->ref_regular)
1319             {
1320               hi->root.type = h->root.type;
1321               h->root.type = bfd_link_hash_indirect;
1322               (*bed->elf_backend_copy_indirect_symbol) (info, hi, h);
1323
1324               h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1325               if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
1326                 {
1327                   /* If the new symbol is hidden or internal, completely undo
1328                      any dynamic link state.  */
1329                   (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1330                   h->forced_local = 0;
1331                   h->ref_dynamic = 0;
1332                 }
1333               else
1334                 h->ref_dynamic = 1;
1335
1336               h->def_dynamic = 0;
1337               /* FIXME: Should we check type and size for protected symbol?  */
1338               h->size = 0;
1339               h->type = 0;
1340
1341               h = hi;
1342             }
1343           else
1344             h = hi;
1345         }
1346
1347       /* If the old symbol was undefined before, then it will still be
1348          on the undefs list.  If the new symbol is undefined or
1349          common, we can't make it bfd_link_hash_new here, because new
1350          undefined or common symbols will be added to the undefs list
1351          by _bfd_generic_link_add_one_symbol.  Symbols may not be
1352          added twice to the undefs list.  Also, if the new symbol is
1353          undefweak then we don't want to lose the strong undef.  */
1354       if (h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1355         {
1356           h->root.type = bfd_link_hash_undefined;
1357           h->root.u.undef.abfd = abfd;
1358         }
1359       else
1360         {
1361           h->root.type = bfd_link_hash_new;
1362           h->root.u.undef.abfd = NULL;
1363         }
1364
1365       if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
1366         {
1367           /* If the new symbol is hidden or internal, completely undo
1368              any dynamic link state.  */
1369           (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1370           h->forced_local = 0;
1371           h->ref_dynamic = 0;
1372         }
1373       else
1374         h->ref_dynamic = 1;
1375       h->def_dynamic = 0;
1376       /* FIXME: Should we check type and size for protected symbol?  */
1377       h->size = 0;
1378       h->type = 0;
1379       return TRUE;
1380     }
1381
1382   /* If a new weak symbol definition comes from a regular file and the
1383      old symbol comes from a dynamic library, we treat the new one as
1384      strong.  Similarly, an old weak symbol definition from a regular
1385      file is treated as strong when the new symbol comes from a dynamic
1386      library.  Further, an old weak symbol from a dynamic library is
1387      treated as strong if the new symbol is from a dynamic library.
1388      This reflects the way glibc's ld.so works.
1389
1390      Do this before setting *type_change_ok or *size_change_ok so that
1391      we warn properly when dynamic library symbols are overridden.  */
1392
1393   if (newdef && !newdyn && olddyn)
1394     newweak = FALSE;
1395   if (olddef && newdyn)
1396     oldweak = FALSE;
1397
1398   /* Allow changes between different types of function symbol.  */
1399   if (newfunc && oldfunc)
1400     *type_change_ok = TRUE;
1401
1402   /* It's OK to change the type if either the existing symbol or the
1403      new symbol is weak.  A type change is also OK if the old symbol
1404      is undefined and the new symbol is defined.  */
1405
1406   if (oldweak
1407       || newweak
1408       || (newdef
1409           && h->root.type == bfd_link_hash_undefined))
1410     *type_change_ok = TRUE;
1411
1412   /* It's OK to change the size if either the existing symbol or the
1413      new symbol is weak, or if the old symbol is undefined.  */
1414
1415   if (*type_change_ok
1416       || h->root.type == bfd_link_hash_undefined)
1417     *size_change_ok = TRUE;
1418
1419   /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
1420      symbol, respectively, appears to be a common symbol in a dynamic
1421      object.  If a symbol appears in an uninitialized section, and is
1422      not weak, and is not a function, then it may be a common symbol
1423      which was resolved when the dynamic object was created.  We want
1424      to treat such symbols specially, because they raise special
1425      considerations when setting the symbol size: if the symbol
1426      appears as a common symbol in a regular object, and the size in
1427      the regular object is larger, we must make sure that we use the
1428      larger size.  This problematic case can always be avoided in C,
1429      but it must be handled correctly when using Fortran shared
1430      libraries.
1431
1432      Note that if NEWDYNCOMMON is set, NEWDEF will be set, and
1433      likewise for OLDDYNCOMMON and OLDDEF.
1434
1435      Note that this test is just a heuristic, and that it is quite
1436      possible to have an uninitialized symbol in a shared object which
1437      is really a definition, rather than a common symbol.  This could
1438      lead to some minor confusion when the symbol really is a common
1439      symbol in some regular object.  However, I think it will be
1440      harmless.  */
1441
1442   if (newdyn
1443       && newdef
1444       && !newweak
1445       && (sec->flags & SEC_ALLOC) != 0
1446       && (sec->flags & SEC_LOAD) == 0
1447       && sym->st_size > 0
1448       && !newfunc)
1449     newdyncommon = TRUE;
1450   else
1451     newdyncommon = FALSE;
1452
1453   if (olddyn
1454       && olddef
1455       && h->root.type == bfd_link_hash_defined
1456       && h->def_dynamic
1457       && (h->root.u.def.section->flags & SEC_ALLOC) != 0
1458       && (h->root.u.def.section->flags & SEC_LOAD) == 0
1459       && h->size > 0
1460       && !oldfunc)
1461     olddyncommon = TRUE;
1462   else
1463     olddyncommon = FALSE;
1464
1465   /* We now know everything about the old and new symbols.  We ask the
1466      backend to check if we can merge them.  */
1467   if (bed->merge_symbol != NULL)
1468     {
1469       if (!bed->merge_symbol (h, sym, psec, newdef, olddef, oldbfd, oldsec))
1470         return FALSE;
1471       sec = *psec;
1472     }
1473
1474   /* If both the old and the new symbols look like common symbols in a
1475      dynamic object, set the size of the symbol to the larger of the
1476      two.  */
1477
1478   if (olddyncommon
1479       && newdyncommon
1480       && sym->st_size != h->size)
1481     {
1482       /* Since we think we have two common symbols, issue a multiple
1483          common warning if desired.  Note that we only warn if the
1484          size is different.  If the size is the same, we simply let
1485          the old symbol override the new one as normally happens with
1486          symbols defined in dynamic objects.  */
1487
1488       (*info->callbacks->multiple_common) (info, &h->root, abfd,
1489                                            bfd_link_hash_common, sym->st_size);
1490       if (sym->st_size > h->size)
1491         h->size = sym->st_size;
1492
1493       *size_change_ok = TRUE;
1494     }
1495
1496   /* If we are looking at a dynamic object, and we have found a
1497      definition, we need to see if the symbol was already defined by
1498      some other object.  If so, we want to use the existing
1499      definition, and we do not want to report a multiple symbol
1500      definition error; we do this by clobbering *PSEC to be
1501      bfd_und_section_ptr.
1502
1503      We treat a common symbol as a definition if the symbol in the
1504      shared library is a function, since common symbols always
1505      represent variables; this can cause confusion in principle, but
1506      any such confusion would seem to indicate an erroneous program or
1507      shared library.  We also permit a common symbol in a regular
1508      object to override a weak symbol in a shared object.  A common
1509      symbol in executable also overrides a symbol in a shared object.  */
1510
1511   if (newdyn
1512       && newdef
1513       && (olddef
1514           || (h->root.type == bfd_link_hash_common
1515               && (newweak
1516                   || newfunc
1517                   || (!olddyn && bfd_link_executable (info))))))
1518     {
1519       *override = TRUE;
1520       newdef = FALSE;
1521       newdyncommon = FALSE;
1522
1523       *psec = sec = bfd_und_section_ptr;
1524       *size_change_ok = TRUE;
1525
1526       /* If we get here when the old symbol is a common symbol, then
1527          we are explicitly letting it override a weak symbol or
1528          function in a dynamic object, and we don't want to warn about
1529          a type change.  If the old symbol is a defined symbol, a type
1530          change warning may still be appropriate.  */
1531
1532       if (h->root.type == bfd_link_hash_common)
1533         *type_change_ok = TRUE;
1534     }
1535
1536   /* Handle the special case of an old common symbol merging with a
1537      new symbol which looks like a common symbol in a shared object.
1538      We change *PSEC and *PVALUE to make the new symbol look like a
1539      common symbol, and let _bfd_generic_link_add_one_symbol do the
1540      right thing.  */
1541
1542   if (newdyncommon
1543       && h->root.type == bfd_link_hash_common)
1544     {
1545       *override = TRUE;
1546       newdef = FALSE;
1547       newdyncommon = FALSE;
1548       *pvalue = sym->st_size;
1549       *psec = sec = bed->common_section (oldsec);
1550       *size_change_ok = TRUE;
1551     }
1552
1553   /* Skip weak definitions of symbols that are already defined.  */
1554   if (newdef && olddef && newweak)
1555     {
1556       /* Don't skip new non-IR weak syms.  */
1557       if (!(oldbfd != NULL
1558             && (oldbfd->flags & BFD_PLUGIN) != 0
1559             && (abfd->flags & BFD_PLUGIN) == 0))
1560         {
1561           newdef = FALSE;
1562           *skip = TRUE;
1563         }
1564
1565       /* Merge st_other.  If the symbol already has a dynamic index,
1566          but visibility says it should not be visible, turn it into a
1567          local symbol.  */
1568       elf_merge_st_other (abfd, h, sym, sec, newdef, newdyn);
1569       if (h->dynindx != -1)
1570         switch (ELF_ST_VISIBILITY (h->other))
1571           {
1572           case STV_INTERNAL:
1573           case STV_HIDDEN:
1574             (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1575             break;
1576           }
1577     }
1578
1579   /* If the old symbol is from a dynamic object, and the new symbol is
1580      a definition which is not from a dynamic object, then the new
1581      symbol overrides the old symbol.  Symbols from regular files
1582      always take precedence over symbols from dynamic objects, even if
1583      they are defined after the dynamic object in the link.
1584
1585      As above, we again permit a common symbol in a regular object to
1586      override a definition in a shared object if the shared object
1587      symbol is a function or is weak.  */
1588
1589   flip = NULL;
1590   if (!newdyn
1591       && (newdef
1592           || (bfd_is_com_section (sec)
1593               && (oldweak || oldfunc)))
1594       && olddyn
1595       && olddef
1596       && h->def_dynamic)
1597     {
1598       /* Change the hash table entry to undefined, and let
1599          _bfd_generic_link_add_one_symbol do the right thing with the
1600          new definition.  */
1601
1602       h->root.type = bfd_link_hash_undefined;
1603       h->root.u.undef.abfd = h->root.u.def.section->owner;
1604       *size_change_ok = TRUE;
1605
1606       olddef = FALSE;
1607       olddyncommon = FALSE;
1608
1609       /* We again permit a type change when a common symbol may be
1610          overriding a function.  */
1611
1612       if (bfd_is_com_section (sec))
1613         {
1614           if (oldfunc)
1615             {
1616               /* If a common symbol overrides a function, make sure
1617                  that it isn't defined dynamically nor has type
1618                  function.  */
1619               h->def_dynamic = 0;
1620               h->type = STT_NOTYPE;
1621             }
1622           *type_change_ok = TRUE;
1623         }
1624
1625       if (hi->root.type == bfd_link_hash_indirect)
1626         flip = hi;
1627       else
1628         /* This union may have been set to be non-NULL when this symbol
1629            was seen in a dynamic object.  We must force the union to be
1630            NULL, so that it is correct for a regular symbol.  */
1631         h->verinfo.vertree = NULL;
1632     }
1633
1634   /* Handle the special case of a new common symbol merging with an
1635      old symbol that looks like it might be a common symbol defined in
1636      a shared object.  Note that we have already handled the case in
1637      which a new common symbol should simply override the definition
1638      in the shared library.  */
1639
1640   if (! newdyn
1641       && bfd_is_com_section (sec)
1642       && olddyncommon)
1643     {
1644       /* It would be best if we could set the hash table entry to a
1645          common symbol, but we don't know what to use for the section
1646          or the alignment.  */
1647       (*info->callbacks->multiple_common) (info, &h->root, abfd,
1648                                            bfd_link_hash_common, sym->st_size);
1649
1650       /* If the presumed common symbol in the dynamic object is
1651          larger, pretend that the new symbol has its size.  */
1652
1653       if (h->size > *pvalue)
1654         *pvalue = h->size;
1655
1656       /* We need to remember the alignment required by the symbol
1657          in the dynamic object.  */
1658       BFD_ASSERT (pold_alignment);
1659       *pold_alignment = h->root.u.def.section->alignment_power;
1660
1661       olddef = FALSE;
1662       olddyncommon = FALSE;
1663
1664       h->root.type = bfd_link_hash_undefined;
1665       h->root.u.undef.abfd = h->root.u.def.section->owner;
1666
1667       *size_change_ok = TRUE;
1668       *type_change_ok = TRUE;
1669
1670       if (hi->root.type == bfd_link_hash_indirect)
1671         flip = hi;
1672       else
1673         h->verinfo.vertree = NULL;
1674     }
1675
1676   if (flip != NULL)
1677     {
1678       /* Handle the case where we had a versioned symbol in a dynamic
1679          library and now find a definition in a normal object.  In this
1680          case, we make the versioned symbol point to the normal one.  */
1681       flip->root.type = h->root.type;
1682       flip->root.u.undef.abfd = h->root.u.undef.abfd;
1683       h->root.type = bfd_link_hash_indirect;
1684       h->root.u.i.link = (struct bfd_link_hash_entry *) flip;
1685       (*bed->elf_backend_copy_indirect_symbol) (info, flip, h);
1686       if (h->def_dynamic)
1687         {
1688           h->def_dynamic = 0;
1689           flip->ref_dynamic = 1;
1690         }
1691     }
1692
1693   return TRUE;
1694 }
1695
1696 /* This function is called to create an indirect symbol from the
1697    default for the symbol with the default version if needed. The
1698    symbol is described by H, NAME, SYM, SEC, and VALUE.  We
1699    set DYNSYM if the new indirect symbol is dynamic.  */
1700
1701 static bfd_boolean
1702 _bfd_elf_add_default_symbol (bfd *abfd,
1703                              struct bfd_link_info *info,
1704                              struct elf_link_hash_entry *h,
1705                              const char *name,
1706                              Elf_Internal_Sym *sym,
1707                              asection *sec,
1708                              bfd_vma value,
1709                              bfd **poldbfd,
1710                              bfd_boolean *dynsym)
1711 {
1712   bfd_boolean type_change_ok;
1713   bfd_boolean size_change_ok;
1714   bfd_boolean skip;
1715   char *shortname;
1716   struct elf_link_hash_entry *hi;
1717   struct bfd_link_hash_entry *bh;
1718   const struct elf_backend_data *bed;
1719   bfd_boolean collect;
1720   bfd_boolean dynamic;
1721   bfd_boolean override;
1722   char *p;
1723   size_t len, shortlen;
1724   asection *tmp_sec;
1725   bfd_boolean matched;
1726
1727   if (h->versioned == unversioned || h->versioned == versioned_hidden)
1728     return TRUE;
1729
1730   /* If this symbol has a version, and it is the default version, we
1731      create an indirect symbol from the default name to the fully
1732      decorated name.  This will cause external references which do not
1733      specify a version to be bound to this version of the symbol.  */
1734   p = strchr (name, ELF_VER_CHR);
1735   if (h->versioned == unknown)
1736     {
1737       if (p == NULL)
1738         {
1739           h->versioned = unversioned;
1740           return TRUE;
1741         }
1742       else
1743         {
1744           if (p[1] != ELF_VER_CHR)
1745             {
1746               h->versioned = versioned_hidden;
1747               return TRUE;
1748             }
1749           else
1750             h->versioned = versioned;
1751         }
1752     }
1753   else
1754     {
1755       /* PR ld/19073: We may see an unversioned definition after the
1756          default version.  */
1757       if (p == NULL)
1758         return TRUE;
1759     }
1760
1761   bed = get_elf_backend_data (abfd);
1762   collect = bed->collect;
1763   dynamic = (abfd->flags & DYNAMIC) != 0;
1764
1765   shortlen = p - name;
1766   shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1);
1767   if (shortname == NULL)
1768     return FALSE;
1769   memcpy (shortname, name, shortlen);
1770   shortname[shortlen] = '\0';
1771
1772   /* We are going to create a new symbol.  Merge it with any existing
1773      symbol with this name.  For the purposes of the merge, act as
1774      though we were defining the symbol we just defined, although we
1775      actually going to define an indirect symbol.  */
1776   type_change_ok = FALSE;
1777   size_change_ok = FALSE;
1778   matched = TRUE;
1779   tmp_sec = sec;
1780   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
1781                               &hi, poldbfd, NULL, NULL, &skip, &override,
1782                               &type_change_ok, &size_change_ok, &matched))
1783     return FALSE;
1784
1785   if (skip)
1786     goto nondefault;
1787
1788   if (hi->def_regular)
1789     {
1790       /* If the undecorated symbol will have a version added by a
1791          script different to H, then don't indirect to/from the
1792          undecorated symbol.  This isn't ideal because we may not yet
1793          have seen symbol versions, if given by a script on the
1794          command line rather than via --version-script.  */
1795       if (hi->verinfo.vertree == NULL && info->version_info != NULL)
1796         {
1797           bfd_boolean hide;
1798
1799           hi->verinfo.vertree
1800             = bfd_find_version_for_sym (info->version_info,
1801                                         hi->root.root.string, &hide);
1802           if (hi->verinfo.vertree != NULL && hide)
1803             {
1804               (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
1805               goto nondefault;
1806             }
1807         }
1808       if (hi->verinfo.vertree != NULL
1809           && strcmp (p + 1 + (p[1] == '@'), hi->verinfo.vertree->name) != 0)
1810         goto nondefault;
1811     }
1812
1813   if (! override)
1814     {
1815       /* Add the default symbol if not performing a relocatable link.  */
1816       if (! bfd_link_relocatable (info))
1817         {
1818           bh = &hi->root;
1819           if (! (_bfd_generic_link_add_one_symbol
1820                  (info, abfd, shortname, BSF_INDIRECT,
1821                   bfd_ind_section_ptr,
1822                   0, name, FALSE, collect, &bh)))
1823             return FALSE;
1824           hi = (struct elf_link_hash_entry *) bh;
1825         }
1826     }
1827   else
1828     {
1829       /* In this case the symbol named SHORTNAME is overriding the
1830          indirect symbol we want to add.  We were planning on making
1831          SHORTNAME an indirect symbol referring to NAME.  SHORTNAME
1832          is the name without a version.  NAME is the fully versioned
1833          name, and it is the default version.
1834
1835          Overriding means that we already saw a definition for the
1836          symbol SHORTNAME in a regular object, and it is overriding
1837          the symbol defined in the dynamic object.
1838
1839          When this happens, we actually want to change NAME, the
1840          symbol we just added, to refer to SHORTNAME.  This will cause
1841          references to NAME in the shared object to become references
1842          to SHORTNAME in the regular object.  This is what we expect
1843          when we override a function in a shared object: that the
1844          references in the shared object will be mapped to the
1845          definition in the regular object.  */
1846
1847       while (hi->root.type == bfd_link_hash_indirect
1848              || hi->root.type == bfd_link_hash_warning)
1849         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1850
1851       h->root.type = bfd_link_hash_indirect;
1852       h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1853       if (h->def_dynamic)
1854         {
1855           h->def_dynamic = 0;
1856           hi->ref_dynamic = 1;
1857           if (hi->ref_regular
1858               || hi->def_regular)
1859             {
1860               if (! bfd_elf_link_record_dynamic_symbol (info, hi))
1861                 return FALSE;
1862             }
1863         }
1864
1865       /* Now set HI to H, so that the following code will set the
1866          other fields correctly.  */
1867       hi = h;
1868     }
1869
1870   /* Check if HI is a warning symbol.  */
1871   if (hi->root.type == bfd_link_hash_warning)
1872     hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1873
1874   /* If there is a duplicate definition somewhere, then HI may not
1875      point to an indirect symbol.  We will have reported an error to
1876      the user in that case.  */
1877
1878   if (hi->root.type == bfd_link_hash_indirect)
1879     {
1880       struct elf_link_hash_entry *ht;
1881
1882       ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
1883       (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi);
1884
1885       /* A reference to the SHORTNAME symbol from a dynamic library
1886          will be satisfied by the versioned symbol at runtime.  In
1887          effect, we have a reference to the versioned symbol.  */
1888       ht->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
1889       hi->dynamic_def |= ht->dynamic_def;
1890
1891       /* See if the new flags lead us to realize that the symbol must
1892          be dynamic.  */
1893       if (! *dynsym)
1894         {
1895           if (! dynamic)
1896             {
1897               if (! bfd_link_executable (info)
1898                   || hi->def_dynamic
1899                   || hi->ref_dynamic)
1900                 *dynsym = TRUE;
1901             }
1902           else
1903             {
1904               if (hi->ref_regular)
1905                 *dynsym = TRUE;
1906             }
1907         }
1908     }
1909
1910   /* We also need to define an indirection from the nondefault version
1911      of the symbol.  */
1912
1913 nondefault:
1914   len = strlen (name);
1915   shortname = (char *) bfd_hash_allocate (&info->hash->table, len);
1916   if (shortname == NULL)
1917     return FALSE;
1918   memcpy (shortname, name, shortlen);
1919   memcpy (shortname + shortlen, p + 1, len - shortlen);
1920
1921   /* Once again, merge with any existing symbol.  */
1922   type_change_ok = FALSE;
1923   size_change_ok = FALSE;
1924   tmp_sec = sec;
1925   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
1926                               &hi, poldbfd, NULL, NULL, &skip, &override,
1927                               &type_change_ok, &size_change_ok, &matched))
1928     return FALSE;
1929
1930   if (skip)
1931     return TRUE;
1932
1933   if (override)
1934     {
1935       /* Here SHORTNAME is a versioned name, so we don't expect to see
1936          the type of override we do in the case above unless it is
1937          overridden by a versioned definition.  */
1938       if (hi->root.type != bfd_link_hash_defined
1939           && hi->root.type != bfd_link_hash_defweak)
1940         _bfd_error_handler
1941           (_("%B: unexpected redefinition of indirect versioned symbol `%s'"),
1942            abfd, shortname);
1943     }
1944   else
1945     {
1946       bh = &hi->root;
1947       if (! (_bfd_generic_link_add_one_symbol
1948              (info, abfd, shortname, BSF_INDIRECT,
1949               bfd_ind_section_ptr, 0, name, FALSE, collect, &bh)))
1950         return FALSE;
1951       hi = (struct elf_link_hash_entry *) bh;
1952
1953       /* If there is a duplicate definition somewhere, then HI may not
1954          point to an indirect symbol.  We will have reported an error
1955          to the user in that case.  */
1956
1957       if (hi->root.type == bfd_link_hash_indirect)
1958         {
1959           (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
1960           h->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
1961           hi->dynamic_def |= h->dynamic_def;
1962
1963           /* See if the new flags lead us to realize that the symbol
1964              must be dynamic.  */
1965           if (! *dynsym)
1966             {
1967               if (! dynamic)
1968                 {
1969                   if (! bfd_link_executable (info)
1970                       || hi->ref_dynamic)
1971                     *dynsym = TRUE;
1972                 }
1973               else
1974                 {
1975                   if (hi->ref_regular)
1976                     *dynsym = TRUE;
1977                 }
1978             }
1979         }
1980     }
1981
1982   return TRUE;
1983 }
1984 \f
1985 /* This routine is used to export all defined symbols into the dynamic
1986    symbol table.  It is called via elf_link_hash_traverse.  */
1987
1988 static bfd_boolean
1989 _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
1990 {
1991   struct elf_info_failed *eif = (struct elf_info_failed *) data;
1992
1993   /* Ignore indirect symbols.  These are added by the versioning code.  */
1994   if (h->root.type == bfd_link_hash_indirect)
1995     return TRUE;
1996
1997   /* Ignore this if we won't export it.  */
1998   if (!eif->info->export_dynamic && !h->dynamic)
1999     return TRUE;
2000
2001   if (h->dynindx == -1
2002       && (h->def_regular || h->ref_regular)
2003       && ! bfd_hide_sym_by_version (eif->info->version_info,
2004                                     h->root.root.string))
2005     {
2006       if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2007         {
2008           eif->failed = TRUE;
2009           return FALSE;
2010         }
2011     }
2012
2013   return TRUE;
2014 }
2015 \f
2016 /* Look through the symbols which are defined in other shared
2017    libraries and referenced here.  Update the list of version
2018    dependencies.  This will be put into the .gnu.version_r section.
2019    This function is called via elf_link_hash_traverse.  */
2020
2021 static bfd_boolean
2022 _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h,
2023                                          void *data)
2024 {
2025   struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
2026   Elf_Internal_Verneed *t;
2027   Elf_Internal_Vernaux *a;
2028   bfd_size_type amt;
2029
2030   /* We only care about symbols defined in shared objects with version
2031      information.  */
2032   if (!h->def_dynamic
2033       || h->def_regular
2034       || h->dynindx == -1
2035       || h->verinfo.verdef == NULL
2036       || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
2037           & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
2038     return TRUE;
2039
2040   /* See if we already know about this version.  */
2041   for (t = elf_tdata (rinfo->info->output_bfd)->verref;
2042        t != NULL;
2043        t = t->vn_nextref)
2044     {
2045       if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
2046         continue;
2047
2048       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2049         if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
2050           return TRUE;
2051
2052       break;
2053     }
2054
2055   /* This is a new version.  Add it to tree we are building.  */
2056
2057   if (t == NULL)
2058     {
2059       amt = sizeof *t;
2060       t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt);
2061       if (t == NULL)
2062         {
2063           rinfo->failed = TRUE;
2064           return FALSE;
2065         }
2066
2067       t->vn_bfd = h->verinfo.verdef->vd_bfd;
2068       t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref;
2069       elf_tdata (rinfo->info->output_bfd)->verref = t;
2070     }
2071
2072   amt = sizeof *a;
2073   a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
2074   if (a == NULL)
2075     {
2076       rinfo->failed = TRUE;
2077       return FALSE;
2078     }
2079
2080   /* Note that we are copying a string pointer here, and testing it
2081      above.  If bfd_elf_string_from_elf_section is ever changed to
2082      discard the string data when low in memory, this will have to be
2083      fixed.  */
2084   a->vna_nodename = h->verinfo.verdef->vd_nodename;
2085
2086   a->vna_flags = h->verinfo.verdef->vd_flags;
2087   a->vna_nextptr = t->vn_auxptr;
2088
2089   h->verinfo.verdef->vd_exp_refno = rinfo->vers;
2090   ++rinfo->vers;
2091
2092   a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
2093
2094   t->vn_auxptr = a;
2095
2096   return TRUE;
2097 }
2098
2099 /* Figure out appropriate versions for all the symbols.  We may not
2100    have the version number script until we have read all of the input
2101    files, so until that point we don't know which symbols should be
2102    local.  This function is called via elf_link_hash_traverse.  */
2103
2104 static bfd_boolean
2105 _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
2106 {
2107   struct elf_info_failed *sinfo;
2108   struct bfd_link_info *info;
2109   const struct elf_backend_data *bed;
2110   struct elf_info_failed eif;
2111   char *p;
2112
2113   sinfo = (struct elf_info_failed *) data;
2114   info = sinfo->info;
2115
2116   /* Fix the symbol flags.  */
2117   eif.failed = FALSE;
2118   eif.info = info;
2119   if (! _bfd_elf_fix_symbol_flags (h, &eif))
2120     {
2121       if (eif.failed)
2122         sinfo->failed = TRUE;
2123       return FALSE;
2124     }
2125
2126   /* We only need version numbers for symbols defined in regular
2127      objects.  */
2128   if (!h->def_regular)
2129     return TRUE;
2130
2131   bed = get_elf_backend_data (info->output_bfd);
2132   p = strchr (h->root.root.string, ELF_VER_CHR);
2133   if (p != NULL && h->verinfo.vertree == NULL)
2134     {
2135       struct bfd_elf_version_tree *t;
2136
2137       ++p;
2138       if (*p == ELF_VER_CHR)
2139         ++p;
2140
2141       /* If there is no version string, we can just return out.  */
2142       if (*p == '\0')
2143         return TRUE;
2144
2145       /* Look for the version.  If we find it, it is no longer weak.  */
2146       for (t = sinfo->info->version_info; t != NULL; t = t->next)
2147         {
2148           if (strcmp (t->name, p) == 0)
2149             {
2150               size_t len;
2151               char *alc;
2152               struct bfd_elf_version_expr *d;
2153
2154               len = p - h->root.root.string;
2155               alc = (char *) bfd_malloc (len);
2156               if (alc == NULL)
2157                 {
2158                   sinfo->failed = TRUE;
2159                   return FALSE;
2160                 }
2161               memcpy (alc, h->root.root.string, len - 1);
2162               alc[len - 1] = '\0';
2163               if (alc[len - 2] == ELF_VER_CHR)
2164                 alc[len - 2] = '\0';
2165
2166               h->verinfo.vertree = t;
2167               t->used = TRUE;
2168               d = NULL;
2169
2170               if (t->globals.list != NULL)
2171                 d = (*t->match) (&t->globals, NULL, alc);
2172
2173               /* See if there is anything to force this symbol to
2174                  local scope.  */
2175               if (d == NULL && t->locals.list != NULL)
2176                 {
2177                   d = (*t->match) (&t->locals, NULL, alc);
2178                   if (d != NULL
2179                       && h->dynindx != -1
2180                       && ! info->export_dynamic)
2181                     (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2182                 }
2183
2184               free (alc);
2185               break;
2186             }
2187         }
2188
2189       /* If we are building an application, we need to create a
2190          version node for this version.  */
2191       if (t == NULL && bfd_link_executable (info))
2192         {
2193           struct bfd_elf_version_tree **pp;
2194           int version_index;
2195
2196           /* If we aren't going to export this symbol, we don't need
2197              to worry about it.  */
2198           if (h->dynindx == -1)
2199             return TRUE;
2200
2201           t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd,
2202                                                           sizeof *t);
2203           if (t == NULL)
2204             {
2205               sinfo->failed = TRUE;
2206               return FALSE;
2207             }
2208
2209           t->name = p;
2210           t->name_indx = (unsigned int) -1;
2211           t->used = TRUE;
2212
2213           version_index = 1;
2214           /* Don't count anonymous version tag.  */
2215           if (sinfo->info->version_info != NULL
2216               && sinfo->info->version_info->vernum == 0)
2217             version_index = 0;
2218           for (pp = &sinfo->info->version_info;
2219                *pp != NULL;
2220                pp = &(*pp)->next)
2221             ++version_index;
2222           t->vernum = version_index;
2223
2224           *pp = t;
2225
2226           h->verinfo.vertree = t;
2227         }
2228       else if (t == NULL)
2229         {
2230           /* We could not find the version for a symbol when
2231              generating a shared archive.  Return an error.  */
2232           _bfd_error_handler
2233             (_("%B: version node not found for symbol %s"),
2234              info->output_bfd, h->root.root.string);
2235           bfd_set_error (bfd_error_bad_value);
2236           sinfo->failed = TRUE;
2237           return FALSE;
2238         }
2239     }
2240
2241   /* If we don't have a version for this symbol, see if we can find
2242      something.  */
2243   if (h->verinfo.vertree == NULL && sinfo->info->version_info != NULL)
2244     {
2245       bfd_boolean hide;
2246
2247       h->verinfo.vertree
2248         = bfd_find_version_for_sym (sinfo->info->version_info,
2249                                     h->root.root.string, &hide);
2250       if (h->verinfo.vertree != NULL && hide)
2251         (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2252     }
2253
2254   return TRUE;
2255 }
2256 \f
2257 /* Read and swap the relocs from the section indicated by SHDR.  This
2258    may be either a REL or a RELA section.  The relocations are
2259    translated into RELA relocations and stored in INTERNAL_RELOCS,
2260    which should have already been allocated to contain enough space.
2261    The EXTERNAL_RELOCS are a buffer where the external form of the
2262    relocations should be stored.
2263
2264    Returns FALSE if something goes wrong.  */
2265
2266 static bfd_boolean
2267 elf_link_read_relocs_from_section (bfd *abfd,
2268                                    asection *sec,
2269                                    Elf_Internal_Shdr *shdr,
2270                                    void *external_relocs,
2271                                    Elf_Internal_Rela *internal_relocs)
2272 {
2273   const struct elf_backend_data *bed;
2274   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
2275   const bfd_byte *erela;
2276   const bfd_byte *erelaend;
2277   Elf_Internal_Rela *irela;
2278   Elf_Internal_Shdr *symtab_hdr;
2279   size_t nsyms;
2280
2281   /* Position ourselves at the start of the section.  */
2282   if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
2283     return FALSE;
2284
2285   /* Read the relocations.  */
2286   if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
2287     return FALSE;
2288
2289   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2290   nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
2291
2292   bed = get_elf_backend_data (abfd);
2293
2294   /* Convert the external relocations to the internal format.  */
2295   if (shdr->sh_entsize == bed->s->sizeof_rel)
2296     swap_in = bed->s->swap_reloc_in;
2297   else if (shdr->sh_entsize == bed->s->sizeof_rela)
2298     swap_in = bed->s->swap_reloca_in;
2299   else
2300     {
2301       bfd_set_error (bfd_error_wrong_format);
2302       return FALSE;
2303     }
2304
2305   erela = (const bfd_byte *) external_relocs;
2306   erelaend = erela + shdr->sh_size;
2307   irela = internal_relocs;
2308   while (erela < erelaend)
2309     {
2310       bfd_vma r_symndx;
2311
2312       (*swap_in) (abfd, erela, irela);
2313       r_symndx = ELF32_R_SYM (irela->r_info);
2314       if (bed->s->arch_size == 64)
2315         r_symndx >>= 24;
2316       if (nsyms > 0)
2317         {
2318           if ((size_t) r_symndx >= nsyms)
2319             {
2320               _bfd_error_handler
2321                 (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)"
2322                    " for offset 0x%lx in section `%A'"),
2323                  abfd, sec,
2324                  (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset);
2325               bfd_set_error (bfd_error_bad_value);
2326               return FALSE;
2327             }
2328         }
2329       else if (r_symndx != STN_UNDEF)
2330         {
2331           _bfd_error_handler
2332             (_("%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A'"
2333                " when the object file has no symbol table"),
2334              abfd, sec,
2335              (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset);
2336           bfd_set_error (bfd_error_bad_value);
2337           return FALSE;
2338         }
2339       irela += bed->s->int_rels_per_ext_rel;
2340       erela += shdr->sh_entsize;
2341     }
2342
2343   return TRUE;
2344 }
2345
2346 /* Read and swap the relocs for a section O.  They may have been
2347    cached.  If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are
2348    not NULL, they are used as buffers to read into.  They are known to
2349    be large enough.  If the INTERNAL_RELOCS relocs argument is NULL,
2350    the return value is allocated using either malloc or bfd_alloc,
2351    according to the KEEP_MEMORY argument.  If O has two relocation
2352    sections (both REL and RELA relocations), then the REL_HDR
2353    relocations will appear first in INTERNAL_RELOCS, followed by the
2354    RELA_HDR relocations.  */
2355
2356 Elf_Internal_Rela *
2357 _bfd_elf_link_read_relocs (bfd *abfd,
2358                            asection *o,
2359                            void *external_relocs,
2360                            Elf_Internal_Rela *internal_relocs,
2361                            bfd_boolean keep_memory)
2362 {
2363   void *alloc1 = NULL;
2364   Elf_Internal_Rela *alloc2 = NULL;
2365   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2366   struct bfd_elf_section_data *esdo = elf_section_data (o);
2367   Elf_Internal_Rela *internal_rela_relocs;
2368
2369   if (esdo->relocs != NULL)
2370     return esdo->relocs;
2371
2372   if (o->reloc_count == 0)
2373     return NULL;
2374
2375   if (internal_relocs == NULL)
2376     {
2377       bfd_size_type size;
2378
2379       size = o->reloc_count;
2380       size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela);
2381       if (keep_memory)
2382         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
2383       else
2384         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
2385       if (internal_relocs == NULL)
2386         goto error_return;
2387     }
2388
2389   if (external_relocs == NULL)
2390     {
2391       bfd_size_type size = 0;
2392
2393       if (esdo->rel.hdr)
2394         size += esdo->rel.hdr->sh_size;
2395       if (esdo->rela.hdr)
2396         size += esdo->rela.hdr->sh_size;
2397
2398       alloc1 = bfd_malloc (size);
2399       if (alloc1 == NULL)
2400         goto error_return;
2401       external_relocs = alloc1;
2402     }
2403
2404   internal_rela_relocs = internal_relocs;
2405   if (esdo->rel.hdr)
2406     {
2407       if (!elf_link_read_relocs_from_section (abfd, o, esdo->rel.hdr,
2408                                               external_relocs,
2409                                               internal_relocs))
2410         goto error_return;
2411       external_relocs = (((bfd_byte *) external_relocs)
2412                          + esdo->rel.hdr->sh_size);
2413       internal_rela_relocs += (NUM_SHDR_ENTRIES (esdo->rel.hdr)
2414                                * bed->s->int_rels_per_ext_rel);
2415     }
2416
2417   if (esdo->rela.hdr
2418       && (!elf_link_read_relocs_from_section (abfd, o, esdo->rela.hdr,
2419                                               external_relocs,
2420                                               internal_rela_relocs)))
2421     goto error_return;
2422
2423   /* Cache the results for next time, if we can.  */
2424   if (keep_memory)
2425     esdo->relocs = internal_relocs;
2426
2427   if (alloc1 != NULL)
2428     free (alloc1);
2429
2430   /* Don't free alloc2, since if it was allocated we are passing it
2431      back (under the name of internal_relocs).  */
2432
2433   return internal_relocs;
2434
2435  error_return:
2436   if (alloc1 != NULL)
2437     free (alloc1);
2438   if (alloc2 != NULL)
2439     {
2440       if (keep_memory)
2441         bfd_release (abfd, alloc2);
2442       else
2443         free (alloc2);
2444     }
2445   return NULL;
2446 }
2447
2448 /* Compute the size of, and allocate space for, REL_HDR which is the
2449    section header for a section containing relocations for O.  */
2450
2451 static bfd_boolean
2452 _bfd_elf_link_size_reloc_section (bfd *abfd,
2453                                   struct bfd_elf_section_reloc_data *reldata)
2454 {
2455   Elf_Internal_Shdr *rel_hdr = reldata->hdr;
2456
2457   /* That allows us to calculate the size of the section.  */
2458   rel_hdr->sh_size = rel_hdr->sh_entsize * reldata->count;
2459
2460   /* The contents field must last into write_object_contents, so we
2461      allocate it with bfd_alloc rather than malloc.  Also since we
2462      cannot be sure that the contents will actually be filled in,
2463      we zero the allocated space.  */
2464   rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size);
2465   if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
2466     return FALSE;
2467
2468   if (reldata->hashes == NULL && reldata->count)
2469     {
2470       struct elf_link_hash_entry **p;
2471
2472       p = ((struct elf_link_hash_entry **)
2473            bfd_zmalloc (reldata->count * sizeof (*p)));
2474       if (p == NULL)
2475         return FALSE;
2476
2477       reldata->hashes = p;
2478     }
2479
2480   return TRUE;
2481 }
2482
2483 /* Copy the relocations indicated by the INTERNAL_RELOCS (which
2484    originated from the section given by INPUT_REL_HDR) to the
2485    OUTPUT_BFD.  */
2486
2487 bfd_boolean
2488 _bfd_elf_link_output_relocs (bfd *output_bfd,
2489                              asection *input_section,
2490                              Elf_Internal_Shdr *input_rel_hdr,
2491                              Elf_Internal_Rela *internal_relocs,
2492                              struct elf_link_hash_entry **rel_hash
2493                                ATTRIBUTE_UNUSED)
2494 {
2495   Elf_Internal_Rela *irela;
2496   Elf_Internal_Rela *irelaend;
2497   bfd_byte *erel;
2498   struct bfd_elf_section_reloc_data *output_reldata;
2499   asection *output_section;
2500   const struct elf_backend_data *bed;
2501   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
2502   struct bfd_elf_section_data *esdo;
2503
2504   output_section = input_section->output_section;
2505
2506   bed = get_elf_backend_data (output_bfd);
2507   esdo = elf_section_data (output_section);
2508   if (esdo->rel.hdr && esdo->rel.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2509     {
2510       output_reldata = &esdo->rel;
2511       swap_out = bed->s->swap_reloc_out;
2512     }
2513   else if (esdo->rela.hdr
2514            && esdo->rela.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2515     {
2516       output_reldata = &esdo->rela;
2517       swap_out = bed->s->swap_reloca_out;
2518     }
2519   else
2520     {
2521       _bfd_error_handler
2522         (_("%B: relocation size mismatch in %B section %A"),
2523          output_bfd, input_section->owner, input_section);
2524       bfd_set_error (bfd_error_wrong_format);
2525       return FALSE;
2526     }
2527
2528   erel = output_reldata->hdr->contents;
2529   erel += output_reldata->count * input_rel_hdr->sh_entsize;
2530   irela = internal_relocs;
2531   irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr)
2532                       * bed->s->int_rels_per_ext_rel);
2533   while (irela < irelaend)
2534     {
2535       (*swap_out) (output_bfd, irela, erel);
2536       irela += bed->s->int_rels_per_ext_rel;
2537       erel += input_rel_hdr->sh_entsize;
2538     }
2539
2540   /* Bump the counter, so that we know where to add the next set of
2541      relocations.  */
2542   output_reldata->count += NUM_SHDR_ENTRIES (input_rel_hdr);
2543
2544   return TRUE;
2545 }
2546 \f
2547 /* Make weak undefined symbols in PIE dynamic.  */
2548
2549 bfd_boolean
2550 _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info,
2551                                  struct elf_link_hash_entry *h)
2552 {
2553   if (bfd_link_pie (info)
2554       && h->dynindx == -1
2555       && h->root.type == bfd_link_hash_undefweak)
2556     return bfd_elf_link_record_dynamic_symbol (info, h);
2557
2558   return TRUE;
2559 }
2560
2561 /* Fix up the flags for a symbol.  This handles various cases which
2562    can only be fixed after all the input files are seen.  This is
2563    currently called by both adjust_dynamic_symbol and
2564    assign_sym_version, which is unnecessary but perhaps more robust in
2565    the face of future changes.  */
2566
2567 static bfd_boolean
2568 _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
2569                            struct elf_info_failed *eif)
2570 {
2571   const struct elf_backend_data *bed;
2572
2573   /* If this symbol was mentioned in a non-ELF file, try to set
2574      DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
2575      permit a non-ELF file to correctly refer to a symbol defined in
2576      an ELF dynamic object.  */
2577   if (h->non_elf)
2578     {
2579       while (h->root.type == bfd_link_hash_indirect)
2580         h = (struct elf_link_hash_entry *) h->root.u.i.link;
2581
2582       if (h->root.type != bfd_link_hash_defined
2583           && h->root.type != bfd_link_hash_defweak)
2584         {
2585           h->ref_regular = 1;
2586           h->ref_regular_nonweak = 1;
2587         }
2588       else
2589         {
2590           if (h->root.u.def.section->owner != NULL
2591               && (bfd_get_flavour (h->root.u.def.section->owner)
2592                   == bfd_target_elf_flavour))
2593             {
2594               h->ref_regular = 1;
2595               h->ref_regular_nonweak = 1;
2596             }
2597           else
2598             h->def_regular = 1;
2599         }
2600
2601       if (h->dynindx == -1
2602           && (h->def_dynamic
2603               || h->ref_dynamic))
2604         {
2605           if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2606             {
2607               eif->failed = TRUE;
2608               return FALSE;
2609             }
2610         }
2611     }
2612   else
2613     {
2614       /* Unfortunately, NON_ELF is only correct if the symbol
2615          was first seen in a non-ELF file.  Fortunately, if the symbol
2616          was first seen in an ELF file, we're probably OK unless the
2617          symbol was defined in a non-ELF file.  Catch that case here.
2618          FIXME: We're still in trouble if the symbol was first seen in
2619          a dynamic object, and then later in a non-ELF regular object.  */
2620       if ((h->root.type == bfd_link_hash_defined
2621            || h->root.type == bfd_link_hash_defweak)
2622           && !h->def_regular
2623           && (h->root.u.def.section->owner != NULL
2624               ? (bfd_get_flavour (h->root.u.def.section->owner)
2625                  != bfd_target_elf_flavour)
2626               : (bfd_is_abs_section (h->root.u.def.section)
2627                  && !h->def_dynamic)))
2628         h->def_regular = 1;
2629     }
2630
2631   /* Backend specific symbol fixup.  */
2632   bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
2633   if (bed->elf_backend_fixup_symbol
2634       && !(*bed->elf_backend_fixup_symbol) (eif->info, h))
2635     return FALSE;
2636
2637   /* If this is a final link, and the symbol was defined as a common
2638      symbol in a regular object file, and there was no definition in
2639      any dynamic object, then the linker will have allocated space for
2640      the symbol in a common section but the DEF_REGULAR
2641      flag will not have been set.  */
2642   if (h->root.type == bfd_link_hash_defined
2643       && !h->def_regular
2644       && h->ref_regular
2645       && !h->def_dynamic
2646       && (h->root.u.def.section->owner->flags & (DYNAMIC | BFD_PLUGIN)) == 0)
2647     h->def_regular = 1;
2648
2649   /* If -Bsymbolic was used (which means to bind references to global
2650      symbols to the definition within the shared object), and this
2651      symbol was defined in a regular object, then it actually doesn't
2652      need a PLT entry.  Likewise, if the symbol has non-default
2653      visibility.  If the symbol has hidden or internal visibility, we
2654      will force it local.  */
2655   if (h->needs_plt
2656       && bfd_link_pic (eif->info)
2657       && is_elf_hash_table (eif->info->hash)
2658       && (SYMBOLIC_BIND (eif->info, h)
2659           || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
2660       && h->def_regular)
2661     {
2662       bfd_boolean force_local;
2663
2664       force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
2665                      || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
2666       (*bed->elf_backend_hide_symbol) (eif->info, h, force_local);
2667     }
2668
2669   /* If a weak undefined symbol has non-default visibility, we also
2670      hide it from the dynamic linker.  */
2671   if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2672       && h->root.type == bfd_link_hash_undefweak)
2673     (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2674
2675   /* If this is a weak defined symbol in a dynamic object, and we know
2676      the real definition in the dynamic object, copy interesting flags
2677      over to the real definition.  */
2678   if (h->u.weakdef != NULL)
2679     {
2680       /* If the real definition is defined by a regular object file,
2681          don't do anything special.  See the longer description in
2682          _bfd_elf_adjust_dynamic_symbol, below.  */
2683       if (h->u.weakdef->def_regular)
2684         h->u.weakdef = NULL;
2685       else
2686         {
2687           struct elf_link_hash_entry *weakdef = h->u.weakdef;
2688
2689           while (h->root.type == bfd_link_hash_indirect)
2690             h = (struct elf_link_hash_entry *) h->root.u.i.link;
2691
2692           BFD_ASSERT (h->root.type == bfd_link_hash_defined
2693                       || h->root.type == bfd_link_hash_defweak);
2694           BFD_ASSERT (weakdef->def_dynamic);
2695           BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
2696                       || weakdef->root.type == bfd_link_hash_defweak);
2697           (*bed->elf_backend_copy_indirect_symbol) (eif->info, weakdef, h);
2698         }
2699     }
2700
2701   return TRUE;
2702 }
2703
2704 /* Make the backend pick a good value for a dynamic symbol.  This is
2705    called via elf_link_hash_traverse, and also calls itself
2706    recursively.  */
2707
2708 static bfd_boolean
2709 _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
2710 {
2711   struct elf_info_failed *eif = (struct elf_info_failed *) data;
2712   bfd *dynobj;
2713   const struct elf_backend_data *bed;
2714
2715   if (! is_elf_hash_table (eif->info->hash))
2716     return FALSE;
2717
2718   /* Ignore indirect symbols.  These are added by the versioning code.  */
2719   if (h->root.type == bfd_link_hash_indirect)
2720     return TRUE;
2721
2722   /* Fix the symbol flags.  */
2723   if (! _bfd_elf_fix_symbol_flags (h, eif))
2724     return FALSE;
2725
2726   /* If this symbol does not require a PLT entry, and it is not
2727      defined by a dynamic object, or is not referenced by a regular
2728      object, ignore it.  We do have to handle a weak defined symbol,
2729      even if no regular object refers to it, if we decided to add it
2730      to the dynamic symbol table.  FIXME: Do we normally need to worry
2731      about symbols which are defined by one dynamic object and
2732      referenced by another one?  */
2733   if (!h->needs_plt
2734       && h->type != STT_GNU_IFUNC
2735       && (h->def_regular
2736           || !h->def_dynamic
2737           || (!h->ref_regular
2738               && (h->u.weakdef == NULL || h->u.weakdef->dynindx == -1))))
2739     {
2740       h->plt = elf_hash_table (eif->info)->init_plt_offset;
2741       return TRUE;
2742     }
2743
2744   /* If we've already adjusted this symbol, don't do it again.  This
2745      can happen via a recursive call.  */
2746   if (h->dynamic_adjusted)
2747     return TRUE;
2748
2749   /* Don't look at this symbol again.  Note that we must set this
2750      after checking the above conditions, because we may look at a
2751      symbol once, decide not to do anything, and then get called
2752      recursively later after REF_REGULAR is set below.  */
2753   h->dynamic_adjusted = 1;
2754
2755   /* If this is a weak definition, and we know a real definition, and
2756      the real symbol is not itself defined by a regular object file,
2757      then get a good value for the real definition.  We handle the
2758      real symbol first, for the convenience of the backend routine.
2759
2760      Note that there is a confusing case here.  If the real definition
2761      is defined by a regular object file, we don't get the real symbol
2762      from the dynamic object, but we do get the weak symbol.  If the
2763      processor backend uses a COPY reloc, then if some routine in the
2764      dynamic object changes the real symbol, we will not see that
2765      change in the corresponding weak symbol.  This is the way other
2766      ELF linkers work as well, and seems to be a result of the shared
2767      library model.
2768
2769      I will clarify this issue.  Most SVR4 shared libraries define the
2770      variable _timezone and define timezone as a weak synonym.  The
2771      tzset call changes _timezone.  If you write
2772        extern int timezone;
2773        int _timezone = 5;
2774        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
2775      you might expect that, since timezone is a synonym for _timezone,
2776      the same number will print both times.  However, if the processor
2777      backend uses a COPY reloc, then actually timezone will be copied
2778      into your process image, and, since you define _timezone
2779      yourself, _timezone will not.  Thus timezone and _timezone will
2780      wind up at different memory locations.  The tzset call will set
2781      _timezone, leaving timezone unchanged.  */
2782
2783   if (h->u.weakdef != NULL)
2784     {
2785       /* If we get to this point, there is an implicit reference to
2786          H->U.WEAKDEF by a regular object file via the weak symbol H.  */
2787       h->u.weakdef->ref_regular = 1;
2788
2789       /* Ensure that the backend adjust_dynamic_symbol function sees
2790          H->U.WEAKDEF before H by recursively calling ourselves.  */
2791       if (! _bfd_elf_adjust_dynamic_symbol (h->u.weakdef, eif))
2792         return FALSE;
2793     }
2794
2795   /* If a symbol has no type and no size and does not require a PLT
2796      entry, then we are probably about to do the wrong thing here: we
2797      are probably going to create a COPY reloc for an empty object.
2798      This case can arise when a shared object is built with assembly
2799      code, and the assembly code fails to set the symbol type.  */
2800   if (h->size == 0
2801       && h->type == STT_NOTYPE
2802       && !h->needs_plt)
2803     _bfd_error_handler
2804       (_("warning: type and size of dynamic symbol `%s' are not defined"),
2805        h->root.root.string);
2806
2807   dynobj = elf_hash_table (eif->info)->dynobj;
2808   bed = get_elf_backend_data (dynobj);
2809
2810   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
2811     {
2812       eif->failed = TRUE;
2813       return FALSE;
2814     }
2815
2816   return TRUE;
2817 }
2818
2819 /* Adjust the dynamic symbol, H, for copy in the dynamic bss section,
2820    DYNBSS.  */
2821
2822 bfd_boolean
2823 _bfd_elf_adjust_dynamic_copy (struct bfd_link_info *info,
2824                               struct elf_link_hash_entry *h,
2825                               asection *dynbss)
2826 {
2827   unsigned int power_of_two;
2828   bfd_vma mask;
2829   asection *sec = h->root.u.def.section;
2830
2831   /* The section aligment of definition is the maximum alignment
2832      requirement of symbols defined in the section.  Since we don't
2833      know the symbol alignment requirement, we start with the
2834      maximum alignment and check low bits of the symbol address
2835      for the minimum alignment.  */
2836   power_of_two = bfd_get_section_alignment (sec->owner, sec);
2837   mask = ((bfd_vma) 1 << power_of_two) - 1;
2838   while ((h->root.u.def.value & mask) != 0)
2839     {
2840        mask >>= 1;
2841        --power_of_two;
2842     }
2843
2844   if (power_of_two > bfd_get_section_alignment (dynbss->owner,
2845                                                 dynbss))
2846     {
2847       /* Adjust the section alignment if needed.  */
2848       if (! bfd_set_section_alignment (dynbss->owner, dynbss,
2849                                        power_of_two))
2850         return FALSE;
2851     }
2852
2853   /* We make sure that the symbol will be aligned properly.  */
2854   dynbss->size = BFD_ALIGN (dynbss->size, mask + 1);
2855
2856   /* Define the symbol as being at this point in DYNBSS.  */
2857   h->root.u.def.section = dynbss;
2858   h->root.u.def.value = dynbss->size;
2859
2860   /* Increment the size of DYNBSS to make room for the symbol.  */
2861   dynbss->size += h->size;
2862
2863   /* No error if extern_protected_data is true.  */
2864   if (h->protected_def
2865       && (!info->extern_protected_data
2866           || (info->extern_protected_data < 0
2867               && !get_elf_backend_data (dynbss->owner)->extern_protected_data)))
2868     info->callbacks->einfo
2869       (_("%P: copy reloc against protected `%T' is dangerous\n"),
2870        h->root.root.string);
2871
2872   return TRUE;
2873 }
2874
2875 /* Adjust all external symbols pointing into SEC_MERGE sections
2876    to reflect the object merging within the sections.  */
2877
2878 static bfd_boolean
2879 _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
2880 {
2881   asection *sec;
2882
2883   if ((h->root.type == bfd_link_hash_defined
2884        || h->root.type == bfd_link_hash_defweak)
2885       && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
2886       && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
2887     {
2888       bfd *output_bfd = (bfd *) data;
2889
2890       h->root.u.def.value =
2891         _bfd_merged_section_offset (output_bfd,
2892                                     &h->root.u.def.section,
2893                                     elf_section_data (sec)->sec_info,
2894                                     h->root.u.def.value);
2895     }
2896
2897   return TRUE;
2898 }
2899
2900 /* Returns false if the symbol referred to by H should be considered
2901    to resolve local to the current module, and true if it should be
2902    considered to bind dynamically.  */
2903
2904 bfd_boolean
2905 _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
2906                            struct bfd_link_info *info,
2907                            bfd_boolean not_local_protected)
2908 {
2909   bfd_boolean binding_stays_local_p;
2910   const struct elf_backend_data *bed;
2911   struct elf_link_hash_table *hash_table;
2912
2913   if (h == NULL)
2914     return FALSE;
2915
2916   while (h->root.type == bfd_link_hash_indirect
2917          || h->root.type == bfd_link_hash_warning)
2918     h = (struct elf_link_hash_entry *) h->root.u.i.link;
2919
2920   /* If it was forced local, then clearly it's not dynamic.  */
2921   if (h->dynindx == -1)
2922     return FALSE;
2923   if (h->forced_local)
2924     return FALSE;
2925
2926   /* Identify the cases where name binding rules say that a
2927      visible symbol resolves locally.  */
2928   binding_stays_local_p = (bfd_link_executable (info)
2929                            || SYMBOLIC_BIND (info, h));
2930
2931   switch (ELF_ST_VISIBILITY (h->other))
2932     {
2933     case STV_INTERNAL:
2934     case STV_HIDDEN:
2935       return FALSE;
2936
2937     case STV_PROTECTED:
2938       hash_table = elf_hash_table (info);
2939       if (!is_elf_hash_table (hash_table))
2940         return FALSE;
2941
2942       bed = get_elf_backend_data (hash_table->dynobj);
2943
2944       /* Proper resolution for function pointer equality may require
2945          that these symbols perhaps be resolved dynamically, even though
2946          we should be resolving them to the current module.  */
2947       if (!not_local_protected || !bed->is_function_type (h->type))
2948         binding_stays_local_p = TRUE;
2949       break;
2950
2951     default:
2952       break;
2953     }
2954
2955   /* If it isn't defined locally, then clearly it's dynamic.  */
2956   if (!h->def_regular && !ELF_COMMON_DEF_P (h))
2957     return TRUE;
2958
2959   /* Otherwise, the symbol is dynamic if binding rules don't tell
2960      us that it remains local.  */
2961   return !binding_stays_local_p;
2962 }
2963
2964 /* Return true if the symbol referred to by H should be considered
2965    to resolve local to the current module, and false otherwise.  Differs
2966    from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
2967    undefined symbols.  The two functions are virtually identical except
2968    for the place where forced_local and dynindx == -1 are tested.  If
2969    either of those tests are true, _bfd_elf_dynamic_symbol_p will say
2970    the symbol is local, while _bfd_elf_symbol_refs_local_p will say
2971    the symbol is local only for defined symbols.
2972    It might seem that _bfd_elf_dynamic_symbol_p could be rewritten as
2973    !_bfd_elf_symbol_refs_local_p, except that targets differ in their
2974    treatment of undefined weak symbols.  For those that do not make
2975    undefined weak symbols dynamic, both functions may return false.  */
2976
2977 bfd_boolean
2978 _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
2979                               struct bfd_link_info *info,
2980                               bfd_boolean local_protected)
2981 {
2982   const struct elf_backend_data *bed;
2983   struct elf_link_hash_table *hash_table;
2984
2985   /* If it's a local sym, of course we resolve locally.  */
2986   if (h == NULL)
2987     return TRUE;
2988
2989   /* STV_HIDDEN or STV_INTERNAL ones must be local.  */
2990   if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
2991       || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
2992     return TRUE;
2993
2994   /* Common symbols that become definitions don't get the DEF_REGULAR
2995      flag set, so test it first, and don't bail out.  */
2996   if (ELF_COMMON_DEF_P (h))
2997     /* Do nothing.  */;
2998   /* If we don't have a definition in a regular file, then we can't
2999      resolve locally.  The sym is either undefined or dynamic.  */
3000   else if (!h->def_regular)
3001     return FALSE;
3002
3003   /* Forced local symbols resolve locally.  */
3004   if (h->forced_local)
3005     return TRUE;
3006
3007   /* As do non-dynamic symbols.  */
3008   if (h->dynindx == -1)
3009     return TRUE;
3010
3011   /* At this point, we know the symbol is defined and dynamic.  In an
3012      executable it must resolve locally, likewise when building symbolic
3013      shared libraries.  */
3014   if (bfd_link_executable (info) || SYMBOLIC_BIND (info, h))
3015     return TRUE;
3016
3017   /* Now deal with defined dynamic symbols in shared libraries.  Ones
3018      with default visibility might not resolve locally.  */
3019   if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
3020     return FALSE;
3021
3022   hash_table = elf_hash_table (info);
3023   if (!is_elf_hash_table (hash_table))
3024     return TRUE;
3025
3026   bed = get_elf_backend_data (hash_table->dynobj);
3027
3028   /* If extern_protected_data is false, STV_PROTECTED non-function
3029      symbols are local.  */
3030   if ((!info->extern_protected_data
3031        || (info->extern_protected_data < 0
3032            && !bed->extern_protected_data))
3033       && !bed->is_function_type (h->type))
3034     return TRUE;
3035
3036   /* Function pointer equality tests may require that STV_PROTECTED
3037      symbols be treated as dynamic symbols.  If the address of a
3038      function not defined in an executable is set to that function's
3039      plt entry in the executable, then the address of the function in
3040      a shared library must also be the plt entry in the executable.  */
3041   return local_protected;
3042 }
3043
3044 /* Caches some TLS segment info, and ensures that the TLS segment vma is
3045    aligned.  Returns the first TLS output section.  */
3046
3047 struct bfd_section *
3048 _bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
3049 {
3050   struct bfd_section *sec, *tls;
3051   unsigned int align = 0;
3052
3053   for (sec = obfd->sections; sec != NULL; sec = sec->next)
3054     if ((sec->flags & SEC_THREAD_LOCAL) != 0)
3055       break;
3056   tls = sec;
3057
3058   for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next)
3059     if (sec->alignment_power > align)
3060       align = sec->alignment_power;
3061
3062   elf_hash_table (info)->tls_sec = tls;
3063
3064   /* Ensure the alignment of the first section is the largest alignment,
3065      so that the tls segment starts aligned.  */
3066   if (tls != NULL)
3067     tls->alignment_power = align;
3068
3069   return tls;
3070 }
3071
3072 /* Return TRUE iff this is a non-common, definition of a non-function symbol.  */
3073 static bfd_boolean
3074 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
3075                                   Elf_Internal_Sym *sym)
3076 {
3077   const struct elf_backend_data *bed;
3078
3079   /* Local symbols do not count, but target specific ones might.  */
3080   if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
3081       && ELF_ST_BIND (sym->st_info) < STB_LOOS)
3082     return FALSE;
3083
3084   bed = get_elf_backend_data (abfd);
3085   /* Function symbols do not count.  */
3086   if (bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
3087     return FALSE;
3088
3089   /* If the section is undefined, then so is the symbol.  */
3090   if (sym->st_shndx == SHN_UNDEF)
3091     return FALSE;
3092
3093   /* If the symbol is defined in the common section, then
3094      it is a common definition and so does not count.  */
3095   if (bed->common_definition (sym))
3096     return FALSE;
3097
3098   /* If the symbol is in a target specific section then we
3099      must rely upon the backend to tell us what it is.  */
3100   if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
3101     /* FIXME - this function is not coded yet:
3102
3103        return _bfd_is_global_symbol_definition (abfd, sym);
3104
3105        Instead for now assume that the definition is not global,
3106        Even if this is wrong, at least the linker will behave
3107        in the same way that it used to do.  */
3108     return FALSE;
3109
3110   return TRUE;
3111 }
3112
3113 /* Search the symbol table of the archive element of the archive ABFD
3114    whose archive map contains a mention of SYMDEF, and determine if
3115    the symbol is defined in this element.  */
3116 static bfd_boolean
3117 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
3118 {
3119   Elf_Internal_Shdr * hdr;
3120   size_t symcount;
3121   size_t extsymcount;
3122   size_t extsymoff;
3123   Elf_Internal_Sym *isymbuf;
3124   Elf_Internal_Sym *isym;
3125   Elf_Internal_Sym *isymend;
3126   bfd_boolean result;
3127
3128   abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
3129   if (abfd == NULL)
3130     return FALSE;
3131
3132   if (! bfd_check_format (abfd, bfd_object))
3133     return FALSE;
3134
3135   /* Select the appropriate symbol table.  If we don't know if the
3136      object file is an IR object, give linker LTO plugin a chance to
3137      get the correct symbol table.  */
3138   if (abfd->plugin_format == bfd_plugin_yes
3139 #if BFD_SUPPORTS_PLUGINS
3140       || (abfd->plugin_format == bfd_plugin_unknown
3141           && bfd_link_plugin_object_p (abfd))
3142 #endif
3143       )
3144     {
3145       /* Use the IR symbol table if the object has been claimed by
3146          plugin.  */
3147       abfd = abfd->plugin_dummy_bfd;
3148       hdr = &elf_tdata (abfd)->symtab_hdr;
3149     }
3150   else if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
3151     hdr = &elf_tdata (abfd)->symtab_hdr;
3152   else
3153     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3154
3155   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3156
3157   /* The sh_info field of the symtab header tells us where the
3158      external symbols start.  We don't care about the local symbols.  */
3159   if (elf_bad_symtab (abfd))
3160     {
3161       extsymcount = symcount;
3162       extsymoff = 0;
3163     }
3164   else
3165     {
3166       extsymcount = symcount - hdr->sh_info;
3167       extsymoff = hdr->sh_info;
3168     }
3169
3170   if (extsymcount == 0)
3171     return FALSE;
3172
3173   /* Read in the symbol table.  */
3174   isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3175                                   NULL, NULL, NULL);
3176   if (isymbuf == NULL)
3177     return FALSE;
3178
3179   /* Scan the symbol table looking for SYMDEF.  */
3180   result = FALSE;
3181   for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
3182     {
3183       const char *name;
3184
3185       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3186                                               isym->st_name);
3187       if (name == NULL)
3188         break;
3189
3190       if (strcmp (name, symdef->name) == 0)
3191         {
3192           result = is_global_data_symbol_definition (abfd, isym);
3193           break;
3194         }
3195     }
3196
3197   free (isymbuf);
3198
3199   return result;
3200 }
3201 \f
3202 /* Add an entry to the .dynamic table.  */
3203
3204 bfd_boolean
3205 _bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
3206                             bfd_vma tag,
3207                             bfd_vma val)
3208 {
3209   struct elf_link_hash_table *hash_table;
3210   const struct elf_backend_data *bed;
3211   asection *s;
3212   bfd_size_type newsize;
3213   bfd_byte *newcontents;
3214   Elf_Internal_Dyn dyn;
3215
3216   hash_table = elf_hash_table (info);
3217   if (! is_elf_hash_table (hash_table))
3218     return FALSE;
3219
3220   bed = get_elf_backend_data (hash_table->dynobj);
3221   s = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
3222   BFD_ASSERT (s != NULL);
3223
3224   newsize = s->size + bed->s->sizeof_dyn;
3225   newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
3226   if (newcontents == NULL)
3227     return FALSE;
3228
3229   dyn.d_tag = tag;
3230   dyn.d_un.d_val = val;
3231   bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size);
3232
3233   s->size = newsize;
3234   s->contents = newcontents;
3235
3236   return TRUE;
3237 }
3238
3239 /* Add a DT_NEEDED entry for this dynamic object if DO_IT is true,
3240    otherwise just check whether one already exists.  Returns -1 on error,
3241    1 if a DT_NEEDED tag already exists, and 0 on success.  */
3242
3243 static int
3244 elf_add_dt_needed_tag (bfd *abfd,
3245                        struct bfd_link_info *info,
3246                        const char *soname,
3247                        bfd_boolean do_it)
3248 {
3249   struct elf_link_hash_table *hash_table;
3250   size_t strindex;
3251
3252   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
3253     return -1;
3254
3255   hash_table = elf_hash_table (info);
3256   strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE);
3257   if (strindex == (size_t) -1)
3258     return -1;
3259
3260   if (_bfd_elf_strtab_refcount (hash_table->dynstr, strindex) != 1)
3261     {
3262       asection *sdyn;
3263       const struct elf_backend_data *bed;
3264       bfd_byte *extdyn;
3265
3266       bed = get_elf_backend_data (hash_table->dynobj);
3267       sdyn = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
3268       if (sdyn != NULL)
3269         for (extdyn = sdyn->contents;
3270              extdyn < sdyn->contents + sdyn->size;
3271              extdyn += bed->s->sizeof_dyn)
3272           {
3273             Elf_Internal_Dyn dyn;
3274
3275             bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn);
3276             if (dyn.d_tag == DT_NEEDED
3277                 && dyn.d_un.d_val == strindex)
3278               {
3279                 _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3280                 return 1;
3281               }
3282           }
3283     }
3284
3285   if (do_it)
3286     {
3287       if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
3288         return -1;
3289
3290       if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
3291         return -1;
3292     }
3293   else
3294     /* We were just checking for existence of the tag.  */
3295     _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3296
3297   return 0;
3298 }
3299
3300 /* Return true if SONAME is on the needed list between NEEDED and STOP
3301    (or the end of list if STOP is NULL), and needed by a library that
3302    will be loaded.  */
3303
3304 static bfd_boolean
3305 on_needed_list (const char *soname,
3306                 struct bfd_link_needed_list *needed,
3307                 struct bfd_link_needed_list *stop)
3308 {
3309   struct bfd_link_needed_list *look;
3310   for (look = needed; look != stop; look = look->next)
3311     if (strcmp (soname, look->name) == 0
3312         && ((elf_dyn_lib_class (look->by) & DYN_AS_NEEDED) == 0
3313             /* If needed by a library that itself is not directly
3314                needed, recursively check whether that library is
3315                indirectly needed.  Since we add DT_NEEDED entries to
3316                the end of the list, library dependencies appear after
3317                the library.  Therefore search prior to the current
3318                LOOK, preventing possible infinite recursion.  */
3319             || on_needed_list (elf_dt_name (look->by), needed, look)))
3320       return TRUE;
3321
3322   return FALSE;
3323 }
3324
3325 /* Sort symbol by value, section, and size.  */
3326 static int
3327 elf_sort_symbol (const void *arg1, const void *arg2)
3328 {
3329   const struct elf_link_hash_entry *h1;
3330   const struct elf_link_hash_entry *h2;
3331   bfd_signed_vma vdiff;
3332
3333   h1 = *(const struct elf_link_hash_entry **) arg1;
3334   h2 = *(const struct elf_link_hash_entry **) arg2;
3335   vdiff = h1->root.u.def.value - h2->root.u.def.value;
3336   if (vdiff != 0)
3337     return vdiff > 0 ? 1 : -1;
3338   else
3339     {
3340       int sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id;
3341       if (sdiff != 0)
3342         return sdiff > 0 ? 1 : -1;
3343     }
3344   vdiff = h1->size - h2->size;
3345   return vdiff == 0 ? 0 : vdiff > 0 ? 1 : -1;
3346 }
3347
3348 /* This function is used to adjust offsets into .dynstr for
3349    dynamic symbols.  This is called via elf_link_hash_traverse.  */
3350
3351 static bfd_boolean
3352 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
3353 {
3354   struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;
3355
3356   if (h->dynindx != -1)
3357     h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
3358   return TRUE;
3359 }
3360
3361 /* Assign string offsets in .dynstr, update all structures referencing
3362    them.  */
3363
3364 static bfd_boolean
3365 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
3366 {
3367   struct elf_link_hash_table *hash_table = elf_hash_table (info);
3368   struct elf_link_local_dynamic_entry *entry;
3369   struct elf_strtab_hash *dynstr = hash_table->dynstr;
3370   bfd *dynobj = hash_table->dynobj;
3371   asection *sdyn;
3372   bfd_size_type size;
3373   const struct elf_backend_data *bed;
3374   bfd_byte *extdyn;
3375
3376   _bfd_elf_strtab_finalize (dynstr);
3377   size = _bfd_elf_strtab_size (dynstr);
3378
3379   bed = get_elf_backend_data (dynobj);
3380   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
3381   BFD_ASSERT (sdyn != NULL);
3382
3383   /* Update all .dynamic entries referencing .dynstr strings.  */
3384   for (extdyn = sdyn->contents;
3385        extdyn < sdyn->contents + sdyn->size;
3386        extdyn += bed->s->sizeof_dyn)
3387     {
3388       Elf_Internal_Dyn dyn;
3389
3390       bed->s->swap_dyn_in (dynobj, extdyn, &dyn);
3391       switch (dyn.d_tag)
3392         {
3393         case DT_STRSZ:
3394           dyn.d_un.d_val = size;
3395           break;
3396         case DT_NEEDED:
3397         case DT_SONAME:
3398         case DT_RPATH:
3399         case DT_RUNPATH:
3400         case DT_FILTER:
3401         case DT_AUXILIARY:
3402         case DT_AUDIT:
3403         case DT_DEPAUDIT:
3404           dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
3405           break;
3406         default:
3407           continue;
3408         }
3409       bed->s->swap_dyn_out (dynobj, &dyn, extdyn);
3410     }
3411
3412   /* Now update local dynamic symbols.  */
3413   for (entry = hash_table->dynlocal; entry ; entry = entry->next)
3414     entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
3415                                                   entry->isym.st_name);
3416
3417   /* And the rest of dynamic symbols.  */
3418   elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr);
3419
3420   /* Adjust version definitions.  */
3421   if (elf_tdata (output_bfd)->cverdefs)
3422     {
3423       asection *s;
3424       bfd_byte *p;
3425       size_t i;
3426       Elf_Internal_Verdef def;
3427       Elf_Internal_Verdaux defaux;
3428
3429       s = bfd_get_linker_section (dynobj, ".gnu.version_d");
3430       p = s->contents;
3431       do
3432         {
3433           _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
3434                                    &def);
3435           p += sizeof (Elf_External_Verdef);
3436           if (def.vd_aux != sizeof (Elf_External_Verdef))
3437             continue;
3438           for (i = 0; i < def.vd_cnt; ++i)
3439             {
3440               _bfd_elf_swap_verdaux_in (output_bfd,
3441                                         (Elf_External_Verdaux *) p, &defaux);
3442               defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
3443                                                         defaux.vda_name);
3444               _bfd_elf_swap_verdaux_out (output_bfd,
3445                                          &defaux, (Elf_External_Verdaux *) p);
3446               p += sizeof (Elf_External_Verdaux);
3447             }
3448         }
3449       while (def.vd_next);
3450     }
3451
3452   /* Adjust version references.  */
3453   if (elf_tdata (output_bfd)->verref)
3454     {
3455       asection *s;
3456       bfd_byte *p;
3457       size_t i;
3458       Elf_Internal_Verneed need;
3459       Elf_Internal_Vernaux needaux;
3460
3461       s = bfd_get_linker_section (dynobj, ".gnu.version_r");
3462       p = s->contents;
3463       do
3464         {
3465           _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
3466                                     &need);
3467           need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
3468           _bfd_elf_swap_verneed_out (output_bfd, &need,
3469                                      (Elf_External_Verneed *) p);
3470           p += sizeof (Elf_External_Verneed);
3471           for (i = 0; i < need.vn_cnt; ++i)
3472             {
3473               _bfd_elf_swap_vernaux_in (output_bfd,
3474                                         (Elf_External_Vernaux *) p, &needaux);
3475               needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
3476                                                          needaux.vna_name);
3477               _bfd_elf_swap_vernaux_out (output_bfd,
3478                                          &needaux,
3479                                          (Elf_External_Vernaux *) p);
3480               p += sizeof (Elf_External_Vernaux);
3481             }
3482         }
3483       while (need.vn_next);
3484     }
3485
3486   return TRUE;
3487 }
3488 \f
3489 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3490    The default is to only match when the INPUT and OUTPUT are exactly
3491    the same target.  */
3492
3493 bfd_boolean
3494 _bfd_elf_default_relocs_compatible (const bfd_target *input,
3495                                     const bfd_target *output)
3496 {
3497   return input == output;
3498 }
3499
3500 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3501    This version is used when different targets for the same architecture
3502    are virtually identical.  */
3503
3504 bfd_boolean
3505 _bfd_elf_relocs_compatible (const bfd_target *input,
3506                             const bfd_target *output)
3507 {
3508   const struct elf_backend_data *obed, *ibed;
3509
3510   if (input == output)
3511     return TRUE;
3512
3513   ibed = xvec_get_elf_backend_data (input);
3514   obed = xvec_get_elf_backend_data (output);
3515
3516   if (ibed->arch != obed->arch)
3517     return FALSE;
3518
3519   /* If both backends are using this function, deem them compatible.  */
3520   return ibed->relocs_compatible == obed->relocs_compatible;
3521 }
3522
3523 /* Make a special call to the linker "notice" function to tell it that
3524    we are about to handle an as-needed lib, or have finished
3525    processing the lib.  */
3526
3527 bfd_boolean
3528 _bfd_elf_notice_as_needed (bfd *ibfd,
3529                            struct bfd_link_info *info,
3530                            enum notice_asneeded_action act)
3531 {
3532   return (*info->callbacks->notice) (info, NULL, NULL, ibfd, NULL, act, 0);
3533 }
3534
3535 /* Check relocations an ELF object file.  */
3536
3537 bfd_boolean
3538 _bfd_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
3539 {
3540   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3541   struct elf_link_hash_table *htab = elf_hash_table (info);
3542
3543   /* If this object is the same format as the output object, and it is
3544      not a shared library, then let the backend look through the
3545      relocs.
3546
3547      This is required to build global offset table entries and to
3548      arrange for dynamic relocs.  It is not required for the
3549      particular common case of linking non PIC code, even when linking
3550      against shared libraries, but unfortunately there is no way of
3551      knowing whether an object file has been compiled PIC or not.
3552      Looking through the relocs is not particularly time consuming.
3553      The problem is that we must either (1) keep the relocs in memory,
3554      which causes the linker to require additional runtime memory or
3555      (2) read the relocs twice from the input file, which wastes time.
3556      This would be a good case for using mmap.
3557
3558      I have no idea how to handle linking PIC code into a file of a
3559      different format.  It probably can't be done.  */
3560   if ((abfd->flags & DYNAMIC) == 0
3561       && is_elf_hash_table (htab)
3562       && bed->check_relocs != NULL
3563       && elf_object_id (abfd) == elf_hash_table_id (htab)
3564       && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
3565     {
3566       asection *o;
3567
3568       for (o = abfd->sections; o != NULL; o = o->next)
3569         {
3570           Elf_Internal_Rela *internal_relocs;
3571           bfd_boolean ok;
3572
3573           /* Don't check relocations in excluded sections.  */
3574           if ((o->flags & SEC_RELOC) == 0
3575               || (o->flags & SEC_EXCLUDE) != 0
3576               || o->reloc_count == 0
3577               || ((info->strip == strip_all || info->strip == strip_debugger)
3578                   && (o->flags & SEC_DEBUGGING) != 0)
3579               || bfd_is_abs_section (o->output_section))
3580             continue;
3581
3582           internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
3583                                                        info->keep_memory);
3584           if (internal_relocs == NULL)
3585             return FALSE;
3586
3587           ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
3588
3589           if (elf_section_data (o)->relocs != internal_relocs)
3590             free (internal_relocs);
3591
3592           if (! ok)
3593             return FALSE;
3594         }
3595     }
3596
3597   return TRUE;
3598 }
3599
3600 /* Add symbols from an ELF object file to the linker hash table.  */
3601
3602 static bfd_boolean
3603 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
3604 {
3605   Elf_Internal_Ehdr *ehdr;
3606   Elf_Internal_Shdr *hdr;
3607   size_t symcount;
3608   size_t extsymcount;
3609   size_t extsymoff;
3610   struct elf_link_hash_entry **sym_hash;
3611   bfd_boolean dynamic;
3612   Elf_External_Versym *extversym = NULL;
3613   Elf_External_Versym *ever;
3614   struct elf_link_hash_entry *weaks;
3615   struct elf_link_hash_entry **nondeflt_vers = NULL;
3616   size_t nondeflt_vers_cnt = 0;
3617   Elf_Internal_Sym *isymbuf = NULL;
3618   Elf_Internal_Sym *isym;
3619   Elf_Internal_Sym *isymend;
3620   const struct elf_backend_data *bed;
3621   bfd_boolean add_needed;
3622   struct elf_link_hash_table *htab;
3623   bfd_size_type amt;
3624   void *alloc_mark = NULL;
3625   struct bfd_hash_entry **old_table = NULL;
3626   unsigned int old_size = 0;
3627   unsigned int old_count = 0;
3628   void *old_tab = NULL;
3629   void *old_ent;
3630   struct bfd_link_hash_entry *old_undefs = NULL;
3631   struct bfd_link_hash_entry *old_undefs_tail = NULL;
3632   void *old_strtab = NULL;
3633   size_t tabsize = 0;
3634   asection *s;
3635   bfd_boolean just_syms;
3636
3637   htab = elf_hash_table (info);
3638   bed = get_elf_backend_data (abfd);
3639
3640   if ((abfd->flags & DYNAMIC) == 0)
3641     dynamic = FALSE;
3642   else
3643     {
3644       dynamic = TRUE;
3645
3646       /* You can't use -r against a dynamic object.  Also, there's no
3647          hope of using a dynamic object which does not exactly match
3648          the format of the output file.  */
3649       if (bfd_link_relocatable (info)
3650           || !is_elf_hash_table (htab)
3651           || info->output_bfd->xvec != abfd->xvec)
3652         {
3653           if (bfd_link_relocatable (info))
3654             bfd_set_error (bfd_error_invalid_operation);
3655           else
3656             bfd_set_error (bfd_error_wrong_format);
3657           goto error_return;
3658         }
3659     }
3660
3661   ehdr = elf_elfheader (abfd);
3662   if (info->warn_alternate_em
3663       && bed->elf_machine_code != ehdr->e_machine
3664       && ((bed->elf_machine_alt1 != 0
3665            && ehdr->e_machine == bed->elf_machine_alt1)
3666           || (bed->elf_machine_alt2 != 0
3667               && ehdr->e_machine == bed->elf_machine_alt2)))
3668     info->callbacks->einfo
3669       (_("%P: alternate ELF machine code found (%d) in %B, expecting %d\n"),
3670        ehdr->e_machine, abfd, bed->elf_machine_code);
3671
3672   /* As a GNU extension, any input sections which are named
3673      .gnu.warning.SYMBOL are treated as warning symbols for the given
3674      symbol.  This differs from .gnu.warning sections, which generate
3675      warnings when they are included in an output file.  */
3676   /* PR 12761: Also generate this warning when building shared libraries.  */
3677   for (s = abfd->sections; s != NULL; s = s->next)
3678     {
3679       const char *name;
3680
3681       name = bfd_get_section_name (abfd, s);
3682       if (CONST_STRNEQ (name, ".gnu.warning."))
3683         {
3684           char *msg;
3685           bfd_size_type sz;
3686
3687           name += sizeof ".gnu.warning." - 1;
3688
3689           /* If this is a shared object, then look up the symbol
3690              in the hash table.  If it is there, and it is already
3691              been defined, then we will not be using the entry
3692              from this shared object, so we don't need to warn.
3693              FIXME: If we see the definition in a regular object
3694              later on, we will warn, but we shouldn't.  The only
3695              fix is to keep track of what warnings we are supposed
3696              to emit, and then handle them all at the end of the
3697              link.  */
3698           if (dynamic)
3699             {
3700               struct elf_link_hash_entry *h;
3701
3702               h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
3703
3704               /* FIXME: What about bfd_link_hash_common?  */
3705               if (h != NULL
3706                   && (h->root.type == bfd_link_hash_defined
3707                       || h->root.type == bfd_link_hash_defweak))
3708                 continue;
3709             }
3710
3711           sz = s->size;
3712           msg = (char *) bfd_alloc (abfd, sz + 1);
3713           if (msg == NULL)
3714             goto error_return;
3715
3716           if (! bfd_get_section_contents (abfd, s, msg, 0, sz))
3717             goto error_return;
3718
3719           msg[sz] = '\0';
3720
3721           if (! (_bfd_generic_link_add_one_symbol
3722                  (info, abfd, name, BSF_WARNING, s, 0, msg,
3723                   FALSE, bed->collect, NULL)))
3724             goto error_return;
3725
3726           if (bfd_link_executable (info))
3727             {
3728               /* Clobber the section size so that the warning does
3729                  not get copied into the output file.  */
3730               s->size = 0;
3731
3732               /* Also set SEC_EXCLUDE, so that symbols defined in
3733                  the warning section don't get copied to the output.  */
3734               s->flags |= SEC_EXCLUDE;
3735             }
3736         }
3737     }
3738
3739   just_syms = ((s = abfd->sections) != NULL
3740                && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS);
3741
3742   add_needed = TRUE;
3743   if (! dynamic)
3744     {
3745       /* If we are creating a shared library, create all the dynamic
3746          sections immediately.  We need to attach them to something,
3747          so we attach them to this BFD, provided it is the right
3748          format and is not from ld --just-symbols.  Always create the
3749          dynamic sections for -E/--dynamic-list.  FIXME: If there
3750          are no input BFD's of the same format as the output, we can't
3751          make a shared library.  */
3752       if (!just_syms
3753           && (bfd_link_pic (info)
3754               || (!bfd_link_relocatable (info)
3755                   && (info->export_dynamic || info->dynamic)))
3756           && is_elf_hash_table (htab)
3757           && info->output_bfd->xvec == abfd->xvec
3758           && !htab->dynamic_sections_created)
3759         {
3760           if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
3761             goto error_return;
3762         }
3763     }
3764   else if (!is_elf_hash_table (htab))
3765     goto error_return;
3766   else
3767     {
3768       const char *soname = NULL;
3769       char *audit = NULL;
3770       struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
3771       int ret;
3772
3773       /* ld --just-symbols and dynamic objects don't mix very well.
3774          ld shouldn't allow it.  */
3775       if (just_syms)
3776         abort ();
3777
3778       /* If this dynamic lib was specified on the command line with
3779          --as-needed in effect, then we don't want to add a DT_NEEDED
3780          tag unless the lib is actually used.  Similary for libs brought
3781          in by another lib's DT_NEEDED.  When --no-add-needed is used
3782          on a dynamic lib, we don't want to add a DT_NEEDED entry for
3783          any dynamic library in DT_NEEDED tags in the dynamic lib at
3784          all.  */
3785       add_needed = (elf_dyn_lib_class (abfd)
3786                     & (DYN_AS_NEEDED | DYN_DT_NEEDED
3787                        | DYN_NO_NEEDED)) == 0;
3788
3789       s = bfd_get_section_by_name (abfd, ".dynamic");
3790       if (s != NULL)
3791         {
3792           bfd_byte *dynbuf;
3793           bfd_byte *extdyn;
3794           unsigned int elfsec;
3795           unsigned long shlink;
3796
3797           if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
3798             {
3799 error_free_dyn:
3800               free (dynbuf);
3801               goto error_return;
3802             }
3803
3804           elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
3805           if (elfsec == SHN_BAD)
3806             goto error_free_dyn;
3807           shlink = elf_elfsections (abfd)[elfsec]->sh_link;
3808
3809           for (extdyn = dynbuf;
3810                extdyn < dynbuf + s->size;
3811                extdyn += bed->s->sizeof_dyn)
3812             {
3813               Elf_Internal_Dyn dyn;
3814
3815               bed->s->swap_dyn_in (abfd, extdyn, &dyn);
3816               if (dyn.d_tag == DT_SONAME)
3817                 {
3818                   unsigned int tagv = dyn.d_un.d_val;
3819                   soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3820                   if (soname == NULL)
3821                     goto error_free_dyn;
3822                 }
3823               if (dyn.d_tag == DT_NEEDED)
3824                 {
3825                   struct bfd_link_needed_list *n, **pn;
3826                   char *fnm, *anm;
3827                   unsigned int tagv = dyn.d_un.d_val;
3828
3829                   amt = sizeof (struct bfd_link_needed_list);
3830                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3831                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3832                   if (n == NULL || fnm == NULL)
3833                     goto error_free_dyn;
3834                   amt = strlen (fnm) + 1;
3835                   anm = (char *) bfd_alloc (abfd, amt);
3836                   if (anm == NULL)
3837                     goto error_free_dyn;
3838                   memcpy (anm, fnm, amt);
3839                   n->name = anm;
3840                   n->by = abfd;
3841                   n->next = NULL;
3842                   for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next)
3843                     ;
3844                   *pn = n;
3845                 }
3846               if (dyn.d_tag == DT_RUNPATH)
3847                 {
3848                   struct bfd_link_needed_list *n, **pn;
3849                   char *fnm, *anm;
3850                   unsigned int tagv = dyn.d_un.d_val;
3851
3852                   amt = sizeof (struct bfd_link_needed_list);
3853                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3854                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3855                   if (n == NULL || fnm == NULL)
3856                     goto error_free_dyn;
3857                   amt = strlen (fnm) + 1;
3858                   anm = (char *) bfd_alloc (abfd, amt);
3859                   if (anm == NULL)
3860                     goto error_free_dyn;
3861                   memcpy (anm, fnm, amt);
3862                   n->name = anm;
3863                   n->by = abfd;
3864                   n->next = NULL;
3865                   for (pn = & runpath;
3866                        *pn != NULL;
3867                        pn = &(*pn)->next)
3868                     ;
3869                   *pn = n;
3870                 }
3871               /* Ignore DT_RPATH if we have seen DT_RUNPATH.  */
3872               if (!runpath && dyn.d_tag == DT_RPATH)
3873                 {
3874                   struct bfd_link_needed_list *n, **pn;
3875                   char *fnm, *anm;
3876                   unsigned int tagv = dyn.d_un.d_val;
3877
3878                   amt = sizeof (struct bfd_link_needed_list);
3879                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3880                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3881                   if (n == NULL || fnm == NULL)
3882                     goto error_free_dyn;
3883                   amt = strlen (fnm) + 1;
3884                   anm = (char *) bfd_alloc (abfd, amt);
3885                   if (anm == NULL)
3886                     goto error_free_dyn;
3887                   memcpy (anm, fnm, amt);
3888                   n->name = anm;
3889                   n->by = abfd;
3890                   n->next = NULL;
3891                   for (pn = & rpath;
3892                        *pn != NULL;
3893                        pn = &(*pn)->next)
3894                     ;
3895                   *pn = n;
3896                 }
3897               if (dyn.d_tag == DT_AUDIT)
3898                 {
3899                   unsigned int tagv = dyn.d_un.d_val;
3900                   audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3901                 }
3902             }
3903
3904           free (dynbuf);
3905         }
3906
3907       /* DT_RUNPATH overrides DT_RPATH.  Do _NOT_ bfd_release, as that
3908          frees all more recently bfd_alloc'd blocks as well.  */
3909       if (runpath)
3910         rpath = runpath;
3911
3912       if (rpath)
3913         {
3914           struct bfd_link_needed_list **pn;
3915           for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next)
3916             ;
3917           *pn = rpath;
3918         }
3919
3920       /* We do not want to include any of the sections in a dynamic
3921          object in the output file.  We hack by simply clobbering the
3922          list of sections in the BFD.  This could be handled more
3923          cleanly by, say, a new section flag; the existing
3924          SEC_NEVER_LOAD flag is not the one we want, because that one
3925          still implies that the section takes up space in the output
3926          file.  */
3927       bfd_section_list_clear (abfd);
3928
3929       /* Find the name to use in a DT_NEEDED entry that refers to this
3930          object.  If the object has a DT_SONAME entry, we use it.
3931          Otherwise, if the generic linker stuck something in
3932          elf_dt_name, we use that.  Otherwise, we just use the file
3933          name.  */
3934       if (soname == NULL || *soname == '\0')
3935         {
3936           soname = elf_dt_name (abfd);
3937           if (soname == NULL || *soname == '\0')
3938             soname = bfd_get_filename (abfd);
3939         }
3940
3941       /* Save the SONAME because sometimes the linker emulation code
3942          will need to know it.  */
3943       elf_dt_name (abfd) = soname;
3944
3945       ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
3946       if (ret < 0)
3947         goto error_return;
3948
3949       /* If we have already included this dynamic object in the
3950          link, just ignore it.  There is no reason to include a
3951          particular dynamic object more than once.  */
3952       if (ret > 0)
3953         return TRUE;
3954
3955       /* Save the DT_AUDIT entry for the linker emulation code. */
3956       elf_dt_audit (abfd) = audit;
3957     }
3958
3959   /* If this is a dynamic object, we always link against the .dynsym
3960      symbol table, not the .symtab symbol table.  The dynamic linker
3961      will only see the .dynsym symbol table, so there is no reason to
3962      look at .symtab for a dynamic object.  */
3963
3964   if (! dynamic || elf_dynsymtab (abfd) == 0)
3965     hdr = &elf_tdata (abfd)->symtab_hdr;
3966   else
3967     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3968
3969   symcount = hdr->sh_size / bed->s->sizeof_sym;
3970
3971   /* The sh_info field of the symtab header tells us where the
3972      external symbols start.  We don't care about the local symbols at
3973      this point.  */
3974   if (elf_bad_symtab (abfd))
3975     {
3976       extsymcount = symcount;
3977       extsymoff = 0;
3978     }
3979   else
3980     {
3981       extsymcount = symcount - hdr->sh_info;
3982       extsymoff = hdr->sh_info;
3983     }
3984
3985   sym_hash = elf_sym_hashes (abfd);
3986   if (extsymcount != 0)
3987     {
3988       isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3989                                       NULL, NULL, NULL);
3990       if (isymbuf == NULL)
3991         goto error_return;
3992
3993       if (sym_hash == NULL)
3994         {
3995           /* We store a pointer to the hash table entry for each
3996              external symbol.  */
3997           amt = extsymcount;
3998           amt *= sizeof (struct elf_link_hash_entry *);
3999           sym_hash = (struct elf_link_hash_entry **) bfd_zalloc (abfd, amt);
4000           if (sym_hash == NULL)
4001             goto error_free_sym;
4002           elf_sym_hashes (abfd) = sym_hash;
4003         }
4004     }
4005
4006   if (dynamic)
4007     {
4008       /* Read in any version definitions.  */
4009       if (!_bfd_elf_slurp_version_tables (abfd,
4010                                           info->default_imported_symver))
4011         goto error_free_sym;
4012
4013       /* Read in the symbol versions, but don't bother to convert them
4014          to internal format.  */
4015       if (elf_dynversym (abfd) != 0)
4016         {
4017           Elf_Internal_Shdr *versymhdr;
4018
4019           versymhdr = &elf_tdata (abfd)->dynversym_hdr;
4020           extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
4021           if (extversym == NULL)
4022             goto error_free_sym;
4023           amt = versymhdr->sh_size;
4024           if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
4025               || bfd_bread (extversym, amt, abfd) != amt)
4026             goto error_free_vers;
4027         }
4028     }
4029
4030   /* If we are loading an as-needed shared lib, save the symbol table
4031      state before we start adding symbols.  If the lib turns out
4032      to be unneeded, restore the state.  */
4033   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4034     {
4035       unsigned int i;
4036       size_t entsize;
4037
4038       for (entsize = 0, i = 0; i < htab->root.table.size; i++)
4039         {
4040           struct bfd_hash_entry *p;
4041           struct elf_link_hash_entry *h;
4042
4043           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4044             {
4045               h = (struct elf_link_hash_entry *) p;
4046               entsize += htab->root.table.entsize;
4047               if (h->root.type == bfd_link_hash_warning)
4048                 entsize += htab->root.table.entsize;
4049             }
4050         }
4051
4052       tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
4053       old_tab = bfd_malloc (tabsize + entsize);
4054       if (old_tab == NULL)
4055         goto error_free_vers;
4056
4057       /* Remember the current objalloc pointer, so that all mem for
4058          symbols added can later be reclaimed.  */
4059       alloc_mark = bfd_hash_allocate (&htab->root.table, 1);
4060       if (alloc_mark == NULL)
4061         goto error_free_vers;
4062
4063       /* Make a special call to the linker "notice" function to
4064          tell it that we are about to handle an as-needed lib.  */
4065       if (!(*bed->notice_as_needed) (abfd, info, notice_as_needed))
4066         goto error_free_vers;
4067
4068       /* Clone the symbol table.  Remember some pointers into the
4069          symbol table, and dynamic symbol count.  */
4070       old_ent = (char *) old_tab + tabsize;
4071       memcpy (old_tab, htab->root.table.table, tabsize);
4072       old_undefs = htab->root.undefs;
4073       old_undefs_tail = htab->root.undefs_tail;
4074       old_table = htab->root.table.table;
4075       old_size = htab->root.table.size;
4076       old_count = htab->root.table.count;
4077       old_strtab = _bfd_elf_strtab_save (htab->dynstr);
4078       if (old_strtab == NULL)
4079         goto error_free_vers;
4080
4081       for (i = 0; i < htab->root.table.size; i++)
4082         {
4083           struct bfd_hash_entry *p;
4084           struct elf_link_hash_entry *h;
4085
4086           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4087             {
4088               memcpy (old_ent, p, htab->root.table.entsize);
4089               old_ent = (char *) old_ent + htab->root.table.entsize;
4090               h = (struct elf_link_hash_entry *) p;
4091               if (h->root.type == bfd_link_hash_warning)
4092                 {
4093                   memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
4094                   old_ent = (char *) old_ent + htab->root.table.entsize;
4095                 }
4096             }
4097         }
4098     }
4099
4100   weaks = NULL;
4101   ever = extversym != NULL ? extversym + extsymoff : NULL;
4102   for (isym = isymbuf, isymend = isymbuf + extsymcount;
4103        isym < isymend;
4104        isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
4105     {
4106       int bind;
4107       bfd_vma value;
4108       asection *sec, *new_sec;
4109       flagword flags;
4110       const char *name;
4111       struct elf_link_hash_entry *h;
4112       struct elf_link_hash_entry *hi;
4113       bfd_boolean definition;
4114       bfd_boolean size_change_ok;
4115       bfd_boolean type_change_ok;
4116       bfd_boolean new_weakdef;
4117       bfd_boolean new_weak;
4118       bfd_boolean old_weak;
4119       bfd_boolean override;
4120       bfd_boolean common;
4121       bfd_boolean discarded;
4122       unsigned int old_alignment;
4123       bfd *old_bfd;
4124       bfd_boolean matched;
4125
4126       override = FALSE;
4127
4128       flags = BSF_NO_FLAGS;
4129       sec = NULL;
4130       value = isym->st_value;
4131       common = bed->common_definition (isym);
4132       discarded = FALSE;
4133
4134       bind = ELF_ST_BIND (isym->st_info);
4135       switch (bind)
4136         {
4137         case STB_LOCAL:
4138           /* This should be impossible, since ELF requires that all
4139              global symbols follow all local symbols, and that sh_info
4140              point to the first global symbol.  Unfortunately, Irix 5
4141              screws this up.  */
4142           continue;
4143
4144         case STB_GLOBAL:
4145           if (isym->st_shndx != SHN_UNDEF && !common)
4146             flags = BSF_GLOBAL;
4147           break;
4148
4149         case STB_WEAK:
4150           flags = BSF_WEAK;
4151           break;
4152
4153         case STB_GNU_UNIQUE:
4154           flags = BSF_GNU_UNIQUE;
4155           break;
4156
4157         default:
4158           /* Leave it up to the processor backend.  */
4159           break;
4160         }
4161
4162       if (isym->st_shndx == SHN_UNDEF)
4163         sec = bfd_und_section_ptr;
4164       else if (isym->st_shndx == SHN_ABS)
4165         sec = bfd_abs_section_ptr;
4166       else if (isym->st_shndx == SHN_COMMON)
4167         {
4168           sec = bfd_com_section_ptr;
4169           /* What ELF calls the size we call the value.  What ELF
4170              calls the value we call the alignment.  */
4171           value = isym->st_size;
4172         }
4173       else
4174         {
4175           sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
4176           if (sec == NULL)
4177             sec = bfd_abs_section_ptr;
4178           else if (discarded_section (sec))
4179             {
4180               /* Symbols from discarded section are undefined.  We keep
4181                  its visibility.  */
4182               sec = bfd_und_section_ptr;
4183               discarded = TRUE;
4184               isym->st_shndx = SHN_UNDEF;
4185             }
4186           else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
4187             value -= sec->vma;
4188         }
4189
4190       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4191                                               isym->st_name);
4192       if (name == NULL)
4193         goto error_free_vers;
4194
4195       if (isym->st_shndx == SHN_COMMON
4196           && (abfd->flags & BFD_PLUGIN) != 0)
4197         {
4198           asection *xc = bfd_get_section_by_name (abfd, "COMMON");
4199
4200           if (xc == NULL)
4201             {
4202               flagword sflags = (SEC_ALLOC | SEC_IS_COMMON | SEC_KEEP
4203                                  | SEC_EXCLUDE);
4204               xc = bfd_make_section_with_flags (abfd, "COMMON", sflags);
4205               if (xc == NULL)
4206                 goto error_free_vers;
4207             }
4208           sec = xc;
4209         }
4210       else if (isym->st_shndx == SHN_COMMON
4211                && ELF_ST_TYPE (isym->st_info) == STT_TLS
4212                && !bfd_link_relocatable (info))
4213         {
4214           asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
4215
4216           if (tcomm == NULL)
4217             {
4218               flagword sflags = (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_IS_COMMON
4219                                  | SEC_LINKER_CREATED);
4220               tcomm = bfd_make_section_with_flags (abfd, ".tcommon", sflags);
4221               if (tcomm == NULL)
4222                 goto error_free_vers;
4223             }
4224           sec = tcomm;
4225         }
4226       else if (bed->elf_add_symbol_hook)
4227         {
4228           if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
4229                                              &sec, &value))
4230             goto error_free_vers;
4231
4232           /* The hook function sets the name to NULL if this symbol
4233              should be skipped for some reason.  */
4234           if (name == NULL)
4235             continue;
4236         }
4237
4238       /* Sanity check that all possibilities were handled.  */
4239       if (sec == NULL)
4240         {
4241           bfd_set_error (bfd_error_bad_value);
4242           goto error_free_vers;
4243         }
4244
4245       /* Silently discard TLS symbols from --just-syms.  There's
4246          no way to combine a static TLS block with a new TLS block
4247          for this executable.  */
4248       if (ELF_ST_TYPE (isym->st_info) == STT_TLS
4249           && sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
4250         continue;
4251
4252       if (bfd_is_und_section (sec)
4253           || bfd_is_com_section (sec))
4254         definition = FALSE;
4255       else
4256         definition = TRUE;
4257
4258       size_change_ok = FALSE;
4259       type_change_ok = bed->type_change_ok;
4260       old_weak = FALSE;
4261       matched = FALSE;
4262       old_alignment = 0;
4263       old_bfd = NULL;
4264       new_sec = sec;
4265
4266       if (is_elf_hash_table (htab))
4267         {
4268           Elf_Internal_Versym iver;
4269           unsigned int vernum = 0;
4270           bfd_boolean skip;
4271
4272           if (ever == NULL)
4273             {
4274               if (info->default_imported_symver)
4275                 /* Use the default symbol version created earlier.  */
4276                 iver.vs_vers = elf_tdata (abfd)->cverdefs;
4277               else
4278                 iver.vs_vers = 0;
4279             }
4280           else
4281             _bfd_elf_swap_versym_in (abfd, ever, &iver);
4282
4283           vernum = iver.vs_vers & VERSYM_VERSION;
4284
4285           /* If this is a hidden symbol, or if it is not version
4286              1, we append the version name to the symbol name.
4287              However, we do not modify a non-hidden absolute symbol
4288              if it is not a function, because it might be the version
4289              symbol itself.  FIXME: What if it isn't?  */
4290           if ((iver.vs_vers & VERSYM_HIDDEN) != 0
4291               || (vernum > 1
4292                   && (!bfd_is_abs_section (sec)
4293                       || bed->is_function_type (ELF_ST_TYPE (isym->st_info)))))
4294             {
4295               const char *verstr;
4296               size_t namelen, verlen, newlen;
4297               char *newname, *p;
4298
4299               if (isym->st_shndx != SHN_UNDEF)
4300                 {
4301                   if (vernum > elf_tdata (abfd)->cverdefs)
4302                     verstr = NULL;
4303                   else if (vernum > 1)
4304                     verstr =
4305                       elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
4306                   else
4307                     verstr = "";
4308
4309                   if (verstr == NULL)
4310                     {
4311                       _bfd_error_handler
4312                         (_("%B: %s: invalid version %u (max %d)"),
4313                          abfd, name, vernum,
4314                          elf_tdata (abfd)->cverdefs);
4315                       bfd_set_error (bfd_error_bad_value);
4316                       goto error_free_vers;
4317                     }
4318                 }
4319               else
4320                 {
4321                   /* We cannot simply test for the number of
4322                      entries in the VERNEED section since the
4323                      numbers for the needed versions do not start
4324                      at 0.  */
4325                   Elf_Internal_Verneed *t;
4326
4327                   verstr = NULL;
4328                   for (t = elf_tdata (abfd)->verref;
4329                        t != NULL;
4330                        t = t->vn_nextref)
4331                     {
4332                       Elf_Internal_Vernaux *a;
4333
4334                       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
4335                         {
4336                           if (a->vna_other == vernum)
4337                             {
4338                               verstr = a->vna_nodename;
4339                               break;
4340                             }
4341                         }
4342                       if (a != NULL)
4343                         break;
4344                     }
4345                   if (verstr == NULL)
4346                     {
4347                       _bfd_error_handler
4348                         (_("%B: %s: invalid needed version %d"),
4349                          abfd, name, vernum);
4350                       bfd_set_error (bfd_error_bad_value);
4351                       goto error_free_vers;
4352                     }
4353                 }
4354
4355               namelen = strlen (name);
4356               verlen = strlen (verstr);
4357               newlen = namelen + verlen + 2;
4358               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4359                   && isym->st_shndx != SHN_UNDEF)
4360                 ++newlen;
4361
4362               newname = (char *) bfd_hash_allocate (&htab->root.table, newlen);
4363               if (newname == NULL)
4364                 goto error_free_vers;
4365               memcpy (newname, name, namelen);
4366               p = newname + namelen;
4367               *p++ = ELF_VER_CHR;
4368               /* If this is a defined non-hidden version symbol,
4369                  we add another @ to the name.  This indicates the
4370                  default version of the symbol.  */
4371               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4372                   && isym->st_shndx != SHN_UNDEF)
4373                 *p++ = ELF_VER_CHR;
4374               memcpy (p, verstr, verlen + 1);
4375
4376               name = newname;
4377             }
4378
4379           /* If this symbol has default visibility and the user has
4380              requested we not re-export it, then mark it as hidden.  */
4381           if (!bfd_is_und_section (sec)
4382               && !dynamic
4383               && abfd->no_export
4384               && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
4385             isym->st_other = (STV_HIDDEN
4386                               | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
4387
4388           if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec, &value,
4389                                       sym_hash, &old_bfd, &old_weak,
4390                                       &old_alignment, &skip, &override,
4391                                       &type_change_ok, &size_change_ok,
4392                                       &matched))
4393             goto error_free_vers;
4394
4395           if (skip)
4396             continue;
4397
4398           /* Override a definition only if the new symbol matches the
4399              existing one.  */
4400           if (override && matched)
4401             definition = FALSE;
4402
4403           h = *sym_hash;
4404           while (h->root.type == bfd_link_hash_indirect
4405                  || h->root.type == bfd_link_hash_warning)
4406             h = (struct elf_link_hash_entry *) h->root.u.i.link;
4407
4408           if (elf_tdata (abfd)->verdef != NULL
4409               && vernum > 1
4410               && definition)
4411             h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
4412         }
4413
4414       if (! (_bfd_generic_link_add_one_symbol
4415              (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
4416               (struct bfd_link_hash_entry **) sym_hash)))
4417         goto error_free_vers;
4418
4419       if ((flags & BSF_GNU_UNIQUE)
4420           && (abfd->flags & DYNAMIC) == 0
4421           && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour)
4422         elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_unique;
4423
4424       h = *sym_hash;
4425       /* We need to make sure that indirect symbol dynamic flags are
4426          updated.  */
4427       hi = h;
4428       while (h->root.type == bfd_link_hash_indirect
4429              || h->root.type == bfd_link_hash_warning)
4430         h = (struct elf_link_hash_entry *) h->root.u.i.link;
4431
4432       /* Setting the index to -3 tells elf_link_output_extsym that
4433          this symbol is defined in a discarded section.  */
4434       if (discarded)
4435         h->indx = -3;
4436
4437       *sym_hash = h;
4438
4439       new_weak = (flags & BSF_WEAK) != 0;
4440       new_weakdef = FALSE;
4441       if (dynamic
4442           && definition
4443           && new_weak
4444           && !bed->is_function_type (ELF_ST_TYPE (isym->st_info))
4445           && is_elf_hash_table (htab)
4446           && h->u.weakdef == NULL)
4447         {
4448           /* Keep a list of all weak defined non function symbols from
4449              a dynamic object, using the weakdef field.  Later in this
4450              function we will set the weakdef field to the correct
4451              value.  We only put non-function symbols from dynamic
4452              objects on this list, because that happens to be the only
4453              time we need to know the normal symbol corresponding to a
4454              weak symbol, and the information is time consuming to
4455              figure out.  If the weakdef field is not already NULL,
4456              then this symbol was already defined by some previous
4457              dynamic object, and we will be using that previous
4458              definition anyhow.  */
4459
4460           h->u.weakdef = weaks;
4461           weaks = h;
4462           new_weakdef = TRUE;
4463         }
4464
4465       /* Set the alignment of a common symbol.  */
4466       if ((common || bfd_is_com_section (sec))
4467           && h->root.type == bfd_link_hash_common)
4468         {
4469           unsigned int align;
4470
4471           if (common)
4472             align = bfd_log2 (isym->st_value);
4473           else
4474             {
4475               /* The new symbol is a common symbol in a shared object.
4476                  We need to get the alignment from the section.  */
4477               align = new_sec->alignment_power;
4478             }
4479           if (align > old_alignment)
4480             h->root.u.c.p->alignment_power = align;
4481           else
4482             h->root.u.c.p->alignment_power = old_alignment;
4483         }
4484
4485       if (is_elf_hash_table (htab))
4486         {
4487           /* Set a flag in the hash table entry indicating the type of
4488              reference or definition we just found.  A dynamic symbol
4489              is one which is referenced or defined by both a regular
4490              object and a shared object.  */
4491           bfd_boolean dynsym = FALSE;
4492
4493           /* Plugin symbols aren't normal.  Don't set def_regular or
4494              ref_regular for them, or make them dynamic.  */
4495           if ((abfd->flags & BFD_PLUGIN) != 0)
4496             ;
4497           else if (! dynamic)
4498             {
4499               if (! definition)
4500                 {
4501                   h->ref_regular = 1;
4502                   if (bind != STB_WEAK)
4503                     h->ref_regular_nonweak = 1;
4504                 }
4505               else
4506                 {
4507                   h->def_regular = 1;
4508                   if (h->def_dynamic)
4509                     {
4510                       h->def_dynamic = 0;
4511                       h->ref_dynamic = 1;
4512                     }
4513                 }
4514
4515               /* If the indirect symbol has been forced local, don't
4516                  make the real symbol dynamic.  */
4517               if ((h == hi || !hi->forced_local)
4518                   && (bfd_link_dll (info)
4519                       || h->def_dynamic
4520                       || h->ref_dynamic))
4521                 dynsym = TRUE;
4522             }
4523           else
4524             {
4525               if (! definition)
4526                 {
4527                   h->ref_dynamic = 1;
4528                   hi->ref_dynamic = 1;
4529                 }
4530               else
4531                 {
4532                   h->def_dynamic = 1;
4533                   hi->def_dynamic = 1;
4534                 }
4535
4536               /* If the indirect symbol has been forced local, don't
4537                  make the real symbol dynamic.  */
4538               if ((h == hi || !hi->forced_local)
4539                   && (h->def_regular
4540                       || h->ref_regular
4541                       || (h->u.weakdef != NULL
4542                           && ! new_weakdef
4543                           && h->u.weakdef->dynindx != -1)))
4544                 dynsym = TRUE;
4545             }
4546
4547           /* Check to see if we need to add an indirect symbol for
4548              the default name.  */
4549           if (definition
4550               || (!override && h->root.type == bfd_link_hash_common))
4551             if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
4552                                               sec, value, &old_bfd, &dynsym))
4553               goto error_free_vers;
4554
4555           /* Check the alignment when a common symbol is involved. This
4556              can change when a common symbol is overridden by a normal
4557              definition or a common symbol is ignored due to the old
4558              normal definition. We need to make sure the maximum
4559              alignment is maintained.  */
4560           if ((old_alignment || common)
4561               && h->root.type != bfd_link_hash_common)
4562             {
4563               unsigned int common_align;
4564               unsigned int normal_align;
4565               unsigned int symbol_align;
4566               bfd *normal_bfd;
4567               bfd *common_bfd;
4568
4569               BFD_ASSERT (h->root.type == bfd_link_hash_defined
4570                           || h->root.type == bfd_link_hash_defweak);
4571
4572               symbol_align = ffs (h->root.u.def.value) - 1;
4573               if (h->root.u.def.section->owner != NULL
4574                   && (h->root.u.def.section->owner->flags
4575                        & (DYNAMIC | BFD_PLUGIN)) == 0)
4576                 {
4577                   normal_align = h->root.u.def.section->alignment_power;
4578                   if (normal_align > symbol_align)
4579                     normal_align = symbol_align;
4580                 }
4581               else
4582                 normal_align = symbol_align;
4583
4584               if (old_alignment)
4585                 {
4586                   common_align = old_alignment;
4587                   common_bfd = old_bfd;
4588                   normal_bfd = abfd;
4589                 }
4590               else
4591                 {
4592                   common_align = bfd_log2 (isym->st_value);
4593                   common_bfd = abfd;
4594                   normal_bfd = old_bfd;
4595                 }
4596
4597               if (normal_align < common_align)
4598                 {
4599                   /* PR binutils/2735 */
4600                   if (normal_bfd == NULL)
4601                     _bfd_error_handler
4602                       (_("Warning: alignment %u of common symbol `%s' in %B is"
4603                          " greater than the alignment (%u) of its section %A"),
4604                        common_bfd, h->root.u.def.section,
4605                        1 << common_align, name, 1 << normal_align);
4606                   else
4607                     _bfd_error_handler
4608                       (_("Warning: alignment %u of symbol `%s' in %B"
4609                          " is smaller than %u in %B"),
4610                        normal_bfd, common_bfd,
4611                        1 << normal_align, name, 1 << common_align);
4612                 }
4613             }
4614
4615           /* Remember the symbol size if it isn't undefined.  */
4616           if (isym->st_size != 0
4617               && isym->st_shndx != SHN_UNDEF
4618               && (definition || h->size == 0))
4619             {
4620               if (h->size != 0
4621                   && h->size != isym->st_size
4622                   && ! size_change_ok)
4623                 _bfd_error_handler
4624                   (_("Warning: size of symbol `%s' changed"
4625                      " from %lu in %B to %lu in %B"),
4626                    old_bfd, abfd,
4627                    name, (unsigned long) h->size,
4628                    (unsigned long) isym->st_size);
4629
4630               h->size = isym->st_size;
4631             }
4632
4633           /* If this is a common symbol, then we always want H->SIZE
4634              to be the size of the common symbol.  The code just above
4635              won't fix the size if a common symbol becomes larger.  We
4636              don't warn about a size change here, because that is
4637              covered by --warn-common.  Allow changes between different
4638              function types.  */
4639           if (h->root.type == bfd_link_hash_common)
4640             h->size = h->root.u.c.size;
4641
4642           if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
4643               && ((definition && !new_weak)
4644                   || (old_weak && h->root.type == bfd_link_hash_common)
4645                   || h->type == STT_NOTYPE))
4646             {
4647               unsigned int type = ELF_ST_TYPE (isym->st_info);
4648
4649               /* Turn an IFUNC symbol from a DSO into a normal FUNC
4650                  symbol.  */
4651               if (type == STT_GNU_IFUNC
4652                   && (abfd->flags & DYNAMIC) != 0)
4653                 type = STT_FUNC;
4654
4655               if (h->type != type)
4656                 {
4657                   if (h->type != STT_NOTYPE && ! type_change_ok)
4658                     _bfd_error_handler
4659                       (_("Warning: type of symbol `%s' changed"
4660                          " from %d to %d in %B"),
4661                        abfd, name, h->type, type);
4662
4663                   h->type = type;
4664                 }
4665             }
4666
4667           /* Merge st_other field.  */
4668           elf_merge_st_other (abfd, h, isym, sec, definition, dynamic);
4669
4670           /* We don't want to make debug symbol dynamic.  */
4671           if (definition
4672               && (sec->flags & SEC_DEBUGGING)
4673               && !bfd_link_relocatable (info))
4674             dynsym = FALSE;
4675
4676           /* Nor should we make plugin symbols dynamic.  */
4677           if ((abfd->flags & BFD_PLUGIN) != 0)
4678             dynsym = FALSE;
4679
4680           if (definition)
4681             {
4682               h->target_internal = isym->st_target_internal;
4683               h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
4684             }
4685
4686           if (definition && !dynamic)
4687             {
4688               char *p = strchr (name, ELF_VER_CHR);
4689               if (p != NULL && p[1] != ELF_VER_CHR)
4690                 {
4691                   /* Queue non-default versions so that .symver x, x@FOO
4692                      aliases can be checked.  */
4693                   if (!nondeflt_vers)
4694                     {
4695                       amt = ((isymend - isym + 1)
4696                              * sizeof (struct elf_link_hash_entry *));
4697                       nondeflt_vers
4698                         = (struct elf_link_hash_entry **) bfd_malloc (amt);
4699                       if (!nondeflt_vers)
4700                         goto error_free_vers;
4701                     }
4702                   nondeflt_vers[nondeflt_vers_cnt++] = h;
4703                 }
4704             }
4705
4706           if (dynsym && h->dynindx == -1)
4707             {
4708               if (! bfd_elf_link_record_dynamic_symbol (info, h))
4709                 goto error_free_vers;
4710               if (h->u.weakdef != NULL
4711                   && ! new_weakdef
4712                   && h->u.weakdef->dynindx == -1)
4713                 {
4714                   if (!bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
4715                     goto error_free_vers;
4716                 }
4717             }
4718           else if (h->dynindx != -1)
4719             /* If the symbol already has a dynamic index, but
4720                visibility says it should not be visible, turn it into
4721                a local symbol.  */
4722             switch (ELF_ST_VISIBILITY (h->other))
4723               {
4724               case STV_INTERNAL:
4725               case STV_HIDDEN:
4726                 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
4727                 dynsym = FALSE;
4728                 break;
4729               }
4730
4731           /* Don't add DT_NEEDED for references from the dummy bfd nor
4732              for unmatched symbol.  */
4733           if (!add_needed
4734               && matched
4735               && definition
4736               && ((dynsym
4737                    && h->ref_regular_nonweak
4738                    && (old_bfd == NULL
4739                        || (old_bfd->flags & BFD_PLUGIN) == 0))
4740                   || (h->ref_dynamic_nonweak
4741                       && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
4742                       && !on_needed_list (elf_dt_name (abfd),
4743                                           htab->needed, NULL))))
4744             {
4745               int ret;
4746               const char *soname = elf_dt_name (abfd);
4747
4748               info->callbacks->minfo ("%!", soname, old_bfd,
4749                                       h->root.root.string);
4750
4751               /* A symbol from a library loaded via DT_NEEDED of some
4752                  other library is referenced by a regular object.
4753                  Add a DT_NEEDED entry for it.  Issue an error if
4754                  --no-add-needed is used and the reference was not
4755                  a weak one.  */
4756               if (old_bfd != NULL
4757                   && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
4758                 {
4759                   _bfd_error_handler
4760                     (_("%B: undefined reference to symbol '%s'"),
4761                      old_bfd, name);
4762                   bfd_set_error (bfd_error_missing_dso);
4763                   goto error_free_vers;
4764                 }
4765
4766               elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class)
4767                 (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED);
4768
4769               add_needed = TRUE;
4770               ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4771               if (ret < 0)
4772                 goto error_free_vers;
4773
4774               BFD_ASSERT (ret == 0);
4775             }
4776         }
4777     }
4778
4779   if (extversym != NULL)
4780     {
4781       free (extversym);
4782       extversym = NULL;
4783     }
4784
4785   if (isymbuf != NULL)
4786     {
4787       free (isymbuf);
4788       isymbuf = NULL;
4789     }
4790
4791   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4792     {
4793       unsigned int i;
4794
4795       /* Restore the symbol table.  */
4796       old_ent = (char *) old_tab + tabsize;
4797       memset (elf_sym_hashes (abfd), 0,
4798               extsymcount * sizeof (struct elf_link_hash_entry *));
4799       htab->root.table.table = old_table;
4800       htab->root.table.size = old_size;
4801       htab->root.table.count = old_count;
4802       memcpy (htab->root.table.table, old_tab, tabsize);
4803       htab->root.undefs = old_undefs;
4804       htab->root.undefs_tail = old_undefs_tail;
4805       _bfd_elf_strtab_restore (htab->dynstr, old_strtab);
4806       free (old_strtab);
4807       old_strtab = NULL;
4808       for (i = 0; i < htab->root.table.size; i++)
4809         {
4810           struct bfd_hash_entry *p;
4811           struct elf_link_hash_entry *h;
4812           bfd_size_type size;
4813           unsigned int alignment_power;
4814
4815           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4816             {
4817               h = (struct elf_link_hash_entry *) p;
4818               if (h->root.type == bfd_link_hash_warning)
4819                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4820
4821               /* Preserve the maximum alignment and size for common
4822                  symbols even if this dynamic lib isn't on DT_NEEDED
4823                  since it can still be loaded at run time by another
4824                  dynamic lib.  */
4825               if (h->root.type == bfd_link_hash_common)
4826                 {
4827                   size = h->root.u.c.size;
4828                   alignment_power = h->root.u.c.p->alignment_power;
4829                 }
4830               else
4831                 {
4832                   size = 0;
4833                   alignment_power = 0;
4834                 }
4835               memcpy (p, old_ent, htab->root.table.entsize);
4836               old_ent = (char *) old_ent + htab->root.table.entsize;
4837               h = (struct elf_link_hash_entry *) p;
4838               if (h->root.type == bfd_link_hash_warning)
4839                 {
4840                   memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
4841                   old_ent = (char *) old_ent + htab->root.table.entsize;
4842                   h = (struct elf_link_hash_entry *) h->root.u.i.link;
4843                 }
4844               if (h->root.type == bfd_link_hash_common)
4845                 {
4846                   if (size > h->root.u.c.size)
4847                     h->root.u.c.size = size;
4848                   if (alignment_power > h->root.u.c.p->alignment_power)
4849                     h->root.u.c.p->alignment_power = alignment_power;
4850                 }
4851             }
4852         }
4853
4854       /* Make a special call to the linker "notice" function to
4855          tell it that symbols added for crefs may need to be removed.  */
4856       if (!(*bed->notice_as_needed) (abfd, info, notice_not_needed))
4857         goto error_free_vers;
4858
4859       free (old_tab);
4860       objalloc_free_block ((struct objalloc *) htab->root.table.memory,
4861                            alloc_mark);
4862       if (nondeflt_vers != NULL)
4863         free (nondeflt_vers);
4864       return TRUE;
4865     }
4866
4867   if (old_tab != NULL)
4868     {
4869       if (!(*bed->notice_as_needed) (abfd, info, notice_needed))
4870         goto error_free_vers;
4871       free (old_tab);
4872       old_tab = NULL;
4873     }
4874
4875   /* Now that all the symbols from this input file are created, if
4876      not performing a relocatable link, handle .symver foo, foo@BAR
4877      such that any relocs against foo become foo@BAR.  */
4878   if (!bfd_link_relocatable (info) && nondeflt_vers != NULL)
4879     {
4880       size_t cnt, symidx;
4881
4882       for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
4883         {
4884           struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
4885           char *shortname, *p;
4886
4887           p = strchr (h->root.root.string, ELF_VER_CHR);
4888           if (p == NULL
4889               || (h->root.type != bfd_link_hash_defined
4890                   && h->root.type != bfd_link_hash_defweak))
4891             continue;
4892
4893           amt = p - h->root.root.string;
4894           shortname = (char *) bfd_malloc (amt + 1);
4895           if (!shortname)
4896             goto error_free_vers;
4897           memcpy (shortname, h->root.root.string, amt);
4898           shortname[amt] = '\0';
4899
4900           hi = (struct elf_link_hash_entry *)
4901                bfd_link_hash_lookup (&htab->root, shortname,
4902                                      FALSE, FALSE, FALSE);
4903           if (hi != NULL
4904               && hi->root.type == h->root.type
4905               && hi->root.u.def.value == h->root.u.def.value
4906               && hi->root.u.def.section == h->root.u.def.section)
4907             {
4908               (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
4909               hi->root.type = bfd_link_hash_indirect;
4910               hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
4911               (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
4912               sym_hash = elf_sym_hashes (abfd);
4913               if (sym_hash)
4914                 for (symidx = 0; symidx < extsymcount; ++symidx)
4915                   if (sym_hash[symidx] == hi)
4916                     {
4917                       sym_hash[symidx] = h;
4918                       break;
4919                     }
4920             }
4921           free (shortname);
4922         }
4923       free (nondeflt_vers);
4924       nondeflt_vers = NULL;
4925     }
4926
4927   /* Now set the weakdefs field correctly for all the weak defined
4928      symbols we found.  The only way to do this is to search all the
4929      symbols.  Since we only need the information for non functions in
4930      dynamic objects, that's the only time we actually put anything on
4931      the list WEAKS.  We need this information so that if a regular
4932      object refers to a symbol defined weakly in a dynamic object, the
4933      real symbol in the dynamic object is also put in the dynamic
4934      symbols; we also must arrange for both symbols to point to the
4935      same memory location.  We could handle the general case of symbol
4936      aliasing, but a general symbol alias can only be generated in
4937      assembler code, handling it correctly would be very time
4938      consuming, and other ELF linkers don't handle general aliasing
4939      either.  */
4940   if (weaks != NULL)
4941     {
4942       struct elf_link_hash_entry **hpp;
4943       struct elf_link_hash_entry **hppend;
4944       struct elf_link_hash_entry **sorted_sym_hash;
4945       struct elf_link_hash_entry *h;
4946       size_t sym_count;
4947
4948       /* Since we have to search the whole symbol list for each weak
4949          defined symbol, search time for N weak defined symbols will be
4950          O(N^2). Binary search will cut it down to O(NlogN).  */
4951       amt = extsymcount;
4952       amt *= sizeof (struct elf_link_hash_entry *);
4953       sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt);
4954       if (sorted_sym_hash == NULL)
4955         goto error_return;
4956       sym_hash = sorted_sym_hash;
4957       hpp = elf_sym_hashes (abfd);
4958       hppend = hpp + extsymcount;
4959       sym_count = 0;
4960       for (; hpp < hppend; hpp++)
4961         {
4962           h = *hpp;
4963           if (h != NULL
4964               && h->root.type == bfd_link_hash_defined
4965               && !bed->is_function_type (h->type))
4966             {
4967               *sym_hash = h;
4968               sym_hash++;
4969               sym_count++;
4970             }
4971         }
4972
4973       qsort (sorted_sym_hash, sym_count,
4974              sizeof (struct elf_link_hash_entry *),
4975              elf_sort_symbol);
4976
4977       while (weaks != NULL)
4978         {
4979           struct elf_link_hash_entry *hlook;
4980           asection *slook;
4981           bfd_vma vlook;
4982           size_t i, j, idx = 0;
4983
4984           hlook = weaks;
4985           weaks = hlook->u.weakdef;
4986           hlook->u.weakdef = NULL;
4987
4988           BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
4989                       || hlook->root.type == bfd_link_hash_defweak
4990                       || hlook->root.type == bfd_link_hash_common
4991                       || hlook->root.type == bfd_link_hash_indirect);
4992           slook = hlook->root.u.def.section;
4993           vlook = hlook->root.u.def.value;
4994
4995           i = 0;
4996           j = sym_count;
4997           while (i != j)
4998             {
4999               bfd_signed_vma vdiff;
5000               idx = (i + j) / 2;
5001               h = sorted_sym_hash[idx];
5002               vdiff = vlook - h->root.u.def.value;
5003               if (vdiff < 0)
5004                 j = idx;
5005               else if (vdiff > 0)
5006                 i = idx + 1;
5007               else
5008                 {
5009                   int sdiff = slook->id - h->root.u.def.section->id;
5010                   if (sdiff < 0)
5011                     j = idx;
5012                   else if (sdiff > 0)
5013                     i = idx + 1;
5014                   else
5015                     break;
5016                 }
5017             }
5018
5019           /* We didn't find a value/section match.  */
5020           if (i == j)
5021             continue;
5022
5023           /* With multiple aliases, or when the weak symbol is already
5024              strongly defined, we have multiple matching symbols and
5025              the binary search above may land on any of them.  Step
5026              one past the matching symbol(s).  */
5027           while (++idx != j)
5028             {
5029               h = sorted_sym_hash[idx];
5030               if (h->root.u.def.section != slook
5031                   || h->root.u.def.value != vlook)
5032                 break;
5033             }
5034
5035           /* Now look back over the aliases.  Since we sorted by size
5036              as well as value and section, we'll choose the one with
5037              the largest size.  */
5038           while (idx-- != i)
5039             {
5040               h = sorted_sym_hash[idx];
5041
5042               /* Stop if value or section doesn't match.  */
5043               if (h->root.u.def.section != slook
5044                   || h->root.u.def.value != vlook)
5045                 break;
5046               else if (h != hlook)
5047                 {
5048                   hlook->u.weakdef = h;
5049
5050                   /* If the weak definition is in the list of dynamic
5051                      symbols, make sure the real definition is put
5052                      there as well.  */
5053                   if (hlook->dynindx != -1 && h->dynindx == -1)
5054                     {
5055                       if (! bfd_elf_link_record_dynamic_symbol (info, h))
5056                         {
5057                         err_free_sym_hash:
5058                           free (sorted_sym_hash);
5059                           goto error_return;
5060                         }
5061                     }
5062
5063                   /* If the real definition is in the list of dynamic
5064                      symbols, make sure the weak definition is put
5065                      there as well.  If we don't do this, then the
5066                      dynamic loader might not merge the entries for the
5067                      real definition and the weak definition.  */
5068                   if (h->dynindx != -1 && hlook->dynindx == -1)
5069                     {
5070                       if (! bfd_elf_link_record_dynamic_symbol (info, hlook))
5071                         goto err_free_sym_hash;
5072                     }
5073                   break;
5074                 }
5075             }
5076         }
5077
5078       free (sorted_sym_hash);
5079     }
5080
5081   if (bed->check_directives
5082       && !(*bed->check_directives) (abfd, info))
5083     return FALSE;
5084
5085   if (!info->check_relocs_after_open_input
5086       && !_bfd_elf_link_check_relocs (abfd, info))
5087     return FALSE;
5088
5089   /* If this is a non-traditional link, try to optimize the handling
5090      of the .stab/.stabstr sections.  */
5091   if (! dynamic
5092       && ! info->traditional_format
5093       && is_elf_hash_table (htab)
5094       && (info->strip != strip_all && info->strip != strip_debugger))
5095     {
5096       asection *stabstr;
5097
5098       stabstr = bfd_get_section_by_name (abfd, ".stabstr");
5099       if (stabstr != NULL)
5100         {
5101           bfd_size_type string_offset = 0;
5102           asection *stab;
5103
5104           for (stab = abfd->sections; stab; stab = stab->next)
5105             if (CONST_STRNEQ (stab->name, ".stab")
5106                 && (!stab->name[5] ||
5107                     (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
5108                 && (stab->flags & SEC_MERGE) == 0
5109                 && !bfd_is_abs_section (stab->output_section))
5110               {
5111                 struct bfd_elf_section_data *secdata;
5112
5113                 secdata = elf_section_data (stab);
5114                 if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab,
5115                                                stabstr, &secdata->sec_info,
5116                                                &string_offset))
5117                   goto error_return;
5118                 if (secdata->sec_info)
5119                   stab->sec_info_type = SEC_INFO_TYPE_STABS;
5120             }
5121         }
5122     }
5123
5124   if (is_elf_hash_table (htab) && add_needed)
5125     {
5126       /* Add this bfd to the loaded list.  */
5127       struct elf_link_loaded_list *n;
5128
5129       n = (struct elf_link_loaded_list *) bfd_alloc (abfd, sizeof (*n));
5130       if (n == NULL)
5131         goto error_return;
5132       n->abfd = abfd;
5133       n->next = htab->loaded;
5134       htab->loaded = n;
5135     }
5136
5137   return TRUE;
5138
5139  error_free_vers:
5140   if (old_tab != NULL)
5141     free (old_tab);
5142   if (old_strtab != NULL)
5143     free (old_strtab);
5144   if (nondeflt_vers != NULL)
5145     free (nondeflt_vers);
5146   if (extversym != NULL)
5147     free (extversym);
5148  error_free_sym:
5149   if (isymbuf != NULL)
5150     free (isymbuf);
5151  error_return:
5152   return FALSE;
5153 }
5154
5155 /* Return the linker hash table entry of a symbol that might be
5156    satisfied by an archive symbol.  Return -1 on error.  */
5157
5158 struct elf_link_hash_entry *
5159 _bfd_elf_archive_symbol_lookup (bfd *abfd,
5160                                 struct bfd_link_info *info,
5161                                 const char *name)
5162 {
5163   struct elf_link_hash_entry *h;
5164   char *p, *copy;
5165   size_t len, first;
5166
5167   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, TRUE);
5168   if (h != NULL)
5169     return h;
5170
5171   /* If this is a default version (the name contains @@), look up the
5172      symbol again with only one `@' as well as without the version.
5173      The effect is that references to the symbol with and without the
5174      version will be matched by the default symbol in the archive.  */
5175
5176   p = strchr (name, ELF_VER_CHR);
5177   if (p == NULL || p[1] != ELF_VER_CHR)
5178     return h;
5179
5180   /* First check with only one `@'.  */
5181   len = strlen (name);
5182   copy = (char *) bfd_alloc (abfd, len);
5183   if (copy == NULL)
5184     return (struct elf_link_hash_entry *) 0 - 1;
5185
5186   first = p - name + 1;
5187   memcpy (copy, name, first);
5188   memcpy (copy + first, name + first + 1, len - first);
5189
5190   h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, TRUE);
5191   if (h == NULL)
5192     {
5193       /* We also need to check references to the symbol without the
5194          version.  */
5195       copy[first - 1] = '\0';
5196       h = elf_link_hash_lookup (elf_hash_table (info), copy,
5197                                 FALSE, FALSE, TRUE);
5198     }
5199
5200   bfd_release (abfd, copy);
5201   return h;
5202 }
5203
5204 /* Add symbols from an ELF archive file to the linker hash table.  We
5205    don't use _bfd_generic_link_add_archive_symbols because we need to
5206    handle versioned symbols.
5207
5208    Fortunately, ELF archive handling is simpler than that done by
5209    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
5210    oddities.  In ELF, if we find a symbol in the archive map, and the
5211    symbol is currently undefined, we know that we must pull in that
5212    object file.
5213
5214    Unfortunately, we do have to make multiple passes over the symbol
5215    table until nothing further is resolved.  */
5216
5217 static bfd_boolean
5218 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
5219 {
5220   symindex c;
5221   unsigned char *included = NULL;
5222   carsym *symdefs;
5223   bfd_boolean loop;
5224   bfd_size_type amt;
5225   const struct elf_backend_data *bed;
5226   struct elf_link_hash_entry * (*archive_symbol_lookup)
5227     (bfd *, struct bfd_link_info *, const char *);
5228
5229   if (! bfd_has_map (abfd))
5230     {
5231       /* An empty archive is a special case.  */
5232       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
5233         return TRUE;
5234       bfd_set_error (bfd_error_no_armap);
5235       return FALSE;
5236     }
5237
5238   /* Keep track of all symbols we know to be already defined, and all
5239      files we know to be already included.  This is to speed up the
5240      second and subsequent passes.  */
5241   c = bfd_ardata (abfd)->symdef_count;
5242   if (c == 0)
5243     return TRUE;
5244   amt = c;
5245   amt *= sizeof (*included);
5246   included = (unsigned char *) bfd_zmalloc (amt);
5247   if (included == NULL)
5248     return FALSE;
5249
5250   symdefs = bfd_ardata (abfd)->symdefs;
5251   bed = get_elf_backend_data (abfd);
5252   archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup;
5253
5254   do
5255     {
5256       file_ptr last;
5257       symindex i;
5258       carsym *symdef;
5259       carsym *symdefend;
5260
5261       loop = FALSE;
5262       last = -1;
5263
5264       symdef = symdefs;
5265       symdefend = symdef + c;
5266       for (i = 0; symdef < symdefend; symdef++, i++)
5267         {
5268           struct elf_link_hash_entry *h;
5269           bfd *element;
5270           struct bfd_link_hash_entry *undefs_tail;
5271           symindex mark;
5272
5273           if (included[i])
5274             continue;
5275           if (symdef->file_offset == last)
5276             {
5277               included[i] = TRUE;
5278               continue;
5279             }
5280
5281           h = archive_symbol_lookup (abfd, info, symdef->name);
5282           if (h == (struct elf_link_hash_entry *) 0 - 1)
5283             goto error_return;
5284
5285           if (h == NULL)
5286             continue;
5287
5288           if (h->root.type == bfd_link_hash_common)
5289             {
5290               /* We currently have a common symbol.  The archive map contains
5291                  a reference to this symbol, so we may want to include it.  We
5292                  only want to include it however, if this archive element
5293                  contains a definition of the symbol, not just another common
5294                  declaration of it.
5295
5296                  Unfortunately some archivers (including GNU ar) will put
5297                  declarations of common symbols into their archive maps, as
5298                  well as real definitions, so we cannot just go by the archive
5299                  map alone.  Instead we must read in the element's symbol
5300                  table and check that to see what kind of symbol definition
5301                  this is.  */
5302               if (! elf_link_is_defined_archive_symbol (abfd, symdef))
5303                 continue;
5304             }
5305           else if (h->root.type != bfd_link_hash_undefined)
5306             {
5307               if (h->root.type != bfd_link_hash_undefweak)
5308                 /* Symbol must be defined.  Don't check it again.  */
5309                 included[i] = TRUE;
5310               continue;
5311             }
5312
5313           /* We need to include this archive member.  */
5314           element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
5315           if (element == NULL)
5316             goto error_return;
5317
5318           if (! bfd_check_format (element, bfd_object))
5319             goto error_return;
5320
5321           undefs_tail = info->hash->undefs_tail;
5322
5323           if (!(*info->callbacks
5324                 ->add_archive_element) (info, element, symdef->name, &element))
5325             continue;
5326           if (!bfd_link_add_symbols (element, info))
5327             goto error_return;
5328
5329           /* If there are any new undefined symbols, we need to make
5330              another pass through the archive in order to see whether
5331              they can be defined.  FIXME: This isn't perfect, because
5332              common symbols wind up on undefs_tail and because an
5333              undefined symbol which is defined later on in this pass
5334              does not require another pass.  This isn't a bug, but it
5335              does make the code less efficient than it could be.  */
5336           if (undefs_tail != info->hash->undefs_tail)
5337             loop = TRUE;
5338
5339           /* Look backward to mark all symbols from this object file
5340              which we have already seen in this pass.  */
5341           mark = i;
5342           do
5343             {
5344               included[mark] = TRUE;
5345               if (mark == 0)
5346                 break;
5347               --mark;
5348             }
5349           while (symdefs[mark].file_offset == symdef->file_offset);
5350
5351           /* We mark subsequent symbols from this object file as we go
5352              on through the loop.  */
5353           last = symdef->file_offset;
5354         }
5355     }
5356   while (loop);
5357
5358   free (included);
5359
5360   return TRUE;
5361
5362  error_return:
5363   if (included != NULL)
5364     free (included);
5365   return FALSE;
5366 }
5367
5368 /* Given an ELF BFD, add symbols to the global hash table as
5369    appropriate.  */
5370
5371 bfd_boolean
5372 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
5373 {
5374   switch (bfd_get_format (abfd))
5375     {
5376     case bfd_object:
5377       return elf_link_add_object_symbols (abfd, info);
5378     case bfd_archive:
5379       return elf_link_add_archive_symbols (abfd, info);
5380     default:
5381       bfd_set_error (bfd_error_wrong_format);
5382       return FALSE;
5383     }
5384 }
5385 \f
5386 struct hash_codes_info
5387 {
5388   unsigned long *hashcodes;
5389   bfd_boolean error;
5390 };
5391
5392 /* This function will be called though elf_link_hash_traverse to store
5393    all hash value of the exported symbols in an array.  */
5394
5395 static bfd_boolean
5396 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
5397 {
5398   struct hash_codes_info *inf = (struct hash_codes_info *) data;
5399   const char *name;
5400   unsigned long ha;
5401   char *alc = NULL;
5402
5403   /* Ignore indirect symbols.  These are added by the versioning code.  */
5404   if (h->dynindx == -1)
5405     return TRUE;
5406
5407   name = h->root.root.string;
5408   if (h->versioned >= versioned)
5409     {
5410       char *p = strchr (name, ELF_VER_CHR);
5411       if (p != NULL)
5412         {
5413           alc = (char *) bfd_malloc (p - name + 1);
5414           if (alc == NULL)
5415             {
5416               inf->error = TRUE;
5417               return FALSE;
5418             }
5419           memcpy (alc, name, p - name);
5420           alc[p - name] = '\0';
5421           name = alc;
5422         }
5423     }
5424
5425   /* Compute the hash value.  */
5426   ha = bfd_elf_hash (name);
5427
5428   /* Store the found hash value in the array given as the argument.  */
5429   *(inf->hashcodes)++ = ha;
5430
5431   /* And store it in the struct so that we can put it in the hash table
5432      later.  */
5433   h->u.elf_hash_value = ha;
5434
5435   if (alc != NULL)
5436     free (alc);
5437
5438   return TRUE;
5439 }
5440
5441 struct collect_gnu_hash_codes
5442 {
5443   bfd *output_bfd;
5444   const struct elf_backend_data *bed;
5445   unsigned long int nsyms;
5446   unsigned long int maskbits;
5447   unsigned long int *hashcodes;
5448   unsigned long int *hashval;
5449   unsigned long int *indx;
5450   unsigned long int *counts;
5451   bfd_vma *bitmask;
5452   bfd_byte *contents;
5453   long int min_dynindx;
5454   unsigned long int bucketcount;
5455   unsigned long int symindx;
5456   long int local_indx;
5457   long int shift1, shift2;
5458   unsigned long int mask;
5459   bfd_boolean error;
5460 };
5461
5462 /* This function will be called though elf_link_hash_traverse to store
5463    all hash value of the exported symbols in an array.  */
5464
5465 static bfd_boolean
5466 elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data)
5467 {
5468   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5469   const char *name;
5470   unsigned long ha;
5471   char *alc = NULL;
5472
5473   /* Ignore indirect symbols.  These are added by the versioning code.  */
5474   if (h->dynindx == -1)
5475     return TRUE;
5476
5477   /* Ignore also local symbols and undefined symbols.  */
5478   if (! (*s->bed->elf_hash_symbol) (h))
5479     return TRUE;
5480
5481   name = h->root.root.string;
5482   if (h->versioned >= versioned)
5483     {
5484       char *p = strchr (name, ELF_VER_CHR);
5485       if (p != NULL)
5486         {
5487           alc = (char *) bfd_malloc (p - name + 1);
5488           if (alc == NULL)
5489             {
5490               s->error = TRUE;
5491               return FALSE;
5492             }
5493           memcpy (alc, name, p - name);
5494           alc[p - name] = '\0';
5495           name = alc;
5496         }
5497     }
5498
5499   /* Compute the hash value.  */
5500   ha = bfd_elf_gnu_hash (name);
5501
5502   /* Store the found hash value in the array for compute_bucket_count,
5503      and also for .dynsym reordering purposes.  */
5504   s->hashcodes[s->nsyms] = ha;
5505   s->hashval[h->dynindx] = ha;
5506   ++s->nsyms;
5507   if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx)
5508     s->min_dynindx = h->dynindx;
5509
5510   if (alc != NULL)
5511     free (alc);
5512
5513   return TRUE;
5514 }
5515
5516 /* This function will be called though elf_link_hash_traverse to do
5517    final dynaminc symbol renumbering.  */
5518
5519 static bfd_boolean
5520 elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data)
5521 {
5522   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5523   unsigned long int bucket;
5524   unsigned long int val;
5525
5526   /* Ignore indirect symbols.  */
5527   if (h->dynindx == -1)
5528     return TRUE;
5529
5530   /* Ignore also local symbols and undefined symbols.  */
5531   if (! (*s->bed->elf_hash_symbol) (h))
5532     {
5533       if (h->dynindx >= s->min_dynindx)
5534         h->dynindx = s->local_indx++;
5535       return TRUE;
5536     }
5537
5538   bucket = s->hashval[h->dynindx] % s->bucketcount;
5539   val = (s->hashval[h->dynindx] >> s->shift1)
5540         & ((s->maskbits >> s->shift1) - 1);
5541   s->bitmask[val] |= ((bfd_vma) 1) << (s->hashval[h->dynindx] & s->mask);
5542   s->bitmask[val]
5543     |= ((bfd_vma) 1) << ((s->hashval[h->dynindx] >> s->shift2) & s->mask);
5544   val = s->hashval[h->dynindx] & ~(unsigned long int) 1;
5545   if (s->counts[bucket] == 1)
5546     /* Last element terminates the chain.  */
5547     val |= 1;
5548   bfd_put_32 (s->output_bfd, val,
5549               s->contents + (s->indx[bucket] - s->symindx) * 4);
5550   --s->counts[bucket];
5551   h->dynindx = s->indx[bucket]++;
5552   return TRUE;
5553 }
5554
5555 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
5556
5557 bfd_boolean
5558 _bfd_elf_hash_symbol (struct elf_link_hash_entry *h)
5559 {
5560   return !(h->forced_local
5561            || h->root.type == bfd_link_hash_undefined
5562            || h->root.type == bfd_link_hash_undefweak
5563            || ((h->root.type == bfd_link_hash_defined
5564                 || h->root.type == bfd_link_hash_defweak)
5565                && h->root.u.def.section->output_section == NULL));
5566 }
5567
5568 /* Array used to determine the number of hash table buckets to use
5569    based on the number of symbols there are.  If there are fewer than
5570    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
5571    fewer than 37 we use 17 buckets, and so forth.  We never use more
5572    than 32771 buckets.  */
5573
5574 static const size_t elf_buckets[] =
5575 {
5576   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
5577   16411, 32771, 0
5578 };
5579
5580 /* Compute bucket count for hashing table.  We do not use a static set
5581    of possible tables sizes anymore.  Instead we determine for all
5582    possible reasonable sizes of the table the outcome (i.e., the
5583    number of collisions etc) and choose the best solution.  The
5584    weighting functions are not too simple to allow the table to grow
5585    without bounds.  Instead one of the weighting factors is the size.
5586    Therefore the result is always a good payoff between few collisions
5587    (= short chain lengths) and table size.  */
5588 static size_t
5589 compute_bucket_count (struct bfd_link_info *info ATTRIBUTE_UNUSED,
5590                       unsigned long int *hashcodes ATTRIBUTE_UNUSED,
5591                       unsigned long int nsyms,
5592                       int gnu_hash)
5593 {
5594   size_t best_size = 0;
5595   unsigned long int i;
5596
5597   /* We have a problem here.  The following code to optimize the table
5598      size requires an integer type with more the 32 bits.  If
5599      BFD_HOST_U_64_BIT is set we know about such a type.  */
5600 #ifdef BFD_HOST_U_64_BIT
5601   if (info->optimize)
5602     {
5603       size_t minsize;
5604       size_t maxsize;
5605       BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
5606       bfd *dynobj = elf_hash_table (info)->dynobj;
5607       size_t dynsymcount = elf_hash_table (info)->dynsymcount;
5608       const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
5609       unsigned long int *counts;
5610       bfd_size_type amt;
5611       unsigned int no_improvement_count = 0;
5612
5613       /* Possible optimization parameters: if we have NSYMS symbols we say
5614          that the hashing table must at least have NSYMS/4 and at most
5615          2*NSYMS buckets.  */
5616       minsize = nsyms / 4;
5617       if (minsize == 0)
5618         minsize = 1;
5619       best_size = maxsize = nsyms * 2;
5620       if (gnu_hash)
5621         {
5622           if (minsize < 2)
5623             minsize = 2;
5624           if ((best_size & 31) == 0)
5625             ++best_size;
5626         }
5627
5628       /* Create array where we count the collisions in.  We must use bfd_malloc
5629          since the size could be large.  */
5630       amt = maxsize;
5631       amt *= sizeof (unsigned long int);
5632       counts = (unsigned long int *) bfd_malloc (amt);
5633       if (counts == NULL)
5634         return 0;
5635
5636       /* Compute the "optimal" size for the hash table.  The criteria is a
5637          minimal chain length.  The minor criteria is (of course) the size
5638          of the table.  */
5639       for (i = minsize; i < maxsize; ++i)
5640         {
5641           /* Walk through the array of hashcodes and count the collisions.  */
5642           BFD_HOST_U_64_BIT max;
5643           unsigned long int j;
5644           unsigned long int fact;
5645
5646           if (gnu_hash && (i & 31) == 0)
5647             continue;
5648
5649           memset (counts, '\0', i * sizeof (unsigned long int));
5650
5651           /* Determine how often each hash bucket is used.  */
5652           for (j = 0; j < nsyms; ++j)
5653             ++counts[hashcodes[j] % i];
5654
5655           /* For the weight function we need some information about the
5656              pagesize on the target.  This is information need not be 100%
5657              accurate.  Since this information is not available (so far) we
5658              define it here to a reasonable default value.  If it is crucial
5659              to have a better value some day simply define this value.  */
5660 # ifndef BFD_TARGET_PAGESIZE
5661 #  define BFD_TARGET_PAGESIZE   (4096)
5662 # endif
5663
5664           /* We in any case need 2 + DYNSYMCOUNT entries for the size values
5665              and the chains.  */
5666           max = (2 + dynsymcount) * bed->s->sizeof_hash_entry;
5667
5668 # if 1
5669           /* Variant 1: optimize for short chains.  We add the squares
5670              of all the chain lengths (which favors many small chain
5671              over a few long chains).  */
5672           for (j = 0; j < i; ++j)
5673             max += counts[j] * counts[j];
5674
5675           /* This adds penalties for the overall size of the table.  */
5676           fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5677           max *= fact * fact;
5678 # else
5679           /* Variant 2: Optimize a lot more for small table.  Here we
5680              also add squares of the size but we also add penalties for
5681              empty slots (the +1 term).  */
5682           for (j = 0; j < i; ++j)
5683             max += (1 + counts[j]) * (1 + counts[j]);
5684
5685           /* The overall size of the table is considered, but not as
5686              strong as in variant 1, where it is squared.  */
5687           fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5688           max *= fact;
5689 # endif
5690
5691           /* Compare with current best results.  */
5692           if (max < best_chlen)
5693             {
5694               best_chlen = max;
5695               best_size = i;
5696               no_improvement_count = 0;
5697             }
5698           /* PR 11843: Avoid futile long searches for the best bucket size
5699              when there are a large number of symbols.  */
5700           else if (++no_improvement_count == 100)
5701             break;
5702         }
5703
5704       free (counts);
5705     }
5706   else
5707 #endif /* defined (BFD_HOST_U_64_BIT) */
5708     {
5709       /* This is the fallback solution if no 64bit type is available or if we
5710          are not supposed to spend much time on optimizations.  We select the
5711          bucket count using a fixed set of numbers.  */
5712       for (i = 0; elf_buckets[i] != 0; i++)
5713         {
5714           best_size = elf_buckets[i];
5715           if (nsyms < elf_buckets[i + 1])
5716             break;
5717         }
5718       if (gnu_hash && best_size < 2)
5719         best_size = 2;
5720     }
5721
5722   return best_size;
5723 }
5724
5725 /* Size any SHT_GROUP section for ld -r.  */
5726
5727 bfd_boolean
5728 _bfd_elf_size_group_sections (struct bfd_link_info *info)
5729 {
5730   bfd *ibfd;
5731
5732   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
5733     if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
5734         && !_bfd_elf_fixup_group_sections (ibfd, bfd_abs_section_ptr))
5735       return FALSE;
5736   return TRUE;
5737 }
5738
5739 /* Set a default stack segment size.  The value in INFO wins.  If it
5740    is unset, LEGACY_SYMBOL's value is used, and if that symbol is
5741    undefined it is initialized.  */
5742
5743 bfd_boolean
5744 bfd_elf_stack_segment_size (bfd *output_bfd,
5745                             struct bfd_link_info *info,
5746                             const char *legacy_symbol,
5747                             bfd_vma default_size)
5748 {
5749   struct elf_link_hash_entry *h = NULL;
5750
5751   /* Look for legacy symbol.  */
5752   if (legacy_symbol)
5753     h = elf_link_hash_lookup (elf_hash_table (info), legacy_symbol,
5754                               FALSE, FALSE, FALSE);
5755   if (h && (h->root.type == bfd_link_hash_defined
5756             || h->root.type == bfd_link_hash_defweak)
5757       && h->def_regular
5758       && (h->type == STT_NOTYPE || h->type == STT_OBJECT))
5759     {
5760       /* The symbol has no type if specified on the command line.  */
5761       h->type = STT_OBJECT;
5762       if (info->stacksize)
5763         _bfd_error_handler (_("%B: stack size specified and %s set"),
5764                             output_bfd, legacy_symbol);
5765       else if (h->root.u.def.section != bfd_abs_section_ptr)
5766         _bfd_error_handler (_("%B: %s not absolute"),
5767                             output_bfd, legacy_symbol);
5768       else
5769         info->stacksize = h->root.u.def.value;
5770     }
5771
5772   if (!info->stacksize)
5773     /* If the user didn't set a size, or explicitly inhibit the
5774        size, set it now.  */
5775     info->stacksize = default_size;
5776
5777   /* Provide the legacy symbol, if it is referenced.  */
5778   if (h && (h->root.type == bfd_link_hash_undefined
5779             || h->root.type == bfd_link_hash_undefweak))
5780     {
5781       struct bfd_link_hash_entry *bh = NULL;
5782
5783       if (!(_bfd_generic_link_add_one_symbol
5784             (info, output_bfd, legacy_symbol,
5785              BSF_GLOBAL, bfd_abs_section_ptr,
5786              info->stacksize >= 0 ? info->stacksize : 0,
5787              NULL, FALSE, get_elf_backend_data (output_bfd)->collect, &bh)))
5788         return FALSE;
5789
5790       h = (struct elf_link_hash_entry *) bh;
5791       h->def_regular = 1;
5792       h->type = STT_OBJECT;
5793     }
5794
5795   return TRUE;
5796 }
5797
5798 /* Set up the sizes and contents of the ELF dynamic sections.  This is
5799    called by the ELF linker emulation before_allocation routine.  We
5800    must set the sizes of the sections before the linker sets the
5801    addresses of the various sections.  */
5802
5803 bfd_boolean
5804 bfd_elf_size_dynamic_sections (bfd *output_bfd,
5805                                const char *soname,
5806                                const char *rpath,
5807                                const char *filter_shlib,
5808                                const char *audit,
5809                                const char *depaudit,
5810                                const char * const *auxiliary_filters,
5811                                struct bfd_link_info *info,
5812                                asection **sinterpptr)
5813 {
5814   size_t soname_indx;
5815   bfd *dynobj;
5816   const struct elf_backend_data *bed;
5817   struct elf_info_failed asvinfo;
5818
5819   *sinterpptr = NULL;
5820
5821   soname_indx = (size_t) -1;
5822
5823   if (!is_elf_hash_table (info->hash))
5824     return TRUE;
5825
5826   bed = get_elf_backend_data (output_bfd);
5827
5828   /* Any syms created from now on start with -1 in
5829      got.refcount/offset and plt.refcount/offset.  */
5830   elf_hash_table (info)->init_got_refcount
5831     = elf_hash_table (info)->init_got_offset;
5832   elf_hash_table (info)->init_plt_refcount
5833     = elf_hash_table (info)->init_plt_offset;
5834
5835   if (bfd_link_relocatable (info)
5836       && !_bfd_elf_size_group_sections (info))
5837     return FALSE;
5838
5839   /* The backend may have to create some sections regardless of whether
5840      we're dynamic or not.  */
5841   if (bed->elf_backend_always_size_sections
5842       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
5843     return FALSE;
5844
5845   /* Determine any GNU_STACK segment requirements, after the backend
5846      has had a chance to set a default segment size.  */
5847   if (info->execstack)
5848     elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
5849   else if (info->noexecstack)
5850     elf_stack_flags (output_bfd) = PF_R | PF_W;
5851   else
5852     {
5853       bfd *inputobj;
5854       asection *notesec = NULL;
5855       int exec = 0;
5856
5857       for (inputobj = info->input_bfds;
5858            inputobj;
5859            inputobj = inputobj->link.next)
5860         {
5861           asection *s;
5862
5863           if (inputobj->flags
5864               & (DYNAMIC | EXEC_P | BFD_PLUGIN | BFD_LINKER_CREATED))
5865             continue;
5866           s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
5867           if (s)
5868             {
5869               if (s->flags & SEC_CODE)
5870                 exec = PF_X;
5871               notesec = s;
5872             }
5873           else if (bed->default_execstack)
5874             exec = PF_X;
5875         }
5876       if (notesec || info->stacksize > 0)
5877         elf_stack_flags (output_bfd) = PF_R | PF_W | exec;
5878       if (notesec && exec && bfd_link_relocatable (info)
5879           && notesec->output_section != bfd_abs_section_ptr)
5880         notesec->output_section->flags |= SEC_CODE;
5881     }
5882
5883   dynobj = elf_hash_table (info)->dynobj;
5884
5885   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
5886     {
5887       struct elf_info_failed eif;
5888       struct elf_link_hash_entry *h;
5889       asection *dynstr;
5890       struct bfd_elf_version_tree *t;
5891       struct bfd_elf_version_expr *d;
5892       asection *s;
5893       bfd_boolean all_defined;
5894
5895       *sinterpptr = bfd_get_linker_section (dynobj, ".interp");
5896       BFD_ASSERT (*sinterpptr != NULL || !bfd_link_executable (info) || info->nointerp);
5897
5898       if (soname != NULL)
5899         {
5900           soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5901                                              soname, TRUE);
5902           if (soname_indx == (size_t) -1
5903               || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
5904             return FALSE;
5905         }
5906
5907       if (info->symbolic)
5908         {
5909           if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
5910             return FALSE;
5911           info->flags |= DF_SYMBOLIC;
5912         }
5913
5914       if (rpath != NULL)
5915         {
5916           size_t indx;
5917           bfd_vma tag;
5918
5919           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
5920                                       TRUE);
5921           if (indx == (size_t) -1)
5922             return FALSE;
5923
5924           tag = info->new_dtags ? DT_RUNPATH : DT_RPATH;
5925           if (!_bfd_elf_add_dynamic_entry (info, tag, indx))
5926             return FALSE;
5927         }
5928
5929       if (filter_shlib != NULL)
5930         {
5931           size_t indx;
5932
5933           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5934                                       filter_shlib, TRUE);
5935           if (indx == (size_t) -1
5936               || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
5937             return FALSE;
5938         }
5939
5940       if (auxiliary_filters != NULL)
5941         {
5942           const char * const *p;
5943
5944           for (p = auxiliary_filters; *p != NULL; p++)
5945             {
5946               size_t indx;
5947
5948               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5949                                           *p, TRUE);
5950               if (indx == (size_t) -1
5951                   || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
5952                 return FALSE;
5953             }
5954         }
5955
5956       if (audit != NULL)
5957         {
5958           size_t indx;
5959
5960           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit,
5961                                       TRUE);
5962           if (indx == (size_t) -1
5963               || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx))
5964             return FALSE;
5965         }
5966
5967       if (depaudit != NULL)
5968         {
5969           size_t indx;
5970
5971           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit,
5972                                       TRUE);
5973           if (indx == (size_t) -1
5974               || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx))
5975             return FALSE;
5976         }
5977
5978       eif.info = info;
5979       eif.failed = FALSE;
5980
5981       /* If we are supposed to export all symbols into the dynamic symbol
5982          table (this is not the normal case), then do so.  */
5983       if (info->export_dynamic
5984           || (bfd_link_executable (info) && info->dynamic))
5985         {
5986           elf_link_hash_traverse (elf_hash_table (info),
5987                                   _bfd_elf_export_symbol,
5988                                   &eif);
5989           if (eif.failed)
5990             return FALSE;
5991         }
5992
5993       /* Make all global versions with definition.  */
5994       for (t = info->version_info; t != NULL; t = t->next)
5995         for (d = t->globals.list; d != NULL; d = d->next)
5996           if (!d->symver && d->literal)
5997             {
5998               const char *verstr, *name;
5999               size_t namelen, verlen, newlen;
6000               char *newname, *p, leading_char;
6001               struct elf_link_hash_entry *newh;
6002
6003               leading_char = bfd_get_symbol_leading_char (output_bfd);
6004               name = d->pattern;
6005               namelen = strlen (name) + (leading_char != '\0');
6006               verstr = t->name;
6007               verlen = strlen (verstr);
6008               newlen = namelen + verlen + 3;
6009
6010               newname = (char *) bfd_malloc (newlen);
6011               if (newname == NULL)
6012                 return FALSE;
6013               newname[0] = leading_char;
6014               memcpy (newname + (leading_char != '\0'), name, namelen);
6015
6016               /* Check the hidden versioned definition.  */
6017               p = newname + namelen;
6018               *p++ = ELF_VER_CHR;
6019               memcpy (p, verstr, verlen + 1);
6020               newh = elf_link_hash_lookup (elf_hash_table (info),
6021                                            newname, FALSE, FALSE,
6022                                            FALSE);
6023               if (newh == NULL
6024                   || (newh->root.type != bfd_link_hash_defined
6025                       && newh->root.type != bfd_link_hash_defweak))
6026                 {
6027                   /* Check the default versioned definition.  */
6028                   *p++ = ELF_VER_CHR;
6029                   memcpy (p, verstr, verlen + 1);
6030                   newh = elf_link_hash_lookup (elf_hash_table (info),
6031                                                newname, FALSE, FALSE,
6032                                                FALSE);
6033                 }
6034               free (newname);
6035
6036               /* Mark this version if there is a definition and it is
6037                  not defined in a shared object.  */
6038               if (newh != NULL
6039                   && !newh->def_dynamic
6040                   && (newh->root.type == bfd_link_hash_defined
6041                       || newh->root.type == bfd_link_hash_defweak))
6042                 d->symver = 1;
6043             }
6044
6045       /* Attach all the symbols to their version information.  */
6046       asvinfo.info = info;
6047       asvinfo.failed = FALSE;
6048
6049       elf_link_hash_traverse (elf_hash_table (info),
6050                               _bfd_elf_link_assign_sym_version,
6051                               &asvinfo);
6052       if (asvinfo.failed)
6053         return FALSE;
6054
6055       if (!info->allow_undefined_version)
6056         {
6057           /* Check if all global versions have a definition.  */
6058           all_defined = TRUE;
6059           for (t = info->version_info; t != NULL; t = t->next)
6060             for (d = t->globals.list; d != NULL; d = d->next)
6061               if (d->literal && !d->symver && !d->script)
6062                 {
6063                   _bfd_error_handler
6064                     (_("%s: undefined version: %s"),
6065                      d->pattern, t->name);
6066                   all_defined = FALSE;
6067                 }
6068
6069           if (!all_defined)
6070             {
6071               bfd_set_error (bfd_error_bad_value);
6072               return FALSE;
6073             }
6074         }
6075
6076       /* Find all symbols which were defined in a dynamic object and make
6077          the backend pick a reasonable value for them.  */
6078       elf_link_hash_traverse (elf_hash_table (info),
6079                               _bfd_elf_adjust_dynamic_symbol,
6080                               &eif);
6081       if (eif.failed)
6082         return FALSE;
6083
6084       /* Add some entries to the .dynamic section.  We fill in some of the
6085          values later, in bfd_elf_final_link, but we must add the entries
6086          now so that we know the final size of the .dynamic section.  */
6087
6088       /* If there are initialization and/or finalization functions to
6089          call then add the corresponding DT_INIT/DT_FINI entries.  */
6090       h = (info->init_function
6091            ? elf_link_hash_lookup (elf_hash_table (info),
6092                                    info->init_function, FALSE,
6093                                    FALSE, FALSE)
6094            : NULL);
6095       if (h != NULL
6096           && (h->ref_regular
6097               || h->def_regular))
6098         {
6099           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
6100             return FALSE;
6101         }
6102       h = (info->fini_function
6103            ? elf_link_hash_lookup (elf_hash_table (info),
6104                                    info->fini_function, FALSE,
6105                                    FALSE, FALSE)
6106            : NULL);
6107       if (h != NULL
6108           && (h->ref_regular
6109               || h->def_regular))
6110         {
6111           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
6112             return FALSE;
6113         }
6114
6115       s = bfd_get_section_by_name (output_bfd, ".preinit_array");
6116       if (s != NULL && s->linker_has_input)
6117         {
6118           /* DT_PREINIT_ARRAY is not allowed in shared library.  */
6119           if (! bfd_link_executable (info))
6120             {
6121               bfd *sub;
6122               asection *o;
6123
6124               for (sub = info->input_bfds; sub != NULL;
6125                    sub = sub->link.next)
6126                 if (bfd_get_flavour (sub) == bfd_target_elf_flavour)
6127                   for (o = sub->sections; o != NULL; o = o->next)
6128                     if (elf_section_data (o)->this_hdr.sh_type
6129                         == SHT_PREINIT_ARRAY)
6130                       {
6131                         _bfd_error_handler
6132                           (_("%B: .preinit_array section is not allowed in DSO"),
6133                            sub);
6134                         break;
6135                       }
6136
6137               bfd_set_error (bfd_error_nonrepresentable_section);
6138               return FALSE;
6139             }
6140
6141           if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
6142               || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
6143             return FALSE;
6144         }
6145       s = bfd_get_section_by_name (output_bfd, ".init_array");
6146       if (s != NULL && s->linker_has_input)
6147         {
6148           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
6149               || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
6150             return FALSE;
6151         }
6152       s = bfd_get_section_by_name (output_bfd, ".fini_array");
6153       if (s != NULL && s->linker_has_input)
6154         {
6155           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
6156               || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
6157             return FALSE;
6158         }
6159
6160       dynstr = bfd_get_linker_section (dynobj, ".dynstr");
6161       /* If .dynstr is excluded from the link, we don't want any of
6162          these tags.  Strictly, we should be checking each section
6163          individually;  This quick check covers for the case where
6164          someone does a /DISCARD/ : { *(*) }.  */
6165       if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
6166         {
6167           bfd_size_type strsize;
6168
6169           strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6170           if ((info->emit_hash
6171                && !_bfd_elf_add_dynamic_entry (info, DT_HASH, 0))
6172               || (info->emit_gnu_hash
6173                   && !_bfd_elf_add_dynamic_entry (info, DT_GNU_HASH, 0))
6174               || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
6175               || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
6176               || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
6177               || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
6178                                               bed->s->sizeof_sym))
6179             return FALSE;
6180         }
6181     }
6182
6183   if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
6184     return FALSE;
6185
6186   /* The backend must work out the sizes of all the other dynamic
6187      sections.  */
6188   if (dynobj != NULL
6189       && bed->elf_backend_size_dynamic_sections != NULL
6190       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
6191     return FALSE;
6192
6193   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
6194     {
6195       unsigned long section_sym_count;
6196       struct bfd_elf_version_tree *verdefs;
6197       asection *s;
6198
6199       /* Set up the version definition section.  */
6200       s = bfd_get_linker_section (dynobj, ".gnu.version_d");
6201       BFD_ASSERT (s != NULL);
6202
6203       /* We may have created additional version definitions if we are
6204          just linking a regular application.  */
6205       verdefs = info->version_info;
6206
6207       /* Skip anonymous version tag.  */
6208       if (verdefs != NULL && verdefs->vernum == 0)
6209         verdefs = verdefs->next;
6210
6211       if (verdefs == NULL && !info->create_default_symver)
6212         s->flags |= SEC_EXCLUDE;
6213       else
6214         {
6215           unsigned int cdefs;
6216           bfd_size_type size;
6217           struct bfd_elf_version_tree *t;
6218           bfd_byte *p;
6219           Elf_Internal_Verdef def;
6220           Elf_Internal_Verdaux defaux;
6221           struct bfd_link_hash_entry *bh;
6222           struct elf_link_hash_entry *h;
6223           const char *name;
6224
6225           cdefs = 0;
6226           size = 0;
6227
6228           /* Make space for the base version.  */
6229           size += sizeof (Elf_External_Verdef);
6230           size += sizeof (Elf_External_Verdaux);
6231           ++cdefs;
6232
6233           /* Make space for the default version.  */
6234           if (info->create_default_symver)
6235             {
6236               size += sizeof (Elf_External_Verdef);
6237               ++cdefs;
6238             }
6239
6240           for (t = verdefs; t != NULL; t = t->next)
6241             {
6242               struct bfd_elf_version_deps *n;
6243
6244               /* Don't emit base version twice.  */
6245               if (t->vernum == 0)
6246                 continue;
6247
6248               size += sizeof (Elf_External_Verdef);
6249               size += sizeof (Elf_External_Verdaux);
6250               ++cdefs;
6251
6252               for (n = t->deps; n != NULL; n = n->next)
6253                 size += sizeof (Elf_External_Verdaux);
6254             }
6255
6256           s->size = size;
6257           s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6258           if (s->contents == NULL && s->size != 0)
6259             return FALSE;
6260
6261           /* Fill in the version definition section.  */
6262
6263           p = s->contents;
6264
6265           def.vd_version = VER_DEF_CURRENT;
6266           def.vd_flags = VER_FLG_BASE;
6267           def.vd_ndx = 1;
6268           def.vd_cnt = 1;
6269           if (info->create_default_symver)
6270             {
6271               def.vd_aux = 2 * sizeof (Elf_External_Verdef);
6272               def.vd_next = sizeof (Elf_External_Verdef);
6273             }
6274           else
6275             {
6276               def.vd_aux = sizeof (Elf_External_Verdef);
6277               def.vd_next = (sizeof (Elf_External_Verdef)
6278                              + sizeof (Elf_External_Verdaux));
6279             }
6280
6281           if (soname_indx != (size_t) -1)
6282             {
6283               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6284                                       soname_indx);
6285               def.vd_hash = bfd_elf_hash (soname);
6286               defaux.vda_name = soname_indx;
6287               name = soname;
6288             }
6289           else
6290             {
6291               size_t indx;
6292
6293               name = lbasename (output_bfd->filename);
6294               def.vd_hash = bfd_elf_hash (name);
6295               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6296                                           name, FALSE);
6297               if (indx == (size_t) -1)
6298                 return FALSE;
6299               defaux.vda_name = indx;
6300             }
6301           defaux.vda_next = 0;
6302
6303           _bfd_elf_swap_verdef_out (output_bfd, &def,
6304                                     (Elf_External_Verdef *) p);
6305           p += sizeof (Elf_External_Verdef);
6306           if (info->create_default_symver)
6307             {
6308               /* Add a symbol representing this version.  */
6309               bh = NULL;
6310               if (! (_bfd_generic_link_add_one_symbol
6311                      (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
6312                       0, NULL, FALSE,
6313                       get_elf_backend_data (dynobj)->collect, &bh)))
6314                 return FALSE;
6315               h = (struct elf_link_hash_entry *) bh;
6316               h->non_elf = 0;
6317               h->def_regular = 1;
6318               h->type = STT_OBJECT;
6319               h->verinfo.vertree = NULL;
6320
6321               if (! bfd_elf_link_record_dynamic_symbol (info, h))
6322                 return FALSE;
6323
6324               /* Create a duplicate of the base version with the same
6325                  aux block, but different flags.  */
6326               def.vd_flags = 0;
6327               def.vd_ndx = 2;
6328               def.vd_aux = sizeof (Elf_External_Verdef);
6329               if (verdefs)
6330                 def.vd_next = (sizeof (Elf_External_Verdef)
6331                                + sizeof (Elf_External_Verdaux));
6332               else
6333                 def.vd_next = 0;
6334               _bfd_elf_swap_verdef_out (output_bfd, &def,
6335                                         (Elf_External_Verdef *) p);
6336               p += sizeof (Elf_External_Verdef);
6337             }
6338           _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6339                                      (Elf_External_Verdaux *) p);
6340           p += sizeof (Elf_External_Verdaux);
6341
6342           for (t = verdefs; t != NULL; t = t->next)
6343             {
6344               unsigned int cdeps;
6345               struct bfd_elf_version_deps *n;
6346
6347               /* Don't emit the base version twice.  */
6348               if (t->vernum == 0)
6349                 continue;
6350
6351               cdeps = 0;
6352               for (n = t->deps; n != NULL; n = n->next)
6353                 ++cdeps;
6354
6355               /* Add a symbol representing this version.  */
6356               bh = NULL;
6357               if (! (_bfd_generic_link_add_one_symbol
6358                      (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
6359                       0, NULL, FALSE,
6360                       get_elf_backend_data (dynobj)->collect, &bh)))
6361                 return FALSE;
6362               h = (struct elf_link_hash_entry *) bh;
6363               h->non_elf = 0;
6364               h->def_regular = 1;
6365               h->type = STT_OBJECT;
6366               h->verinfo.vertree = t;
6367
6368               if (! bfd_elf_link_record_dynamic_symbol (info, h))
6369                 return FALSE;
6370
6371               def.vd_version = VER_DEF_CURRENT;
6372               def.vd_flags = 0;
6373               if (t->globals.list == NULL
6374                   && t->locals.list == NULL
6375                   && ! t->used)
6376                 def.vd_flags |= VER_FLG_WEAK;
6377               def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1);
6378               def.vd_cnt = cdeps + 1;
6379               def.vd_hash = bfd_elf_hash (t->name);
6380               def.vd_aux = sizeof (Elf_External_Verdef);
6381               def.vd_next = 0;
6382
6383               /* If a basever node is next, it *must* be the last node in
6384                  the chain, otherwise Verdef construction breaks.  */
6385               if (t->next != NULL && t->next->vernum == 0)
6386                 BFD_ASSERT (t->next->next == NULL);
6387
6388               if (t->next != NULL && t->next->vernum != 0)
6389                 def.vd_next = (sizeof (Elf_External_Verdef)
6390                                + (cdeps + 1) * sizeof (Elf_External_Verdaux));
6391
6392               _bfd_elf_swap_verdef_out (output_bfd, &def,
6393                                         (Elf_External_Verdef *) p);
6394               p += sizeof (Elf_External_Verdef);
6395
6396               defaux.vda_name = h->dynstr_index;
6397               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6398                                       h->dynstr_index);
6399               defaux.vda_next = 0;
6400               if (t->deps != NULL)
6401                 defaux.vda_next = sizeof (Elf_External_Verdaux);
6402               t->name_indx = defaux.vda_name;
6403
6404               _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6405                                          (Elf_External_Verdaux *) p);
6406               p += sizeof (Elf_External_Verdaux);
6407
6408               for (n = t->deps; n != NULL; n = n->next)
6409                 {
6410                   if (n->version_needed == NULL)
6411                     {
6412                       /* This can happen if there was an error in the
6413                          version script.  */
6414                       defaux.vda_name = 0;
6415                     }
6416                   else
6417                     {
6418                       defaux.vda_name = n->version_needed->name_indx;
6419                       _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6420                                               defaux.vda_name);
6421                     }
6422                   if (n->next == NULL)
6423                     defaux.vda_next = 0;
6424                   else
6425                     defaux.vda_next = sizeof (Elf_External_Verdaux);
6426
6427                   _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6428                                              (Elf_External_Verdaux *) p);
6429                   p += sizeof (Elf_External_Verdaux);
6430                 }
6431             }
6432
6433           if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
6434               || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
6435             return FALSE;
6436
6437           elf_tdata (output_bfd)->cverdefs = cdefs;
6438         }
6439
6440       if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
6441         {
6442           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
6443             return FALSE;
6444         }
6445       else if (info->flags & DF_BIND_NOW)
6446         {
6447           if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
6448             return FALSE;
6449         }
6450
6451       if (info->flags_1)
6452         {
6453           if (bfd_link_executable (info))
6454             info->flags_1 &= ~ (DF_1_INITFIRST
6455                                 | DF_1_NODELETE
6456                                 | DF_1_NOOPEN);
6457           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
6458             return FALSE;
6459         }
6460
6461       /* Work out the size of the version reference section.  */
6462
6463       s = bfd_get_linker_section (dynobj, ".gnu.version_r");
6464       BFD_ASSERT (s != NULL);
6465       {
6466         struct elf_find_verdep_info sinfo;
6467
6468         sinfo.info = info;
6469         sinfo.vers = elf_tdata (output_bfd)->cverdefs;
6470         if (sinfo.vers == 0)
6471           sinfo.vers = 1;
6472         sinfo.failed = FALSE;
6473
6474         elf_link_hash_traverse (elf_hash_table (info),
6475                                 _bfd_elf_link_find_version_dependencies,
6476                                 &sinfo);
6477         if (sinfo.failed)
6478           return FALSE;
6479
6480         if (elf_tdata (output_bfd)->verref == NULL)
6481           s->flags |= SEC_EXCLUDE;
6482         else
6483           {
6484             Elf_Internal_Verneed *t;
6485             unsigned int size;
6486             unsigned int crefs;
6487             bfd_byte *p;
6488
6489             /* Build the version dependency section.  */
6490             size = 0;
6491             crefs = 0;
6492             for (t = elf_tdata (output_bfd)->verref;
6493                  t != NULL;
6494                  t = t->vn_nextref)
6495               {
6496                 Elf_Internal_Vernaux *a;
6497
6498                 size += sizeof (Elf_External_Verneed);
6499                 ++crefs;
6500                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6501                   size += sizeof (Elf_External_Vernaux);
6502               }
6503
6504             s->size = size;
6505             s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6506             if (s->contents == NULL)
6507               return FALSE;
6508
6509             p = s->contents;
6510             for (t = elf_tdata (output_bfd)->verref;
6511                  t != NULL;
6512                  t = t->vn_nextref)
6513               {
6514                 unsigned int caux;
6515                 Elf_Internal_Vernaux *a;
6516                 size_t indx;
6517
6518                 caux = 0;
6519                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6520                   ++caux;
6521
6522                 t->vn_version = VER_NEED_CURRENT;
6523                 t->vn_cnt = caux;
6524                 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6525                                             elf_dt_name (t->vn_bfd) != NULL
6526                                             ? elf_dt_name (t->vn_bfd)
6527                                             : lbasename (t->vn_bfd->filename),
6528                                             FALSE);
6529                 if (indx == (size_t) -1)
6530                   return FALSE;
6531                 t->vn_file = indx;
6532                 t->vn_aux = sizeof (Elf_External_Verneed);
6533                 if (t->vn_nextref == NULL)
6534                   t->vn_next = 0;
6535                 else
6536                   t->vn_next = (sizeof (Elf_External_Verneed)
6537                                 + caux * sizeof (Elf_External_Vernaux));
6538
6539                 _bfd_elf_swap_verneed_out (output_bfd, t,
6540                                            (Elf_External_Verneed *) p);
6541                 p += sizeof (Elf_External_Verneed);
6542
6543                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6544                   {
6545                     a->vna_hash = bfd_elf_hash (a->vna_nodename);
6546                     indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6547                                                 a->vna_nodename, FALSE);
6548                     if (indx == (size_t) -1)
6549                       return FALSE;
6550                     a->vna_name = indx;
6551                     if (a->vna_nextptr == NULL)
6552                       a->vna_next = 0;
6553                     else
6554                       a->vna_next = sizeof (Elf_External_Vernaux);
6555
6556                     _bfd_elf_swap_vernaux_out (output_bfd, a,
6557                                                (Elf_External_Vernaux *) p);
6558                     p += sizeof (Elf_External_Vernaux);
6559                   }
6560               }
6561
6562             if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
6563                 || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
6564               return FALSE;
6565
6566             elf_tdata (output_bfd)->cverrefs = crefs;
6567           }
6568       }
6569
6570       if ((elf_tdata (output_bfd)->cverrefs == 0
6571            && elf_tdata (output_bfd)->cverdefs == 0)
6572           || _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6573                                              &section_sym_count) == 0)
6574         {
6575           s = bfd_get_linker_section (dynobj, ".gnu.version");
6576           s->flags |= SEC_EXCLUDE;
6577         }
6578     }
6579   return TRUE;
6580 }
6581
6582 /* Find the first non-excluded output section.  We'll use its
6583    section symbol for some emitted relocs.  */
6584 void
6585 _bfd_elf_init_1_index_section (bfd *output_bfd, struct bfd_link_info *info)
6586 {
6587   asection *s;
6588
6589   for (s = output_bfd->sections; s != NULL; s = s->next)
6590     if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
6591         && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6592       {
6593         elf_hash_table (info)->text_index_section = s;
6594         break;
6595       }
6596 }
6597
6598 /* Find two non-excluded output sections, one for code, one for data.
6599    We'll use their section symbols for some emitted relocs.  */
6600 void
6601 _bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
6602 {
6603   asection *s;
6604
6605   /* Data first, since setting text_index_section changes
6606      _bfd_elf_link_omit_section_dynsym.  */
6607   for (s = output_bfd->sections; s != NULL; s = s->next)
6608     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
6609         && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6610       {
6611         elf_hash_table (info)->data_index_section = s;
6612         break;
6613       }
6614
6615   for (s = output_bfd->sections; s != NULL; s = s->next)
6616     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
6617          == (SEC_ALLOC | SEC_READONLY))
6618         && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6619       {
6620         elf_hash_table (info)->text_index_section = s;
6621         break;
6622       }
6623
6624   if (elf_hash_table (info)->text_index_section == NULL)
6625     elf_hash_table (info)->text_index_section
6626       = elf_hash_table (info)->data_index_section;
6627 }
6628
6629 bfd_boolean
6630 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
6631 {
6632   const struct elf_backend_data *bed;
6633
6634   if (!is_elf_hash_table (info->hash))
6635     return TRUE;
6636
6637   bed = get_elf_backend_data (output_bfd);
6638   (*bed->elf_backend_init_index_section) (output_bfd, info);
6639
6640   if (elf_hash_table (info)->dynamic_sections_created)
6641     {
6642       bfd *dynobj;
6643       asection *s;
6644       bfd_size_type dynsymcount;
6645       unsigned long section_sym_count;
6646       unsigned int dtagcount;
6647
6648       dynobj = elf_hash_table (info)->dynobj;
6649
6650       /* Assign dynsym indicies.  In a shared library we generate a
6651          section symbol for each output section, which come first.
6652          Next come all of the back-end allocated local dynamic syms,
6653          followed by the rest of the global symbols.  */
6654
6655       dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6656                                                     &section_sym_count);
6657
6658       /* Work out the size of the symbol version section.  */
6659       s = bfd_get_linker_section (dynobj, ".gnu.version");
6660       BFD_ASSERT (s != NULL);
6661       if ((s->flags & SEC_EXCLUDE) == 0)
6662         {
6663           s->size = dynsymcount * sizeof (Elf_External_Versym);
6664           s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6665           if (s->contents == NULL)
6666             return FALSE;
6667
6668           if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
6669             return FALSE;
6670         }
6671
6672       /* Set the size of the .dynsym and .hash sections.  We counted
6673          the number of dynamic symbols in elf_link_add_object_symbols.
6674          We will build the contents of .dynsym and .hash when we build
6675          the final symbol table, because until then we do not know the
6676          correct value to give the symbols.  We built the .dynstr
6677          section as we went along in elf_link_add_object_symbols.  */
6678       s = elf_hash_table (info)->dynsym;
6679       BFD_ASSERT (s != NULL);
6680       s->size = dynsymcount * bed->s->sizeof_sym;
6681
6682       s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6683       if (s->contents == NULL)
6684         return FALSE;
6685
6686       /* The first entry in .dynsym is a dummy symbol.  Clear all the
6687          section syms, in case we don't output them all.  */
6688       ++section_sym_count;
6689       memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
6690
6691       elf_hash_table (info)->bucketcount = 0;
6692
6693       /* Compute the size of the hashing table.  As a side effect this
6694          computes the hash values for all the names we export.  */
6695       if (info->emit_hash)
6696         {
6697           unsigned long int *hashcodes;
6698           struct hash_codes_info hashinf;
6699           bfd_size_type amt;
6700           unsigned long int nsyms;
6701           size_t bucketcount;
6702           size_t hash_entry_size;
6703
6704           /* Compute the hash values for all exported symbols.  At the same
6705              time store the values in an array so that we could use them for
6706              optimizations.  */
6707           amt = dynsymcount * sizeof (unsigned long int);
6708           hashcodes = (unsigned long int *) bfd_malloc (amt);
6709           if (hashcodes == NULL)
6710             return FALSE;
6711           hashinf.hashcodes = hashcodes;
6712           hashinf.error = FALSE;
6713
6714           /* Put all hash values in HASHCODES.  */
6715           elf_link_hash_traverse (elf_hash_table (info),
6716                                   elf_collect_hash_codes, &hashinf);
6717           if (hashinf.error)
6718             {
6719               free (hashcodes);
6720               return FALSE;
6721             }
6722
6723           nsyms = hashinf.hashcodes - hashcodes;
6724           bucketcount
6725             = compute_bucket_count (info, hashcodes, nsyms, 0);
6726           free (hashcodes);
6727
6728           if (bucketcount == 0)
6729             return FALSE;
6730
6731           elf_hash_table (info)->bucketcount = bucketcount;
6732
6733           s = bfd_get_linker_section (dynobj, ".hash");
6734           BFD_ASSERT (s != NULL);
6735           hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
6736           s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
6737           s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6738           if (s->contents == NULL)
6739             return FALSE;
6740
6741           bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
6742           bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
6743                    s->contents + hash_entry_size);
6744         }
6745
6746       if (info->emit_gnu_hash)
6747         {
6748           size_t i, cnt;
6749           unsigned char *contents;
6750           struct collect_gnu_hash_codes cinfo;
6751           bfd_size_type amt;
6752           size_t bucketcount;
6753
6754           memset (&cinfo, 0, sizeof (cinfo));
6755
6756           /* Compute the hash values for all exported symbols.  At the same
6757              time store the values in an array so that we could use them for
6758              optimizations.  */
6759           amt = dynsymcount * 2 * sizeof (unsigned long int);
6760           cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt);
6761           if (cinfo.hashcodes == NULL)
6762             return FALSE;
6763
6764           cinfo.hashval = cinfo.hashcodes + dynsymcount;
6765           cinfo.min_dynindx = -1;
6766           cinfo.output_bfd = output_bfd;
6767           cinfo.bed = bed;
6768
6769           /* Put all hash values in HASHCODES.  */
6770           elf_link_hash_traverse (elf_hash_table (info),
6771                                   elf_collect_gnu_hash_codes, &cinfo);
6772           if (cinfo.error)
6773             {
6774               free (cinfo.hashcodes);
6775               return FALSE;
6776             }
6777
6778           bucketcount
6779             = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1);
6780
6781           if (bucketcount == 0)
6782             {
6783               free (cinfo.hashcodes);
6784               return FALSE;
6785             }
6786
6787           s = bfd_get_linker_section (dynobj, ".gnu.hash");
6788           BFD_ASSERT (s != NULL);
6789
6790           if (cinfo.nsyms == 0)
6791             {
6792               /* Empty .gnu.hash section is special.  */
6793               BFD_ASSERT (cinfo.min_dynindx == -1);
6794               free (cinfo.hashcodes);
6795               s->size = 5 * 4 + bed->s->arch_size / 8;
6796               contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6797               if (contents == NULL)
6798                 return FALSE;
6799               s->contents = contents;
6800               /* 1 empty bucket.  */
6801               bfd_put_32 (output_bfd, 1, contents);
6802               /* SYMIDX above the special symbol 0.  */
6803               bfd_put_32 (output_bfd, 1, contents + 4);
6804               /* Just one word for bitmask.  */
6805               bfd_put_32 (output_bfd, 1, contents + 8);
6806               /* Only hash fn bloom filter.  */
6807               bfd_put_32 (output_bfd, 0, contents + 12);
6808               /* No hashes are valid - empty bitmask.  */
6809               bfd_put (bed->s->arch_size, output_bfd, 0, contents + 16);
6810               /* No hashes in the only bucket.  */
6811               bfd_put_32 (output_bfd, 0,
6812                           contents + 16 + bed->s->arch_size / 8);
6813             }
6814           else
6815             {
6816               unsigned long int maskwords, maskbitslog2, x;
6817               BFD_ASSERT (cinfo.min_dynindx != -1);
6818
6819               x = cinfo.nsyms;
6820               maskbitslog2 = 1;
6821               while ((x >>= 1) != 0)
6822                 ++maskbitslog2;
6823               if (maskbitslog2 < 3)
6824                 maskbitslog2 = 5;
6825               else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms)
6826                 maskbitslog2 = maskbitslog2 + 3;
6827               else
6828                 maskbitslog2 = maskbitslog2 + 2;
6829               if (bed->s->arch_size == 64)
6830                 {
6831                   if (maskbitslog2 == 5)
6832                     maskbitslog2 = 6;
6833                   cinfo.shift1 = 6;
6834                 }
6835               else
6836                 cinfo.shift1 = 5;
6837               cinfo.mask = (1 << cinfo.shift1) - 1;
6838               cinfo.shift2 = maskbitslog2;
6839               cinfo.maskbits = 1 << maskbitslog2;
6840               maskwords = 1 << (maskbitslog2 - cinfo.shift1);
6841               amt = bucketcount * sizeof (unsigned long int) * 2;
6842               amt += maskwords * sizeof (bfd_vma);
6843               cinfo.bitmask = (bfd_vma *) bfd_malloc (amt);
6844               if (cinfo.bitmask == NULL)
6845                 {
6846                   free (cinfo.hashcodes);
6847                   return FALSE;
6848                 }
6849
6850               cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords);
6851               cinfo.indx = cinfo.counts + bucketcount;
6852               cinfo.symindx = dynsymcount - cinfo.nsyms;
6853               memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma));
6854
6855               /* Determine how often each hash bucket is used.  */
6856               memset (cinfo.counts, 0, bucketcount * sizeof (cinfo.counts[0]));
6857               for (i = 0; i < cinfo.nsyms; ++i)
6858                 ++cinfo.counts[cinfo.hashcodes[i] % bucketcount];
6859
6860               for (i = 0, cnt = cinfo.symindx; i < bucketcount; ++i)
6861                 if (cinfo.counts[i] != 0)
6862                   {
6863                     cinfo.indx[i] = cnt;
6864                     cnt += cinfo.counts[i];
6865                   }
6866               BFD_ASSERT (cnt == dynsymcount);
6867               cinfo.bucketcount = bucketcount;
6868               cinfo.local_indx = cinfo.min_dynindx;
6869
6870               s->size = (4 + bucketcount + cinfo.nsyms) * 4;
6871               s->size += cinfo.maskbits / 8;
6872               contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6873               if (contents == NULL)
6874                 {
6875                   free (cinfo.bitmask);
6876                   free (cinfo.hashcodes);
6877                   return FALSE;
6878                 }
6879
6880               s->contents = contents;
6881               bfd_put_32 (output_bfd, bucketcount, contents);
6882               bfd_put_32 (output_bfd, cinfo.symindx, contents + 4);
6883               bfd_put_32 (output_bfd, maskwords, contents + 8);
6884               bfd_put_32 (output_bfd, cinfo.shift2, contents + 12);
6885               contents += 16 + cinfo.maskbits / 8;
6886
6887               for (i = 0; i < bucketcount; ++i)
6888                 {
6889                   if (cinfo.counts[i] == 0)
6890                     bfd_put_32 (output_bfd, 0, contents);
6891                   else
6892                     bfd_put_32 (output_bfd, cinfo.indx[i], contents);
6893                   contents += 4;
6894                 }
6895
6896               cinfo.contents = contents;
6897
6898               /* Renumber dynamic symbols, populate .gnu.hash section.  */
6899               elf_link_hash_traverse (elf_hash_table (info),
6900                                       elf_renumber_gnu_hash_syms, &cinfo);
6901
6902               contents = s->contents + 16;
6903               for (i = 0; i < maskwords; ++i)
6904                 {
6905                   bfd_put (bed->s->arch_size, output_bfd, cinfo.bitmask[i],
6906                            contents);
6907                   contents += bed->s->arch_size / 8;
6908                 }
6909
6910               free (cinfo.bitmask);
6911               free (cinfo.hashcodes);
6912             }
6913         }
6914
6915       s = bfd_get_linker_section (dynobj, ".dynstr");
6916       BFD_ASSERT (s != NULL);
6917
6918       elf_finalize_dynstr (output_bfd, info);
6919
6920       s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6921
6922       for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
6923         if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
6924           return FALSE;
6925     }
6926
6927   return TRUE;
6928 }
6929 \f
6930 /* Make sure sec_info_type is cleared if sec_info is cleared too.  */
6931
6932 static void
6933 merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
6934                             asection *sec)
6935 {
6936   BFD_ASSERT (sec->sec_info_type == SEC_INFO_TYPE_MERGE);
6937   sec->sec_info_type = SEC_INFO_TYPE_NONE;
6938 }
6939
6940 /* Finish SHF_MERGE section merging.  */
6941
6942 bfd_boolean
6943 _bfd_elf_merge_sections (bfd *obfd, struct bfd_link_info *info)
6944 {
6945   bfd *ibfd;
6946   asection *sec;
6947
6948   if (!is_elf_hash_table (info->hash))
6949     return FALSE;
6950
6951   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
6952     if ((ibfd->flags & DYNAMIC) == 0
6953         && bfd_get_flavour (ibfd) == bfd_target_elf_flavour
6954         && (elf_elfheader (ibfd)->e_ident[EI_CLASS]
6955             == get_elf_backend_data (obfd)->s->elfclass))
6956       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
6957         if ((sec->flags & SEC_MERGE) != 0
6958             && !bfd_is_abs_section (sec->output_section))
6959           {
6960             struct bfd_elf_section_data *secdata;
6961
6962             secdata = elf_section_data (sec);
6963             if (! _bfd_add_merge_section (obfd,
6964                                           &elf_hash_table (info)->merge_info,
6965                                           sec, &secdata->sec_info))
6966               return FALSE;
6967             else if (secdata->sec_info)
6968               sec->sec_info_type = SEC_INFO_TYPE_MERGE;
6969           }
6970
6971   if (elf_hash_table (info)->merge_info != NULL)
6972     _bfd_merge_sections (obfd, info, elf_hash_table (info)->merge_info,
6973                          merge_sections_remove_hook);
6974   return TRUE;
6975 }
6976
6977 /* Create an entry in an ELF linker hash table.  */
6978
6979 struct bfd_hash_entry *
6980 _bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
6981                             struct bfd_hash_table *table,
6982                             const char *string)
6983 {
6984   /* Allocate the structure if it has not already been allocated by a
6985      subclass.  */
6986   if (entry == NULL)
6987     {
6988       entry = (struct bfd_hash_entry *)
6989         bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry));
6990       if (entry == NULL)
6991         return entry;
6992     }
6993
6994   /* Call the allocation method of the superclass.  */
6995   entry = _bfd_link_hash_newfunc (entry, table, string);
6996   if (entry != NULL)
6997     {
6998       struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
6999       struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table;
7000
7001       /* Set local fields.  */
7002       ret->indx = -1;
7003       ret->dynindx = -1;
7004       ret->got = htab->init_got_refcount;
7005       ret->plt = htab->init_plt_refcount;
7006       memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry)
7007                               - offsetof (struct elf_link_hash_entry, size)));
7008       /* Assume that we have been called by a non-ELF symbol reader.
7009          This flag is then reset by the code which reads an ELF input
7010          file.  This ensures that a symbol created by a non-ELF symbol
7011          reader will have the flag set correctly.  */
7012       ret->non_elf = 1;
7013     }
7014
7015   return entry;
7016 }
7017
7018 /* Copy data from an indirect symbol to its direct symbol, hiding the
7019    old indirect symbol.  Also used for copying flags to a weakdef.  */
7020
7021 void
7022 _bfd_elf_link_hash_copy_indirect (struct bfd_link_info *info,
7023                                   struct elf_link_hash_entry *dir,
7024                                   struct elf_link_hash_entry *ind)
7025 {
7026   struct elf_link_hash_table *htab;
7027
7028   /* Copy down any references that we may have already seen to the
7029      symbol which just became indirect if DIR isn't a hidden versioned
7030      symbol.  */
7031
7032   if (dir->versioned != versioned_hidden)
7033     {
7034       dir->ref_dynamic |= ind->ref_dynamic;
7035       dir->ref_regular |= ind->ref_regular;
7036       dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
7037       dir->non_got_ref |= ind->non_got_ref;
7038       dir->needs_plt |= ind->needs_plt;
7039       dir->pointer_equality_needed |= ind->pointer_equality_needed;
7040     }
7041
7042   if (ind->root.type != bfd_link_hash_indirect)
7043     return;
7044
7045   /* Copy over the global and procedure linkage table refcount entries.
7046      These may have been already set up by a check_relocs routine.  */
7047   htab = elf_hash_table (info);
7048   if (ind->got.refcount > htab->init_got_refcount.refcount)
7049     {
7050       if (dir->got.refcount < 0)
7051         dir->got.refcount = 0;
7052       dir->got.refcount += ind->got.refcount;
7053       ind->got.refcount = htab->init_got_refcount.refcount;
7054     }
7055
7056   if (ind->plt.refcount > htab->init_plt_refcount.refcount)
7057     {
7058       if (dir->plt.refcount < 0)
7059         dir->plt.refcount = 0;
7060       dir->plt.refcount += ind->plt.refcount;
7061       ind->plt.refcount = htab->init_plt_refcount.refcount;
7062     }
7063
7064   if (ind->dynindx != -1)
7065     {
7066       if (dir->dynindx != -1)
7067         _bfd_elf_strtab_delref (htab->dynstr, dir->dynstr_index);
7068       dir->dynindx = ind->dynindx;
7069       dir->dynstr_index = ind->dynstr_index;
7070       ind->dynindx = -1;
7071       ind->dynstr_index = 0;
7072     }
7073 }
7074
7075 void
7076 _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info,
7077                                 struct elf_link_hash_entry *h,
7078                                 bfd_boolean force_local)
7079 {
7080   /* STT_GNU_IFUNC symbol must go through PLT.  */
7081   if (h->type != STT_GNU_IFUNC)
7082     {
7083       h->plt = elf_hash_table (info)->init_plt_offset;
7084       h->needs_plt = 0;
7085     }
7086   if (force_local)
7087     {
7088       h->forced_local = 1;
7089       if (h->dynindx != -1)
7090         {
7091           h->dynindx = -1;
7092           _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7093                                   h->dynstr_index);
7094         }
7095     }
7096 }
7097
7098 /* Initialize an ELF linker hash table.  *TABLE has been zeroed by our
7099    caller.  */
7100
7101 bfd_boolean
7102 _bfd_elf_link_hash_table_init
7103   (struct elf_link_hash_table *table,
7104    bfd *abfd,
7105    struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
7106                                       struct bfd_hash_table *,
7107                                       const char *),
7108    unsigned int entsize,
7109    enum elf_target_id target_id)
7110 {
7111   bfd_boolean ret;
7112   int can_refcount = get_elf_backend_data (abfd)->can_refcount;
7113
7114   table->init_got_refcount.refcount = can_refcount - 1;
7115   table->init_plt_refcount.refcount = can_refcount - 1;
7116   table->init_got_offset.offset = -(bfd_vma) 1;
7117   table->init_plt_offset.offset = -(bfd_vma) 1;
7118   /* The first dynamic symbol is a dummy.  */
7119   table->dynsymcount = 1;
7120
7121   ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
7122
7123   table->root.type = bfd_link_elf_hash_table;
7124   table->hash_table_id = target_id;
7125
7126   return ret;
7127 }
7128
7129 /* Create an ELF linker hash table.  */
7130
7131 struct bfd_link_hash_table *
7132 _bfd_elf_link_hash_table_create (bfd *abfd)
7133 {
7134   struct elf_link_hash_table *ret;
7135   bfd_size_type amt = sizeof (struct elf_link_hash_table);
7136
7137   ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
7138   if (ret == NULL)
7139     return NULL;
7140
7141   if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc,
7142                                        sizeof (struct elf_link_hash_entry),
7143                                        GENERIC_ELF_DATA))
7144     {
7145       free (ret);
7146       return NULL;
7147     }
7148   ret->root.hash_table_free = _bfd_elf_link_hash_table_free;
7149
7150   return &ret->root;
7151 }
7152
7153 /* Destroy an ELF linker hash table.  */
7154
7155 void
7156 _bfd_elf_link_hash_table_free (bfd *obfd)
7157 {
7158   struct elf_link_hash_table *htab;
7159
7160   htab = (struct elf_link_hash_table *) obfd->link.hash;
7161   if (htab->dynstr != NULL)
7162     _bfd_elf_strtab_free (htab->dynstr);
7163   _bfd_merge_sections_free (htab->merge_info);
7164   _bfd_generic_link_hash_table_free (obfd);
7165 }
7166
7167 /* This is a hook for the ELF emulation code in the generic linker to
7168    tell the backend linker what file name to use for the DT_NEEDED
7169    entry for a dynamic object.  */
7170
7171 void
7172 bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
7173 {
7174   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7175       && bfd_get_format (abfd) == bfd_object)
7176     elf_dt_name (abfd) = name;
7177 }
7178
7179 int
7180 bfd_elf_get_dyn_lib_class (bfd *abfd)
7181 {
7182   int lib_class;
7183   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7184       && bfd_get_format (abfd) == bfd_object)
7185     lib_class = elf_dyn_lib_class (abfd);
7186   else
7187     lib_class = 0;
7188   return lib_class;
7189 }
7190
7191 void
7192 bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class)
7193 {
7194   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7195       && bfd_get_format (abfd) == bfd_object)
7196     elf_dyn_lib_class (abfd) = lib_class;
7197 }
7198
7199 /* Get the list of DT_NEEDED entries for a link.  This is a hook for
7200    the linker ELF emulation code.  */
7201
7202 struct bfd_link_needed_list *
7203 bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
7204                          struct bfd_link_info *info)
7205 {
7206   if (! is_elf_hash_table (info->hash))
7207     return NULL;
7208   return elf_hash_table (info)->needed;
7209 }
7210
7211 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link.  This is a
7212    hook for the linker ELF emulation code.  */
7213
7214 struct bfd_link_needed_list *
7215 bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED,
7216                           struct bfd_link_info *info)
7217 {
7218   if (! is_elf_hash_table (info->hash))
7219     return NULL;
7220   return elf_hash_table (info)->runpath;
7221 }
7222
7223 /* Get the name actually used for a dynamic object for a link.  This
7224    is the SONAME entry if there is one.  Otherwise, it is the string
7225    passed to bfd_elf_set_dt_needed_name, or it is the filename.  */
7226
7227 const char *
7228 bfd_elf_get_dt_soname (bfd *abfd)
7229 {
7230   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7231       && bfd_get_format (abfd) == bfd_object)
7232     return elf_dt_name (abfd);
7233   return NULL;
7234 }
7235
7236 /* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
7237    the ELF linker emulation code.  */
7238
7239 bfd_boolean
7240 bfd_elf_get_bfd_needed_list (bfd *abfd,
7241                              struct bfd_link_needed_list **pneeded)
7242 {
7243   asection *s;
7244   bfd_byte *dynbuf = NULL;
7245   unsigned int elfsec;
7246   unsigned long shlink;
7247   bfd_byte *extdyn, *extdynend;
7248   size_t extdynsize;
7249   void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
7250
7251   *pneeded = NULL;
7252
7253   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
7254       || bfd_get_format (abfd) != bfd_object)
7255     return TRUE;
7256
7257   s = bfd_get_section_by_name (abfd, ".dynamic");
7258   if (s == NULL || s->size == 0)
7259     return TRUE;
7260
7261   if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
7262     goto error_return;
7263
7264   elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
7265   if (elfsec == SHN_BAD)
7266     goto error_return;
7267
7268   shlink = elf_elfsections (abfd)[elfsec]->sh_link;
7269
7270   extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
7271   swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
7272
7273   extdyn = dynbuf;
7274   extdynend = extdyn + s->size;
7275   for (; extdyn < extdynend; extdyn += extdynsize)
7276     {
7277       Elf_Internal_Dyn dyn;
7278
7279       (*swap_dyn_in) (abfd, extdyn, &dyn);
7280
7281       if (dyn.d_tag == DT_NULL)
7282         break;
7283
7284       if (dyn.d_tag == DT_NEEDED)
7285         {
7286           const char *string;
7287           struct bfd_link_needed_list *l;
7288           unsigned int tagv = dyn.d_un.d_val;
7289           bfd_size_type amt;
7290
7291           string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
7292           if (string == NULL)
7293             goto error_return;
7294
7295           amt = sizeof *l;
7296           l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
7297           if (l == NULL)
7298             goto error_return;
7299
7300           l->by = abfd;
7301           l->name = string;
7302           l->next = *pneeded;
7303           *pneeded = l;
7304         }
7305     }
7306
7307   free (dynbuf);
7308
7309   return TRUE;
7310
7311  error_return:
7312   if (dynbuf != NULL)
7313     free (dynbuf);
7314   return FALSE;
7315 }
7316
7317 struct elf_symbuf_symbol
7318 {
7319   unsigned long st_name;        /* Symbol name, index in string tbl */
7320   unsigned char st_info;        /* Type and binding attributes */
7321   unsigned char st_other;       /* Visibilty, and target specific */
7322 };
7323
7324 struct elf_symbuf_head
7325 {
7326   struct elf_symbuf_symbol *ssym;
7327   size_t count;
7328   unsigned int st_shndx;
7329 };
7330
7331 struct elf_symbol
7332 {
7333   union
7334     {
7335       Elf_Internal_Sym *isym;
7336       struct elf_symbuf_symbol *ssym;
7337     } u;
7338   const char *name;
7339 };
7340
7341 /* Sort references to symbols by ascending section number.  */
7342
7343 static int
7344 elf_sort_elf_symbol (const void *arg1, const void *arg2)
7345 {
7346   const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1;
7347   const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2;
7348
7349   return s1->st_shndx - s2->st_shndx;
7350 }
7351
7352 static int
7353 elf_sym_name_compare (const void *arg1, const void *arg2)
7354 {
7355   const struct elf_symbol *s1 = (const struct elf_symbol *) arg1;
7356   const struct elf_symbol *s2 = (const struct elf_symbol *) arg2;
7357   return strcmp (s1->name, s2->name);
7358 }
7359
7360 static struct elf_symbuf_head *
7361 elf_create_symbuf (size_t symcount, Elf_Internal_Sym *isymbuf)
7362 {
7363   Elf_Internal_Sym **ind, **indbufend, **indbuf;
7364   struct elf_symbuf_symbol *ssym;
7365   struct elf_symbuf_head *ssymbuf, *ssymhead;
7366   size_t i, shndx_count, total_size;
7367
7368   indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf));
7369   if (indbuf == NULL)
7370     return NULL;
7371
7372   for (ind = indbuf, i = 0; i < symcount; i++)
7373     if (isymbuf[i].st_shndx != SHN_UNDEF)
7374       *ind++ = &isymbuf[i];
7375   indbufend = ind;
7376
7377   qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *),
7378          elf_sort_elf_symbol);
7379
7380   shndx_count = 0;
7381   if (indbufend > indbuf)
7382     for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++)
7383       if (ind[0]->st_shndx != ind[1]->st_shndx)
7384         shndx_count++;
7385
7386   total_size = ((shndx_count + 1) * sizeof (*ssymbuf)
7387                 + (indbufend - indbuf) * sizeof (*ssym));
7388   ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size);
7389   if (ssymbuf == NULL)
7390     {
7391       free (indbuf);
7392       return NULL;
7393     }
7394
7395   ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1);
7396   ssymbuf->ssym = NULL;
7397   ssymbuf->count = shndx_count;
7398   ssymbuf->st_shndx = 0;
7399   for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++)
7400     {
7401       if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx)
7402         {
7403           ssymhead++;
7404           ssymhead->ssym = ssym;
7405           ssymhead->count = 0;
7406           ssymhead->st_shndx = (*ind)->st_shndx;
7407         }
7408       ssym->st_name = (*ind)->st_name;
7409       ssym->st_info = (*ind)->st_info;
7410       ssym->st_other = (*ind)->st_other;
7411       ssymhead->count++;
7412     }
7413   BFD_ASSERT ((size_t) (ssymhead - ssymbuf) == shndx_count
7414               && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf)
7415                   == total_size));
7416
7417   free (indbuf);
7418   return ssymbuf;
7419 }
7420
7421 /* Check if 2 sections define the same set of local and global
7422    symbols.  */
7423
7424 static bfd_boolean
7425 bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
7426                                    struct bfd_link_info *info)
7427 {
7428   bfd *bfd1, *bfd2;
7429   const struct elf_backend_data *bed1, *bed2;
7430   Elf_Internal_Shdr *hdr1, *hdr2;
7431   size_t symcount1, symcount2;
7432   Elf_Internal_Sym *isymbuf1, *isymbuf2;
7433   struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
7434   Elf_Internal_Sym *isym, *isymend;
7435   struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
7436   size_t count1, count2, i;
7437   unsigned int shndx1, shndx2;
7438   bfd_boolean result;
7439
7440   bfd1 = sec1->owner;
7441   bfd2 = sec2->owner;
7442
7443   /* Both sections have to be in ELF.  */
7444   if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
7445       || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
7446     return FALSE;
7447
7448   if (elf_section_type (sec1) != elf_section_type (sec2))
7449     return FALSE;
7450
7451   shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
7452   shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
7453   if (shndx1 == SHN_BAD || shndx2 == SHN_BAD)
7454     return FALSE;
7455
7456   bed1 = get_elf_backend_data (bfd1);
7457   bed2 = get_elf_backend_data (bfd2);
7458   hdr1 = &elf_tdata (bfd1)->symtab_hdr;
7459   symcount1 = hdr1->sh_size / bed1->s->sizeof_sym;
7460   hdr2 = &elf_tdata (bfd2)->symtab_hdr;
7461   symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
7462
7463   if (symcount1 == 0 || symcount2 == 0)
7464     return FALSE;
7465
7466   result = FALSE;
7467   isymbuf1 = NULL;
7468   isymbuf2 = NULL;
7469   ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf;
7470   ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf;
7471
7472   if (ssymbuf1 == NULL)
7473     {
7474       isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
7475                                        NULL, NULL, NULL);
7476       if (isymbuf1 == NULL)
7477         goto done;
7478
7479       if (!info->reduce_memory_overheads)
7480         elf_tdata (bfd1)->symbuf = ssymbuf1
7481           = elf_create_symbuf (symcount1, isymbuf1);
7482     }
7483
7484   if (ssymbuf1 == NULL || ssymbuf2 == NULL)
7485     {
7486       isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
7487                                        NULL, NULL, NULL);
7488       if (isymbuf2 == NULL)
7489         goto done;
7490
7491       if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
7492         elf_tdata (bfd2)->symbuf = ssymbuf2
7493           = elf_create_symbuf (symcount2, isymbuf2);
7494     }
7495
7496   if (ssymbuf1 != NULL && ssymbuf2 != NULL)
7497     {
7498       /* Optimized faster version.  */
7499       size_t lo, hi, mid;
7500       struct elf_symbol *symp;
7501       struct elf_symbuf_symbol *ssym, *ssymend;
7502
7503       lo = 0;
7504       hi = ssymbuf1->count;
7505       ssymbuf1++;
7506       count1 = 0;
7507       while (lo < hi)
7508         {
7509           mid = (lo + hi) / 2;
7510           if (shndx1 < ssymbuf1[mid].st_shndx)
7511             hi = mid;
7512           else if (shndx1 > ssymbuf1[mid].st_shndx)
7513             lo = mid + 1;
7514           else
7515             {
7516               count1 = ssymbuf1[mid].count;
7517               ssymbuf1 += mid;
7518               break;
7519             }
7520         }
7521
7522       lo = 0;
7523       hi = ssymbuf2->count;
7524       ssymbuf2++;
7525       count2 = 0;
7526       while (lo < hi)
7527         {
7528           mid = (lo + hi) / 2;
7529           if (shndx2 < ssymbuf2[mid].st_shndx)
7530             hi = mid;
7531           else if (shndx2 > ssymbuf2[mid].st_shndx)
7532             lo = mid + 1;
7533           else
7534             {
7535               count2 = ssymbuf2[mid].count;
7536               ssymbuf2 += mid;
7537               break;
7538             }
7539         }
7540
7541       if (count1 == 0 || count2 == 0 || count1 != count2)
7542         goto done;
7543
7544       symtable1
7545         = (struct elf_symbol *) bfd_malloc (count1 * sizeof (*symtable1));
7546       symtable2
7547         = (struct elf_symbol *) bfd_malloc (count2 * sizeof (*symtable2));
7548       if (symtable1 == NULL || symtable2 == NULL)
7549         goto done;
7550
7551       symp = symtable1;
7552       for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
7553            ssym < ssymend; ssym++, symp++)
7554         {
7555           symp->u.ssym = ssym;
7556           symp->name = bfd_elf_string_from_elf_section (bfd1,
7557                                                         hdr1->sh_link,
7558                                                         ssym->st_name);
7559         }
7560
7561       symp = symtable2;
7562       for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
7563            ssym < ssymend; ssym++, symp++)
7564         {
7565           symp->u.ssym = ssym;
7566           symp->name = bfd_elf_string_from_elf_section (bfd2,
7567                                                         hdr2->sh_link,
7568                                                         ssym->st_name);
7569         }
7570
7571       /* Sort symbol by name.  */
7572       qsort (symtable1, count1, sizeof (struct elf_symbol),
7573              elf_sym_name_compare);
7574       qsort (symtable2, count1, sizeof (struct elf_symbol),
7575              elf_sym_name_compare);
7576
7577       for (i = 0; i < count1; i++)
7578         /* Two symbols must have the same binding, type and name.  */
7579         if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info
7580             || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other
7581             || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7582           goto done;
7583
7584       result = TRUE;
7585       goto done;
7586     }
7587
7588   symtable1 = (struct elf_symbol *)
7589       bfd_malloc (symcount1 * sizeof (struct elf_symbol));
7590   symtable2 = (struct elf_symbol *)
7591       bfd_malloc (symcount2 * sizeof (struct elf_symbol));
7592   if (symtable1 == NULL || symtable2 == NULL)
7593     goto done;
7594
7595   /* Count definitions in the section.  */
7596   count1 = 0;
7597   for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
7598     if (isym->st_shndx == shndx1)
7599       symtable1[count1++].u.isym = isym;
7600
7601   count2 = 0;
7602   for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
7603     if (isym->st_shndx == shndx2)
7604       symtable2[count2++].u.isym = isym;
7605
7606   if (count1 == 0 || count2 == 0 || count1 != count2)
7607     goto done;
7608
7609   for (i = 0; i < count1; i++)
7610     symtable1[i].name
7611       = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link,
7612                                          symtable1[i].u.isym->st_name);
7613
7614   for (i = 0; i < count2; i++)
7615     symtable2[i].name
7616       = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link,
7617                                          symtable2[i].u.isym->st_name);
7618
7619   /* Sort symbol by name.  */
7620   qsort (symtable1, count1, sizeof (struct elf_symbol),
7621          elf_sym_name_compare);
7622   qsort (symtable2, count1, sizeof (struct elf_symbol),
7623          elf_sym_name_compare);
7624
7625   for (i = 0; i < count1; i++)
7626     /* Two symbols must have the same binding, type and name.  */
7627     if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info
7628         || symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other
7629         || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7630       goto done;
7631
7632   result = TRUE;
7633
7634 done:
7635   if (symtable1)
7636     free (symtable1);
7637   if (symtable2)
7638     free (symtable2);
7639   if (isymbuf1)
7640     free (isymbuf1);
7641   if (isymbuf2)
7642     free (isymbuf2);
7643
7644   return result;
7645 }
7646
7647 /* Return TRUE if 2 section types are compatible.  */
7648
7649 bfd_boolean
7650 _bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
7651                                  bfd *bbfd, const asection *bsec)
7652 {
7653   if (asec == NULL
7654       || bsec == NULL
7655       || abfd->xvec->flavour != bfd_target_elf_flavour
7656       || bbfd->xvec->flavour != bfd_target_elf_flavour)
7657     return TRUE;
7658
7659   return elf_section_type (asec) == elf_section_type (bsec);
7660 }
7661 \f
7662 /* Final phase of ELF linker.  */
7663
7664 /* A structure we use to avoid passing large numbers of arguments.  */
7665
7666 struct elf_final_link_info
7667 {
7668   /* General link information.  */
7669   struct bfd_link_info *info;
7670   /* Output BFD.  */
7671   bfd *output_bfd;
7672   /* Symbol string table.  */
7673   struct elf_strtab_hash *symstrtab;
7674   /* .hash section.  */
7675   asection *hash_sec;
7676   /* symbol version section (.gnu.version).  */
7677   asection *symver_sec;
7678   /* Buffer large enough to hold contents of any section.  */
7679   bfd_byte *contents;
7680   /* Buffer large enough to hold external relocs of any section.  */
7681   void *external_relocs;
7682   /* Buffer large enough to hold internal relocs of any section.  */
7683   Elf_Internal_Rela *internal_relocs;
7684   /* Buffer large enough to hold external local symbols of any input
7685      BFD.  */
7686   bfd_byte *external_syms;
7687   /* And a buffer for symbol section indices.  */
7688   Elf_External_Sym_Shndx *locsym_shndx;
7689   /* Buffer large enough to hold internal local symbols of any input
7690      BFD.  */
7691   Elf_Internal_Sym *internal_syms;
7692   /* Array large enough to hold a symbol index for each local symbol
7693      of any input BFD.  */
7694   long *indices;
7695   /* Array large enough to hold a section pointer for each local
7696      symbol of any input BFD.  */
7697   asection **sections;
7698   /* Buffer for SHT_SYMTAB_SHNDX section.  */
7699   Elf_External_Sym_Shndx *symshndxbuf;
7700   /* Number of STT_FILE syms seen.  */
7701   size_t filesym_count;
7702 };
7703
7704 /* This struct is used to pass information to elf_link_output_extsym.  */
7705
7706 struct elf_outext_info
7707 {
7708   bfd_boolean failed;
7709   bfd_boolean localsyms;
7710   bfd_boolean file_sym_done;
7711   struct elf_final_link_info *flinfo;
7712 };
7713
7714
7715 /* Support for evaluating a complex relocation.
7716
7717    Complex relocations are generalized, self-describing relocations.  The
7718    implementation of them consists of two parts: complex symbols, and the
7719    relocations themselves.
7720
7721    The relocations are use a reserved elf-wide relocation type code (R_RELC
7722    external / BFD_RELOC_RELC internal) and an encoding of relocation field
7723    information (start bit, end bit, word width, etc) into the addend.  This
7724    information is extracted from CGEN-generated operand tables within gas.
7725
7726    Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
7727    internal) representing prefix-notation expressions, including but not
7728    limited to those sorts of expressions normally encoded as addends in the
7729    addend field.  The symbol mangling format is:
7730
7731    <node> := <literal>
7732           |  <unary-operator> ':' <node>
7733           |  <binary-operator> ':' <node> ':' <node>
7734           ;
7735
7736    <literal> := 's' <digits=N> ':' <N character symbol name>
7737              |  'S' <digits=N> ':' <N character section name>
7738              |  '#' <hexdigits>
7739              ;
7740
7741    <binary-operator> := as in C
7742    <unary-operator> := as in C, plus "0-" for unambiguous negation.  */
7743
7744 static void
7745 set_symbol_value (bfd *bfd_with_globals,
7746                   Elf_Internal_Sym *isymbuf,
7747                   size_t locsymcount,
7748                   size_t symidx,
7749                   bfd_vma val)
7750 {
7751   struct elf_link_hash_entry **sym_hashes;
7752   struct elf_link_hash_entry *h;
7753   size_t extsymoff = locsymcount;
7754
7755   if (symidx < locsymcount)
7756     {
7757       Elf_Internal_Sym *sym;
7758
7759       sym = isymbuf + symidx;
7760       if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
7761         {
7762           /* It is a local symbol: move it to the
7763              "absolute" section and give it a value.  */
7764           sym->st_shndx = SHN_ABS;
7765           sym->st_value = val;
7766           return;
7767         }
7768       BFD_ASSERT (elf_bad_symtab (bfd_with_globals));
7769       extsymoff = 0;
7770     }
7771
7772   /* It is a global symbol: set its link type
7773      to "defined" and give it a value.  */
7774
7775   sym_hashes = elf_sym_hashes (bfd_with_globals);
7776   h = sym_hashes [symidx - extsymoff];
7777   while (h->root.type == bfd_link_hash_indirect
7778          || h->root.type == bfd_link_hash_warning)
7779     h = (struct elf_link_hash_entry *) h->root.u.i.link;
7780   h->root.type = bfd_link_hash_defined;
7781   h->root.u.def.value = val;
7782   h->root.u.def.section = bfd_abs_section_ptr;
7783 }
7784
7785 static bfd_boolean
7786 resolve_symbol (const char *name,
7787                 bfd *input_bfd,
7788                 struct elf_final_link_info *flinfo,
7789                 bfd_vma *result,
7790                 Elf_Internal_Sym *isymbuf,
7791                 size_t locsymcount)
7792 {
7793   Elf_Internal_Sym *sym;
7794   struct bfd_link_hash_entry *global_entry;
7795   const char *candidate = NULL;
7796   Elf_Internal_Shdr *symtab_hdr;
7797   size_t i;
7798
7799   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
7800
7801   for (i = 0; i < locsymcount; ++ i)
7802     {
7803       sym = isymbuf + i;
7804
7805       if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
7806         continue;
7807
7808       candidate = bfd_elf_string_from_elf_section (input_bfd,
7809                                                    symtab_hdr->sh_link,
7810                                                    sym->st_name);
7811 #ifdef DEBUG
7812       printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n",
7813               name, candidate, (unsigned long) sym->st_value);
7814 #endif
7815       if (candidate && strcmp (candidate, name) == 0)
7816         {
7817           asection *sec = flinfo->sections [i];
7818
7819           *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0);
7820           *result += sec->output_offset + sec->output_section->vma;
7821 #ifdef DEBUG
7822           printf ("Found symbol with value %8.8lx\n",
7823                   (unsigned long) *result);
7824 #endif
7825           return TRUE;
7826         }
7827     }
7828
7829   /* Hmm, haven't found it yet. perhaps it is a global.  */
7830   global_entry = bfd_link_hash_lookup (flinfo->info->hash, name,
7831                                        FALSE, FALSE, TRUE);
7832   if (!global_entry)
7833     return FALSE;
7834
7835   if (global_entry->type == bfd_link_hash_defined
7836       || global_entry->type == bfd_link_hash_defweak)
7837     {
7838       *result = (global_entry->u.def.value
7839                  + global_entry->u.def.section->output_section->vma
7840                  + global_entry->u.def.section->output_offset);
7841 #ifdef DEBUG
7842       printf ("Found GLOBAL symbol '%s' with value %8.8lx\n",
7843               global_entry->root.string, (unsigned long) *result);
7844 #endif
7845       return TRUE;
7846     }
7847
7848   return FALSE;
7849 }
7850
7851 /* Looks up NAME in SECTIONS.  If found sets RESULT to NAME's address (in
7852    bytes) and returns TRUE, otherwise returns FALSE.  Accepts pseudo-section
7853    names like "foo.end" which is the end address of section "foo".  */
7854    
7855 static bfd_boolean
7856 resolve_section (const char *name,
7857                  asection *sections,
7858                  bfd_vma *result,
7859                  bfd * abfd)
7860 {
7861   asection *curr;
7862   unsigned int len;
7863
7864   for (curr = sections; curr; curr = curr->next)
7865     if (strcmp (curr->name, name) == 0)
7866       {
7867         *result = curr->vma;
7868         return TRUE;
7869       }
7870
7871   /* Hmm. still haven't found it. try pseudo-section names.  */
7872   /* FIXME: This could be coded more efficiently...  */
7873   for (curr = sections; curr; curr = curr->next)
7874     {
7875       len = strlen (curr->name);
7876       if (len > strlen (name))
7877         continue;
7878
7879       if (strncmp (curr->name, name, len) == 0)
7880         {
7881           if (strncmp (".end", name + len, 4) == 0)
7882             {
7883               *result = curr->vma + curr->size / bfd_octets_per_byte (abfd);
7884               return TRUE;
7885             }
7886
7887           /* Insert more pseudo-section names here, if you like.  */
7888         }
7889     }
7890
7891   return FALSE;
7892 }
7893
7894 static void
7895 undefined_reference (const char *reftype, const char *name)
7896 {
7897   _bfd_error_handler (_("undefined %s reference in complex symbol: %s"),
7898                       reftype, name);
7899 }
7900
7901 static bfd_boolean
7902 eval_symbol (bfd_vma *result,
7903              const char **symp,
7904              bfd *input_bfd,
7905              struct elf_final_link_info *flinfo,
7906              bfd_vma dot,
7907              Elf_Internal_Sym *isymbuf,
7908              size_t locsymcount,
7909              int signed_p)
7910 {
7911   size_t len;
7912   size_t symlen;
7913   bfd_vma a;
7914   bfd_vma b;
7915   char symbuf[4096];
7916   const char *sym = *symp;
7917   const char *symend;
7918   bfd_boolean symbol_is_section = FALSE;
7919
7920   len = strlen (sym);
7921   symend = sym + len;
7922
7923   if (len < 1 || len > sizeof (symbuf))
7924     {
7925       bfd_set_error (bfd_error_invalid_operation);
7926       return FALSE;
7927     }
7928
7929   switch (* sym)
7930     {
7931     case '.':
7932       *result = dot;
7933       *symp = sym + 1;
7934       return TRUE;
7935
7936     case '#':
7937       ++sym;
7938       *result = strtoul (sym, (char **) symp, 16);
7939       return TRUE;
7940
7941     case 'S':
7942       symbol_is_section = TRUE;
7943       /* Fall through.  */
7944     case 's':
7945       ++sym;
7946       symlen = strtol (sym, (char **) symp, 10);
7947       sym = *symp + 1; /* Skip the trailing ':'.  */
7948
7949       if (symend < sym || symlen + 1 > sizeof (symbuf))
7950         {
7951           bfd_set_error (bfd_error_invalid_operation);
7952           return FALSE;
7953         }
7954
7955       memcpy (symbuf, sym, symlen);
7956       symbuf[symlen] = '\0';
7957       *symp = sym + symlen;
7958
7959       /* Is it always possible, with complex symbols, that gas "mis-guessed"
7960          the symbol as a section, or vice-versa. so we're pretty liberal in our
7961          interpretation here; section means "try section first", not "must be a
7962          section", and likewise with symbol.  */
7963
7964       if (symbol_is_section)
7965         {
7966           if (!resolve_section (symbuf, flinfo->output_bfd->sections, result, input_bfd)
7967               && !resolve_symbol (symbuf, input_bfd, flinfo, result,
7968                                   isymbuf, locsymcount))
7969             {
7970               undefined_reference ("section", symbuf);
7971               return FALSE;
7972             }
7973         }
7974       else
7975         {
7976           if (!resolve_symbol (symbuf, input_bfd, flinfo, result,
7977                                isymbuf, locsymcount)
7978               && !resolve_section (symbuf, flinfo->output_bfd->sections,
7979                                    result, input_bfd))
7980             {
7981               undefined_reference ("symbol", symbuf);
7982               return FALSE;
7983             }
7984         }
7985
7986       return TRUE;
7987
7988       /* All that remains are operators.  */
7989
7990 #define UNARY_OP(op)                                            \
7991   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
7992     {                                                           \
7993       sym += strlen (#op);                                      \
7994       if (*sym == ':')                                          \
7995         ++sym;                                                  \
7996       *symp = sym;                                              \
7997       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,       \
7998                         isymbuf, locsymcount, signed_p))        \
7999         return FALSE;                                           \
8000       if (signed_p)                                             \
8001         *result = op ((bfd_signed_vma) a);                      \
8002       else                                                      \
8003         *result = op a;                                         \
8004       return TRUE;                                              \
8005     }
8006
8007 #define BINARY_OP(op)                                           \
8008   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
8009     {                                                           \
8010       sym += strlen (#op);                                      \
8011       if (*sym == ':')                                          \
8012         ++sym;                                                  \
8013       *symp = sym;                                              \
8014       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,       \
8015                         isymbuf, locsymcount, signed_p))        \
8016         return FALSE;                                           \
8017       ++*symp;                                                  \
8018       if (!eval_symbol (&b, symp, input_bfd, flinfo, dot,       \
8019                         isymbuf, locsymcount, signed_p))        \
8020         return FALSE;                                           \
8021       if (signed_p)                                             \
8022         *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \
8023       else                                                      \
8024         *result = a op b;                                       \
8025       return TRUE;                                              \
8026     }
8027
8028     default:
8029       UNARY_OP  (0-);
8030       BINARY_OP (<<);
8031       BINARY_OP (>>);
8032       BINARY_OP (==);
8033       BINARY_OP (!=);
8034       BINARY_OP (<=);
8035       BINARY_OP (>=);
8036       BINARY_OP (&&);
8037       BINARY_OP (||);
8038       UNARY_OP  (~);
8039       UNARY_OP  (!);
8040       BINARY_OP (*);
8041       BINARY_OP (/);
8042       BINARY_OP (%);
8043       BINARY_OP (^);
8044       BINARY_OP (|);
8045       BINARY_OP (&);
8046       BINARY_OP (+);
8047       BINARY_OP (-);
8048       BINARY_OP (<);
8049       BINARY_OP (>);
8050 #undef UNARY_OP
8051 #undef BINARY_OP
8052       _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
8053       bfd_set_error (bfd_error_invalid_operation);
8054       return FALSE;
8055     }
8056 }
8057
8058 static void
8059 put_value (bfd_vma size,
8060            unsigned long chunksz,
8061            bfd *input_bfd,
8062            bfd_vma x,
8063            bfd_byte *location)
8064 {
8065   location += (size - chunksz);
8066
8067   for (; size; size -= chunksz, location -= chunksz)
8068     {
8069       switch (chunksz)
8070         {
8071         case 1:
8072           bfd_put_8 (input_bfd, x, location);
8073           x >>= 8;
8074           break;
8075         case 2:
8076           bfd_put_16 (input_bfd, x, location);
8077           x >>= 16;
8078           break;
8079         case 4:
8080           bfd_put_32 (input_bfd, x, location);
8081           /* Computed this way because x >>= 32 is undefined if x is a 32-bit value.  */
8082           x >>= 16;
8083           x >>= 16;
8084           break;
8085 #ifdef BFD64
8086         case 8:
8087           bfd_put_64 (input_bfd, x, location);
8088           /* Computed this way because x >>= 64 is undefined if x is a 64-bit value.  */
8089           x >>= 32;
8090           x >>= 32;
8091           break;
8092 #endif
8093         default:
8094           abort ();
8095           break;
8096         }
8097     }
8098 }
8099
8100 static bfd_vma
8101 get_value (bfd_vma size,
8102            unsigned long chunksz,
8103            bfd *input_bfd,
8104            bfd_byte *location)
8105 {
8106   int shift;
8107   bfd_vma x = 0;
8108
8109   /* Sanity checks.  */
8110   BFD_ASSERT (chunksz <= sizeof (x)
8111               && size >= chunksz
8112               && chunksz != 0
8113               && (size % chunksz) == 0
8114               && input_bfd != NULL
8115               && location != NULL);
8116
8117   if (chunksz == sizeof (x))
8118     {
8119       BFD_ASSERT (size == chunksz);
8120
8121       /* Make sure that we do not perform an undefined shift operation.
8122          We know that size == chunksz so there will only be one iteration
8123          of the loop below.  */
8124       shift = 0;
8125     }
8126   else
8127     shift = 8 * chunksz;
8128
8129   for (; size; size -= chunksz, location += chunksz)
8130     {
8131       switch (chunksz)
8132         {
8133         case 1:
8134           x = (x << shift) | bfd_get_8 (input_bfd, location);
8135           break;
8136         case 2:
8137           x = (x << shift) | bfd_get_16 (input_bfd, location);
8138           break;
8139         case 4:
8140           x = (x << shift) | bfd_get_32 (input_bfd, location);
8141           break;
8142 #ifdef BFD64
8143         case 8:
8144           x = (x << shift) | bfd_get_64 (input_bfd, location);
8145           break;
8146 #endif
8147         default:
8148           abort ();
8149         }
8150     }
8151   return x;
8152 }
8153
8154 static void
8155 decode_complex_addend (unsigned long *start,   /* in bits */
8156                        unsigned long *oplen,   /* in bits */
8157                        unsigned long *len,     /* in bits */
8158                        unsigned long *wordsz,  /* in bytes */
8159                        unsigned long *chunksz, /* in bytes */
8160                        unsigned long *lsb0_p,
8161                        unsigned long *signed_p,
8162                        unsigned long *trunc_p,
8163                        unsigned long encoded)
8164 {
8165   * start     =  encoded        & 0x3F;
8166   * len       = (encoded >>  6) & 0x3F;
8167   * oplen     = (encoded >> 12) & 0x3F;
8168   * wordsz    = (encoded >> 18) & 0xF;
8169   * chunksz   = (encoded >> 22) & 0xF;
8170   * lsb0_p    = (encoded >> 27) & 1;
8171   * signed_p  = (encoded >> 28) & 1;
8172   * trunc_p   = (encoded >> 29) & 1;
8173 }
8174
8175 bfd_reloc_status_type
8176 bfd_elf_perform_complex_relocation (bfd *input_bfd,
8177                                     asection *input_section ATTRIBUTE_UNUSED,
8178                                     bfd_byte *contents,
8179                                     Elf_Internal_Rela *rel,
8180                                     bfd_vma relocation)
8181 {
8182   bfd_vma shift, x, mask;
8183   unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p;
8184   bfd_reloc_status_type r;
8185
8186   /*  Perform this reloc, since it is complex.
8187       (this is not to say that it necessarily refers to a complex
8188       symbol; merely that it is a self-describing CGEN based reloc.
8189       i.e. the addend has the complete reloc information (bit start, end,
8190       word size, etc) encoded within it.).  */
8191
8192   decode_complex_addend (&start, &oplen, &len, &wordsz,
8193                          &chunksz, &lsb0_p, &signed_p,
8194                          &trunc_p, rel->r_addend);
8195
8196   mask = (((1L << (len - 1)) - 1) << 1) | 1;
8197
8198   if (lsb0_p)
8199     shift = (start + 1) - len;
8200   else
8201     shift = (8 * wordsz) - (start + len);
8202
8203   x = get_value (wordsz, chunksz, input_bfd,
8204                  contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
8205
8206 #ifdef DEBUG
8207   printf ("Doing complex reloc: "
8208           "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
8209           "chunksz %ld, start %ld, len %ld, oplen %ld\n"
8210           "    dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
8211           lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
8212           oplen, (unsigned long) x, (unsigned long) mask,
8213           (unsigned long) relocation);
8214 #endif
8215
8216   r = bfd_reloc_ok;
8217   if (! trunc_p)
8218     /* Now do an overflow check.  */
8219     r = bfd_check_overflow ((signed_p
8220                              ? complain_overflow_signed
8221                              : complain_overflow_unsigned),
8222                             len, 0, (8 * wordsz),
8223                             relocation);
8224
8225   /* Do the deed.  */
8226   x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
8227
8228 #ifdef DEBUG
8229   printf ("           relocation: %8.8lx\n"
8230           "         shifted mask: %8.8lx\n"
8231           " shifted/masked reloc: %8.8lx\n"
8232           "               result: %8.8lx\n",
8233           (unsigned long) relocation, (unsigned long) (mask << shift),
8234           (unsigned long) ((relocation & mask) << shift), (unsigned long) x);
8235 #endif
8236   put_value (wordsz, chunksz, input_bfd, x,
8237              contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
8238   return r;
8239 }
8240
8241 /* Functions to read r_offset from external (target order) reloc
8242    entry.  Faster than bfd_getl32 et al, because we let the compiler
8243    know the value is aligned.  */
8244
8245 static bfd_vma
8246 ext32l_r_offset (const void *p)
8247 {
8248   union aligned32
8249   {
8250     uint32_t v;
8251     unsigned char c[4];
8252   };
8253   const union aligned32 *a
8254     = (const union aligned32 *) &((const Elf32_External_Rel *) p)->r_offset;
8255
8256   uint32_t aval = (  (uint32_t) a->c[0]
8257                    | (uint32_t) a->c[1] << 8
8258                    | (uint32_t) a->c[2] << 16
8259                    | (uint32_t) a->c[3] << 24);
8260   return aval;
8261 }
8262
8263 static bfd_vma
8264 ext32b_r_offset (const void *p)
8265 {
8266   union aligned32
8267   {
8268     uint32_t v;
8269     unsigned char c[4];
8270   };
8271   const union aligned32 *a
8272     = (const union aligned32 *) &((const Elf32_External_Rel *) p)->r_offset;
8273
8274   uint32_t aval = (  (uint32_t) a->c[0] << 24
8275                    | (uint32_t) a->c[1] << 16
8276                    | (uint32_t) a->c[2] << 8
8277                    | (uint32_t) a->c[3]);
8278   return aval;
8279 }
8280
8281 #ifdef BFD_HOST_64_BIT
8282 static bfd_vma
8283 ext64l_r_offset (const void *p)
8284 {
8285   union aligned64
8286   {
8287     uint64_t v;
8288     unsigned char c[8];
8289   };
8290   const union aligned64 *a
8291     = (const union aligned64 *) &((const Elf64_External_Rel *) p)->r_offset;
8292
8293   uint64_t aval = (  (uint64_t) a->c[0]
8294                    | (uint64_t) a->c[1] << 8
8295                    | (uint64_t) a->c[2] << 16
8296                    | (uint64_t) a->c[3] << 24
8297                    | (uint64_t) a->c[4] << 32
8298                    | (uint64_t) a->c[5] << 40
8299                    | (uint64_t) a->c[6] << 48
8300                    | (uint64_t) a->c[7] << 56);
8301   return aval;
8302 }
8303
8304 static bfd_vma
8305 ext64b_r_offset (const void *p)
8306 {
8307   union aligned64
8308   {
8309     uint64_t v;
8310     unsigned char c[8];
8311   };
8312   const union aligned64 *a
8313     = (const union aligned64 *) &((const Elf64_External_Rel *) p)->r_offset;
8314
8315   uint64_t aval = (  (uint64_t) a->c[0] << 56
8316                    | (uint64_t) a->c[1] << 48
8317                    | (uint64_t) a->c[2] << 40
8318                    | (uint64_t) a->c[3] << 32
8319                    | (uint64_t) a->c[4] << 24
8320                    | (uint64_t) a->c[5] << 16
8321                    | (uint64_t) a->c[6] << 8
8322                    | (uint64_t) a->c[7]);
8323   return aval;
8324 }
8325 #endif
8326
8327 /* When performing a relocatable link, the input relocations are
8328    preserved.  But, if they reference global symbols, the indices
8329    referenced must be updated.  Update all the relocations found in
8330    RELDATA.  */
8331
8332 static bfd_boolean
8333 elf_link_adjust_relocs (bfd *abfd,
8334                         asection *sec,
8335                         struct bfd_elf_section_reloc_data *reldata,
8336                         bfd_boolean sort)
8337 {
8338   unsigned int i;
8339   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8340   bfd_byte *erela;
8341   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8342   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8343   bfd_vma r_type_mask;
8344   int r_sym_shift;
8345   unsigned int count = reldata->count;
8346   struct elf_link_hash_entry **rel_hash = reldata->hashes;
8347
8348   if (reldata->hdr->sh_entsize == bed->s->sizeof_rel)
8349     {
8350       swap_in = bed->s->swap_reloc_in;
8351       swap_out = bed->s->swap_reloc_out;
8352     }
8353   else if (reldata->hdr->sh_entsize == bed->s->sizeof_rela)
8354     {
8355       swap_in = bed->s->swap_reloca_in;
8356       swap_out = bed->s->swap_reloca_out;
8357     }
8358   else
8359     abort ();
8360
8361   if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
8362     abort ();
8363
8364   if (bed->s->arch_size == 32)
8365     {
8366       r_type_mask = 0xff;
8367       r_sym_shift = 8;
8368     }
8369   else
8370     {
8371       r_type_mask = 0xffffffff;
8372       r_sym_shift = 32;
8373     }
8374
8375   erela = reldata->hdr->contents;
8376   for (i = 0; i < count; i++, rel_hash++, erela += reldata->hdr->sh_entsize)
8377     {
8378       Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
8379       unsigned int j;
8380
8381       if (*rel_hash == NULL)
8382         continue;
8383
8384       BFD_ASSERT ((*rel_hash)->indx >= 0);
8385
8386       (*swap_in) (abfd, erela, irela);
8387       for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
8388         irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
8389                            | (irela[j].r_info & r_type_mask));
8390       (*swap_out) (abfd, irela, erela);
8391     }
8392
8393   if (bed->elf_backend_update_relocs)
8394     (*bed->elf_backend_update_relocs) (sec, reldata);
8395
8396   if (sort && count != 0)
8397     {
8398       bfd_vma (*ext_r_off) (const void *);
8399       bfd_vma r_off;
8400       size_t elt_size;
8401       bfd_byte *base, *end, *p, *loc;
8402       bfd_byte *buf = NULL;
8403
8404       if (bed->s->arch_size == 32)
8405         {
8406           if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8407             ext_r_off = ext32l_r_offset;
8408           else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8409             ext_r_off = ext32b_r_offset;
8410           else
8411             abort ();
8412         }
8413       else
8414         {
8415 #ifdef BFD_HOST_64_BIT
8416           if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8417             ext_r_off = ext64l_r_offset;
8418           else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8419             ext_r_off = ext64b_r_offset;
8420           else
8421 #endif
8422             abort ();
8423         }
8424
8425       /*  Must use a stable sort here.  A modified insertion sort,
8426           since the relocs are mostly sorted already.  */
8427       elt_size = reldata->hdr->sh_entsize;
8428       base = reldata->hdr->contents;
8429       end = base + count * elt_size;
8430       if (elt_size > sizeof (Elf64_External_Rela))
8431         abort ();
8432
8433       /* Ensure the first element is lowest.  This acts as a sentinel,
8434          speeding the main loop below.  */
8435       r_off = (*ext_r_off) (base);
8436       for (p = loc = base; (p += elt_size) < end; )
8437         {
8438           bfd_vma r_off2 = (*ext_r_off) (p);
8439           if (r_off > r_off2)
8440             {
8441               r_off = r_off2;
8442               loc = p;
8443             }
8444         }
8445       if (loc != base)
8446         {
8447           /* Don't just swap *base and *loc as that changes the order
8448              of the original base[0] and base[1] if they happen to
8449              have the same r_offset.  */
8450           bfd_byte onebuf[sizeof (Elf64_External_Rela)];
8451           memcpy (onebuf, loc, elt_size);
8452           memmove (base + elt_size, base, loc - base);
8453           memcpy (base, onebuf, elt_size);
8454         }
8455
8456       for (p = base + elt_size; (p += elt_size) < end; )
8457         {
8458           /* base to p is sorted, *p is next to insert.  */
8459           r_off = (*ext_r_off) (p);
8460           /* Search the sorted region for location to insert.  */
8461           loc = p - elt_size;
8462           while (r_off < (*ext_r_off) (loc))
8463             loc -= elt_size;
8464           loc += elt_size;
8465           if (loc != p)
8466             {
8467               /* Chances are there is a run of relocs to insert here,
8468                  from one of more input files.  Files are not always
8469                  linked in order due to the way elf_link_input_bfd is
8470                  called.  See pr17666.  */
8471               size_t sortlen = p - loc;
8472               bfd_vma r_off2 = (*ext_r_off) (loc);
8473               size_t runlen = elt_size;
8474               size_t buf_size = 96 * 1024;
8475               while (p + runlen < end
8476                      && (sortlen <= buf_size
8477                          || runlen + elt_size <= buf_size)
8478                      && r_off2 > (*ext_r_off) (p + runlen))
8479                 runlen += elt_size;
8480               if (buf == NULL)
8481                 {
8482                   buf = bfd_malloc (buf_size);
8483                   if (buf == NULL)
8484                     return FALSE;
8485                 }
8486               if (runlen < sortlen)
8487                 {
8488                   memcpy (buf, p, runlen);
8489                   memmove (loc + runlen, loc, sortlen);
8490                   memcpy (loc, buf, runlen);
8491                 }
8492               else
8493                 {
8494                   memcpy (buf, loc, sortlen);
8495                   memmove (loc, p, runlen);
8496                   memcpy (loc + runlen, buf, sortlen);
8497                 }
8498               p += runlen - elt_size;
8499             }
8500         }
8501       /* Hashes are no longer valid.  */
8502       free (reldata->hashes);
8503       reldata->hashes = NULL;
8504       free (buf);
8505     }
8506   return TRUE;
8507 }
8508
8509 struct elf_link_sort_rela
8510 {
8511   union {
8512     bfd_vma offset;
8513     bfd_vma sym_mask;
8514   } u;
8515   enum elf_reloc_type_class type;
8516   /* We use this as an array of size int_rels_per_ext_rel.  */
8517   Elf_Internal_Rela rela[1];
8518 };
8519
8520 static int
8521 elf_link_sort_cmp1 (const void *A, const void *B)
8522 {
8523   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8524   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8525   int relativea, relativeb;
8526
8527   relativea = a->type == reloc_class_relative;
8528   relativeb = b->type == reloc_class_relative;
8529
8530   if (relativea < relativeb)
8531     return 1;
8532   if (relativea > relativeb)
8533     return -1;
8534   if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
8535     return -1;
8536   if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
8537     return 1;
8538   if (a->rela->r_offset < b->rela->r_offset)
8539     return -1;
8540   if (a->rela->r_offset > b->rela->r_offset)
8541     return 1;
8542   return 0;
8543 }
8544
8545 static int
8546 elf_link_sort_cmp2 (const void *A, const void *B)
8547 {
8548   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8549   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8550
8551   if (a->type < b->type)
8552     return -1;
8553   if (a->type > b->type)
8554     return 1;
8555   if (a->u.offset < b->u.offset)
8556     return -1;
8557   if (a->u.offset > b->u.offset)
8558     return 1;
8559   if (a->rela->r_offset < b->rela->r_offset)
8560     return -1;
8561   if (a->rela->r_offset > b->rela->r_offset)
8562     return 1;
8563   return 0;
8564 }
8565
8566 static size_t
8567 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
8568 {
8569   asection *dynamic_relocs;
8570   asection *rela_dyn;
8571   asection *rel_dyn;
8572   bfd_size_type count, size;
8573   size_t i, ret, sort_elt, ext_size;
8574   bfd_byte *sort, *s_non_relative, *p;
8575   struct elf_link_sort_rela *sq;
8576   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8577   int i2e = bed->s->int_rels_per_ext_rel;
8578   unsigned int opb = bfd_octets_per_byte (abfd);
8579   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8580   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8581   struct bfd_link_order *lo;
8582   bfd_vma r_sym_mask;
8583   bfd_boolean use_rela;
8584
8585   /* Find a dynamic reloc section.  */
8586   rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
8587   rel_dyn  = bfd_get_section_by_name (abfd, ".rel.dyn");
8588   if (rela_dyn != NULL && rela_dyn->size > 0
8589       && rel_dyn != NULL && rel_dyn->size > 0)
8590     {
8591       bfd_boolean use_rela_initialised = FALSE;
8592
8593       /* This is just here to stop gcc from complaining.
8594          Its initialization checking code is not perfect.  */
8595       use_rela = TRUE;
8596
8597       /* Both sections are present.  Examine the sizes
8598          of the indirect sections to help us choose.  */
8599       for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8600         if (lo->type == bfd_indirect_link_order)
8601           {
8602             asection *o = lo->u.indirect.section;
8603
8604             if ((o->size % bed->s->sizeof_rela) == 0)
8605               {
8606                 if ((o->size % bed->s->sizeof_rel) == 0)
8607                   /* Section size is divisible by both rel and rela sizes.
8608                      It is of no help to us.  */
8609                   ;
8610                 else
8611                   {
8612                     /* Section size is only divisible by rela.  */
8613                     if (use_rela_initialised && (use_rela == FALSE))
8614                       {
8615                         _bfd_error_handler (_("%B: Unable to sort relocs - "
8616                                               "they are in more than one size"),
8617                                             abfd);
8618                         bfd_set_error (bfd_error_invalid_operation);
8619                         return 0;
8620                       }
8621                     else
8622                       {
8623                         use_rela = TRUE;
8624                         use_rela_initialised = TRUE;
8625                       }
8626                   }
8627               }
8628             else if ((o->size % bed->s->sizeof_rel) == 0)
8629               {
8630                 /* Section size is only divisible by rel.  */
8631                 if (use_rela_initialised && (use_rela == TRUE))
8632                   {
8633                     _bfd_error_handler (_("%B: Unable to sort relocs - "
8634                                           "they are in more than one size"),
8635                                         abfd);
8636                     bfd_set_error (bfd_error_invalid_operation);
8637                     return 0;
8638                   }
8639                 else
8640                   {
8641                     use_rela = FALSE;
8642                     use_rela_initialised = TRUE;
8643                   }
8644               }
8645             else
8646               {
8647                 /* The section size is not divisible by either -
8648                    something is wrong.  */
8649                 _bfd_error_handler (_("%B: Unable to sort relocs - "
8650                                       "they are of an unknown size"), abfd);
8651                 bfd_set_error (bfd_error_invalid_operation);
8652                 return 0;
8653               }
8654           }
8655
8656       for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8657         if (lo->type == bfd_indirect_link_order)
8658           {
8659             asection *o = lo->u.indirect.section;
8660
8661             if ((o->size % bed->s->sizeof_rela) == 0)
8662               {
8663                 if ((o->size % bed->s->sizeof_rel) == 0)
8664                   /* Section size is divisible by both rel and rela sizes.
8665                      It is of no help to us.  */
8666                   ;
8667                 else
8668                   {
8669                     /* Section size is only divisible by rela.  */
8670                     if (use_rela_initialised && (use_rela == FALSE))
8671                       {
8672                         _bfd_error_handler (_("%B: Unable to sort relocs - "
8673                                               "they are in more than one size"),
8674                                             abfd);
8675                         bfd_set_error (bfd_error_invalid_operation);
8676                         return 0;
8677                       }
8678                     else
8679                       {
8680                         use_rela = TRUE;
8681                         use_rela_initialised = TRUE;
8682                       }
8683                   }
8684               }
8685             else if ((o->size % bed->s->sizeof_rel) == 0)
8686               {
8687                 /* Section size is only divisible by rel.  */
8688                 if (use_rela_initialised && (use_rela == TRUE))
8689                   {
8690                     _bfd_error_handler (_("%B: Unable to sort relocs - "
8691                                           "they are in more than one size"),
8692                                         abfd);
8693                     bfd_set_error (bfd_error_invalid_operation);
8694                     return 0;
8695                   }
8696                 else
8697                   {
8698                     use_rela = FALSE;
8699                     use_rela_initialised = TRUE;
8700                   }
8701               }
8702             else
8703               {
8704                 /* The section size is not divisible by either -
8705                    something is wrong.  */
8706                 _bfd_error_handler (_("%B: Unable to sort relocs - "
8707                                       "they are of an unknown size"), abfd);
8708                 bfd_set_error (bfd_error_invalid_operation);
8709                 return 0;
8710               }
8711           }
8712
8713       if (! use_rela_initialised)
8714         /* Make a guess.  */
8715         use_rela = TRUE;
8716     }
8717   else if (rela_dyn != NULL && rela_dyn->size > 0)
8718     use_rela = TRUE;
8719   else if (rel_dyn != NULL && rel_dyn->size > 0)
8720     use_rela = FALSE;
8721   else
8722     return 0;
8723
8724   if (use_rela)
8725     {
8726       dynamic_relocs = rela_dyn;
8727       ext_size = bed->s->sizeof_rela;
8728       swap_in = bed->s->swap_reloca_in;
8729       swap_out = bed->s->swap_reloca_out;
8730     }
8731   else
8732     {
8733       dynamic_relocs = rel_dyn;
8734       ext_size = bed->s->sizeof_rel;
8735       swap_in = bed->s->swap_reloc_in;
8736       swap_out = bed->s->swap_reloc_out;
8737     }
8738
8739   size = 0;
8740   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8741     if (lo->type == bfd_indirect_link_order)
8742       size += lo->u.indirect.section->size;
8743
8744   if (size != dynamic_relocs->size)
8745     return 0;
8746
8747   sort_elt = (sizeof (struct elf_link_sort_rela)
8748               + (i2e - 1) * sizeof (Elf_Internal_Rela));
8749
8750   count = dynamic_relocs->size / ext_size;
8751   if (count == 0)
8752     return 0;
8753   sort = (bfd_byte *) bfd_zmalloc (sort_elt * count);
8754
8755   if (sort == NULL)
8756     {
8757       (*info->callbacks->warning)
8758         (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
8759       return 0;
8760     }
8761
8762   if (bed->s->arch_size == 32)
8763     r_sym_mask = ~(bfd_vma) 0xff;
8764   else
8765     r_sym_mask = ~(bfd_vma) 0xffffffff;
8766
8767   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8768     if (lo->type == bfd_indirect_link_order)
8769       {
8770         bfd_byte *erel, *erelend;
8771         asection *o = lo->u.indirect.section;
8772
8773         if (o->contents == NULL && o->size != 0)
8774           {
8775             /* This is a reloc section that is being handled as a normal
8776                section.  See bfd_section_from_shdr.  We can't combine
8777                relocs in this case.  */
8778             free (sort);
8779             return 0;
8780           }
8781         erel = o->contents;
8782         erelend = o->contents + o->size;
8783         p = sort + o->output_offset * opb / ext_size * sort_elt;
8784
8785         while (erel < erelend)
8786           {
8787             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8788
8789             (*swap_in) (abfd, erel, s->rela);
8790             s->type = (*bed->elf_backend_reloc_type_class) (info, o, s->rela);
8791             s->u.sym_mask = r_sym_mask;
8792             p += sort_elt;
8793             erel += ext_size;
8794           }
8795       }
8796
8797   qsort (sort, count, sort_elt, elf_link_sort_cmp1);
8798
8799   for (i = 0, p = sort; i < count; i++, p += sort_elt)
8800     {
8801       struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8802       if (s->type != reloc_class_relative)
8803         break;
8804     }
8805   ret = i;
8806   s_non_relative = p;
8807
8808   sq = (struct elf_link_sort_rela *) s_non_relative;
8809   for (; i < count; i++, p += sort_elt)
8810     {
8811       struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
8812       if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
8813         sq = sp;
8814       sp->u.offset = sq->rela->r_offset;
8815     }
8816
8817   qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
8818
8819   struct elf_link_hash_table *htab = elf_hash_table (info);
8820   if (htab->srelplt && htab->srelplt->output_section == dynamic_relocs)
8821     {
8822       /* We have plt relocs in .rela.dyn.  */
8823       sq = (struct elf_link_sort_rela *) sort;
8824       for (i = 0; i < count; i++)
8825         if (sq[count - i - 1].type != reloc_class_plt)
8826           break;
8827       if (i != 0 && htab->srelplt->size == i * ext_size)
8828         {
8829           struct bfd_link_order **plo;
8830           /* Put srelplt link_order last.  This is so the output_offset
8831              set in the next loop is correct for DT_JMPREL.  */
8832           for (plo = &dynamic_relocs->map_head.link_order; *plo != NULL; )
8833             if ((*plo)->type == bfd_indirect_link_order
8834                 && (*plo)->u.indirect.section == htab->srelplt)
8835               {
8836                 lo = *plo;
8837                 *plo = lo->next;
8838               }
8839             else
8840               plo = &(*plo)->next;
8841           *plo = lo;
8842           lo->next = NULL;
8843           dynamic_relocs->map_tail.link_order = lo;
8844         }
8845     }
8846
8847   p = sort;
8848   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8849     if (lo->type == bfd_indirect_link_order)
8850       {
8851         bfd_byte *erel, *erelend;
8852         asection *o = lo->u.indirect.section;
8853
8854         erel = o->contents;
8855         erelend = o->contents + o->size;
8856         o->output_offset = (p - sort) / sort_elt * ext_size / opb;
8857         while (erel < erelend)
8858           {
8859             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8860             (*swap_out) (abfd, s->rela, erel);
8861             p += sort_elt;
8862             erel += ext_size;
8863           }
8864       }
8865
8866   free (sort);
8867   *psec = dynamic_relocs;
8868   return ret;
8869 }
8870
8871 /* Add a symbol to the output symbol string table.  */
8872
8873 static int
8874 elf_link_output_symstrtab (struct elf_final_link_info *flinfo,
8875                            const char *name,
8876                            Elf_Internal_Sym *elfsym,
8877                            asection *input_sec,
8878                            struct elf_link_hash_entry *h)
8879 {
8880   int (*output_symbol_hook)
8881     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
8882      struct elf_link_hash_entry *);
8883   struct elf_link_hash_table *hash_table;
8884   const struct elf_backend_data *bed;
8885   bfd_size_type strtabsize;
8886
8887   BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
8888
8889   bed = get_elf_backend_data (flinfo->output_bfd);
8890   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
8891   if (output_symbol_hook != NULL)
8892     {
8893       int ret = (*output_symbol_hook) (flinfo->info, name, elfsym, input_sec, h);
8894       if (ret != 1)
8895         return ret;
8896     }
8897
8898   if (name == NULL
8899       || *name == '\0'
8900       || (input_sec->flags & SEC_EXCLUDE))
8901     elfsym->st_name = (unsigned long) -1;
8902   else
8903     {
8904       /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
8905          to get the final offset for st_name.  */
8906       elfsym->st_name
8907         = (unsigned long) _bfd_elf_strtab_add (flinfo->symstrtab,
8908                                                name, FALSE);
8909       if (elfsym->st_name == (unsigned long) -1)
8910         return 0;
8911     }
8912
8913   hash_table = elf_hash_table (flinfo->info);
8914   strtabsize = hash_table->strtabsize;
8915   if (strtabsize <= hash_table->strtabcount)
8916     {
8917       strtabsize += strtabsize;
8918       hash_table->strtabsize = strtabsize;
8919       strtabsize *= sizeof (*hash_table->strtab);
8920       hash_table->strtab
8921         = (struct elf_sym_strtab *) bfd_realloc (hash_table->strtab,
8922                                                  strtabsize);
8923       if (hash_table->strtab == NULL)
8924         return 0;
8925     }
8926   hash_table->strtab[hash_table->strtabcount].sym = *elfsym;
8927   hash_table->strtab[hash_table->strtabcount].dest_index
8928     = hash_table->strtabcount;
8929   hash_table->strtab[hash_table->strtabcount].destshndx_index
8930     = flinfo->symshndxbuf ? bfd_get_symcount (flinfo->output_bfd) : 0;
8931
8932   bfd_get_symcount (flinfo->output_bfd) += 1;
8933   hash_table->strtabcount += 1;
8934
8935   return 1;
8936 }
8937
8938 /* Swap symbols out to the symbol table and flush the output symbols to
8939    the file.  */
8940
8941 static bfd_boolean
8942 elf_link_swap_symbols_out (struct elf_final_link_info *flinfo)
8943 {
8944   struct elf_link_hash_table *hash_table = elf_hash_table (flinfo->info);
8945   bfd_size_type amt;
8946   size_t i;
8947   const struct elf_backend_data *bed;
8948   bfd_byte *symbuf;
8949   Elf_Internal_Shdr *hdr;
8950   file_ptr pos;
8951   bfd_boolean ret;
8952
8953   if (!hash_table->strtabcount)
8954     return TRUE;
8955
8956   BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
8957
8958   bed = get_elf_backend_data (flinfo->output_bfd);
8959
8960   amt = bed->s->sizeof_sym * hash_table->strtabcount;
8961   symbuf = (bfd_byte *) bfd_malloc (amt);
8962   if (symbuf == NULL)
8963     return FALSE;
8964
8965   if (flinfo->symshndxbuf)
8966     {
8967       amt = sizeof (Elf_External_Sym_Shndx);
8968       amt *= bfd_get_symcount (flinfo->output_bfd);
8969       flinfo->symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
8970       if (flinfo->symshndxbuf == NULL)
8971         {
8972           free (symbuf);
8973           return FALSE;
8974         }
8975     }
8976
8977   for (i = 0; i < hash_table->strtabcount; i++)
8978     {
8979       struct elf_sym_strtab *elfsym = &hash_table->strtab[i];
8980       if (elfsym->sym.st_name == (unsigned long) -1)
8981         elfsym->sym.st_name = 0;
8982       else
8983         elfsym->sym.st_name
8984           = (unsigned long) _bfd_elf_strtab_offset (flinfo->symstrtab,
8985                                                     elfsym->sym.st_name);
8986       bed->s->swap_symbol_out (flinfo->output_bfd, &elfsym->sym,
8987                                ((bfd_byte *) symbuf
8988                                 + (elfsym->dest_index
8989                                    * bed->s->sizeof_sym)),
8990                                (flinfo->symshndxbuf
8991                                 + elfsym->destshndx_index));
8992     }
8993
8994   hdr = &elf_tdata (flinfo->output_bfd)->symtab_hdr;
8995   pos = hdr->sh_offset + hdr->sh_size;
8996   amt = hash_table->strtabcount * bed->s->sizeof_sym;
8997   if (bfd_seek (flinfo->output_bfd, pos, SEEK_SET) == 0
8998       && bfd_bwrite (symbuf, amt, flinfo->output_bfd) == amt)
8999     {
9000       hdr->sh_size += amt;
9001       ret = TRUE;
9002     }
9003   else
9004     ret = FALSE;
9005
9006   free (symbuf);
9007
9008   free (hash_table->strtab);
9009   hash_table->strtab = NULL;
9010
9011   return ret;
9012 }
9013
9014 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
9015
9016 static bfd_boolean
9017 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
9018 {
9019   if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
9020       && sym->st_shndx < SHN_LORESERVE)
9021     {
9022       /* The gABI doesn't support dynamic symbols in output sections
9023          beyond 64k.  */
9024       _bfd_error_handler
9025         (_("%B: Too many sections: %d (>= %d)"),
9026          abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
9027       bfd_set_error (bfd_error_nonrepresentable_section);
9028       return FALSE;
9029     }
9030   return TRUE;
9031 }
9032
9033 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
9034    allowing an unsatisfied unversioned symbol in the DSO to match a
9035    versioned symbol that would normally require an explicit version.
9036    We also handle the case that a DSO references a hidden symbol
9037    which may be satisfied by a versioned symbol in another DSO.  */
9038
9039 static bfd_boolean
9040 elf_link_check_versioned_symbol (struct bfd_link_info *info,
9041                                  const struct elf_backend_data *bed,
9042                                  struct elf_link_hash_entry *h)
9043 {
9044   bfd *abfd;
9045   struct elf_link_loaded_list *loaded;
9046
9047   if (!is_elf_hash_table (info->hash))
9048     return FALSE;
9049
9050   /* Check indirect symbol.  */
9051   while (h->root.type == bfd_link_hash_indirect)
9052     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9053
9054   switch (h->root.type)
9055     {
9056     default:
9057       abfd = NULL;
9058       break;
9059
9060     case bfd_link_hash_undefined:
9061     case bfd_link_hash_undefweak:
9062       abfd = h->root.u.undef.abfd;
9063       if (abfd == NULL
9064           || (abfd->flags & DYNAMIC) == 0
9065           || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
9066         return FALSE;
9067       break;
9068
9069     case bfd_link_hash_defined:
9070     case bfd_link_hash_defweak:
9071       abfd = h->root.u.def.section->owner;
9072       break;
9073
9074     case bfd_link_hash_common:
9075       abfd = h->root.u.c.p->section->owner;
9076       break;
9077     }
9078   BFD_ASSERT (abfd != NULL);
9079
9080   for (loaded = elf_hash_table (info)->loaded;
9081        loaded != NULL;
9082        loaded = loaded->next)
9083     {
9084       bfd *input;
9085       Elf_Internal_Shdr *hdr;
9086       size_t symcount;
9087       size_t extsymcount;
9088       size_t extsymoff;
9089       Elf_Internal_Shdr *versymhdr;
9090       Elf_Internal_Sym *isym;
9091       Elf_Internal_Sym *isymend;
9092       Elf_Internal_Sym *isymbuf;
9093       Elf_External_Versym *ever;
9094       Elf_External_Versym *extversym;
9095
9096       input = loaded->abfd;
9097
9098       /* We check each DSO for a possible hidden versioned definition.  */
9099       if (input == abfd
9100           || (input->flags & DYNAMIC) == 0
9101           || elf_dynversym (input) == 0)
9102         continue;
9103
9104       hdr = &elf_tdata (input)->dynsymtab_hdr;
9105
9106       symcount = hdr->sh_size / bed->s->sizeof_sym;
9107       if (elf_bad_symtab (input))
9108         {
9109           extsymcount = symcount;
9110           extsymoff = 0;
9111         }
9112       else
9113         {
9114           extsymcount = symcount - hdr->sh_info;
9115           extsymoff = hdr->sh_info;
9116         }
9117
9118       if (extsymcount == 0)
9119         continue;
9120
9121       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
9122                                       NULL, NULL, NULL);
9123       if (isymbuf == NULL)
9124         return FALSE;
9125
9126       /* Read in any version definitions.  */
9127       versymhdr = &elf_tdata (input)->dynversym_hdr;
9128       extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
9129       if (extversym == NULL)
9130         goto error_ret;
9131
9132       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
9133           || (bfd_bread (extversym, versymhdr->sh_size, input)
9134               != versymhdr->sh_size))
9135         {
9136           free (extversym);
9137         error_ret:
9138           free (isymbuf);
9139           return FALSE;
9140         }
9141
9142       ever = extversym + extsymoff;
9143       isymend = isymbuf + extsymcount;
9144       for (isym = isymbuf; isym < isymend; isym++, ever++)
9145         {
9146           const char *name;
9147           Elf_Internal_Versym iver;
9148           unsigned short version_index;
9149
9150           if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
9151               || isym->st_shndx == SHN_UNDEF)
9152             continue;
9153
9154           name = bfd_elf_string_from_elf_section (input,
9155                                                   hdr->sh_link,
9156                                                   isym->st_name);
9157           if (strcmp (name, h->root.root.string) != 0)
9158             continue;
9159
9160           _bfd_elf_swap_versym_in (input, ever, &iver);
9161
9162           if ((iver.vs_vers & VERSYM_HIDDEN) == 0
9163               && !(h->def_regular
9164                    && h->forced_local))
9165             {
9166               /* If we have a non-hidden versioned sym, then it should
9167                  have provided a definition for the undefined sym unless
9168                  it is defined in a non-shared object and forced local.
9169                */
9170               abort ();
9171             }
9172
9173           version_index = iver.vs_vers & VERSYM_VERSION;
9174           if (version_index == 1 || version_index == 2)
9175             {
9176               /* This is the base or first version.  We can use it.  */
9177               free (extversym);
9178               free (isymbuf);
9179               return TRUE;
9180             }
9181         }
9182
9183       free (extversym);
9184       free (isymbuf);
9185     }
9186
9187   return FALSE;
9188 }
9189
9190 /* Convert ELF common symbol TYPE.  */
9191
9192 static int
9193 elf_link_convert_common_type (struct bfd_link_info *info, int type)
9194 {
9195   /* Commom symbol can only appear in relocatable link.  */
9196   if (!bfd_link_relocatable (info))
9197     abort ();
9198   switch (info->elf_stt_common)
9199     {
9200     case unchanged:
9201       break;
9202     case elf_stt_common:
9203       type = STT_COMMON;
9204       break;
9205     case no_elf_stt_common:
9206       type = STT_OBJECT;
9207       break;
9208     }
9209   return type;
9210 }
9211
9212 /* Add an external symbol to the symbol table.  This is called from
9213    the hash table traversal routine.  When generating a shared object,
9214    we go through the symbol table twice.  The first time we output
9215    anything that might have been forced to local scope in a version
9216    script.  The second time we output the symbols that are still
9217    global symbols.  */
9218
9219 static bfd_boolean
9220 elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
9221 {
9222   struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh;
9223   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
9224   struct elf_final_link_info *flinfo = eoinfo->flinfo;
9225   bfd_boolean strip;
9226   Elf_Internal_Sym sym;
9227   asection *input_sec;
9228   const struct elf_backend_data *bed;
9229   long indx;
9230   int ret;
9231   unsigned int type;
9232   /* A symbol is bound locally if it is forced local or it is locally
9233      defined, hidden versioned, not referenced by shared library and
9234      not exported when linking executable.  */
9235   bfd_boolean local_bind = (h->forced_local
9236                             || (bfd_link_executable (flinfo->info)
9237                                 && !flinfo->info->export_dynamic
9238                                 && !h->dynamic
9239                                 && !h->ref_dynamic
9240                                 && h->def_regular
9241                                 && h->versioned == versioned_hidden));
9242
9243   if (h->root.type == bfd_link_hash_warning)
9244     {
9245       h = (struct elf_link_hash_entry *) h->root.u.i.link;
9246       if (h->root.type == bfd_link_hash_new)
9247         return TRUE;
9248     }
9249
9250   /* Decide whether to output this symbol in this pass.  */
9251   if (eoinfo->localsyms)
9252     {
9253       if (!local_bind)
9254         return TRUE;
9255     }
9256   else
9257     {
9258       if (local_bind)
9259         return TRUE;
9260     }
9261
9262   bed = get_elf_backend_data (flinfo->output_bfd);
9263
9264   if (h->root.type == bfd_link_hash_undefined)
9265     {
9266       /* If we have an undefined symbol reference here then it must have
9267          come from a shared library that is being linked in.  (Undefined
9268          references in regular files have already been handled unless
9269          they are in unreferenced sections which are removed by garbage
9270          collection).  */
9271       bfd_boolean ignore_undef = FALSE;
9272
9273       /* Some symbols may be special in that the fact that they're
9274          undefined can be safely ignored - let backend determine that.  */
9275       if (bed->elf_backend_ignore_undef_symbol)
9276         ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
9277
9278       /* If we are reporting errors for this situation then do so now.  */
9279       if (!ignore_undef
9280           && h->ref_dynamic
9281           && (!h->ref_regular || flinfo->info->gc_sections)
9282           && !elf_link_check_versioned_symbol (flinfo->info, bed, h)
9283           && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
9284         (*flinfo->info->callbacks->undefined_symbol)
9285           (flinfo->info, h->root.root.string,
9286            h->ref_regular ? NULL : h->root.u.undef.abfd,
9287            NULL, 0,
9288            flinfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR);
9289
9290       /* Strip a global symbol defined in a discarded section.  */
9291       if (h->indx == -3)
9292         return TRUE;
9293     }
9294
9295   /* We should also warn if a forced local symbol is referenced from
9296      shared libraries.  */
9297   if (bfd_link_executable (flinfo->info)
9298       && h->forced_local
9299       && h->ref_dynamic
9300       && h->def_regular
9301       && !h->dynamic_def
9302       && h->ref_dynamic_nonweak
9303       && !elf_link_check_versioned_symbol (flinfo->info, bed, h))
9304     {
9305       bfd *def_bfd;
9306       const char *msg;
9307       struct elf_link_hash_entry *hi = h;
9308
9309       /* Check indirect symbol.  */
9310       while (hi->root.type == bfd_link_hash_indirect)
9311         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
9312
9313       if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
9314         msg = _("%B: internal symbol `%s' in %B is referenced by DSO");
9315       else if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
9316         msg = _("%B: hidden symbol `%s' in %B is referenced by DSO");
9317       else
9318         msg = _("%B: local symbol `%s' in %B is referenced by DSO");
9319       def_bfd = flinfo->output_bfd;
9320       if (hi->root.u.def.section != bfd_abs_section_ptr)
9321         def_bfd = hi->root.u.def.section->owner;
9322       _bfd_error_handler (msg, flinfo->output_bfd, def_bfd,
9323                           h->root.root.string);
9324       bfd_set_error (bfd_error_bad_value);
9325       eoinfo->failed = TRUE;
9326       return FALSE;
9327     }
9328
9329   /* We don't want to output symbols that have never been mentioned by
9330      a regular file, or that we have been told to strip.  However, if
9331      h->indx is set to -2, the symbol is used by a reloc and we must
9332      output it.  */
9333   strip = FALSE;
9334   if (h->indx == -2)
9335     ;
9336   else if ((h->def_dynamic
9337             || h->ref_dynamic
9338             || h->root.type == bfd_link_hash_new)
9339            && !h->def_regular
9340            && !h->ref_regular)
9341     strip = TRUE;
9342   else if (flinfo->info->strip == strip_all)
9343     strip = TRUE;
9344   else if (flinfo->info->strip == strip_some
9345            && bfd_hash_lookup (flinfo->info->keep_hash,
9346                                h->root.root.string, FALSE, FALSE) == NULL)
9347     strip = TRUE;
9348   else if ((h->root.type == bfd_link_hash_defined
9349             || h->root.type == bfd_link_hash_defweak)
9350            && ((flinfo->info->strip_discarded
9351                 && discarded_section (h->root.u.def.section))
9352                || ((h->root.u.def.section->flags & SEC_LINKER_CREATED) == 0
9353                    && h->root.u.def.section->owner != NULL
9354                    && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)))
9355     strip = TRUE;
9356   else if ((h->root.type == bfd_link_hash_undefined
9357             || h->root.type == bfd_link_hash_undefweak)
9358            && h->root.u.undef.abfd != NULL
9359            && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0)
9360     strip = TRUE;
9361
9362   type = h->type;
9363
9364   /* If we're stripping it, and it's not a dynamic symbol, there's
9365      nothing else to do.   However, if it is a forced local symbol or
9366      an ifunc symbol we need to give the backend finish_dynamic_symbol
9367      function a chance to make it dynamic.  */
9368   if (strip
9369       && h->dynindx == -1
9370       && type != STT_GNU_IFUNC
9371       && !h->forced_local)
9372     return TRUE;
9373
9374   sym.st_value = 0;
9375   sym.st_size = h->size;
9376   sym.st_other = h->other;
9377   switch (h->root.type)
9378     {
9379     default:
9380     case bfd_link_hash_new:
9381     case bfd_link_hash_warning:
9382       abort ();
9383       return FALSE;
9384
9385     case bfd_link_hash_undefined:
9386     case bfd_link_hash_undefweak:
9387       input_sec = bfd_und_section_ptr;
9388       sym.st_shndx = SHN_UNDEF;
9389       break;
9390
9391     case bfd_link_hash_defined:
9392     case bfd_link_hash_defweak:
9393       {
9394         input_sec = h->root.u.def.section;
9395         if (input_sec->output_section != NULL)
9396           {
9397             sym.st_shndx =
9398               _bfd_elf_section_from_bfd_section (flinfo->output_bfd,
9399                                                  input_sec->output_section);
9400             if (sym.st_shndx == SHN_BAD)
9401               {
9402                 _bfd_error_handler
9403                   (_("%B: could not find output section %A for input section %A"),
9404                    flinfo->output_bfd, input_sec->output_section, input_sec);
9405                 bfd_set_error (bfd_error_nonrepresentable_section);
9406                 eoinfo->failed = TRUE;
9407                 return FALSE;
9408               }
9409
9410             /* ELF symbols in relocatable files are section relative,
9411                but in nonrelocatable files they are virtual
9412                addresses.  */
9413             sym.st_value = h->root.u.def.value + input_sec->output_offset;
9414             if (!bfd_link_relocatable (flinfo->info))
9415               {
9416                 sym.st_value += input_sec->output_section->vma;
9417                 if (h->type == STT_TLS)
9418                   {
9419                     asection *tls_sec = elf_hash_table (flinfo->info)->tls_sec;
9420                     if (tls_sec != NULL)
9421                       sym.st_value -= tls_sec->vma;
9422                   }
9423               }
9424           }
9425         else
9426           {
9427             BFD_ASSERT (input_sec->owner == NULL
9428                         || (input_sec->owner->flags & DYNAMIC) != 0);
9429             sym.st_shndx = SHN_UNDEF;
9430             input_sec = bfd_und_section_ptr;
9431           }
9432       }
9433       break;
9434
9435     case bfd_link_hash_common:
9436       input_sec = h->root.u.c.p->section;
9437       sym.st_shndx = bed->common_section_index (input_sec);
9438       sym.st_value = 1 << h->root.u.c.p->alignment_power;
9439       break;
9440
9441     case bfd_link_hash_indirect:
9442       /* These symbols are created by symbol versioning.  They point
9443          to the decorated version of the name.  For example, if the
9444          symbol foo@@GNU_1.2 is the default, which should be used when
9445          foo is used with no version, then we add an indirect symbol
9446          foo which points to foo@@GNU_1.2.  We ignore these symbols,
9447          since the indirected symbol is already in the hash table.  */
9448       return TRUE;
9449     }
9450
9451   if (type == STT_COMMON || type == STT_OBJECT)
9452     switch (h->root.type)
9453       {
9454       case bfd_link_hash_common:
9455         type = elf_link_convert_common_type (flinfo->info, type);
9456         break;
9457       case bfd_link_hash_defined:
9458       case bfd_link_hash_defweak:
9459         if (bed->common_definition (&sym))
9460           type = elf_link_convert_common_type (flinfo->info, type);
9461         else
9462           type = STT_OBJECT;
9463         break;
9464       case bfd_link_hash_undefined:
9465       case bfd_link_hash_undefweak:
9466         break;
9467       default:
9468         abort ();
9469       }
9470
9471   if (local_bind)
9472     {
9473       sym.st_info = ELF_ST_INFO (STB_LOCAL, type);
9474       /* Turn off visibility on local symbol.  */
9475       sym.st_other &= ~ELF_ST_VISIBILITY (-1);
9476     }
9477   /* Set STB_GNU_UNIQUE only if symbol is defined in regular object.  */
9478   else if (h->unique_global && h->def_regular)
9479     sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, type);
9480   else if (h->root.type == bfd_link_hash_undefweak
9481            || h->root.type == bfd_link_hash_defweak)
9482     sym.st_info = ELF_ST_INFO (STB_WEAK, type);
9483   else
9484     sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
9485   sym.st_target_internal = h->target_internal;
9486
9487   /* Give the processor backend a chance to tweak the symbol value,
9488      and also to finish up anything that needs to be done for this
9489      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
9490      forced local syms when non-shared is due to a historical quirk.
9491      STT_GNU_IFUNC symbol must go through PLT.  */
9492   if ((h->type == STT_GNU_IFUNC
9493        && h->def_regular
9494        && !bfd_link_relocatable (flinfo->info))
9495       || ((h->dynindx != -1
9496            || h->forced_local)
9497           && ((bfd_link_pic (flinfo->info)
9498                && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
9499                    || h->root.type != bfd_link_hash_undefweak))
9500               || !h->forced_local)
9501           && elf_hash_table (flinfo->info)->dynamic_sections_created))
9502     {
9503       if (! ((*bed->elf_backend_finish_dynamic_symbol)
9504              (flinfo->output_bfd, flinfo->info, h, &sym)))
9505         {
9506           eoinfo->failed = TRUE;
9507           return FALSE;
9508         }
9509     }
9510
9511   /* If we are marking the symbol as undefined, and there are no
9512      non-weak references to this symbol from a regular object, then
9513      mark the symbol as weak undefined; if there are non-weak
9514      references, mark the symbol as strong.  We can't do this earlier,
9515      because it might not be marked as undefined until the
9516      finish_dynamic_symbol routine gets through with it.  */
9517   if (sym.st_shndx == SHN_UNDEF
9518       && h->ref_regular
9519       && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
9520           || ELF_ST_BIND (sym.st_info) == STB_WEAK))
9521     {
9522       int bindtype;
9523       type = ELF_ST_TYPE (sym.st_info);
9524
9525       /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */
9526       if (type == STT_GNU_IFUNC)
9527         type = STT_FUNC;
9528
9529       if (h->ref_regular_nonweak)
9530         bindtype = STB_GLOBAL;
9531       else
9532         bindtype = STB_WEAK;
9533       sym.st_info = ELF_ST_INFO (bindtype, type);
9534     }
9535
9536   /* If this is a symbol defined in a dynamic library, don't use the
9537      symbol size from the dynamic library.  Relinking an executable
9538      against a new library may introduce gratuitous changes in the
9539      executable's symbols if we keep the size.  */
9540   if (sym.st_shndx == SHN_UNDEF
9541       && !h->def_regular
9542       && h->def_dynamic)
9543     sym.st_size = 0;
9544
9545   /* If a non-weak symbol with non-default visibility is not defined
9546      locally, it is a fatal error.  */
9547   if (!bfd_link_relocatable (flinfo->info)
9548       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
9549       && ELF_ST_BIND (sym.st_info) != STB_WEAK
9550       && h->root.type == bfd_link_hash_undefined
9551       && !h->def_regular)
9552     {
9553       const char *msg;
9554
9555       if (ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED)
9556         msg = _("%B: protected symbol `%s' isn't defined");
9557       else if (ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL)
9558         msg = _("%B: internal symbol `%s' isn't defined");
9559       else
9560         msg = _("%B: hidden symbol `%s' isn't defined");
9561       _bfd_error_handler (msg, flinfo->output_bfd, h->root.root.string);
9562       bfd_set_error (bfd_error_bad_value);
9563       eoinfo->failed = TRUE;
9564       return FALSE;
9565     }
9566
9567   /* If this symbol should be put in the .dynsym section, then put it
9568      there now.  We already know the symbol index.  We also fill in
9569      the entry in the .hash section.  */
9570   if (elf_hash_table (flinfo->info)->dynsym != NULL
9571       && h->dynindx != -1
9572       && elf_hash_table (flinfo->info)->dynamic_sections_created)
9573     {
9574       bfd_byte *esym;
9575
9576       /* Since there is no version information in the dynamic string,
9577          if there is no version info in symbol version section, we will
9578          have a run-time problem if not linking executable, referenced
9579          by shared library, not locally defined, or not bound locally.
9580       */
9581       if (h->verinfo.verdef == NULL
9582           && !local_bind
9583           && (!bfd_link_executable (flinfo->info)
9584               || h->ref_dynamic
9585               || !h->def_regular))
9586         {
9587           char *p = strrchr (h->root.root.string, ELF_VER_CHR);
9588
9589           if (p && p [1] != '\0')
9590             {
9591               _bfd_error_handler
9592                 (_("%B: No symbol version section for versioned symbol `%s'"),
9593                  flinfo->output_bfd, h->root.root.string);
9594               eoinfo->failed = TRUE;
9595               return FALSE;
9596             }
9597         }
9598
9599       sym.st_name = h->dynstr_index;
9600       esym = (elf_hash_table (flinfo->info)->dynsym->contents
9601               + h->dynindx * bed->s->sizeof_sym);
9602       if (!check_dynsym (flinfo->output_bfd, &sym))
9603         {
9604           eoinfo->failed = TRUE;
9605           return FALSE;
9606         }
9607       bed->s->swap_symbol_out (flinfo->output_bfd, &sym, esym, 0);
9608
9609       if (flinfo->hash_sec != NULL)
9610         {
9611           size_t hash_entry_size;
9612           bfd_byte *bucketpos;
9613           bfd_vma chain;
9614           size_t bucketcount;
9615           size_t bucket;
9616
9617           bucketcount = elf_hash_table (flinfo->info)->bucketcount;
9618           bucket = h->u.elf_hash_value % bucketcount;
9619
9620           hash_entry_size
9621             = elf_section_data (flinfo->hash_sec)->this_hdr.sh_entsize;
9622           bucketpos = ((bfd_byte *) flinfo->hash_sec->contents
9623                        + (bucket + 2) * hash_entry_size);
9624           chain = bfd_get (8 * hash_entry_size, flinfo->output_bfd, bucketpos);
9625           bfd_put (8 * hash_entry_size, flinfo->output_bfd, h->dynindx,
9626                    bucketpos);
9627           bfd_put (8 * hash_entry_size, flinfo->output_bfd, chain,
9628                    ((bfd_byte *) flinfo->hash_sec->contents
9629                     + (bucketcount + 2 + h->dynindx) * hash_entry_size));
9630         }
9631
9632       if (flinfo->symver_sec != NULL && flinfo->symver_sec->contents != NULL)
9633         {
9634           Elf_Internal_Versym iversym;
9635           Elf_External_Versym *eversym;
9636
9637           if (!h->def_regular)
9638             {
9639               if (h->verinfo.verdef == NULL
9640                   || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
9641                       & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
9642                 iversym.vs_vers = 0;
9643               else
9644                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
9645             }
9646           else
9647             {
9648               if (h->verinfo.vertree == NULL)
9649                 iversym.vs_vers = 1;
9650               else
9651                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
9652               if (flinfo->info->create_default_symver)
9653                 iversym.vs_vers++;
9654             }
9655
9656           /* Turn on VERSYM_HIDDEN only if the hidden versioned symbol is
9657              defined locally.  */
9658           if (h->versioned == versioned_hidden && h->def_regular)
9659             iversym.vs_vers |= VERSYM_HIDDEN;
9660
9661           eversym = (Elf_External_Versym *) flinfo->symver_sec->contents;
9662           eversym += h->dynindx;
9663           _bfd_elf_swap_versym_out (flinfo->output_bfd, &iversym, eversym);
9664         }
9665     }
9666
9667   /* If the symbol is undefined, and we didn't output it to .dynsym,
9668      strip it from .symtab too.  Obviously we can't do this for
9669      relocatable output or when needed for --emit-relocs.  */
9670   else if (input_sec == bfd_und_section_ptr
9671            && h->indx != -2
9672            && !bfd_link_relocatable (flinfo->info))
9673     return TRUE;
9674   /* Also strip others that we couldn't earlier due to dynamic symbol
9675      processing.  */
9676   if (strip)
9677     return TRUE;
9678   if ((input_sec->flags & SEC_EXCLUDE) != 0)
9679     return TRUE;
9680
9681   /* Output a FILE symbol so that following locals are not associated
9682      with the wrong input file.  We need one for forced local symbols
9683      if we've seen more than one FILE symbol or when we have exactly
9684      one FILE symbol but global symbols are present in a file other
9685      than the one with the FILE symbol.  We also need one if linker
9686      defined symbols are present.  In practice these conditions are
9687      always met, so just emit the FILE symbol unconditionally.  */
9688   if (eoinfo->localsyms
9689       && !eoinfo->file_sym_done
9690       && eoinfo->flinfo->filesym_count != 0)
9691     {
9692       Elf_Internal_Sym fsym;
9693
9694       memset (&fsym, 0, sizeof (fsym));
9695       fsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
9696       fsym.st_shndx = SHN_ABS;
9697       if (!elf_link_output_symstrtab (eoinfo->flinfo, NULL, &fsym,
9698                                       bfd_und_section_ptr, NULL))
9699         return FALSE;
9700
9701       eoinfo->file_sym_done = TRUE;
9702     }
9703
9704   indx = bfd_get_symcount (flinfo->output_bfd);
9705   ret = elf_link_output_symstrtab (flinfo, h->root.root.string, &sym,
9706                                    input_sec, h);
9707   if (ret == 0)
9708     {
9709       eoinfo->failed = TRUE;
9710       return FALSE;
9711     }
9712   else if (ret == 1)
9713     h->indx = indx;
9714   else if (h->indx == -2)
9715     abort();
9716
9717   return TRUE;
9718 }
9719
9720 /* Return TRUE if special handling is done for relocs in SEC against
9721    symbols defined in discarded sections.  */
9722
9723 static bfd_boolean
9724 elf_section_ignore_discarded_relocs (asection *sec)
9725 {
9726   const struct elf_backend_data *bed;
9727
9728   switch (sec->sec_info_type)
9729     {
9730     case SEC_INFO_TYPE_STABS:
9731     case SEC_INFO_TYPE_EH_FRAME:
9732     case SEC_INFO_TYPE_EH_FRAME_ENTRY:
9733       return TRUE;
9734     default:
9735       break;
9736     }
9737
9738   bed = get_elf_backend_data (sec->owner);
9739   if (bed->elf_backend_ignore_discarded_relocs != NULL
9740       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
9741     return TRUE;
9742
9743   return FALSE;
9744 }
9745
9746 /* Return a mask saying how ld should treat relocations in SEC against
9747    symbols defined in discarded sections.  If this function returns
9748    COMPLAIN set, ld will issue a warning message.  If this function
9749    returns PRETEND set, and the discarded section was link-once and the
9750    same size as the kept link-once section, ld will pretend that the
9751    symbol was actually defined in the kept section.  Otherwise ld will
9752    zero the reloc (at least that is the intent, but some cooperation by
9753    the target dependent code is needed, particularly for REL targets).  */
9754
9755 unsigned int
9756 _bfd_elf_default_action_discarded (asection *sec)
9757 {
9758   if (sec->flags & SEC_DEBUGGING)
9759     return PRETEND;
9760
9761   if (strcmp (".eh_frame", sec->name) == 0)
9762     return 0;
9763
9764   if (strcmp (".gcc_except_table", sec->name) == 0)
9765     return 0;
9766
9767   return COMPLAIN | PRETEND;
9768 }
9769
9770 /* Find a match between a section and a member of a section group.  */
9771
9772 static asection *
9773 match_group_member (asection *sec, asection *group,
9774                     struct bfd_link_info *info)
9775 {
9776   asection *first = elf_next_in_group (group);
9777   asection *s = first;
9778
9779   while (s != NULL)
9780     {
9781       if (bfd_elf_match_symbols_in_sections (s, sec, info))
9782         return s;
9783
9784       s = elf_next_in_group (s);
9785       if (s == first)
9786         break;
9787     }
9788
9789   return NULL;
9790 }
9791
9792 /* Check if the kept section of a discarded section SEC can be used
9793    to replace it.  Return the replacement if it is OK.  Otherwise return
9794    NULL.  */
9795
9796 asection *
9797 _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
9798 {
9799   asection *kept;
9800
9801   kept = sec->kept_section;
9802   if (kept != NULL)
9803     {
9804       if ((kept->flags & SEC_GROUP) != 0)
9805         kept = match_group_member (sec, kept, info);
9806       if (kept != NULL
9807           && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
9808               != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
9809         kept = NULL;
9810       sec->kept_section = kept;
9811     }
9812   return kept;
9813 }
9814
9815 /* Link an input file into the linker output file.  This function
9816    handles all the sections and relocations of the input file at once.
9817    This is so that we only have to read the local symbols once, and
9818    don't have to keep them in memory.  */
9819
9820 static bfd_boolean
9821 elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
9822 {
9823   int (*relocate_section)
9824     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
9825      Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
9826   bfd *output_bfd;
9827   Elf_Internal_Shdr *symtab_hdr;
9828   size_t locsymcount;
9829   size_t extsymoff;
9830   Elf_Internal_Sym *isymbuf;
9831   Elf_Internal_Sym *isym;
9832   Elf_Internal_Sym *isymend;
9833   long *pindex;
9834   asection **ppsection;
9835   asection *o;
9836   const struct elf_backend_data *bed;
9837   struct elf_link_hash_entry **sym_hashes;
9838   bfd_size_type address_size;
9839   bfd_vma r_type_mask;
9840   int r_sym_shift;
9841   bfd_boolean have_file_sym = FALSE;
9842
9843   output_bfd = flinfo->output_bfd;
9844   bed = get_elf_backend_data (output_bfd);
9845   relocate_section = bed->elf_backend_relocate_section;
9846
9847   /* If this is a dynamic object, we don't want to do anything here:
9848      we don't want the local symbols, and we don't want the section
9849      contents.  */
9850   if ((input_bfd->flags & DYNAMIC) != 0)
9851     return TRUE;
9852
9853   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9854   if (elf_bad_symtab (input_bfd))
9855     {
9856       locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9857       extsymoff = 0;
9858     }
9859   else
9860     {
9861       locsymcount = symtab_hdr->sh_info;
9862       extsymoff = symtab_hdr->sh_info;
9863     }
9864
9865   /* Read the local symbols.  */
9866   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
9867   if (isymbuf == NULL && locsymcount != 0)
9868     {
9869       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
9870                                       flinfo->internal_syms,
9871                                       flinfo->external_syms,
9872                                       flinfo->locsym_shndx);
9873       if (isymbuf == NULL)
9874         return FALSE;
9875     }
9876
9877   /* Find local symbol sections and adjust values of symbols in
9878      SEC_MERGE sections.  Write out those local symbols we know are
9879      going into the output file.  */
9880   isymend = isymbuf + locsymcount;
9881   for (isym = isymbuf, pindex = flinfo->indices, ppsection = flinfo->sections;
9882        isym < isymend;
9883        isym++, pindex++, ppsection++)
9884     {
9885       asection *isec;
9886       const char *name;
9887       Elf_Internal_Sym osym;
9888       long indx;
9889       int ret;
9890
9891       *pindex = -1;
9892
9893       if (elf_bad_symtab (input_bfd))
9894         {
9895           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
9896             {
9897               *ppsection = NULL;
9898               continue;
9899             }
9900         }
9901
9902       if (isym->st_shndx == SHN_UNDEF)
9903         isec = bfd_und_section_ptr;
9904       else if (isym->st_shndx == SHN_ABS)
9905         isec = bfd_abs_section_ptr;
9906       else if (isym->st_shndx == SHN_COMMON)
9907         isec = bfd_com_section_ptr;
9908       else
9909         {
9910           isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
9911           if (isec == NULL)
9912             {
9913               /* Don't attempt to output symbols with st_shnx in the
9914                  reserved range other than SHN_ABS and SHN_COMMON.  */
9915               *ppsection = NULL;
9916               continue;
9917             }
9918           else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE
9919                    && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
9920             isym->st_value =
9921               _bfd_merged_section_offset (output_bfd, &isec,
9922                                           elf_section_data (isec)->sec_info,
9923                                           isym->st_value);
9924         }
9925
9926       *ppsection = isec;
9927
9928       /* Don't output the first, undefined, symbol.  In fact, don't
9929          output any undefined local symbol.  */
9930       if (isec == bfd_und_section_ptr)
9931         continue;
9932
9933       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
9934         {
9935           /* We never output section symbols.  Instead, we use the
9936              section symbol of the corresponding section in the output
9937              file.  */
9938           continue;
9939         }
9940
9941       /* If we are stripping all symbols, we don't want to output this
9942          one.  */
9943       if (flinfo->info->strip == strip_all)
9944         continue;
9945
9946       /* If we are discarding all local symbols, we don't want to
9947          output this one.  If we are generating a relocatable output
9948          file, then some of the local symbols may be required by
9949          relocs; we output them below as we discover that they are
9950          needed.  */
9951       if (flinfo->info->discard == discard_all)
9952         continue;
9953
9954       /* If this symbol is defined in a section which we are
9955          discarding, we don't need to keep it.  */
9956       if (isym->st_shndx != SHN_UNDEF
9957           && isym->st_shndx < SHN_LORESERVE
9958           && bfd_section_removed_from_list (output_bfd,
9959                                             isec->output_section))
9960         continue;
9961
9962       /* Get the name of the symbol.  */
9963       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
9964                                               isym->st_name);
9965       if (name == NULL)
9966         return FALSE;
9967
9968       /* See if we are discarding symbols with this name.  */
9969       if ((flinfo->info->strip == strip_some
9970            && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE)
9971                == NULL))
9972           || (((flinfo->info->discard == discard_sec_merge
9973                 && (isec->flags & SEC_MERGE)
9974                 && !bfd_link_relocatable (flinfo->info))
9975                || flinfo->info->discard == discard_l)
9976               && bfd_is_local_label_name (input_bfd, name)))
9977         continue;
9978
9979       if (ELF_ST_TYPE (isym->st_info) == STT_FILE)
9980         {
9981           if (input_bfd->lto_output)
9982             /* -flto puts a temp file name here.  This means builds
9983                are not reproducible.  Discard the symbol.  */
9984             continue;
9985           have_file_sym = TRUE;
9986           flinfo->filesym_count += 1;
9987         }
9988       if (!have_file_sym)
9989         {
9990           /* In the absence of debug info, bfd_find_nearest_line uses
9991              FILE symbols to determine the source file for local
9992              function symbols.  Provide a FILE symbol here if input
9993              files lack such, so that their symbols won't be
9994              associated with a previous input file.  It's not the
9995              source file, but the best we can do.  */
9996           have_file_sym = TRUE;
9997           flinfo->filesym_count += 1;
9998           memset (&osym, 0, sizeof (osym));
9999           osym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
10000           osym.st_shndx = SHN_ABS;
10001           if (!elf_link_output_symstrtab (flinfo,
10002                                           (input_bfd->lto_output ? NULL
10003                                            : input_bfd->filename),
10004                                           &osym, bfd_abs_section_ptr,
10005                                           NULL))
10006             return FALSE;
10007         }
10008
10009       osym = *isym;
10010
10011       /* Adjust the section index for the output file.  */
10012       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
10013                                                          isec->output_section);
10014       if (osym.st_shndx == SHN_BAD)
10015         return FALSE;
10016
10017       /* ELF symbols in relocatable files are section relative, but
10018          in executable files they are virtual addresses.  Note that
10019          this code assumes that all ELF sections have an associated
10020          BFD section with a reasonable value for output_offset; below
10021          we assume that they also have a reasonable value for
10022          output_section.  Any special sections must be set up to meet
10023          these requirements.  */
10024       osym.st_value += isec->output_offset;
10025       if (!bfd_link_relocatable (flinfo->info))
10026         {
10027           osym.st_value += isec->output_section->vma;
10028           if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
10029             {
10030               /* STT_TLS symbols are relative to PT_TLS segment base.  */
10031               BFD_ASSERT (elf_hash_table (flinfo->info)->tls_sec != NULL);
10032               osym.st_value -= elf_hash_table (flinfo->info)->tls_sec->vma;
10033             }
10034         }
10035
10036       indx = bfd_get_symcount (output_bfd);
10037       ret = elf_link_output_symstrtab (flinfo, name, &osym, isec, NULL);
10038       if (ret == 0)
10039         return FALSE;
10040       else if (ret == 1)
10041         *pindex = indx;
10042     }
10043
10044   if (bed->s->arch_size == 32)
10045     {
10046       r_type_mask = 0xff;
10047       r_sym_shift = 8;
10048       address_size = 4;
10049     }
10050   else
10051     {
10052       r_type_mask = 0xffffffff;
10053       r_sym_shift = 32;
10054       address_size = 8;
10055     }
10056
10057   /* Relocate the contents of each section.  */
10058   sym_hashes = elf_sym_hashes (input_bfd);
10059   for (o = input_bfd->sections; o != NULL; o = o->next)
10060     {
10061       bfd_byte *contents;
10062
10063       if (! o->linker_mark)
10064         {
10065           /* This section was omitted from the link.  */
10066           continue;
10067         }
10068
10069       if (bfd_link_relocatable (flinfo->info)
10070           && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
10071         {
10072           /* Deal with the group signature symbol.  */
10073           struct bfd_elf_section_data *sec_data = elf_section_data (o);
10074           unsigned long symndx = sec_data->this_hdr.sh_info;
10075           asection *osec = o->output_section;
10076
10077           if (symndx >= locsymcount
10078               || (elf_bad_symtab (input_bfd)
10079                   && flinfo->sections[symndx] == NULL))
10080             {
10081               struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
10082               while (h->root.type == bfd_link_hash_indirect
10083                      || h->root.type == bfd_link_hash_warning)
10084                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
10085               /* Arrange for symbol to be output.  */
10086               h->indx = -2;
10087               elf_section_data (osec)->this_hdr.sh_info = -2;
10088             }
10089           else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
10090             {
10091               /* We'll use the output section target_index.  */
10092               asection *sec = flinfo->sections[symndx]->output_section;
10093               elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
10094             }
10095           else
10096             {
10097               if (flinfo->indices[symndx] == -1)
10098                 {
10099                   /* Otherwise output the local symbol now.  */
10100                   Elf_Internal_Sym sym = isymbuf[symndx];
10101                   asection *sec = flinfo->sections[symndx]->output_section;
10102                   const char *name;
10103                   long indx;
10104                   int ret;
10105
10106                   name = bfd_elf_string_from_elf_section (input_bfd,
10107                                                           symtab_hdr->sh_link,
10108                                                           sym.st_name);
10109                   if (name == NULL)
10110                     return FALSE;
10111
10112                   sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
10113                                                                     sec);
10114                   if (sym.st_shndx == SHN_BAD)
10115                     return FALSE;
10116
10117                   sym.st_value += o->output_offset;
10118
10119                   indx = bfd_get_symcount (output_bfd);
10120                   ret = elf_link_output_symstrtab (flinfo, name, &sym, o,
10121                                                    NULL);
10122                   if (ret == 0)
10123                     return FALSE;
10124                   else if (ret == 1)
10125                     flinfo->indices[symndx] = indx;
10126                   else
10127                     abort ();
10128                 }
10129               elf_section_data (osec)->this_hdr.sh_info
10130                 = flinfo->indices[symndx];
10131             }
10132         }
10133
10134       if ((o->flags & SEC_HAS_CONTENTS) == 0
10135           || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
10136         continue;
10137
10138       if ((o->flags & SEC_LINKER_CREATED) != 0)
10139         {
10140           /* Section was created by _bfd_elf_link_create_dynamic_sections
10141              or somesuch.  */
10142           continue;
10143         }
10144
10145       /* Get the contents of the section.  They have been cached by a
10146          relaxation routine.  Note that o is a section in an input
10147          file, so the contents field will not have been set by any of
10148          the routines which work on output files.  */
10149       if (elf_section_data (o)->this_hdr.contents != NULL)
10150         {
10151           contents = elf_section_data (o)->this_hdr.contents;
10152           if (bed->caches_rawsize
10153               && o->rawsize != 0
10154               && o->rawsize < o->size)
10155             {
10156               memcpy (flinfo->contents, contents, o->rawsize);
10157               contents = flinfo->contents;
10158             }
10159         }
10160       else
10161         {
10162           contents = flinfo->contents;
10163           if (! bfd_get_full_section_contents (input_bfd, o, &contents))
10164             return FALSE;
10165         }
10166
10167       if ((o->flags & SEC_RELOC) != 0)
10168         {
10169           Elf_Internal_Rela *internal_relocs;
10170           Elf_Internal_Rela *rel, *relend;
10171           int action_discarded;
10172           int ret;
10173
10174           /* Get the swapped relocs.  */
10175           internal_relocs
10176             = _bfd_elf_link_read_relocs (input_bfd, o, flinfo->external_relocs,
10177                                          flinfo->internal_relocs, FALSE);
10178           if (internal_relocs == NULL
10179               && o->reloc_count > 0)
10180             return FALSE;
10181
10182           /* We need to reverse-copy input .ctors/.dtors sections if
10183              they are placed in .init_array/.finit_array for output.  */
10184           if (o->size > address_size
10185               && ((strncmp (o->name, ".ctors", 6) == 0
10186                    && strcmp (o->output_section->name,
10187                               ".init_array") == 0)
10188                   || (strncmp (o->name, ".dtors", 6) == 0
10189                       && strcmp (o->output_section->name,
10190                                  ".fini_array") == 0))
10191               && (o->name[6] == 0 || o->name[6] == '.'))
10192             {
10193               if (o->size != o->reloc_count * address_size)
10194                 {
10195                   _bfd_error_handler
10196                     (_("error: %B: size of section %A is not "
10197                        "multiple of address size"),
10198                      input_bfd, o);
10199                   bfd_set_error (bfd_error_on_input);
10200                   return FALSE;
10201                 }
10202               o->flags |= SEC_ELF_REVERSE_COPY;
10203             }
10204
10205           action_discarded = -1;
10206           if (!elf_section_ignore_discarded_relocs (o))
10207             action_discarded = (*bed->action_discarded) (o);
10208
10209           /* Run through the relocs evaluating complex reloc symbols and
10210              looking for relocs against symbols from discarded sections
10211              or section symbols from removed link-once sections.
10212              Complain about relocs against discarded sections.  Zero
10213              relocs against removed link-once sections.  */
10214
10215           rel = internal_relocs;
10216           relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
10217           for ( ; rel < relend; rel++)
10218             {
10219               unsigned long r_symndx = rel->r_info >> r_sym_shift;
10220               unsigned int s_type;
10221               asection **ps, *sec;
10222               struct elf_link_hash_entry *h = NULL;
10223               const char *sym_name;
10224
10225               if (r_symndx == STN_UNDEF)
10226                 continue;
10227
10228               if (r_symndx >= locsymcount
10229                   || (elf_bad_symtab (input_bfd)
10230                       && flinfo->sections[r_symndx] == NULL))
10231                 {
10232                   h = sym_hashes[r_symndx - extsymoff];
10233
10234                   /* Badly formatted input files can contain relocs that
10235                      reference non-existant symbols.  Check here so that
10236                      we do not seg fault.  */
10237                   if (h == NULL)
10238                     {
10239                       char buffer [32];
10240
10241                       sprintf_vma (buffer, rel->r_info);
10242                       _bfd_error_handler
10243                         (_("error: %B contains a reloc (0x%s) for section %A "
10244                            "that references a non-existent global symbol"),
10245                          input_bfd, o, buffer);
10246                       bfd_set_error (bfd_error_bad_value);
10247                       return FALSE;
10248                     }
10249
10250                   while (h->root.type == bfd_link_hash_indirect
10251                          || h->root.type == bfd_link_hash_warning)
10252                     h = (struct elf_link_hash_entry *) h->root.u.i.link;
10253
10254                   s_type = h->type;
10255
10256                   /* If a plugin symbol is referenced from a non-IR file,
10257                      mark the symbol as undefined.  Note that the
10258                      linker may attach linker created dynamic sections
10259                      to the plugin bfd.  Symbols defined in linker
10260                      created sections are not plugin symbols.  */
10261                   if (h->root.non_ir_ref
10262                       && (h->root.type == bfd_link_hash_defined
10263                           || h->root.type == bfd_link_hash_defweak)
10264                       && (h->root.u.def.section->flags
10265                           & SEC_LINKER_CREATED) == 0
10266                       && h->root.u.def.section->owner != NULL
10267                       && (h->root.u.def.section->owner->flags
10268                           & BFD_PLUGIN) != 0)
10269                     {
10270                       h->root.type = bfd_link_hash_undefined;
10271                       h->root.u.undef.abfd = h->root.u.def.section->owner;
10272                     }
10273
10274                   ps = NULL;
10275                   if (h->root.type == bfd_link_hash_defined
10276                       || h->root.type == bfd_link_hash_defweak)
10277                     ps = &h->root.u.def.section;
10278
10279                   sym_name = h->root.root.string;
10280                 }
10281               else
10282                 {
10283                   Elf_Internal_Sym *sym = isymbuf + r_symndx;
10284
10285                   s_type = ELF_ST_TYPE (sym->st_info);
10286                   ps = &flinfo->sections[r_symndx];
10287                   sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10288                                                sym, *ps);
10289                 }
10290
10291               if ((s_type == STT_RELC || s_type == STT_SRELC)
10292                   && !bfd_link_relocatable (flinfo->info))
10293                 {
10294                   bfd_vma val;
10295                   bfd_vma dot = (rel->r_offset
10296                                  + o->output_offset + o->output_section->vma);
10297 #ifdef DEBUG
10298                   printf ("Encountered a complex symbol!");
10299                   printf (" (input_bfd %s, section %s, reloc %ld\n",
10300                           input_bfd->filename, o->name,
10301                           (long) (rel - internal_relocs));
10302                   printf (" symbol: idx  %8.8lx, name %s\n",
10303                           r_symndx, sym_name);
10304                   printf (" reloc : info %8.8lx, addr %8.8lx\n",
10305                           (unsigned long) rel->r_info,
10306                           (unsigned long) rel->r_offset);
10307 #endif
10308                   if (!eval_symbol (&val, &sym_name, input_bfd, flinfo, dot,
10309                                     isymbuf, locsymcount, s_type == STT_SRELC))
10310                     return FALSE;
10311
10312                   /* Symbol evaluated OK.  Update to absolute value.  */
10313                   set_symbol_value (input_bfd, isymbuf, locsymcount,
10314                                     r_symndx, val);
10315                   continue;
10316                 }
10317
10318               if (action_discarded != -1 && ps != NULL)
10319                 {
10320                   /* Complain if the definition comes from a
10321                      discarded section.  */
10322                   if ((sec = *ps) != NULL && discarded_section (sec))
10323                     {
10324                       BFD_ASSERT (r_symndx != STN_UNDEF);
10325                       if (action_discarded & COMPLAIN)
10326                         (*flinfo->info->callbacks->einfo)
10327                           (_("%X`%s' referenced in section `%A' of %B: "
10328                              "defined in discarded section `%A' of %B\n"),
10329                            sym_name, o, input_bfd, sec, sec->owner);
10330
10331                       /* Try to do the best we can to support buggy old
10332                          versions of gcc.  Pretend that the symbol is
10333                          really defined in the kept linkonce section.
10334                          FIXME: This is quite broken.  Modifying the
10335                          symbol here means we will be changing all later
10336                          uses of the symbol, not just in this section.  */
10337                       if (action_discarded & PRETEND)
10338                         {
10339                           asection *kept;
10340
10341                           kept = _bfd_elf_check_kept_section (sec,
10342                                                               flinfo->info);
10343                           if (kept != NULL)
10344                             {
10345                               *ps = kept;
10346                               continue;
10347                             }
10348                         }
10349                     }
10350                 }
10351             }
10352
10353           /* Relocate the section by invoking a back end routine.
10354
10355              The back end routine is responsible for adjusting the
10356              section contents as necessary, and (if using Rela relocs
10357              and generating a relocatable output file) adjusting the
10358              reloc addend as necessary.
10359
10360              The back end routine does not have to worry about setting
10361              the reloc address or the reloc symbol index.
10362
10363              The back end routine is given a pointer to the swapped in
10364              internal symbols, and can access the hash table entries
10365              for the external symbols via elf_sym_hashes (input_bfd).
10366
10367              When generating relocatable output, the back end routine
10368              must handle STB_LOCAL/STT_SECTION symbols specially.  The
10369              output symbol is going to be a section symbol
10370              corresponding to the output section, which will require
10371              the addend to be adjusted.  */
10372
10373           ret = (*relocate_section) (output_bfd, flinfo->info,
10374                                      input_bfd, o, contents,
10375                                      internal_relocs,
10376                                      isymbuf,
10377                                      flinfo->sections);
10378           if (!ret)
10379             return FALSE;
10380
10381           if (ret == 2
10382               || bfd_link_relocatable (flinfo->info)
10383               || flinfo->info->emitrelocations)
10384             {
10385               Elf_Internal_Rela *irela;
10386               Elf_Internal_Rela *irelaend, *irelamid;
10387               bfd_vma last_offset;
10388               struct elf_link_hash_entry **rel_hash;
10389               struct elf_link_hash_entry **rel_hash_list, **rela_hash_list;
10390               Elf_Internal_Shdr *input_rel_hdr, *input_rela_hdr;
10391               unsigned int next_erel;
10392               bfd_boolean rela_normal;
10393               struct bfd_elf_section_data *esdi, *esdo;
10394
10395               esdi = elf_section_data (o);
10396               esdo = elf_section_data (o->output_section);
10397               rela_normal = FALSE;
10398
10399               /* Adjust the reloc addresses and symbol indices.  */
10400
10401               irela = internal_relocs;
10402               irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
10403               rel_hash = esdo->rel.hashes + esdo->rel.count;
10404               /* We start processing the REL relocs, if any.  When we reach
10405                  IRELAMID in the loop, we switch to the RELA relocs.  */
10406               irelamid = irela;
10407               if (esdi->rel.hdr != NULL)
10408                 irelamid += (NUM_SHDR_ENTRIES (esdi->rel.hdr)
10409                              * bed->s->int_rels_per_ext_rel);
10410               rel_hash_list = rel_hash;
10411               rela_hash_list = NULL;
10412               last_offset = o->output_offset;
10413               if (!bfd_link_relocatable (flinfo->info))
10414                 last_offset += o->output_section->vma;
10415               for (next_erel = 0; irela < irelaend; irela++, next_erel++)
10416                 {
10417                   unsigned long r_symndx;
10418                   asection *sec;
10419                   Elf_Internal_Sym sym;
10420
10421                   if (next_erel == bed->s->int_rels_per_ext_rel)
10422                     {
10423                       rel_hash++;
10424                       next_erel = 0;
10425                     }
10426
10427                   if (irela == irelamid)
10428                     {
10429                       rel_hash = esdo->rela.hashes + esdo->rela.count;
10430                       rela_hash_list = rel_hash;
10431                       rela_normal = bed->rela_normal;
10432                     }
10433
10434                   irela->r_offset = _bfd_elf_section_offset (output_bfd,
10435                                                              flinfo->info, o,
10436                                                              irela->r_offset);
10437                   if (irela->r_offset >= (bfd_vma) -2)
10438                     {
10439                       /* This is a reloc for a deleted entry or somesuch.
10440                          Turn it into an R_*_NONE reloc, at the same
10441                          offset as the last reloc.  elf_eh_frame.c and
10442                          bfd_elf_discard_info rely on reloc offsets
10443                          being ordered.  */
10444                       irela->r_offset = last_offset;
10445                       irela->r_info = 0;
10446                       irela->r_addend = 0;
10447                       continue;
10448                     }
10449
10450                   irela->r_offset += o->output_offset;
10451
10452                   /* Relocs in an executable have to be virtual addresses.  */
10453                   if (!bfd_link_relocatable (flinfo->info))
10454                     irela->r_offset += o->output_section->vma;
10455
10456                   last_offset = irela->r_offset;
10457
10458                   r_symndx = irela->r_info >> r_sym_shift;
10459                   if (r_symndx == STN_UNDEF)
10460                     continue;
10461
10462                   if (r_symndx >= locsymcount
10463                       || (elf_bad_symtab (input_bfd)
10464                           && flinfo->sections[r_symndx] == NULL))
10465                     {
10466                       struct elf_link_hash_entry *rh;
10467                       unsigned long indx;
10468
10469                       /* This is a reloc against a global symbol.  We
10470                          have not yet output all the local symbols, so
10471                          we do not know the symbol index of any global
10472                          symbol.  We set the rel_hash entry for this
10473                          reloc to point to the global hash table entry
10474                          for this symbol.  The symbol index is then
10475                          set at the end of bfd_elf_final_link.  */
10476                       indx = r_symndx - extsymoff;
10477                       rh = elf_sym_hashes (input_bfd)[indx];
10478                       while (rh->root.type == bfd_link_hash_indirect
10479                              || rh->root.type == bfd_link_hash_warning)
10480                         rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
10481
10482                       /* Setting the index to -2 tells
10483                          elf_link_output_extsym that this symbol is
10484                          used by a reloc.  */
10485                       BFD_ASSERT (rh->indx < 0);
10486                       rh->indx = -2;
10487
10488                       *rel_hash = rh;
10489
10490                       continue;
10491                     }
10492
10493                   /* This is a reloc against a local symbol.  */
10494
10495                   *rel_hash = NULL;
10496                   sym = isymbuf[r_symndx];
10497                   sec = flinfo->sections[r_symndx];
10498                   if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
10499                     {
10500                       /* I suppose the backend ought to fill in the
10501                          section of any STT_SECTION symbol against a
10502                          processor specific section.  */
10503                       r_symndx = STN_UNDEF;
10504                       if (bfd_is_abs_section (sec))
10505                         ;
10506                       else if (sec == NULL || sec->owner == NULL)
10507                         {
10508                           bfd_set_error (bfd_error_bad_value);
10509                           return FALSE;
10510                         }
10511                       else
10512                         {
10513                           asection *osec = sec->output_section;
10514
10515                           /* If we have discarded a section, the output
10516                              section will be the absolute section.  In
10517                              case of discarded SEC_MERGE sections, use
10518                              the kept section.  relocate_section should
10519                              have already handled discarded linkonce
10520                              sections.  */
10521                           if (bfd_is_abs_section (osec)
10522                               && sec->kept_section != NULL
10523                               && sec->kept_section->output_section != NULL)
10524                             {
10525                               osec = sec->kept_section->output_section;
10526                               irela->r_addend -= osec->vma;
10527                             }
10528
10529                           if (!bfd_is_abs_section (osec))
10530                             {
10531                               r_symndx = osec->target_index;
10532                               if (r_symndx == STN_UNDEF)
10533                                 {
10534                                   irela->r_addend += osec->vma;
10535                                   osec = _bfd_nearby_section (output_bfd, osec,
10536                                                               osec->vma);
10537                                   irela->r_addend -= osec->vma;
10538                                   r_symndx = osec->target_index;
10539                                 }
10540                             }
10541                         }
10542
10543                       /* Adjust the addend according to where the
10544                          section winds up in the output section.  */
10545                       if (rela_normal)
10546                         irela->r_addend += sec->output_offset;
10547                     }
10548                   else
10549                     {
10550                       if (flinfo->indices[r_symndx] == -1)
10551                         {
10552                           unsigned long shlink;
10553                           const char *name;
10554                           asection *osec;
10555                           long indx;
10556
10557                           if (flinfo->info->strip == strip_all)
10558                             {
10559                               /* You can't do ld -r -s.  */
10560                               bfd_set_error (bfd_error_invalid_operation);
10561                               return FALSE;
10562                             }
10563
10564                           /* This symbol was skipped earlier, but
10565                              since it is needed by a reloc, we
10566                              must output it now.  */
10567                           shlink = symtab_hdr->sh_link;
10568                           name = (bfd_elf_string_from_elf_section
10569                                   (input_bfd, shlink, sym.st_name));
10570                           if (name == NULL)
10571                             return FALSE;
10572
10573                           osec = sec->output_section;
10574                           sym.st_shndx =
10575                             _bfd_elf_section_from_bfd_section (output_bfd,
10576                                                                osec);
10577                           if (sym.st_shndx == SHN_BAD)
10578                             return FALSE;
10579
10580                           sym.st_value += sec->output_offset;
10581                           if (!bfd_link_relocatable (flinfo->info))
10582                             {
10583                               sym.st_value += osec->vma;
10584                               if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
10585                                 {
10586                                   /* STT_TLS symbols are relative to PT_TLS
10587                                      segment base.  */
10588                                   BFD_ASSERT (elf_hash_table (flinfo->info)
10589                                               ->tls_sec != NULL);
10590                                   sym.st_value -= (elf_hash_table (flinfo->info)
10591                                                    ->tls_sec->vma);
10592                                 }
10593                             }
10594
10595                           indx = bfd_get_symcount (output_bfd);
10596                           ret = elf_link_output_symstrtab (flinfo, name,
10597                                                            &sym, sec,
10598                                                            NULL);
10599                           if (ret == 0)
10600                             return FALSE;
10601                           else if (ret == 1)
10602                             flinfo->indices[r_symndx] = indx;
10603                           else
10604                             abort ();
10605                         }
10606
10607                       r_symndx = flinfo->indices[r_symndx];
10608                     }
10609
10610                   irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
10611                                    | (irela->r_info & r_type_mask));
10612                 }
10613
10614               /* Swap out the relocs.  */
10615               input_rel_hdr = esdi->rel.hdr;
10616               if (input_rel_hdr && input_rel_hdr->sh_size != 0)
10617                 {
10618                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
10619                                                      input_rel_hdr,
10620                                                      internal_relocs,
10621                                                      rel_hash_list))
10622                     return FALSE;
10623                   internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
10624                                       * bed->s->int_rels_per_ext_rel);
10625                   rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
10626                 }
10627
10628               input_rela_hdr = esdi->rela.hdr;
10629               if (input_rela_hdr && input_rela_hdr->sh_size != 0)
10630                 {
10631                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
10632                                                      input_rela_hdr,
10633                                                      internal_relocs,
10634                                                      rela_hash_list))
10635                     return FALSE;
10636                 }
10637             }
10638         }
10639
10640       /* Write out the modified section contents.  */
10641       if (bed->elf_backend_write_section
10642           && (*bed->elf_backend_write_section) (output_bfd, flinfo->info, o,
10643                                                 contents))
10644         {
10645           /* Section written out.  */
10646         }
10647       else switch (o->sec_info_type)
10648         {
10649         case SEC_INFO_TYPE_STABS:
10650           if (! (_bfd_write_section_stabs
10651                  (output_bfd,
10652                   &elf_hash_table (flinfo->info)->stab_info,
10653                   o, &elf_section_data (o)->sec_info, contents)))
10654             return FALSE;
10655           break;
10656         case SEC_INFO_TYPE_MERGE:
10657           if (! _bfd_write_merged_section (output_bfd, o,
10658                                            elf_section_data (o)->sec_info))
10659             return FALSE;
10660           break;
10661         case SEC_INFO_TYPE_EH_FRAME:
10662           {
10663             if (! _bfd_elf_write_section_eh_frame (output_bfd, flinfo->info,
10664                                                    o, contents))
10665               return FALSE;
10666           }
10667           break;
10668         case SEC_INFO_TYPE_EH_FRAME_ENTRY:
10669           {
10670             if (! _bfd_elf_write_section_eh_frame_entry (output_bfd,
10671                                                          flinfo->info,
10672                                                          o, contents))
10673               return FALSE;
10674           }
10675           break;
10676         default:
10677           {
10678             if (! (o->flags & SEC_EXCLUDE))
10679               {
10680                 file_ptr offset = (file_ptr) o->output_offset;
10681                 bfd_size_type todo = o->size;
10682
10683                 offset *= bfd_octets_per_byte (output_bfd);
10684
10685                 if ((o->flags & SEC_ELF_REVERSE_COPY))
10686                   {
10687                     /* Reverse-copy input section to output.  */
10688                     do
10689                       {
10690                         todo -= address_size;
10691                         if (! bfd_set_section_contents (output_bfd,
10692                                                         o->output_section,
10693                                                         contents + todo,
10694                                                         offset,
10695                                                         address_size))
10696                           return FALSE;
10697                         if (todo == 0)
10698                           break;
10699                         offset += address_size;
10700                       }
10701                     while (1);
10702                   }
10703                 else if (! bfd_set_section_contents (output_bfd,
10704                                                      o->output_section,
10705                                                      contents,
10706                                                      offset, todo))
10707                   return FALSE;
10708               }
10709           }
10710           break;
10711         }
10712     }
10713
10714   return TRUE;
10715 }
10716
10717 /* Generate a reloc when linking an ELF file.  This is a reloc
10718    requested by the linker, and does not come from any input file.  This
10719    is used to build constructor and destructor tables when linking
10720    with -Ur.  */
10721
10722 static bfd_boolean
10723 elf_reloc_link_order (bfd *output_bfd,
10724                       struct bfd_link_info *info,
10725                       asection *output_section,
10726                       struct bfd_link_order *link_order)
10727 {
10728   reloc_howto_type *howto;
10729   long indx;
10730   bfd_vma offset;
10731   bfd_vma addend;
10732   struct bfd_elf_section_reloc_data *reldata;
10733   struct elf_link_hash_entry **rel_hash_ptr;
10734   Elf_Internal_Shdr *rel_hdr;
10735   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10736   Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
10737   bfd_byte *erel;
10738   unsigned int i;
10739   struct bfd_elf_section_data *esdo = elf_section_data (output_section);
10740
10741   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
10742   if (howto == NULL)
10743     {
10744       bfd_set_error (bfd_error_bad_value);
10745       return FALSE;
10746     }
10747
10748   addend = link_order->u.reloc.p->addend;
10749
10750   if (esdo->rel.hdr)
10751     reldata = &esdo->rel;
10752   else if (esdo->rela.hdr)
10753     reldata = &esdo->rela;
10754   else
10755     {
10756       reldata = NULL;
10757       BFD_ASSERT (0);
10758     }
10759
10760   /* Figure out the symbol index.  */
10761   rel_hash_ptr = reldata->hashes + reldata->count;
10762   if (link_order->type == bfd_section_reloc_link_order)
10763     {
10764       indx = link_order->u.reloc.p->u.section->target_index;
10765       BFD_ASSERT (indx != 0);
10766       *rel_hash_ptr = NULL;
10767     }
10768   else
10769     {
10770       struct elf_link_hash_entry *h;
10771
10772       /* Treat a reloc against a defined symbol as though it were
10773          actually against the section.  */
10774       h = ((struct elf_link_hash_entry *)
10775            bfd_wrapped_link_hash_lookup (output_bfd, info,
10776                                          link_order->u.reloc.p->u.name,
10777                                          FALSE, FALSE, TRUE));
10778       if (h != NULL
10779           && (h->root.type == bfd_link_hash_defined
10780               || h->root.type == bfd_link_hash_defweak))
10781         {
10782           asection *section;
10783
10784           section = h->root.u.def.section;
10785           indx = section->output_section->target_index;
10786           *rel_hash_ptr = NULL;
10787           /* It seems that we ought to add the symbol value to the
10788              addend here, but in practice it has already been added
10789              because it was passed to constructor_callback.  */
10790           addend += section->output_section->vma + section->output_offset;
10791         }
10792       else if (h != NULL)
10793         {
10794           /* Setting the index to -2 tells elf_link_output_extsym that
10795              this symbol is used by a reloc.  */
10796           h->indx = -2;
10797           *rel_hash_ptr = h;
10798           indx = 0;
10799         }
10800       else
10801         {
10802           (*info->callbacks->unattached_reloc)
10803             (info, link_order->u.reloc.p->u.name, NULL, NULL, 0);
10804           indx = 0;
10805         }
10806     }
10807
10808   /* If this is an inplace reloc, we must write the addend into the
10809      object file.  */
10810   if (howto->partial_inplace && addend != 0)
10811     {
10812       bfd_size_type size;
10813       bfd_reloc_status_type rstat;
10814       bfd_byte *buf;
10815       bfd_boolean ok;
10816       const char *sym_name;
10817
10818       size = (bfd_size_type) bfd_get_reloc_size (howto);
10819       buf = (bfd_byte *) bfd_zmalloc (size);
10820       if (buf == NULL && size != 0)
10821         return FALSE;
10822       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
10823       switch (rstat)
10824         {
10825         case bfd_reloc_ok:
10826           break;
10827
10828         default:
10829         case bfd_reloc_outofrange:
10830           abort ();
10831
10832         case bfd_reloc_overflow:
10833           if (link_order->type == bfd_section_reloc_link_order)
10834             sym_name = bfd_section_name (output_bfd,
10835                                          link_order->u.reloc.p->u.section);
10836           else
10837             sym_name = link_order->u.reloc.p->u.name;
10838           (*info->callbacks->reloc_overflow) (info, NULL, sym_name,
10839                                               howto->name, addend, NULL, NULL,
10840                                               (bfd_vma) 0);
10841           break;
10842         }
10843
10844       ok = bfd_set_section_contents (output_bfd, output_section, buf,
10845                                      link_order->offset
10846                                      * bfd_octets_per_byte (output_bfd),
10847                                      size);
10848       free (buf);
10849       if (! ok)
10850         return FALSE;
10851     }
10852
10853   /* The address of a reloc is relative to the section in a
10854      relocatable file, and is a virtual address in an executable
10855      file.  */
10856   offset = link_order->offset;
10857   if (! bfd_link_relocatable (info))
10858     offset += output_section->vma;
10859
10860   for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
10861     {
10862       irel[i].r_offset = offset;
10863       irel[i].r_info = 0;
10864       irel[i].r_addend = 0;
10865     }
10866   if (bed->s->arch_size == 32)
10867     irel[0].r_info = ELF32_R_INFO (indx, howto->type);
10868   else
10869     irel[0].r_info = ELF64_R_INFO (indx, howto->type);
10870
10871   rel_hdr = reldata->hdr;
10872   erel = rel_hdr->contents;
10873   if (rel_hdr->sh_type == SHT_REL)
10874     {
10875       erel += reldata->count * bed->s->sizeof_rel;
10876       (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
10877     }
10878   else
10879     {
10880       irel[0].r_addend = addend;
10881       erel += reldata->count * bed->s->sizeof_rela;
10882       (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
10883     }
10884
10885   ++reldata->count;
10886
10887   return TRUE;
10888 }
10889
10890
10891 /* Get the output vma of the section pointed to by the sh_link field.  */
10892
10893 static bfd_vma
10894 elf_get_linked_section_vma (struct bfd_link_order *p)
10895 {
10896   Elf_Internal_Shdr **elf_shdrp;
10897   asection *s;
10898   int elfsec;
10899
10900   s = p->u.indirect.section;
10901   elf_shdrp = elf_elfsections (s->owner);
10902   elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
10903   elfsec = elf_shdrp[elfsec]->sh_link;
10904   /* PR 290:
10905      The Intel C compiler generates SHT_IA_64_UNWIND with
10906      SHF_LINK_ORDER.  But it doesn't set the sh_link or
10907      sh_info fields.  Hence we could get the situation
10908      where elfsec is 0.  */
10909   if (elfsec == 0)
10910     {
10911       const struct elf_backend_data *bed
10912         = get_elf_backend_data (s->owner);
10913       if (bed->link_order_error_handler)
10914         bed->link_order_error_handler
10915           (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
10916       return 0;
10917     }
10918   else
10919     {
10920       s = elf_shdrp[elfsec]->bfd_section;
10921       return s->output_section->vma + s->output_offset;
10922     }
10923 }
10924
10925
10926 /* Compare two sections based on the locations of the sections they are
10927    linked to.  Used by elf_fixup_link_order.  */
10928
10929 static int
10930 compare_link_order (const void * a, const void * b)
10931 {
10932   bfd_vma apos;
10933   bfd_vma bpos;
10934
10935   apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
10936   bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
10937   if (apos < bpos)
10938     return -1;
10939   return apos > bpos;
10940 }
10941
10942
10943 /* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
10944    order as their linked sections.  Returns false if this could not be done
10945    because an output section includes both ordered and unordered
10946    sections.  Ideally we'd do this in the linker proper.  */
10947
10948 static bfd_boolean
10949 elf_fixup_link_order (bfd *abfd, asection *o)
10950 {
10951   int seen_linkorder;
10952   int seen_other;
10953   int n;
10954   struct bfd_link_order *p;
10955   bfd *sub;
10956   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10957   unsigned elfsec;
10958   struct bfd_link_order **sections;
10959   asection *s, *other_sec, *linkorder_sec;
10960   bfd_vma offset;
10961
10962   other_sec = NULL;
10963   linkorder_sec = NULL;
10964   seen_other = 0;
10965   seen_linkorder = 0;
10966   for (p = o->map_head.link_order; p != NULL; p = p->next)
10967     {
10968       if (p->type == bfd_indirect_link_order)
10969         {
10970           s = p->u.indirect.section;
10971           sub = s->owner;
10972           if (bfd_get_flavour (sub) == bfd_target_elf_flavour
10973               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
10974               && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
10975               && elfsec < elf_numsections (sub)
10976               && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER
10977               && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub))
10978             {
10979               seen_linkorder++;
10980               linkorder_sec = s;
10981             }
10982           else
10983             {
10984               seen_other++;
10985               other_sec = s;
10986             }
10987         }
10988       else
10989         seen_other++;
10990
10991       if (seen_other && seen_linkorder)
10992         {
10993           if (other_sec && linkorder_sec)
10994             _bfd_error_handler
10995               (_("%A has both ordered [`%A' in %B] "
10996                  "and unordered [`%A' in %B] sections"),
10997                o, linkorder_sec,
10998                linkorder_sec->owner, other_sec,
10999                other_sec->owner);
11000           else
11001             _bfd_error_handler
11002               (_("%A has both ordered and unordered sections"), o);
11003           bfd_set_error (bfd_error_bad_value);
11004           return FALSE;
11005         }
11006     }
11007
11008   if (!seen_linkorder)
11009     return TRUE;
11010
11011   sections = (struct bfd_link_order **)
11012     bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *));
11013   if (sections == NULL)
11014     return FALSE;
11015   seen_linkorder = 0;
11016
11017   for (p = o->map_head.link_order; p != NULL; p = p->next)
11018     {
11019       sections[seen_linkorder++] = p;
11020     }
11021   /* Sort the input sections in the order of their linked section.  */
11022   qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
11023          compare_link_order);
11024
11025   /* Change the offsets of the sections.  */
11026   offset = 0;
11027   for (n = 0; n < seen_linkorder; n++)
11028     {
11029       s = sections[n]->u.indirect.section;
11030       offset &= ~(bfd_vma) 0 << s->alignment_power;
11031       s->output_offset = offset / bfd_octets_per_byte (abfd);
11032       sections[n]->offset = offset;
11033       offset += sections[n]->size;
11034     }
11035
11036   free (sections);
11037   return TRUE;
11038 }
11039
11040 /* Generate an import library in INFO->implib_bfd from symbols in ABFD.
11041    Returns TRUE upon success, FALSE otherwise.  */
11042
11043 static bfd_boolean
11044 elf_output_implib (bfd *abfd, struct bfd_link_info *info)
11045 {
11046   bfd_boolean ret = FALSE;
11047   bfd *implib_bfd;
11048   const struct elf_backend_data *bed;
11049   flagword flags;
11050   enum bfd_architecture arch;
11051   unsigned int mach;
11052   asymbol **sympp = NULL;
11053   long symsize;
11054   long symcount;
11055   long src_count;
11056   elf_symbol_type *osymbuf;
11057
11058   implib_bfd = info->out_implib_bfd;
11059   bed = get_elf_backend_data (abfd);
11060
11061   if (!bfd_set_format (implib_bfd, bfd_object))
11062     return FALSE;
11063
11064   flags = bfd_get_file_flags (abfd);
11065   flags &= ~HAS_RELOC;
11066   if (!bfd_set_start_address (implib_bfd, 0)
11067       || !bfd_set_file_flags (implib_bfd, flags))
11068     return FALSE;
11069
11070   /* Copy architecture of output file to import library file.  */
11071   arch = bfd_get_arch (abfd);
11072   mach = bfd_get_mach (abfd);
11073   if (!bfd_set_arch_mach (implib_bfd, arch, mach)
11074       && (abfd->target_defaulted
11075           || bfd_get_arch (abfd) != bfd_get_arch (implib_bfd)))
11076     return FALSE;
11077
11078   /* Get symbol table size.  */
11079   symsize = bfd_get_symtab_upper_bound (abfd);
11080   if (symsize < 0)
11081     return FALSE;
11082
11083   /* Read in the symbol table.  */
11084   sympp = (asymbol **) xmalloc (symsize);
11085   symcount = bfd_canonicalize_symtab (abfd, sympp);
11086   if (symcount < 0)
11087     goto free_sym_buf;
11088
11089   /* Allow the BFD backend to copy any private header data it
11090      understands from the output BFD to the import library BFD.  */
11091   if (! bfd_copy_private_header_data (abfd, implib_bfd))
11092     goto free_sym_buf;
11093
11094   /* Filter symbols to appear in the import library.  */
11095   if (bed->elf_backend_filter_implib_symbols)
11096     symcount = bed->elf_backend_filter_implib_symbols (abfd, info, sympp,
11097                                                        symcount);
11098   else
11099     symcount = _bfd_elf_filter_global_symbols (abfd, info, sympp, symcount);
11100   if (symcount == 0)
11101     {
11102       bfd_set_error (bfd_error_no_symbols);
11103       _bfd_error_handler (_("%B: no symbol found for import library"),
11104                           implib_bfd);
11105       goto free_sym_buf;
11106     }
11107
11108
11109   /* Make symbols absolute.  */
11110   osymbuf = (elf_symbol_type *) bfd_alloc2 (implib_bfd, symcount,
11111                                             sizeof (*osymbuf));
11112   for (src_count = 0; src_count < symcount; src_count++)
11113     {
11114       memcpy (&osymbuf[src_count], (elf_symbol_type *) sympp[src_count],
11115               sizeof (*osymbuf));
11116       osymbuf[src_count].symbol.section = bfd_abs_section_ptr;
11117       osymbuf[src_count].internal_elf_sym.st_shndx = SHN_ABS;
11118       osymbuf[src_count].symbol.value += sympp[src_count]->section->vma;
11119       osymbuf[src_count].internal_elf_sym.st_value =
11120         osymbuf[src_count].symbol.value;
11121       sympp[src_count] = &osymbuf[src_count].symbol;
11122     }
11123
11124   bfd_set_symtab (implib_bfd, sympp, symcount);
11125
11126   /* Allow the BFD backend to copy any private data it understands
11127      from the output BFD to the import library BFD.  This is done last
11128      to permit the routine to look at the filtered symbol table.  */
11129   if (! bfd_copy_private_bfd_data (abfd, implib_bfd))
11130     goto free_sym_buf;
11131
11132   if (!bfd_close (implib_bfd))
11133     goto free_sym_buf;
11134
11135   ret = TRUE;
11136
11137 free_sym_buf:
11138   free (sympp);
11139   return ret;
11140 }
11141
11142 static void
11143 elf_final_link_free (bfd *obfd, struct elf_final_link_info *flinfo)
11144 {
11145   asection *o;
11146
11147   if (flinfo->symstrtab != NULL)
11148     _bfd_elf_strtab_free (flinfo->symstrtab);
11149   if (flinfo->contents != NULL)
11150     free (flinfo->contents);
11151   if (flinfo->external_relocs != NULL)
11152     free (flinfo->external_relocs);
11153   if (flinfo->internal_relocs != NULL)
11154     free (flinfo->internal_relocs);
11155   if (flinfo->external_syms != NULL)
11156     free (flinfo->external_syms);
11157   if (flinfo->locsym_shndx != NULL)
11158     free (flinfo->locsym_shndx);
11159   if (flinfo->internal_syms != NULL)
11160     free (flinfo->internal_syms);
11161   if (flinfo->indices != NULL)
11162     free (flinfo->indices);
11163   if (flinfo->sections != NULL)
11164     free (flinfo->sections);
11165   if (flinfo->symshndxbuf != NULL)
11166     free (flinfo->symshndxbuf);
11167   for (o = obfd->sections; o != NULL; o = o->next)
11168     {
11169       struct bfd_elf_section_data *esdo = elf_section_data (o);
11170       if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL)
11171         free (esdo->rel.hashes);
11172       if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL)
11173         free (esdo->rela.hashes);
11174     }
11175 }
11176
11177 /* Do the final step of an ELF link.  */
11178
11179 bfd_boolean
11180 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
11181 {
11182   bfd_boolean dynamic;
11183   bfd_boolean emit_relocs;
11184   bfd *dynobj;
11185   struct elf_final_link_info flinfo;
11186   asection *o;
11187   struct bfd_link_order *p;
11188   bfd *sub;
11189   bfd_size_type max_contents_size;
11190   bfd_size_type max_external_reloc_size;
11191   bfd_size_type max_internal_reloc_count;
11192   bfd_size_type max_sym_count;
11193   bfd_size_type max_sym_shndx_count;
11194   Elf_Internal_Sym elfsym;
11195   unsigned int i;
11196   Elf_Internal_Shdr *symtab_hdr;
11197   Elf_Internal_Shdr *symtab_shndx_hdr;
11198   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11199   struct elf_outext_info eoinfo;
11200   bfd_boolean merged;
11201   size_t relativecount = 0;
11202   asection *reldyn = 0;
11203   bfd_size_type amt;
11204   asection *attr_section = NULL;
11205   bfd_vma attr_size = 0;
11206   const char *std_attrs_section;
11207
11208   if (! is_elf_hash_table (info->hash))
11209     return FALSE;
11210
11211   if (bfd_link_pic (info))
11212     abfd->flags |= DYNAMIC;
11213
11214   dynamic = elf_hash_table (info)->dynamic_sections_created;
11215   dynobj = elf_hash_table (info)->dynobj;
11216
11217   emit_relocs = (bfd_link_relocatable (info)
11218                  || info->emitrelocations);
11219
11220   flinfo.info = info;
11221   flinfo.output_bfd = abfd;
11222   flinfo.symstrtab = _bfd_elf_strtab_init ();
11223   if (flinfo.symstrtab == NULL)
11224     return FALSE;
11225
11226   if (! dynamic)
11227     {
11228       flinfo.hash_sec = NULL;
11229       flinfo.symver_sec = NULL;
11230     }
11231   else
11232     {
11233       flinfo.hash_sec = bfd_get_linker_section (dynobj, ".hash");
11234       /* Note that dynsym_sec can be NULL (on VMS).  */
11235       flinfo.symver_sec = bfd_get_linker_section (dynobj, ".gnu.version");
11236       /* Note that it is OK if symver_sec is NULL.  */
11237     }
11238
11239   flinfo.contents = NULL;
11240   flinfo.external_relocs = NULL;
11241   flinfo.internal_relocs = NULL;
11242   flinfo.external_syms = NULL;
11243   flinfo.locsym_shndx = NULL;
11244   flinfo.internal_syms = NULL;
11245   flinfo.indices = NULL;
11246   flinfo.sections = NULL;
11247   flinfo.symshndxbuf = NULL;
11248   flinfo.filesym_count = 0;
11249
11250   /* The object attributes have been merged.  Remove the input
11251      sections from the link, and set the contents of the output
11252      secton.  */
11253   std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
11254   for (o = abfd->sections; o != NULL; o = o->next)
11255     {
11256       if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
11257           || strcmp (o->name, ".gnu.attributes") == 0)
11258         {
11259           for (p = o->map_head.link_order; p != NULL; p = p->next)
11260             {
11261               asection *input_section;
11262
11263               if (p->type != bfd_indirect_link_order)
11264                 continue;
11265               input_section = p->u.indirect.section;
11266               /* Hack: reset the SEC_HAS_CONTENTS flag so that
11267                  elf_link_input_bfd ignores this section.  */
11268               input_section->flags &= ~SEC_HAS_CONTENTS;
11269             }
11270
11271           attr_size = bfd_elf_obj_attr_size (abfd);
11272           if (attr_size)
11273             {
11274               bfd_set_section_size (abfd, o, attr_size);
11275               attr_section = o;
11276               /* Skip this section later on.  */
11277               o->map_head.link_order = NULL;
11278             }
11279           else
11280             o->flags |= SEC_EXCLUDE;
11281         }
11282     }
11283
11284   /* Count up the number of relocations we will output for each output
11285      section, so that we know the sizes of the reloc sections.  We
11286      also figure out some maximum sizes.  */
11287   max_contents_size = 0;
11288   max_external_reloc_size = 0;
11289   max_internal_reloc_count = 0;
11290   max_sym_count = 0;
11291   max_sym_shndx_count = 0;
11292   merged = FALSE;
11293   for (o = abfd->sections; o != NULL; o = o->next)
11294     {
11295       struct bfd_elf_section_data *esdo = elf_section_data (o);
11296       o->reloc_count = 0;
11297
11298       for (p = o->map_head.link_order; p != NULL; p = p->next)
11299         {
11300           unsigned int reloc_count = 0;
11301           unsigned int additional_reloc_count = 0;
11302           struct bfd_elf_section_data *esdi = NULL;
11303
11304           if (p->type == bfd_section_reloc_link_order
11305               || p->type == bfd_symbol_reloc_link_order)
11306             reloc_count = 1;
11307           else if (p->type == bfd_indirect_link_order)
11308             {
11309               asection *sec;
11310
11311               sec = p->u.indirect.section;
11312               esdi = elf_section_data (sec);
11313
11314               /* Mark all sections which are to be included in the
11315                  link.  This will normally be every section.  We need
11316                  to do this so that we can identify any sections which
11317                  the linker has decided to not include.  */
11318               sec->linker_mark = TRUE;
11319
11320               if (sec->flags & SEC_MERGE)
11321                 merged = TRUE;
11322
11323               if (esdo->this_hdr.sh_type == SHT_REL
11324                   || esdo->this_hdr.sh_type == SHT_RELA)
11325                 /* Some backends use reloc_count in relocation sections
11326                    to count particular types of relocs.  Of course,
11327                    reloc sections themselves can't have relocations.  */
11328                 reloc_count = 0;
11329               else if (emit_relocs)
11330                 {
11331                   reloc_count = sec->reloc_count;
11332                   if (bed->elf_backend_count_additional_relocs)
11333                     {
11334                       int c;
11335                       c = (*bed->elf_backend_count_additional_relocs) (sec);
11336                       additional_reloc_count += c;
11337                     }
11338                 }
11339               else if (bed->elf_backend_count_relocs)
11340                 reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
11341
11342               if (sec->rawsize > max_contents_size)
11343                 max_contents_size = sec->rawsize;
11344               if (sec->size > max_contents_size)
11345                 max_contents_size = sec->size;
11346
11347               /* We are interested in just local symbols, not all
11348                  symbols.  */
11349               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
11350                   && (sec->owner->flags & DYNAMIC) == 0)
11351                 {
11352                   size_t sym_count;
11353
11354                   if (elf_bad_symtab (sec->owner))
11355                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
11356                                  / bed->s->sizeof_sym);
11357                   else
11358                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
11359
11360                   if (sym_count > max_sym_count)
11361                     max_sym_count = sym_count;
11362
11363                   if (sym_count > max_sym_shndx_count
11364                       && elf_symtab_shndx_list (sec->owner) != NULL)
11365                     max_sym_shndx_count = sym_count;
11366
11367                   if ((sec->flags & SEC_RELOC) != 0)
11368                     {
11369                       size_t ext_size = 0;
11370
11371                       if (esdi->rel.hdr != NULL)
11372                         ext_size = esdi->rel.hdr->sh_size;
11373                       if (esdi->rela.hdr != NULL)
11374                         ext_size += esdi->rela.hdr->sh_size;
11375
11376                       if (ext_size > max_external_reloc_size)
11377                         max_external_reloc_size = ext_size;
11378                       if (sec->reloc_count > max_internal_reloc_count)
11379                         max_internal_reloc_count = sec->reloc_count;
11380                     }
11381                 }
11382             }
11383
11384           if (reloc_count == 0)
11385             continue;
11386
11387           reloc_count += additional_reloc_count;
11388           o->reloc_count += reloc_count;
11389
11390           if (p->type == bfd_indirect_link_order && emit_relocs)
11391             {
11392               if (esdi->rel.hdr)
11393                 {
11394                   esdo->rel.count += NUM_SHDR_ENTRIES (esdi->rel.hdr);
11395                   esdo->rel.count += additional_reloc_count;
11396                 }
11397               if (esdi->rela.hdr)
11398                 {
11399                   esdo->rela.count += NUM_SHDR_ENTRIES (esdi->rela.hdr);
11400                   esdo->rela.count += additional_reloc_count;
11401                 }
11402             }
11403           else
11404             {
11405               if (o->use_rela_p)
11406                 esdo->rela.count += reloc_count;
11407               else
11408                 esdo->rel.count += reloc_count;
11409             }
11410         }
11411
11412       if (o->reloc_count > 0)
11413         o->flags |= SEC_RELOC;
11414       else
11415         {
11416           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
11417              set it (this is probably a bug) and if it is set
11418              assign_section_numbers will create a reloc section.  */
11419           o->flags &=~ SEC_RELOC;
11420         }
11421
11422       /* If the SEC_ALLOC flag is not set, force the section VMA to
11423          zero.  This is done in elf_fake_sections as well, but forcing
11424          the VMA to 0 here will ensure that relocs against these
11425          sections are handled correctly.  */
11426       if ((o->flags & SEC_ALLOC) == 0
11427           && ! o->user_set_vma)
11428         o->vma = 0;
11429     }
11430
11431   if (! bfd_link_relocatable (info) && merged)
11432     elf_link_hash_traverse (elf_hash_table (info),
11433                             _bfd_elf_link_sec_merge_syms, abfd);
11434
11435   /* Figure out the file positions for everything but the symbol table
11436      and the relocs.  We set symcount to force assign_section_numbers
11437      to create a symbol table.  */
11438   bfd_get_symcount (abfd) = info->strip != strip_all || emit_relocs;
11439   BFD_ASSERT (! abfd->output_has_begun);
11440   if (! _bfd_elf_compute_section_file_positions (abfd, info))
11441     goto error_return;
11442
11443   /* Set sizes, and assign file positions for reloc sections.  */
11444   for (o = abfd->sections; o != NULL; o = o->next)
11445     {
11446       struct bfd_elf_section_data *esdo = elf_section_data (o);
11447       if ((o->flags & SEC_RELOC) != 0)
11448         {
11449           if (esdo->rel.hdr
11450               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rel)))
11451             goto error_return;
11452
11453           if (esdo->rela.hdr
11454               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rela)))
11455             goto error_return;
11456         }
11457
11458       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
11459          to count upwards while actually outputting the relocations.  */
11460       esdo->rel.count = 0;
11461       esdo->rela.count = 0;
11462
11463       if (esdo->this_hdr.sh_offset == (file_ptr) -1)
11464         {
11465           /* Cache the section contents so that they can be compressed
11466              later.  Use bfd_malloc since it will be freed by
11467              bfd_compress_section_contents.  */
11468           unsigned char *contents = esdo->this_hdr.contents;
11469           if ((o->flags & SEC_ELF_COMPRESS) == 0 || contents != NULL)
11470             abort ();
11471           contents
11472             = (unsigned char *) bfd_malloc (esdo->this_hdr.sh_size);
11473           if (contents == NULL)
11474             goto error_return;
11475           esdo->this_hdr.contents = contents;
11476         }
11477     }
11478
11479   /* We have now assigned file positions for all the sections except
11480      .symtab, .strtab, and non-loaded reloc sections.  We start the
11481      .symtab section at the current file position, and write directly
11482      to it.  We build the .strtab section in memory.  */
11483   bfd_get_symcount (abfd) = 0;
11484   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11485   /* sh_name is set in prep_headers.  */
11486   symtab_hdr->sh_type = SHT_SYMTAB;
11487   /* sh_flags, sh_addr and sh_size all start off zero.  */
11488   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
11489   /* sh_link is set in assign_section_numbers.  */
11490   /* sh_info is set below.  */
11491   /* sh_offset is set just below.  */
11492   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
11493
11494   if (max_sym_count < 20)
11495     max_sym_count = 20;
11496   elf_hash_table (info)->strtabsize = max_sym_count;
11497   amt = max_sym_count * sizeof (struct elf_sym_strtab);
11498   elf_hash_table (info)->strtab
11499     = (struct elf_sym_strtab *) bfd_malloc (amt);
11500   if (elf_hash_table (info)->strtab == NULL)
11501     goto error_return;
11502   /* The real buffer will be allocated in elf_link_swap_symbols_out.  */
11503   flinfo.symshndxbuf
11504     = (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF)
11505        ? (Elf_External_Sym_Shndx *) -1 : NULL);
11506
11507   if (info->strip != strip_all || emit_relocs)
11508     {
11509       file_ptr off = elf_next_file_pos (abfd);
11510
11511       _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
11512
11513       /* Note that at this point elf_next_file_pos (abfd) is
11514          incorrect.  We do not yet know the size of the .symtab section.
11515          We correct next_file_pos below, after we do know the size.  */
11516
11517       /* Start writing out the symbol table.  The first symbol is always a
11518          dummy symbol.  */
11519       elfsym.st_value = 0;
11520       elfsym.st_size = 0;
11521       elfsym.st_info = 0;
11522       elfsym.st_other = 0;
11523       elfsym.st_shndx = SHN_UNDEF;
11524       elfsym.st_target_internal = 0;
11525       if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym,
11526                                      bfd_und_section_ptr, NULL) != 1)
11527         goto error_return;
11528
11529       /* Output a symbol for each section.  We output these even if we are
11530          discarding local symbols, since they are used for relocs.  These
11531          symbols have no names.  We store the index of each one in the
11532          index field of the section, so that we can find it again when
11533          outputting relocs.  */
11534
11535       elfsym.st_size = 0;
11536       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
11537       elfsym.st_other = 0;
11538       elfsym.st_value = 0;
11539       elfsym.st_target_internal = 0;
11540       for (i = 1; i < elf_numsections (abfd); i++)
11541         {
11542           o = bfd_section_from_elf_index (abfd, i);
11543           if (o != NULL)
11544             {
11545               o->target_index = bfd_get_symcount (abfd);
11546               elfsym.st_shndx = i;
11547               if (!bfd_link_relocatable (info))
11548                 elfsym.st_value = o->vma;
11549               if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym, o,
11550                                              NULL) != 1)
11551                 goto error_return;
11552             }
11553         }
11554     }
11555
11556   /* Allocate some memory to hold information read in from the input
11557      files.  */
11558   if (max_contents_size != 0)
11559     {
11560       flinfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
11561       if (flinfo.contents == NULL)
11562         goto error_return;
11563     }
11564
11565   if (max_external_reloc_size != 0)
11566     {
11567       flinfo.external_relocs = bfd_malloc (max_external_reloc_size);
11568       if (flinfo.external_relocs == NULL)
11569         goto error_return;
11570     }
11571
11572   if (max_internal_reloc_count != 0)
11573     {
11574       amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
11575       amt *= sizeof (Elf_Internal_Rela);
11576       flinfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
11577       if (flinfo.internal_relocs == NULL)
11578         goto error_return;
11579     }
11580
11581   if (max_sym_count != 0)
11582     {
11583       amt = max_sym_count * bed->s->sizeof_sym;
11584       flinfo.external_syms = (bfd_byte *) bfd_malloc (amt);
11585       if (flinfo.external_syms == NULL)
11586         goto error_return;
11587
11588       amt = max_sym_count * sizeof (Elf_Internal_Sym);
11589       flinfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
11590       if (flinfo.internal_syms == NULL)
11591         goto error_return;
11592
11593       amt = max_sym_count * sizeof (long);
11594       flinfo.indices = (long int *) bfd_malloc (amt);
11595       if (flinfo.indices == NULL)
11596         goto error_return;
11597
11598       amt = max_sym_count * sizeof (asection *);
11599       flinfo.sections = (asection **) bfd_malloc (amt);
11600       if (flinfo.sections == NULL)
11601         goto error_return;
11602     }
11603
11604   if (max_sym_shndx_count != 0)
11605     {
11606       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
11607       flinfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
11608       if (flinfo.locsym_shndx == NULL)
11609         goto error_return;
11610     }
11611
11612   if (elf_hash_table (info)->tls_sec)
11613     {
11614       bfd_vma base, end = 0;
11615       asection *sec;
11616
11617       for (sec = elf_hash_table (info)->tls_sec;
11618            sec && (sec->flags & SEC_THREAD_LOCAL);
11619            sec = sec->next)
11620         {
11621           bfd_size_type size = sec->size;
11622
11623           if (size == 0
11624               && (sec->flags & SEC_HAS_CONTENTS) == 0)
11625             {
11626               struct bfd_link_order *ord = sec->map_tail.link_order;
11627
11628               if (ord != NULL)
11629                 size = ord->offset + ord->size;
11630             }
11631           end = sec->vma + size;
11632         }
11633       base = elf_hash_table (info)->tls_sec->vma;
11634       /* Only align end of TLS section if static TLS doesn't have special
11635          alignment requirements.  */
11636       if (bed->static_tls_alignment == 1)
11637         end = align_power (end,
11638                            elf_hash_table (info)->tls_sec->alignment_power);
11639       elf_hash_table (info)->tls_size = end - base;
11640     }
11641
11642   /* Reorder SHF_LINK_ORDER sections.  */
11643   for (o = abfd->sections; o != NULL; o = o->next)
11644     {
11645       if (!elf_fixup_link_order (abfd, o))
11646         return FALSE;
11647     }
11648
11649   if (!_bfd_elf_fixup_eh_frame_hdr (info))
11650     return FALSE;
11651
11652   /* Since ELF permits relocations to be against local symbols, we
11653      must have the local symbols available when we do the relocations.
11654      Since we would rather only read the local symbols once, and we
11655      would rather not keep them in memory, we handle all the
11656      relocations for a single input file at the same time.
11657
11658      Unfortunately, there is no way to know the total number of local
11659      symbols until we have seen all of them, and the local symbol
11660      indices precede the global symbol indices.  This means that when
11661      we are generating relocatable output, and we see a reloc against
11662      a global symbol, we can not know the symbol index until we have
11663      finished examining all the local symbols to see which ones we are
11664      going to output.  To deal with this, we keep the relocations in
11665      memory, and don't output them until the end of the link.  This is
11666      an unfortunate waste of memory, but I don't see a good way around
11667      it.  Fortunately, it only happens when performing a relocatable
11668      link, which is not the common case.  FIXME: If keep_memory is set
11669      we could write the relocs out and then read them again; I don't
11670      know how bad the memory loss will be.  */
11671
11672   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
11673     sub->output_has_begun = FALSE;
11674   for (o = abfd->sections; o != NULL; o = o->next)
11675     {
11676       for (p = o->map_head.link_order; p != NULL; p = p->next)
11677         {
11678           if (p->type == bfd_indirect_link_order
11679               && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
11680                   == bfd_target_elf_flavour)
11681               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
11682             {
11683               if (! sub->output_has_begun)
11684                 {
11685                   if (! elf_link_input_bfd (&flinfo, sub))
11686                     goto error_return;
11687                   sub->output_has_begun = TRUE;
11688                 }
11689             }
11690           else if (p->type == bfd_section_reloc_link_order
11691                    || p->type == bfd_symbol_reloc_link_order)
11692             {
11693               if (! elf_reloc_link_order (abfd, info, o, p))
11694                 goto error_return;
11695             }
11696           else
11697             {
11698               if (! _bfd_default_link_order (abfd, info, o, p))
11699                 {
11700                   if (p->type == bfd_indirect_link_order
11701                       && (bfd_get_flavour (sub)
11702                           == bfd_target_elf_flavour)
11703                       && (elf_elfheader (sub)->e_ident[EI_CLASS]
11704                           != bed->s->elfclass))
11705                     {
11706                       const char *iclass, *oclass;
11707
11708                       switch (bed->s->elfclass)
11709                         {
11710                         case ELFCLASS64: oclass = "ELFCLASS64"; break;
11711                         case ELFCLASS32: oclass = "ELFCLASS32"; break;
11712                         case ELFCLASSNONE: oclass = "ELFCLASSNONE"; break;
11713                         default: abort ();
11714                         }
11715
11716                       switch (elf_elfheader (sub)->e_ident[EI_CLASS])
11717                         {
11718                         case ELFCLASS64: iclass = "ELFCLASS64"; break;
11719                         case ELFCLASS32: iclass = "ELFCLASS32"; break;
11720                         case ELFCLASSNONE: iclass = "ELFCLASSNONE"; break;
11721                         default: abort ();
11722                         }
11723
11724                       bfd_set_error (bfd_error_wrong_format);
11725                       _bfd_error_handler
11726                         (_("%B: file class %s incompatible with %s"),
11727                          sub, iclass, oclass);
11728                     }
11729
11730                   goto error_return;
11731                 }
11732             }
11733         }
11734     }
11735
11736   /* Free symbol buffer if needed.  */
11737   if (!info->reduce_memory_overheads)
11738     {
11739       for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
11740         if (bfd_get_flavour (sub) == bfd_target_elf_flavour
11741             && elf_tdata (sub)->symbuf)
11742           {
11743             free (elf_tdata (sub)->symbuf);
11744             elf_tdata (sub)->symbuf = NULL;
11745           }
11746     }
11747
11748   /* Output any global symbols that got converted to local in a
11749      version script or due to symbol visibility.  We do this in a
11750      separate step since ELF requires all local symbols to appear
11751      prior to any global symbols.  FIXME: We should only do this if
11752      some global symbols were, in fact, converted to become local.
11753      FIXME: Will this work correctly with the Irix 5 linker?  */
11754   eoinfo.failed = FALSE;
11755   eoinfo.flinfo = &flinfo;
11756   eoinfo.localsyms = TRUE;
11757   eoinfo.file_sym_done = FALSE;
11758   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
11759   if (eoinfo.failed)
11760     return FALSE;
11761
11762   /* If backend needs to output some local symbols not present in the hash
11763      table, do it now.  */
11764   if (bed->elf_backend_output_arch_local_syms
11765       && (info->strip != strip_all || emit_relocs))
11766     {
11767       typedef int (*out_sym_func)
11768         (void *, const char *, Elf_Internal_Sym *, asection *,
11769          struct elf_link_hash_entry *);
11770
11771       if (! ((*bed->elf_backend_output_arch_local_syms)
11772              (abfd, info, &flinfo,
11773               (out_sym_func) elf_link_output_symstrtab)))
11774         return FALSE;
11775     }
11776
11777   /* That wrote out all the local symbols.  Finish up the symbol table
11778      with the global symbols. Even if we want to strip everything we
11779      can, we still need to deal with those global symbols that got
11780      converted to local in a version script.  */
11781
11782   /* The sh_info field records the index of the first non local symbol.  */
11783   symtab_hdr->sh_info = bfd_get_symcount (abfd);
11784
11785   if (dynamic
11786       && elf_hash_table (info)->dynsym != NULL
11787       && (elf_hash_table (info)->dynsym->output_section
11788           != bfd_abs_section_ptr))
11789     {
11790       Elf_Internal_Sym sym;
11791       bfd_byte *dynsym = elf_hash_table (info)->dynsym->contents;
11792
11793       o = elf_hash_table (info)->dynsym->output_section;
11794       elf_section_data (o)->this_hdr.sh_info
11795         = elf_hash_table (info)->local_dynsymcount + 1;
11796
11797       /* Write out the section symbols for the output sections.  */
11798       if (bfd_link_pic (info)
11799           || elf_hash_table (info)->is_relocatable_executable)
11800         {
11801           asection *s;
11802
11803           sym.st_size = 0;
11804           sym.st_name = 0;
11805           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
11806           sym.st_other = 0;
11807           sym.st_target_internal = 0;
11808
11809           for (s = abfd->sections; s != NULL; s = s->next)
11810             {
11811               int indx;
11812               bfd_byte *dest;
11813               long dynindx;
11814
11815               dynindx = elf_section_data (s)->dynindx;
11816               if (dynindx <= 0)
11817                 continue;
11818               indx = elf_section_data (s)->this_idx;
11819               BFD_ASSERT (indx > 0);
11820               sym.st_shndx = indx;
11821               if (! check_dynsym (abfd, &sym))
11822                 return FALSE;
11823               sym.st_value = s->vma;
11824               dest = dynsym + dynindx * bed->s->sizeof_sym;
11825               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
11826             }
11827         }
11828
11829       /* Write out the local dynsyms.  */
11830       if (elf_hash_table (info)->dynlocal)
11831         {
11832           struct elf_link_local_dynamic_entry *e;
11833           for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
11834             {
11835               asection *s;
11836               bfd_byte *dest;
11837
11838               /* Copy the internal symbol and turn off visibility.
11839                  Note that we saved a word of storage and overwrote
11840                  the original st_name with the dynstr_index.  */
11841               sym = e->isym;
11842               sym.st_other &= ~ELF_ST_VISIBILITY (-1);
11843
11844               s = bfd_section_from_elf_index (e->input_bfd,
11845                                               e->isym.st_shndx);
11846               if (s != NULL)
11847                 {
11848                   sym.st_shndx =
11849                     elf_section_data (s->output_section)->this_idx;
11850                   if (! check_dynsym (abfd, &sym))
11851                     return FALSE;
11852                   sym.st_value = (s->output_section->vma
11853                                   + s->output_offset
11854                                   + e->isym.st_value);
11855                 }
11856
11857               dest = dynsym + e->dynindx * bed->s->sizeof_sym;
11858               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
11859             }
11860         }
11861     }
11862
11863   /* We get the global symbols from the hash table.  */
11864   eoinfo.failed = FALSE;
11865   eoinfo.localsyms = FALSE;
11866   eoinfo.flinfo = &flinfo;
11867   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
11868   if (eoinfo.failed)
11869     return FALSE;
11870
11871   /* If backend needs to output some symbols not present in the hash
11872      table, do it now.  */
11873   if (bed->elf_backend_output_arch_syms
11874       && (info->strip != strip_all || emit_relocs))
11875     {
11876       typedef int (*out_sym_func)
11877         (void *, const char *, Elf_Internal_Sym *, asection *,
11878          struct elf_link_hash_entry *);
11879
11880       if (! ((*bed->elf_backend_output_arch_syms)
11881              (abfd, info, &flinfo,
11882               (out_sym_func) elf_link_output_symstrtab)))
11883         return FALSE;
11884     }
11885
11886   /* Finalize the .strtab section.  */
11887   _bfd_elf_strtab_finalize (flinfo.symstrtab);
11888
11889   /* Swap out the .strtab section. */
11890   if (!elf_link_swap_symbols_out (&flinfo))
11891     return FALSE;
11892
11893   /* Now we know the size of the symtab section.  */
11894   if (bfd_get_symcount (abfd) > 0)
11895     {
11896       /* Finish up and write out the symbol string table (.strtab)
11897          section.  */
11898       Elf_Internal_Shdr *symstrtab_hdr;
11899       file_ptr off = symtab_hdr->sh_offset + symtab_hdr->sh_size;
11900
11901       symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
11902       if (symtab_shndx_hdr != NULL && symtab_shndx_hdr->sh_name != 0)
11903         {
11904           symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
11905           symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
11906           symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
11907           amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
11908           symtab_shndx_hdr->sh_size = amt;
11909
11910           off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
11911                                                            off, TRUE);
11912
11913           if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
11914               || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
11915             return FALSE;
11916         }
11917
11918       symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
11919       /* sh_name was set in prep_headers.  */
11920       symstrtab_hdr->sh_type = SHT_STRTAB;
11921       symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
11922       symstrtab_hdr->sh_addr = 0;
11923       symstrtab_hdr->sh_size = _bfd_elf_strtab_size (flinfo.symstrtab);
11924       symstrtab_hdr->sh_entsize = 0;
11925       symstrtab_hdr->sh_link = 0;
11926       symstrtab_hdr->sh_info = 0;
11927       /* sh_offset is set just below.  */
11928       symstrtab_hdr->sh_addralign = 1;
11929
11930       off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr,
11931                                                        off, TRUE);
11932       elf_next_file_pos (abfd) = off;
11933
11934       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
11935           || ! _bfd_elf_strtab_emit (abfd, flinfo.symstrtab))
11936         return FALSE;
11937     }
11938
11939   if (info->out_implib_bfd && !elf_output_implib (abfd, info))
11940     {
11941       _bfd_error_handler (_("%B: failed to generate import library"),
11942                           info->out_implib_bfd);
11943       return FALSE;
11944     }
11945
11946   /* Adjust the relocs to have the correct symbol indices.  */
11947   for (o = abfd->sections; o != NULL; o = o->next)
11948     {
11949       struct bfd_elf_section_data *esdo = elf_section_data (o);
11950       bfd_boolean sort;
11951       if ((o->flags & SEC_RELOC) == 0)
11952         continue;
11953
11954       sort = bed->sort_relocs_p == NULL || (*bed->sort_relocs_p) (o);
11955       if (esdo->rel.hdr != NULL
11956           && !elf_link_adjust_relocs (abfd, o, &esdo->rel, sort))
11957         return FALSE;
11958       if (esdo->rela.hdr != NULL
11959           && !elf_link_adjust_relocs (abfd, o, &esdo->rela, sort))
11960         return FALSE;
11961
11962       /* Set the reloc_count field to 0 to prevent write_relocs from
11963          trying to swap the relocs out itself.  */
11964       o->reloc_count = 0;
11965     }
11966
11967   if (dynamic && info->combreloc && dynobj != NULL)
11968     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
11969
11970   /* If we are linking against a dynamic object, or generating a
11971      shared library, finish up the dynamic linking information.  */
11972   if (dynamic)
11973     {
11974       bfd_byte *dyncon, *dynconend;
11975
11976       /* Fix up .dynamic entries.  */
11977       o = bfd_get_linker_section (dynobj, ".dynamic");
11978       BFD_ASSERT (o != NULL);
11979
11980       dyncon = o->contents;
11981       dynconend = o->contents + o->size;
11982       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
11983         {
11984           Elf_Internal_Dyn dyn;
11985           const char *name;
11986           unsigned int type;
11987
11988           bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
11989
11990           switch (dyn.d_tag)
11991             {
11992             default:
11993               continue;
11994             case DT_NULL:
11995               if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
11996                 {
11997                   switch (elf_section_data (reldyn)->this_hdr.sh_type)
11998                     {
11999                     case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
12000                     case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
12001                     default: continue;
12002                     }
12003                   dyn.d_un.d_val = relativecount;
12004                   relativecount = 0;
12005                   break;
12006                 }
12007               continue;
12008
12009             case DT_INIT:
12010               name = info->init_function;
12011               goto get_sym;
12012             case DT_FINI:
12013               name = info->fini_function;
12014             get_sym:
12015               {
12016                 struct elf_link_hash_entry *h;
12017
12018                 h = elf_link_hash_lookup (elf_hash_table (info), name,
12019                                           FALSE, FALSE, TRUE);
12020                 if (h != NULL
12021                     && (h->root.type == bfd_link_hash_defined
12022                         || h->root.type == bfd_link_hash_defweak))
12023                   {
12024                     dyn.d_un.d_ptr = h->root.u.def.value;
12025                     o = h->root.u.def.section;
12026                     if (o->output_section != NULL)
12027                       dyn.d_un.d_ptr += (o->output_section->vma
12028                                          + o->output_offset);
12029                     else
12030                       {
12031                         /* The symbol is imported from another shared
12032                            library and does not apply to this one.  */
12033                         dyn.d_un.d_ptr = 0;
12034                       }
12035                     break;
12036                   }
12037               }
12038               continue;
12039
12040             case DT_PREINIT_ARRAYSZ:
12041               name = ".preinit_array";
12042               goto get_out_size;
12043             case DT_INIT_ARRAYSZ:
12044               name = ".init_array";
12045               goto get_out_size;
12046             case DT_FINI_ARRAYSZ:
12047               name = ".fini_array";
12048             get_out_size:
12049               o = bfd_get_section_by_name (abfd, name);
12050               if (o == NULL)
12051                 {
12052                   _bfd_error_handler
12053                     (_("could not find section %s"), name);
12054                   goto error_return;
12055                 }
12056               if (o->size == 0)
12057                 _bfd_error_handler
12058                   (_("warning: %s section has zero size"), name);
12059               dyn.d_un.d_val = o->size;
12060               break;
12061
12062             case DT_PREINIT_ARRAY:
12063               name = ".preinit_array";
12064               goto get_out_vma;
12065             case DT_INIT_ARRAY:
12066               name = ".init_array";
12067               goto get_out_vma;
12068             case DT_FINI_ARRAY:
12069               name = ".fini_array";
12070             get_out_vma:
12071               o = bfd_get_section_by_name (abfd, name);
12072               goto do_vma;
12073
12074             case DT_HASH:
12075               name = ".hash";
12076               goto get_vma;
12077             case DT_GNU_HASH:
12078               name = ".gnu.hash";
12079               goto get_vma;
12080             case DT_STRTAB:
12081               name = ".dynstr";
12082               goto get_vma;
12083             case DT_SYMTAB:
12084               name = ".dynsym";
12085               goto get_vma;
12086             case DT_VERDEF:
12087               name = ".gnu.version_d";
12088               goto get_vma;
12089             case DT_VERNEED:
12090               name = ".gnu.version_r";
12091               goto get_vma;
12092             case DT_VERSYM:
12093               name = ".gnu.version";
12094             get_vma:
12095               o = bfd_get_linker_section (dynobj, name);
12096             do_vma:
12097               if (o == NULL)
12098                 {
12099                   _bfd_error_handler
12100                     (_("could not find section %s"), name);
12101                   goto error_return;
12102                 }
12103               if (elf_section_data (o->output_section)->this_hdr.sh_type == SHT_NOTE)
12104                 {
12105                   _bfd_error_handler
12106                     (_("warning: section '%s' is being made into a note"), name);
12107                   bfd_set_error (bfd_error_nonrepresentable_section);
12108                   goto error_return;
12109                 }
12110               dyn.d_un.d_ptr = o->output_section->vma + o->output_offset;
12111               break;
12112
12113             case DT_REL:
12114             case DT_RELA:
12115             case DT_RELSZ:
12116             case DT_RELASZ:
12117               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
12118                 type = SHT_REL;
12119               else
12120                 type = SHT_RELA;
12121               dyn.d_un.d_val = 0;
12122               dyn.d_un.d_ptr = 0;
12123               for (i = 1; i < elf_numsections (abfd); i++)
12124                 {
12125                   Elf_Internal_Shdr *hdr;
12126
12127                   hdr = elf_elfsections (abfd)[i];
12128                   if (hdr->sh_type == type
12129                       && (hdr->sh_flags & SHF_ALLOC) != 0)
12130                     {
12131                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
12132                         dyn.d_un.d_val += hdr->sh_size;
12133                       else
12134                         {
12135                           if (dyn.d_un.d_ptr == 0
12136                               || hdr->sh_addr < dyn.d_un.d_ptr)
12137                             dyn.d_un.d_ptr = hdr->sh_addr;
12138                         }
12139                     }
12140                 }
12141               break;
12142             }
12143           bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
12144         }
12145     }
12146
12147   /* If we have created any dynamic sections, then output them.  */
12148   if (dynobj != NULL)
12149     {
12150       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
12151         goto error_return;
12152
12153       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
12154       if (((info->warn_shared_textrel && bfd_link_pic (info))
12155            || info->error_textrel)
12156           && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL)
12157         {
12158           bfd_byte *dyncon, *dynconend;
12159
12160           dyncon = o->contents;
12161           dynconend = o->contents + o->size;
12162           for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
12163             {
12164               Elf_Internal_Dyn dyn;
12165
12166               bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
12167
12168               if (dyn.d_tag == DT_TEXTREL)
12169                 {
12170                   if (info->error_textrel)
12171                     info->callbacks->einfo
12172                       (_("%P%X: read-only segment has dynamic relocations.\n"));
12173                   else
12174                     info->callbacks->einfo
12175                       (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
12176                   break;
12177                 }
12178             }
12179         }
12180
12181       for (o = dynobj->sections; o != NULL; o = o->next)
12182         {
12183           if ((o->flags & SEC_HAS_CONTENTS) == 0
12184               || o->size == 0
12185               || o->output_section == bfd_abs_section_ptr)
12186             continue;
12187           if ((o->flags & SEC_LINKER_CREATED) == 0)
12188             {
12189               /* At this point, we are only interested in sections
12190                  created by _bfd_elf_link_create_dynamic_sections.  */
12191               continue;
12192             }
12193           if (elf_hash_table (info)->stab_info.stabstr == o)
12194             continue;
12195           if (elf_hash_table (info)->eh_info.hdr_sec == o)
12196             continue;
12197           if (strcmp (o->name, ".dynstr") != 0)
12198             {
12199               if (! bfd_set_section_contents (abfd, o->output_section,
12200                                               o->contents,
12201                                               (file_ptr) o->output_offset
12202                                               * bfd_octets_per_byte (abfd),
12203                                               o->size))
12204                 goto error_return;
12205             }
12206           else
12207             {
12208               /* The contents of the .dynstr section are actually in a
12209                  stringtab.  */
12210               file_ptr off;
12211
12212               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
12213               if (bfd_seek (abfd, off, SEEK_SET) != 0
12214                   || ! _bfd_elf_strtab_emit (abfd,
12215                                              elf_hash_table (info)->dynstr))
12216                 goto error_return;
12217             }
12218         }
12219     }
12220
12221   if (bfd_link_relocatable (info))
12222     {
12223       bfd_boolean failed = FALSE;
12224
12225       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
12226       if (failed)
12227         goto error_return;
12228     }
12229
12230   /* If we have optimized stabs strings, output them.  */
12231   if (elf_hash_table (info)->stab_info.stabstr != NULL)
12232     {
12233       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
12234         goto error_return;
12235     }
12236
12237   if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
12238     goto error_return;
12239
12240   elf_final_link_free (abfd, &flinfo);
12241
12242   elf_linker (abfd) = TRUE;
12243
12244   if (attr_section)
12245     {
12246       bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
12247       if (contents == NULL)
12248         return FALSE;   /* Bail out and fail.  */
12249       bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
12250       bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
12251       free (contents);
12252     }
12253
12254   return TRUE;
12255
12256  error_return:
12257   elf_final_link_free (abfd, &flinfo);
12258   return FALSE;
12259 }
12260 \f
12261 /* Initialize COOKIE for input bfd ABFD.  */
12262
12263 static bfd_boolean
12264 init_reloc_cookie (struct elf_reloc_cookie *cookie,
12265                    struct bfd_link_info *info, bfd *abfd)
12266 {
12267   Elf_Internal_Shdr *symtab_hdr;
12268   const struct elf_backend_data *bed;
12269
12270   bed = get_elf_backend_data (abfd);
12271   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12272
12273   cookie->abfd = abfd;
12274   cookie->sym_hashes = elf_sym_hashes (abfd);
12275   cookie->bad_symtab = elf_bad_symtab (abfd);
12276   if (cookie->bad_symtab)
12277     {
12278       cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
12279       cookie->extsymoff = 0;
12280     }
12281   else
12282     {
12283       cookie->locsymcount = symtab_hdr->sh_info;
12284       cookie->extsymoff = symtab_hdr->sh_info;
12285     }
12286
12287   if (bed->s->arch_size == 32)
12288     cookie->r_sym_shift = 8;
12289   else
12290     cookie->r_sym_shift = 32;
12291
12292   cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
12293   if (cookie->locsyms == NULL && cookie->locsymcount != 0)
12294     {
12295       cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12296                                               cookie->locsymcount, 0,
12297                                               NULL, NULL, NULL);
12298       if (cookie->locsyms == NULL)
12299         {
12300           info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
12301           return FALSE;
12302         }
12303       if (info->keep_memory)
12304         symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
12305     }
12306   return TRUE;
12307 }
12308
12309 /* Free the memory allocated by init_reloc_cookie, if appropriate.  */
12310
12311 static void
12312 fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd)
12313 {
12314   Elf_Internal_Shdr *symtab_hdr;
12315
12316   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12317   if (cookie->locsyms != NULL
12318       && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
12319     free (cookie->locsyms);
12320 }
12321
12322 /* Initialize the relocation information in COOKIE for input section SEC
12323    of input bfd ABFD.  */
12324
12325 static bfd_boolean
12326 init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
12327                         struct bfd_link_info *info, bfd *abfd,
12328                         asection *sec)
12329 {
12330   const struct elf_backend_data *bed;
12331
12332   if (sec->reloc_count == 0)
12333     {
12334       cookie->rels = NULL;
12335       cookie->relend = NULL;
12336     }
12337   else
12338     {
12339       bed = get_elf_backend_data (abfd);
12340
12341       cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
12342                                                 info->keep_memory);
12343       if (cookie->rels == NULL)
12344         return FALSE;
12345       cookie->rel = cookie->rels;
12346       cookie->relend = (cookie->rels
12347                         + sec->reloc_count * bed->s->int_rels_per_ext_rel);
12348     }
12349   cookie->rel = cookie->rels;
12350   return TRUE;
12351 }
12352
12353 /* Free the memory allocated by init_reloc_cookie_rels,
12354    if appropriate.  */
12355
12356 static void
12357 fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
12358                         asection *sec)
12359 {
12360   if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
12361     free (cookie->rels);
12362 }
12363
12364 /* Initialize the whole of COOKIE for input section SEC.  */
12365
12366 static bfd_boolean
12367 init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
12368                                struct bfd_link_info *info,
12369                                asection *sec)
12370 {
12371   if (!init_reloc_cookie (cookie, info, sec->owner))
12372     goto error1;
12373   if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
12374     goto error2;
12375   return TRUE;
12376
12377  error2:
12378   fini_reloc_cookie (cookie, sec->owner);
12379  error1:
12380   return FALSE;
12381 }
12382
12383 /* Free the memory allocated by init_reloc_cookie_for_section,
12384    if appropriate.  */
12385
12386 static void
12387 fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
12388                                asection *sec)
12389 {
12390   fini_reloc_cookie_rels (cookie, sec);
12391   fini_reloc_cookie (cookie, sec->owner);
12392 }
12393 \f
12394 /* Garbage collect unused sections.  */
12395
12396 /* Default gc_mark_hook.  */
12397
12398 asection *
12399 _bfd_elf_gc_mark_hook (asection *sec,
12400                        struct bfd_link_info *info ATTRIBUTE_UNUSED,
12401                        Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
12402                        struct elf_link_hash_entry *h,
12403                        Elf_Internal_Sym *sym)
12404 {
12405   if (h != NULL)
12406     {
12407       switch (h->root.type)
12408         {
12409         case bfd_link_hash_defined:
12410         case bfd_link_hash_defweak:
12411           return h->root.u.def.section;
12412
12413         case bfd_link_hash_common:
12414           return h->root.u.c.p->section;
12415
12416         default:
12417           break;
12418         }
12419     }
12420   else
12421     return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
12422
12423   return NULL;
12424 }
12425
12426 /* For undefined __start_<name> and __stop_<name> symbols, return the
12427    first input section matching <name>.  Return NULL otherwise.  */
12428
12429 asection *
12430 _bfd_elf_is_start_stop (const struct bfd_link_info *info,
12431                         struct elf_link_hash_entry *h)
12432 {
12433   asection *s;
12434   const char *sec_name;
12435
12436   if (h->root.type != bfd_link_hash_undefined
12437       && h->root.type != bfd_link_hash_undefweak)
12438     return NULL;
12439
12440   s = h->root.u.undef.section;
12441   if (s != NULL)
12442     {
12443       if (s == (asection *) 0 - 1)
12444         return NULL;
12445       return s;
12446     }
12447
12448   sec_name = NULL;
12449   if (strncmp (h->root.root.string, "__start_", 8) == 0)
12450     sec_name = h->root.root.string + 8;
12451   else if (strncmp (h->root.root.string, "__stop_", 7) == 0)
12452     sec_name = h->root.root.string + 7;
12453
12454   if (sec_name != NULL && *sec_name != '\0')
12455     {
12456       bfd *i;
12457
12458       for (i = info->input_bfds; i != NULL; i = i->link.next)
12459         {
12460           s = bfd_get_section_by_name (i, sec_name);
12461           if (s != NULL)
12462             {
12463               h->root.u.undef.section = s;
12464               break;
12465             }
12466         }
12467     }
12468
12469   if (s == NULL)
12470     h->root.u.undef.section = (asection *) 0 - 1;
12471
12472   return s;
12473 }
12474
12475 /* COOKIE->rel describes a relocation against section SEC, which is
12476    a section we've decided to keep.  Return the section that contains
12477    the relocation symbol, or NULL if no section contains it.  */
12478
12479 asection *
12480 _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
12481                        elf_gc_mark_hook_fn gc_mark_hook,
12482                        struct elf_reloc_cookie *cookie,
12483                        bfd_boolean *start_stop)
12484 {
12485   unsigned long r_symndx;
12486   struct elf_link_hash_entry *h;
12487
12488   r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
12489   if (r_symndx == STN_UNDEF)
12490     return NULL;
12491
12492   if (r_symndx >= cookie->locsymcount
12493       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
12494     {
12495       h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
12496       if (h == NULL)
12497         {
12498           info->callbacks->einfo (_("%F%P: corrupt input: %B\n"),
12499                                   sec->owner);
12500           return NULL;
12501         }
12502       while (h->root.type == bfd_link_hash_indirect
12503              || h->root.type == bfd_link_hash_warning)
12504         h = (struct elf_link_hash_entry *) h->root.u.i.link;
12505       h->mark = 1;
12506       /* If this symbol is weak and there is a non-weak definition, we
12507          keep the non-weak definition because many backends put
12508          dynamic reloc info on the non-weak definition for code
12509          handling copy relocs.  */
12510       if (h->u.weakdef != NULL)
12511         h->u.weakdef->mark = 1;
12512
12513       if (start_stop != NULL)
12514         {
12515           /* To work around a glibc bug, mark all XXX input sections
12516              when there is an as yet undefined reference to __start_XXX
12517              or __stop_XXX symbols.  The linker will later define such
12518              symbols for orphan input sections that have a name
12519              representable as a C identifier.  */
12520           asection *s = _bfd_elf_is_start_stop (info, h);
12521
12522           if (s != NULL)
12523             {
12524               *start_stop = !s->gc_mark;
12525               return s;
12526             }
12527         }
12528
12529       return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
12530     }
12531
12532   return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
12533                           &cookie->locsyms[r_symndx]);
12534 }
12535
12536 /* COOKIE->rel describes a relocation against section SEC, which is
12537    a section we've decided to keep.  Mark the section that contains
12538    the relocation symbol.  */
12539
12540 bfd_boolean
12541 _bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
12542                         asection *sec,
12543                         elf_gc_mark_hook_fn gc_mark_hook,
12544                         struct elf_reloc_cookie *cookie)
12545 {
12546   asection *rsec;
12547   bfd_boolean start_stop = FALSE;
12548
12549   rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie, &start_stop);
12550   while (rsec != NULL)
12551     {
12552       if (!rsec->gc_mark)
12553         {
12554           if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour
12555               || (rsec->owner->flags & DYNAMIC) != 0)
12556             rsec->gc_mark = 1;
12557           else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
12558             return FALSE;
12559         }
12560       if (!start_stop)
12561         break;
12562       rsec = bfd_get_next_section_by_name (rsec->owner, rsec);
12563     }
12564   return TRUE;
12565 }
12566
12567 /* The mark phase of garbage collection.  For a given section, mark
12568    it and any sections in this section's group, and all the sections
12569    which define symbols to which it refers.  */
12570
12571 bfd_boolean
12572 _bfd_elf_gc_mark (struct bfd_link_info *info,
12573                   asection *sec,
12574                   elf_gc_mark_hook_fn gc_mark_hook)
12575 {
12576   bfd_boolean ret;
12577   asection *group_sec, *eh_frame;
12578
12579   sec->gc_mark = 1;
12580
12581   /* Mark all the sections in the group.  */
12582   group_sec = elf_section_data (sec)->next_in_group;
12583   if (group_sec && !group_sec->gc_mark)
12584     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
12585       return FALSE;
12586
12587   /* Look through the section relocs.  */
12588   ret = TRUE;
12589   eh_frame = elf_eh_frame_section (sec->owner);
12590   if ((sec->flags & SEC_RELOC) != 0
12591       && sec->reloc_count > 0
12592       && sec != eh_frame)
12593     {
12594       struct elf_reloc_cookie cookie;
12595
12596       if (!init_reloc_cookie_for_section (&cookie, info, sec))
12597         ret = FALSE;
12598       else
12599         {
12600           for (; cookie.rel < cookie.relend; cookie.rel++)
12601             if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
12602               {
12603                 ret = FALSE;
12604                 break;
12605               }
12606           fini_reloc_cookie_for_section (&cookie, sec);
12607         }
12608     }
12609
12610   if (ret && eh_frame && elf_fde_list (sec))
12611     {
12612       struct elf_reloc_cookie cookie;
12613
12614       if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
12615         ret = FALSE;
12616       else
12617         {
12618           if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
12619                                       gc_mark_hook, &cookie))
12620             ret = FALSE;
12621           fini_reloc_cookie_for_section (&cookie, eh_frame);
12622         }
12623     }
12624
12625   eh_frame = elf_section_eh_frame_entry (sec);
12626   if (ret && eh_frame && !eh_frame->gc_mark)
12627     if (!_bfd_elf_gc_mark (info, eh_frame, gc_mark_hook))
12628       ret = FALSE;
12629
12630   return ret;
12631 }
12632
12633 /* Scan and mark sections in a special or debug section group.  */
12634
12635 static void
12636 _bfd_elf_gc_mark_debug_special_section_group (asection *grp)
12637 {
12638   /* Point to first section of section group.  */
12639   asection *ssec;
12640   /* Used to iterate the section group.  */
12641   asection *msec;
12642
12643   bfd_boolean is_special_grp = TRUE;
12644   bfd_boolean is_debug_grp = TRUE;
12645
12646   /* First scan to see if group contains any section other than debug
12647      and special section.  */
12648   ssec = msec = elf_next_in_group (grp);
12649   do
12650     {
12651       if ((msec->flags & SEC_DEBUGGING) == 0)
12652         is_debug_grp = FALSE;
12653
12654       if ((msec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) != 0)
12655         is_special_grp = FALSE;
12656
12657       msec = elf_next_in_group (msec);
12658     }
12659   while (msec != ssec);
12660
12661   /* If this is a pure debug section group or pure special section group,
12662      keep all sections in this group.  */
12663   if (is_debug_grp || is_special_grp)
12664     {
12665       do
12666         {
12667           msec->gc_mark = 1;
12668           msec = elf_next_in_group (msec);
12669         }
12670       while (msec != ssec);
12671     }
12672 }
12673
12674 /* Keep debug and special sections.  */
12675
12676 bfd_boolean
12677 _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12678                                  elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED)
12679 {
12680   bfd *ibfd;
12681
12682   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12683     {
12684       asection *isec;
12685       bfd_boolean some_kept;
12686       bfd_boolean debug_frag_seen;
12687
12688       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
12689         continue;
12690
12691       /* Ensure all linker created sections are kept,
12692          see if any other section is already marked,
12693          and note if we have any fragmented debug sections.  */
12694       debug_frag_seen = some_kept = FALSE;
12695       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12696         {
12697           if ((isec->flags & SEC_LINKER_CREATED) != 0)
12698             isec->gc_mark = 1;
12699           else if (isec->gc_mark)
12700             some_kept = TRUE;
12701
12702           if (debug_frag_seen == FALSE
12703               && (isec->flags & SEC_DEBUGGING)
12704               && CONST_STRNEQ (isec->name, ".debug_line."))
12705             debug_frag_seen = TRUE;
12706         }
12707
12708       /* If no section in this file will be kept, then we can
12709          toss out the debug and special sections.  */
12710       if (!some_kept)
12711         continue;
12712
12713       /* Keep debug and special sections like .comment when they are
12714          not part of a group.  Also keep section groups that contain
12715          just debug sections or special sections.  */
12716       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12717         {
12718           if ((isec->flags & SEC_GROUP) != 0)
12719             _bfd_elf_gc_mark_debug_special_section_group (isec);
12720           else if (((isec->flags & SEC_DEBUGGING) != 0
12721                     || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
12722                    && elf_next_in_group (isec) == NULL)
12723             isec->gc_mark = 1;
12724         }
12725
12726       if (! debug_frag_seen)
12727         continue;
12728
12729       /* Look for CODE sections which are going to be discarded,
12730          and find and discard any fragmented debug sections which
12731          are associated with that code section.  */
12732       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12733         if ((isec->flags & SEC_CODE) != 0
12734             && isec->gc_mark == 0)
12735           {
12736             unsigned int ilen;
12737             asection *dsec;
12738
12739             ilen = strlen (isec->name);
12740
12741             /* Association is determined by the name of the debug section
12742                containing the name of the code section as a suffix.  For
12743                example .debug_line.text.foo is a debug section associated
12744                with .text.foo.  */
12745             for (dsec = ibfd->sections; dsec != NULL; dsec = dsec->next)
12746               {
12747                 unsigned int dlen;
12748
12749                 if (dsec->gc_mark == 0
12750                     || (dsec->flags & SEC_DEBUGGING) == 0)
12751                   continue;
12752
12753                 dlen = strlen (dsec->name);
12754
12755                 if (dlen > ilen
12756                     && strncmp (dsec->name + (dlen - ilen),
12757                                 isec->name, ilen) == 0)
12758                   {
12759                     dsec->gc_mark = 0;
12760                   }
12761               }
12762           }
12763     }
12764   return TRUE;
12765 }
12766
12767 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
12768
12769 struct elf_gc_sweep_symbol_info
12770 {
12771   struct bfd_link_info *info;
12772   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
12773                        bfd_boolean);
12774 };
12775
12776 static bfd_boolean
12777 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
12778 {
12779   if (!h->mark
12780       && (((h->root.type == bfd_link_hash_defined
12781             || h->root.type == bfd_link_hash_defweak)
12782            && !((h->def_regular || ELF_COMMON_DEF_P (h))
12783                 && h->root.u.def.section->gc_mark))
12784           || h->root.type == bfd_link_hash_undefined
12785           || h->root.type == bfd_link_hash_undefweak))
12786     {
12787       struct elf_gc_sweep_symbol_info *inf;
12788
12789       inf = (struct elf_gc_sweep_symbol_info *) data;
12790       (*inf->hide_symbol) (inf->info, h, TRUE);
12791       h->def_regular = 0;
12792       h->ref_regular = 0;
12793       h->ref_regular_nonweak = 0;
12794     }
12795
12796   return TRUE;
12797 }
12798
12799 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
12800
12801 typedef bfd_boolean (*gc_sweep_hook_fn)
12802   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
12803
12804 static bfd_boolean
12805 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
12806 {
12807   bfd *sub;
12808   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12809   gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook;
12810   unsigned long section_sym_count;
12811   struct elf_gc_sweep_symbol_info sweep_info;
12812
12813   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12814     {
12815       asection *o;
12816
12817       if (bfd_get_flavour (sub) != bfd_target_elf_flavour
12818           || !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
12819         continue;
12820
12821       for (o = sub->sections; o != NULL; o = o->next)
12822         {
12823           /* When any section in a section group is kept, we keep all
12824              sections in the section group.  If the first member of
12825              the section group is excluded, we will also exclude the
12826              group section.  */
12827           if (o->flags & SEC_GROUP)
12828             {
12829               asection *first = elf_next_in_group (o);
12830               o->gc_mark = first->gc_mark;
12831             }
12832
12833           if (o->gc_mark)
12834             continue;
12835
12836           /* Skip sweeping sections already excluded.  */
12837           if (o->flags & SEC_EXCLUDE)
12838             continue;
12839
12840           /* Since this is early in the link process, it is simple
12841              to remove a section from the output.  */
12842           o->flags |= SEC_EXCLUDE;
12843
12844           if (info->print_gc_sections && o->size != 0)
12845             _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), sub, o->name);
12846
12847           /* But we also have to update some of the relocation
12848              info we collected before.  */
12849           if (gc_sweep_hook
12850               && (o->flags & SEC_RELOC) != 0
12851               && o->reloc_count != 0
12852               && !((info->strip == strip_all || info->strip == strip_debugger)
12853                    && (o->flags & SEC_DEBUGGING) != 0)
12854               && !bfd_is_abs_section (o->output_section))
12855             {
12856               Elf_Internal_Rela *internal_relocs;
12857               bfd_boolean r;
12858
12859               internal_relocs
12860                 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
12861                                              info->keep_memory);
12862               if (internal_relocs == NULL)
12863                 return FALSE;
12864
12865               r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
12866
12867               if (elf_section_data (o)->relocs != internal_relocs)
12868                 free (internal_relocs);
12869
12870               if (!r)
12871                 return FALSE;
12872             }
12873         }
12874     }
12875
12876   /* Remove the symbols that were in the swept sections from the dynamic
12877      symbol table.  GCFIXME: Anyone know how to get them out of the
12878      static symbol table as well?  */
12879   sweep_info.info = info;
12880   sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
12881   elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
12882                           &sweep_info);
12883
12884   _bfd_elf_link_renumber_dynsyms (abfd, info, &section_sym_count);
12885   return TRUE;
12886 }
12887
12888 /* Propagate collected vtable information.  This is called through
12889    elf_link_hash_traverse.  */
12890
12891 static bfd_boolean
12892 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
12893 {
12894   /* Those that are not vtables.  */
12895   if (h->vtable == NULL || h->vtable->parent == NULL)
12896     return TRUE;
12897
12898   /* Those vtables that do not have parents, we cannot merge.  */
12899   if (h->vtable->parent == (struct elf_link_hash_entry *) -1)
12900     return TRUE;
12901
12902   /* If we've already been done, exit.  */
12903   if (h->vtable->used && h->vtable->used[-1])
12904     return TRUE;
12905
12906   /* Make sure the parent's table is up to date.  */
12907   elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp);
12908
12909   if (h->vtable->used == NULL)
12910     {
12911       /* None of this table's entries were referenced.  Re-use the
12912          parent's table.  */
12913       h->vtable->used = h->vtable->parent->vtable->used;
12914       h->vtable->size = h->vtable->parent->vtable->size;
12915     }
12916   else
12917     {
12918       size_t n;
12919       bfd_boolean *cu, *pu;
12920
12921       /* Or the parent's entries into ours.  */
12922       cu = h->vtable->used;
12923       cu[-1] = TRUE;
12924       pu = h->vtable->parent->vtable->used;
12925       if (pu != NULL)
12926         {
12927           const struct elf_backend_data *bed;
12928           unsigned int log_file_align;
12929
12930           bed = get_elf_backend_data (h->root.u.def.section->owner);
12931           log_file_align = bed->s->log_file_align;
12932           n = h->vtable->parent->vtable->size >> log_file_align;
12933           while (n--)
12934             {
12935               if (*pu)
12936                 *cu = TRUE;
12937               pu++;
12938               cu++;
12939             }
12940         }
12941     }
12942
12943   return TRUE;
12944 }
12945
12946 static bfd_boolean
12947 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
12948 {
12949   asection *sec;
12950   bfd_vma hstart, hend;
12951   Elf_Internal_Rela *relstart, *relend, *rel;
12952   const struct elf_backend_data *bed;
12953   unsigned int log_file_align;
12954
12955   /* Take care of both those symbols that do not describe vtables as
12956      well as those that are not loaded.  */
12957   if (h->vtable == NULL || h->vtable->parent == NULL)
12958     return TRUE;
12959
12960   BFD_ASSERT (h->root.type == bfd_link_hash_defined
12961               || h->root.type == bfd_link_hash_defweak);
12962
12963   sec = h->root.u.def.section;
12964   hstart = h->root.u.def.value;
12965   hend = hstart + h->size;
12966
12967   relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
12968   if (!relstart)
12969     return *(bfd_boolean *) okp = FALSE;
12970   bed = get_elf_backend_data (sec->owner);
12971   log_file_align = bed->s->log_file_align;
12972
12973   relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
12974
12975   for (rel = relstart; rel < relend; ++rel)
12976     if (rel->r_offset >= hstart && rel->r_offset < hend)
12977       {
12978         /* If the entry is in use, do nothing.  */
12979         if (h->vtable->used
12980             && (rel->r_offset - hstart) < h->vtable->size)
12981           {
12982             bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
12983             if (h->vtable->used[entry])
12984               continue;
12985           }
12986         /* Otherwise, kill it.  */
12987         rel->r_offset = rel->r_info = rel->r_addend = 0;
12988       }
12989
12990   return TRUE;
12991 }
12992
12993 /* Mark sections containing dynamically referenced symbols.  When
12994    building shared libraries, we must assume that any visible symbol is
12995    referenced.  */
12996
12997 bfd_boolean
12998 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
12999 {
13000   struct bfd_link_info *info = (struct bfd_link_info *) inf;
13001   struct bfd_elf_dynamic_list *d = info->dynamic_list;
13002
13003   if ((h->root.type == bfd_link_hash_defined
13004        || h->root.type == bfd_link_hash_defweak)
13005       && (h->ref_dynamic
13006           || ((h->def_regular || ELF_COMMON_DEF_P (h))
13007               && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
13008               && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
13009               && (!bfd_link_executable (info)
13010                   || info->export_dynamic
13011                   || (h->dynamic
13012                       && d != NULL
13013                       && (*d->match) (&d->head, NULL, h->root.root.string)))
13014               && (h->versioned >= versioned
13015                   || !bfd_hide_sym_by_version (info->version_info,
13016                                                h->root.root.string)))))
13017     h->root.u.def.section->flags |= SEC_KEEP;
13018
13019   return TRUE;
13020 }
13021
13022 /* Keep all sections containing symbols undefined on the command-line,
13023    and the section containing the entry symbol.  */
13024
13025 void
13026 _bfd_elf_gc_keep (struct bfd_link_info *info)
13027 {
13028   struct bfd_sym_chain *sym;
13029
13030   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
13031     {
13032       struct elf_link_hash_entry *h;
13033
13034       h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
13035                                 FALSE, FALSE, FALSE);
13036
13037       if (h != NULL
13038           && (h->root.type == bfd_link_hash_defined
13039               || h->root.type == bfd_link_hash_defweak)
13040           && !bfd_is_abs_section (h->root.u.def.section))
13041         h->root.u.def.section->flags |= SEC_KEEP;
13042     }
13043 }
13044
13045 bfd_boolean
13046 bfd_elf_parse_eh_frame_entries (bfd *abfd ATTRIBUTE_UNUSED,
13047                                 struct bfd_link_info *info)
13048 {
13049   bfd *ibfd = info->input_bfds;
13050
13051   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
13052     {
13053       asection *sec;
13054       struct elf_reloc_cookie cookie;
13055
13056       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
13057         continue;
13058
13059       if (!init_reloc_cookie (&cookie, info, ibfd))
13060         return FALSE;
13061
13062       for (sec = ibfd->sections; sec; sec = sec->next)
13063         {
13064           if (CONST_STRNEQ (bfd_section_name (ibfd, sec), ".eh_frame_entry")
13065               && init_reloc_cookie_rels (&cookie, info, ibfd, sec))
13066             {
13067               _bfd_elf_parse_eh_frame_entry (info, sec, &cookie);
13068               fini_reloc_cookie_rels (&cookie, sec);
13069             }
13070         }
13071     }
13072   return TRUE;
13073 }
13074
13075 /* Do mark and sweep of unused sections.  */
13076
13077 bfd_boolean
13078 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
13079 {
13080   bfd_boolean ok = TRUE;
13081   bfd *sub;
13082   elf_gc_mark_hook_fn gc_mark_hook;
13083   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13084   struct elf_link_hash_table *htab;
13085
13086   if (!bed->can_gc_sections
13087       || !is_elf_hash_table (info->hash))
13088     {
13089       _bfd_error_handler(_("Warning: gc-sections option ignored"));
13090       return TRUE;
13091     }
13092
13093   bed->gc_keep (info);
13094   htab = elf_hash_table (info);
13095
13096   /* Try to parse each bfd's .eh_frame section.  Point elf_eh_frame_section
13097      at the .eh_frame section if we can mark the FDEs individually.  */
13098   for (sub = info->input_bfds;
13099        info->eh_frame_hdr_type != COMPACT_EH_HDR && sub != NULL;
13100        sub = sub->link.next)
13101     {
13102       asection *sec;
13103       struct elf_reloc_cookie cookie;
13104
13105       sec = bfd_get_section_by_name (sub, ".eh_frame");
13106       while (sec && init_reloc_cookie_for_section (&cookie, info, sec))
13107         {
13108           _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
13109           if (elf_section_data (sec)->sec_info
13110               && (sec->flags & SEC_LINKER_CREATED) == 0)
13111             elf_eh_frame_section (sub) = sec;
13112           fini_reloc_cookie_for_section (&cookie, sec);
13113           sec = bfd_get_next_section_by_name (NULL, sec);
13114         }
13115     }
13116
13117   /* Apply transitive closure to the vtable entry usage info.  */
13118   elf_link_hash_traverse (htab, elf_gc_propagate_vtable_entries_used, &ok);
13119   if (!ok)
13120     return FALSE;
13121
13122   /* Kill the vtable relocations that were not used.  */
13123   elf_link_hash_traverse (htab, elf_gc_smash_unused_vtentry_relocs, &ok);
13124   if (!ok)
13125     return FALSE;
13126
13127   /* Mark dynamically referenced symbols.  */
13128   if (htab->dynamic_sections_created)
13129     elf_link_hash_traverse (htab, bed->gc_mark_dynamic_ref, info);
13130
13131   /* Grovel through relocs to find out who stays ...  */
13132   gc_mark_hook = bed->gc_mark_hook;
13133   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
13134     {
13135       asection *o;
13136
13137       if (bfd_get_flavour (sub) != bfd_target_elf_flavour
13138           || !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
13139         continue;
13140
13141       /* Start at sections marked with SEC_KEEP (ref _bfd_elf_gc_keep).
13142          Also treat note sections as a root, if the section is not part
13143          of a group.  */
13144       for (o = sub->sections; o != NULL; o = o->next)
13145         if (!o->gc_mark
13146             && (o->flags & SEC_EXCLUDE) == 0
13147             && ((o->flags & SEC_KEEP) != 0
13148                 || (elf_section_data (o)->this_hdr.sh_type == SHT_NOTE
13149                     && elf_next_in_group (o) == NULL )))
13150           {
13151             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
13152               return FALSE;
13153           }
13154     }
13155
13156   /* Allow the backend to mark additional target specific sections.  */
13157   bed->gc_mark_extra_sections (info, gc_mark_hook);
13158
13159   /* ... and mark SEC_EXCLUDE for those that go.  */
13160   return elf_gc_sweep (abfd, info);
13161 }
13162 \f
13163 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
13164
13165 bfd_boolean
13166 bfd_elf_gc_record_vtinherit (bfd *abfd,
13167                              asection *sec,
13168                              struct elf_link_hash_entry *h,
13169                              bfd_vma offset)
13170 {
13171   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
13172   struct elf_link_hash_entry **search, *child;
13173   size_t extsymcount;
13174   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13175
13176   /* The sh_info field of the symtab header tells us where the
13177      external symbols start.  We don't care about the local symbols at
13178      this point.  */
13179   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
13180   if (!elf_bad_symtab (abfd))
13181     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
13182
13183   sym_hashes = elf_sym_hashes (abfd);
13184   sym_hashes_end = sym_hashes + extsymcount;
13185
13186   /* Hunt down the child symbol, which is in this section at the same
13187      offset as the relocation.  */
13188   for (search = sym_hashes; search != sym_hashes_end; ++search)
13189     {
13190       if ((child = *search) != NULL
13191           && (child->root.type == bfd_link_hash_defined
13192               || child->root.type == bfd_link_hash_defweak)
13193           && child->root.u.def.section == sec
13194           && child->root.u.def.value == offset)
13195         goto win;
13196     }
13197
13198   _bfd_error_handler ("%B: %A+%lu: No symbol found for INHERIT",
13199                       abfd, sec, (unsigned long) offset);
13200   bfd_set_error (bfd_error_invalid_operation);
13201   return FALSE;
13202
13203  win:
13204   if (!child->vtable)
13205     {
13206       child->vtable = ((struct elf_link_virtual_table_entry *)
13207                        bfd_zalloc (abfd, sizeof (*child->vtable)));
13208       if (!child->vtable)
13209         return FALSE;
13210     }
13211   if (!h)
13212     {
13213       /* This *should* only be the absolute section.  It could potentially
13214          be that someone has defined a non-global vtable though, which
13215          would be bad.  It isn't worth paging in the local symbols to be
13216          sure though; that case should simply be handled by the assembler.  */
13217
13218       child->vtable->parent = (struct elf_link_hash_entry *) -1;
13219     }
13220   else
13221     child->vtable->parent = h;
13222
13223   return TRUE;
13224 }
13225
13226 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
13227
13228 bfd_boolean
13229 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
13230                            asection *sec ATTRIBUTE_UNUSED,
13231                            struct elf_link_hash_entry *h,
13232                            bfd_vma addend)
13233 {
13234   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13235   unsigned int log_file_align = bed->s->log_file_align;
13236
13237   if (!h->vtable)
13238     {
13239       h->vtable = ((struct elf_link_virtual_table_entry *)
13240                    bfd_zalloc (abfd, sizeof (*h->vtable)));
13241       if (!h->vtable)
13242         return FALSE;
13243     }
13244
13245   if (addend >= h->vtable->size)
13246     {
13247       size_t size, bytes, file_align;
13248       bfd_boolean *ptr = h->vtable->used;
13249
13250       /* While the symbol is undefined, we have to be prepared to handle
13251          a zero size.  */
13252       file_align = 1 << log_file_align;
13253       if (h->root.type == bfd_link_hash_undefined)
13254         size = addend + file_align;
13255       else
13256         {
13257           size = h->size;
13258           if (addend >= size)
13259             {
13260               /* Oops!  We've got a reference past the defined end of
13261                  the table.  This is probably a bug -- shall we warn?  */
13262               size = addend + file_align;
13263             }
13264         }
13265       size = (size + file_align - 1) & -file_align;
13266
13267       /* Allocate one extra entry for use as a "done" flag for the
13268          consolidation pass.  */
13269       bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
13270
13271       if (ptr)
13272         {
13273           ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
13274
13275           if (ptr != NULL)
13276             {
13277               size_t oldbytes;
13278
13279               oldbytes = (((h->vtable->size >> log_file_align) + 1)
13280                           * sizeof (bfd_boolean));
13281               memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
13282             }
13283         }
13284       else
13285         ptr = (bfd_boolean *) bfd_zmalloc (bytes);
13286
13287       if (ptr == NULL)
13288         return FALSE;
13289
13290       /* And arrange for that done flag to be at index -1.  */
13291       h->vtable->used = ptr + 1;
13292       h->vtable->size = size;
13293     }
13294
13295   h->vtable->used[addend >> log_file_align] = TRUE;
13296
13297   return TRUE;
13298 }
13299
13300 /* Map an ELF section header flag to its corresponding string.  */
13301 typedef struct
13302 {
13303   char *flag_name;
13304   flagword flag_value;
13305 } elf_flags_to_name_table;
13306
13307 static elf_flags_to_name_table elf_flags_to_names [] =
13308 {
13309   { "SHF_WRITE", SHF_WRITE },
13310   { "SHF_ALLOC", SHF_ALLOC },
13311   { "SHF_EXECINSTR", SHF_EXECINSTR },
13312   { "SHF_MERGE", SHF_MERGE },
13313   { "SHF_STRINGS", SHF_STRINGS },
13314   { "SHF_INFO_LINK", SHF_INFO_LINK},
13315   { "SHF_LINK_ORDER", SHF_LINK_ORDER},
13316   { "SHF_OS_NONCONFORMING", SHF_OS_NONCONFORMING},
13317   { "SHF_GROUP", SHF_GROUP },
13318   { "SHF_TLS", SHF_TLS },
13319   { "SHF_MASKOS", SHF_MASKOS },
13320   { "SHF_EXCLUDE", SHF_EXCLUDE },
13321 };
13322
13323 /* Returns TRUE if the section is to be included, otherwise FALSE.  */
13324 bfd_boolean
13325 bfd_elf_lookup_section_flags (struct bfd_link_info *info,
13326                               struct flag_info *flaginfo,
13327                               asection *section)
13328 {
13329   const bfd_vma sh_flags = elf_section_flags (section);
13330
13331   if (!flaginfo->flags_initialized)
13332     {
13333       bfd *obfd = info->output_bfd;
13334       const struct elf_backend_data *bed = get_elf_backend_data (obfd);
13335       struct flag_info_list *tf = flaginfo->flag_list;
13336       int with_hex = 0;
13337       int without_hex = 0;
13338
13339       for (tf = flaginfo->flag_list; tf != NULL; tf = tf->next)
13340         {
13341           unsigned i;
13342           flagword (*lookup) (char *);
13343
13344           lookup = bed->elf_backend_lookup_section_flags_hook;
13345           if (lookup != NULL)
13346             {
13347               flagword hexval = (*lookup) ((char *) tf->name);
13348
13349               if (hexval != 0)
13350                 {
13351                   if (tf->with == with_flags)
13352                     with_hex |= hexval;
13353                   else if (tf->with == without_flags)
13354                     without_hex |= hexval;
13355                   tf->valid = TRUE;
13356                   continue;
13357                 }
13358             }
13359           for (i = 0; i < ARRAY_SIZE (elf_flags_to_names); ++i)
13360             {
13361               if (strcmp (tf->name, elf_flags_to_names[i].flag_name) == 0)
13362                 {
13363                   if (tf->with == with_flags)
13364                     with_hex |= elf_flags_to_names[i].flag_value;
13365                   else if (tf->with == without_flags)
13366                     without_hex |= elf_flags_to_names[i].flag_value;
13367                   tf->valid = TRUE;
13368                   break;
13369                 }
13370             }
13371           if (!tf->valid)
13372             {
13373               info->callbacks->einfo
13374                 (_("Unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
13375               return FALSE;
13376             }
13377         }
13378       flaginfo->flags_initialized = TRUE;
13379       flaginfo->only_with_flags |= with_hex;
13380       flaginfo->not_with_flags |= without_hex;
13381     }
13382
13383   if ((flaginfo->only_with_flags & sh_flags) != flaginfo->only_with_flags)
13384     return FALSE;
13385
13386   if ((flaginfo->not_with_flags & sh_flags) != 0)
13387     return FALSE;
13388
13389   return TRUE;
13390 }
13391
13392 struct alloc_got_off_arg {
13393   bfd_vma gotoff;
13394   struct bfd_link_info *info;
13395 };
13396
13397 /* We need a special top-level link routine to convert got reference counts
13398    to real got offsets.  */
13399
13400 static bfd_boolean
13401 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
13402 {
13403   struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
13404   bfd *obfd = gofarg->info->output_bfd;
13405   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
13406
13407   if (h->got.refcount > 0)
13408     {
13409       h->got.offset = gofarg->gotoff;
13410       gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0);
13411     }
13412   else
13413     h->got.offset = (bfd_vma) -1;
13414
13415   return TRUE;
13416 }
13417
13418 /* And an accompanying bit to work out final got entry offsets once
13419    we're done.  Should be called from final_link.  */
13420
13421 bfd_boolean
13422 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
13423                                         struct bfd_link_info *info)
13424 {
13425   bfd *i;
13426   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13427   bfd_vma gotoff;
13428   struct alloc_got_off_arg gofarg;
13429
13430   BFD_ASSERT (abfd == info->output_bfd);
13431
13432   if (! is_elf_hash_table (info->hash))
13433     return FALSE;
13434
13435   /* The GOT offset is relative to the .got section, but the GOT header is
13436      put into the .got.plt section, if the backend uses it.  */
13437   if (bed->want_got_plt)
13438     gotoff = 0;
13439   else
13440     gotoff = bed->got_header_size;
13441
13442   /* Do the local .got entries first.  */
13443   for (i = info->input_bfds; i; i = i->link.next)
13444     {
13445       bfd_signed_vma *local_got;
13446       size_t j, locsymcount;
13447       Elf_Internal_Shdr *symtab_hdr;
13448
13449       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
13450         continue;
13451
13452       local_got = elf_local_got_refcounts (i);
13453       if (!local_got)
13454         continue;
13455
13456       symtab_hdr = &elf_tdata (i)->symtab_hdr;
13457       if (elf_bad_symtab (i))
13458         locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
13459       else
13460         locsymcount = symtab_hdr->sh_info;
13461
13462       for (j = 0; j < locsymcount; ++j)
13463         {
13464           if (local_got[j] > 0)
13465             {
13466               local_got[j] = gotoff;
13467               gotoff += bed->got_elt_size (abfd, info, NULL, i, j);
13468             }
13469           else
13470             local_got[j] = (bfd_vma) -1;
13471         }
13472     }
13473
13474   /* Then the global .got entries.  .plt refcounts are handled by
13475      adjust_dynamic_symbol  */
13476   gofarg.gotoff = gotoff;
13477   gofarg.info = info;
13478   elf_link_hash_traverse (elf_hash_table (info),
13479                           elf_gc_allocate_got_offsets,
13480                           &gofarg);
13481   return TRUE;
13482 }
13483
13484 /* Many folk need no more in the way of final link than this, once
13485    got entry reference counting is enabled.  */
13486
13487 bfd_boolean
13488 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
13489 {
13490   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
13491     return FALSE;
13492
13493   /* Invoke the regular ELF backend linker to do all the work.  */
13494   return bfd_elf_final_link (abfd, info);
13495 }
13496
13497 bfd_boolean
13498 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
13499 {
13500   struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
13501
13502   if (rcookie->bad_symtab)
13503     rcookie->rel = rcookie->rels;
13504
13505   for (; rcookie->rel < rcookie->relend; rcookie->rel++)
13506     {
13507       unsigned long r_symndx;
13508
13509       if (! rcookie->bad_symtab)
13510         if (rcookie->rel->r_offset > offset)
13511           return FALSE;
13512       if (rcookie->rel->r_offset != offset)
13513         continue;
13514
13515       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
13516       if (r_symndx == STN_UNDEF)
13517         return TRUE;
13518
13519       if (r_symndx >= rcookie->locsymcount
13520           || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
13521         {
13522           struct elf_link_hash_entry *h;
13523
13524           h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
13525
13526           while (h->root.type == bfd_link_hash_indirect
13527                  || h->root.type == bfd_link_hash_warning)
13528             h = (struct elf_link_hash_entry *) h->root.u.i.link;
13529
13530           if ((h->root.type == bfd_link_hash_defined
13531                || h->root.type == bfd_link_hash_defweak)
13532               && (h->root.u.def.section->owner != rcookie->abfd
13533                   || h->root.u.def.section->kept_section != NULL
13534                   || discarded_section (h->root.u.def.section)))
13535             return TRUE;
13536         }
13537       else
13538         {
13539           /* It's not a relocation against a global symbol,
13540              but it could be a relocation against a local
13541              symbol for a discarded section.  */
13542           asection *isec;
13543           Elf_Internal_Sym *isym;
13544
13545           /* Need to: get the symbol; get the section.  */
13546           isym = &rcookie->locsyms[r_symndx];
13547           isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
13548           if (isec != NULL
13549               && (isec->kept_section != NULL
13550                   || discarded_section (isec)))
13551             return TRUE;
13552         }
13553       return FALSE;
13554     }
13555   return FALSE;
13556 }
13557
13558 /* Discard unneeded references to discarded sections.
13559    Returns -1 on error, 1 if any section's size was changed, 0 if
13560    nothing changed.  This function assumes that the relocations are in
13561    sorted order, which is true for all known assemblers.  */
13562
13563 int
13564 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
13565 {
13566   struct elf_reloc_cookie cookie;
13567   asection *o;
13568   bfd *abfd;
13569   int changed = 0;
13570
13571   if (info->traditional_format
13572       || !is_elf_hash_table (info->hash))
13573     return 0;
13574
13575   o = bfd_get_section_by_name (output_bfd, ".stab");
13576   if (o != NULL)
13577     {
13578       asection *i;
13579
13580       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
13581         {
13582           if (i->size == 0
13583               || i->reloc_count == 0
13584               || i->sec_info_type != SEC_INFO_TYPE_STABS)
13585             continue;
13586
13587           abfd = i->owner;
13588           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
13589             continue;
13590
13591           if (!init_reloc_cookie_for_section (&cookie, info, i))
13592             return -1;
13593
13594           if (_bfd_discard_section_stabs (abfd, i,
13595                                           elf_section_data (i)->sec_info,
13596                                           bfd_elf_reloc_symbol_deleted_p,
13597                                           &cookie))
13598             changed = 1;
13599
13600           fini_reloc_cookie_for_section (&cookie, i);
13601         }
13602     }
13603
13604   o = NULL;
13605   if (info->eh_frame_hdr_type != COMPACT_EH_HDR)
13606     o = bfd_get_section_by_name (output_bfd, ".eh_frame");
13607   if (o != NULL)
13608     {
13609       asection *i;
13610
13611       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
13612         {
13613           if (i->size == 0)
13614             continue;
13615
13616           abfd = i->owner;
13617           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
13618             continue;
13619
13620           if (!init_reloc_cookie_for_section (&cookie, info, i))
13621             return -1;
13622
13623           _bfd_elf_parse_eh_frame (abfd, info, i, &cookie);
13624           if (_bfd_elf_discard_section_eh_frame (abfd, info, i,
13625                                                  bfd_elf_reloc_symbol_deleted_p,
13626                                                  &cookie))
13627             changed = 1;
13628
13629           fini_reloc_cookie_for_section (&cookie, i);
13630         }
13631     }
13632
13633   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
13634     {
13635       const struct elf_backend_data *bed;
13636
13637       if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
13638         continue;
13639
13640       bed = get_elf_backend_data (abfd);
13641
13642       if (bed->elf_backend_discard_info != NULL)
13643         {
13644           if (!init_reloc_cookie (&cookie, info, abfd))
13645             return -1;
13646
13647           if ((*bed->elf_backend_discard_info) (abfd, &cookie, info))
13648             changed = 1;
13649
13650           fini_reloc_cookie (&cookie, abfd);
13651         }
13652     }
13653
13654   if (info->eh_frame_hdr_type == COMPACT_EH_HDR)
13655     _bfd_elf_end_eh_frame_parsing (info);
13656
13657   if (info->eh_frame_hdr_type
13658       && !bfd_link_relocatable (info)
13659       && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
13660     changed = 1;
13661
13662   return changed;
13663 }
13664
13665 bfd_boolean
13666 _bfd_elf_section_already_linked (bfd *abfd,
13667                                  asection *sec,
13668                                  struct bfd_link_info *info)
13669 {
13670   flagword flags;
13671   const char *name, *key;
13672   struct bfd_section_already_linked *l;
13673   struct bfd_section_already_linked_hash_entry *already_linked_list;
13674
13675   if (sec->output_section == bfd_abs_section_ptr)
13676     return FALSE;
13677
13678   flags = sec->flags;
13679
13680   /* Return if it isn't a linkonce section.  A comdat group section
13681      also has SEC_LINK_ONCE set.  */
13682   if ((flags & SEC_LINK_ONCE) == 0)
13683     return FALSE;
13684
13685   /* Don't put group member sections on our list of already linked
13686      sections.  They are handled as a group via their group section.  */
13687   if (elf_sec_group (sec) != NULL)
13688     return FALSE;
13689
13690   /* For a SHT_GROUP section, use the group signature as the key.  */
13691   name = sec->name;
13692   if ((flags & SEC_GROUP) != 0
13693       && elf_next_in_group (sec) != NULL
13694       && elf_group_name (elf_next_in_group (sec)) != NULL)
13695     key = elf_group_name (elf_next_in_group (sec));
13696   else
13697     {
13698       /* Otherwise we should have a .gnu.linkonce.<type>.<key> section.  */
13699       if (CONST_STRNEQ (name, ".gnu.linkonce.")
13700           && (key = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
13701         key++;
13702       else
13703         /* Must be a user linkonce section that doesn't follow gcc's
13704            naming convention.  In this case we won't be matching
13705            single member groups.  */
13706         key = name;
13707     }
13708
13709   already_linked_list = bfd_section_already_linked_table_lookup (key);
13710
13711   for (l = already_linked_list->entry; l != NULL; l = l->next)
13712     {
13713       /* We may have 2 different types of sections on the list: group
13714          sections with a signature of <key> (<key> is some string),
13715          and linkonce sections named .gnu.linkonce.<type>.<key>.
13716          Match like sections.  LTO plugin sections are an exception.
13717          They are always named .gnu.linkonce.t.<key> and match either
13718          type of section.  */
13719       if (((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
13720            && ((flags & SEC_GROUP) != 0
13721                || strcmp (name, l->sec->name) == 0))
13722           || (l->sec->owner->flags & BFD_PLUGIN) != 0)
13723         {
13724           /* The section has already been linked.  See if we should
13725              issue a warning.  */
13726           if (!_bfd_handle_already_linked (sec, l, info))
13727             return FALSE;
13728
13729           if (flags & SEC_GROUP)
13730             {
13731               asection *first = elf_next_in_group (sec);
13732               asection *s = first;
13733
13734               while (s != NULL)
13735                 {
13736                   s->output_section = bfd_abs_section_ptr;
13737                   /* Record which group discards it.  */
13738                   s->kept_section = l->sec;
13739                   s = elf_next_in_group (s);
13740                   /* These lists are circular.  */
13741                   if (s == first)
13742                     break;
13743                 }
13744             }
13745
13746           return TRUE;
13747         }
13748     }
13749
13750   /* A single member comdat group section may be discarded by a
13751      linkonce section and vice versa.  */
13752   if ((flags & SEC_GROUP) != 0)
13753     {
13754       asection *first = elf_next_in_group (sec);
13755
13756       if (first != NULL && elf_next_in_group (first) == first)
13757         /* Check this single member group against linkonce sections.  */
13758         for (l = already_linked_list->entry; l != NULL; l = l->next)
13759           if ((l->sec->flags & SEC_GROUP) == 0
13760               && bfd_elf_match_symbols_in_sections (l->sec, first, info))
13761             {
13762               first->output_section = bfd_abs_section_ptr;
13763               first->kept_section = l->sec;
13764               sec->output_section = bfd_abs_section_ptr;
13765               break;
13766             }
13767     }
13768   else
13769     /* Check this linkonce section against single member groups.  */
13770     for (l = already_linked_list->entry; l != NULL; l = l->next)
13771       if (l->sec->flags & SEC_GROUP)
13772         {
13773           asection *first = elf_next_in_group (l->sec);
13774
13775           if (first != NULL
13776               && elf_next_in_group (first) == first
13777               && bfd_elf_match_symbols_in_sections (first, sec, info))
13778             {
13779               sec->output_section = bfd_abs_section_ptr;
13780               sec->kept_section = first;
13781               break;
13782             }
13783         }
13784
13785   /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F'
13786      referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4
13787      specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce'
13788      prefix) instead.  `.gnu.linkonce.r.*' were the `.rodata' part of its
13789      matching `.gnu.linkonce.t.*'.  If `.gnu.linkonce.r.F' is not discarded
13790      but its `.gnu.linkonce.t.F' is discarded means we chose one-only
13791      `.gnu.linkonce.t.F' section from a different bfd not requiring any
13792      `.gnu.linkonce.r.F'.  Thus `.gnu.linkonce.r.F' should be discarded.
13793      The reverse order cannot happen as there is never a bfd with only the
13794      `.gnu.linkonce.r.F' section.  The order of sections in a bfd does not
13795      matter as here were are looking only for cross-bfd sections.  */
13796
13797   if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
13798     for (l = already_linked_list->entry; l != NULL; l = l->next)
13799       if ((l->sec->flags & SEC_GROUP) == 0
13800           && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
13801         {
13802           if (abfd != l->sec->owner)
13803             sec->output_section = bfd_abs_section_ptr;
13804           break;
13805         }
13806
13807   /* This is the first section with this name.  Record it.  */
13808   if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
13809     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
13810   return sec->output_section == bfd_abs_section_ptr;
13811 }
13812
13813 bfd_boolean
13814 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
13815 {
13816   return sym->st_shndx == SHN_COMMON;
13817 }
13818
13819 unsigned int
13820 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
13821 {
13822   return SHN_COMMON;
13823 }
13824
13825 asection *
13826 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
13827 {
13828   return bfd_com_section_ptr;
13829 }
13830
13831 bfd_vma
13832 _bfd_elf_default_got_elt_size (bfd *abfd,
13833                                struct bfd_link_info *info ATTRIBUTE_UNUSED,
13834                                struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
13835                                bfd *ibfd ATTRIBUTE_UNUSED,
13836                                unsigned long symndx ATTRIBUTE_UNUSED)
13837 {
13838   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13839   return bed->s->arch_size / 8;
13840 }
13841
13842 /* Routines to support the creation of dynamic relocs.  */
13843
13844 /* Returns the name of the dynamic reloc section associated with SEC.  */
13845
13846 static const char *
13847 get_dynamic_reloc_section_name (bfd *       abfd,
13848                                 asection *  sec,
13849                                 bfd_boolean is_rela)
13850 {
13851   char *name;
13852   const char *old_name = bfd_get_section_name (NULL, sec);
13853   const char *prefix = is_rela ? ".rela" : ".rel";
13854
13855   if (old_name == NULL)
13856     return NULL;
13857
13858   name = bfd_alloc (abfd, strlen (prefix) + strlen (old_name) + 1);
13859   sprintf (name, "%s%s", prefix, old_name);
13860
13861   return name;
13862 }
13863
13864 /* Returns the dynamic reloc section associated with SEC.
13865    If necessary compute the name of the dynamic reloc section based
13866    on SEC's name (looked up in ABFD's string table) and the setting
13867    of IS_RELA.  */
13868
13869 asection *
13870 _bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
13871                                     asection *  sec,
13872                                     bfd_boolean is_rela)
13873 {
13874   asection * reloc_sec = elf_section_data (sec)->sreloc;
13875
13876   if (reloc_sec == NULL)
13877     {
13878       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
13879
13880       if (name != NULL)
13881         {
13882           reloc_sec = bfd_get_linker_section (abfd, name);
13883
13884           if (reloc_sec != NULL)
13885             elf_section_data (sec)->sreloc = reloc_sec;
13886         }
13887     }
13888
13889   return reloc_sec;
13890 }
13891
13892 /* Returns the dynamic reloc section associated with SEC.  If the
13893    section does not exist it is created and attached to the DYNOBJ
13894    bfd and stored in the SRELOC field of SEC's elf_section_data
13895    structure.
13896
13897    ALIGNMENT is the alignment for the newly created section and
13898    IS_RELA defines whether the name should be .rela.<SEC's name>
13899    or .rel.<SEC's name>.  The section name is looked up in the
13900    string table associated with ABFD.  */
13901
13902 asection *
13903 _bfd_elf_make_dynamic_reloc_section (asection *sec,
13904                                      bfd *dynobj,
13905                                      unsigned int alignment,
13906                                      bfd *abfd,
13907                                      bfd_boolean is_rela)
13908 {
13909   asection * reloc_sec = elf_section_data (sec)->sreloc;
13910
13911   if (reloc_sec == NULL)
13912     {
13913       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
13914
13915       if (name == NULL)
13916         return NULL;
13917
13918       reloc_sec = bfd_get_linker_section (dynobj, name);
13919
13920       if (reloc_sec == NULL)
13921         {
13922           flagword flags = (SEC_HAS_CONTENTS | SEC_READONLY
13923                             | SEC_IN_MEMORY | SEC_LINKER_CREATED);
13924           if ((sec->flags & SEC_ALLOC) != 0)
13925             flags |= SEC_ALLOC | SEC_LOAD;
13926
13927           reloc_sec = bfd_make_section_anyway_with_flags (dynobj, name, flags);
13928           if (reloc_sec != NULL)
13929             {
13930               /* _bfd_elf_get_sec_type_attr chooses a section type by
13931                  name.  Override as it may be wrong, eg. for a user
13932                  section named "auto" we'll get ".relauto" which is
13933                  seen to be a .rela section.  */
13934               elf_section_type (reloc_sec) = is_rela ? SHT_RELA : SHT_REL;
13935               if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
13936                 reloc_sec = NULL;
13937             }
13938         }
13939
13940       elf_section_data (sec)->sreloc = reloc_sec;
13941     }
13942
13943   return reloc_sec;
13944 }
13945
13946 /* Copy the ELF symbol type and other attributes for a linker script
13947    assignment from HSRC to HDEST.  Generally this should be treated as
13948    if we found a strong non-dynamic definition for HDEST (except that
13949    ld ignores multiple definition errors).  */
13950 void
13951 _bfd_elf_copy_link_hash_symbol_type (bfd *abfd,
13952                                      struct bfd_link_hash_entry *hdest,
13953                                      struct bfd_link_hash_entry *hsrc)
13954 {
13955   struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *) hdest;
13956   struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *) hsrc;
13957   Elf_Internal_Sym isym;
13958
13959   ehdest->type = ehsrc->type;
13960   ehdest->target_internal = ehsrc->target_internal;
13961
13962   isym.st_other = ehsrc->other;
13963   elf_merge_st_other (abfd, ehdest, &isym, NULL, TRUE, FALSE);
13964 }
13965
13966 /* Append a RELA relocation REL to section S in BFD.  */
13967
13968 void
13969 elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
13970 {
13971   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13972   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
13973   BFD_ASSERT (loc + bed->s->sizeof_rela <= s->contents + s->size);
13974   bed->s->swap_reloca_out (abfd, rel, loc);
13975 }
13976
13977 /* Append a REL relocation REL to section S in BFD.  */
13978
13979 void
13980 elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
13981 {
13982   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13983   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rel);
13984   BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size);
13985   bed->s->swap_reloc_out (abfd, rel, loc);
13986 }