PR ld/21334: Always call `_bfd_elf_link_renumber_dynsyms' if required
[external/binutils.git] / bfd / elflink.c
1 /* ELF linking support for BFD.
2    Copyright (C) 1995-2017 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       bh = &h->root;
123     }
124   else
125     bh = NULL;
126
127   bed = get_elf_backend_data (abfd);
128   if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL,
129                                          sec, 0, NULL, FALSE, bed->collect,
130                                          &bh))
131     return NULL;
132   h = (struct elf_link_hash_entry *) bh;
133   BFD_ASSERT (h != NULL);
134   h->def_regular = 1;
135   h->non_elf = 0;
136   h->root.linker_def = 1;
137   h->type = STT_OBJECT;
138   if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
139     h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
140
141   (*bed->elf_backend_hide_symbol) (info, h, TRUE);
142   return h;
143 }
144
145 bfd_boolean
146 _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
147 {
148   flagword flags;
149   asection *s;
150   struct elf_link_hash_entry *h;
151   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
152   struct elf_link_hash_table *htab = elf_hash_table (info);
153
154   /* This function may be called more than once.  */
155   if (htab->sgot != NULL)
156     return TRUE;
157
158   flags = bed->dynamic_sec_flags;
159
160   s = bfd_make_section_anyway_with_flags (abfd,
161                                           (bed->rela_plts_and_copies_p
162                                            ? ".rela.got" : ".rel.got"),
163                                           (bed->dynamic_sec_flags
164                                            | SEC_READONLY));
165   if (s == NULL
166       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
167     return FALSE;
168   htab->srelgot = s;
169
170   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
171   if (s == NULL
172       || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
173     return FALSE;
174   htab->sgot = s;
175
176   if (bed->want_got_plt)
177     {
178       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
179       if (s == NULL
180           || !bfd_set_section_alignment (abfd, s,
181                                          bed->s->log_file_align))
182         return FALSE;
183       htab->sgotplt = s;
184     }
185
186   /* The first bit of the global offset table is the header.  */
187   s->size += bed->got_header_size;
188
189   if (bed->want_got_sym)
190     {
191       /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
192          (or .got.plt) section.  We don't do this in the linker script
193          because we don't want to define the symbol if we are not creating
194          a global offset table.  */
195       h = _bfd_elf_define_linkage_sym (abfd, info, s,
196                                        "_GLOBAL_OFFSET_TABLE_");
197       elf_hash_table (info)->hgot = h;
198       if (h == NULL)
199         return FALSE;
200     }
201
202   return TRUE;
203 }
204 \f
205 /* Create a strtab to hold the dynamic symbol names.  */
206 static bfd_boolean
207 _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info)
208 {
209   struct elf_link_hash_table *hash_table;
210
211   hash_table = elf_hash_table (info);
212   if (hash_table->dynobj == NULL)
213     {
214       /* We may not set dynobj, an input file holding linker created
215          dynamic sections to abfd, which may be a dynamic object with
216          its own dynamic sections.  We need to find a normal input file
217          to hold linker created sections if possible.  */
218       if ((abfd->flags & (DYNAMIC | BFD_PLUGIN)) != 0)
219         {
220           bfd *ibfd;
221           for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
222             if ((ibfd->flags
223                  & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0)
224               {
225                 abfd = ibfd;
226                 break;
227               }
228         }
229       hash_table->dynobj = abfd;
230     }
231
232   if (hash_table->dynstr == NULL)
233     {
234       hash_table->dynstr = _bfd_elf_strtab_init ();
235       if (hash_table->dynstr == NULL)
236         return FALSE;
237     }
238   return TRUE;
239 }
240
241 /* Create some sections which will be filled in with dynamic linking
242    information.  ABFD is an input file which requires dynamic sections
243    to be created.  The dynamic sections take up virtual memory space
244    when the final executable is run, so we need to create them before
245    addresses are assigned to the output sections.  We work out the
246    actual contents and size of these sections later.  */
247
248 bfd_boolean
249 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
250 {
251   flagword flags;
252   asection *s;
253   const struct elf_backend_data *bed;
254   struct elf_link_hash_entry *h;
255
256   if (! is_elf_hash_table (info->hash))
257     return FALSE;
258
259   if (elf_hash_table (info)->dynamic_sections_created)
260     return TRUE;
261
262   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
263     return FALSE;
264
265   abfd = elf_hash_table (info)->dynobj;
266   bed = get_elf_backend_data (abfd);
267
268   flags = bed->dynamic_sec_flags;
269
270   /* A dynamically linked executable has a .interp section, but a
271      shared library does not.  */
272   if (bfd_link_executable (info) && !info->nointerp)
273     {
274       s = bfd_make_section_anyway_with_flags (abfd, ".interp",
275                                               flags | SEC_READONLY);
276       if (s == NULL)
277         return FALSE;
278     }
279
280   /* Create sections to hold version informations.  These are removed
281      if they are not needed.  */
282   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_d",
283                                           flags | SEC_READONLY);
284   if (s == NULL
285       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
286     return FALSE;
287
288   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version",
289                                           flags | SEC_READONLY);
290   if (s == NULL
291       || ! bfd_set_section_alignment (abfd, s, 1))
292     return FALSE;
293
294   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_r",
295                                           flags | SEC_READONLY);
296   if (s == NULL
297       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
298     return FALSE;
299
300   s = bfd_make_section_anyway_with_flags (abfd, ".dynsym",
301                                           flags | SEC_READONLY);
302   if (s == NULL
303       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
304     return FALSE;
305   elf_hash_table (info)->dynsym = s;
306
307   s = bfd_make_section_anyway_with_flags (abfd, ".dynstr",
308                                           flags | SEC_READONLY);
309   if (s == NULL)
310     return FALSE;
311
312   s = bfd_make_section_anyway_with_flags (abfd, ".dynamic", flags);
313   if (s == NULL
314       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
315     return FALSE;
316
317   /* The special symbol _DYNAMIC is always set to the start of the
318      .dynamic section.  We could set _DYNAMIC in a linker script, but we
319      only want to define it if we are, in fact, creating a .dynamic
320      section.  We don't want to define it if there is no .dynamic
321      section, since on some ELF platforms the start up code examines it
322      to decide how to initialize the process.  */
323   h = _bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC");
324   elf_hash_table (info)->hdynamic = h;
325   if (h == NULL)
326     return FALSE;
327
328   if (info->emit_hash)
329     {
330       s = bfd_make_section_anyway_with_flags (abfd, ".hash",
331                                               flags | SEC_READONLY);
332       if (s == NULL
333           || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
334         return FALSE;
335       elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
336     }
337
338   if (info->emit_gnu_hash)
339     {
340       s = bfd_make_section_anyway_with_flags (abfd, ".gnu.hash",
341                                               flags | SEC_READONLY);
342       if (s == NULL
343           || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
344         return FALSE;
345       /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section:
346          4 32-bit words followed by variable count of 64-bit words, then
347          variable count of 32-bit words.  */
348       if (bed->s->arch_size == 64)
349         elf_section_data (s)->this_hdr.sh_entsize = 0;
350       else
351         elf_section_data (s)->this_hdr.sh_entsize = 4;
352     }
353
354   /* Let the backend create the rest of the sections.  This lets the
355      backend set the right flags.  The backend will normally create
356      the .got and .plt sections.  */
357   if (bed->elf_backend_create_dynamic_sections == NULL
358       || ! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
359     return FALSE;
360
361   elf_hash_table (info)->dynamic_sections_created = TRUE;
362
363   return TRUE;
364 }
365
366 /* Create dynamic sections when linking against a dynamic object.  */
367
368 bfd_boolean
369 _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
370 {
371   flagword flags, pltflags;
372   struct elf_link_hash_entry *h;
373   asection *s;
374   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
375   struct elf_link_hash_table *htab = elf_hash_table (info);
376
377   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
378      .rel[a].bss sections.  */
379   flags = bed->dynamic_sec_flags;
380
381   pltflags = flags;
382   if (bed->plt_not_loaded)
383     /* We do not clear SEC_ALLOC here because we still want the OS to
384        allocate space for the section; it's just that there's nothing
385        to read in from the object file.  */
386     pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS);
387   else
388     pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD;
389   if (bed->plt_readonly)
390     pltflags |= SEC_READONLY;
391
392   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
393   if (s == NULL
394       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
395     return FALSE;
396   htab->splt = s;
397
398   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
399      .plt section.  */
400   if (bed->want_plt_sym)
401     {
402       h = _bfd_elf_define_linkage_sym (abfd, info, s,
403                                        "_PROCEDURE_LINKAGE_TABLE_");
404       elf_hash_table (info)->hplt = h;
405       if (h == NULL)
406         return FALSE;
407     }
408
409   s = bfd_make_section_anyway_with_flags (abfd,
410                                           (bed->rela_plts_and_copies_p
411                                            ? ".rela.plt" : ".rel.plt"),
412                                           flags | SEC_READONLY);
413   if (s == NULL
414       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
415     return FALSE;
416   htab->srelplt = s;
417
418   if (! _bfd_elf_create_got_section (abfd, info))
419     return FALSE;
420
421   if (bed->want_dynbss)
422     {
423       /* The .dynbss section is a place to put symbols which are defined
424          by dynamic objects, are referenced by regular objects, and are
425          not functions.  We must allocate space for them in the process
426          image and use a R_*_COPY reloc to tell the dynamic linker to
427          initialize them at run time.  The linker script puts the .dynbss
428          section into the .bss section of the final image.  */
429       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
430                                               SEC_ALLOC | SEC_LINKER_CREATED);
431       if (s == NULL)
432         return FALSE;
433       htab->sdynbss = s;
434
435       if (bed->want_dynrelro)
436         {
437           /* Similarly, but for symbols that were originally in read-only
438              sections.  This section doesn't really need to have contents,
439              but make it like other .data.rel.ro sections.  */
440           s = bfd_make_section_anyway_with_flags (abfd, ".data.rel.ro",
441                                                   flags);
442           if (s == NULL)
443             return FALSE;
444           htab->sdynrelro = s;
445         }
446
447       /* The .rel[a].bss section holds copy relocs.  This section is not
448          normally needed.  We need to create it here, though, so that the
449          linker will map it to an output section.  We can't just create it
450          only if we need it, because we will not know whether we need it
451          until we have seen all the input files, and the first time the
452          main linker code calls BFD after examining all the input files
453          (size_dynamic_sections) the input sections have already been
454          mapped to the output sections.  If the section turns out not to
455          be needed, we can discard it later.  We will never need this
456          section when generating a shared object, since they do not use
457          copy relocs.  */
458       if (bfd_link_executable (info))
459         {
460           s = bfd_make_section_anyway_with_flags (abfd,
461                                                   (bed->rela_plts_and_copies_p
462                                                    ? ".rela.bss" : ".rel.bss"),
463                                                   flags | SEC_READONLY);
464           if (s == NULL
465               || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
466             return FALSE;
467           htab->srelbss = s;
468
469           if (bed->want_dynrelro)
470             {
471               s = (bfd_make_section_anyway_with_flags
472                    (abfd, (bed->rela_plts_and_copies_p
473                            ? ".rela.data.rel.ro" : ".rel.data.rel.ro"),
474                     flags | SEC_READONLY));
475               if (s == NULL
476                   || ! bfd_set_section_alignment (abfd, s,
477                                                   bed->s->log_file_align))
478                 return FALSE;
479               htab->sreldynrelro = s;
480             }
481         }
482     }
483
484   return TRUE;
485 }
486 \f
487 /* Record a new dynamic symbol.  We record the dynamic symbols as we
488    read the input files, since we need to have a list of all of them
489    before we can determine the final sizes of the output sections.
490    Note that we may actually call this function even though we are not
491    going to output any dynamic symbols; in some cases we know that a
492    symbol should be in the dynamic symbol table, but only if there is
493    one.  */
494
495 bfd_boolean
496 bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
497                                     struct elf_link_hash_entry *h)
498 {
499   if (h->dynindx == -1)
500     {
501       struct elf_strtab_hash *dynstr;
502       char *p;
503       const char *name;
504       size_t indx;
505
506       /* XXX: The ABI draft says the linker must turn hidden and
507          internal symbols into STB_LOCAL symbols when producing the
508          DSO. However, if ld.so honors st_other in the dynamic table,
509          this would not be necessary.  */
510       switch (ELF_ST_VISIBILITY (h->other))
511         {
512         case STV_INTERNAL:
513         case STV_HIDDEN:
514           if (h->root.type != bfd_link_hash_undefined
515               && h->root.type != bfd_link_hash_undefweak)
516             {
517               h->forced_local = 1;
518               if (!elf_hash_table (info)->is_relocatable_executable)
519                 return TRUE;
520             }
521
522         default:
523           break;
524         }
525
526       h->dynindx = elf_hash_table (info)->dynsymcount;
527       ++elf_hash_table (info)->dynsymcount;
528
529       dynstr = elf_hash_table (info)->dynstr;
530       if (dynstr == NULL)
531         {
532           /* Create a strtab to hold the dynamic symbol names.  */
533           elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
534           if (dynstr == NULL)
535             return FALSE;
536         }
537
538       /* We don't put any version information in the dynamic string
539          table.  */
540       name = h->root.root.string;
541       p = strchr (name, ELF_VER_CHR);
542       if (p != NULL)
543         /* We know that the p points into writable memory.  In fact,
544            there are only a few symbols that have read-only names, being
545            those like _GLOBAL_OFFSET_TABLE_ that are created specially
546            by the backends.  Most symbols will have names pointing into
547            an ELF string table read from a file, or to objalloc memory.  */
548         *p = 0;
549
550       indx = _bfd_elf_strtab_add (dynstr, name, p != NULL);
551
552       if (p != NULL)
553         *p = ELF_VER_CHR;
554
555       if (indx == (size_t) -1)
556         return FALSE;
557       h->dynstr_index = indx;
558     }
559
560   return TRUE;
561 }
562 \f
563 /* Mark a symbol dynamic.  */
564
565 static void
566 bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info,
567                                   struct elf_link_hash_entry *h,
568                                   Elf_Internal_Sym *sym)
569 {
570   struct bfd_elf_dynamic_list *d = info->dynamic_list;
571
572   /* It may be called more than once on the same H.  */
573   if(h->dynamic || bfd_link_relocatable (info))
574     return;
575
576   if ((info->dynamic_data
577        && (h->type == STT_OBJECT
578            || h->type == STT_COMMON
579            || (sym != NULL
580                && (ELF_ST_TYPE (sym->st_info) == STT_OBJECT
581                    || ELF_ST_TYPE (sym->st_info) == STT_COMMON))))
582       || (d != NULL
583           && h->root.type == bfd_link_hash_new
584           && (*d->match) (&d->head, NULL, h->root.root.string)))
585     h->dynamic = 1;
586 }
587
588 /* Record an assignment to a symbol made by a linker script.  We need
589    this in case some dynamic object refers to this symbol.  */
590
591 bfd_boolean
592 bfd_elf_record_link_assignment (bfd *output_bfd,
593                                 struct bfd_link_info *info,
594                                 const char *name,
595                                 bfd_boolean provide,
596                                 bfd_boolean hidden)
597 {
598   struct elf_link_hash_entry *h, *hv;
599   struct elf_link_hash_table *htab;
600   const struct elf_backend_data *bed;
601
602   if (!is_elf_hash_table (info->hash))
603     return TRUE;
604
605   htab = elf_hash_table (info);
606   h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE);
607   if (h == NULL)
608     return provide;
609
610   if (h->root.type == bfd_link_hash_warning)
611     h = (struct elf_link_hash_entry *) h->root.u.i.link;
612
613   if (h->versioned == unknown)
614     {
615       /* Set versioned if symbol version is unknown.  */
616       char *version = strrchr (name, ELF_VER_CHR);
617       if (version)
618         {
619           if (version > name && version[-1] != ELF_VER_CHR)
620             h->versioned = versioned_hidden;
621           else
622             h->versioned = versioned;
623         }
624     }
625
626   switch (h->root.type)
627     {
628     case bfd_link_hash_defined:
629     case bfd_link_hash_defweak:
630     case bfd_link_hash_common:
631       break;
632     case bfd_link_hash_undefweak:
633     case bfd_link_hash_undefined:
634       /* Since we're defining the symbol, don't let it seem to have not
635          been defined.  record_dynamic_symbol and size_dynamic_sections
636          may depend on this.  */
637       h->root.type = bfd_link_hash_new;
638       if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root)
639         bfd_link_repair_undef_list (&htab->root);
640       break;
641     case bfd_link_hash_new:
642       bfd_elf_link_mark_dynamic_symbol (info, h, NULL);
643       h->non_elf = 0;
644       break;
645     case bfd_link_hash_indirect:
646       /* We had a versioned symbol in a dynamic library.  We make the
647          the versioned symbol point to this one.  */
648       bed = get_elf_backend_data (output_bfd);
649       hv = h;
650       while (hv->root.type == bfd_link_hash_indirect
651              || hv->root.type == bfd_link_hash_warning)
652         hv = (struct elf_link_hash_entry *) hv->root.u.i.link;
653       /* We don't need to update h->root.u since linker will set them
654          later.  */
655       h->root.type = bfd_link_hash_undefined;
656       hv->root.type = bfd_link_hash_indirect;
657       hv->root.u.i.link = (struct bfd_link_hash_entry *) h;
658       (*bed->elf_backend_copy_indirect_symbol) (info, h, hv);
659       break;
660     default:
661       BFD_FAIL ();
662       return FALSE;
663     }
664
665   /* If this symbol is being provided by the linker script, and it is
666      currently defined by a dynamic object, but not by a regular
667      object, then mark it as undefined so that the generic linker will
668      force the correct value.  */
669   if (provide
670       && h->def_dynamic
671       && !h->def_regular)
672     h->root.type = bfd_link_hash_undefined;
673
674   /* If this symbol is not being provided by the linker script, and it is
675      currently defined by a dynamic object, but not by a regular object,
676      then clear out any version information because the symbol will not be
677      associated with the dynamic object any more.  */
678   if (!provide
679       && h->def_dynamic
680       && !h->def_regular)
681     h->verinfo.verdef = NULL;
682
683   /* Make sure this symbol is not garbage collected.  */
684   h->mark = 1;
685
686   h->def_regular = 1;
687
688   if (hidden)
689     {
690       bed = get_elf_backend_data (output_bfd);
691       if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
692         h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
693       (*bed->elf_backend_hide_symbol) (info, h, TRUE);
694     }
695
696   /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects
697      and executables.  */
698   if (!bfd_link_relocatable (info)
699       && h->dynindx != -1
700       && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
701           || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL))
702     h->forced_local = 1;
703
704   if ((h->def_dynamic
705        || h->ref_dynamic
706        || bfd_link_dll (info)
707        || elf_hash_table (info)->is_relocatable_executable)
708       && h->dynindx == -1)
709     {
710       if (! bfd_elf_link_record_dynamic_symbol (info, h))
711         return FALSE;
712
713       /* If this is a weak defined symbol, and we know a corresponding
714          real symbol from the same dynamic object, make sure the real
715          symbol is also made into a dynamic symbol.  */
716       if (h->u.weakdef != NULL
717           && h->u.weakdef->dynindx == -1)
718         {
719           if (! bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
720             return FALSE;
721         }
722     }
723
724   return TRUE;
725 }
726
727 /* Record a new local dynamic symbol.  Returns 0 on failure, 1 on
728    success, and 2 on a failure caused by attempting to record a symbol
729    in a discarded section, eg. a discarded link-once section symbol.  */
730
731 int
732 bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info,
733                                           bfd *input_bfd,
734                                           long input_indx)
735 {
736   bfd_size_type amt;
737   struct elf_link_local_dynamic_entry *entry;
738   struct elf_link_hash_table *eht;
739   struct elf_strtab_hash *dynstr;
740   size_t dynstr_index;
741   char *name;
742   Elf_External_Sym_Shndx eshndx;
743   char esym[sizeof (Elf64_External_Sym)];
744
745   if (! is_elf_hash_table (info->hash))
746     return 0;
747
748   /* See if the entry exists already.  */
749   for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
750     if (entry->input_bfd == input_bfd && entry->input_indx == input_indx)
751       return 1;
752
753   amt = sizeof (*entry);
754   entry = (struct elf_link_local_dynamic_entry *) bfd_alloc (input_bfd, amt);
755   if (entry == NULL)
756     return 0;
757
758   /* Go find the symbol, so that we can find it's name.  */
759   if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr,
760                              1, input_indx, &entry->isym, esym, &eshndx))
761     {
762       bfd_release (input_bfd, entry);
763       return 0;
764     }
765
766   if (entry->isym.st_shndx != SHN_UNDEF
767       && entry->isym.st_shndx < SHN_LORESERVE)
768     {
769       asection *s;
770
771       s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx);
772       if (s == NULL || bfd_is_abs_section (s->output_section))
773         {
774           /* We can still bfd_release here as nothing has done another
775              bfd_alloc.  We can't do this later in this function.  */
776           bfd_release (input_bfd, entry);
777           return 2;
778         }
779     }
780
781   name = (bfd_elf_string_from_elf_section
782           (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link,
783            entry->isym.st_name));
784
785   dynstr = elf_hash_table (info)->dynstr;
786   if (dynstr == NULL)
787     {
788       /* Create a strtab to hold the dynamic symbol names.  */
789       elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
790       if (dynstr == NULL)
791         return 0;
792     }
793
794   dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE);
795   if (dynstr_index == (size_t) -1)
796     return 0;
797   entry->isym.st_name = dynstr_index;
798
799   eht = elf_hash_table (info);
800
801   entry->next = eht->dynlocal;
802   eht->dynlocal = entry;
803   entry->input_bfd = input_bfd;
804   entry->input_indx = input_indx;
805   eht->dynsymcount++;
806
807   /* Whatever binding the symbol had before, it's now local.  */
808   entry->isym.st_info
809     = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info));
810
811   /* The dynindx will be set at the end of size_dynamic_sections.  */
812
813   return 1;
814 }
815
816 /* Return the dynindex of a local dynamic symbol.  */
817
818 long
819 _bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info,
820                                     bfd *input_bfd,
821                                     long input_indx)
822 {
823   struct elf_link_local_dynamic_entry *e;
824
825   for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
826     if (e->input_bfd == input_bfd && e->input_indx == input_indx)
827       return e->dynindx;
828   return -1;
829 }
830
831 /* This function is used to renumber the dynamic symbols, if some of
832    them are removed because they are marked as local.  This is called
833    via elf_link_hash_traverse.  */
834
835 static bfd_boolean
836 elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h,
837                                       void *data)
838 {
839   size_t *count = (size_t *) data;
840
841   if (h->forced_local)
842     return TRUE;
843
844   if (h->dynindx != -1)
845     h->dynindx = ++(*count);
846
847   return TRUE;
848 }
849
850
851 /* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with
852    STB_LOCAL binding.  */
853
854 static bfd_boolean
855 elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h,
856                                             void *data)
857 {
858   size_t *count = (size_t *) data;
859
860   if (!h->forced_local)
861     return TRUE;
862
863   if (h->dynindx != -1)
864     h->dynindx = ++(*count);
865
866   return TRUE;
867 }
868
869 /* Return true if the dynamic symbol for a given section should be
870    omitted when creating a shared library.  */
871 bfd_boolean
872 _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
873                                    struct bfd_link_info *info,
874                                    asection *p)
875 {
876   struct elf_link_hash_table *htab;
877   asection *ip;
878
879   switch (elf_section_data (p)->this_hdr.sh_type)
880     {
881     case SHT_PROGBITS:
882     case SHT_NOBITS:
883       /* If sh_type is yet undecided, assume it could be
884          SHT_PROGBITS/SHT_NOBITS.  */
885     case SHT_NULL:
886       htab = elf_hash_table (info);
887       if (p == htab->tls_sec)
888         return FALSE;
889
890       if (htab->text_index_section != NULL)
891         return p != htab->text_index_section && p != htab->data_index_section;
892
893       return (htab->dynobj != NULL
894               && (ip = bfd_get_linker_section (htab->dynobj, p->name)) != NULL
895               && ip->output_section == p);
896
897       /* There shouldn't be section relative relocations
898          against any other section.  */
899     default:
900       return TRUE;
901     }
902 }
903
904 /* Assign dynsym indices.  In a shared library we generate a section
905    symbol for each output section, which come first.  Next come symbols
906    which have been forced to local binding.  Then all of the back-end
907    allocated local dynamic syms, followed by the rest of the global
908    symbols.  */
909
910 static unsigned long
911 _bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
912                                 struct bfd_link_info *info,
913                                 unsigned long *section_sym_count)
914 {
915   unsigned long dynsymcount = 0;
916
917   if (bfd_link_pic (info)
918       || elf_hash_table (info)->is_relocatable_executable)
919     {
920       const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
921       asection *p;
922       for (p = output_bfd->sections; p ; p = p->next)
923         if ((p->flags & SEC_EXCLUDE) == 0
924             && (p->flags & SEC_ALLOC) != 0
925             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
926           elf_section_data (p)->dynindx = ++dynsymcount;
927         else
928           elf_section_data (p)->dynindx = 0;
929     }
930   *section_sym_count = dynsymcount;
931
932   elf_link_hash_traverse (elf_hash_table (info),
933                           elf_link_renumber_local_hash_table_dynsyms,
934                           &dynsymcount);
935
936   if (elf_hash_table (info)->dynlocal)
937     {
938       struct elf_link_local_dynamic_entry *p;
939       for (p = elf_hash_table (info)->dynlocal; p ; p = p->next)
940         p->dynindx = ++dynsymcount;
941     }
942   elf_hash_table (info)->local_dynsymcount = dynsymcount;
943
944   elf_link_hash_traverse (elf_hash_table (info),
945                           elf_link_renumber_hash_table_dynsyms,
946                           &dynsymcount);
947
948   /* There is an unused NULL entry at the head of the table which we
949      must account for in our count even if the table is empty since it
950      is intended for the mandatory DT_SYMTAB tag (.dynsym section) in
951      .dynamic section.  */
952   dynsymcount++;
953
954   elf_hash_table (info)->dynsymcount = dynsymcount;
955   return dynsymcount;
956 }
957
958 /* Merge st_other field.  */
959
960 static void
961 elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h,
962                     const Elf_Internal_Sym *isym, asection *sec,
963                     bfd_boolean definition, bfd_boolean dynamic)
964 {
965   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
966
967   /* If st_other has a processor-specific meaning, specific
968      code might be needed here.  */
969   if (bed->elf_backend_merge_symbol_attribute)
970     (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
971                                                 dynamic);
972
973   if (!dynamic)
974     {
975       unsigned symvis = ELF_ST_VISIBILITY (isym->st_other);
976       unsigned hvis = ELF_ST_VISIBILITY (h->other);
977
978       /* Keep the most constraining visibility.  Leave the remainder
979          of the st_other field to elf_backend_merge_symbol_attribute.  */
980       if (symvis - 1 < hvis - 1)
981         h->other = symvis | (h->other & ~ELF_ST_VISIBILITY (-1));
982     }
983   else if (definition
984            && ELF_ST_VISIBILITY (isym->st_other) != STV_DEFAULT
985            && (sec->flags & SEC_READONLY) == 0)
986     h->protected_def = 1;
987 }
988
989 /* This function is called when we want to merge a new symbol with an
990    existing symbol.  It handles the various cases which arise when we
991    find a definition in a dynamic object, or when there is already a
992    definition in a dynamic object.  The new symbol is described by
993    NAME, SYM, PSEC, and PVALUE.  We set SYM_HASH to the hash table
994    entry.  We set POLDBFD to the old symbol's BFD.  We set POLD_WEAK
995    if the old symbol was weak.  We set POLD_ALIGNMENT to the alignment
996    of an old common symbol.  We set OVERRIDE if the old symbol is
997    overriding a new definition.  We set TYPE_CHANGE_OK if it is OK for
998    the type to change.  We set SIZE_CHANGE_OK if it is OK for the size
999    to change.  By OK to change, we mean that we shouldn't warn if the
1000    type or size does change.  */
1001
1002 static bfd_boolean
1003 _bfd_elf_merge_symbol (bfd *abfd,
1004                        struct bfd_link_info *info,
1005                        const char *name,
1006                        Elf_Internal_Sym *sym,
1007                        asection **psec,
1008                        bfd_vma *pvalue,
1009                        struct elf_link_hash_entry **sym_hash,
1010                        bfd **poldbfd,
1011                        bfd_boolean *pold_weak,
1012                        unsigned int *pold_alignment,
1013                        bfd_boolean *skip,
1014                        bfd_boolean *override,
1015                        bfd_boolean *type_change_ok,
1016                        bfd_boolean *size_change_ok,
1017                        bfd_boolean *matched)
1018 {
1019   asection *sec, *oldsec;
1020   struct elf_link_hash_entry *h;
1021   struct elf_link_hash_entry *hi;
1022   struct elf_link_hash_entry *flip;
1023   int bind;
1024   bfd *oldbfd;
1025   bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
1026   bfd_boolean newweak, oldweak, newfunc, oldfunc;
1027   const struct elf_backend_data *bed;
1028   char *new_version;
1029
1030   *skip = FALSE;
1031   *override = FALSE;
1032
1033   sec = *psec;
1034   bind = ELF_ST_BIND (sym->st_info);
1035
1036   if (! bfd_is_und_section (sec))
1037     h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
1038   else
1039     h = ((struct elf_link_hash_entry *)
1040          bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
1041   if (h == NULL)
1042     return FALSE;
1043   *sym_hash = h;
1044
1045   bed = get_elf_backend_data (abfd);
1046
1047   /* NEW_VERSION is the symbol version of the new symbol.  */
1048   if (h->versioned != unversioned)
1049     {
1050       /* Symbol version is unknown or versioned.  */
1051       new_version = strrchr (name, ELF_VER_CHR);
1052       if (new_version)
1053         {
1054           if (h->versioned == unknown)
1055             {
1056               if (new_version > name && new_version[-1] != ELF_VER_CHR)
1057                 h->versioned = versioned_hidden;
1058               else
1059                 h->versioned = versioned;
1060             }
1061           new_version += 1;
1062           if (new_version[0] == '\0')
1063             new_version = NULL;
1064         }
1065       else
1066         h->versioned = unversioned;
1067     }
1068   else
1069     new_version = NULL;
1070
1071   /* For merging, we only care about real symbols.  But we need to make
1072      sure that indirect symbol dynamic flags are updated.  */
1073   hi = h;
1074   while (h->root.type == bfd_link_hash_indirect
1075          || h->root.type == bfd_link_hash_warning)
1076     h = (struct elf_link_hash_entry *) h->root.u.i.link;
1077
1078   if (!*matched)
1079     {
1080       if (hi == h || h->root.type == bfd_link_hash_new)
1081         *matched = TRUE;
1082       else
1083         {
1084           /* OLD_HIDDEN is true if the existing symbol is only visible
1085              to the symbol with the same symbol version.  NEW_HIDDEN is
1086              true if the new symbol is only visible to the symbol with
1087              the same symbol version.  */
1088           bfd_boolean old_hidden = h->versioned == versioned_hidden;
1089           bfd_boolean new_hidden = hi->versioned == versioned_hidden;
1090           if (!old_hidden && !new_hidden)
1091             /* The new symbol matches the existing symbol if both
1092                aren't hidden.  */
1093             *matched = TRUE;
1094           else
1095             {
1096               /* OLD_VERSION is the symbol version of the existing
1097                  symbol. */
1098               char *old_version;
1099
1100               if (h->versioned >= versioned)
1101                 old_version = strrchr (h->root.root.string,
1102                                        ELF_VER_CHR) + 1;
1103               else
1104                  old_version = NULL;
1105
1106               /* The new symbol matches the existing symbol if they
1107                  have the same symbol version.  */
1108               *matched = (old_version == new_version
1109                           || (old_version != NULL
1110                               && new_version != NULL
1111                               && strcmp (old_version, new_version) == 0));
1112             }
1113         }
1114     }
1115
1116   /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the
1117      existing symbol.  */
1118
1119   oldbfd = NULL;
1120   oldsec = NULL;
1121   switch (h->root.type)
1122     {
1123     default:
1124       break;
1125
1126     case bfd_link_hash_undefined:
1127     case bfd_link_hash_undefweak:
1128       oldbfd = h->root.u.undef.abfd;
1129       break;
1130
1131     case bfd_link_hash_defined:
1132     case bfd_link_hash_defweak:
1133       oldbfd = h->root.u.def.section->owner;
1134       oldsec = h->root.u.def.section;
1135       break;
1136
1137     case bfd_link_hash_common:
1138       oldbfd = h->root.u.c.p->section->owner;
1139       oldsec = h->root.u.c.p->section;
1140       if (pold_alignment)
1141         *pold_alignment = h->root.u.c.p->alignment_power;
1142       break;
1143     }
1144   if (poldbfd && *poldbfd == NULL)
1145     *poldbfd = oldbfd;
1146
1147   /* Differentiate strong and weak symbols.  */
1148   newweak = bind == STB_WEAK;
1149   oldweak = (h->root.type == bfd_link_hash_defweak
1150              || h->root.type == bfd_link_hash_undefweak);
1151   if (pold_weak)
1152     *pold_weak = oldweak;
1153
1154   /* This code is for coping with dynamic objects, and is only useful
1155      if we are doing an ELF link.  */
1156   if (!(*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
1157     return TRUE;
1158
1159   /* We have to check it for every instance since the first few may be
1160      references and not all compilers emit symbol type for undefined
1161      symbols.  */
1162   bfd_elf_link_mark_dynamic_symbol (info, h, sym);
1163
1164   /* NEWDYN and OLDDYN indicate whether the new or old symbol,
1165      respectively, is from a dynamic object.  */
1166
1167   newdyn = (abfd->flags & DYNAMIC) != 0;
1168
1169   /* ref_dynamic_nonweak and dynamic_def flags track actual undefined
1170      syms and defined syms in dynamic libraries respectively.
1171      ref_dynamic on the other hand can be set for a symbol defined in
1172      a dynamic library, and def_dynamic may not be set;  When the
1173      definition in a dynamic lib is overridden by a definition in the
1174      executable use of the symbol in the dynamic lib becomes a
1175      reference to the executable symbol.  */
1176   if (newdyn)
1177     {
1178       if (bfd_is_und_section (sec))
1179         {
1180           if (bind != STB_WEAK)
1181             {
1182               h->ref_dynamic_nonweak = 1;
1183               hi->ref_dynamic_nonweak = 1;
1184             }
1185         }
1186       else
1187         {
1188           /* Update the existing symbol only if they match. */
1189           if (*matched)
1190             h->dynamic_def = 1;
1191           hi->dynamic_def = 1;
1192         }
1193     }
1194
1195   /* If we just created the symbol, mark it as being an ELF symbol.
1196      Other than that, there is nothing to do--there is no merge issue
1197      with a newly defined symbol--so we just return.  */
1198
1199   if (h->root.type == bfd_link_hash_new)
1200     {
1201       h->non_elf = 0;
1202       return TRUE;
1203     }
1204
1205   /* In cases involving weak versioned symbols, we may wind up trying
1206      to merge a symbol with itself.  Catch that here, to avoid the
1207      confusion that results if we try to override a symbol with
1208      itself.  The additional tests catch cases like
1209      _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a
1210      dynamic object, which we do want to handle here.  */
1211   if (abfd == oldbfd
1212       && (newweak || oldweak)
1213       && ((abfd->flags & DYNAMIC) == 0
1214           || !h->def_regular))
1215     return TRUE;
1216
1217   olddyn = FALSE;
1218   if (oldbfd != NULL)
1219     olddyn = (oldbfd->flags & DYNAMIC) != 0;
1220   else if (oldsec != NULL)
1221     {
1222       /* This handles the special SHN_MIPS_{TEXT,DATA} section
1223          indices used by MIPS ELF.  */
1224       olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
1225     }
1226
1227   /* NEWDEF and OLDDEF indicate whether the new or old symbol,
1228      respectively, appear to be a definition rather than reference.  */
1229
1230   newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec);
1231
1232   olddef = (h->root.type != bfd_link_hash_undefined
1233             && h->root.type != bfd_link_hash_undefweak
1234             && h->root.type != bfd_link_hash_common);
1235
1236   /* NEWFUNC and OLDFUNC indicate whether the new or old symbol,
1237      respectively, appear to be a function.  */
1238
1239   newfunc = (ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1240              && bed->is_function_type (ELF_ST_TYPE (sym->st_info)));
1241
1242   oldfunc = (h->type != STT_NOTYPE
1243              && bed->is_function_type (h->type));
1244
1245   if (!(newfunc && oldfunc)
1246       && ELF_ST_TYPE (sym->st_info) != h->type
1247       && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1248       && h->type != STT_NOTYPE
1249       && (newdef || bfd_is_com_section (sec))
1250       && (olddef || h->root.type == bfd_link_hash_common))
1251     {
1252       /* If creating a default indirect symbol ("foo" or "foo@") from
1253          a dynamic versioned definition ("foo@@") skip doing so if
1254          there is an existing regular definition with a different
1255          type.  We don't want, for example, a "time" variable in the
1256          executable overriding a "time" function in a shared library.  */
1257       if (newdyn
1258           && !olddyn)
1259         {
1260           *skip = TRUE;
1261           return TRUE;
1262         }
1263
1264       /* When adding a symbol from a regular object file after we have
1265          created indirect symbols, undo the indirection and any
1266          dynamic state.  */
1267       if (hi != h
1268           && !newdyn
1269           && olddyn)
1270         {
1271           h = hi;
1272           (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1273           h->forced_local = 0;
1274           h->ref_dynamic = 0;
1275           h->def_dynamic = 0;
1276           h->dynamic_def = 0;
1277           if (h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1278             {
1279               h->root.type = bfd_link_hash_undefined;
1280               h->root.u.undef.abfd = abfd;
1281             }
1282           else
1283             {
1284               h->root.type = bfd_link_hash_new;
1285               h->root.u.undef.abfd = NULL;
1286             }
1287           return TRUE;
1288         }
1289     }
1290
1291   /* Check TLS symbols.  We don't check undefined symbols introduced
1292      by "ld -u" which have no type (and oldbfd NULL), and we don't
1293      check symbols from plugins because they also have no type.  */
1294   if (oldbfd != NULL
1295       && (oldbfd->flags & BFD_PLUGIN) == 0
1296       && (abfd->flags & BFD_PLUGIN) == 0
1297       && ELF_ST_TYPE (sym->st_info) != h->type
1298       && (ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS))
1299     {
1300       bfd *ntbfd, *tbfd;
1301       bfd_boolean ntdef, tdef;
1302       asection *ntsec, *tsec;
1303
1304       if (h->type == STT_TLS)
1305         {
1306           ntbfd = abfd;
1307           ntsec = sec;
1308           ntdef = newdef;
1309           tbfd = oldbfd;
1310           tsec = oldsec;
1311           tdef = olddef;
1312         }
1313       else
1314         {
1315           ntbfd = oldbfd;
1316           ntsec = oldsec;
1317           ntdef = olddef;
1318           tbfd = abfd;
1319           tsec = sec;
1320           tdef = newdef;
1321         }
1322
1323       if (tdef && ntdef)
1324         _bfd_error_handler
1325           /* xgettext:c-format */
1326           (_("%s: TLS definition in %B section %A "
1327              "mismatches non-TLS definition in %B section %A"),
1328            h->root.root.string, tbfd, tsec, ntbfd, ntsec);
1329       else if (!tdef && !ntdef)
1330         _bfd_error_handler
1331           /* xgettext:c-format */
1332           (_("%s: TLS reference in %B "
1333              "mismatches non-TLS reference in %B"),
1334            h->root.root.string, tbfd, ntbfd);
1335       else if (tdef)
1336         _bfd_error_handler
1337           /* xgettext:c-format */
1338           (_("%s: TLS definition in %B section %A "
1339              "mismatches non-TLS reference in %B"),
1340            h->root.root.string, tbfd, tsec, ntbfd);
1341       else
1342         _bfd_error_handler
1343           /* xgettext:c-format */
1344           (_("%s: TLS reference in %B "
1345              "mismatches non-TLS definition in %B section %A"),
1346            h->root.root.string, tbfd, ntbfd, ntsec);
1347
1348       bfd_set_error (bfd_error_bad_value);
1349       return FALSE;
1350     }
1351
1352   /* If the old symbol has non-default visibility, we ignore the new
1353      definition from a dynamic object.  */
1354   if (newdyn
1355       && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1356       && !bfd_is_und_section (sec))
1357     {
1358       *skip = TRUE;
1359       /* Make sure this symbol is dynamic.  */
1360       h->ref_dynamic = 1;
1361       hi->ref_dynamic = 1;
1362       /* A protected symbol has external availability. Make sure it is
1363          recorded as dynamic.
1364
1365          FIXME: Should we check type and size for protected symbol?  */
1366       if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
1367         return bfd_elf_link_record_dynamic_symbol (info, h);
1368       else
1369         return TRUE;
1370     }
1371   else if (!newdyn
1372            && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
1373            && h->def_dynamic)
1374     {
1375       /* If the new symbol with non-default visibility comes from a
1376          relocatable file and the old definition comes from a dynamic
1377          object, we remove the old definition.  */
1378       if (hi->root.type == bfd_link_hash_indirect)
1379         {
1380           /* Handle the case where the old dynamic definition is
1381              default versioned.  We need to copy the symbol info from
1382              the symbol with default version to the normal one if it
1383              was referenced before.  */
1384           if (h->ref_regular)
1385             {
1386               hi->root.type = h->root.type;
1387               h->root.type = bfd_link_hash_indirect;
1388               (*bed->elf_backend_copy_indirect_symbol) (info, hi, h);
1389
1390               h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1391               if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
1392                 {
1393                   /* If the new symbol is hidden or internal, completely undo
1394                      any dynamic link state.  */
1395                   (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1396                   h->forced_local = 0;
1397                   h->ref_dynamic = 0;
1398                 }
1399               else
1400                 h->ref_dynamic = 1;
1401
1402               h->def_dynamic = 0;
1403               /* FIXME: Should we check type and size for protected symbol?  */
1404               h->size = 0;
1405               h->type = 0;
1406
1407               h = hi;
1408             }
1409           else
1410             h = hi;
1411         }
1412
1413       /* If the old symbol was undefined before, then it will still be
1414          on the undefs list.  If the new symbol is undefined or
1415          common, we can't make it bfd_link_hash_new here, because new
1416          undefined or common symbols will be added to the undefs list
1417          by _bfd_generic_link_add_one_symbol.  Symbols may not be
1418          added twice to the undefs list.  Also, if the new symbol is
1419          undefweak then we don't want to lose the strong undef.  */
1420       if (h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1421         {
1422           h->root.type = bfd_link_hash_undefined;
1423           h->root.u.undef.abfd = abfd;
1424         }
1425       else
1426         {
1427           h->root.type = bfd_link_hash_new;
1428           h->root.u.undef.abfd = NULL;
1429         }
1430
1431       if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
1432         {
1433           /* If the new symbol is hidden or internal, completely undo
1434              any dynamic link state.  */
1435           (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1436           h->forced_local = 0;
1437           h->ref_dynamic = 0;
1438         }
1439       else
1440         h->ref_dynamic = 1;
1441       h->def_dynamic = 0;
1442       /* FIXME: Should we check type and size for protected symbol?  */
1443       h->size = 0;
1444       h->type = 0;
1445       return TRUE;
1446     }
1447
1448   /* If a new weak symbol definition comes from a regular file and the
1449      old symbol comes from a dynamic library, we treat the new one as
1450      strong.  Similarly, an old weak symbol definition from a regular
1451      file is treated as strong when the new symbol comes from a dynamic
1452      library.  Further, an old weak symbol from a dynamic library is
1453      treated as strong if the new symbol is from a dynamic library.
1454      This reflects the way glibc's ld.so works.
1455
1456      Do this before setting *type_change_ok or *size_change_ok so that
1457      we warn properly when dynamic library symbols are overridden.  */
1458
1459   if (newdef && !newdyn && olddyn)
1460     newweak = FALSE;
1461   if (olddef && newdyn)
1462     oldweak = FALSE;
1463
1464   /* Allow changes between different types of function symbol.  */
1465   if (newfunc && oldfunc)
1466     *type_change_ok = TRUE;
1467
1468   /* It's OK to change the type if either the existing symbol or the
1469      new symbol is weak.  A type change is also OK if the old symbol
1470      is undefined and the new symbol is defined.  */
1471
1472   if (oldweak
1473       || newweak
1474       || (newdef
1475           && h->root.type == bfd_link_hash_undefined))
1476     *type_change_ok = TRUE;
1477
1478   /* It's OK to change the size if either the existing symbol or the
1479      new symbol is weak, or if the old symbol is undefined.  */
1480
1481   if (*type_change_ok
1482       || h->root.type == bfd_link_hash_undefined)
1483     *size_change_ok = TRUE;
1484
1485   /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
1486      symbol, respectively, appears to be a common symbol in a dynamic
1487      object.  If a symbol appears in an uninitialized section, and is
1488      not weak, and is not a function, then it may be a common symbol
1489      which was resolved when the dynamic object was created.  We want
1490      to treat such symbols specially, because they raise special
1491      considerations when setting the symbol size: if the symbol
1492      appears as a common symbol in a regular object, and the size in
1493      the regular object is larger, we must make sure that we use the
1494      larger size.  This problematic case can always be avoided in C,
1495      but it must be handled correctly when using Fortran shared
1496      libraries.
1497
1498      Note that if NEWDYNCOMMON is set, NEWDEF will be set, and
1499      likewise for OLDDYNCOMMON and OLDDEF.
1500
1501      Note that this test is just a heuristic, and that it is quite
1502      possible to have an uninitialized symbol in a shared object which
1503      is really a definition, rather than a common symbol.  This could
1504      lead to some minor confusion when the symbol really is a common
1505      symbol in some regular object.  However, I think it will be
1506      harmless.  */
1507
1508   if (newdyn
1509       && newdef
1510       && !newweak
1511       && (sec->flags & SEC_ALLOC) != 0
1512       && (sec->flags & SEC_LOAD) == 0
1513       && sym->st_size > 0
1514       && !newfunc)
1515     newdyncommon = TRUE;
1516   else
1517     newdyncommon = FALSE;
1518
1519   if (olddyn
1520       && olddef
1521       && h->root.type == bfd_link_hash_defined
1522       && h->def_dynamic
1523       && (h->root.u.def.section->flags & SEC_ALLOC) != 0
1524       && (h->root.u.def.section->flags & SEC_LOAD) == 0
1525       && h->size > 0
1526       && !oldfunc)
1527     olddyncommon = TRUE;
1528   else
1529     olddyncommon = FALSE;
1530
1531   /* We now know everything about the old and new symbols.  We ask the
1532      backend to check if we can merge them.  */
1533   if (bed->merge_symbol != NULL)
1534     {
1535       if (!bed->merge_symbol (h, sym, psec, newdef, olddef, oldbfd, oldsec))
1536         return FALSE;
1537       sec = *psec;
1538     }
1539
1540   /* If both the old and the new symbols look like common symbols in a
1541      dynamic object, set the size of the symbol to the larger of the
1542      two.  */
1543
1544   if (olddyncommon
1545       && newdyncommon
1546       && sym->st_size != h->size)
1547     {
1548       /* Since we think we have two common symbols, issue a multiple
1549          common warning if desired.  Note that we only warn if the
1550          size is different.  If the size is the same, we simply let
1551          the old symbol override the new one as normally happens with
1552          symbols defined in dynamic objects.  */
1553
1554       (*info->callbacks->multiple_common) (info, &h->root, abfd,
1555                                            bfd_link_hash_common, sym->st_size);
1556       if (sym->st_size > h->size)
1557         h->size = sym->st_size;
1558
1559       *size_change_ok = TRUE;
1560     }
1561
1562   /* If we are looking at a dynamic object, and we have found a
1563      definition, we need to see if the symbol was already defined by
1564      some other object.  If so, we want to use the existing
1565      definition, and we do not want to report a multiple symbol
1566      definition error; we do this by clobbering *PSEC to be
1567      bfd_und_section_ptr.
1568
1569      We treat a common symbol as a definition if the symbol in the
1570      shared library is a function, since common symbols always
1571      represent variables; this can cause confusion in principle, but
1572      any such confusion would seem to indicate an erroneous program or
1573      shared library.  We also permit a common symbol in a regular
1574      object to override a weak symbol in a shared object.  */
1575
1576   if (newdyn
1577       && newdef
1578       && (olddef
1579           || (h->root.type == bfd_link_hash_common
1580               && (newweak || newfunc))))
1581     {
1582       *override = TRUE;
1583       newdef = FALSE;
1584       newdyncommon = FALSE;
1585
1586       *psec = sec = bfd_und_section_ptr;
1587       *size_change_ok = TRUE;
1588
1589       /* If we get here when the old symbol is a common symbol, then
1590          we are explicitly letting it override a weak symbol or
1591          function in a dynamic object, and we don't want to warn about
1592          a type change.  If the old symbol is a defined symbol, a type
1593          change warning may still be appropriate.  */
1594
1595       if (h->root.type == bfd_link_hash_common)
1596         *type_change_ok = TRUE;
1597     }
1598
1599   /* Handle the special case of an old common symbol merging with a
1600      new symbol which looks like a common symbol in a shared object.
1601      We change *PSEC and *PVALUE to make the new symbol look like a
1602      common symbol, and let _bfd_generic_link_add_one_symbol do the
1603      right thing.  */
1604
1605   if (newdyncommon
1606       && h->root.type == bfd_link_hash_common)
1607     {
1608       *override = TRUE;
1609       newdef = FALSE;
1610       newdyncommon = FALSE;
1611       *pvalue = sym->st_size;
1612       *psec = sec = bed->common_section (oldsec);
1613       *size_change_ok = TRUE;
1614     }
1615
1616   /* Skip weak definitions of symbols that are already defined.  */
1617   if (newdef && olddef && newweak)
1618     {
1619       /* Don't skip new non-IR weak syms.  */
1620       if (!(oldbfd != NULL
1621             && (oldbfd->flags & BFD_PLUGIN) != 0
1622             && (abfd->flags & BFD_PLUGIN) == 0))
1623         {
1624           newdef = FALSE;
1625           *skip = TRUE;
1626         }
1627
1628       /* Merge st_other.  If the symbol already has a dynamic index,
1629          but visibility says it should not be visible, turn it into a
1630          local symbol.  */
1631       elf_merge_st_other (abfd, h, sym, sec, newdef, newdyn);
1632       if (h->dynindx != -1)
1633         switch (ELF_ST_VISIBILITY (h->other))
1634           {
1635           case STV_INTERNAL:
1636           case STV_HIDDEN:
1637             (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1638             break;
1639           }
1640     }
1641
1642   /* If the old symbol is from a dynamic object, and the new symbol is
1643      a definition which is not from a dynamic object, then the new
1644      symbol overrides the old symbol.  Symbols from regular files
1645      always take precedence over symbols from dynamic objects, even if
1646      they are defined after the dynamic object in the link.
1647
1648      As above, we again permit a common symbol in a regular object to
1649      override a definition in a shared object if the shared object
1650      symbol is a function or is weak.  */
1651
1652   flip = NULL;
1653   if (!newdyn
1654       && (newdef
1655           || (bfd_is_com_section (sec)
1656               && (oldweak || oldfunc)))
1657       && olddyn
1658       && olddef
1659       && h->def_dynamic)
1660     {
1661       /* Change the hash table entry to undefined, and let
1662          _bfd_generic_link_add_one_symbol do the right thing with the
1663          new definition.  */
1664
1665       h->root.type = bfd_link_hash_undefined;
1666       h->root.u.undef.abfd = h->root.u.def.section->owner;
1667       *size_change_ok = TRUE;
1668
1669       olddef = FALSE;
1670       olddyncommon = FALSE;
1671
1672       /* We again permit a type change when a common symbol may be
1673          overriding a function.  */
1674
1675       if (bfd_is_com_section (sec))
1676         {
1677           if (oldfunc)
1678             {
1679               /* If a common symbol overrides a function, make sure
1680                  that it isn't defined dynamically nor has type
1681                  function.  */
1682               h->def_dynamic = 0;
1683               h->type = STT_NOTYPE;
1684             }
1685           *type_change_ok = TRUE;
1686         }
1687
1688       if (hi->root.type == bfd_link_hash_indirect)
1689         flip = hi;
1690       else
1691         /* This union may have been set to be non-NULL when this symbol
1692            was seen in a dynamic object.  We must force the union to be
1693            NULL, so that it is correct for a regular symbol.  */
1694         h->verinfo.vertree = NULL;
1695     }
1696
1697   /* Handle the special case of a new common symbol merging with an
1698      old symbol that looks like it might be a common symbol defined in
1699      a shared object.  Note that we have already handled the case in
1700      which a new common symbol should simply override the definition
1701      in the shared library.  */
1702
1703   if (! newdyn
1704       && bfd_is_com_section (sec)
1705       && olddyncommon)
1706     {
1707       /* It would be best if we could set the hash table entry to a
1708          common symbol, but we don't know what to use for the section
1709          or the alignment.  */
1710       (*info->callbacks->multiple_common) (info, &h->root, abfd,
1711                                            bfd_link_hash_common, sym->st_size);
1712
1713       /* If the presumed common symbol in the dynamic object is
1714          larger, pretend that the new symbol has its size.  */
1715
1716       if (h->size > *pvalue)
1717         *pvalue = h->size;
1718
1719       /* We need to remember the alignment required by the symbol
1720          in the dynamic object.  */
1721       BFD_ASSERT (pold_alignment);
1722       *pold_alignment = h->root.u.def.section->alignment_power;
1723
1724       olddef = FALSE;
1725       olddyncommon = FALSE;
1726
1727       h->root.type = bfd_link_hash_undefined;
1728       h->root.u.undef.abfd = h->root.u.def.section->owner;
1729
1730       *size_change_ok = TRUE;
1731       *type_change_ok = TRUE;
1732
1733       if (hi->root.type == bfd_link_hash_indirect)
1734         flip = hi;
1735       else
1736         h->verinfo.vertree = NULL;
1737     }
1738
1739   if (flip != NULL)
1740     {
1741       /* Handle the case where we had a versioned symbol in a dynamic
1742          library and now find a definition in a normal object.  In this
1743          case, we make the versioned symbol point to the normal one.  */
1744       flip->root.type = h->root.type;
1745       flip->root.u.undef.abfd = h->root.u.undef.abfd;
1746       h->root.type = bfd_link_hash_indirect;
1747       h->root.u.i.link = (struct bfd_link_hash_entry *) flip;
1748       (*bed->elf_backend_copy_indirect_symbol) (info, flip, h);
1749       if (h->def_dynamic)
1750         {
1751           h->def_dynamic = 0;
1752           flip->ref_dynamic = 1;
1753         }
1754     }
1755
1756   return TRUE;
1757 }
1758
1759 /* This function is called to create an indirect symbol from the
1760    default for the symbol with the default version if needed. The
1761    symbol is described by H, NAME, SYM, SEC, and VALUE.  We
1762    set DYNSYM if the new indirect symbol is dynamic.  */
1763
1764 static bfd_boolean
1765 _bfd_elf_add_default_symbol (bfd *abfd,
1766                              struct bfd_link_info *info,
1767                              struct elf_link_hash_entry *h,
1768                              const char *name,
1769                              Elf_Internal_Sym *sym,
1770                              asection *sec,
1771                              bfd_vma value,
1772                              bfd **poldbfd,
1773                              bfd_boolean *dynsym)
1774 {
1775   bfd_boolean type_change_ok;
1776   bfd_boolean size_change_ok;
1777   bfd_boolean skip;
1778   char *shortname;
1779   struct elf_link_hash_entry *hi;
1780   struct bfd_link_hash_entry *bh;
1781   const struct elf_backend_data *bed;
1782   bfd_boolean collect;
1783   bfd_boolean dynamic;
1784   bfd_boolean override;
1785   char *p;
1786   size_t len, shortlen;
1787   asection *tmp_sec;
1788   bfd_boolean matched;
1789
1790   if (h->versioned == unversioned || h->versioned == versioned_hidden)
1791     return TRUE;
1792
1793   /* If this symbol has a version, and it is the default version, we
1794      create an indirect symbol from the default name to the fully
1795      decorated name.  This will cause external references which do not
1796      specify a version to be bound to this version of the symbol.  */
1797   p = strchr (name, ELF_VER_CHR);
1798   if (h->versioned == unknown)
1799     {
1800       if (p == NULL)
1801         {
1802           h->versioned = unversioned;
1803           return TRUE;
1804         }
1805       else
1806         {
1807           if (p[1] != ELF_VER_CHR)
1808             {
1809               h->versioned = versioned_hidden;
1810               return TRUE;
1811             }
1812           else
1813             h->versioned = versioned;
1814         }
1815     }
1816   else
1817     {
1818       /* PR ld/19073: We may see an unversioned definition after the
1819          default version.  */
1820       if (p == NULL)
1821         return TRUE;
1822     }
1823
1824   bed = get_elf_backend_data (abfd);
1825   collect = bed->collect;
1826   dynamic = (abfd->flags & DYNAMIC) != 0;
1827
1828   shortlen = p - name;
1829   shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1);
1830   if (shortname == NULL)
1831     return FALSE;
1832   memcpy (shortname, name, shortlen);
1833   shortname[shortlen] = '\0';
1834
1835   /* We are going to create a new symbol.  Merge it with any existing
1836      symbol with this name.  For the purposes of the merge, act as
1837      though we were defining the symbol we just defined, although we
1838      actually going to define an indirect symbol.  */
1839   type_change_ok = FALSE;
1840   size_change_ok = FALSE;
1841   matched = TRUE;
1842   tmp_sec = sec;
1843   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
1844                               &hi, poldbfd, NULL, NULL, &skip, &override,
1845                               &type_change_ok, &size_change_ok, &matched))
1846     return FALSE;
1847
1848   if (skip)
1849     goto nondefault;
1850
1851   if (hi->def_regular)
1852     {
1853       /* If the undecorated symbol will have a version added by a
1854          script different to H, then don't indirect to/from the
1855          undecorated symbol.  This isn't ideal because we may not yet
1856          have seen symbol versions, if given by a script on the
1857          command line rather than via --version-script.  */
1858       if (hi->verinfo.vertree == NULL && info->version_info != NULL)
1859         {
1860           bfd_boolean hide;
1861
1862           hi->verinfo.vertree
1863             = bfd_find_version_for_sym (info->version_info,
1864                                         hi->root.root.string, &hide);
1865           if (hi->verinfo.vertree != NULL && hide)
1866             {
1867               (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
1868               goto nondefault;
1869             }
1870         }
1871       if (hi->verinfo.vertree != NULL
1872           && strcmp (p + 1 + (p[1] == '@'), hi->verinfo.vertree->name) != 0)
1873         goto nondefault;
1874     }
1875
1876   if (! override)
1877     {
1878       /* Add the default symbol if not performing a relocatable link.  */
1879       if (! bfd_link_relocatable (info))
1880         {
1881           bh = &hi->root;
1882           if (! (_bfd_generic_link_add_one_symbol
1883                  (info, abfd, shortname, BSF_INDIRECT,
1884                   bfd_ind_section_ptr,
1885                   0, name, FALSE, collect, &bh)))
1886             return FALSE;
1887           hi = (struct elf_link_hash_entry *) bh;
1888         }
1889     }
1890   else
1891     {
1892       /* In this case the symbol named SHORTNAME is overriding the
1893          indirect symbol we want to add.  We were planning on making
1894          SHORTNAME an indirect symbol referring to NAME.  SHORTNAME
1895          is the name without a version.  NAME is the fully versioned
1896          name, and it is the default version.
1897
1898          Overriding means that we already saw a definition for the
1899          symbol SHORTNAME in a regular object, and it is overriding
1900          the symbol defined in the dynamic object.
1901
1902          When this happens, we actually want to change NAME, the
1903          symbol we just added, to refer to SHORTNAME.  This will cause
1904          references to NAME in the shared object to become references
1905          to SHORTNAME in the regular object.  This is what we expect
1906          when we override a function in a shared object: that the
1907          references in the shared object will be mapped to the
1908          definition in the regular object.  */
1909
1910       while (hi->root.type == bfd_link_hash_indirect
1911              || hi->root.type == bfd_link_hash_warning)
1912         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1913
1914       h->root.type = bfd_link_hash_indirect;
1915       h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1916       if (h->def_dynamic)
1917         {
1918           h->def_dynamic = 0;
1919           hi->ref_dynamic = 1;
1920           if (hi->ref_regular
1921               || hi->def_regular)
1922             {
1923               if (! bfd_elf_link_record_dynamic_symbol (info, hi))
1924                 return FALSE;
1925             }
1926         }
1927
1928       /* Now set HI to H, so that the following code will set the
1929          other fields correctly.  */
1930       hi = h;
1931     }
1932
1933   /* Check if HI is a warning symbol.  */
1934   if (hi->root.type == bfd_link_hash_warning)
1935     hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1936
1937   /* If there is a duplicate definition somewhere, then HI may not
1938      point to an indirect symbol.  We will have reported an error to
1939      the user in that case.  */
1940
1941   if (hi->root.type == bfd_link_hash_indirect)
1942     {
1943       struct elf_link_hash_entry *ht;
1944
1945       ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
1946       (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi);
1947
1948       /* A reference to the SHORTNAME symbol from a dynamic library
1949          will be satisfied by the versioned symbol at runtime.  In
1950          effect, we have a reference to the versioned symbol.  */
1951       ht->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
1952       hi->dynamic_def |= ht->dynamic_def;
1953
1954       /* See if the new flags lead us to realize that the symbol must
1955          be dynamic.  */
1956       if (! *dynsym)
1957         {
1958           if (! dynamic)
1959             {
1960               if (! bfd_link_executable (info)
1961                   || hi->def_dynamic
1962                   || hi->ref_dynamic)
1963                 *dynsym = TRUE;
1964             }
1965           else
1966             {
1967               if (hi->ref_regular)
1968                 *dynsym = TRUE;
1969             }
1970         }
1971     }
1972
1973   /* We also need to define an indirection from the nondefault version
1974      of the symbol.  */
1975
1976 nondefault:
1977   len = strlen (name);
1978   shortname = (char *) bfd_hash_allocate (&info->hash->table, len);
1979   if (shortname == NULL)
1980     return FALSE;
1981   memcpy (shortname, name, shortlen);
1982   memcpy (shortname + shortlen, p + 1, len - shortlen);
1983
1984   /* Once again, merge with any existing symbol.  */
1985   type_change_ok = FALSE;
1986   size_change_ok = FALSE;
1987   tmp_sec = sec;
1988   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
1989                               &hi, poldbfd, NULL, NULL, &skip, &override,
1990                               &type_change_ok, &size_change_ok, &matched))
1991     return FALSE;
1992
1993   if (skip)
1994     return TRUE;
1995
1996   if (override)
1997     {
1998       /* Here SHORTNAME is a versioned name, so we don't expect to see
1999          the type of override we do in the case above unless it is
2000          overridden by a versioned definition.  */
2001       if (hi->root.type != bfd_link_hash_defined
2002           && hi->root.type != bfd_link_hash_defweak)
2003         _bfd_error_handler
2004           /* xgettext:c-format */
2005           (_("%B: unexpected redefinition of indirect versioned symbol `%s'"),
2006            abfd, shortname);
2007     }
2008   else
2009     {
2010       bh = &hi->root;
2011       if (! (_bfd_generic_link_add_one_symbol
2012              (info, abfd, shortname, BSF_INDIRECT,
2013               bfd_ind_section_ptr, 0, name, FALSE, collect, &bh)))
2014         return FALSE;
2015       hi = (struct elf_link_hash_entry *) bh;
2016
2017       /* If there is a duplicate definition somewhere, then HI may not
2018          point to an indirect symbol.  We will have reported an error
2019          to the user in that case.  */
2020
2021       if (hi->root.type == bfd_link_hash_indirect)
2022         {
2023           (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
2024           h->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
2025           hi->dynamic_def |= h->dynamic_def;
2026
2027           /* See if the new flags lead us to realize that the symbol
2028              must be dynamic.  */
2029           if (! *dynsym)
2030             {
2031               if (! dynamic)
2032                 {
2033                   if (! bfd_link_executable (info)
2034                       || hi->ref_dynamic)
2035                     *dynsym = TRUE;
2036                 }
2037               else
2038                 {
2039                   if (hi->ref_regular)
2040                     *dynsym = TRUE;
2041                 }
2042             }
2043         }
2044     }
2045
2046   return TRUE;
2047 }
2048 \f
2049 /* This routine is used to export all defined symbols into the dynamic
2050    symbol table.  It is called via elf_link_hash_traverse.  */
2051
2052 static bfd_boolean
2053 _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
2054 {
2055   struct elf_info_failed *eif = (struct elf_info_failed *) data;
2056
2057   /* Ignore indirect symbols.  These are added by the versioning code.  */
2058   if (h->root.type == bfd_link_hash_indirect)
2059     return TRUE;
2060
2061   /* Ignore this if we won't export it.  */
2062   if (!eif->info->export_dynamic && !h->dynamic)
2063     return TRUE;
2064
2065   if (h->dynindx == -1
2066       && (h->def_regular || h->ref_regular)
2067       && ! bfd_hide_sym_by_version (eif->info->version_info,
2068                                     h->root.root.string))
2069     {
2070       if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2071         {
2072           eif->failed = TRUE;
2073           return FALSE;
2074         }
2075     }
2076
2077   return TRUE;
2078 }
2079 \f
2080 /* Look through the symbols which are defined in other shared
2081    libraries and referenced here.  Update the list of version
2082    dependencies.  This will be put into the .gnu.version_r section.
2083    This function is called via elf_link_hash_traverse.  */
2084
2085 static bfd_boolean
2086 _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h,
2087                                          void *data)
2088 {
2089   struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
2090   Elf_Internal_Verneed *t;
2091   Elf_Internal_Vernaux *a;
2092   bfd_size_type amt;
2093
2094   /* We only care about symbols defined in shared objects with version
2095      information.  */
2096   if (!h->def_dynamic
2097       || h->def_regular
2098       || h->dynindx == -1
2099       || h->verinfo.verdef == NULL
2100       || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
2101           & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
2102     return TRUE;
2103
2104   /* See if we already know about this version.  */
2105   for (t = elf_tdata (rinfo->info->output_bfd)->verref;
2106        t != NULL;
2107        t = t->vn_nextref)
2108     {
2109       if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
2110         continue;
2111
2112       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2113         if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
2114           return TRUE;
2115
2116       break;
2117     }
2118
2119   /* This is a new version.  Add it to tree we are building.  */
2120
2121   if (t == NULL)
2122     {
2123       amt = sizeof *t;
2124       t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt);
2125       if (t == NULL)
2126         {
2127           rinfo->failed = TRUE;
2128           return FALSE;
2129         }
2130
2131       t->vn_bfd = h->verinfo.verdef->vd_bfd;
2132       t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref;
2133       elf_tdata (rinfo->info->output_bfd)->verref = t;
2134     }
2135
2136   amt = sizeof *a;
2137   a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
2138   if (a == NULL)
2139     {
2140       rinfo->failed = TRUE;
2141       return FALSE;
2142     }
2143
2144   /* Note that we are copying a string pointer here, and testing it
2145      above.  If bfd_elf_string_from_elf_section is ever changed to
2146      discard the string data when low in memory, this will have to be
2147      fixed.  */
2148   a->vna_nodename = h->verinfo.verdef->vd_nodename;
2149
2150   a->vna_flags = h->verinfo.verdef->vd_flags;
2151   a->vna_nextptr = t->vn_auxptr;
2152
2153   h->verinfo.verdef->vd_exp_refno = rinfo->vers;
2154   ++rinfo->vers;
2155
2156   a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
2157
2158   t->vn_auxptr = a;
2159
2160   return TRUE;
2161 }
2162
2163 /* Figure out appropriate versions for all the symbols.  We may not
2164    have the version number script until we have read all of the input
2165    files, so until that point we don't know which symbols should be
2166    local.  This function is called via elf_link_hash_traverse.  */
2167
2168 static bfd_boolean
2169 _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
2170 {
2171   struct elf_info_failed *sinfo;
2172   struct bfd_link_info *info;
2173   const struct elf_backend_data *bed;
2174   struct elf_info_failed eif;
2175   char *p;
2176
2177   sinfo = (struct elf_info_failed *) data;
2178   info = sinfo->info;
2179
2180   /* Fix the symbol flags.  */
2181   eif.failed = FALSE;
2182   eif.info = info;
2183   if (! _bfd_elf_fix_symbol_flags (h, &eif))
2184     {
2185       if (eif.failed)
2186         sinfo->failed = TRUE;
2187       return FALSE;
2188     }
2189
2190   /* We only need version numbers for symbols defined in regular
2191      objects.  */
2192   if (!h->def_regular)
2193     return TRUE;
2194
2195   bed = get_elf_backend_data (info->output_bfd);
2196   p = strchr (h->root.root.string, ELF_VER_CHR);
2197   if (p != NULL && h->verinfo.vertree == NULL)
2198     {
2199       struct bfd_elf_version_tree *t;
2200
2201       ++p;
2202       if (*p == ELF_VER_CHR)
2203         ++p;
2204
2205       /* If there is no version string, we can just return out.  */
2206       if (*p == '\0')
2207         return TRUE;
2208
2209       /* Look for the version.  If we find it, it is no longer weak.  */
2210       for (t = sinfo->info->version_info; t != NULL; t = t->next)
2211         {
2212           if (strcmp (t->name, p) == 0)
2213             {
2214               size_t len;
2215               char *alc;
2216               struct bfd_elf_version_expr *d;
2217
2218               len = p - h->root.root.string;
2219               alc = (char *) bfd_malloc (len);
2220               if (alc == NULL)
2221                 {
2222                   sinfo->failed = TRUE;
2223                   return FALSE;
2224                 }
2225               memcpy (alc, h->root.root.string, len - 1);
2226               alc[len - 1] = '\0';
2227               if (alc[len - 2] == ELF_VER_CHR)
2228                 alc[len - 2] = '\0';
2229
2230               h->verinfo.vertree = t;
2231               t->used = TRUE;
2232               d = NULL;
2233
2234               if (t->globals.list != NULL)
2235                 d = (*t->match) (&t->globals, NULL, alc);
2236
2237               /* See if there is anything to force this symbol to
2238                  local scope.  */
2239               if (d == NULL && t->locals.list != NULL)
2240                 {
2241                   d = (*t->match) (&t->locals, NULL, alc);
2242                   if (d != NULL
2243                       && h->dynindx != -1
2244                       && ! info->export_dynamic)
2245                     (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2246                 }
2247
2248               free (alc);
2249               break;
2250             }
2251         }
2252
2253       /* If we are building an application, we need to create a
2254          version node for this version.  */
2255       if (t == NULL && bfd_link_executable (info))
2256         {
2257           struct bfd_elf_version_tree **pp;
2258           int version_index;
2259
2260           /* If we aren't going to export this symbol, we don't need
2261              to worry about it.  */
2262           if (h->dynindx == -1)
2263             return TRUE;
2264
2265           t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd,
2266                                                           sizeof *t);
2267           if (t == NULL)
2268             {
2269               sinfo->failed = TRUE;
2270               return FALSE;
2271             }
2272
2273           t->name = p;
2274           t->name_indx = (unsigned int) -1;
2275           t->used = TRUE;
2276
2277           version_index = 1;
2278           /* Don't count anonymous version tag.  */
2279           if (sinfo->info->version_info != NULL
2280               && sinfo->info->version_info->vernum == 0)
2281             version_index = 0;
2282           for (pp = &sinfo->info->version_info;
2283                *pp != NULL;
2284                pp = &(*pp)->next)
2285             ++version_index;
2286           t->vernum = version_index;
2287
2288           *pp = t;
2289
2290           h->verinfo.vertree = t;
2291         }
2292       else if (t == NULL)
2293         {
2294           /* We could not find the version for a symbol when
2295              generating a shared archive.  Return an error.  */
2296           _bfd_error_handler
2297             /* xgettext:c-format */
2298             (_("%B: version node not found for symbol %s"),
2299              info->output_bfd, h->root.root.string);
2300           bfd_set_error (bfd_error_bad_value);
2301           sinfo->failed = TRUE;
2302           return FALSE;
2303         }
2304     }
2305
2306   /* If we don't have a version for this symbol, see if we can find
2307      something.  */
2308   if (h->verinfo.vertree == NULL && sinfo->info->version_info != NULL)
2309     {
2310       bfd_boolean hide;
2311
2312       h->verinfo.vertree
2313         = bfd_find_version_for_sym (sinfo->info->version_info,
2314                                     h->root.root.string, &hide);
2315       if (h->verinfo.vertree != NULL && hide)
2316         (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2317     }
2318
2319   return TRUE;
2320 }
2321 \f
2322 /* Read and swap the relocs from the section indicated by SHDR.  This
2323    may be either a REL or a RELA section.  The relocations are
2324    translated into RELA relocations and stored in INTERNAL_RELOCS,
2325    which should have already been allocated to contain enough space.
2326    The EXTERNAL_RELOCS are a buffer where the external form of the
2327    relocations should be stored.
2328
2329    Returns FALSE if something goes wrong.  */
2330
2331 static bfd_boolean
2332 elf_link_read_relocs_from_section (bfd *abfd,
2333                                    asection *sec,
2334                                    Elf_Internal_Shdr *shdr,
2335                                    void *external_relocs,
2336                                    Elf_Internal_Rela *internal_relocs)
2337 {
2338   const struct elf_backend_data *bed;
2339   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
2340   const bfd_byte *erela;
2341   const bfd_byte *erelaend;
2342   Elf_Internal_Rela *irela;
2343   Elf_Internal_Shdr *symtab_hdr;
2344   size_t nsyms;
2345
2346   /* Position ourselves at the start of the section.  */
2347   if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
2348     return FALSE;
2349
2350   /* Read the relocations.  */
2351   if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
2352     return FALSE;
2353
2354   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2355   nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
2356
2357   bed = get_elf_backend_data (abfd);
2358
2359   /* Convert the external relocations to the internal format.  */
2360   if (shdr->sh_entsize == bed->s->sizeof_rel)
2361     swap_in = bed->s->swap_reloc_in;
2362   else if (shdr->sh_entsize == bed->s->sizeof_rela)
2363     swap_in = bed->s->swap_reloca_in;
2364   else
2365     {
2366       bfd_set_error (bfd_error_wrong_format);
2367       return FALSE;
2368     }
2369
2370   erela = (const bfd_byte *) external_relocs;
2371   erelaend = erela + shdr->sh_size;
2372   irela = internal_relocs;
2373   while (erela < erelaend)
2374     {
2375       bfd_vma r_symndx;
2376
2377       (*swap_in) (abfd, erela, irela);
2378       r_symndx = ELF32_R_SYM (irela->r_info);
2379       if (bed->s->arch_size == 64)
2380         r_symndx >>= 24;
2381       if (nsyms > 0)
2382         {
2383           if ((size_t) r_symndx >= nsyms)
2384             {
2385               _bfd_error_handler
2386                 /* xgettext:c-format */
2387                 (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)"
2388                    " for offset 0x%lx in section `%A'"),
2389                  abfd, (unsigned long) r_symndx, (unsigned long) nsyms,
2390                  irela->r_offset, sec);
2391               bfd_set_error (bfd_error_bad_value);
2392               return FALSE;
2393             }
2394         }
2395       else if (r_symndx != STN_UNDEF)
2396         {
2397           _bfd_error_handler
2398             /* xgettext:c-format */
2399             (_("%B: non-zero symbol index (0x%lx)"
2400                " for offset 0x%lx in section `%A'"
2401                " when the object file has no symbol table"),
2402              abfd, (unsigned long) r_symndx, (unsigned long) nsyms,
2403              irela->r_offset, sec);
2404           bfd_set_error (bfd_error_bad_value);
2405           return FALSE;
2406         }
2407       irela += bed->s->int_rels_per_ext_rel;
2408       erela += shdr->sh_entsize;
2409     }
2410
2411   return TRUE;
2412 }
2413
2414 /* Read and swap the relocs for a section O.  They may have been
2415    cached.  If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are
2416    not NULL, they are used as buffers to read into.  They are known to
2417    be large enough.  If the INTERNAL_RELOCS relocs argument is NULL,
2418    the return value is allocated using either malloc or bfd_alloc,
2419    according to the KEEP_MEMORY argument.  If O has two relocation
2420    sections (both REL and RELA relocations), then the REL_HDR
2421    relocations will appear first in INTERNAL_RELOCS, followed by the
2422    RELA_HDR relocations.  */
2423
2424 Elf_Internal_Rela *
2425 _bfd_elf_link_read_relocs (bfd *abfd,
2426                            asection *o,
2427                            void *external_relocs,
2428                            Elf_Internal_Rela *internal_relocs,
2429                            bfd_boolean keep_memory)
2430 {
2431   void *alloc1 = NULL;
2432   Elf_Internal_Rela *alloc2 = NULL;
2433   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2434   struct bfd_elf_section_data *esdo = elf_section_data (o);
2435   Elf_Internal_Rela *internal_rela_relocs;
2436
2437   if (esdo->relocs != NULL)
2438     return esdo->relocs;
2439
2440   if (o->reloc_count == 0)
2441     return NULL;
2442
2443   if (internal_relocs == NULL)
2444     {
2445       bfd_size_type size;
2446
2447       size = o->reloc_count;
2448       size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela);
2449       if (keep_memory)
2450         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
2451       else
2452         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
2453       if (internal_relocs == NULL)
2454         goto error_return;
2455     }
2456
2457   if (external_relocs == NULL)
2458     {
2459       bfd_size_type size = 0;
2460
2461       if (esdo->rel.hdr)
2462         size += esdo->rel.hdr->sh_size;
2463       if (esdo->rela.hdr)
2464         size += esdo->rela.hdr->sh_size;
2465
2466       alloc1 = bfd_malloc (size);
2467       if (alloc1 == NULL)
2468         goto error_return;
2469       external_relocs = alloc1;
2470     }
2471
2472   internal_rela_relocs = internal_relocs;
2473   if (esdo->rel.hdr)
2474     {
2475       if (!elf_link_read_relocs_from_section (abfd, o, esdo->rel.hdr,
2476                                               external_relocs,
2477                                               internal_relocs))
2478         goto error_return;
2479       external_relocs = (((bfd_byte *) external_relocs)
2480                          + esdo->rel.hdr->sh_size);
2481       internal_rela_relocs += (NUM_SHDR_ENTRIES (esdo->rel.hdr)
2482                                * bed->s->int_rels_per_ext_rel);
2483     }
2484
2485   if (esdo->rela.hdr
2486       && (!elf_link_read_relocs_from_section (abfd, o, esdo->rela.hdr,
2487                                               external_relocs,
2488                                               internal_rela_relocs)))
2489     goto error_return;
2490
2491   /* Cache the results for next time, if we can.  */
2492   if (keep_memory)
2493     esdo->relocs = internal_relocs;
2494
2495   if (alloc1 != NULL)
2496     free (alloc1);
2497
2498   /* Don't free alloc2, since if it was allocated we are passing it
2499      back (under the name of internal_relocs).  */
2500
2501   return internal_relocs;
2502
2503  error_return:
2504   if (alloc1 != NULL)
2505     free (alloc1);
2506   if (alloc2 != NULL)
2507     {
2508       if (keep_memory)
2509         bfd_release (abfd, alloc2);
2510       else
2511         free (alloc2);
2512     }
2513   return NULL;
2514 }
2515
2516 /* Compute the size of, and allocate space for, REL_HDR which is the
2517    section header for a section containing relocations for O.  */
2518
2519 static bfd_boolean
2520 _bfd_elf_link_size_reloc_section (bfd *abfd,
2521                                   struct bfd_elf_section_reloc_data *reldata)
2522 {
2523   Elf_Internal_Shdr *rel_hdr = reldata->hdr;
2524
2525   /* That allows us to calculate the size of the section.  */
2526   rel_hdr->sh_size = rel_hdr->sh_entsize * reldata->count;
2527
2528   /* The contents field must last into write_object_contents, so we
2529      allocate it with bfd_alloc rather than malloc.  Also since we
2530      cannot be sure that the contents will actually be filled in,
2531      we zero the allocated space.  */
2532   rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size);
2533   if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
2534     return FALSE;
2535
2536   if (reldata->hashes == NULL && reldata->count)
2537     {
2538       struct elf_link_hash_entry **p;
2539
2540       p = ((struct elf_link_hash_entry **)
2541            bfd_zmalloc (reldata->count * sizeof (*p)));
2542       if (p == NULL)
2543         return FALSE;
2544
2545       reldata->hashes = p;
2546     }
2547
2548   return TRUE;
2549 }
2550
2551 /* Copy the relocations indicated by the INTERNAL_RELOCS (which
2552    originated from the section given by INPUT_REL_HDR) to the
2553    OUTPUT_BFD.  */
2554
2555 bfd_boolean
2556 _bfd_elf_link_output_relocs (bfd *output_bfd,
2557                              asection *input_section,
2558                              Elf_Internal_Shdr *input_rel_hdr,
2559                              Elf_Internal_Rela *internal_relocs,
2560                              struct elf_link_hash_entry **rel_hash
2561                                ATTRIBUTE_UNUSED)
2562 {
2563   Elf_Internal_Rela *irela;
2564   Elf_Internal_Rela *irelaend;
2565   bfd_byte *erel;
2566   struct bfd_elf_section_reloc_data *output_reldata;
2567   asection *output_section;
2568   const struct elf_backend_data *bed;
2569   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
2570   struct bfd_elf_section_data *esdo;
2571
2572   output_section = input_section->output_section;
2573
2574   bed = get_elf_backend_data (output_bfd);
2575   esdo = elf_section_data (output_section);
2576   if (esdo->rel.hdr && esdo->rel.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2577     {
2578       output_reldata = &esdo->rel;
2579       swap_out = bed->s->swap_reloc_out;
2580     }
2581   else if (esdo->rela.hdr
2582            && esdo->rela.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2583     {
2584       output_reldata = &esdo->rela;
2585       swap_out = bed->s->swap_reloca_out;
2586     }
2587   else
2588     {
2589       _bfd_error_handler
2590         /* xgettext:c-format */
2591         (_("%B: relocation size mismatch in %B section %A"),
2592          output_bfd, input_section->owner, input_section);
2593       bfd_set_error (bfd_error_wrong_format);
2594       return FALSE;
2595     }
2596
2597   erel = output_reldata->hdr->contents;
2598   erel += output_reldata->count * input_rel_hdr->sh_entsize;
2599   irela = internal_relocs;
2600   irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr)
2601                       * bed->s->int_rels_per_ext_rel);
2602   while (irela < irelaend)
2603     {
2604       (*swap_out) (output_bfd, irela, erel);
2605       irela += bed->s->int_rels_per_ext_rel;
2606       erel += input_rel_hdr->sh_entsize;
2607     }
2608
2609   /* Bump the counter, so that we know where to add the next set of
2610      relocations.  */
2611   output_reldata->count += NUM_SHDR_ENTRIES (input_rel_hdr);
2612
2613   return TRUE;
2614 }
2615 \f
2616 /* Make weak undefined symbols in PIE dynamic.  */
2617
2618 bfd_boolean
2619 _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info,
2620                                  struct elf_link_hash_entry *h)
2621 {
2622   if (bfd_link_pie (info)
2623       && h->dynindx == -1
2624       && h->root.type == bfd_link_hash_undefweak)
2625     return bfd_elf_link_record_dynamic_symbol (info, h);
2626
2627   return TRUE;
2628 }
2629
2630 /* Fix up the flags for a symbol.  This handles various cases which
2631    can only be fixed after all the input files are seen.  This is
2632    currently called by both adjust_dynamic_symbol and
2633    assign_sym_version, which is unnecessary but perhaps more robust in
2634    the face of future changes.  */
2635
2636 static bfd_boolean
2637 _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
2638                            struct elf_info_failed *eif)
2639 {
2640   const struct elf_backend_data *bed;
2641
2642   /* If this symbol was mentioned in a non-ELF file, try to set
2643      DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
2644      permit a non-ELF file to correctly refer to a symbol defined in
2645      an ELF dynamic object.  */
2646   if (h->non_elf)
2647     {
2648       while (h->root.type == bfd_link_hash_indirect)
2649         h = (struct elf_link_hash_entry *) h->root.u.i.link;
2650
2651       if (h->root.type != bfd_link_hash_defined
2652           && h->root.type != bfd_link_hash_defweak)
2653         {
2654           h->ref_regular = 1;
2655           h->ref_regular_nonweak = 1;
2656         }
2657       else
2658         {
2659           if (h->root.u.def.section->owner != NULL
2660               && (bfd_get_flavour (h->root.u.def.section->owner)
2661                   == bfd_target_elf_flavour))
2662             {
2663               h->ref_regular = 1;
2664               h->ref_regular_nonweak = 1;
2665             }
2666           else
2667             h->def_regular = 1;
2668         }
2669
2670       if (h->dynindx == -1
2671           && (h->def_dynamic
2672               || h->ref_dynamic))
2673         {
2674           if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2675             {
2676               eif->failed = TRUE;
2677               return FALSE;
2678             }
2679         }
2680     }
2681   else
2682     {
2683       /* Unfortunately, NON_ELF is only correct if the symbol
2684          was first seen in a non-ELF file.  Fortunately, if the symbol
2685          was first seen in an ELF file, we're probably OK unless the
2686          symbol was defined in a non-ELF file.  Catch that case here.
2687          FIXME: We're still in trouble if the symbol was first seen in
2688          a dynamic object, and then later in a non-ELF regular object.  */
2689       if ((h->root.type == bfd_link_hash_defined
2690            || h->root.type == bfd_link_hash_defweak)
2691           && !h->def_regular
2692           && (h->root.u.def.section->owner != NULL
2693               ? (bfd_get_flavour (h->root.u.def.section->owner)
2694                  != bfd_target_elf_flavour)
2695               : (bfd_is_abs_section (h->root.u.def.section)
2696                  && !h->def_dynamic)))
2697         h->def_regular = 1;
2698     }
2699
2700   /* Backend specific symbol fixup.  */
2701   bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
2702   if (bed->elf_backend_fixup_symbol
2703       && !(*bed->elf_backend_fixup_symbol) (eif->info, h))
2704     return FALSE;
2705
2706   /* If this is a final link, and the symbol was defined as a common
2707      symbol in a regular object file, and there was no definition in
2708      any dynamic object, then the linker will have allocated space for
2709      the symbol in a common section but the DEF_REGULAR
2710      flag will not have been set.  */
2711   if (h->root.type == bfd_link_hash_defined
2712       && !h->def_regular
2713       && h->ref_regular
2714       && !h->def_dynamic
2715       && (h->root.u.def.section->owner->flags & (DYNAMIC | BFD_PLUGIN)) == 0)
2716     h->def_regular = 1;
2717
2718   /* If a weak undefined symbol has non-default visibility, we also
2719      hide it from the dynamic linker.  */
2720   if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2721       && h->root.type == bfd_link_hash_undefweak)
2722     (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2723
2724   /* A hidden versioned symbol in executable should be forced local if
2725      it is is locally defined, not referenced by shared library and not
2726      exported.  */
2727   else if (bfd_link_executable (eif->info)
2728            && h->versioned == versioned_hidden
2729            && !eif->info->export_dynamic
2730            && !h->dynamic
2731            && !h->ref_dynamic
2732            && h->def_regular)
2733     (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2734
2735   /* If -Bsymbolic was used (which means to bind references to global
2736      symbols to the definition within the shared object), and this
2737      symbol was defined in a regular object, then it actually doesn't
2738      need a PLT entry.  Likewise, if the symbol has non-default
2739      visibility.  If the symbol has hidden or internal visibility, we
2740      will force it local.  */
2741   else if (h->needs_plt
2742            && bfd_link_pic (eif->info)
2743            && is_elf_hash_table (eif->info->hash)
2744            && (SYMBOLIC_BIND (eif->info, h)
2745                || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
2746            && h->def_regular)
2747     {
2748       bfd_boolean force_local;
2749
2750       force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
2751                      || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
2752       (*bed->elf_backend_hide_symbol) (eif->info, h, force_local);
2753     }
2754
2755   /* If this is a weak defined symbol in a dynamic object, and we know
2756      the real definition in the dynamic object, copy interesting flags
2757      over to the real definition.  */
2758   if (h->u.weakdef != NULL)
2759     {
2760       /* If the real definition is defined by a regular object file,
2761          don't do anything special.  See the longer description in
2762          _bfd_elf_adjust_dynamic_symbol, below.  */
2763       if (h->u.weakdef->def_regular)
2764         h->u.weakdef = NULL;
2765       else
2766         {
2767           struct elf_link_hash_entry *weakdef = h->u.weakdef;
2768
2769           while (h->root.type == bfd_link_hash_indirect)
2770             h = (struct elf_link_hash_entry *) h->root.u.i.link;
2771
2772           BFD_ASSERT (h->root.type == bfd_link_hash_defined
2773                       || h->root.type == bfd_link_hash_defweak);
2774           BFD_ASSERT (weakdef->def_dynamic);
2775           BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
2776                       || weakdef->root.type == bfd_link_hash_defweak);
2777           (*bed->elf_backend_copy_indirect_symbol) (eif->info, weakdef, h);
2778         }
2779     }
2780
2781   return TRUE;
2782 }
2783
2784 /* Make the backend pick a good value for a dynamic symbol.  This is
2785    called via elf_link_hash_traverse, and also calls itself
2786    recursively.  */
2787
2788 static bfd_boolean
2789 _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
2790 {
2791   struct elf_info_failed *eif = (struct elf_info_failed *) data;
2792   bfd *dynobj;
2793   const struct elf_backend_data *bed;
2794
2795   if (! is_elf_hash_table (eif->info->hash))
2796     return FALSE;
2797
2798   /* Ignore indirect symbols.  These are added by the versioning code.  */
2799   if (h->root.type == bfd_link_hash_indirect)
2800     return TRUE;
2801
2802   /* Fix the symbol flags.  */
2803   if (! _bfd_elf_fix_symbol_flags (h, eif))
2804     return FALSE;
2805
2806   if (h->root.type == bfd_link_hash_undefweak)
2807     {
2808       if (eif->info->dynamic_undefined_weak == 0)
2809         _bfd_elf_link_hash_hide_symbol (eif->info, h, TRUE);
2810       else if (eif->info->dynamic_undefined_weak > 0
2811                && h->ref_regular
2812                && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2813                && !bfd_hide_sym_by_version (eif->info->version_info,
2814                                             h->root.root.string))
2815         {
2816           if (!bfd_elf_link_record_dynamic_symbol (eif->info, h))
2817             {
2818               eif->failed = TRUE;
2819               return FALSE;
2820             }
2821         }
2822     }
2823
2824   /* If this symbol does not require a PLT entry, and it is not
2825      defined by a dynamic object, or is not referenced by a regular
2826      object, ignore it.  We do have to handle a weak defined symbol,
2827      even if no regular object refers to it, if we decided to add it
2828      to the dynamic symbol table.  FIXME: Do we normally need to worry
2829      about symbols which are defined by one dynamic object and
2830      referenced by another one?  */
2831   if (!h->needs_plt
2832       && h->type != STT_GNU_IFUNC
2833       && (h->def_regular
2834           || !h->def_dynamic
2835           || (!h->ref_regular
2836               && (h->u.weakdef == NULL || h->u.weakdef->dynindx == -1))))
2837     {
2838       h->plt = elf_hash_table (eif->info)->init_plt_offset;
2839       return TRUE;
2840     }
2841
2842   /* If we've already adjusted this symbol, don't do it again.  This
2843      can happen via a recursive call.  */
2844   if (h->dynamic_adjusted)
2845     return TRUE;
2846
2847   /* Don't look at this symbol again.  Note that we must set this
2848      after checking the above conditions, because we may look at a
2849      symbol once, decide not to do anything, and then get called
2850      recursively later after REF_REGULAR is set below.  */
2851   h->dynamic_adjusted = 1;
2852
2853   /* If this is a weak definition, and we know a real definition, and
2854      the real symbol is not itself defined by a regular object file,
2855      then get a good value for the real definition.  We handle the
2856      real symbol first, for the convenience of the backend routine.
2857
2858      Note that there is a confusing case here.  If the real definition
2859      is defined by a regular object file, we don't get the real symbol
2860      from the dynamic object, but we do get the weak symbol.  If the
2861      processor backend uses a COPY reloc, then if some routine in the
2862      dynamic object changes the real symbol, we will not see that
2863      change in the corresponding weak symbol.  This is the way other
2864      ELF linkers work as well, and seems to be a result of the shared
2865      library model.
2866
2867      I will clarify this issue.  Most SVR4 shared libraries define the
2868      variable _timezone and define timezone as a weak synonym.  The
2869      tzset call changes _timezone.  If you write
2870        extern int timezone;
2871        int _timezone = 5;
2872        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
2873      you might expect that, since timezone is a synonym for _timezone,
2874      the same number will print both times.  However, if the processor
2875      backend uses a COPY reloc, then actually timezone will be copied
2876      into your process image, and, since you define _timezone
2877      yourself, _timezone will not.  Thus timezone and _timezone will
2878      wind up at different memory locations.  The tzset call will set
2879      _timezone, leaving timezone unchanged.  */
2880
2881   if (h->u.weakdef != NULL)
2882     {
2883       /* If we get to this point, there is an implicit reference to
2884          H->U.WEAKDEF by a regular object file via the weak symbol H.  */
2885       h->u.weakdef->ref_regular = 1;
2886
2887       /* Ensure that the backend adjust_dynamic_symbol function sees
2888          H->U.WEAKDEF before H by recursively calling ourselves.  */
2889       if (! _bfd_elf_adjust_dynamic_symbol (h->u.weakdef, eif))
2890         return FALSE;
2891     }
2892
2893   /* If a symbol has no type and no size and does not require a PLT
2894      entry, then we are probably about to do the wrong thing here: we
2895      are probably going to create a COPY reloc for an empty object.
2896      This case can arise when a shared object is built with assembly
2897      code, and the assembly code fails to set the symbol type.  */
2898   if (h->size == 0
2899       && h->type == STT_NOTYPE
2900       && !h->needs_plt)
2901     _bfd_error_handler
2902       (_("warning: type and size of dynamic symbol `%s' are not defined"),
2903        h->root.root.string);
2904
2905   dynobj = elf_hash_table (eif->info)->dynobj;
2906   bed = get_elf_backend_data (dynobj);
2907
2908   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
2909     {
2910       eif->failed = TRUE;
2911       return FALSE;
2912     }
2913
2914   return TRUE;
2915 }
2916
2917 /* Adjust the dynamic symbol, H, for copy in the dynamic bss section,
2918    DYNBSS.  */
2919
2920 bfd_boolean
2921 _bfd_elf_adjust_dynamic_copy (struct bfd_link_info *info,
2922                               struct elf_link_hash_entry *h,
2923                               asection *dynbss)
2924 {
2925   unsigned int power_of_two;
2926   bfd_vma mask;
2927   asection *sec = h->root.u.def.section;
2928
2929   /* The section aligment of definition is the maximum alignment
2930      requirement of symbols defined in the section.  Since we don't
2931      know the symbol alignment requirement, we start with the
2932      maximum alignment and check low bits of the symbol address
2933      for the minimum alignment.  */
2934   power_of_two = bfd_get_section_alignment (sec->owner, sec);
2935   mask = ((bfd_vma) 1 << power_of_two) - 1;
2936   while ((h->root.u.def.value & mask) != 0)
2937     {
2938        mask >>= 1;
2939        --power_of_two;
2940     }
2941
2942   if (power_of_two > bfd_get_section_alignment (dynbss->owner,
2943                                                 dynbss))
2944     {
2945       /* Adjust the section alignment if needed.  */
2946       if (! bfd_set_section_alignment (dynbss->owner, dynbss,
2947                                        power_of_two))
2948         return FALSE;
2949     }
2950
2951   /* We make sure that the symbol will be aligned properly.  */
2952   dynbss->size = BFD_ALIGN (dynbss->size, mask + 1);
2953
2954   /* Define the symbol as being at this point in DYNBSS.  */
2955   h->root.u.def.section = dynbss;
2956   h->root.u.def.value = dynbss->size;
2957
2958   /* Increment the size of DYNBSS to make room for the symbol.  */
2959   dynbss->size += h->size;
2960
2961   /* No error if extern_protected_data is true.  */
2962   if (h->protected_def
2963       && (!info->extern_protected_data
2964           || (info->extern_protected_data < 0
2965               && !get_elf_backend_data (dynbss->owner)->extern_protected_data)))
2966     info->callbacks->einfo
2967       (_("%P: copy reloc against protected `%T' is dangerous\n"),
2968        h->root.root.string);
2969
2970   return TRUE;
2971 }
2972
2973 /* Adjust all external symbols pointing into SEC_MERGE sections
2974    to reflect the object merging within the sections.  */
2975
2976 static bfd_boolean
2977 _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
2978 {
2979   asection *sec;
2980
2981   if ((h->root.type == bfd_link_hash_defined
2982        || h->root.type == bfd_link_hash_defweak)
2983       && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
2984       && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
2985     {
2986       bfd *output_bfd = (bfd *) data;
2987
2988       h->root.u.def.value =
2989         _bfd_merged_section_offset (output_bfd,
2990                                     &h->root.u.def.section,
2991                                     elf_section_data (sec)->sec_info,
2992                                     h->root.u.def.value);
2993     }
2994
2995   return TRUE;
2996 }
2997
2998 /* Returns false if the symbol referred to by H should be considered
2999    to resolve local to the current module, and true if it should be
3000    considered to bind dynamically.  */
3001
3002 bfd_boolean
3003 _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
3004                            struct bfd_link_info *info,
3005                            bfd_boolean not_local_protected)
3006 {
3007   bfd_boolean binding_stays_local_p;
3008   const struct elf_backend_data *bed;
3009   struct elf_link_hash_table *hash_table;
3010
3011   if (h == NULL)
3012     return FALSE;
3013
3014   while (h->root.type == bfd_link_hash_indirect
3015          || h->root.type == bfd_link_hash_warning)
3016     h = (struct elf_link_hash_entry *) h->root.u.i.link;
3017
3018   /* If it was forced local, then clearly it's not dynamic.  */
3019   if (h->dynindx == -1)
3020     return FALSE;
3021   if (h->forced_local)
3022     return FALSE;
3023
3024   /* Identify the cases where name binding rules say that a
3025      visible symbol resolves locally.  */
3026   binding_stays_local_p = (bfd_link_executable (info)
3027                            || SYMBOLIC_BIND (info, h));
3028
3029   switch (ELF_ST_VISIBILITY (h->other))
3030     {
3031     case STV_INTERNAL:
3032     case STV_HIDDEN:
3033       return FALSE;
3034
3035     case STV_PROTECTED:
3036       hash_table = elf_hash_table (info);
3037       if (!is_elf_hash_table (hash_table))
3038         return FALSE;
3039
3040       bed = get_elf_backend_data (hash_table->dynobj);
3041
3042       /* Proper resolution for function pointer equality may require
3043          that these symbols perhaps be resolved dynamically, even though
3044          we should be resolving them to the current module.  */
3045       if (!not_local_protected || !bed->is_function_type (h->type))
3046         binding_stays_local_p = TRUE;
3047       break;
3048
3049     default:
3050       break;
3051     }
3052
3053   /* If it isn't defined locally, then clearly it's dynamic.  */
3054   if (!h->def_regular && !ELF_COMMON_DEF_P (h))
3055     return TRUE;
3056
3057   /* Otherwise, the symbol is dynamic if binding rules don't tell
3058      us that it remains local.  */
3059   return !binding_stays_local_p;
3060 }
3061
3062 /* Return true if the symbol referred to by H should be considered
3063    to resolve local to the current module, and false otherwise.  Differs
3064    from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
3065    undefined symbols.  The two functions are virtually identical except
3066    for the place where dynindx == -1 is tested.  If that test is true,
3067    _bfd_elf_dynamic_symbol_p will say the symbol is local, while
3068    _bfd_elf_symbol_refs_local_p will say the symbol is local only for
3069    defined symbols.
3070    It might seem that _bfd_elf_dynamic_symbol_p could be rewritten as
3071    !_bfd_elf_symbol_refs_local_p, except that targets differ in their
3072    treatment of undefined weak symbols.  For those that do not make
3073    undefined weak symbols dynamic, both functions may return false.  */
3074
3075 bfd_boolean
3076 _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
3077                               struct bfd_link_info *info,
3078                               bfd_boolean local_protected)
3079 {
3080   const struct elf_backend_data *bed;
3081   struct elf_link_hash_table *hash_table;
3082
3083   /* If it's a local sym, of course we resolve locally.  */
3084   if (h == NULL)
3085     return TRUE;
3086
3087   /* STV_HIDDEN or STV_INTERNAL ones must be local.  */
3088   if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
3089       || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
3090     return TRUE;
3091
3092   /* Forced local symbols resolve locally.  */
3093   if (h->forced_local)
3094     return TRUE;
3095
3096   /* Common symbols that become definitions don't get the DEF_REGULAR
3097      flag set, so test it first, and don't bail out.  */
3098   if (ELF_COMMON_DEF_P (h))
3099     /* Do nothing.  */;
3100   /* If we don't have a definition in a regular file, then we can't
3101      resolve locally.  The sym is either undefined or dynamic.  */
3102   else if (!h->def_regular)
3103     return FALSE;
3104
3105   /* Non-dynamic symbols resolve locally.  */
3106   if (h->dynindx == -1)
3107     return TRUE;
3108
3109   /* At this point, we know the symbol is defined and dynamic.  In an
3110      executable it must resolve locally, likewise when building symbolic
3111      shared libraries.  */
3112   if (bfd_link_executable (info) || SYMBOLIC_BIND (info, h))
3113     return TRUE;
3114
3115   /* Now deal with defined dynamic symbols in shared libraries.  Ones
3116      with default visibility might not resolve locally.  */
3117   if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
3118     return FALSE;
3119
3120   hash_table = elf_hash_table (info);
3121   if (!is_elf_hash_table (hash_table))
3122     return TRUE;
3123
3124   bed = get_elf_backend_data (hash_table->dynobj);
3125
3126   /* If extern_protected_data is false, STV_PROTECTED non-function
3127      symbols are local.  */
3128   if ((!info->extern_protected_data
3129        || (info->extern_protected_data < 0
3130            && !bed->extern_protected_data))
3131       && !bed->is_function_type (h->type))
3132     return TRUE;
3133
3134   /* Function pointer equality tests may require that STV_PROTECTED
3135      symbols be treated as dynamic symbols.  If the address of a
3136      function not defined in an executable is set to that function's
3137      plt entry in the executable, then the address of the function in
3138      a shared library must also be the plt entry in the executable.  */
3139   return local_protected;
3140 }
3141
3142 /* Caches some TLS segment info, and ensures that the TLS segment vma is
3143    aligned.  Returns the first TLS output section.  */
3144
3145 struct bfd_section *
3146 _bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
3147 {
3148   struct bfd_section *sec, *tls;
3149   unsigned int align = 0;
3150
3151   for (sec = obfd->sections; sec != NULL; sec = sec->next)
3152     if ((sec->flags & SEC_THREAD_LOCAL) != 0)
3153       break;
3154   tls = sec;
3155
3156   for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next)
3157     if (sec->alignment_power > align)
3158       align = sec->alignment_power;
3159
3160   elf_hash_table (info)->tls_sec = tls;
3161
3162   /* Ensure the alignment of the first section is the largest alignment,
3163      so that the tls segment starts aligned.  */
3164   if (tls != NULL)
3165     tls->alignment_power = align;
3166
3167   return tls;
3168 }
3169
3170 /* Return TRUE iff this is a non-common, definition of a non-function symbol.  */
3171 static bfd_boolean
3172 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
3173                                   Elf_Internal_Sym *sym)
3174 {
3175   const struct elf_backend_data *bed;
3176
3177   /* Local symbols do not count, but target specific ones might.  */
3178   if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
3179       && ELF_ST_BIND (sym->st_info) < STB_LOOS)
3180     return FALSE;
3181
3182   bed = get_elf_backend_data (abfd);
3183   /* Function symbols do not count.  */
3184   if (bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
3185     return FALSE;
3186
3187   /* If the section is undefined, then so is the symbol.  */
3188   if (sym->st_shndx == SHN_UNDEF)
3189     return FALSE;
3190
3191   /* If the symbol is defined in the common section, then
3192      it is a common definition and so does not count.  */
3193   if (bed->common_definition (sym))
3194     return FALSE;
3195
3196   /* If the symbol is in a target specific section then we
3197      must rely upon the backend to tell us what it is.  */
3198   if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
3199     /* FIXME - this function is not coded yet:
3200
3201        return _bfd_is_global_symbol_definition (abfd, sym);
3202
3203        Instead for now assume that the definition is not global,
3204        Even if this is wrong, at least the linker will behave
3205        in the same way that it used to do.  */
3206     return FALSE;
3207
3208   return TRUE;
3209 }
3210
3211 /* Search the symbol table of the archive element of the archive ABFD
3212    whose archive map contains a mention of SYMDEF, and determine if
3213    the symbol is defined in this element.  */
3214 static bfd_boolean
3215 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
3216 {
3217   Elf_Internal_Shdr * hdr;
3218   size_t symcount;
3219   size_t extsymcount;
3220   size_t extsymoff;
3221   Elf_Internal_Sym *isymbuf;
3222   Elf_Internal_Sym *isym;
3223   Elf_Internal_Sym *isymend;
3224   bfd_boolean result;
3225
3226   abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
3227   if (abfd == NULL)
3228     return FALSE;
3229
3230   if (! bfd_check_format (abfd, bfd_object))
3231     return FALSE;
3232
3233   /* Select the appropriate symbol table.  If we don't know if the
3234      object file is an IR object, give linker LTO plugin a chance to
3235      get the correct symbol table.  */
3236   if (abfd->plugin_format == bfd_plugin_yes
3237 #if BFD_SUPPORTS_PLUGINS
3238       || (abfd->plugin_format == bfd_plugin_unknown
3239           && bfd_link_plugin_object_p (abfd))
3240 #endif
3241       )
3242     {
3243       /* Use the IR symbol table if the object has been claimed by
3244          plugin.  */
3245       abfd = abfd->plugin_dummy_bfd;
3246       hdr = &elf_tdata (abfd)->symtab_hdr;
3247     }
3248   else if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
3249     hdr = &elf_tdata (abfd)->symtab_hdr;
3250   else
3251     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3252
3253   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3254
3255   /* The sh_info field of the symtab header tells us where the
3256      external symbols start.  We don't care about the local symbols.  */
3257   if (elf_bad_symtab (abfd))
3258     {
3259       extsymcount = symcount;
3260       extsymoff = 0;
3261     }
3262   else
3263     {
3264       extsymcount = symcount - hdr->sh_info;
3265       extsymoff = hdr->sh_info;
3266     }
3267
3268   if (extsymcount == 0)
3269     return FALSE;
3270
3271   /* Read in the symbol table.  */
3272   isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3273                                   NULL, NULL, NULL);
3274   if (isymbuf == NULL)
3275     return FALSE;
3276
3277   /* Scan the symbol table looking for SYMDEF.  */
3278   result = FALSE;
3279   for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
3280     {
3281       const char *name;
3282
3283       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3284                                               isym->st_name);
3285       if (name == NULL)
3286         break;
3287
3288       if (strcmp (name, symdef->name) == 0)
3289         {
3290           result = is_global_data_symbol_definition (abfd, isym);
3291           break;
3292         }
3293     }
3294
3295   free (isymbuf);
3296
3297   return result;
3298 }
3299 \f
3300 /* Add an entry to the .dynamic table.  */
3301
3302 bfd_boolean
3303 _bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
3304                             bfd_vma tag,
3305                             bfd_vma val)
3306 {
3307   struct elf_link_hash_table *hash_table;
3308   const struct elf_backend_data *bed;
3309   asection *s;
3310   bfd_size_type newsize;
3311   bfd_byte *newcontents;
3312   Elf_Internal_Dyn dyn;
3313
3314   hash_table = elf_hash_table (info);
3315   if (! is_elf_hash_table (hash_table))
3316     return FALSE;
3317
3318   bed = get_elf_backend_data (hash_table->dynobj);
3319   s = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
3320   BFD_ASSERT (s != NULL);
3321
3322   newsize = s->size + bed->s->sizeof_dyn;
3323   newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
3324   if (newcontents == NULL)
3325     return FALSE;
3326
3327   dyn.d_tag = tag;
3328   dyn.d_un.d_val = val;
3329   bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size);
3330
3331   s->size = newsize;
3332   s->contents = newcontents;
3333
3334   return TRUE;
3335 }
3336
3337 /* Add a DT_NEEDED entry for this dynamic object if DO_IT is true,
3338    otherwise just check whether one already exists.  Returns -1 on error,
3339    1 if a DT_NEEDED tag already exists, and 0 on success.  */
3340
3341 static int
3342 elf_add_dt_needed_tag (bfd *abfd,
3343                        struct bfd_link_info *info,
3344                        const char *soname,
3345                        bfd_boolean do_it)
3346 {
3347   struct elf_link_hash_table *hash_table;
3348   size_t strindex;
3349
3350   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
3351     return -1;
3352
3353   hash_table = elf_hash_table (info);
3354   strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE);
3355   if (strindex == (size_t) -1)
3356     return -1;
3357
3358   if (_bfd_elf_strtab_refcount (hash_table->dynstr, strindex) != 1)
3359     {
3360       asection *sdyn;
3361       const struct elf_backend_data *bed;
3362       bfd_byte *extdyn;
3363
3364       bed = get_elf_backend_data (hash_table->dynobj);
3365       sdyn = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
3366       if (sdyn != NULL)
3367         for (extdyn = sdyn->contents;
3368              extdyn < sdyn->contents + sdyn->size;
3369              extdyn += bed->s->sizeof_dyn)
3370           {
3371             Elf_Internal_Dyn dyn;
3372
3373             bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn);
3374             if (dyn.d_tag == DT_NEEDED
3375                 && dyn.d_un.d_val == strindex)
3376               {
3377                 _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3378                 return 1;
3379               }
3380           }
3381     }
3382
3383   if (do_it)
3384     {
3385       if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
3386         return -1;
3387
3388       if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
3389         return -1;
3390     }
3391   else
3392     /* We were just checking for existence of the tag.  */
3393     _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3394
3395   return 0;
3396 }
3397
3398 /* Return true if SONAME is on the needed list between NEEDED and STOP
3399    (or the end of list if STOP is NULL), and needed by a library that
3400    will be loaded.  */
3401
3402 static bfd_boolean
3403 on_needed_list (const char *soname,
3404                 struct bfd_link_needed_list *needed,
3405                 struct bfd_link_needed_list *stop)
3406 {
3407   struct bfd_link_needed_list *look;
3408   for (look = needed; look != stop; look = look->next)
3409     if (strcmp (soname, look->name) == 0
3410         && ((elf_dyn_lib_class (look->by) & DYN_AS_NEEDED) == 0
3411             /* If needed by a library that itself is not directly
3412                needed, recursively check whether that library is
3413                indirectly needed.  Since we add DT_NEEDED entries to
3414                the end of the list, library dependencies appear after
3415                the library.  Therefore search prior to the current
3416                LOOK, preventing possible infinite recursion.  */
3417             || on_needed_list (elf_dt_name (look->by), needed, look)))
3418       return TRUE;
3419
3420   return FALSE;
3421 }
3422
3423 /* Sort symbol by value, section, and size.  */
3424 static int
3425 elf_sort_symbol (const void *arg1, const void *arg2)
3426 {
3427   const struct elf_link_hash_entry *h1;
3428   const struct elf_link_hash_entry *h2;
3429   bfd_signed_vma vdiff;
3430
3431   h1 = *(const struct elf_link_hash_entry **) arg1;
3432   h2 = *(const struct elf_link_hash_entry **) arg2;
3433   vdiff = h1->root.u.def.value - h2->root.u.def.value;
3434   if (vdiff != 0)
3435     return vdiff > 0 ? 1 : -1;
3436   else
3437     {
3438       int sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id;
3439       if (sdiff != 0)
3440         return sdiff > 0 ? 1 : -1;
3441     }
3442   vdiff = h1->size - h2->size;
3443   return vdiff == 0 ? 0 : vdiff > 0 ? 1 : -1;
3444 }
3445
3446 /* This function is used to adjust offsets into .dynstr for
3447    dynamic symbols.  This is called via elf_link_hash_traverse.  */
3448
3449 static bfd_boolean
3450 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
3451 {
3452   struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;
3453
3454   if (h->dynindx != -1)
3455     h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
3456   return TRUE;
3457 }
3458
3459 /* Assign string offsets in .dynstr, update all structures referencing
3460    them.  */
3461
3462 static bfd_boolean
3463 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
3464 {
3465   struct elf_link_hash_table *hash_table = elf_hash_table (info);
3466   struct elf_link_local_dynamic_entry *entry;
3467   struct elf_strtab_hash *dynstr = hash_table->dynstr;
3468   bfd *dynobj = hash_table->dynobj;
3469   asection *sdyn;
3470   bfd_size_type size;
3471   const struct elf_backend_data *bed;
3472   bfd_byte *extdyn;
3473
3474   _bfd_elf_strtab_finalize (dynstr);
3475   size = _bfd_elf_strtab_size (dynstr);
3476
3477   bed = get_elf_backend_data (dynobj);
3478   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
3479   BFD_ASSERT (sdyn != NULL);
3480
3481   /* Update all .dynamic entries referencing .dynstr strings.  */
3482   for (extdyn = sdyn->contents;
3483        extdyn < sdyn->contents + sdyn->size;
3484        extdyn += bed->s->sizeof_dyn)
3485     {
3486       Elf_Internal_Dyn dyn;
3487
3488       bed->s->swap_dyn_in (dynobj, extdyn, &dyn);
3489       switch (dyn.d_tag)
3490         {
3491         case DT_STRSZ:
3492           dyn.d_un.d_val = size;
3493           break;
3494         case DT_NEEDED:
3495         case DT_SONAME:
3496         case DT_RPATH:
3497         case DT_RUNPATH:
3498         case DT_FILTER:
3499         case DT_AUXILIARY:
3500         case DT_AUDIT:
3501         case DT_DEPAUDIT:
3502           dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
3503           break;
3504         default:
3505           continue;
3506         }
3507       bed->s->swap_dyn_out (dynobj, &dyn, extdyn);
3508     }
3509
3510   /* Now update local dynamic symbols.  */
3511   for (entry = hash_table->dynlocal; entry ; entry = entry->next)
3512     entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
3513                                                   entry->isym.st_name);
3514
3515   /* And the rest of dynamic symbols.  */
3516   elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr);
3517
3518   /* Adjust version definitions.  */
3519   if (elf_tdata (output_bfd)->cverdefs)
3520     {
3521       asection *s;
3522       bfd_byte *p;
3523       size_t i;
3524       Elf_Internal_Verdef def;
3525       Elf_Internal_Verdaux defaux;
3526
3527       s = bfd_get_linker_section (dynobj, ".gnu.version_d");
3528       p = s->contents;
3529       do
3530         {
3531           _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
3532                                    &def);
3533           p += sizeof (Elf_External_Verdef);
3534           if (def.vd_aux != sizeof (Elf_External_Verdef))
3535             continue;
3536           for (i = 0; i < def.vd_cnt; ++i)
3537             {
3538               _bfd_elf_swap_verdaux_in (output_bfd,
3539                                         (Elf_External_Verdaux *) p, &defaux);
3540               defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
3541                                                         defaux.vda_name);
3542               _bfd_elf_swap_verdaux_out (output_bfd,
3543                                          &defaux, (Elf_External_Verdaux *) p);
3544               p += sizeof (Elf_External_Verdaux);
3545             }
3546         }
3547       while (def.vd_next);
3548     }
3549
3550   /* Adjust version references.  */
3551   if (elf_tdata (output_bfd)->verref)
3552     {
3553       asection *s;
3554       bfd_byte *p;
3555       size_t i;
3556       Elf_Internal_Verneed need;
3557       Elf_Internal_Vernaux needaux;
3558
3559       s = bfd_get_linker_section (dynobj, ".gnu.version_r");
3560       p = s->contents;
3561       do
3562         {
3563           _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
3564                                     &need);
3565           need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
3566           _bfd_elf_swap_verneed_out (output_bfd, &need,
3567                                      (Elf_External_Verneed *) p);
3568           p += sizeof (Elf_External_Verneed);
3569           for (i = 0; i < need.vn_cnt; ++i)
3570             {
3571               _bfd_elf_swap_vernaux_in (output_bfd,
3572                                         (Elf_External_Vernaux *) p, &needaux);
3573               needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
3574                                                          needaux.vna_name);
3575               _bfd_elf_swap_vernaux_out (output_bfd,
3576                                          &needaux,
3577                                          (Elf_External_Vernaux *) p);
3578               p += sizeof (Elf_External_Vernaux);
3579             }
3580         }
3581       while (need.vn_next);
3582     }
3583
3584   return TRUE;
3585 }
3586 \f
3587 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3588    The default is to only match when the INPUT and OUTPUT are exactly
3589    the same target.  */
3590
3591 bfd_boolean
3592 _bfd_elf_default_relocs_compatible (const bfd_target *input,
3593                                     const bfd_target *output)
3594 {
3595   return input == output;
3596 }
3597
3598 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3599    This version is used when different targets for the same architecture
3600    are virtually identical.  */
3601
3602 bfd_boolean
3603 _bfd_elf_relocs_compatible (const bfd_target *input,
3604                             const bfd_target *output)
3605 {
3606   const struct elf_backend_data *obed, *ibed;
3607
3608   if (input == output)
3609     return TRUE;
3610
3611   ibed = xvec_get_elf_backend_data (input);
3612   obed = xvec_get_elf_backend_data (output);
3613
3614   if (ibed->arch != obed->arch)
3615     return FALSE;
3616
3617   /* If both backends are using this function, deem them compatible.  */
3618   return ibed->relocs_compatible == obed->relocs_compatible;
3619 }
3620
3621 /* Make a special call to the linker "notice" function to tell it that
3622    we are about to handle an as-needed lib, or have finished
3623    processing the lib.  */
3624
3625 bfd_boolean
3626 _bfd_elf_notice_as_needed (bfd *ibfd,
3627                            struct bfd_link_info *info,
3628                            enum notice_asneeded_action act)
3629 {
3630   return (*info->callbacks->notice) (info, NULL, NULL, ibfd, NULL, act, 0);
3631 }
3632
3633 /* Check relocations an ELF object file.  */
3634
3635 bfd_boolean
3636 _bfd_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
3637 {
3638   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3639   struct elf_link_hash_table *htab = elf_hash_table (info);
3640
3641   /* If this object is the same format as the output object, and it is
3642      not a shared library, then let the backend look through the
3643      relocs.
3644
3645      This is required to build global offset table entries and to
3646      arrange for dynamic relocs.  It is not required for the
3647      particular common case of linking non PIC code, even when linking
3648      against shared libraries, but unfortunately there is no way of
3649      knowing whether an object file has been compiled PIC or not.
3650      Looking through the relocs is not particularly time consuming.
3651      The problem is that we must either (1) keep the relocs in memory,
3652      which causes the linker to require additional runtime memory or
3653      (2) read the relocs twice from the input file, which wastes time.
3654      This would be a good case for using mmap.
3655
3656      I have no idea how to handle linking PIC code into a file of a
3657      different format.  It probably can't be done.  */
3658   if ((abfd->flags & DYNAMIC) == 0
3659       && is_elf_hash_table (htab)
3660       && bed->check_relocs != NULL
3661       && elf_object_id (abfd) == elf_hash_table_id (htab)
3662       && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
3663     {
3664       asection *o;
3665
3666       for (o = abfd->sections; o != NULL; o = o->next)
3667         {
3668           Elf_Internal_Rela *internal_relocs;
3669           bfd_boolean ok;
3670
3671           /* Don't check relocations in excluded sections.  */
3672           if ((o->flags & SEC_RELOC) == 0
3673               || (o->flags & SEC_EXCLUDE) != 0
3674               || o->reloc_count == 0
3675               || ((info->strip == strip_all || info->strip == strip_debugger)
3676                   && (o->flags & SEC_DEBUGGING) != 0)
3677               || bfd_is_abs_section (o->output_section))
3678             continue;
3679
3680           internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
3681                                                        info->keep_memory);
3682           if (internal_relocs == NULL)
3683             return FALSE;
3684
3685           ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
3686
3687           if (elf_section_data (o)->relocs != internal_relocs)
3688             free (internal_relocs);
3689
3690           if (! ok)
3691             return FALSE;
3692         }
3693     }
3694
3695   return TRUE;
3696 }
3697
3698 /* Add symbols from an ELF object file to the linker hash table.  */
3699
3700 static bfd_boolean
3701 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
3702 {
3703   Elf_Internal_Ehdr *ehdr;
3704   Elf_Internal_Shdr *hdr;
3705   size_t symcount;
3706   size_t extsymcount;
3707   size_t extsymoff;
3708   struct elf_link_hash_entry **sym_hash;
3709   bfd_boolean dynamic;
3710   Elf_External_Versym *extversym = NULL;
3711   Elf_External_Versym *ever;
3712   struct elf_link_hash_entry *weaks;
3713   struct elf_link_hash_entry **nondeflt_vers = NULL;
3714   size_t nondeflt_vers_cnt = 0;
3715   Elf_Internal_Sym *isymbuf = NULL;
3716   Elf_Internal_Sym *isym;
3717   Elf_Internal_Sym *isymend;
3718   const struct elf_backend_data *bed;
3719   bfd_boolean add_needed;
3720   struct elf_link_hash_table *htab;
3721   bfd_size_type amt;
3722   void *alloc_mark = NULL;
3723   struct bfd_hash_entry **old_table = NULL;
3724   unsigned int old_size = 0;
3725   unsigned int old_count = 0;
3726   void *old_tab = NULL;
3727   void *old_ent;
3728   struct bfd_link_hash_entry *old_undefs = NULL;
3729   struct bfd_link_hash_entry *old_undefs_tail = NULL;
3730   void *old_strtab = NULL;
3731   size_t tabsize = 0;
3732   asection *s;
3733   bfd_boolean just_syms;
3734
3735   htab = elf_hash_table (info);
3736   bed = get_elf_backend_data (abfd);
3737
3738   if ((abfd->flags & DYNAMIC) == 0)
3739     dynamic = FALSE;
3740   else
3741     {
3742       dynamic = TRUE;
3743
3744       /* You can't use -r against a dynamic object.  Also, there's no
3745          hope of using a dynamic object which does not exactly match
3746          the format of the output file.  */
3747       if (bfd_link_relocatable (info)
3748           || !is_elf_hash_table (htab)
3749           || info->output_bfd->xvec != abfd->xvec)
3750         {
3751           if (bfd_link_relocatable (info))
3752             bfd_set_error (bfd_error_invalid_operation);
3753           else
3754             bfd_set_error (bfd_error_wrong_format);
3755           goto error_return;
3756         }
3757     }
3758
3759   ehdr = elf_elfheader (abfd);
3760   if (info->warn_alternate_em
3761       && bed->elf_machine_code != ehdr->e_machine
3762       && ((bed->elf_machine_alt1 != 0
3763            && ehdr->e_machine == bed->elf_machine_alt1)
3764           || (bed->elf_machine_alt2 != 0
3765               && ehdr->e_machine == bed->elf_machine_alt2)))
3766     info->callbacks->einfo
3767       /* xgettext:c-format */
3768       (_("%P: alternate ELF machine code found (%d) in %B, expecting %d\n"),
3769        ehdr->e_machine, abfd, bed->elf_machine_code);
3770
3771   /* As a GNU extension, any input sections which are named
3772      .gnu.warning.SYMBOL are treated as warning symbols for the given
3773      symbol.  This differs from .gnu.warning sections, which generate
3774      warnings when they are included in an output file.  */
3775   /* PR 12761: Also generate this warning when building shared libraries.  */
3776   for (s = abfd->sections; s != NULL; s = s->next)
3777     {
3778       const char *name;
3779
3780       name = bfd_get_section_name (abfd, s);
3781       if (CONST_STRNEQ (name, ".gnu.warning."))
3782         {
3783           char *msg;
3784           bfd_size_type sz;
3785
3786           name += sizeof ".gnu.warning." - 1;
3787
3788           /* If this is a shared object, then look up the symbol
3789              in the hash table.  If it is there, and it is already
3790              been defined, then we will not be using the entry
3791              from this shared object, so we don't need to warn.
3792              FIXME: If we see the definition in a regular object
3793              later on, we will warn, but we shouldn't.  The only
3794              fix is to keep track of what warnings we are supposed
3795              to emit, and then handle them all at the end of the
3796              link.  */
3797           if (dynamic)
3798             {
3799               struct elf_link_hash_entry *h;
3800
3801               h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
3802
3803               /* FIXME: What about bfd_link_hash_common?  */
3804               if (h != NULL
3805                   && (h->root.type == bfd_link_hash_defined
3806                       || h->root.type == bfd_link_hash_defweak))
3807                 continue;
3808             }
3809
3810           sz = s->size;
3811           msg = (char *) bfd_alloc (abfd, sz + 1);
3812           if (msg == NULL)
3813             goto error_return;
3814
3815           if (! bfd_get_section_contents (abfd, s, msg, 0, sz))
3816             goto error_return;
3817
3818           msg[sz] = '\0';
3819
3820           if (! (_bfd_generic_link_add_one_symbol
3821                  (info, abfd, name, BSF_WARNING, s, 0, msg,
3822                   FALSE, bed->collect, NULL)))
3823             goto error_return;
3824
3825           if (bfd_link_executable (info))
3826             {
3827               /* Clobber the section size so that the warning does
3828                  not get copied into the output file.  */
3829               s->size = 0;
3830
3831               /* Also set SEC_EXCLUDE, so that symbols defined in
3832                  the warning section don't get copied to the output.  */
3833               s->flags |= SEC_EXCLUDE;
3834             }
3835         }
3836     }
3837
3838   just_syms = ((s = abfd->sections) != NULL
3839                && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS);
3840
3841   add_needed = TRUE;
3842   if (! dynamic)
3843     {
3844       /* If we are creating a shared library, create all the dynamic
3845          sections immediately.  We need to attach them to something,
3846          so we attach them to this BFD, provided it is the right
3847          format and is not from ld --just-symbols.  Always create the
3848          dynamic sections for -E/--dynamic-list.  FIXME: If there
3849          are no input BFD's of the same format as the output, we can't
3850          make a shared library.  */
3851       if (!just_syms
3852           && (bfd_link_pic (info)
3853               || (!bfd_link_relocatable (info)
3854                   && info->nointerp
3855                   && (info->export_dynamic || info->dynamic)))
3856           && is_elf_hash_table (htab)
3857           && info->output_bfd->xvec == abfd->xvec
3858           && !htab->dynamic_sections_created)
3859         {
3860           if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
3861             goto error_return;
3862         }
3863     }
3864   else if (!is_elf_hash_table (htab))
3865     goto error_return;
3866   else
3867     {
3868       const char *soname = NULL;
3869       char *audit = NULL;
3870       struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
3871       const Elf_Internal_Phdr *phdr;
3872       int ret;
3873
3874       /* ld --just-symbols and dynamic objects don't mix very well.
3875          ld shouldn't allow it.  */
3876       if (just_syms)
3877         abort ();
3878
3879       /* If this dynamic lib was specified on the command line with
3880          --as-needed in effect, then we don't want to add a DT_NEEDED
3881          tag unless the lib is actually used.  Similary for libs brought
3882          in by another lib's DT_NEEDED.  When --no-add-needed is used
3883          on a dynamic lib, we don't want to add a DT_NEEDED entry for
3884          any dynamic library in DT_NEEDED tags in the dynamic lib at
3885          all.  */
3886       add_needed = (elf_dyn_lib_class (abfd)
3887                     & (DYN_AS_NEEDED | DYN_DT_NEEDED
3888                        | DYN_NO_NEEDED)) == 0;
3889
3890       s = bfd_get_section_by_name (abfd, ".dynamic");
3891       if (s != NULL)
3892         {
3893           bfd_byte *dynbuf;
3894           bfd_byte *extdyn;
3895           unsigned int elfsec;
3896           unsigned long shlink;
3897
3898           if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
3899             {
3900 error_free_dyn:
3901               free (dynbuf);
3902               goto error_return;
3903             }
3904
3905           elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
3906           if (elfsec == SHN_BAD)
3907             goto error_free_dyn;
3908           shlink = elf_elfsections (abfd)[elfsec]->sh_link;
3909
3910           for (extdyn = dynbuf;
3911                extdyn < dynbuf + s->size;
3912                extdyn += bed->s->sizeof_dyn)
3913             {
3914               Elf_Internal_Dyn dyn;
3915
3916               bed->s->swap_dyn_in (abfd, extdyn, &dyn);
3917               if (dyn.d_tag == DT_SONAME)
3918                 {
3919                   unsigned int tagv = dyn.d_un.d_val;
3920                   soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3921                   if (soname == NULL)
3922                     goto error_free_dyn;
3923                 }
3924               if (dyn.d_tag == DT_NEEDED)
3925                 {
3926                   struct bfd_link_needed_list *n, **pn;
3927                   char *fnm, *anm;
3928                   unsigned int tagv = dyn.d_un.d_val;
3929
3930                   amt = sizeof (struct bfd_link_needed_list);
3931                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3932                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3933                   if (n == NULL || fnm == NULL)
3934                     goto error_free_dyn;
3935                   amt = strlen (fnm) + 1;
3936                   anm = (char *) bfd_alloc (abfd, amt);
3937                   if (anm == NULL)
3938                     goto error_free_dyn;
3939                   memcpy (anm, fnm, amt);
3940                   n->name = anm;
3941                   n->by = abfd;
3942                   n->next = NULL;
3943                   for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next)
3944                     ;
3945                   *pn = n;
3946                 }
3947               if (dyn.d_tag == DT_RUNPATH)
3948                 {
3949                   struct bfd_link_needed_list *n, **pn;
3950                   char *fnm, *anm;
3951                   unsigned int tagv = dyn.d_un.d_val;
3952
3953                   amt = sizeof (struct bfd_link_needed_list);
3954                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3955                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3956                   if (n == NULL || fnm == NULL)
3957                     goto error_free_dyn;
3958                   amt = strlen (fnm) + 1;
3959                   anm = (char *) bfd_alloc (abfd, amt);
3960                   if (anm == NULL)
3961                     goto error_free_dyn;
3962                   memcpy (anm, fnm, amt);
3963                   n->name = anm;
3964                   n->by = abfd;
3965                   n->next = NULL;
3966                   for (pn = & runpath;
3967                        *pn != NULL;
3968                        pn = &(*pn)->next)
3969                     ;
3970                   *pn = n;
3971                 }
3972               /* Ignore DT_RPATH if we have seen DT_RUNPATH.  */
3973               if (!runpath && dyn.d_tag == DT_RPATH)
3974                 {
3975                   struct bfd_link_needed_list *n, **pn;
3976                   char *fnm, *anm;
3977                   unsigned int tagv = dyn.d_un.d_val;
3978
3979                   amt = sizeof (struct bfd_link_needed_list);
3980                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3981                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3982                   if (n == NULL || fnm == NULL)
3983                     goto error_free_dyn;
3984                   amt = strlen (fnm) + 1;
3985                   anm = (char *) bfd_alloc (abfd, amt);
3986                   if (anm == NULL)
3987                     goto error_free_dyn;
3988                   memcpy (anm, fnm, amt);
3989                   n->name = anm;
3990                   n->by = abfd;
3991                   n->next = NULL;
3992                   for (pn = & rpath;
3993                        *pn != NULL;
3994                        pn = &(*pn)->next)
3995                     ;
3996                   *pn = n;
3997                 }
3998               if (dyn.d_tag == DT_AUDIT)
3999                 {
4000                   unsigned int tagv = dyn.d_un.d_val;
4001                   audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4002                 }
4003             }
4004
4005           free (dynbuf);
4006         }
4007
4008       /* DT_RUNPATH overrides DT_RPATH.  Do _NOT_ bfd_release, as that
4009          frees all more recently bfd_alloc'd blocks as well.  */
4010       if (runpath)
4011         rpath = runpath;
4012
4013       if (rpath)
4014         {
4015           struct bfd_link_needed_list **pn;
4016           for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next)
4017             ;
4018           *pn = rpath;
4019         }
4020
4021       /* If we have a PT_GNU_RELRO program header, mark as read-only
4022          all sections contained fully therein.  This makes relro
4023          shared library sections appear as they will at run-time.  */
4024       phdr = elf_tdata (abfd)->phdr + elf_elfheader (abfd)->e_phnum;
4025       while (--phdr >= elf_tdata (abfd)->phdr)
4026         if (phdr->p_type == PT_GNU_RELRO)
4027           {
4028             for (s = abfd->sections; s != NULL; s = s->next)
4029               if ((s->flags & SEC_ALLOC) != 0
4030                   && s->vma >= phdr->p_vaddr
4031                   && s->vma + s->size <= phdr->p_vaddr + phdr->p_memsz)
4032                 s->flags |= SEC_READONLY;
4033             break;
4034           }
4035
4036       /* We do not want to include any of the sections in a dynamic
4037          object in the output file.  We hack by simply clobbering the
4038          list of sections in the BFD.  This could be handled more
4039          cleanly by, say, a new section flag; the existing
4040          SEC_NEVER_LOAD flag is not the one we want, because that one
4041          still implies that the section takes up space in the output
4042          file.  */
4043       bfd_section_list_clear (abfd);
4044
4045       /* Find the name to use in a DT_NEEDED entry that refers to this
4046          object.  If the object has a DT_SONAME entry, we use it.
4047          Otherwise, if the generic linker stuck something in
4048          elf_dt_name, we use that.  Otherwise, we just use the file
4049          name.  */
4050       if (soname == NULL || *soname == '\0')
4051         {
4052           soname = elf_dt_name (abfd);
4053           if (soname == NULL || *soname == '\0')
4054             soname = bfd_get_filename (abfd);
4055         }
4056
4057       /* Save the SONAME because sometimes the linker emulation code
4058          will need to know it.  */
4059       elf_dt_name (abfd) = soname;
4060
4061       ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4062       if (ret < 0)
4063         goto error_return;
4064
4065       /* If we have already included this dynamic object in the
4066          link, just ignore it.  There is no reason to include a
4067          particular dynamic object more than once.  */
4068       if (ret > 0)
4069         return TRUE;
4070
4071       /* Save the DT_AUDIT entry for the linker emulation code. */
4072       elf_dt_audit (abfd) = audit;
4073     }
4074
4075   /* If this is a dynamic object, we always link against the .dynsym
4076      symbol table, not the .symtab symbol table.  The dynamic linker
4077      will only see the .dynsym symbol table, so there is no reason to
4078      look at .symtab for a dynamic object.  */
4079
4080   if (! dynamic || elf_dynsymtab (abfd) == 0)
4081     hdr = &elf_tdata (abfd)->symtab_hdr;
4082   else
4083     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
4084
4085   symcount = hdr->sh_size / bed->s->sizeof_sym;
4086
4087   /* The sh_info field of the symtab header tells us where the
4088      external symbols start.  We don't care about the local symbols at
4089      this point.  */
4090   if (elf_bad_symtab (abfd))
4091     {
4092       extsymcount = symcount;
4093       extsymoff = 0;
4094     }
4095   else
4096     {
4097       extsymcount = symcount - hdr->sh_info;
4098       extsymoff = hdr->sh_info;
4099     }
4100
4101   sym_hash = elf_sym_hashes (abfd);
4102   if (extsymcount != 0)
4103     {
4104       isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
4105                                       NULL, NULL, NULL);
4106       if (isymbuf == NULL)
4107         goto error_return;
4108
4109       if (sym_hash == NULL)
4110         {
4111           /* We store a pointer to the hash table entry for each
4112              external symbol.  */
4113           amt = extsymcount;
4114           amt *= sizeof (struct elf_link_hash_entry *);
4115           sym_hash = (struct elf_link_hash_entry **) bfd_zalloc (abfd, amt);
4116           if (sym_hash == NULL)
4117             goto error_free_sym;
4118           elf_sym_hashes (abfd) = sym_hash;
4119         }
4120     }
4121
4122   if (dynamic)
4123     {
4124       /* Read in any version definitions.  */
4125       if (!_bfd_elf_slurp_version_tables (abfd,
4126                                           info->default_imported_symver))
4127         goto error_free_sym;
4128
4129       /* Read in the symbol versions, but don't bother to convert them
4130          to internal format.  */
4131       if (elf_dynversym (abfd) != 0)
4132         {
4133           Elf_Internal_Shdr *versymhdr;
4134
4135           versymhdr = &elf_tdata (abfd)->dynversym_hdr;
4136           extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
4137           if (extversym == NULL)
4138             goto error_free_sym;
4139           amt = versymhdr->sh_size;
4140           if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
4141               || bfd_bread (extversym, amt, abfd) != amt)
4142             goto error_free_vers;
4143         }
4144     }
4145
4146   /* If we are loading an as-needed shared lib, save the symbol table
4147      state before we start adding symbols.  If the lib turns out
4148      to be unneeded, restore the state.  */
4149   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4150     {
4151       unsigned int i;
4152       size_t entsize;
4153
4154       for (entsize = 0, i = 0; i < htab->root.table.size; i++)
4155         {
4156           struct bfd_hash_entry *p;
4157           struct elf_link_hash_entry *h;
4158
4159           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4160             {
4161               h = (struct elf_link_hash_entry *) p;
4162               entsize += htab->root.table.entsize;
4163               if (h->root.type == bfd_link_hash_warning)
4164                 entsize += htab->root.table.entsize;
4165             }
4166         }
4167
4168       tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
4169       old_tab = bfd_malloc (tabsize + entsize);
4170       if (old_tab == NULL)
4171         goto error_free_vers;
4172
4173       /* Remember the current objalloc pointer, so that all mem for
4174          symbols added can later be reclaimed.  */
4175       alloc_mark = bfd_hash_allocate (&htab->root.table, 1);
4176       if (alloc_mark == NULL)
4177         goto error_free_vers;
4178
4179       /* Make a special call to the linker "notice" function to
4180          tell it that we are about to handle an as-needed lib.  */
4181       if (!(*bed->notice_as_needed) (abfd, info, notice_as_needed))
4182         goto error_free_vers;
4183
4184       /* Clone the symbol table.  Remember some pointers into the
4185          symbol table, and dynamic symbol count.  */
4186       old_ent = (char *) old_tab + tabsize;
4187       memcpy (old_tab, htab->root.table.table, tabsize);
4188       old_undefs = htab->root.undefs;
4189       old_undefs_tail = htab->root.undefs_tail;
4190       old_table = htab->root.table.table;
4191       old_size = htab->root.table.size;
4192       old_count = htab->root.table.count;
4193       old_strtab = _bfd_elf_strtab_save (htab->dynstr);
4194       if (old_strtab == NULL)
4195         goto error_free_vers;
4196
4197       for (i = 0; i < htab->root.table.size; i++)
4198         {
4199           struct bfd_hash_entry *p;
4200           struct elf_link_hash_entry *h;
4201
4202           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4203             {
4204               memcpy (old_ent, p, htab->root.table.entsize);
4205               old_ent = (char *) old_ent + htab->root.table.entsize;
4206               h = (struct elf_link_hash_entry *) p;
4207               if (h->root.type == bfd_link_hash_warning)
4208                 {
4209                   memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
4210                   old_ent = (char *) old_ent + htab->root.table.entsize;
4211                 }
4212             }
4213         }
4214     }
4215
4216   weaks = NULL;
4217   ever = extversym != NULL ? extversym + extsymoff : NULL;
4218   for (isym = isymbuf, isymend = isymbuf + extsymcount;
4219        isym < isymend;
4220        isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
4221     {
4222       int bind;
4223       bfd_vma value;
4224       asection *sec, *new_sec;
4225       flagword flags;
4226       const char *name;
4227       struct elf_link_hash_entry *h;
4228       struct elf_link_hash_entry *hi;
4229       bfd_boolean definition;
4230       bfd_boolean size_change_ok;
4231       bfd_boolean type_change_ok;
4232       bfd_boolean new_weakdef;
4233       bfd_boolean new_weak;
4234       bfd_boolean old_weak;
4235       bfd_boolean override;
4236       bfd_boolean common;
4237       bfd_boolean discarded;
4238       unsigned int old_alignment;
4239       bfd *old_bfd;
4240       bfd_boolean matched;
4241
4242       override = FALSE;
4243
4244       flags = BSF_NO_FLAGS;
4245       sec = NULL;
4246       value = isym->st_value;
4247       common = bed->common_definition (isym);
4248       discarded = FALSE;
4249
4250       bind = ELF_ST_BIND (isym->st_info);
4251       switch (bind)
4252         {
4253         case STB_LOCAL:
4254           /* This should be impossible, since ELF requires that all
4255              global symbols follow all local symbols, and that sh_info
4256              point to the first global symbol.  Unfortunately, Irix 5
4257              screws this up.  */
4258           continue;
4259
4260         case STB_GLOBAL:
4261           if (isym->st_shndx != SHN_UNDEF && !common)
4262             flags = BSF_GLOBAL;
4263           break;
4264
4265         case STB_WEAK:
4266           flags = BSF_WEAK;
4267           break;
4268
4269         case STB_GNU_UNIQUE:
4270           flags = BSF_GNU_UNIQUE;
4271           break;
4272
4273         default:
4274           /* Leave it up to the processor backend.  */
4275           break;
4276         }
4277
4278       if (isym->st_shndx == SHN_UNDEF)
4279         sec = bfd_und_section_ptr;
4280       else if (isym->st_shndx == SHN_ABS)
4281         sec = bfd_abs_section_ptr;
4282       else if (isym->st_shndx == SHN_COMMON)
4283         {
4284           sec = bfd_com_section_ptr;
4285           /* What ELF calls the size we call the value.  What ELF
4286              calls the value we call the alignment.  */
4287           value = isym->st_size;
4288         }
4289       else
4290         {
4291           sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
4292           if (sec == NULL)
4293             sec = bfd_abs_section_ptr;
4294           else if (discarded_section (sec))
4295             {
4296               /* Symbols from discarded section are undefined.  We keep
4297                  its visibility.  */
4298               sec = bfd_und_section_ptr;
4299               discarded = TRUE;
4300               isym->st_shndx = SHN_UNDEF;
4301             }
4302           else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
4303             value -= sec->vma;
4304         }
4305
4306       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4307                                               isym->st_name);
4308       if (name == NULL)
4309         goto error_free_vers;
4310
4311       if (isym->st_shndx == SHN_COMMON
4312           && (abfd->flags & BFD_PLUGIN) != 0)
4313         {
4314           asection *xc = bfd_get_section_by_name (abfd, "COMMON");
4315
4316           if (xc == NULL)
4317             {
4318               flagword sflags = (SEC_ALLOC | SEC_IS_COMMON | SEC_KEEP
4319                                  | SEC_EXCLUDE);
4320               xc = bfd_make_section_with_flags (abfd, "COMMON", sflags);
4321               if (xc == NULL)
4322                 goto error_free_vers;
4323             }
4324           sec = xc;
4325         }
4326       else if (isym->st_shndx == SHN_COMMON
4327                && ELF_ST_TYPE (isym->st_info) == STT_TLS
4328                && !bfd_link_relocatable (info))
4329         {
4330           asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
4331
4332           if (tcomm == NULL)
4333             {
4334               flagword sflags = (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_IS_COMMON
4335                                  | SEC_LINKER_CREATED);
4336               tcomm = bfd_make_section_with_flags (abfd, ".tcommon", sflags);
4337               if (tcomm == NULL)
4338                 goto error_free_vers;
4339             }
4340           sec = tcomm;
4341         }
4342       else if (bed->elf_add_symbol_hook)
4343         {
4344           if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
4345                                              &sec, &value))
4346             goto error_free_vers;
4347
4348           /* The hook function sets the name to NULL if this symbol
4349              should be skipped for some reason.  */
4350           if (name == NULL)
4351             continue;
4352         }
4353
4354       /* Sanity check that all possibilities were handled.  */
4355       if (sec == NULL)
4356         {
4357           bfd_set_error (bfd_error_bad_value);
4358           goto error_free_vers;
4359         }
4360
4361       /* Silently discard TLS symbols from --just-syms.  There's
4362          no way to combine a static TLS block with a new TLS block
4363          for this executable.  */
4364       if (ELF_ST_TYPE (isym->st_info) == STT_TLS
4365           && sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
4366         continue;
4367
4368       if (bfd_is_und_section (sec)
4369           || bfd_is_com_section (sec))
4370         definition = FALSE;
4371       else
4372         definition = TRUE;
4373
4374       size_change_ok = FALSE;
4375       type_change_ok = bed->type_change_ok;
4376       old_weak = FALSE;
4377       matched = FALSE;
4378       old_alignment = 0;
4379       old_bfd = NULL;
4380       new_sec = sec;
4381
4382       if (is_elf_hash_table (htab))
4383         {
4384           Elf_Internal_Versym iver;
4385           unsigned int vernum = 0;
4386           bfd_boolean skip;
4387
4388           if (ever == NULL)
4389             {
4390               if (info->default_imported_symver)
4391                 /* Use the default symbol version created earlier.  */
4392                 iver.vs_vers = elf_tdata (abfd)->cverdefs;
4393               else
4394                 iver.vs_vers = 0;
4395             }
4396           else
4397             _bfd_elf_swap_versym_in (abfd, ever, &iver);
4398
4399           vernum = iver.vs_vers & VERSYM_VERSION;
4400
4401           /* If this is a hidden symbol, or if it is not version
4402              1, we append the version name to the symbol name.
4403              However, we do not modify a non-hidden absolute symbol
4404              if it is not a function, because it might be the version
4405              symbol itself.  FIXME: What if it isn't?  */
4406           if ((iver.vs_vers & VERSYM_HIDDEN) != 0
4407               || (vernum > 1
4408                   && (!bfd_is_abs_section (sec)
4409                       || bed->is_function_type (ELF_ST_TYPE (isym->st_info)))))
4410             {
4411               const char *verstr;
4412               size_t namelen, verlen, newlen;
4413               char *newname, *p;
4414
4415               if (isym->st_shndx != SHN_UNDEF)
4416                 {
4417                   if (vernum > elf_tdata (abfd)->cverdefs)
4418                     verstr = NULL;
4419                   else if (vernum > 1)
4420                     verstr =
4421                       elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
4422                   else
4423                     verstr = "";
4424
4425                   if (verstr == NULL)
4426                     {
4427                       _bfd_error_handler
4428                         /* xgettext:c-format */
4429                         (_("%B: %s: invalid version %u (max %d)"),
4430                          abfd, name, vernum,
4431                          elf_tdata (abfd)->cverdefs);
4432                       bfd_set_error (bfd_error_bad_value);
4433                       goto error_free_vers;
4434                     }
4435                 }
4436               else
4437                 {
4438                   /* We cannot simply test for the number of
4439                      entries in the VERNEED section since the
4440                      numbers for the needed versions do not start
4441                      at 0.  */
4442                   Elf_Internal_Verneed *t;
4443
4444                   verstr = NULL;
4445                   for (t = elf_tdata (abfd)->verref;
4446                        t != NULL;
4447                        t = t->vn_nextref)
4448                     {
4449                       Elf_Internal_Vernaux *a;
4450
4451                       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
4452                         {
4453                           if (a->vna_other == vernum)
4454                             {
4455                               verstr = a->vna_nodename;
4456                               break;
4457                             }
4458                         }
4459                       if (a != NULL)
4460                         break;
4461                     }
4462                   if (verstr == NULL)
4463                     {
4464                       _bfd_error_handler
4465                         /* xgettext:c-format */
4466                         (_("%B: %s: invalid needed version %d"),
4467                          abfd, name, vernum);
4468                       bfd_set_error (bfd_error_bad_value);
4469                       goto error_free_vers;
4470                     }
4471                 }
4472
4473               namelen = strlen (name);
4474               verlen = strlen (verstr);
4475               newlen = namelen + verlen + 2;
4476               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4477                   && isym->st_shndx != SHN_UNDEF)
4478                 ++newlen;
4479
4480               newname = (char *) bfd_hash_allocate (&htab->root.table, newlen);
4481               if (newname == NULL)
4482                 goto error_free_vers;
4483               memcpy (newname, name, namelen);
4484               p = newname + namelen;
4485               *p++ = ELF_VER_CHR;
4486               /* If this is a defined non-hidden version symbol,
4487                  we add another @ to the name.  This indicates the
4488                  default version of the symbol.  */
4489               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4490                   && isym->st_shndx != SHN_UNDEF)
4491                 *p++ = ELF_VER_CHR;
4492               memcpy (p, verstr, verlen + 1);
4493
4494               name = newname;
4495             }
4496
4497           /* If this symbol has default visibility and the user has
4498              requested we not re-export it, then mark it as hidden.  */
4499           if (!bfd_is_und_section (sec)
4500               && !dynamic
4501               && abfd->no_export
4502               && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
4503             isym->st_other = (STV_HIDDEN
4504                               | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
4505
4506           if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec, &value,
4507                                       sym_hash, &old_bfd, &old_weak,
4508                                       &old_alignment, &skip, &override,
4509                                       &type_change_ok, &size_change_ok,
4510                                       &matched))
4511             goto error_free_vers;
4512
4513           if (skip)
4514             continue;
4515
4516           /* Override a definition only if the new symbol matches the
4517              existing one.  */
4518           if (override && matched)
4519             definition = FALSE;
4520
4521           h = *sym_hash;
4522           while (h->root.type == bfd_link_hash_indirect
4523                  || h->root.type == bfd_link_hash_warning)
4524             h = (struct elf_link_hash_entry *) h->root.u.i.link;
4525
4526           if (elf_tdata (abfd)->verdef != NULL
4527               && vernum > 1
4528               && definition)
4529             h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
4530         }
4531
4532       if (! (_bfd_generic_link_add_one_symbol
4533              (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
4534               (struct bfd_link_hash_entry **) sym_hash)))
4535         goto error_free_vers;
4536
4537       if ((flags & BSF_GNU_UNIQUE)
4538           && (abfd->flags & DYNAMIC) == 0
4539           && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour)
4540         elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_unique;
4541
4542       h = *sym_hash;
4543       /* We need to make sure that indirect symbol dynamic flags are
4544          updated.  */
4545       hi = h;
4546       while (h->root.type == bfd_link_hash_indirect
4547              || h->root.type == bfd_link_hash_warning)
4548         h = (struct elf_link_hash_entry *) h->root.u.i.link;
4549
4550       /* Setting the index to -3 tells elf_link_output_extsym that
4551          this symbol is defined in a discarded section.  */
4552       if (discarded)
4553         h->indx = -3;
4554
4555       *sym_hash = h;
4556
4557       new_weak = (flags & BSF_WEAK) != 0;
4558       new_weakdef = FALSE;
4559       if (dynamic
4560           && definition
4561           && new_weak
4562           && !bed->is_function_type (ELF_ST_TYPE (isym->st_info))
4563           && is_elf_hash_table (htab)
4564           && h->u.weakdef == NULL)
4565         {
4566           /* Keep a list of all weak defined non function symbols from
4567              a dynamic object, using the weakdef field.  Later in this
4568              function we will set the weakdef field to the correct
4569              value.  We only put non-function symbols from dynamic
4570              objects on this list, because that happens to be the only
4571              time we need to know the normal symbol corresponding to a
4572              weak symbol, and the information is time consuming to
4573              figure out.  If the weakdef field is not already NULL,
4574              then this symbol was already defined by some previous
4575              dynamic object, and we will be using that previous
4576              definition anyhow.  */
4577
4578           h->u.weakdef = weaks;
4579           weaks = h;
4580           new_weakdef = TRUE;
4581         }
4582
4583       /* Set the alignment of a common symbol.  */
4584       if ((common || bfd_is_com_section (sec))
4585           && h->root.type == bfd_link_hash_common)
4586         {
4587           unsigned int align;
4588
4589           if (common)
4590             align = bfd_log2 (isym->st_value);
4591           else
4592             {
4593               /* The new symbol is a common symbol in a shared object.
4594                  We need to get the alignment from the section.  */
4595               align = new_sec->alignment_power;
4596             }
4597           if (align > old_alignment)
4598             h->root.u.c.p->alignment_power = align;
4599           else
4600             h->root.u.c.p->alignment_power = old_alignment;
4601         }
4602
4603       if (is_elf_hash_table (htab))
4604         {
4605           /* Set a flag in the hash table entry indicating the type of
4606              reference or definition we just found.  A dynamic symbol
4607              is one which is referenced or defined by both a regular
4608              object and a shared object.  */
4609           bfd_boolean dynsym = FALSE;
4610
4611           /* Plugin symbols aren't normal.  Don't set def_regular or
4612              ref_regular for them, or make them dynamic.  */
4613           if ((abfd->flags & BFD_PLUGIN) != 0)
4614             ;
4615           else if (! dynamic)
4616             {
4617               if (! definition)
4618                 {
4619                   h->ref_regular = 1;
4620                   if (bind != STB_WEAK)
4621                     h->ref_regular_nonweak = 1;
4622                 }
4623               else
4624                 {
4625                   h->def_regular = 1;
4626                   if (h->def_dynamic)
4627                     {
4628                       h->def_dynamic = 0;
4629                       h->ref_dynamic = 1;
4630                     }
4631                 }
4632
4633               /* If the indirect symbol has been forced local, don't
4634                  make the real symbol dynamic.  */
4635               if ((h == hi || !hi->forced_local)
4636                   && (bfd_link_dll (info)
4637                       || h->def_dynamic
4638                       || h->ref_dynamic))
4639                 dynsym = TRUE;
4640             }
4641           else
4642             {
4643               if (! definition)
4644                 {
4645                   h->ref_dynamic = 1;
4646                   hi->ref_dynamic = 1;
4647                 }
4648               else
4649                 {
4650                   h->def_dynamic = 1;
4651                   hi->def_dynamic = 1;
4652                 }
4653
4654               /* If the indirect symbol has been forced local, don't
4655                  make the real symbol dynamic.  */
4656               if ((h == hi || !hi->forced_local)
4657                   && (h->def_regular
4658                       || h->ref_regular
4659                       || (h->u.weakdef != NULL
4660                           && ! new_weakdef
4661                           && h->u.weakdef->dynindx != -1)))
4662                 dynsym = TRUE;
4663             }
4664
4665           /* Check to see if we need to add an indirect symbol for
4666              the default name.  */
4667           if (definition
4668               || (!override && h->root.type == bfd_link_hash_common))
4669             if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
4670                                               sec, value, &old_bfd, &dynsym))
4671               goto error_free_vers;
4672
4673           /* Check the alignment when a common symbol is involved. This
4674              can change when a common symbol is overridden by a normal
4675              definition or a common symbol is ignored due to the old
4676              normal definition. We need to make sure the maximum
4677              alignment is maintained.  */
4678           if ((old_alignment || common)
4679               && h->root.type != bfd_link_hash_common)
4680             {
4681               unsigned int common_align;
4682               unsigned int normal_align;
4683               unsigned int symbol_align;
4684               bfd *normal_bfd;
4685               bfd *common_bfd;
4686
4687               BFD_ASSERT (h->root.type == bfd_link_hash_defined
4688                           || h->root.type == bfd_link_hash_defweak);
4689
4690               symbol_align = ffs (h->root.u.def.value) - 1;
4691               if (h->root.u.def.section->owner != NULL
4692                   && (h->root.u.def.section->owner->flags
4693                        & (DYNAMIC | BFD_PLUGIN)) == 0)
4694                 {
4695                   normal_align = h->root.u.def.section->alignment_power;
4696                   if (normal_align > symbol_align)
4697                     normal_align = symbol_align;
4698                 }
4699               else
4700                 normal_align = symbol_align;
4701
4702               if (old_alignment)
4703                 {
4704                   common_align = old_alignment;
4705                   common_bfd = old_bfd;
4706                   normal_bfd = abfd;
4707                 }
4708               else
4709                 {
4710                   common_align = bfd_log2 (isym->st_value);
4711                   common_bfd = abfd;
4712                   normal_bfd = old_bfd;
4713                 }
4714
4715               if (normal_align < common_align)
4716                 {
4717                   /* PR binutils/2735 */
4718                   if (normal_bfd == NULL)
4719                     _bfd_error_handler
4720                       /* xgettext:c-format */
4721                       (_("Warning: alignment %u of common symbol `%s' in %B is"
4722                          " greater than the alignment (%u) of its section %A"),
4723                        1 << common_align, name, common_bfd,
4724                        1 << normal_align, h->root.u.def.section);
4725                   else
4726                     _bfd_error_handler
4727                       /* xgettext:c-format */
4728                       (_("Warning: alignment %u of symbol `%s' in %B"
4729                          " is smaller than %u in %B"),
4730                        1 << normal_align, name, normal_bfd,
4731                        1 << common_align, common_bfd);
4732                 }
4733             }
4734
4735           /* Remember the symbol size if it isn't undefined.  */
4736           if (isym->st_size != 0
4737               && isym->st_shndx != SHN_UNDEF
4738               && (definition || h->size == 0))
4739             {
4740               if (h->size != 0
4741                   && h->size != isym->st_size
4742                   && ! size_change_ok)
4743                 _bfd_error_handler
4744                   /* xgettext:c-format */
4745                   (_("Warning: size of symbol `%s' changed"
4746                      " from %lu in %B to %lu in %B"),
4747                    name, (unsigned long) h->size, old_bfd,
4748                    (unsigned long) isym->st_size, abfd);
4749
4750               h->size = isym->st_size;
4751             }
4752
4753           /* If this is a common symbol, then we always want H->SIZE
4754              to be the size of the common symbol.  The code just above
4755              won't fix the size if a common symbol becomes larger.  We
4756              don't warn about a size change here, because that is
4757              covered by --warn-common.  Allow changes between different
4758              function types.  */
4759           if (h->root.type == bfd_link_hash_common)
4760             h->size = h->root.u.c.size;
4761
4762           if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
4763               && ((definition && !new_weak)
4764                   || (old_weak && h->root.type == bfd_link_hash_common)
4765                   || h->type == STT_NOTYPE))
4766             {
4767               unsigned int type = ELF_ST_TYPE (isym->st_info);
4768
4769               /* Turn an IFUNC symbol from a DSO into a normal FUNC
4770                  symbol.  */
4771               if (type == STT_GNU_IFUNC
4772                   && (abfd->flags & DYNAMIC) != 0)
4773                 type = STT_FUNC;
4774
4775               if (h->type != type)
4776                 {
4777                   if (h->type != STT_NOTYPE && ! type_change_ok)
4778                     /* xgettext:c-format */
4779                     _bfd_error_handler
4780                       (_("Warning: type of symbol `%s' changed"
4781                          " from %d to %d in %B"),
4782                        name, h->type, type, abfd);
4783
4784                   h->type = type;
4785                 }
4786             }
4787
4788           /* Merge st_other field.  */
4789           elf_merge_st_other (abfd, h, isym, sec, definition, dynamic);
4790
4791           /* We don't want to make debug symbol dynamic.  */
4792           if (definition
4793               && (sec->flags & SEC_DEBUGGING)
4794               && !bfd_link_relocatable (info))
4795             dynsym = FALSE;
4796
4797           /* Nor should we make plugin symbols dynamic.  */
4798           if ((abfd->flags & BFD_PLUGIN) != 0)
4799             dynsym = FALSE;
4800
4801           if (definition)
4802             {
4803               h->target_internal = isym->st_target_internal;
4804               h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
4805             }
4806
4807           if (definition && !dynamic)
4808             {
4809               char *p = strchr (name, ELF_VER_CHR);
4810               if (p != NULL && p[1] != ELF_VER_CHR)
4811                 {
4812                   /* Queue non-default versions so that .symver x, x@FOO
4813                      aliases can be checked.  */
4814                   if (!nondeflt_vers)
4815                     {
4816                       amt = ((isymend - isym + 1)
4817                              * sizeof (struct elf_link_hash_entry *));
4818                       nondeflt_vers
4819                         = (struct elf_link_hash_entry **) bfd_malloc (amt);
4820                       if (!nondeflt_vers)
4821                         goto error_free_vers;
4822                     }
4823                   nondeflt_vers[nondeflt_vers_cnt++] = h;
4824                 }
4825             }
4826
4827           if (dynsym && h->dynindx == -1)
4828             {
4829               if (! bfd_elf_link_record_dynamic_symbol (info, h))
4830                 goto error_free_vers;
4831               if (h->u.weakdef != NULL
4832                   && ! new_weakdef
4833                   && h->u.weakdef->dynindx == -1)
4834                 {
4835                   if (!bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
4836                     goto error_free_vers;
4837                 }
4838             }
4839           else if (h->dynindx != -1)
4840             /* If the symbol already has a dynamic index, but
4841                visibility says it should not be visible, turn it into
4842                a local symbol.  */
4843             switch (ELF_ST_VISIBILITY (h->other))
4844               {
4845               case STV_INTERNAL:
4846               case STV_HIDDEN:
4847                 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
4848                 dynsym = FALSE;
4849                 break;
4850               }
4851
4852           /* Don't add DT_NEEDED for references from the dummy bfd nor
4853              for unmatched symbol.  */
4854           if (!add_needed
4855               && matched
4856               && definition
4857               && ((dynsym
4858                    && h->ref_regular_nonweak
4859                    && (old_bfd == NULL
4860                        || (old_bfd->flags & BFD_PLUGIN) == 0))
4861                   || (h->ref_dynamic_nonweak
4862                       && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
4863                       && !on_needed_list (elf_dt_name (abfd),
4864                                           htab->needed, NULL))))
4865             {
4866               int ret;
4867               const char *soname = elf_dt_name (abfd);
4868
4869               info->callbacks->minfo ("%!", soname, old_bfd,
4870                                       h->root.root.string);
4871
4872               /* A symbol from a library loaded via DT_NEEDED of some
4873                  other library is referenced by a regular object.
4874                  Add a DT_NEEDED entry for it.  Issue an error if
4875                  --no-add-needed is used and the reference was not
4876                  a weak one.  */
4877               if (old_bfd != NULL
4878                   && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
4879                 {
4880                   _bfd_error_handler
4881                     /* xgettext:c-format */
4882                     (_("%B: undefined reference to symbol '%s'"),
4883                      old_bfd, name);
4884                   bfd_set_error (bfd_error_missing_dso);
4885                   goto error_free_vers;
4886                 }
4887
4888               elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class)
4889                 (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED);
4890
4891               add_needed = TRUE;
4892               ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4893               if (ret < 0)
4894                 goto error_free_vers;
4895
4896               BFD_ASSERT (ret == 0);
4897             }
4898         }
4899     }
4900
4901   if (extversym != NULL)
4902     {
4903       free (extversym);
4904       extversym = NULL;
4905     }
4906
4907   if (isymbuf != NULL)
4908     {
4909       free (isymbuf);
4910       isymbuf = NULL;
4911     }
4912
4913   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4914     {
4915       unsigned int i;
4916
4917       /* Restore the symbol table.  */
4918       old_ent = (char *) old_tab + tabsize;
4919       memset (elf_sym_hashes (abfd), 0,
4920               extsymcount * sizeof (struct elf_link_hash_entry *));
4921       htab->root.table.table = old_table;
4922       htab->root.table.size = old_size;
4923       htab->root.table.count = old_count;
4924       memcpy (htab->root.table.table, old_tab, tabsize);
4925       htab->root.undefs = old_undefs;
4926       htab->root.undefs_tail = old_undefs_tail;
4927       _bfd_elf_strtab_restore (htab->dynstr, old_strtab);
4928       free (old_strtab);
4929       old_strtab = NULL;
4930       for (i = 0; i < htab->root.table.size; i++)
4931         {
4932           struct bfd_hash_entry *p;
4933           struct elf_link_hash_entry *h;
4934           bfd_size_type size;
4935           unsigned int alignment_power;
4936           unsigned int dynamic_ref_after_ir_def;
4937
4938           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4939             {
4940               h = (struct elf_link_hash_entry *) p;
4941               if (h->root.type == bfd_link_hash_warning)
4942                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4943
4944               /* Preserve the maximum alignment and size for common
4945                  symbols even if this dynamic lib isn't on DT_NEEDED
4946                  since it can still be loaded at run time by another
4947                  dynamic lib.  */
4948               if (h->root.type == bfd_link_hash_common)
4949                 {
4950                   size = h->root.u.c.size;
4951                   alignment_power = h->root.u.c.p->alignment_power;
4952                 }
4953               else
4954                 {
4955                   size = 0;
4956                   alignment_power = 0;
4957                 }
4958               /* Preserve dynamic_ref_after_ir_def so that this symbol
4959                  will be exported when the dynamic lib becomes needed
4960                  in the second pass.  */
4961               dynamic_ref_after_ir_def = h->root.dynamic_ref_after_ir_def;
4962               memcpy (p, old_ent, htab->root.table.entsize);
4963               old_ent = (char *) old_ent + htab->root.table.entsize;
4964               h = (struct elf_link_hash_entry *) p;
4965               if (h->root.type == bfd_link_hash_warning)
4966                 {
4967                   memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
4968                   old_ent = (char *) old_ent + htab->root.table.entsize;
4969                   h = (struct elf_link_hash_entry *) h->root.u.i.link;
4970                 }
4971               if (h->root.type == bfd_link_hash_common)
4972                 {
4973                   if (size > h->root.u.c.size)
4974                     h->root.u.c.size = size;
4975                   if (alignment_power > h->root.u.c.p->alignment_power)
4976                     h->root.u.c.p->alignment_power = alignment_power;
4977                 }
4978               h->root.dynamic_ref_after_ir_def = dynamic_ref_after_ir_def;
4979             }
4980         }
4981
4982       /* Make a special call to the linker "notice" function to
4983          tell it that symbols added for crefs may need to be removed.  */
4984       if (!(*bed->notice_as_needed) (abfd, info, notice_not_needed))
4985         goto error_free_vers;
4986
4987       free (old_tab);
4988       objalloc_free_block ((struct objalloc *) htab->root.table.memory,
4989                            alloc_mark);
4990       if (nondeflt_vers != NULL)
4991         free (nondeflt_vers);
4992       return TRUE;
4993     }
4994
4995   if (old_tab != NULL)
4996     {
4997       if (!(*bed->notice_as_needed) (abfd, info, notice_needed))
4998         goto error_free_vers;
4999       free (old_tab);
5000       old_tab = NULL;
5001     }
5002
5003   /* Now that all the symbols from this input file are created, if
5004      not performing a relocatable link, handle .symver foo, foo@BAR
5005      such that any relocs against foo become foo@BAR.  */
5006   if (!bfd_link_relocatable (info) && nondeflt_vers != NULL)
5007     {
5008       size_t cnt, symidx;
5009
5010       for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
5011         {
5012           struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
5013           char *shortname, *p;
5014
5015           p = strchr (h->root.root.string, ELF_VER_CHR);
5016           if (p == NULL
5017               || (h->root.type != bfd_link_hash_defined
5018                   && h->root.type != bfd_link_hash_defweak))
5019             continue;
5020
5021           amt = p - h->root.root.string;
5022           shortname = (char *) bfd_malloc (amt + 1);
5023           if (!shortname)
5024             goto error_free_vers;
5025           memcpy (shortname, h->root.root.string, amt);
5026           shortname[amt] = '\0';
5027
5028           hi = (struct elf_link_hash_entry *)
5029                bfd_link_hash_lookup (&htab->root, shortname,
5030                                      FALSE, FALSE, FALSE);
5031           if (hi != NULL
5032               && hi->root.type == h->root.type
5033               && hi->root.u.def.value == h->root.u.def.value
5034               && hi->root.u.def.section == h->root.u.def.section)
5035             {
5036               (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
5037               hi->root.type = bfd_link_hash_indirect;
5038               hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
5039               (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
5040               sym_hash = elf_sym_hashes (abfd);
5041               if (sym_hash)
5042                 for (symidx = 0; symidx < extsymcount; ++symidx)
5043                   if (sym_hash[symidx] == hi)
5044                     {
5045                       sym_hash[symidx] = h;
5046                       break;
5047                     }
5048             }
5049           free (shortname);
5050         }
5051       free (nondeflt_vers);
5052       nondeflt_vers = NULL;
5053     }
5054
5055   /* Now set the weakdefs field correctly for all the weak defined
5056      symbols we found.  The only way to do this is to search all the
5057      symbols.  Since we only need the information for non functions in
5058      dynamic objects, that's the only time we actually put anything on
5059      the list WEAKS.  We need this information so that if a regular
5060      object refers to a symbol defined weakly in a dynamic object, the
5061      real symbol in the dynamic object is also put in the dynamic
5062      symbols; we also must arrange for both symbols to point to the
5063      same memory location.  We could handle the general case of symbol
5064      aliasing, but a general symbol alias can only be generated in
5065      assembler code, handling it correctly would be very time
5066      consuming, and other ELF linkers don't handle general aliasing
5067      either.  */
5068   if (weaks != NULL)
5069     {
5070       struct elf_link_hash_entry **hpp;
5071       struct elf_link_hash_entry **hppend;
5072       struct elf_link_hash_entry **sorted_sym_hash;
5073       struct elf_link_hash_entry *h;
5074       size_t sym_count;
5075
5076       /* Since we have to search the whole symbol list for each weak
5077          defined symbol, search time for N weak defined symbols will be
5078          O(N^2). Binary search will cut it down to O(NlogN).  */
5079       amt = extsymcount;
5080       amt *= sizeof (struct elf_link_hash_entry *);
5081       sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt);
5082       if (sorted_sym_hash == NULL)
5083         goto error_return;
5084       sym_hash = sorted_sym_hash;
5085       hpp = elf_sym_hashes (abfd);
5086       hppend = hpp + extsymcount;
5087       sym_count = 0;
5088       for (; hpp < hppend; hpp++)
5089         {
5090           h = *hpp;
5091           if (h != NULL
5092               && h->root.type == bfd_link_hash_defined
5093               && !bed->is_function_type (h->type))
5094             {
5095               *sym_hash = h;
5096               sym_hash++;
5097               sym_count++;
5098             }
5099         }
5100
5101       qsort (sorted_sym_hash, sym_count,
5102              sizeof (struct elf_link_hash_entry *),
5103              elf_sort_symbol);
5104
5105       while (weaks != NULL)
5106         {
5107           struct elf_link_hash_entry *hlook;
5108           asection *slook;
5109           bfd_vma vlook;
5110           size_t i, j, idx = 0;
5111
5112           hlook = weaks;
5113           weaks = hlook->u.weakdef;
5114           hlook->u.weakdef = NULL;
5115
5116           BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
5117                       || hlook->root.type == bfd_link_hash_defweak
5118                       || hlook->root.type == bfd_link_hash_common
5119                       || hlook->root.type == bfd_link_hash_indirect);
5120           slook = hlook->root.u.def.section;
5121           vlook = hlook->root.u.def.value;
5122
5123           i = 0;
5124           j = sym_count;
5125           while (i != j)
5126             {
5127               bfd_signed_vma vdiff;
5128               idx = (i + j) / 2;
5129               h = sorted_sym_hash[idx];
5130               vdiff = vlook - h->root.u.def.value;
5131               if (vdiff < 0)
5132                 j = idx;
5133               else if (vdiff > 0)
5134                 i = idx + 1;
5135               else
5136                 {
5137                   int sdiff = slook->id - h->root.u.def.section->id;
5138                   if (sdiff < 0)
5139                     j = idx;
5140                   else if (sdiff > 0)
5141                     i = idx + 1;
5142                   else
5143                     break;
5144                 }
5145             }
5146
5147           /* We didn't find a value/section match.  */
5148           if (i == j)
5149             continue;
5150
5151           /* With multiple aliases, or when the weak symbol is already
5152              strongly defined, we have multiple matching symbols and
5153              the binary search above may land on any of them.  Step
5154              one past the matching symbol(s).  */
5155           while (++idx != j)
5156             {
5157               h = sorted_sym_hash[idx];
5158               if (h->root.u.def.section != slook
5159                   || h->root.u.def.value != vlook)
5160                 break;
5161             }
5162
5163           /* Now look back over the aliases.  Since we sorted by size
5164              as well as value and section, we'll choose the one with
5165              the largest size.  */
5166           while (idx-- != i)
5167             {
5168               h = sorted_sym_hash[idx];
5169
5170               /* Stop if value or section doesn't match.  */
5171               if (h->root.u.def.section != slook
5172                   || h->root.u.def.value != vlook)
5173                 break;
5174               else if (h != hlook)
5175                 {
5176                   hlook->u.weakdef = h;
5177
5178                   /* If the weak definition is in the list of dynamic
5179                      symbols, make sure the real definition is put
5180                      there as well.  */
5181                   if (hlook->dynindx != -1 && h->dynindx == -1)
5182                     {
5183                       if (! bfd_elf_link_record_dynamic_symbol (info, h))
5184                         {
5185                         err_free_sym_hash:
5186                           free (sorted_sym_hash);
5187                           goto error_return;
5188                         }
5189                     }
5190
5191                   /* If the real definition is in the list of dynamic
5192                      symbols, make sure the weak definition is put
5193                      there as well.  If we don't do this, then the
5194                      dynamic loader might not merge the entries for the
5195                      real definition and the weak definition.  */
5196                   if (h->dynindx != -1 && hlook->dynindx == -1)
5197                     {
5198                       if (! bfd_elf_link_record_dynamic_symbol (info, hlook))
5199                         goto err_free_sym_hash;
5200                     }
5201                   break;
5202                 }
5203             }
5204         }
5205
5206       free (sorted_sym_hash);
5207     }
5208
5209   if (bed->check_directives
5210       && !(*bed->check_directives) (abfd, info))
5211     return FALSE;
5212
5213   if (!info->check_relocs_after_open_input
5214       && !_bfd_elf_link_check_relocs (abfd, info))
5215     return FALSE;
5216
5217   /* If this is a non-traditional link, try to optimize the handling
5218      of the .stab/.stabstr sections.  */
5219   if (! dynamic
5220       && ! info->traditional_format
5221       && is_elf_hash_table (htab)
5222       && (info->strip != strip_all && info->strip != strip_debugger))
5223     {
5224       asection *stabstr;
5225
5226       stabstr = bfd_get_section_by_name (abfd, ".stabstr");
5227       if (stabstr != NULL)
5228         {
5229           bfd_size_type string_offset = 0;
5230           asection *stab;
5231
5232           for (stab = abfd->sections; stab; stab = stab->next)
5233             if (CONST_STRNEQ (stab->name, ".stab")
5234                 && (!stab->name[5] ||
5235                     (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
5236                 && (stab->flags & SEC_MERGE) == 0
5237                 && !bfd_is_abs_section (stab->output_section))
5238               {
5239                 struct bfd_elf_section_data *secdata;
5240
5241                 secdata = elf_section_data (stab);
5242                 if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab,
5243                                                stabstr, &secdata->sec_info,
5244                                                &string_offset))
5245                   goto error_return;
5246                 if (secdata->sec_info)
5247                   stab->sec_info_type = SEC_INFO_TYPE_STABS;
5248             }
5249         }
5250     }
5251
5252   if (is_elf_hash_table (htab) && add_needed)
5253     {
5254       /* Add this bfd to the loaded list.  */
5255       struct elf_link_loaded_list *n;
5256
5257       n = (struct elf_link_loaded_list *) bfd_alloc (abfd, sizeof (*n));
5258       if (n == NULL)
5259         goto error_return;
5260       n->abfd = abfd;
5261       n->next = htab->loaded;
5262       htab->loaded = n;
5263     }
5264
5265   return TRUE;
5266
5267  error_free_vers:
5268   if (old_tab != NULL)
5269     free (old_tab);
5270   if (old_strtab != NULL)
5271     free (old_strtab);
5272   if (nondeflt_vers != NULL)
5273     free (nondeflt_vers);
5274   if (extversym != NULL)
5275     free (extversym);
5276  error_free_sym:
5277   if (isymbuf != NULL)
5278     free (isymbuf);
5279  error_return:
5280   return FALSE;
5281 }
5282
5283 /* Return the linker hash table entry of a symbol that might be
5284    satisfied by an archive symbol.  Return -1 on error.  */
5285
5286 struct elf_link_hash_entry *
5287 _bfd_elf_archive_symbol_lookup (bfd *abfd,
5288                                 struct bfd_link_info *info,
5289                                 const char *name)
5290 {
5291   struct elf_link_hash_entry *h;
5292   char *p, *copy;
5293   size_t len, first;
5294
5295   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, TRUE);
5296   if (h != NULL)
5297     return h;
5298
5299   /* If this is a default version (the name contains @@), look up the
5300      symbol again with only one `@' as well as without the version.
5301      The effect is that references to the symbol with and without the
5302      version will be matched by the default symbol in the archive.  */
5303
5304   p = strchr (name, ELF_VER_CHR);
5305   if (p == NULL || p[1] != ELF_VER_CHR)
5306     return h;
5307
5308   /* First check with only one `@'.  */
5309   len = strlen (name);
5310   copy = (char *) bfd_alloc (abfd, len);
5311   if (copy == NULL)
5312     return (struct elf_link_hash_entry *) 0 - 1;
5313
5314   first = p - name + 1;
5315   memcpy (copy, name, first);
5316   memcpy (copy + first, name + first + 1, len - first);
5317
5318   h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, TRUE);
5319   if (h == NULL)
5320     {
5321       /* We also need to check references to the symbol without the
5322          version.  */
5323       copy[first - 1] = '\0';
5324       h = elf_link_hash_lookup (elf_hash_table (info), copy,
5325                                 FALSE, FALSE, TRUE);
5326     }
5327
5328   bfd_release (abfd, copy);
5329   return h;
5330 }
5331
5332 /* Add symbols from an ELF archive file to the linker hash table.  We
5333    don't use _bfd_generic_link_add_archive_symbols because we need to
5334    handle versioned symbols.
5335
5336    Fortunately, ELF archive handling is simpler than that done by
5337    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
5338    oddities.  In ELF, if we find a symbol in the archive map, and the
5339    symbol is currently undefined, we know that we must pull in that
5340    object file.
5341
5342    Unfortunately, we do have to make multiple passes over the symbol
5343    table until nothing further is resolved.  */
5344
5345 static bfd_boolean
5346 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
5347 {
5348   symindex c;
5349   unsigned char *included = NULL;
5350   carsym *symdefs;
5351   bfd_boolean loop;
5352   bfd_size_type amt;
5353   const struct elf_backend_data *bed;
5354   struct elf_link_hash_entry * (*archive_symbol_lookup)
5355     (bfd *, struct bfd_link_info *, const char *);
5356
5357   if (! bfd_has_map (abfd))
5358     {
5359       /* An empty archive is a special case.  */
5360       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
5361         return TRUE;
5362       bfd_set_error (bfd_error_no_armap);
5363       return FALSE;
5364     }
5365
5366   /* Keep track of all symbols we know to be already defined, and all
5367      files we know to be already included.  This is to speed up the
5368      second and subsequent passes.  */
5369   c = bfd_ardata (abfd)->symdef_count;
5370   if (c == 0)
5371     return TRUE;
5372   amt = c;
5373   amt *= sizeof (*included);
5374   included = (unsigned char *) bfd_zmalloc (amt);
5375   if (included == NULL)
5376     return FALSE;
5377
5378   symdefs = bfd_ardata (abfd)->symdefs;
5379   bed = get_elf_backend_data (abfd);
5380   archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup;
5381
5382   do
5383     {
5384       file_ptr last;
5385       symindex i;
5386       carsym *symdef;
5387       carsym *symdefend;
5388
5389       loop = FALSE;
5390       last = -1;
5391
5392       symdef = symdefs;
5393       symdefend = symdef + c;
5394       for (i = 0; symdef < symdefend; symdef++, i++)
5395         {
5396           struct elf_link_hash_entry *h;
5397           bfd *element;
5398           struct bfd_link_hash_entry *undefs_tail;
5399           symindex mark;
5400
5401           if (included[i])
5402             continue;
5403           if (symdef->file_offset == last)
5404             {
5405               included[i] = TRUE;
5406               continue;
5407             }
5408
5409           h = archive_symbol_lookup (abfd, info, symdef->name);
5410           if (h == (struct elf_link_hash_entry *) 0 - 1)
5411             goto error_return;
5412
5413           if (h == NULL)
5414             continue;
5415
5416           if (h->root.type == bfd_link_hash_common)
5417             {
5418               /* We currently have a common symbol.  The archive map contains
5419                  a reference to this symbol, so we may want to include it.  We
5420                  only want to include it however, if this archive element
5421                  contains a definition of the symbol, not just another common
5422                  declaration of it.
5423
5424                  Unfortunately some archivers (including GNU ar) will put
5425                  declarations of common symbols into their archive maps, as
5426                  well as real definitions, so we cannot just go by the archive
5427                  map alone.  Instead we must read in the element's symbol
5428                  table and check that to see what kind of symbol definition
5429                  this is.  */
5430               if (! elf_link_is_defined_archive_symbol (abfd, symdef))
5431                 continue;
5432             }
5433           else if (h->root.type != bfd_link_hash_undefined)
5434             {
5435               if (h->root.type != bfd_link_hash_undefweak)
5436                 /* Symbol must be defined.  Don't check it again.  */
5437                 included[i] = TRUE;
5438               continue;
5439             }
5440
5441           /* We need to include this archive member.  */
5442           element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
5443           if (element == NULL)
5444             goto error_return;
5445
5446           if (! bfd_check_format (element, bfd_object))
5447             goto error_return;
5448
5449           undefs_tail = info->hash->undefs_tail;
5450
5451           if (!(*info->callbacks
5452                 ->add_archive_element) (info, element, symdef->name, &element))
5453             continue;
5454           if (!bfd_link_add_symbols (element, info))
5455             goto error_return;
5456
5457           /* If there are any new undefined symbols, we need to make
5458              another pass through the archive in order to see whether
5459              they can be defined.  FIXME: This isn't perfect, because
5460              common symbols wind up on undefs_tail and because an
5461              undefined symbol which is defined later on in this pass
5462              does not require another pass.  This isn't a bug, but it
5463              does make the code less efficient than it could be.  */
5464           if (undefs_tail != info->hash->undefs_tail)
5465             loop = TRUE;
5466
5467           /* Look backward to mark all symbols from this object file
5468              which we have already seen in this pass.  */
5469           mark = i;
5470           do
5471             {
5472               included[mark] = TRUE;
5473               if (mark == 0)
5474                 break;
5475               --mark;
5476             }
5477           while (symdefs[mark].file_offset == symdef->file_offset);
5478
5479           /* We mark subsequent symbols from this object file as we go
5480              on through the loop.  */
5481           last = symdef->file_offset;
5482         }
5483     }
5484   while (loop);
5485
5486   free (included);
5487
5488   return TRUE;
5489
5490  error_return:
5491   if (included != NULL)
5492     free (included);
5493   return FALSE;
5494 }
5495
5496 /* Given an ELF BFD, add symbols to the global hash table as
5497    appropriate.  */
5498
5499 bfd_boolean
5500 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
5501 {
5502   switch (bfd_get_format (abfd))
5503     {
5504     case bfd_object:
5505       return elf_link_add_object_symbols (abfd, info);
5506     case bfd_archive:
5507       return elf_link_add_archive_symbols (abfd, info);
5508     default:
5509       bfd_set_error (bfd_error_wrong_format);
5510       return FALSE;
5511     }
5512 }
5513 \f
5514 struct hash_codes_info
5515 {
5516   unsigned long *hashcodes;
5517   bfd_boolean error;
5518 };
5519
5520 /* This function will be called though elf_link_hash_traverse to store
5521    all hash value of the exported symbols in an array.  */
5522
5523 static bfd_boolean
5524 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
5525 {
5526   struct hash_codes_info *inf = (struct hash_codes_info *) data;
5527   const char *name;
5528   unsigned long ha;
5529   char *alc = NULL;
5530
5531   /* Ignore indirect symbols.  These are added by the versioning code.  */
5532   if (h->dynindx == -1)
5533     return TRUE;
5534
5535   name = h->root.root.string;
5536   if (h->versioned >= versioned)
5537     {
5538       char *p = strchr (name, ELF_VER_CHR);
5539       if (p != NULL)
5540         {
5541           alc = (char *) bfd_malloc (p - name + 1);
5542           if (alc == NULL)
5543             {
5544               inf->error = TRUE;
5545               return FALSE;
5546             }
5547           memcpy (alc, name, p - name);
5548           alc[p - name] = '\0';
5549           name = alc;
5550         }
5551     }
5552
5553   /* Compute the hash value.  */
5554   ha = bfd_elf_hash (name);
5555
5556   /* Store the found hash value in the array given as the argument.  */
5557   *(inf->hashcodes)++ = ha;
5558
5559   /* And store it in the struct so that we can put it in the hash table
5560      later.  */
5561   h->u.elf_hash_value = ha;
5562
5563   if (alc != NULL)
5564     free (alc);
5565
5566   return TRUE;
5567 }
5568
5569 struct collect_gnu_hash_codes
5570 {
5571   bfd *output_bfd;
5572   const struct elf_backend_data *bed;
5573   unsigned long int nsyms;
5574   unsigned long int maskbits;
5575   unsigned long int *hashcodes;
5576   unsigned long int *hashval;
5577   unsigned long int *indx;
5578   unsigned long int *counts;
5579   bfd_vma *bitmask;
5580   bfd_byte *contents;
5581   long int min_dynindx;
5582   unsigned long int bucketcount;
5583   unsigned long int symindx;
5584   long int local_indx;
5585   long int shift1, shift2;
5586   unsigned long int mask;
5587   bfd_boolean error;
5588 };
5589
5590 /* This function will be called though elf_link_hash_traverse to store
5591    all hash value of the exported symbols in an array.  */
5592
5593 static bfd_boolean
5594 elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data)
5595 {
5596   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5597   const char *name;
5598   unsigned long ha;
5599   char *alc = NULL;
5600
5601   /* Ignore indirect symbols.  These are added by the versioning code.  */
5602   if (h->dynindx == -1)
5603     return TRUE;
5604
5605   /* Ignore also local symbols and undefined symbols.  */
5606   if (! (*s->bed->elf_hash_symbol) (h))
5607     return TRUE;
5608
5609   name = h->root.root.string;
5610   if (h->versioned >= versioned)
5611     {
5612       char *p = strchr (name, ELF_VER_CHR);
5613       if (p != NULL)
5614         {
5615           alc = (char *) bfd_malloc (p - name + 1);
5616           if (alc == NULL)
5617             {
5618               s->error = TRUE;
5619               return FALSE;
5620             }
5621           memcpy (alc, name, p - name);
5622           alc[p - name] = '\0';
5623           name = alc;
5624         }
5625     }
5626
5627   /* Compute the hash value.  */
5628   ha = bfd_elf_gnu_hash (name);
5629
5630   /* Store the found hash value in the array for compute_bucket_count,
5631      and also for .dynsym reordering purposes.  */
5632   s->hashcodes[s->nsyms] = ha;
5633   s->hashval[h->dynindx] = ha;
5634   ++s->nsyms;
5635   if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx)
5636     s->min_dynindx = h->dynindx;
5637
5638   if (alc != NULL)
5639     free (alc);
5640
5641   return TRUE;
5642 }
5643
5644 /* This function will be called though elf_link_hash_traverse to do
5645    final dynaminc symbol renumbering.  */
5646
5647 static bfd_boolean
5648 elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data)
5649 {
5650   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5651   unsigned long int bucket;
5652   unsigned long int val;
5653
5654   /* Ignore indirect symbols.  */
5655   if (h->dynindx == -1)
5656     return TRUE;
5657
5658   /* Ignore also local symbols and undefined symbols.  */
5659   if (! (*s->bed->elf_hash_symbol) (h))
5660     {
5661       if (h->dynindx >= s->min_dynindx)
5662         h->dynindx = s->local_indx++;
5663       return TRUE;
5664     }
5665
5666   bucket = s->hashval[h->dynindx] % s->bucketcount;
5667   val = (s->hashval[h->dynindx] >> s->shift1)
5668         & ((s->maskbits >> s->shift1) - 1);
5669   s->bitmask[val] |= ((bfd_vma) 1) << (s->hashval[h->dynindx] & s->mask);
5670   s->bitmask[val]
5671     |= ((bfd_vma) 1) << ((s->hashval[h->dynindx] >> s->shift2) & s->mask);
5672   val = s->hashval[h->dynindx] & ~(unsigned long int) 1;
5673   if (s->counts[bucket] == 1)
5674     /* Last element terminates the chain.  */
5675     val |= 1;
5676   bfd_put_32 (s->output_bfd, val,
5677               s->contents + (s->indx[bucket] - s->symindx) * 4);
5678   --s->counts[bucket];
5679   h->dynindx = s->indx[bucket]++;
5680   return TRUE;
5681 }
5682
5683 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
5684
5685 bfd_boolean
5686 _bfd_elf_hash_symbol (struct elf_link_hash_entry *h)
5687 {
5688   return !(h->forced_local
5689            || h->root.type == bfd_link_hash_undefined
5690            || h->root.type == bfd_link_hash_undefweak
5691            || ((h->root.type == bfd_link_hash_defined
5692                 || h->root.type == bfd_link_hash_defweak)
5693                && h->root.u.def.section->output_section == NULL));
5694 }
5695
5696 /* Array used to determine the number of hash table buckets to use
5697    based on the number of symbols there are.  If there are fewer than
5698    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
5699    fewer than 37 we use 17 buckets, and so forth.  We never use more
5700    than 32771 buckets.  */
5701
5702 static const size_t elf_buckets[] =
5703 {
5704   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
5705   16411, 32771, 0
5706 };
5707
5708 /* Compute bucket count for hashing table.  We do not use a static set
5709    of possible tables sizes anymore.  Instead we determine for all
5710    possible reasonable sizes of the table the outcome (i.e., the
5711    number of collisions etc) and choose the best solution.  The
5712    weighting functions are not too simple to allow the table to grow
5713    without bounds.  Instead one of the weighting factors is the size.
5714    Therefore the result is always a good payoff between few collisions
5715    (= short chain lengths) and table size.  */
5716 static size_t
5717 compute_bucket_count (struct bfd_link_info *info ATTRIBUTE_UNUSED,
5718                       unsigned long int *hashcodes ATTRIBUTE_UNUSED,
5719                       unsigned long int nsyms,
5720                       int gnu_hash)
5721 {
5722   size_t best_size = 0;
5723   unsigned long int i;
5724
5725   /* We have a problem here.  The following code to optimize the table
5726      size requires an integer type with more the 32 bits.  If
5727      BFD_HOST_U_64_BIT is set we know about such a type.  */
5728 #ifdef BFD_HOST_U_64_BIT
5729   if (info->optimize)
5730     {
5731       size_t minsize;
5732       size_t maxsize;
5733       BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
5734       bfd *dynobj = elf_hash_table (info)->dynobj;
5735       size_t dynsymcount = elf_hash_table (info)->dynsymcount;
5736       const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
5737       unsigned long int *counts;
5738       bfd_size_type amt;
5739       unsigned int no_improvement_count = 0;
5740
5741       /* Possible optimization parameters: if we have NSYMS symbols we say
5742          that the hashing table must at least have NSYMS/4 and at most
5743          2*NSYMS buckets.  */
5744       minsize = nsyms / 4;
5745       if (minsize == 0)
5746         minsize = 1;
5747       best_size = maxsize = nsyms * 2;
5748       if (gnu_hash)
5749         {
5750           if (minsize < 2)
5751             minsize = 2;
5752           if ((best_size & 31) == 0)
5753             ++best_size;
5754         }
5755
5756       /* Create array where we count the collisions in.  We must use bfd_malloc
5757          since the size could be large.  */
5758       amt = maxsize;
5759       amt *= sizeof (unsigned long int);
5760       counts = (unsigned long int *) bfd_malloc (amt);
5761       if (counts == NULL)
5762         return 0;
5763
5764       /* Compute the "optimal" size for the hash table.  The criteria is a
5765          minimal chain length.  The minor criteria is (of course) the size
5766          of the table.  */
5767       for (i = minsize; i < maxsize; ++i)
5768         {
5769           /* Walk through the array of hashcodes and count the collisions.  */
5770           BFD_HOST_U_64_BIT max;
5771           unsigned long int j;
5772           unsigned long int fact;
5773
5774           if (gnu_hash && (i & 31) == 0)
5775             continue;
5776
5777           memset (counts, '\0', i * sizeof (unsigned long int));
5778
5779           /* Determine how often each hash bucket is used.  */
5780           for (j = 0; j < nsyms; ++j)
5781             ++counts[hashcodes[j] % i];
5782
5783           /* For the weight function we need some information about the
5784              pagesize on the target.  This is information need not be 100%
5785              accurate.  Since this information is not available (so far) we
5786              define it here to a reasonable default value.  If it is crucial
5787              to have a better value some day simply define this value.  */
5788 # ifndef BFD_TARGET_PAGESIZE
5789 #  define BFD_TARGET_PAGESIZE   (4096)
5790 # endif
5791
5792           /* We in any case need 2 + DYNSYMCOUNT entries for the size values
5793              and the chains.  */
5794           max = (2 + dynsymcount) * bed->s->sizeof_hash_entry;
5795
5796 # if 1
5797           /* Variant 1: optimize for short chains.  We add the squares
5798              of all the chain lengths (which favors many small chain
5799              over a few long chains).  */
5800           for (j = 0; j < i; ++j)
5801             max += counts[j] * counts[j];
5802
5803           /* This adds penalties for the overall size of the table.  */
5804           fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5805           max *= fact * fact;
5806 # else
5807           /* Variant 2: Optimize a lot more for small table.  Here we
5808              also add squares of the size but we also add penalties for
5809              empty slots (the +1 term).  */
5810           for (j = 0; j < i; ++j)
5811             max += (1 + counts[j]) * (1 + counts[j]);
5812
5813           /* The overall size of the table is considered, but not as
5814              strong as in variant 1, where it is squared.  */
5815           fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5816           max *= fact;
5817 # endif
5818
5819           /* Compare with current best results.  */
5820           if (max < best_chlen)
5821             {
5822               best_chlen = max;
5823               best_size = i;
5824               no_improvement_count = 0;
5825             }
5826           /* PR 11843: Avoid futile long searches for the best bucket size
5827              when there are a large number of symbols.  */
5828           else if (++no_improvement_count == 100)
5829             break;
5830         }
5831
5832       free (counts);
5833     }
5834   else
5835 #endif /* defined (BFD_HOST_U_64_BIT) */
5836     {
5837       /* This is the fallback solution if no 64bit type is available or if we
5838          are not supposed to spend much time on optimizations.  We select the
5839          bucket count using a fixed set of numbers.  */
5840       for (i = 0; elf_buckets[i] != 0; i++)
5841         {
5842           best_size = elf_buckets[i];
5843           if (nsyms < elf_buckets[i + 1])
5844             break;
5845         }
5846       if (gnu_hash && best_size < 2)
5847         best_size = 2;
5848     }
5849
5850   return best_size;
5851 }
5852
5853 /* Size any SHT_GROUP section for ld -r.  */
5854
5855 bfd_boolean
5856 _bfd_elf_size_group_sections (struct bfd_link_info *info)
5857 {
5858   bfd *ibfd;
5859
5860   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
5861     if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
5862         && !_bfd_elf_fixup_group_sections (ibfd, bfd_abs_section_ptr))
5863       return FALSE;
5864   return TRUE;
5865 }
5866
5867 /* Set a default stack segment size.  The value in INFO wins.  If it
5868    is unset, LEGACY_SYMBOL's value is used, and if that symbol is
5869    undefined it is initialized.  */
5870
5871 bfd_boolean
5872 bfd_elf_stack_segment_size (bfd *output_bfd,
5873                             struct bfd_link_info *info,
5874                             const char *legacy_symbol,
5875                             bfd_vma default_size)
5876 {
5877   struct elf_link_hash_entry *h = NULL;
5878
5879   /* Look for legacy symbol.  */
5880   if (legacy_symbol)
5881     h = elf_link_hash_lookup (elf_hash_table (info), legacy_symbol,
5882                               FALSE, FALSE, FALSE);
5883   if (h && (h->root.type == bfd_link_hash_defined
5884             || h->root.type == bfd_link_hash_defweak)
5885       && h->def_regular
5886       && (h->type == STT_NOTYPE || h->type == STT_OBJECT))
5887     {
5888       /* The symbol has no type if specified on the command line.  */
5889       h->type = STT_OBJECT;
5890       if (info->stacksize)
5891         /* xgettext:c-format */
5892         _bfd_error_handler (_("%B: stack size specified and %s set"),
5893                             output_bfd, legacy_symbol);
5894       else if (h->root.u.def.section != bfd_abs_section_ptr)
5895         /* xgettext:c-format */
5896         _bfd_error_handler (_("%B: %s not absolute"),
5897                             output_bfd, legacy_symbol);
5898       else
5899         info->stacksize = h->root.u.def.value;
5900     }
5901
5902   if (!info->stacksize)
5903     /* If the user didn't set a size, or explicitly inhibit the
5904        size, set it now.  */
5905     info->stacksize = default_size;
5906
5907   /* Provide the legacy symbol, if it is referenced.  */
5908   if (h && (h->root.type == bfd_link_hash_undefined
5909             || h->root.type == bfd_link_hash_undefweak))
5910     {
5911       struct bfd_link_hash_entry *bh = NULL;
5912
5913       if (!(_bfd_generic_link_add_one_symbol
5914             (info, output_bfd, legacy_symbol,
5915              BSF_GLOBAL, bfd_abs_section_ptr,
5916              info->stacksize >= 0 ? info->stacksize : 0,
5917              NULL, FALSE, get_elf_backend_data (output_bfd)->collect, &bh)))
5918         return FALSE;
5919
5920       h = (struct elf_link_hash_entry *) bh;
5921       h->def_regular = 1;
5922       h->type = STT_OBJECT;
5923     }
5924
5925   return TRUE;
5926 }
5927
5928 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
5929
5930 struct elf_gc_sweep_symbol_info
5931 {
5932   struct bfd_link_info *info;
5933   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
5934                        bfd_boolean);
5935 };
5936
5937 static bfd_boolean
5938 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
5939 {
5940   if (!h->mark
5941       && (((h->root.type == bfd_link_hash_defined
5942             || h->root.type == bfd_link_hash_defweak)
5943            && !((h->def_regular || ELF_COMMON_DEF_P (h))
5944                 && h->root.u.def.section->gc_mark))
5945           || h->root.type == bfd_link_hash_undefined
5946           || h->root.type == bfd_link_hash_undefweak))
5947     {
5948       struct elf_gc_sweep_symbol_info *inf;
5949
5950       inf = (struct elf_gc_sweep_symbol_info *) data;
5951       (*inf->hide_symbol) (inf->info, h, TRUE);
5952       h->def_regular = 0;
5953       h->ref_regular = 0;
5954       h->ref_regular_nonweak = 0;
5955     }
5956
5957   return TRUE;
5958 }
5959
5960 /* Set up the sizes and contents of the ELF dynamic sections.  This is
5961    called by the ELF linker emulation before_allocation routine.  We
5962    must set the sizes of the sections before the linker sets the
5963    addresses of the various sections.  */
5964
5965 bfd_boolean
5966 bfd_elf_size_dynamic_sections (bfd *output_bfd,
5967                                const char *soname,
5968                                const char *rpath,
5969                                const char *filter_shlib,
5970                                const char *audit,
5971                                const char *depaudit,
5972                                const char * const *auxiliary_filters,
5973                                struct bfd_link_info *info,
5974                                asection **sinterpptr)
5975 {
5976   bfd *dynobj;
5977   const struct elf_backend_data *bed;
5978
5979   *sinterpptr = NULL;
5980
5981   if (!is_elf_hash_table (info->hash))
5982     return TRUE;
5983
5984   dynobj = elf_hash_table (info)->dynobj;
5985
5986   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
5987     {
5988       struct bfd_elf_version_tree *verdefs;
5989       struct elf_info_failed asvinfo;
5990       struct bfd_elf_version_tree *t;
5991       struct bfd_elf_version_expr *d;
5992       struct elf_info_failed eif;
5993       bfd_boolean all_defined;
5994       asection *s;
5995       size_t soname_indx;
5996
5997       eif.info = info;
5998       eif.failed = FALSE;
5999
6000       /* If we are supposed to export all symbols into the dynamic symbol
6001          table (this is not the normal case), then do so.  */
6002       if (info->export_dynamic
6003           || (bfd_link_executable (info) && info->dynamic))
6004         {
6005           elf_link_hash_traverse (elf_hash_table (info),
6006                                   _bfd_elf_export_symbol,
6007                                   &eif);
6008           if (eif.failed)
6009             return FALSE;
6010         }
6011
6012       if (soname != NULL)
6013         {
6014           soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6015                                              soname, TRUE);
6016           if (soname_indx == (size_t) -1
6017               || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
6018             return FALSE;
6019         }
6020       else
6021         soname_indx = (size_t) -1;
6022
6023       /* Make all global versions with definition.  */
6024       for (t = info->version_info; t != NULL; t = t->next)
6025         for (d = t->globals.list; d != NULL; d = d->next)
6026           if (!d->symver && d->literal)
6027             {
6028               const char *verstr, *name;
6029               size_t namelen, verlen, newlen;
6030               char *newname, *p, leading_char;
6031               struct elf_link_hash_entry *newh;
6032
6033               leading_char = bfd_get_symbol_leading_char (output_bfd);
6034               name = d->pattern;
6035               namelen = strlen (name) + (leading_char != '\0');
6036               verstr = t->name;
6037               verlen = strlen (verstr);
6038               newlen = namelen + verlen + 3;
6039
6040               newname = (char *) bfd_malloc (newlen);
6041               if (newname == NULL)
6042                 return FALSE;
6043               newname[0] = leading_char;
6044               memcpy (newname + (leading_char != '\0'), name, namelen);
6045
6046               /* Check the hidden versioned definition.  */
6047               p = newname + namelen;
6048               *p++ = ELF_VER_CHR;
6049               memcpy (p, verstr, verlen + 1);
6050               newh = elf_link_hash_lookup (elf_hash_table (info),
6051                                            newname, FALSE, FALSE,
6052                                            FALSE);
6053               if (newh == NULL
6054                   || (newh->root.type != bfd_link_hash_defined
6055                       && newh->root.type != bfd_link_hash_defweak))
6056                 {
6057                   /* Check the default versioned definition.  */
6058                   *p++ = ELF_VER_CHR;
6059                   memcpy (p, verstr, verlen + 1);
6060                   newh = elf_link_hash_lookup (elf_hash_table (info),
6061                                                newname, FALSE, FALSE,
6062                                                FALSE);
6063                 }
6064               free (newname);
6065
6066               /* Mark this version if there is a definition and it is
6067                  not defined in a shared object.  */
6068               if (newh != NULL
6069                   && !newh->def_dynamic
6070                   && (newh->root.type == bfd_link_hash_defined
6071                       || newh->root.type == bfd_link_hash_defweak))
6072                 d->symver = 1;
6073             }
6074
6075       /* Attach all the symbols to their version information.  */
6076       asvinfo.info = info;
6077       asvinfo.failed = FALSE;
6078
6079       elf_link_hash_traverse (elf_hash_table (info),
6080                               _bfd_elf_link_assign_sym_version,
6081                               &asvinfo);
6082       if (asvinfo.failed)
6083         return FALSE;
6084
6085       if (!info->allow_undefined_version)
6086         {
6087           /* Check if all global versions have a definition.  */
6088           all_defined = TRUE;
6089           for (t = info->version_info; t != NULL; t = t->next)
6090             for (d = t->globals.list; d != NULL; d = d->next)
6091               if (d->literal && !d->symver && !d->script)
6092                 {
6093                   _bfd_error_handler
6094                     (_("%s: undefined version: %s"),
6095                      d->pattern, t->name);
6096                   all_defined = FALSE;
6097                 }
6098
6099           if (!all_defined)
6100             {
6101               bfd_set_error (bfd_error_bad_value);
6102               return FALSE;
6103             }
6104         }
6105
6106       /* Set up the version definition section.  */
6107       s = bfd_get_linker_section (dynobj, ".gnu.version_d");
6108       BFD_ASSERT (s != NULL);
6109
6110       /* We may have created additional version definitions if we are
6111          just linking a regular application.  */
6112       verdefs = info->version_info;
6113
6114       /* Skip anonymous version tag.  */
6115       if (verdefs != NULL && verdefs->vernum == 0)
6116         verdefs = verdefs->next;
6117
6118       if (verdefs == NULL && !info->create_default_symver)
6119         s->flags |= SEC_EXCLUDE;
6120       else
6121         {
6122           unsigned int cdefs;
6123           bfd_size_type size;
6124           bfd_byte *p;
6125           Elf_Internal_Verdef def;
6126           Elf_Internal_Verdaux defaux;
6127           struct bfd_link_hash_entry *bh;
6128           struct elf_link_hash_entry *h;
6129           const char *name;
6130
6131           cdefs = 0;
6132           size = 0;
6133
6134           /* Make space for the base version.  */
6135           size += sizeof (Elf_External_Verdef);
6136           size += sizeof (Elf_External_Verdaux);
6137           ++cdefs;
6138
6139           /* Make space for the default version.  */
6140           if (info->create_default_symver)
6141             {
6142               size += sizeof (Elf_External_Verdef);
6143               ++cdefs;
6144             }
6145
6146           for (t = verdefs; t != NULL; t = t->next)
6147             {
6148               struct bfd_elf_version_deps *n;
6149
6150               /* Don't emit base version twice.  */
6151               if (t->vernum == 0)
6152                 continue;
6153
6154               size += sizeof (Elf_External_Verdef);
6155               size += sizeof (Elf_External_Verdaux);
6156               ++cdefs;
6157
6158               for (n = t->deps; n != NULL; n = n->next)
6159                 size += sizeof (Elf_External_Verdaux);
6160             }
6161
6162           s->size = size;
6163           s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6164           if (s->contents == NULL && s->size != 0)
6165             return FALSE;
6166
6167           /* Fill in the version definition section.  */
6168
6169           p = s->contents;
6170
6171           def.vd_version = VER_DEF_CURRENT;
6172           def.vd_flags = VER_FLG_BASE;
6173           def.vd_ndx = 1;
6174           def.vd_cnt = 1;
6175           if (info->create_default_symver)
6176             {
6177               def.vd_aux = 2 * sizeof (Elf_External_Verdef);
6178               def.vd_next = sizeof (Elf_External_Verdef);
6179             }
6180           else
6181             {
6182               def.vd_aux = sizeof (Elf_External_Verdef);
6183               def.vd_next = (sizeof (Elf_External_Verdef)
6184                              + sizeof (Elf_External_Verdaux));
6185             }
6186
6187           if (soname_indx != (size_t) -1)
6188             {
6189               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6190                                       soname_indx);
6191               def.vd_hash = bfd_elf_hash (soname);
6192               defaux.vda_name = soname_indx;
6193               name = soname;
6194             }
6195           else
6196             {
6197               size_t indx;
6198
6199               name = lbasename (output_bfd->filename);
6200               def.vd_hash = bfd_elf_hash (name);
6201               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6202                                           name, FALSE);
6203               if (indx == (size_t) -1)
6204                 return FALSE;
6205               defaux.vda_name = indx;
6206             }
6207           defaux.vda_next = 0;
6208
6209           _bfd_elf_swap_verdef_out (output_bfd, &def,
6210                                     (Elf_External_Verdef *) p);
6211           p += sizeof (Elf_External_Verdef);
6212           if (info->create_default_symver)
6213             {
6214               /* Add a symbol representing this version.  */
6215               bh = NULL;
6216               if (! (_bfd_generic_link_add_one_symbol
6217                      (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
6218                       0, NULL, FALSE,
6219                       get_elf_backend_data (dynobj)->collect, &bh)))
6220                 return FALSE;
6221               h = (struct elf_link_hash_entry *) bh;
6222               h->non_elf = 0;
6223               h->def_regular = 1;
6224               h->type = STT_OBJECT;
6225               h->verinfo.vertree = NULL;
6226
6227               if (! bfd_elf_link_record_dynamic_symbol (info, h))
6228                 return FALSE;
6229
6230               /* Create a duplicate of the base version with the same
6231                  aux block, but different flags.  */
6232               def.vd_flags = 0;
6233               def.vd_ndx = 2;
6234               def.vd_aux = sizeof (Elf_External_Verdef);
6235               if (verdefs)
6236                 def.vd_next = (sizeof (Elf_External_Verdef)
6237                                + sizeof (Elf_External_Verdaux));
6238               else
6239                 def.vd_next = 0;
6240               _bfd_elf_swap_verdef_out (output_bfd, &def,
6241                                         (Elf_External_Verdef *) p);
6242               p += sizeof (Elf_External_Verdef);
6243             }
6244           _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6245                                      (Elf_External_Verdaux *) p);
6246           p += sizeof (Elf_External_Verdaux);
6247
6248           for (t = verdefs; t != NULL; t = t->next)
6249             {
6250               unsigned int cdeps;
6251               struct bfd_elf_version_deps *n;
6252
6253               /* Don't emit the base version twice.  */
6254               if (t->vernum == 0)
6255                 continue;
6256
6257               cdeps = 0;
6258               for (n = t->deps; n != NULL; n = n->next)
6259                 ++cdeps;
6260
6261               /* Add a symbol representing this version.  */
6262               bh = NULL;
6263               if (! (_bfd_generic_link_add_one_symbol
6264                      (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
6265                       0, NULL, FALSE,
6266                       get_elf_backend_data (dynobj)->collect, &bh)))
6267                 return FALSE;
6268               h = (struct elf_link_hash_entry *) bh;
6269               h->non_elf = 0;
6270               h->def_regular = 1;
6271               h->type = STT_OBJECT;
6272               h->verinfo.vertree = t;
6273
6274               if (! bfd_elf_link_record_dynamic_symbol (info, h))
6275                 return FALSE;
6276
6277               def.vd_version = VER_DEF_CURRENT;
6278               def.vd_flags = 0;
6279               if (t->globals.list == NULL
6280                   && t->locals.list == NULL
6281                   && ! t->used)
6282                 def.vd_flags |= VER_FLG_WEAK;
6283               def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1);
6284               def.vd_cnt = cdeps + 1;
6285               def.vd_hash = bfd_elf_hash (t->name);
6286               def.vd_aux = sizeof (Elf_External_Verdef);
6287               def.vd_next = 0;
6288
6289               /* If a basever node is next, it *must* be the last node in
6290                  the chain, otherwise Verdef construction breaks.  */
6291               if (t->next != NULL && t->next->vernum == 0)
6292                 BFD_ASSERT (t->next->next == NULL);
6293
6294               if (t->next != NULL && t->next->vernum != 0)
6295                 def.vd_next = (sizeof (Elf_External_Verdef)
6296                                + (cdeps + 1) * sizeof (Elf_External_Verdaux));
6297
6298               _bfd_elf_swap_verdef_out (output_bfd, &def,
6299                                         (Elf_External_Verdef *) p);
6300               p += sizeof (Elf_External_Verdef);
6301
6302               defaux.vda_name = h->dynstr_index;
6303               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6304                                       h->dynstr_index);
6305               defaux.vda_next = 0;
6306               if (t->deps != NULL)
6307                 defaux.vda_next = sizeof (Elf_External_Verdaux);
6308               t->name_indx = defaux.vda_name;
6309
6310               _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6311                                          (Elf_External_Verdaux *) p);
6312               p += sizeof (Elf_External_Verdaux);
6313
6314               for (n = t->deps; n != NULL; n = n->next)
6315                 {
6316                   if (n->version_needed == NULL)
6317                     {
6318                       /* This can happen if there was an error in the
6319                          version script.  */
6320                       defaux.vda_name = 0;
6321                     }
6322                   else
6323                     {
6324                       defaux.vda_name = n->version_needed->name_indx;
6325                       _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6326                                               defaux.vda_name);
6327                     }
6328                   if (n->next == NULL)
6329                     defaux.vda_next = 0;
6330                   else
6331                     defaux.vda_next = sizeof (Elf_External_Verdaux);
6332
6333                   _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6334                                              (Elf_External_Verdaux *) p);
6335                   p += sizeof (Elf_External_Verdaux);
6336                 }
6337             }
6338
6339           elf_tdata (output_bfd)->cverdefs = cdefs;
6340         }
6341
6342       /* Work out the size of the version reference section.  */
6343
6344       s = bfd_get_linker_section (dynobj, ".gnu.version_r");
6345       BFD_ASSERT (s != NULL);
6346       {
6347         struct elf_find_verdep_info sinfo;
6348
6349         sinfo.info = info;
6350         sinfo.vers = elf_tdata (output_bfd)->cverdefs;
6351         if (sinfo.vers == 0)
6352           sinfo.vers = 1;
6353         sinfo.failed = FALSE;
6354
6355         elf_link_hash_traverse (elf_hash_table (info),
6356                                 _bfd_elf_link_find_version_dependencies,
6357                                 &sinfo);
6358         if (sinfo.failed)
6359           return FALSE;
6360
6361         if (elf_tdata (output_bfd)->verref == NULL)
6362           s->flags |= SEC_EXCLUDE;
6363         else
6364           {
6365             Elf_Internal_Verneed *vn;
6366             unsigned int size;
6367             unsigned int crefs;
6368             bfd_byte *p;
6369
6370             /* Build the version dependency section.  */
6371             size = 0;
6372             crefs = 0;
6373             for (vn = elf_tdata (output_bfd)->verref;
6374                  vn != NULL;
6375                  vn = vn->vn_nextref)
6376               {
6377                 Elf_Internal_Vernaux *a;
6378
6379                 size += sizeof (Elf_External_Verneed);
6380                 ++crefs;
6381                 for (a = vn->vn_auxptr; a != NULL; a = a->vna_nextptr)
6382                   size += sizeof (Elf_External_Vernaux);
6383               }
6384
6385             s->size = size;
6386             s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6387             if (s->contents == NULL)
6388               return FALSE;
6389
6390             p = s->contents;
6391             for (vn = elf_tdata (output_bfd)->verref;
6392                  vn != NULL;
6393                  vn = vn->vn_nextref)
6394               {
6395                 unsigned int caux;
6396                 Elf_Internal_Vernaux *a;
6397                 size_t indx;
6398
6399                 caux = 0;
6400                 for (a = vn->vn_auxptr; a != NULL; a = a->vna_nextptr)
6401                   ++caux;
6402
6403                 vn->vn_version = VER_NEED_CURRENT;
6404                 vn->vn_cnt = caux;
6405                 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6406                                             elf_dt_name (vn->vn_bfd) != NULL
6407                                             ? elf_dt_name (vn->vn_bfd)
6408                                             : lbasename (vn->vn_bfd->filename),
6409                                             FALSE);
6410                 if (indx == (size_t) -1)
6411                   return FALSE;
6412                 vn->vn_file = indx;
6413                 vn->vn_aux = sizeof (Elf_External_Verneed);
6414                 if (vn->vn_nextref == NULL)
6415                   vn->vn_next = 0;
6416                 else
6417                   vn->vn_next = (sizeof (Elf_External_Verneed)
6418                                 + caux * sizeof (Elf_External_Vernaux));
6419
6420                 _bfd_elf_swap_verneed_out (output_bfd, vn,
6421                                            (Elf_External_Verneed *) p);
6422                 p += sizeof (Elf_External_Verneed);
6423
6424                 for (a = vn->vn_auxptr; a != NULL; a = a->vna_nextptr)
6425                   {
6426                     a->vna_hash = bfd_elf_hash (a->vna_nodename);
6427                     indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6428                                                 a->vna_nodename, FALSE);
6429                     if (indx == (size_t) -1)
6430                       return FALSE;
6431                     a->vna_name = indx;
6432                     if (a->vna_nextptr == NULL)
6433                       a->vna_next = 0;
6434                     else
6435                       a->vna_next = sizeof (Elf_External_Vernaux);
6436
6437                     _bfd_elf_swap_vernaux_out (output_bfd, a,
6438                                                (Elf_External_Vernaux *) p);
6439                     p += sizeof (Elf_External_Vernaux);
6440                   }
6441               }
6442
6443             elf_tdata (output_bfd)->cverrefs = crefs;
6444           }
6445       }
6446     }
6447
6448   bed = get_elf_backend_data (output_bfd);
6449
6450   if (info->gc_sections && bed->can_gc_sections)
6451     {
6452       struct elf_gc_sweep_symbol_info sweep_info;
6453       unsigned long section_sym_count;
6454
6455       /* Remove the symbols that were in the swept sections from the
6456          dynamic symbol table.  GCFIXME: Anyone know how to get them
6457          out of the static symbol table as well?  */
6458       sweep_info.info = info;
6459       sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
6460       elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
6461                               &sweep_info);
6462
6463       /* We need to reassign dynsym indices now that symbols may have
6464          been removed.  See the call in `bfd_elf_size_dynsym_hash_dynstr'
6465          for the details of the conditions used here.  */
6466       if (elf_hash_table (info)->dynamic_sections_created
6467           || bed->always_renumber_dynsyms)
6468         _bfd_elf_link_renumber_dynsyms (output_bfd, info, &section_sym_count);
6469     }
6470
6471   /* Any syms created from now on start with -1 in
6472      got.refcount/offset and plt.refcount/offset.  */
6473   elf_hash_table (info)->init_got_refcount
6474     = elf_hash_table (info)->init_got_offset;
6475   elf_hash_table (info)->init_plt_refcount
6476     = elf_hash_table (info)->init_plt_offset;
6477
6478   if (bfd_link_relocatable (info)
6479       && !_bfd_elf_size_group_sections (info))
6480     return FALSE;
6481
6482   /* The backend may have to create some sections regardless of whether
6483      we're dynamic or not.  */
6484   if (bed->elf_backend_always_size_sections
6485       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
6486     return FALSE;
6487
6488   /* Determine any GNU_STACK segment requirements, after the backend
6489      has had a chance to set a default segment size.  */
6490   if (info->execstack)
6491     elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
6492   else if (info->noexecstack)
6493     elf_stack_flags (output_bfd) = PF_R | PF_W;
6494   else
6495     {
6496       bfd *inputobj;
6497       asection *notesec = NULL;
6498       int exec = 0;
6499
6500       for (inputobj = info->input_bfds;
6501            inputobj;
6502            inputobj = inputobj->link.next)
6503         {
6504           asection *s;
6505
6506           if (inputobj->flags
6507               & (DYNAMIC | EXEC_P | BFD_PLUGIN | BFD_LINKER_CREATED))
6508             continue;
6509           s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
6510           if (s)
6511             {
6512               if (s->flags & SEC_CODE)
6513                 exec = PF_X;
6514               notesec = s;
6515             }
6516           else if (bed->default_execstack)
6517             exec = PF_X;
6518         }
6519       if (notesec || info->stacksize > 0)
6520         elf_stack_flags (output_bfd) = PF_R | PF_W | exec;
6521       if (notesec && exec && bfd_link_relocatable (info)
6522           && notesec->output_section != bfd_abs_section_ptr)
6523         notesec->output_section->flags |= SEC_CODE;
6524     }
6525
6526   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
6527     {
6528       struct elf_info_failed eif;
6529       struct elf_link_hash_entry *h;
6530       asection *dynstr;
6531       asection *s;
6532
6533       *sinterpptr = bfd_get_linker_section (dynobj, ".interp");
6534       BFD_ASSERT (*sinterpptr != NULL || !bfd_link_executable (info) || info->nointerp);
6535
6536       if (info->symbolic)
6537         {
6538           if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
6539             return FALSE;
6540           info->flags |= DF_SYMBOLIC;
6541         }
6542
6543       if (rpath != NULL)
6544         {
6545           size_t indx;
6546           bfd_vma tag;
6547
6548           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
6549                                       TRUE);
6550           if (indx == (size_t) -1)
6551             return FALSE;
6552
6553           tag = info->new_dtags ? DT_RUNPATH : DT_RPATH;
6554           if (!_bfd_elf_add_dynamic_entry (info, tag, indx))
6555             return FALSE;
6556         }
6557
6558       if (filter_shlib != NULL)
6559         {
6560           size_t indx;
6561
6562           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6563                                       filter_shlib, TRUE);
6564           if (indx == (size_t) -1
6565               || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
6566             return FALSE;
6567         }
6568
6569       if (auxiliary_filters != NULL)
6570         {
6571           const char * const *p;
6572
6573           for (p = auxiliary_filters; *p != NULL; p++)
6574             {
6575               size_t indx;
6576
6577               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6578                                           *p, TRUE);
6579               if (indx == (size_t) -1
6580                   || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
6581                 return FALSE;
6582             }
6583         }
6584
6585       if (audit != NULL)
6586         {
6587           size_t indx;
6588
6589           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit,
6590                                       TRUE);
6591           if (indx == (size_t) -1
6592               || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx))
6593             return FALSE;
6594         }
6595
6596       if (depaudit != NULL)
6597         {
6598           size_t indx;
6599
6600           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit,
6601                                       TRUE);
6602           if (indx == (size_t) -1
6603               || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx))
6604             return FALSE;
6605         }
6606
6607       eif.info = info;
6608       eif.failed = FALSE;
6609
6610       /* Find all symbols which were defined in a dynamic object and make
6611          the backend pick a reasonable value for them.  */
6612       elf_link_hash_traverse (elf_hash_table (info),
6613                               _bfd_elf_adjust_dynamic_symbol,
6614                               &eif);
6615       if (eif.failed)
6616         return FALSE;
6617
6618       /* Add some entries to the .dynamic section.  We fill in some of the
6619          values later, in bfd_elf_final_link, but we must add the entries
6620          now so that we know the final size of the .dynamic section.  */
6621
6622       /* If there are initialization and/or finalization functions to
6623          call then add the corresponding DT_INIT/DT_FINI entries.  */
6624       h = (info->init_function
6625            ? elf_link_hash_lookup (elf_hash_table (info),
6626                                    info->init_function, FALSE,
6627                                    FALSE, FALSE)
6628            : NULL);
6629       if (h != NULL
6630           && (h->ref_regular
6631               || h->def_regular))
6632         {
6633           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
6634             return FALSE;
6635         }
6636       h = (info->fini_function
6637            ? elf_link_hash_lookup (elf_hash_table (info),
6638                                    info->fini_function, FALSE,
6639                                    FALSE, FALSE)
6640            : NULL);
6641       if (h != NULL
6642           && (h->ref_regular
6643               || h->def_regular))
6644         {
6645           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
6646             return FALSE;
6647         }
6648
6649       s = bfd_get_section_by_name (output_bfd, ".preinit_array");
6650       if (s != NULL && s->linker_has_input)
6651         {
6652           /* DT_PREINIT_ARRAY is not allowed in shared library.  */
6653           if (! bfd_link_executable (info))
6654             {
6655               bfd *sub;
6656               asection *o;
6657
6658               for (sub = info->input_bfds; sub != NULL;
6659                    sub = sub->link.next)
6660                 if (bfd_get_flavour (sub) == bfd_target_elf_flavour)
6661                   for (o = sub->sections; o != NULL; o = o->next)
6662                     if (elf_section_data (o)->this_hdr.sh_type
6663                         == SHT_PREINIT_ARRAY)
6664                       {
6665                         _bfd_error_handler
6666                           (_("%B: .preinit_array section is not allowed in DSO"),
6667                            sub);
6668                         break;
6669                       }
6670
6671               bfd_set_error (bfd_error_nonrepresentable_section);
6672               return FALSE;
6673             }
6674
6675           if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
6676               || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
6677             return FALSE;
6678         }
6679       s = bfd_get_section_by_name (output_bfd, ".init_array");
6680       if (s != NULL && s->linker_has_input)
6681         {
6682           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
6683               || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
6684             return FALSE;
6685         }
6686       s = bfd_get_section_by_name (output_bfd, ".fini_array");
6687       if (s != NULL && s->linker_has_input)
6688         {
6689           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
6690               || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
6691             return FALSE;
6692         }
6693
6694       dynstr = bfd_get_linker_section (dynobj, ".dynstr");
6695       /* If .dynstr is excluded from the link, we don't want any of
6696          these tags.  Strictly, we should be checking each section
6697          individually;  This quick check covers for the case where
6698          someone does a /DISCARD/ : { *(*) }.  */
6699       if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
6700         {
6701           bfd_size_type strsize;
6702
6703           strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6704           if ((info->emit_hash
6705                && !_bfd_elf_add_dynamic_entry (info, DT_HASH, 0))
6706               || (info->emit_gnu_hash
6707                   && !_bfd_elf_add_dynamic_entry (info, DT_GNU_HASH, 0))
6708               || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
6709               || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
6710               || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
6711               || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
6712                                               bed->s->sizeof_sym))
6713             return FALSE;
6714         }
6715     }
6716
6717   if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
6718     return FALSE;
6719
6720   /* The backend must work out the sizes of all the other dynamic
6721      sections.  */
6722   if (dynobj != NULL
6723       && bed->elf_backend_size_dynamic_sections != NULL
6724       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
6725     return FALSE;
6726
6727   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
6728     {
6729       unsigned long section_sym_count;
6730
6731       if (elf_tdata (output_bfd)->cverdefs)
6732         {
6733           unsigned int crefs = elf_tdata (output_bfd)->cverdefs;
6734
6735           if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
6736               || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, crefs))
6737             return FALSE;
6738         }
6739
6740       if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
6741         {
6742           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
6743             return FALSE;
6744         }
6745       else if (info->flags & DF_BIND_NOW)
6746         {
6747           if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
6748             return FALSE;
6749         }
6750
6751       if (info->flags_1)
6752         {
6753           if (bfd_link_executable (info))
6754             info->flags_1 &= ~ (DF_1_INITFIRST
6755                                 | DF_1_NODELETE
6756                                 | DF_1_NOOPEN);
6757           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
6758             return FALSE;
6759         }
6760
6761       if (elf_tdata (output_bfd)->cverrefs)
6762         {
6763           unsigned int crefs = elf_tdata (output_bfd)->cverrefs;
6764
6765           if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
6766               || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
6767             return FALSE;
6768         }
6769
6770       if ((elf_tdata (output_bfd)->cverrefs == 0
6771            && elf_tdata (output_bfd)->cverdefs == 0)
6772           || _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6773                                              &section_sym_count) == 0)
6774         {
6775           asection *s;
6776
6777           s = bfd_get_linker_section (dynobj, ".gnu.version");
6778           s->flags |= SEC_EXCLUDE;
6779         }
6780     }
6781   return TRUE;
6782 }
6783
6784 /* Find the first non-excluded output section.  We'll use its
6785    section symbol for some emitted relocs.  */
6786 void
6787 _bfd_elf_init_1_index_section (bfd *output_bfd, struct bfd_link_info *info)
6788 {
6789   asection *s;
6790
6791   for (s = output_bfd->sections; s != NULL; s = s->next)
6792     if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
6793         && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6794       {
6795         elf_hash_table (info)->text_index_section = s;
6796         break;
6797       }
6798 }
6799
6800 /* Find two non-excluded output sections, one for code, one for data.
6801    We'll use their section symbols for some emitted relocs.  */
6802 void
6803 _bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
6804 {
6805   asection *s;
6806
6807   /* Data first, since setting text_index_section changes
6808      _bfd_elf_link_omit_section_dynsym.  */
6809   for (s = output_bfd->sections; s != NULL; s = s->next)
6810     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
6811         && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6812       {
6813         elf_hash_table (info)->data_index_section = s;
6814         break;
6815       }
6816
6817   for (s = output_bfd->sections; s != NULL; s = s->next)
6818     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
6819          == (SEC_ALLOC | SEC_READONLY))
6820         && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6821       {
6822         elf_hash_table (info)->text_index_section = s;
6823         break;
6824       }
6825
6826   if (elf_hash_table (info)->text_index_section == NULL)
6827     elf_hash_table (info)->text_index_section
6828       = elf_hash_table (info)->data_index_section;
6829 }
6830
6831 bfd_boolean
6832 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
6833 {
6834   const struct elf_backend_data *bed;
6835   unsigned long section_sym_count;
6836   bfd_size_type dynsymcount;
6837
6838   if (!is_elf_hash_table (info->hash))
6839     return TRUE;
6840
6841   bed = get_elf_backend_data (output_bfd);
6842   (*bed->elf_backend_init_index_section) (output_bfd, info);
6843
6844   /* Assign dynsym indices.  In a shared library we generate a section
6845      symbol for each output section, which come first.  Next come all
6846      of the back-end allocated local dynamic syms, followed by the rest
6847      of the global symbols.
6848
6849      This is usually not needed for static binaries, however backends
6850      can request to always do it, e.g. the MIPS backend uses dynamic
6851      symbol counts to lay out GOT, which will be produced in the
6852      presence of GOT relocations even in static binaries (holding fixed
6853      data in that case, to satisfy those relocations).  */
6854
6855   if (elf_hash_table (info)->dynamic_sections_created
6856       || bed->always_renumber_dynsyms)
6857     dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6858                                                   &section_sym_count);
6859
6860   if (elf_hash_table (info)->dynamic_sections_created)
6861     {
6862       bfd *dynobj;
6863       asection *s;
6864       unsigned int dtagcount;
6865
6866       dynobj = elf_hash_table (info)->dynobj;
6867
6868       /* Work out the size of the symbol version section.  */
6869       s = bfd_get_linker_section (dynobj, ".gnu.version");
6870       BFD_ASSERT (s != NULL);
6871       if ((s->flags & SEC_EXCLUDE) == 0)
6872         {
6873           s->size = dynsymcount * sizeof (Elf_External_Versym);
6874           s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6875           if (s->contents == NULL)
6876             return FALSE;
6877
6878           if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
6879             return FALSE;
6880         }
6881
6882       /* Set the size of the .dynsym and .hash sections.  We counted
6883          the number of dynamic symbols in elf_link_add_object_symbols.
6884          We will build the contents of .dynsym and .hash when we build
6885          the final symbol table, because until then we do not know the
6886          correct value to give the symbols.  We built the .dynstr
6887          section as we went along in elf_link_add_object_symbols.  */
6888       s = elf_hash_table (info)->dynsym;
6889       BFD_ASSERT (s != NULL);
6890       s->size = dynsymcount * bed->s->sizeof_sym;
6891
6892       s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6893       if (s->contents == NULL)
6894         return FALSE;
6895
6896       /* The first entry in .dynsym is a dummy symbol.  Clear all the
6897          section syms, in case we don't output them all.  */
6898       ++section_sym_count;
6899       memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
6900
6901       elf_hash_table (info)->bucketcount = 0;
6902
6903       /* Compute the size of the hashing table.  As a side effect this
6904          computes the hash values for all the names we export.  */
6905       if (info->emit_hash)
6906         {
6907           unsigned long int *hashcodes;
6908           struct hash_codes_info hashinf;
6909           bfd_size_type amt;
6910           unsigned long int nsyms;
6911           size_t bucketcount;
6912           size_t hash_entry_size;
6913
6914           /* Compute the hash values for all exported symbols.  At the same
6915              time store the values in an array so that we could use them for
6916              optimizations.  */
6917           amt = dynsymcount * sizeof (unsigned long int);
6918           hashcodes = (unsigned long int *) bfd_malloc (amt);
6919           if (hashcodes == NULL)
6920             return FALSE;
6921           hashinf.hashcodes = hashcodes;
6922           hashinf.error = FALSE;
6923
6924           /* Put all hash values in HASHCODES.  */
6925           elf_link_hash_traverse (elf_hash_table (info),
6926                                   elf_collect_hash_codes, &hashinf);
6927           if (hashinf.error)
6928             {
6929               free (hashcodes);
6930               return FALSE;
6931             }
6932
6933           nsyms = hashinf.hashcodes - hashcodes;
6934           bucketcount
6935             = compute_bucket_count (info, hashcodes, nsyms, 0);
6936           free (hashcodes);
6937
6938           if (bucketcount == 0)
6939             return FALSE;
6940
6941           elf_hash_table (info)->bucketcount = bucketcount;
6942
6943           s = bfd_get_linker_section (dynobj, ".hash");
6944           BFD_ASSERT (s != NULL);
6945           hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
6946           s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
6947           s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6948           if (s->contents == NULL)
6949             return FALSE;
6950
6951           bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
6952           bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
6953                    s->contents + hash_entry_size);
6954         }
6955
6956       if (info->emit_gnu_hash)
6957         {
6958           size_t i, cnt;
6959           unsigned char *contents;
6960           struct collect_gnu_hash_codes cinfo;
6961           bfd_size_type amt;
6962           size_t bucketcount;
6963
6964           memset (&cinfo, 0, sizeof (cinfo));
6965
6966           /* Compute the hash values for all exported symbols.  At the same
6967              time store the values in an array so that we could use them for
6968              optimizations.  */
6969           amt = dynsymcount * 2 * sizeof (unsigned long int);
6970           cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt);
6971           if (cinfo.hashcodes == NULL)
6972             return FALSE;
6973
6974           cinfo.hashval = cinfo.hashcodes + dynsymcount;
6975           cinfo.min_dynindx = -1;
6976           cinfo.output_bfd = output_bfd;
6977           cinfo.bed = bed;
6978
6979           /* Put all hash values in HASHCODES.  */
6980           elf_link_hash_traverse (elf_hash_table (info),
6981                                   elf_collect_gnu_hash_codes, &cinfo);
6982           if (cinfo.error)
6983             {
6984               free (cinfo.hashcodes);
6985               return FALSE;
6986             }
6987
6988           bucketcount
6989             = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1);
6990
6991           if (bucketcount == 0)
6992             {
6993               free (cinfo.hashcodes);
6994               return FALSE;
6995             }
6996
6997           s = bfd_get_linker_section (dynobj, ".gnu.hash");
6998           BFD_ASSERT (s != NULL);
6999
7000           if (cinfo.nsyms == 0)
7001             {
7002               /* Empty .gnu.hash section is special.  */
7003               BFD_ASSERT (cinfo.min_dynindx == -1);
7004               free (cinfo.hashcodes);
7005               s->size = 5 * 4 + bed->s->arch_size / 8;
7006               contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
7007               if (contents == NULL)
7008                 return FALSE;
7009               s->contents = contents;
7010               /* 1 empty bucket.  */
7011               bfd_put_32 (output_bfd, 1, contents);
7012               /* SYMIDX above the special symbol 0.  */
7013               bfd_put_32 (output_bfd, 1, contents + 4);
7014               /* Just one word for bitmask.  */
7015               bfd_put_32 (output_bfd, 1, contents + 8);
7016               /* Only hash fn bloom filter.  */
7017               bfd_put_32 (output_bfd, 0, contents + 12);
7018               /* No hashes are valid - empty bitmask.  */
7019               bfd_put (bed->s->arch_size, output_bfd, 0, contents + 16);
7020               /* No hashes in the only bucket.  */
7021               bfd_put_32 (output_bfd, 0,
7022                           contents + 16 + bed->s->arch_size / 8);
7023             }
7024           else
7025             {
7026               unsigned long int maskwords, maskbitslog2, x;
7027               BFD_ASSERT (cinfo.min_dynindx != -1);
7028
7029               x = cinfo.nsyms;
7030               maskbitslog2 = 1;
7031               while ((x >>= 1) != 0)
7032                 ++maskbitslog2;
7033               if (maskbitslog2 < 3)
7034                 maskbitslog2 = 5;
7035               else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms)
7036                 maskbitslog2 = maskbitslog2 + 3;
7037               else
7038                 maskbitslog2 = maskbitslog2 + 2;
7039               if (bed->s->arch_size == 64)
7040                 {
7041                   if (maskbitslog2 == 5)
7042                     maskbitslog2 = 6;
7043                   cinfo.shift1 = 6;
7044                 }
7045               else
7046                 cinfo.shift1 = 5;
7047               cinfo.mask = (1 << cinfo.shift1) - 1;
7048               cinfo.shift2 = maskbitslog2;
7049               cinfo.maskbits = 1 << maskbitslog2;
7050               maskwords = 1 << (maskbitslog2 - cinfo.shift1);
7051               amt = bucketcount * sizeof (unsigned long int) * 2;
7052               amt += maskwords * sizeof (bfd_vma);
7053               cinfo.bitmask = (bfd_vma *) bfd_malloc (amt);
7054               if (cinfo.bitmask == NULL)
7055                 {
7056                   free (cinfo.hashcodes);
7057                   return FALSE;
7058                 }
7059
7060               cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords);
7061               cinfo.indx = cinfo.counts + bucketcount;
7062               cinfo.symindx = dynsymcount - cinfo.nsyms;
7063               memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma));
7064
7065               /* Determine how often each hash bucket is used.  */
7066               memset (cinfo.counts, 0, bucketcount * sizeof (cinfo.counts[0]));
7067               for (i = 0; i < cinfo.nsyms; ++i)
7068                 ++cinfo.counts[cinfo.hashcodes[i] % bucketcount];
7069
7070               for (i = 0, cnt = cinfo.symindx; i < bucketcount; ++i)
7071                 if (cinfo.counts[i] != 0)
7072                   {
7073                     cinfo.indx[i] = cnt;
7074                     cnt += cinfo.counts[i];
7075                   }
7076               BFD_ASSERT (cnt == dynsymcount);
7077               cinfo.bucketcount = bucketcount;
7078               cinfo.local_indx = cinfo.min_dynindx;
7079
7080               s->size = (4 + bucketcount + cinfo.nsyms) * 4;
7081               s->size += cinfo.maskbits / 8;
7082               contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
7083               if (contents == NULL)
7084                 {
7085                   free (cinfo.bitmask);
7086                   free (cinfo.hashcodes);
7087                   return FALSE;
7088                 }
7089
7090               s->contents = contents;
7091               bfd_put_32 (output_bfd, bucketcount, contents);
7092               bfd_put_32 (output_bfd, cinfo.symindx, contents + 4);
7093               bfd_put_32 (output_bfd, maskwords, contents + 8);
7094               bfd_put_32 (output_bfd, cinfo.shift2, contents + 12);
7095               contents += 16 + cinfo.maskbits / 8;
7096
7097               for (i = 0; i < bucketcount; ++i)
7098                 {
7099                   if (cinfo.counts[i] == 0)
7100                     bfd_put_32 (output_bfd, 0, contents);
7101                   else
7102                     bfd_put_32 (output_bfd, cinfo.indx[i], contents);
7103                   contents += 4;
7104                 }
7105
7106               cinfo.contents = contents;
7107
7108               /* Renumber dynamic symbols, populate .gnu.hash section.  */
7109               elf_link_hash_traverse (elf_hash_table (info),
7110                                       elf_renumber_gnu_hash_syms, &cinfo);
7111
7112               contents = s->contents + 16;
7113               for (i = 0; i < maskwords; ++i)
7114                 {
7115                   bfd_put (bed->s->arch_size, output_bfd, cinfo.bitmask[i],
7116                            contents);
7117                   contents += bed->s->arch_size / 8;
7118                 }
7119
7120               free (cinfo.bitmask);
7121               free (cinfo.hashcodes);
7122             }
7123         }
7124
7125       s = bfd_get_linker_section (dynobj, ".dynstr");
7126       BFD_ASSERT (s != NULL);
7127
7128       elf_finalize_dynstr (output_bfd, info);
7129
7130       s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
7131
7132       for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
7133         if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
7134           return FALSE;
7135     }
7136
7137   return TRUE;
7138 }
7139 \f
7140 /* Make sure sec_info_type is cleared if sec_info is cleared too.  */
7141
7142 static void
7143 merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
7144                             asection *sec)
7145 {
7146   BFD_ASSERT (sec->sec_info_type == SEC_INFO_TYPE_MERGE);
7147   sec->sec_info_type = SEC_INFO_TYPE_NONE;
7148 }
7149
7150 /* Finish SHF_MERGE section merging.  */
7151
7152 bfd_boolean
7153 _bfd_elf_merge_sections (bfd *obfd, struct bfd_link_info *info)
7154 {
7155   bfd *ibfd;
7156   asection *sec;
7157
7158   if (!is_elf_hash_table (info->hash))
7159     return FALSE;
7160
7161   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7162     if ((ibfd->flags & DYNAMIC) == 0
7163         && bfd_get_flavour (ibfd) == bfd_target_elf_flavour
7164         && (elf_elfheader (ibfd)->e_ident[EI_CLASS]
7165             == get_elf_backend_data (obfd)->s->elfclass))
7166       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7167         if ((sec->flags & SEC_MERGE) != 0
7168             && !bfd_is_abs_section (sec->output_section))
7169           {
7170             struct bfd_elf_section_data *secdata;
7171
7172             secdata = elf_section_data (sec);
7173             if (! _bfd_add_merge_section (obfd,
7174                                           &elf_hash_table (info)->merge_info,
7175                                           sec, &secdata->sec_info))
7176               return FALSE;
7177             else if (secdata->sec_info)
7178               sec->sec_info_type = SEC_INFO_TYPE_MERGE;
7179           }
7180
7181   if (elf_hash_table (info)->merge_info != NULL)
7182     _bfd_merge_sections (obfd, info, elf_hash_table (info)->merge_info,
7183                          merge_sections_remove_hook);
7184   return TRUE;
7185 }
7186
7187 /* Create an entry in an ELF linker hash table.  */
7188
7189 struct bfd_hash_entry *
7190 _bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
7191                             struct bfd_hash_table *table,
7192                             const char *string)
7193 {
7194   /* Allocate the structure if it has not already been allocated by a
7195      subclass.  */
7196   if (entry == NULL)
7197     {
7198       entry = (struct bfd_hash_entry *)
7199         bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry));
7200       if (entry == NULL)
7201         return entry;
7202     }
7203
7204   /* Call the allocation method of the superclass.  */
7205   entry = _bfd_link_hash_newfunc (entry, table, string);
7206   if (entry != NULL)
7207     {
7208       struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
7209       struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table;
7210
7211       /* Set local fields.  */
7212       ret->indx = -1;
7213       ret->dynindx = -1;
7214       ret->got = htab->init_got_refcount;
7215       ret->plt = htab->init_plt_refcount;
7216       memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry)
7217                               - offsetof (struct elf_link_hash_entry, size)));
7218       /* Assume that we have been called by a non-ELF symbol reader.
7219          This flag is then reset by the code which reads an ELF input
7220          file.  This ensures that a symbol created by a non-ELF symbol
7221          reader will have the flag set correctly.  */
7222       ret->non_elf = 1;
7223     }
7224
7225   return entry;
7226 }
7227
7228 /* Copy data from an indirect symbol to its direct symbol, hiding the
7229    old indirect symbol.  Also used for copying flags to a weakdef.  */
7230
7231 void
7232 _bfd_elf_link_hash_copy_indirect (struct bfd_link_info *info,
7233                                   struct elf_link_hash_entry *dir,
7234                                   struct elf_link_hash_entry *ind)
7235 {
7236   struct elf_link_hash_table *htab;
7237
7238   /* Copy down any references that we may have already seen to the
7239      symbol which just became indirect.  */
7240
7241   if (dir->versioned != versioned_hidden)
7242     dir->ref_dynamic |= ind->ref_dynamic;
7243   dir->ref_regular |= ind->ref_regular;
7244   dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
7245   dir->non_got_ref |= ind->non_got_ref;
7246   dir->needs_plt |= ind->needs_plt;
7247   dir->pointer_equality_needed |= ind->pointer_equality_needed;
7248
7249   if (ind->root.type != bfd_link_hash_indirect)
7250     return;
7251
7252   /* Copy over the global and procedure linkage table refcount entries.
7253      These may have been already set up by a check_relocs routine.  */
7254   htab = elf_hash_table (info);
7255   if (ind->got.refcount > htab->init_got_refcount.refcount)
7256     {
7257       if (dir->got.refcount < 0)
7258         dir->got.refcount = 0;
7259       dir->got.refcount += ind->got.refcount;
7260       ind->got.refcount = htab->init_got_refcount.refcount;
7261     }
7262
7263   if (ind->plt.refcount > htab->init_plt_refcount.refcount)
7264     {
7265       if (dir->plt.refcount < 0)
7266         dir->plt.refcount = 0;
7267       dir->plt.refcount += ind->plt.refcount;
7268       ind->plt.refcount = htab->init_plt_refcount.refcount;
7269     }
7270
7271   if (ind->dynindx != -1)
7272     {
7273       if (dir->dynindx != -1)
7274         _bfd_elf_strtab_delref (htab->dynstr, dir->dynstr_index);
7275       dir->dynindx = ind->dynindx;
7276       dir->dynstr_index = ind->dynstr_index;
7277       ind->dynindx = -1;
7278       ind->dynstr_index = 0;
7279     }
7280 }
7281
7282 void
7283 _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info,
7284                                 struct elf_link_hash_entry *h,
7285                                 bfd_boolean force_local)
7286 {
7287   /* STT_GNU_IFUNC symbol must go through PLT.  */
7288   if (h->type != STT_GNU_IFUNC)
7289     {
7290       h->plt = elf_hash_table (info)->init_plt_offset;
7291       h->needs_plt = 0;
7292     }
7293   if (force_local)
7294     {
7295       h->forced_local = 1;
7296       if (h->dynindx != -1)
7297         {
7298           h->dynindx = -1;
7299           _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7300                                   h->dynstr_index);
7301         }
7302     }
7303 }
7304
7305 /* Initialize an ELF linker hash table.  *TABLE has been zeroed by our
7306    caller.  */
7307
7308 bfd_boolean
7309 _bfd_elf_link_hash_table_init
7310   (struct elf_link_hash_table *table,
7311    bfd *abfd,
7312    struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
7313                                       struct bfd_hash_table *,
7314                                       const char *),
7315    unsigned int entsize,
7316    enum elf_target_id target_id)
7317 {
7318   bfd_boolean ret;
7319   int can_refcount = get_elf_backend_data (abfd)->can_refcount;
7320
7321   table->init_got_refcount.refcount = can_refcount - 1;
7322   table->init_plt_refcount.refcount = can_refcount - 1;
7323   table->init_got_offset.offset = -(bfd_vma) 1;
7324   table->init_plt_offset.offset = -(bfd_vma) 1;
7325   /* The first dynamic symbol is a dummy.  */
7326   table->dynsymcount = 1;
7327
7328   ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
7329
7330   table->root.type = bfd_link_elf_hash_table;
7331   table->hash_table_id = target_id;
7332
7333   return ret;
7334 }
7335
7336 /* Create an ELF linker hash table.  */
7337
7338 struct bfd_link_hash_table *
7339 _bfd_elf_link_hash_table_create (bfd *abfd)
7340 {
7341   struct elf_link_hash_table *ret;
7342   bfd_size_type amt = sizeof (struct elf_link_hash_table);
7343
7344   ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
7345   if (ret == NULL)
7346     return NULL;
7347
7348   if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc,
7349                                        sizeof (struct elf_link_hash_entry),
7350                                        GENERIC_ELF_DATA))
7351     {
7352       free (ret);
7353       return NULL;
7354     }
7355   ret->root.hash_table_free = _bfd_elf_link_hash_table_free;
7356
7357   return &ret->root;
7358 }
7359
7360 /* Destroy an ELF linker hash table.  */
7361
7362 void
7363 _bfd_elf_link_hash_table_free (bfd *obfd)
7364 {
7365   struct elf_link_hash_table *htab;
7366
7367   htab = (struct elf_link_hash_table *) obfd->link.hash;
7368   if (htab->dynstr != NULL)
7369     _bfd_elf_strtab_free (htab->dynstr);
7370   _bfd_merge_sections_free (htab->merge_info);
7371   _bfd_generic_link_hash_table_free (obfd);
7372 }
7373
7374 /* This is a hook for the ELF emulation code in the generic linker to
7375    tell the backend linker what file name to use for the DT_NEEDED
7376    entry for a dynamic object.  */
7377
7378 void
7379 bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
7380 {
7381   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7382       && bfd_get_format (abfd) == bfd_object)
7383     elf_dt_name (abfd) = name;
7384 }
7385
7386 int
7387 bfd_elf_get_dyn_lib_class (bfd *abfd)
7388 {
7389   int lib_class;
7390   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7391       && bfd_get_format (abfd) == bfd_object)
7392     lib_class = elf_dyn_lib_class (abfd);
7393   else
7394     lib_class = 0;
7395   return lib_class;
7396 }
7397
7398 void
7399 bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class)
7400 {
7401   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7402       && bfd_get_format (abfd) == bfd_object)
7403     elf_dyn_lib_class (abfd) = lib_class;
7404 }
7405
7406 /* Get the list of DT_NEEDED entries for a link.  This is a hook for
7407    the linker ELF emulation code.  */
7408
7409 struct bfd_link_needed_list *
7410 bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
7411                          struct bfd_link_info *info)
7412 {
7413   if (! is_elf_hash_table (info->hash))
7414     return NULL;
7415   return elf_hash_table (info)->needed;
7416 }
7417
7418 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link.  This is a
7419    hook for the linker ELF emulation code.  */
7420
7421 struct bfd_link_needed_list *
7422 bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED,
7423                           struct bfd_link_info *info)
7424 {
7425   if (! is_elf_hash_table (info->hash))
7426     return NULL;
7427   return elf_hash_table (info)->runpath;
7428 }
7429
7430 /* Get the name actually used for a dynamic object for a link.  This
7431    is the SONAME entry if there is one.  Otherwise, it is the string
7432    passed to bfd_elf_set_dt_needed_name, or it is the filename.  */
7433
7434 const char *
7435 bfd_elf_get_dt_soname (bfd *abfd)
7436 {
7437   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7438       && bfd_get_format (abfd) == bfd_object)
7439     return elf_dt_name (abfd);
7440   return NULL;
7441 }
7442
7443 /* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
7444    the ELF linker emulation code.  */
7445
7446 bfd_boolean
7447 bfd_elf_get_bfd_needed_list (bfd *abfd,
7448                              struct bfd_link_needed_list **pneeded)
7449 {
7450   asection *s;
7451   bfd_byte *dynbuf = NULL;
7452   unsigned int elfsec;
7453   unsigned long shlink;
7454   bfd_byte *extdyn, *extdynend;
7455   size_t extdynsize;
7456   void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
7457
7458   *pneeded = NULL;
7459
7460   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
7461       || bfd_get_format (abfd) != bfd_object)
7462     return TRUE;
7463
7464   s = bfd_get_section_by_name (abfd, ".dynamic");
7465   if (s == NULL || s->size == 0)
7466     return TRUE;
7467
7468   if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
7469     goto error_return;
7470
7471   elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
7472   if (elfsec == SHN_BAD)
7473     goto error_return;
7474
7475   shlink = elf_elfsections (abfd)[elfsec]->sh_link;
7476
7477   extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
7478   swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
7479
7480   extdyn = dynbuf;
7481   extdynend = extdyn + s->size;
7482   for (; extdyn < extdynend; extdyn += extdynsize)
7483     {
7484       Elf_Internal_Dyn dyn;
7485
7486       (*swap_dyn_in) (abfd, extdyn, &dyn);
7487
7488       if (dyn.d_tag == DT_NULL)
7489         break;
7490
7491       if (dyn.d_tag == DT_NEEDED)
7492         {
7493           const char *string;
7494           struct bfd_link_needed_list *l;
7495           unsigned int tagv = dyn.d_un.d_val;
7496           bfd_size_type amt;
7497
7498           string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
7499           if (string == NULL)
7500             goto error_return;
7501
7502           amt = sizeof *l;
7503           l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
7504           if (l == NULL)
7505             goto error_return;
7506
7507           l->by = abfd;
7508           l->name = string;
7509           l->next = *pneeded;
7510           *pneeded = l;
7511         }
7512     }
7513
7514   free (dynbuf);
7515
7516   return TRUE;
7517
7518  error_return:
7519   if (dynbuf != NULL)
7520     free (dynbuf);
7521   return FALSE;
7522 }
7523
7524 struct elf_symbuf_symbol
7525 {
7526   unsigned long st_name;        /* Symbol name, index in string tbl */
7527   unsigned char st_info;        /* Type and binding attributes */
7528   unsigned char st_other;       /* Visibilty, and target specific */
7529 };
7530
7531 struct elf_symbuf_head
7532 {
7533   struct elf_symbuf_symbol *ssym;
7534   size_t count;
7535   unsigned int st_shndx;
7536 };
7537
7538 struct elf_symbol
7539 {
7540   union
7541     {
7542       Elf_Internal_Sym *isym;
7543       struct elf_symbuf_symbol *ssym;
7544     } u;
7545   const char *name;
7546 };
7547
7548 /* Sort references to symbols by ascending section number.  */
7549
7550 static int
7551 elf_sort_elf_symbol (const void *arg1, const void *arg2)
7552 {
7553   const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1;
7554   const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2;
7555
7556   return s1->st_shndx - s2->st_shndx;
7557 }
7558
7559 static int
7560 elf_sym_name_compare (const void *arg1, const void *arg2)
7561 {
7562   const struct elf_symbol *s1 = (const struct elf_symbol *) arg1;
7563   const struct elf_symbol *s2 = (const struct elf_symbol *) arg2;
7564   return strcmp (s1->name, s2->name);
7565 }
7566
7567 static struct elf_symbuf_head *
7568 elf_create_symbuf (size_t symcount, Elf_Internal_Sym *isymbuf)
7569 {
7570   Elf_Internal_Sym **ind, **indbufend, **indbuf;
7571   struct elf_symbuf_symbol *ssym;
7572   struct elf_symbuf_head *ssymbuf, *ssymhead;
7573   size_t i, shndx_count, total_size;
7574
7575   indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf));
7576   if (indbuf == NULL)
7577     return NULL;
7578
7579   for (ind = indbuf, i = 0; i < symcount; i++)
7580     if (isymbuf[i].st_shndx != SHN_UNDEF)
7581       *ind++ = &isymbuf[i];
7582   indbufend = ind;
7583
7584   qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *),
7585          elf_sort_elf_symbol);
7586
7587   shndx_count = 0;
7588   if (indbufend > indbuf)
7589     for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++)
7590       if (ind[0]->st_shndx != ind[1]->st_shndx)
7591         shndx_count++;
7592
7593   total_size = ((shndx_count + 1) * sizeof (*ssymbuf)
7594                 + (indbufend - indbuf) * sizeof (*ssym));
7595   ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size);
7596   if (ssymbuf == NULL)
7597     {
7598       free (indbuf);
7599       return NULL;
7600     }
7601
7602   ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1);
7603   ssymbuf->ssym = NULL;
7604   ssymbuf->count = shndx_count;
7605   ssymbuf->st_shndx = 0;
7606   for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++)
7607     {
7608       if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx)
7609         {
7610           ssymhead++;
7611           ssymhead->ssym = ssym;
7612           ssymhead->count = 0;
7613           ssymhead->st_shndx = (*ind)->st_shndx;
7614         }
7615       ssym->st_name = (*ind)->st_name;
7616       ssym->st_info = (*ind)->st_info;
7617       ssym->st_other = (*ind)->st_other;
7618       ssymhead->count++;
7619     }
7620   BFD_ASSERT ((size_t) (ssymhead - ssymbuf) == shndx_count
7621               && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf)
7622                   == total_size));
7623
7624   free (indbuf);
7625   return ssymbuf;
7626 }
7627
7628 /* Check if 2 sections define the same set of local and global
7629    symbols.  */
7630
7631 static bfd_boolean
7632 bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
7633                                    struct bfd_link_info *info)
7634 {
7635   bfd *bfd1, *bfd2;
7636   const struct elf_backend_data *bed1, *bed2;
7637   Elf_Internal_Shdr *hdr1, *hdr2;
7638   size_t symcount1, symcount2;
7639   Elf_Internal_Sym *isymbuf1, *isymbuf2;
7640   struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
7641   Elf_Internal_Sym *isym, *isymend;
7642   struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
7643   size_t count1, count2, i;
7644   unsigned int shndx1, shndx2;
7645   bfd_boolean result;
7646
7647   bfd1 = sec1->owner;
7648   bfd2 = sec2->owner;
7649
7650   /* Both sections have to be in ELF.  */
7651   if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
7652       || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
7653     return FALSE;
7654
7655   if (elf_section_type (sec1) != elf_section_type (sec2))
7656     return FALSE;
7657
7658   shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
7659   shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
7660   if (shndx1 == SHN_BAD || shndx2 == SHN_BAD)
7661     return FALSE;
7662
7663   bed1 = get_elf_backend_data (bfd1);
7664   bed2 = get_elf_backend_data (bfd2);
7665   hdr1 = &elf_tdata (bfd1)->symtab_hdr;
7666   symcount1 = hdr1->sh_size / bed1->s->sizeof_sym;
7667   hdr2 = &elf_tdata (bfd2)->symtab_hdr;
7668   symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
7669
7670   if (symcount1 == 0 || symcount2 == 0)
7671     return FALSE;
7672
7673   result = FALSE;
7674   isymbuf1 = NULL;
7675   isymbuf2 = NULL;
7676   ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf;
7677   ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf;
7678
7679   if (ssymbuf1 == NULL)
7680     {
7681       isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
7682                                        NULL, NULL, NULL);
7683       if (isymbuf1 == NULL)
7684         goto done;
7685
7686       if (!info->reduce_memory_overheads)
7687         elf_tdata (bfd1)->symbuf = ssymbuf1
7688           = elf_create_symbuf (symcount1, isymbuf1);
7689     }
7690
7691   if (ssymbuf1 == NULL || ssymbuf2 == NULL)
7692     {
7693       isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
7694                                        NULL, NULL, NULL);
7695       if (isymbuf2 == NULL)
7696         goto done;
7697
7698       if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
7699         elf_tdata (bfd2)->symbuf = ssymbuf2
7700           = elf_create_symbuf (symcount2, isymbuf2);
7701     }
7702
7703   if (ssymbuf1 != NULL && ssymbuf2 != NULL)
7704     {
7705       /* Optimized faster version.  */
7706       size_t lo, hi, mid;
7707       struct elf_symbol *symp;
7708       struct elf_symbuf_symbol *ssym, *ssymend;
7709
7710       lo = 0;
7711       hi = ssymbuf1->count;
7712       ssymbuf1++;
7713       count1 = 0;
7714       while (lo < hi)
7715         {
7716           mid = (lo + hi) / 2;
7717           if (shndx1 < ssymbuf1[mid].st_shndx)
7718             hi = mid;
7719           else if (shndx1 > ssymbuf1[mid].st_shndx)
7720             lo = mid + 1;
7721           else
7722             {
7723               count1 = ssymbuf1[mid].count;
7724               ssymbuf1 += mid;
7725               break;
7726             }
7727         }
7728
7729       lo = 0;
7730       hi = ssymbuf2->count;
7731       ssymbuf2++;
7732       count2 = 0;
7733       while (lo < hi)
7734         {
7735           mid = (lo + hi) / 2;
7736           if (shndx2 < ssymbuf2[mid].st_shndx)
7737             hi = mid;
7738           else if (shndx2 > ssymbuf2[mid].st_shndx)
7739             lo = mid + 1;
7740           else
7741             {
7742               count2 = ssymbuf2[mid].count;
7743               ssymbuf2 += mid;
7744               break;
7745             }
7746         }
7747
7748       if (count1 == 0 || count2 == 0 || count1 != count2)
7749         goto done;
7750
7751       symtable1
7752         = (struct elf_symbol *) bfd_malloc (count1 * sizeof (*symtable1));
7753       symtable2
7754         = (struct elf_symbol *) bfd_malloc (count2 * sizeof (*symtable2));
7755       if (symtable1 == NULL || symtable2 == NULL)
7756         goto done;
7757
7758       symp = symtable1;
7759       for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
7760            ssym < ssymend; ssym++, symp++)
7761         {
7762           symp->u.ssym = ssym;
7763           symp->name = bfd_elf_string_from_elf_section (bfd1,
7764                                                         hdr1->sh_link,
7765                                                         ssym->st_name);
7766         }
7767
7768       symp = symtable2;
7769       for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
7770            ssym < ssymend; ssym++, symp++)
7771         {
7772           symp->u.ssym = ssym;
7773           symp->name = bfd_elf_string_from_elf_section (bfd2,
7774                                                         hdr2->sh_link,
7775                                                         ssym->st_name);
7776         }
7777
7778       /* Sort symbol by name.  */
7779       qsort (symtable1, count1, sizeof (struct elf_symbol),
7780              elf_sym_name_compare);
7781       qsort (symtable2, count1, sizeof (struct elf_symbol),
7782              elf_sym_name_compare);
7783
7784       for (i = 0; i < count1; i++)
7785         /* Two symbols must have the same binding, type and name.  */
7786         if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info
7787             || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other
7788             || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7789           goto done;
7790
7791       result = TRUE;
7792       goto done;
7793     }
7794
7795   symtable1 = (struct elf_symbol *)
7796       bfd_malloc (symcount1 * sizeof (struct elf_symbol));
7797   symtable2 = (struct elf_symbol *)
7798       bfd_malloc (symcount2 * sizeof (struct elf_symbol));
7799   if (symtable1 == NULL || symtable2 == NULL)
7800     goto done;
7801
7802   /* Count definitions in the section.  */
7803   count1 = 0;
7804   for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
7805     if (isym->st_shndx == shndx1)
7806       symtable1[count1++].u.isym = isym;
7807
7808   count2 = 0;
7809   for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
7810     if (isym->st_shndx == shndx2)
7811       symtable2[count2++].u.isym = isym;
7812
7813   if (count1 == 0 || count2 == 0 || count1 != count2)
7814     goto done;
7815
7816   for (i = 0; i < count1; i++)
7817     symtable1[i].name
7818       = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link,
7819                                          symtable1[i].u.isym->st_name);
7820
7821   for (i = 0; i < count2; i++)
7822     symtable2[i].name
7823       = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link,
7824                                          symtable2[i].u.isym->st_name);
7825
7826   /* Sort symbol by name.  */
7827   qsort (symtable1, count1, sizeof (struct elf_symbol),
7828          elf_sym_name_compare);
7829   qsort (symtable2, count1, sizeof (struct elf_symbol),
7830          elf_sym_name_compare);
7831
7832   for (i = 0; i < count1; i++)
7833     /* Two symbols must have the same binding, type and name.  */
7834     if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info
7835         || symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other
7836         || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7837       goto done;
7838
7839   result = TRUE;
7840
7841 done:
7842   if (symtable1)
7843     free (symtable1);
7844   if (symtable2)
7845     free (symtable2);
7846   if (isymbuf1)
7847     free (isymbuf1);
7848   if (isymbuf2)
7849     free (isymbuf2);
7850
7851   return result;
7852 }
7853
7854 /* Return TRUE if 2 section types are compatible.  */
7855
7856 bfd_boolean
7857 _bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
7858                                  bfd *bbfd, const asection *bsec)
7859 {
7860   if (asec == NULL
7861       || bsec == NULL
7862       || abfd->xvec->flavour != bfd_target_elf_flavour
7863       || bbfd->xvec->flavour != bfd_target_elf_flavour)
7864     return TRUE;
7865
7866   return elf_section_type (asec) == elf_section_type (bsec);
7867 }
7868 \f
7869 /* Final phase of ELF linker.  */
7870
7871 /* A structure we use to avoid passing large numbers of arguments.  */
7872
7873 struct elf_final_link_info
7874 {
7875   /* General link information.  */
7876   struct bfd_link_info *info;
7877   /* Output BFD.  */
7878   bfd *output_bfd;
7879   /* Symbol string table.  */
7880   struct elf_strtab_hash *symstrtab;
7881   /* .hash section.  */
7882   asection *hash_sec;
7883   /* symbol version section (.gnu.version).  */
7884   asection *symver_sec;
7885   /* Buffer large enough to hold contents of any section.  */
7886   bfd_byte *contents;
7887   /* Buffer large enough to hold external relocs of any section.  */
7888   void *external_relocs;
7889   /* Buffer large enough to hold internal relocs of any section.  */
7890   Elf_Internal_Rela *internal_relocs;
7891   /* Buffer large enough to hold external local symbols of any input
7892      BFD.  */
7893   bfd_byte *external_syms;
7894   /* And a buffer for symbol section indices.  */
7895   Elf_External_Sym_Shndx *locsym_shndx;
7896   /* Buffer large enough to hold internal local symbols of any input
7897      BFD.  */
7898   Elf_Internal_Sym *internal_syms;
7899   /* Array large enough to hold a symbol index for each local symbol
7900      of any input BFD.  */
7901   long *indices;
7902   /* Array large enough to hold a section pointer for each local
7903      symbol of any input BFD.  */
7904   asection **sections;
7905   /* Buffer for SHT_SYMTAB_SHNDX section.  */
7906   Elf_External_Sym_Shndx *symshndxbuf;
7907   /* Number of STT_FILE syms seen.  */
7908   size_t filesym_count;
7909 };
7910
7911 /* This struct is used to pass information to elf_link_output_extsym.  */
7912
7913 struct elf_outext_info
7914 {
7915   bfd_boolean failed;
7916   bfd_boolean localsyms;
7917   bfd_boolean file_sym_done;
7918   struct elf_final_link_info *flinfo;
7919 };
7920
7921
7922 /* Support for evaluating a complex relocation.
7923
7924    Complex relocations are generalized, self-describing relocations.  The
7925    implementation of them consists of two parts: complex symbols, and the
7926    relocations themselves.
7927
7928    The relocations are use a reserved elf-wide relocation type code (R_RELC
7929    external / BFD_RELOC_RELC internal) and an encoding of relocation field
7930    information (start bit, end bit, word width, etc) into the addend.  This
7931    information is extracted from CGEN-generated operand tables within gas.
7932
7933    Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
7934    internal) representing prefix-notation expressions, including but not
7935    limited to those sorts of expressions normally encoded as addends in the
7936    addend field.  The symbol mangling format is:
7937
7938    <node> := <literal>
7939           |  <unary-operator> ':' <node>
7940           |  <binary-operator> ':' <node> ':' <node>
7941           ;
7942
7943    <literal> := 's' <digits=N> ':' <N character symbol name>
7944              |  'S' <digits=N> ':' <N character section name>
7945              |  '#' <hexdigits>
7946              ;
7947
7948    <binary-operator> := as in C
7949    <unary-operator> := as in C, plus "0-" for unambiguous negation.  */
7950
7951 static void
7952 set_symbol_value (bfd *bfd_with_globals,
7953                   Elf_Internal_Sym *isymbuf,
7954                   size_t locsymcount,
7955                   size_t symidx,
7956                   bfd_vma val)
7957 {
7958   struct elf_link_hash_entry **sym_hashes;
7959   struct elf_link_hash_entry *h;
7960   size_t extsymoff = locsymcount;
7961
7962   if (symidx < locsymcount)
7963     {
7964       Elf_Internal_Sym *sym;
7965
7966       sym = isymbuf + symidx;
7967       if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
7968         {
7969           /* It is a local symbol: move it to the
7970              "absolute" section and give it a value.  */
7971           sym->st_shndx = SHN_ABS;
7972           sym->st_value = val;
7973           return;
7974         }
7975       BFD_ASSERT (elf_bad_symtab (bfd_with_globals));
7976       extsymoff = 0;
7977     }
7978
7979   /* It is a global symbol: set its link type
7980      to "defined" and give it a value.  */
7981
7982   sym_hashes = elf_sym_hashes (bfd_with_globals);
7983   h = sym_hashes [symidx - extsymoff];
7984   while (h->root.type == bfd_link_hash_indirect
7985          || h->root.type == bfd_link_hash_warning)
7986     h = (struct elf_link_hash_entry *) h->root.u.i.link;
7987   h->root.type = bfd_link_hash_defined;
7988   h->root.u.def.value = val;
7989   h->root.u.def.section = bfd_abs_section_ptr;
7990 }
7991
7992 static bfd_boolean
7993 resolve_symbol (const char *name,
7994                 bfd *input_bfd,
7995                 struct elf_final_link_info *flinfo,
7996                 bfd_vma *result,
7997                 Elf_Internal_Sym *isymbuf,
7998                 size_t locsymcount)
7999 {
8000   Elf_Internal_Sym *sym;
8001   struct bfd_link_hash_entry *global_entry;
8002   const char *candidate = NULL;
8003   Elf_Internal_Shdr *symtab_hdr;
8004   size_t i;
8005
8006   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
8007
8008   for (i = 0; i < locsymcount; ++ i)
8009     {
8010       sym = isymbuf + i;
8011
8012       if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
8013         continue;
8014
8015       candidate = bfd_elf_string_from_elf_section (input_bfd,
8016                                                    symtab_hdr->sh_link,
8017                                                    sym->st_name);
8018 #ifdef DEBUG
8019       printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n",
8020               name, candidate, (unsigned long) sym->st_value);
8021 #endif
8022       if (candidate && strcmp (candidate, name) == 0)
8023         {
8024           asection *sec = flinfo->sections [i];
8025
8026           *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0);
8027           *result += sec->output_offset + sec->output_section->vma;
8028 #ifdef DEBUG
8029           printf ("Found symbol with value %8.8lx\n",
8030                   (unsigned long) *result);
8031 #endif
8032           return TRUE;
8033         }
8034     }
8035
8036   /* Hmm, haven't found it yet. perhaps it is a global.  */
8037   global_entry = bfd_link_hash_lookup (flinfo->info->hash, name,
8038                                        FALSE, FALSE, TRUE);
8039   if (!global_entry)
8040     return FALSE;
8041
8042   if (global_entry->type == bfd_link_hash_defined
8043       || global_entry->type == bfd_link_hash_defweak)
8044     {
8045       *result = (global_entry->u.def.value
8046                  + global_entry->u.def.section->output_section->vma
8047                  + global_entry->u.def.section->output_offset);
8048 #ifdef DEBUG
8049       printf ("Found GLOBAL symbol '%s' with value %8.8lx\n",
8050               global_entry->root.string, (unsigned long) *result);
8051 #endif
8052       return TRUE;
8053     }
8054
8055   return FALSE;
8056 }
8057
8058 /* Looks up NAME in SECTIONS.  If found sets RESULT to NAME's address (in
8059    bytes) and returns TRUE, otherwise returns FALSE.  Accepts pseudo-section
8060    names like "foo.end" which is the end address of section "foo".  */
8061    
8062 static bfd_boolean
8063 resolve_section (const char *name,
8064                  asection *sections,
8065                  bfd_vma *result,
8066                  bfd * abfd)
8067 {
8068   asection *curr;
8069   unsigned int len;
8070
8071   for (curr = sections; curr; curr = curr->next)
8072     if (strcmp (curr->name, name) == 0)
8073       {
8074         *result = curr->vma;
8075         return TRUE;
8076       }
8077
8078   /* Hmm. still haven't found it. try pseudo-section names.  */
8079   /* FIXME: This could be coded more efficiently...  */
8080   for (curr = sections; curr; curr = curr->next)
8081     {
8082       len = strlen (curr->name);
8083       if (len > strlen (name))
8084         continue;
8085
8086       if (strncmp (curr->name, name, len) == 0)
8087         {
8088           if (strncmp (".end", name + len, 4) == 0)
8089             {
8090               *result = curr->vma + curr->size / bfd_octets_per_byte (abfd);
8091               return TRUE;
8092             }
8093
8094           /* Insert more pseudo-section names here, if you like.  */
8095         }
8096     }
8097
8098   return FALSE;
8099 }
8100
8101 static void
8102 undefined_reference (const char *reftype, const char *name)
8103 {
8104   /* xgettext:c-format */
8105   _bfd_error_handler (_("undefined %s reference in complex symbol: %s"),
8106                       reftype, name);
8107 }
8108
8109 static bfd_boolean
8110 eval_symbol (bfd_vma *result,
8111              const char **symp,
8112              bfd *input_bfd,
8113              struct elf_final_link_info *flinfo,
8114              bfd_vma dot,
8115              Elf_Internal_Sym *isymbuf,
8116              size_t locsymcount,
8117              int signed_p)
8118 {
8119   size_t len;
8120   size_t symlen;
8121   bfd_vma a;
8122   bfd_vma b;
8123   char symbuf[4096];
8124   const char *sym = *symp;
8125   const char *symend;
8126   bfd_boolean symbol_is_section = FALSE;
8127
8128   len = strlen (sym);
8129   symend = sym + len;
8130
8131   if (len < 1 || len > sizeof (symbuf))
8132     {
8133       bfd_set_error (bfd_error_invalid_operation);
8134       return FALSE;
8135     }
8136
8137   switch (* sym)
8138     {
8139     case '.':
8140       *result = dot;
8141       *symp = sym + 1;
8142       return TRUE;
8143
8144     case '#':
8145       ++sym;
8146       *result = strtoul (sym, (char **) symp, 16);
8147       return TRUE;
8148
8149     case 'S':
8150       symbol_is_section = TRUE;
8151       /* Fall through.  */
8152     case 's':
8153       ++sym;
8154       symlen = strtol (sym, (char **) symp, 10);
8155       sym = *symp + 1; /* Skip the trailing ':'.  */
8156
8157       if (symend < sym || symlen + 1 > sizeof (symbuf))
8158         {
8159           bfd_set_error (bfd_error_invalid_operation);
8160           return FALSE;
8161         }
8162
8163       memcpy (symbuf, sym, symlen);
8164       symbuf[symlen] = '\0';
8165       *symp = sym + symlen;
8166
8167       /* Is it always possible, with complex symbols, that gas "mis-guessed"
8168          the symbol as a section, or vice-versa. so we're pretty liberal in our
8169          interpretation here; section means "try section first", not "must be a
8170          section", and likewise with symbol.  */
8171
8172       if (symbol_is_section)
8173         {
8174           if (!resolve_section (symbuf, flinfo->output_bfd->sections, result, input_bfd)
8175               && !resolve_symbol (symbuf, input_bfd, flinfo, result,
8176                                   isymbuf, locsymcount))
8177             {
8178               undefined_reference ("section", symbuf);
8179               return FALSE;
8180             }
8181         }
8182       else
8183         {
8184           if (!resolve_symbol (symbuf, input_bfd, flinfo, result,
8185                                isymbuf, locsymcount)
8186               && !resolve_section (symbuf, flinfo->output_bfd->sections,
8187                                    result, input_bfd))
8188             {
8189               undefined_reference ("symbol", symbuf);
8190               return FALSE;
8191             }
8192         }
8193
8194       return TRUE;
8195
8196       /* All that remains are operators.  */
8197
8198 #define UNARY_OP(op)                                            \
8199   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
8200     {                                                           \
8201       sym += strlen (#op);                                      \
8202       if (*sym == ':')                                          \
8203         ++sym;                                                  \
8204       *symp = sym;                                              \
8205       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,       \
8206                         isymbuf, locsymcount, signed_p))        \
8207         return FALSE;                                           \
8208       if (signed_p)                                             \
8209         *result = op ((bfd_signed_vma) a);                      \
8210       else                                                      \
8211         *result = op a;                                         \
8212       return TRUE;                                              \
8213     }
8214
8215 #define BINARY_OP(op)                                           \
8216   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
8217     {                                                           \
8218       sym += strlen (#op);                                      \
8219       if (*sym == ':')                                          \
8220         ++sym;                                                  \
8221       *symp = sym;                                              \
8222       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,       \
8223                         isymbuf, locsymcount, signed_p))        \
8224         return FALSE;                                           \
8225       ++*symp;                                                  \
8226       if (!eval_symbol (&b, symp, input_bfd, flinfo, dot,       \
8227                         isymbuf, locsymcount, signed_p))        \
8228         return FALSE;                                           \
8229       if (signed_p)                                             \
8230         *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \
8231       else                                                      \
8232         *result = a op b;                                       \
8233       return TRUE;                                              \
8234     }
8235
8236     default:
8237       UNARY_OP  (0-);
8238       BINARY_OP (<<);
8239       BINARY_OP (>>);
8240       BINARY_OP (==);
8241       BINARY_OP (!=);
8242       BINARY_OP (<=);
8243       BINARY_OP (>=);
8244       BINARY_OP (&&);
8245       BINARY_OP (||);
8246       UNARY_OP  (~);
8247       UNARY_OP  (!);
8248       BINARY_OP (*);
8249       BINARY_OP (/);
8250       BINARY_OP (%);
8251       BINARY_OP (^);
8252       BINARY_OP (|);
8253       BINARY_OP (&);
8254       BINARY_OP (+);
8255       BINARY_OP (-);
8256       BINARY_OP (<);
8257       BINARY_OP (>);
8258 #undef UNARY_OP
8259 #undef BINARY_OP
8260       _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
8261       bfd_set_error (bfd_error_invalid_operation);
8262       return FALSE;
8263     }
8264 }
8265
8266 static void
8267 put_value (bfd_vma size,
8268            unsigned long chunksz,
8269            bfd *input_bfd,
8270            bfd_vma x,
8271            bfd_byte *location)
8272 {
8273   location += (size - chunksz);
8274
8275   for (; size; size -= chunksz, location -= chunksz)
8276     {
8277       switch (chunksz)
8278         {
8279         case 1:
8280           bfd_put_8 (input_bfd, x, location);
8281           x >>= 8;
8282           break;
8283         case 2:
8284           bfd_put_16 (input_bfd, x, location);
8285           x >>= 16;
8286           break;
8287         case 4:
8288           bfd_put_32 (input_bfd, x, location);
8289           /* Computed this way because x >>= 32 is undefined if x is a 32-bit value.  */
8290           x >>= 16;
8291           x >>= 16;
8292           break;
8293 #ifdef BFD64
8294         case 8:
8295           bfd_put_64 (input_bfd, x, location);
8296           /* Computed this way because x >>= 64 is undefined if x is a 64-bit value.  */
8297           x >>= 32;
8298           x >>= 32;
8299           break;
8300 #endif
8301         default:
8302           abort ();
8303           break;
8304         }
8305     }
8306 }
8307
8308 static bfd_vma
8309 get_value (bfd_vma size,
8310            unsigned long chunksz,
8311            bfd *input_bfd,
8312            bfd_byte *location)
8313 {
8314   int shift;
8315   bfd_vma x = 0;
8316
8317   /* Sanity checks.  */
8318   BFD_ASSERT (chunksz <= sizeof (x)
8319               && size >= chunksz
8320               && chunksz != 0
8321               && (size % chunksz) == 0
8322               && input_bfd != NULL
8323               && location != NULL);
8324
8325   if (chunksz == sizeof (x))
8326     {
8327       BFD_ASSERT (size == chunksz);
8328
8329       /* Make sure that we do not perform an undefined shift operation.
8330          We know that size == chunksz so there will only be one iteration
8331          of the loop below.  */
8332       shift = 0;
8333     }
8334   else
8335     shift = 8 * chunksz;
8336
8337   for (; size; size -= chunksz, location += chunksz)
8338     {
8339       switch (chunksz)
8340         {
8341         case 1:
8342           x = (x << shift) | bfd_get_8 (input_bfd, location);
8343           break;
8344         case 2:
8345           x = (x << shift) | bfd_get_16 (input_bfd, location);
8346           break;
8347         case 4:
8348           x = (x << shift) | bfd_get_32 (input_bfd, location);
8349           break;
8350 #ifdef BFD64
8351         case 8:
8352           x = (x << shift) | bfd_get_64 (input_bfd, location);
8353           break;
8354 #endif
8355         default:
8356           abort ();
8357         }
8358     }
8359   return x;
8360 }
8361
8362 static void
8363 decode_complex_addend (unsigned long *start,   /* in bits */
8364                        unsigned long *oplen,   /* in bits */
8365                        unsigned long *len,     /* in bits */
8366                        unsigned long *wordsz,  /* in bytes */
8367                        unsigned long *chunksz, /* in bytes */
8368                        unsigned long *lsb0_p,
8369                        unsigned long *signed_p,
8370                        unsigned long *trunc_p,
8371                        unsigned long encoded)
8372 {
8373   * start     =  encoded        & 0x3F;
8374   * len       = (encoded >>  6) & 0x3F;
8375   * oplen     = (encoded >> 12) & 0x3F;
8376   * wordsz    = (encoded >> 18) & 0xF;
8377   * chunksz   = (encoded >> 22) & 0xF;
8378   * lsb0_p    = (encoded >> 27) & 1;
8379   * signed_p  = (encoded >> 28) & 1;
8380   * trunc_p   = (encoded >> 29) & 1;
8381 }
8382
8383 bfd_reloc_status_type
8384 bfd_elf_perform_complex_relocation (bfd *input_bfd,
8385                                     asection *input_section ATTRIBUTE_UNUSED,
8386                                     bfd_byte *contents,
8387                                     Elf_Internal_Rela *rel,
8388                                     bfd_vma relocation)
8389 {
8390   bfd_vma shift, x, mask;
8391   unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p;
8392   bfd_reloc_status_type r;
8393
8394   /*  Perform this reloc, since it is complex.
8395       (this is not to say that it necessarily refers to a complex
8396       symbol; merely that it is a self-describing CGEN based reloc.
8397       i.e. the addend has the complete reloc information (bit start, end,
8398       word size, etc) encoded within it.).  */
8399
8400   decode_complex_addend (&start, &oplen, &len, &wordsz,
8401                          &chunksz, &lsb0_p, &signed_p,
8402                          &trunc_p, rel->r_addend);
8403
8404   mask = (((1L << (len - 1)) - 1) << 1) | 1;
8405
8406   if (lsb0_p)
8407     shift = (start + 1) - len;
8408   else
8409     shift = (8 * wordsz) - (start + len);
8410
8411   x = get_value (wordsz, chunksz, input_bfd,
8412                  contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
8413
8414 #ifdef DEBUG
8415   printf ("Doing complex reloc: "
8416           "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
8417           "chunksz %ld, start %ld, len %ld, oplen %ld\n"
8418           "    dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
8419           lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
8420           oplen, (unsigned long) x, (unsigned long) mask,
8421           (unsigned long) relocation);
8422 #endif
8423
8424   r = bfd_reloc_ok;
8425   if (! trunc_p)
8426     /* Now do an overflow check.  */
8427     r = bfd_check_overflow ((signed_p
8428                              ? complain_overflow_signed
8429                              : complain_overflow_unsigned),
8430                             len, 0, (8 * wordsz),
8431                             relocation);
8432
8433   /* Do the deed.  */
8434   x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
8435
8436 #ifdef DEBUG
8437   printf ("           relocation: %8.8lx\n"
8438           "         shifted mask: %8.8lx\n"
8439           " shifted/masked reloc: %8.8lx\n"
8440           "               result: %8.8lx\n",
8441           (unsigned long) relocation, (unsigned long) (mask << shift),
8442           (unsigned long) ((relocation & mask) << shift), (unsigned long) x);
8443 #endif
8444   put_value (wordsz, chunksz, input_bfd, x,
8445              contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
8446   return r;
8447 }
8448
8449 /* Functions to read r_offset from external (target order) reloc
8450    entry.  Faster than bfd_getl32 et al, because we let the compiler
8451    know the value is aligned.  */
8452
8453 static bfd_vma
8454 ext32l_r_offset (const void *p)
8455 {
8456   union aligned32
8457   {
8458     uint32_t v;
8459     unsigned char c[4];
8460   };
8461   const union aligned32 *a
8462     = (const union aligned32 *) &((const Elf32_External_Rel *) p)->r_offset;
8463
8464   uint32_t aval = (  (uint32_t) a->c[0]
8465                    | (uint32_t) a->c[1] << 8
8466                    | (uint32_t) a->c[2] << 16
8467                    | (uint32_t) a->c[3] << 24);
8468   return aval;
8469 }
8470
8471 static bfd_vma
8472 ext32b_r_offset (const void *p)
8473 {
8474   union aligned32
8475   {
8476     uint32_t v;
8477     unsigned char c[4];
8478   };
8479   const union aligned32 *a
8480     = (const union aligned32 *) &((const Elf32_External_Rel *) p)->r_offset;
8481
8482   uint32_t aval = (  (uint32_t) a->c[0] << 24
8483                    | (uint32_t) a->c[1] << 16
8484                    | (uint32_t) a->c[2] << 8
8485                    | (uint32_t) a->c[3]);
8486   return aval;
8487 }
8488
8489 #ifdef BFD_HOST_64_BIT
8490 static bfd_vma
8491 ext64l_r_offset (const void *p)
8492 {
8493   union aligned64
8494   {
8495     uint64_t v;
8496     unsigned char c[8];
8497   };
8498   const union aligned64 *a
8499     = (const union aligned64 *) &((const Elf64_External_Rel *) p)->r_offset;
8500
8501   uint64_t aval = (  (uint64_t) a->c[0]
8502                    | (uint64_t) a->c[1] << 8
8503                    | (uint64_t) a->c[2] << 16
8504                    | (uint64_t) a->c[3] << 24
8505                    | (uint64_t) a->c[4] << 32
8506                    | (uint64_t) a->c[5] << 40
8507                    | (uint64_t) a->c[6] << 48
8508                    | (uint64_t) a->c[7] << 56);
8509   return aval;
8510 }
8511
8512 static bfd_vma
8513 ext64b_r_offset (const void *p)
8514 {
8515   union aligned64
8516   {
8517     uint64_t v;
8518     unsigned char c[8];
8519   };
8520   const union aligned64 *a
8521     = (const union aligned64 *) &((const Elf64_External_Rel *) p)->r_offset;
8522
8523   uint64_t aval = (  (uint64_t) a->c[0] << 56
8524                    | (uint64_t) a->c[1] << 48
8525                    | (uint64_t) a->c[2] << 40
8526                    | (uint64_t) a->c[3] << 32
8527                    | (uint64_t) a->c[4] << 24
8528                    | (uint64_t) a->c[5] << 16
8529                    | (uint64_t) a->c[6] << 8
8530                    | (uint64_t) a->c[7]);
8531   return aval;
8532 }
8533 #endif
8534
8535 /* When performing a relocatable link, the input relocations are
8536    preserved.  But, if they reference global symbols, the indices
8537    referenced must be updated.  Update all the relocations found in
8538    RELDATA.  */
8539
8540 static bfd_boolean
8541 elf_link_adjust_relocs (bfd *abfd,
8542                         asection *sec,
8543                         struct bfd_elf_section_reloc_data *reldata,
8544                         bfd_boolean sort)
8545 {
8546   unsigned int i;
8547   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8548   bfd_byte *erela;
8549   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8550   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8551   bfd_vma r_type_mask;
8552   int r_sym_shift;
8553   unsigned int count = reldata->count;
8554   struct elf_link_hash_entry **rel_hash = reldata->hashes;
8555
8556   if (reldata->hdr->sh_entsize == bed->s->sizeof_rel)
8557     {
8558       swap_in = bed->s->swap_reloc_in;
8559       swap_out = bed->s->swap_reloc_out;
8560     }
8561   else if (reldata->hdr->sh_entsize == bed->s->sizeof_rela)
8562     {
8563       swap_in = bed->s->swap_reloca_in;
8564       swap_out = bed->s->swap_reloca_out;
8565     }
8566   else
8567     abort ();
8568
8569   if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
8570     abort ();
8571
8572   if (bed->s->arch_size == 32)
8573     {
8574       r_type_mask = 0xff;
8575       r_sym_shift = 8;
8576     }
8577   else
8578     {
8579       r_type_mask = 0xffffffff;
8580       r_sym_shift = 32;
8581     }
8582
8583   erela = reldata->hdr->contents;
8584   for (i = 0; i < count; i++, rel_hash++, erela += reldata->hdr->sh_entsize)
8585     {
8586       Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
8587       unsigned int j;
8588
8589       if (*rel_hash == NULL)
8590         continue;
8591
8592       BFD_ASSERT ((*rel_hash)->indx >= 0);
8593
8594       (*swap_in) (abfd, erela, irela);
8595       for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
8596         irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
8597                            | (irela[j].r_info & r_type_mask));
8598       (*swap_out) (abfd, irela, erela);
8599     }
8600
8601   if (bed->elf_backend_update_relocs)
8602     (*bed->elf_backend_update_relocs) (sec, reldata);
8603
8604   if (sort && count != 0)
8605     {
8606       bfd_vma (*ext_r_off) (const void *);
8607       bfd_vma r_off;
8608       size_t elt_size;
8609       bfd_byte *base, *end, *p, *loc;
8610       bfd_byte *buf = NULL;
8611
8612       if (bed->s->arch_size == 32)
8613         {
8614           if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8615             ext_r_off = ext32l_r_offset;
8616           else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8617             ext_r_off = ext32b_r_offset;
8618           else
8619             abort ();
8620         }
8621       else
8622         {
8623 #ifdef BFD_HOST_64_BIT
8624           if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8625             ext_r_off = ext64l_r_offset;
8626           else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8627             ext_r_off = ext64b_r_offset;
8628           else
8629 #endif
8630             abort ();
8631         }
8632
8633       /*  Must use a stable sort here.  A modified insertion sort,
8634           since the relocs are mostly sorted already.  */
8635       elt_size = reldata->hdr->sh_entsize;
8636       base = reldata->hdr->contents;
8637       end = base + count * elt_size;
8638       if (elt_size > sizeof (Elf64_External_Rela))
8639         abort ();
8640
8641       /* Ensure the first element is lowest.  This acts as a sentinel,
8642          speeding the main loop below.  */
8643       r_off = (*ext_r_off) (base);
8644       for (p = loc = base; (p += elt_size) < end; )
8645         {
8646           bfd_vma r_off2 = (*ext_r_off) (p);
8647           if (r_off > r_off2)
8648             {
8649               r_off = r_off2;
8650               loc = p;
8651             }
8652         }
8653       if (loc != base)
8654         {
8655           /* Don't just swap *base and *loc as that changes the order
8656              of the original base[0] and base[1] if they happen to
8657              have the same r_offset.  */
8658           bfd_byte onebuf[sizeof (Elf64_External_Rela)];
8659           memcpy (onebuf, loc, elt_size);
8660           memmove (base + elt_size, base, loc - base);
8661           memcpy (base, onebuf, elt_size);
8662         }
8663
8664       for (p = base + elt_size; (p += elt_size) < end; )
8665         {
8666           /* base to p is sorted, *p is next to insert.  */
8667           r_off = (*ext_r_off) (p);
8668           /* Search the sorted region for location to insert.  */
8669           loc = p - elt_size;
8670           while (r_off < (*ext_r_off) (loc))
8671             loc -= elt_size;
8672           loc += elt_size;
8673           if (loc != p)
8674             {
8675               /* Chances are there is a run of relocs to insert here,
8676                  from one of more input files.  Files are not always
8677                  linked in order due to the way elf_link_input_bfd is
8678                  called.  See pr17666.  */
8679               size_t sortlen = p - loc;
8680               bfd_vma r_off2 = (*ext_r_off) (loc);
8681               size_t runlen = elt_size;
8682               size_t buf_size = 96 * 1024;
8683               while (p + runlen < end
8684                      && (sortlen <= buf_size
8685                          || runlen + elt_size <= buf_size)
8686                      && r_off2 > (*ext_r_off) (p + runlen))
8687                 runlen += elt_size;
8688               if (buf == NULL)
8689                 {
8690                   buf = bfd_malloc (buf_size);
8691                   if (buf == NULL)
8692                     return FALSE;
8693                 }
8694               if (runlen < sortlen)
8695                 {
8696                   memcpy (buf, p, runlen);
8697                   memmove (loc + runlen, loc, sortlen);
8698                   memcpy (loc, buf, runlen);
8699                 }
8700               else
8701                 {
8702                   memcpy (buf, loc, sortlen);
8703                   memmove (loc, p, runlen);
8704                   memcpy (loc + runlen, buf, sortlen);
8705                 }
8706               p += runlen - elt_size;
8707             }
8708         }
8709       /* Hashes are no longer valid.  */
8710       free (reldata->hashes);
8711       reldata->hashes = NULL;
8712       free (buf);
8713     }
8714   return TRUE;
8715 }
8716
8717 struct elf_link_sort_rela
8718 {
8719   union {
8720     bfd_vma offset;
8721     bfd_vma sym_mask;
8722   } u;
8723   enum elf_reloc_type_class type;
8724   /* We use this as an array of size int_rels_per_ext_rel.  */
8725   Elf_Internal_Rela rela[1];
8726 };
8727
8728 static int
8729 elf_link_sort_cmp1 (const void *A, const void *B)
8730 {
8731   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8732   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8733   int relativea, relativeb;
8734
8735   relativea = a->type == reloc_class_relative;
8736   relativeb = b->type == reloc_class_relative;
8737
8738   if (relativea < relativeb)
8739     return 1;
8740   if (relativea > relativeb)
8741     return -1;
8742   if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
8743     return -1;
8744   if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
8745     return 1;
8746   if (a->rela->r_offset < b->rela->r_offset)
8747     return -1;
8748   if (a->rela->r_offset > b->rela->r_offset)
8749     return 1;
8750   return 0;
8751 }
8752
8753 static int
8754 elf_link_sort_cmp2 (const void *A, const void *B)
8755 {
8756   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8757   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8758
8759   if (a->type < b->type)
8760     return -1;
8761   if (a->type > b->type)
8762     return 1;
8763   if (a->u.offset < b->u.offset)
8764     return -1;
8765   if (a->u.offset > b->u.offset)
8766     return 1;
8767   if (a->rela->r_offset < b->rela->r_offset)
8768     return -1;
8769   if (a->rela->r_offset > b->rela->r_offset)
8770     return 1;
8771   return 0;
8772 }
8773
8774 static size_t
8775 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
8776 {
8777   asection *dynamic_relocs;
8778   asection *rela_dyn;
8779   asection *rel_dyn;
8780   bfd_size_type count, size;
8781   size_t i, ret, sort_elt, ext_size;
8782   bfd_byte *sort, *s_non_relative, *p;
8783   struct elf_link_sort_rela *sq;
8784   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8785   int i2e = bed->s->int_rels_per_ext_rel;
8786   unsigned int opb = bfd_octets_per_byte (abfd);
8787   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8788   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8789   struct bfd_link_order *lo;
8790   bfd_vma r_sym_mask;
8791   bfd_boolean use_rela;
8792
8793   /* Find a dynamic reloc section.  */
8794   rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
8795   rel_dyn  = bfd_get_section_by_name (abfd, ".rel.dyn");
8796   if (rela_dyn != NULL && rela_dyn->size > 0
8797       && rel_dyn != NULL && rel_dyn->size > 0)
8798     {
8799       bfd_boolean use_rela_initialised = FALSE;
8800
8801       /* This is just here to stop gcc from complaining.
8802          Its initialization checking code is not perfect.  */
8803       use_rela = TRUE;
8804
8805       /* Both sections are present.  Examine the sizes
8806          of the indirect sections to help us choose.  */
8807       for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8808         if (lo->type == bfd_indirect_link_order)
8809           {
8810             asection *o = lo->u.indirect.section;
8811
8812             if ((o->size % bed->s->sizeof_rela) == 0)
8813               {
8814                 if ((o->size % bed->s->sizeof_rel) == 0)
8815                   /* Section size is divisible by both rel and rela sizes.
8816                      It is of no help to us.  */
8817                   ;
8818                 else
8819                   {
8820                     /* Section size is only divisible by rela.  */
8821                     if (use_rela_initialised && (use_rela == FALSE))
8822                       {
8823                         _bfd_error_handler (_("%B: Unable to sort relocs - "
8824                                               "they are in more than one size"),
8825                                             abfd);
8826                         bfd_set_error (bfd_error_invalid_operation);
8827                         return 0;
8828                       }
8829                     else
8830                       {
8831                         use_rela = TRUE;
8832                         use_rela_initialised = TRUE;
8833                       }
8834                   }
8835               }
8836             else if ((o->size % bed->s->sizeof_rel) == 0)
8837               {
8838                 /* Section size is only divisible by rel.  */
8839                 if (use_rela_initialised && (use_rela == TRUE))
8840                   {
8841                     _bfd_error_handler (_("%B: Unable to sort relocs - "
8842                                           "they are in more than one size"),
8843                                         abfd);
8844                     bfd_set_error (bfd_error_invalid_operation);
8845                     return 0;
8846                   }
8847                 else
8848                   {
8849                     use_rela = FALSE;
8850                     use_rela_initialised = TRUE;
8851                   }
8852               }
8853             else
8854               {
8855                 /* The section size is not divisible by either -
8856                    something is wrong.  */
8857                 _bfd_error_handler (_("%B: Unable to sort relocs - "
8858                                       "they are of an unknown size"), abfd);
8859                 bfd_set_error (bfd_error_invalid_operation);
8860                 return 0;
8861               }
8862           }
8863
8864       for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8865         if (lo->type == bfd_indirect_link_order)
8866           {
8867             asection *o = lo->u.indirect.section;
8868
8869             if ((o->size % bed->s->sizeof_rela) == 0)
8870               {
8871                 if ((o->size % bed->s->sizeof_rel) == 0)
8872                   /* Section size is divisible by both rel and rela sizes.
8873                      It is of no help to us.  */
8874                   ;
8875                 else
8876                   {
8877                     /* Section size is only divisible by rela.  */
8878                     if (use_rela_initialised && (use_rela == FALSE))
8879                       {
8880                         _bfd_error_handler (_("%B: Unable to sort relocs - "
8881                                               "they are in more than one size"),
8882                                             abfd);
8883                         bfd_set_error (bfd_error_invalid_operation);
8884                         return 0;
8885                       }
8886                     else
8887                       {
8888                         use_rela = TRUE;
8889                         use_rela_initialised = TRUE;
8890                       }
8891                   }
8892               }
8893             else if ((o->size % bed->s->sizeof_rel) == 0)
8894               {
8895                 /* Section size is only divisible by rel.  */
8896                 if (use_rela_initialised && (use_rela == TRUE))
8897                   {
8898                     _bfd_error_handler (_("%B: Unable to sort relocs - "
8899                                           "they are in more than one size"),
8900                                         abfd);
8901                     bfd_set_error (bfd_error_invalid_operation);
8902                     return 0;
8903                   }
8904                 else
8905                   {
8906                     use_rela = FALSE;
8907                     use_rela_initialised = TRUE;
8908                   }
8909               }
8910             else
8911               {
8912                 /* The section size is not divisible by either -
8913                    something is wrong.  */
8914                 _bfd_error_handler (_("%B: Unable to sort relocs - "
8915                                       "they are of an unknown size"), abfd);
8916                 bfd_set_error (bfd_error_invalid_operation);
8917                 return 0;
8918               }
8919           }
8920
8921       if (! use_rela_initialised)
8922         /* Make a guess.  */
8923         use_rela = TRUE;
8924     }
8925   else if (rela_dyn != NULL && rela_dyn->size > 0)
8926     use_rela = TRUE;
8927   else if (rel_dyn != NULL && rel_dyn->size > 0)
8928     use_rela = FALSE;
8929   else
8930     return 0;
8931
8932   if (use_rela)
8933     {
8934       dynamic_relocs = rela_dyn;
8935       ext_size = bed->s->sizeof_rela;
8936       swap_in = bed->s->swap_reloca_in;
8937       swap_out = bed->s->swap_reloca_out;
8938     }
8939   else
8940     {
8941       dynamic_relocs = rel_dyn;
8942       ext_size = bed->s->sizeof_rel;
8943       swap_in = bed->s->swap_reloc_in;
8944       swap_out = bed->s->swap_reloc_out;
8945     }
8946
8947   size = 0;
8948   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8949     if (lo->type == bfd_indirect_link_order)
8950       size += lo->u.indirect.section->size;
8951
8952   if (size != dynamic_relocs->size)
8953     return 0;
8954
8955   sort_elt = (sizeof (struct elf_link_sort_rela)
8956               + (i2e - 1) * sizeof (Elf_Internal_Rela));
8957
8958   count = dynamic_relocs->size / ext_size;
8959   if (count == 0)
8960     return 0;
8961   sort = (bfd_byte *) bfd_zmalloc (sort_elt * count);
8962
8963   if (sort == NULL)
8964     {
8965       (*info->callbacks->warning)
8966         (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
8967       return 0;
8968     }
8969
8970   if (bed->s->arch_size == 32)
8971     r_sym_mask = ~(bfd_vma) 0xff;
8972   else
8973     r_sym_mask = ~(bfd_vma) 0xffffffff;
8974
8975   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8976     if (lo->type == bfd_indirect_link_order)
8977       {
8978         bfd_byte *erel, *erelend;
8979         asection *o = lo->u.indirect.section;
8980
8981         if (o->contents == NULL && o->size != 0)
8982           {
8983             /* This is a reloc section that is being handled as a normal
8984                section.  See bfd_section_from_shdr.  We can't combine
8985                relocs in this case.  */
8986             free (sort);
8987             return 0;
8988           }
8989         erel = o->contents;
8990         erelend = o->contents + o->size;
8991         p = sort + o->output_offset * opb / ext_size * sort_elt;
8992
8993         while (erel < erelend)
8994           {
8995             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8996
8997             (*swap_in) (abfd, erel, s->rela);
8998             s->type = (*bed->elf_backend_reloc_type_class) (info, o, s->rela);
8999             s->u.sym_mask = r_sym_mask;
9000             p += sort_elt;
9001             erel += ext_size;
9002           }
9003       }
9004
9005   qsort (sort, count, sort_elt, elf_link_sort_cmp1);
9006
9007   for (i = 0, p = sort; i < count; i++, p += sort_elt)
9008     {
9009       struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
9010       if (s->type != reloc_class_relative)
9011         break;
9012     }
9013   ret = i;
9014   s_non_relative = p;
9015
9016   sq = (struct elf_link_sort_rela *) s_non_relative;
9017   for (; i < count; i++, p += sort_elt)
9018     {
9019       struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
9020       if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
9021         sq = sp;
9022       sp->u.offset = sq->rela->r_offset;
9023     }
9024
9025   qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
9026
9027   struct elf_link_hash_table *htab = elf_hash_table (info);
9028   if (htab->srelplt && htab->srelplt->output_section == dynamic_relocs)
9029     {
9030       /* We have plt relocs in .rela.dyn.  */
9031       sq = (struct elf_link_sort_rela *) sort;
9032       for (i = 0; i < count; i++)
9033         if (sq[count - i - 1].type != reloc_class_plt)
9034           break;
9035       if (i != 0 && htab->srelplt->size == i * ext_size)
9036         {
9037           struct bfd_link_order **plo;
9038           /* Put srelplt link_order last.  This is so the output_offset
9039              set in the next loop is correct for DT_JMPREL.  */
9040           for (plo = &dynamic_relocs->map_head.link_order; *plo != NULL; )
9041             if ((*plo)->type == bfd_indirect_link_order
9042                 && (*plo)->u.indirect.section == htab->srelplt)
9043               {
9044                 lo = *plo;
9045                 *plo = lo->next;
9046               }
9047             else
9048               plo = &(*plo)->next;
9049           *plo = lo;
9050           lo->next = NULL;
9051           dynamic_relocs->map_tail.link_order = lo;
9052         }
9053     }
9054
9055   p = sort;
9056   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
9057     if (lo->type == bfd_indirect_link_order)
9058       {
9059         bfd_byte *erel, *erelend;
9060         asection *o = lo->u.indirect.section;
9061
9062         erel = o->contents;
9063         erelend = o->contents + o->size;
9064         o->output_offset = (p - sort) / sort_elt * ext_size / opb;
9065         while (erel < erelend)
9066           {
9067             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
9068             (*swap_out) (abfd, s->rela, erel);
9069             p += sort_elt;
9070             erel += ext_size;
9071           }
9072       }
9073
9074   free (sort);
9075   *psec = dynamic_relocs;
9076   return ret;
9077 }
9078
9079 /* Add a symbol to the output symbol string table.  */
9080
9081 static int
9082 elf_link_output_symstrtab (struct elf_final_link_info *flinfo,
9083                            const char *name,
9084                            Elf_Internal_Sym *elfsym,
9085                            asection *input_sec,
9086                            struct elf_link_hash_entry *h)
9087 {
9088   int (*output_symbol_hook)
9089     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
9090      struct elf_link_hash_entry *);
9091   struct elf_link_hash_table *hash_table;
9092   const struct elf_backend_data *bed;
9093   bfd_size_type strtabsize;
9094
9095   BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
9096
9097   bed = get_elf_backend_data (flinfo->output_bfd);
9098   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
9099   if (output_symbol_hook != NULL)
9100     {
9101       int ret = (*output_symbol_hook) (flinfo->info, name, elfsym, input_sec, h);
9102       if (ret != 1)
9103         return ret;
9104     }
9105
9106   if (name == NULL
9107       || *name == '\0'
9108       || (input_sec->flags & SEC_EXCLUDE))
9109     elfsym->st_name = (unsigned long) -1;
9110   else
9111     {
9112       /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
9113          to get the final offset for st_name.  */
9114       elfsym->st_name
9115         = (unsigned long) _bfd_elf_strtab_add (flinfo->symstrtab,
9116                                                name, FALSE);
9117       if (elfsym->st_name == (unsigned long) -1)
9118         return 0;
9119     }
9120
9121   hash_table = elf_hash_table (flinfo->info);
9122   strtabsize = hash_table->strtabsize;
9123   if (strtabsize <= hash_table->strtabcount)
9124     {
9125       strtabsize += strtabsize;
9126       hash_table->strtabsize = strtabsize;
9127       strtabsize *= sizeof (*hash_table->strtab);
9128       hash_table->strtab
9129         = (struct elf_sym_strtab *) bfd_realloc (hash_table->strtab,
9130                                                  strtabsize);
9131       if (hash_table->strtab == NULL)
9132         return 0;
9133     }
9134   hash_table->strtab[hash_table->strtabcount].sym = *elfsym;
9135   hash_table->strtab[hash_table->strtabcount].dest_index
9136     = hash_table->strtabcount;
9137   hash_table->strtab[hash_table->strtabcount].destshndx_index
9138     = flinfo->symshndxbuf ? bfd_get_symcount (flinfo->output_bfd) : 0;
9139
9140   bfd_get_symcount (flinfo->output_bfd) += 1;
9141   hash_table->strtabcount += 1;
9142
9143   return 1;
9144 }
9145
9146 /* Swap symbols out to the symbol table and flush the output symbols to
9147    the file.  */
9148
9149 static bfd_boolean
9150 elf_link_swap_symbols_out (struct elf_final_link_info *flinfo)
9151 {
9152   struct elf_link_hash_table *hash_table = elf_hash_table (flinfo->info);
9153   bfd_size_type amt;
9154   size_t i;
9155   const struct elf_backend_data *bed;
9156   bfd_byte *symbuf;
9157   Elf_Internal_Shdr *hdr;
9158   file_ptr pos;
9159   bfd_boolean ret;
9160
9161   if (!hash_table->strtabcount)
9162     return TRUE;
9163
9164   BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
9165
9166   bed = get_elf_backend_data (flinfo->output_bfd);
9167
9168   amt = bed->s->sizeof_sym * hash_table->strtabcount;
9169   symbuf = (bfd_byte *) bfd_malloc (amt);
9170   if (symbuf == NULL)
9171     return FALSE;
9172
9173   if (flinfo->symshndxbuf)
9174     {
9175       amt = sizeof (Elf_External_Sym_Shndx);
9176       amt *= bfd_get_symcount (flinfo->output_bfd);
9177       flinfo->symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
9178       if (flinfo->symshndxbuf == NULL)
9179         {
9180           free (symbuf);
9181           return FALSE;
9182         }
9183     }
9184
9185   for (i = 0; i < hash_table->strtabcount; i++)
9186     {
9187       struct elf_sym_strtab *elfsym = &hash_table->strtab[i];
9188       if (elfsym->sym.st_name == (unsigned long) -1)
9189         elfsym->sym.st_name = 0;
9190       else
9191         elfsym->sym.st_name
9192           = (unsigned long) _bfd_elf_strtab_offset (flinfo->symstrtab,
9193                                                     elfsym->sym.st_name);
9194       bed->s->swap_symbol_out (flinfo->output_bfd, &elfsym->sym,
9195                                ((bfd_byte *) symbuf
9196                                 + (elfsym->dest_index
9197                                    * bed->s->sizeof_sym)),
9198                                (flinfo->symshndxbuf
9199                                 + elfsym->destshndx_index));
9200     }
9201
9202   hdr = &elf_tdata (flinfo->output_bfd)->symtab_hdr;
9203   pos = hdr->sh_offset + hdr->sh_size;
9204   amt = hash_table->strtabcount * bed->s->sizeof_sym;
9205   if (bfd_seek (flinfo->output_bfd, pos, SEEK_SET) == 0
9206       && bfd_bwrite (symbuf, amt, flinfo->output_bfd) == amt)
9207     {
9208       hdr->sh_size += amt;
9209       ret = TRUE;
9210     }
9211   else
9212     ret = FALSE;
9213
9214   free (symbuf);
9215
9216   free (hash_table->strtab);
9217   hash_table->strtab = NULL;
9218
9219   return ret;
9220 }
9221
9222 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
9223
9224 static bfd_boolean
9225 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
9226 {
9227   if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
9228       && sym->st_shndx < SHN_LORESERVE)
9229     {
9230       /* The gABI doesn't support dynamic symbols in output sections
9231          beyond 64k.  */
9232       _bfd_error_handler
9233         /* xgettext:c-format */
9234         (_("%B: Too many sections: %d (>= %d)"),
9235          abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
9236       bfd_set_error (bfd_error_nonrepresentable_section);
9237       return FALSE;
9238     }
9239   return TRUE;
9240 }
9241
9242 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
9243    allowing an unsatisfied unversioned symbol in the DSO to match a
9244    versioned symbol that would normally require an explicit version.
9245    We also handle the case that a DSO references a hidden symbol
9246    which may be satisfied by a versioned symbol in another DSO.  */
9247
9248 static bfd_boolean
9249 elf_link_check_versioned_symbol (struct bfd_link_info *info,
9250                                  const struct elf_backend_data *bed,
9251                                  struct elf_link_hash_entry *h)
9252 {
9253   bfd *abfd;
9254   struct elf_link_loaded_list *loaded;
9255
9256   if (!is_elf_hash_table (info->hash))
9257     return FALSE;
9258
9259   /* Check indirect symbol.  */
9260   while (h->root.type == bfd_link_hash_indirect)
9261     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9262
9263   switch (h->root.type)
9264     {
9265     default:
9266       abfd = NULL;
9267       break;
9268
9269     case bfd_link_hash_undefined:
9270     case bfd_link_hash_undefweak:
9271       abfd = h->root.u.undef.abfd;
9272       if (abfd == NULL
9273           || (abfd->flags & DYNAMIC) == 0
9274           || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
9275         return FALSE;
9276       break;
9277
9278     case bfd_link_hash_defined:
9279     case bfd_link_hash_defweak:
9280       abfd = h->root.u.def.section->owner;
9281       break;
9282
9283     case bfd_link_hash_common:
9284       abfd = h->root.u.c.p->section->owner;
9285       break;
9286     }
9287   BFD_ASSERT (abfd != NULL);
9288
9289   for (loaded = elf_hash_table (info)->loaded;
9290        loaded != NULL;
9291        loaded = loaded->next)
9292     {
9293       bfd *input;
9294       Elf_Internal_Shdr *hdr;
9295       size_t symcount;
9296       size_t extsymcount;
9297       size_t extsymoff;
9298       Elf_Internal_Shdr *versymhdr;
9299       Elf_Internal_Sym *isym;
9300       Elf_Internal_Sym *isymend;
9301       Elf_Internal_Sym *isymbuf;
9302       Elf_External_Versym *ever;
9303       Elf_External_Versym *extversym;
9304
9305       input = loaded->abfd;
9306
9307       /* We check each DSO for a possible hidden versioned definition.  */
9308       if (input == abfd
9309           || (input->flags & DYNAMIC) == 0
9310           || elf_dynversym (input) == 0)
9311         continue;
9312
9313       hdr = &elf_tdata (input)->dynsymtab_hdr;
9314
9315       symcount = hdr->sh_size / bed->s->sizeof_sym;
9316       if (elf_bad_symtab (input))
9317         {
9318           extsymcount = symcount;
9319           extsymoff = 0;
9320         }
9321       else
9322         {
9323           extsymcount = symcount - hdr->sh_info;
9324           extsymoff = hdr->sh_info;
9325         }
9326
9327       if (extsymcount == 0)
9328         continue;
9329
9330       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
9331                                       NULL, NULL, NULL);
9332       if (isymbuf == NULL)
9333         return FALSE;
9334
9335       /* Read in any version definitions.  */
9336       versymhdr = &elf_tdata (input)->dynversym_hdr;
9337       extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
9338       if (extversym == NULL)
9339         goto error_ret;
9340
9341       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
9342           || (bfd_bread (extversym, versymhdr->sh_size, input)
9343               != versymhdr->sh_size))
9344         {
9345           free (extversym);
9346         error_ret:
9347           free (isymbuf);
9348           return FALSE;
9349         }
9350
9351       ever = extversym + extsymoff;
9352       isymend = isymbuf + extsymcount;
9353       for (isym = isymbuf; isym < isymend; isym++, ever++)
9354         {
9355           const char *name;
9356           Elf_Internal_Versym iver;
9357           unsigned short version_index;
9358
9359           if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
9360               || isym->st_shndx == SHN_UNDEF)
9361             continue;
9362
9363           name = bfd_elf_string_from_elf_section (input,
9364                                                   hdr->sh_link,
9365                                                   isym->st_name);
9366           if (strcmp (name, h->root.root.string) != 0)
9367             continue;
9368
9369           _bfd_elf_swap_versym_in (input, ever, &iver);
9370
9371           if ((iver.vs_vers & VERSYM_HIDDEN) == 0
9372               && !(h->def_regular
9373                    && h->forced_local))
9374             {
9375               /* If we have a non-hidden versioned sym, then it should
9376                  have provided a definition for the undefined sym unless
9377                  it is defined in a non-shared object and forced local.
9378                */
9379               abort ();
9380             }
9381
9382           version_index = iver.vs_vers & VERSYM_VERSION;
9383           if (version_index == 1 || version_index == 2)
9384             {
9385               /* This is the base or first version.  We can use it.  */
9386               free (extversym);
9387               free (isymbuf);
9388               return TRUE;
9389             }
9390         }
9391
9392       free (extversym);
9393       free (isymbuf);
9394     }
9395
9396   return FALSE;
9397 }
9398
9399 /* Convert ELF common symbol TYPE.  */
9400
9401 static int
9402 elf_link_convert_common_type (struct bfd_link_info *info, int type)
9403 {
9404   /* Commom symbol can only appear in relocatable link.  */
9405   if (!bfd_link_relocatable (info))
9406     abort ();
9407   switch (info->elf_stt_common)
9408     {
9409     case unchanged:
9410       break;
9411     case elf_stt_common:
9412       type = STT_COMMON;
9413       break;
9414     case no_elf_stt_common:
9415       type = STT_OBJECT;
9416       break;
9417     }
9418   return type;
9419 }
9420
9421 /* Add an external symbol to the symbol table.  This is called from
9422    the hash table traversal routine.  When generating a shared object,
9423    we go through the symbol table twice.  The first time we output
9424    anything that might have been forced to local scope in a version
9425    script.  The second time we output the symbols that are still
9426    global symbols.  */
9427
9428 static bfd_boolean
9429 elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
9430 {
9431   struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh;
9432   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
9433   struct elf_final_link_info *flinfo = eoinfo->flinfo;
9434   bfd_boolean strip;
9435   Elf_Internal_Sym sym;
9436   asection *input_sec;
9437   const struct elf_backend_data *bed;
9438   long indx;
9439   int ret;
9440   unsigned int type;
9441
9442   if (h->root.type == bfd_link_hash_warning)
9443     {
9444       h = (struct elf_link_hash_entry *) h->root.u.i.link;
9445       if (h->root.type == bfd_link_hash_new)
9446         return TRUE;
9447     }
9448
9449   /* Decide whether to output this symbol in this pass.  */
9450   if (eoinfo->localsyms)
9451     {
9452       if (!h->forced_local)
9453         return TRUE;
9454     }
9455   else
9456     {
9457       if (h->forced_local)
9458         return TRUE;
9459     }
9460
9461   bed = get_elf_backend_data (flinfo->output_bfd);
9462
9463   if (h->root.type == bfd_link_hash_undefined)
9464     {
9465       /* If we have an undefined symbol reference here then it must have
9466          come from a shared library that is being linked in.  (Undefined
9467          references in regular files have already been handled unless
9468          they are in unreferenced sections which are removed by garbage
9469          collection).  */
9470       bfd_boolean ignore_undef = FALSE;
9471
9472       /* Some symbols may be special in that the fact that they're
9473          undefined can be safely ignored - let backend determine that.  */
9474       if (bed->elf_backend_ignore_undef_symbol)
9475         ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
9476
9477       /* If we are reporting errors for this situation then do so now.  */
9478       if (!ignore_undef
9479           && h->ref_dynamic
9480           && (!h->ref_regular || flinfo->info->gc_sections)
9481           && !elf_link_check_versioned_symbol (flinfo->info, bed, h)
9482           && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
9483         (*flinfo->info->callbacks->undefined_symbol)
9484           (flinfo->info, h->root.root.string,
9485            h->ref_regular ? NULL : h->root.u.undef.abfd,
9486            NULL, 0,
9487            flinfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR);
9488
9489       /* Strip a global symbol defined in a discarded section.  */
9490       if (h->indx == -3)
9491         return TRUE;
9492     }
9493
9494   /* We should also warn if a forced local symbol is referenced from
9495      shared libraries.  */
9496   if (bfd_link_executable (flinfo->info)
9497       && h->forced_local
9498       && h->ref_dynamic
9499       && h->def_regular
9500       && !h->dynamic_def
9501       && h->ref_dynamic_nonweak
9502       && !elf_link_check_versioned_symbol (flinfo->info, bed, h))
9503     {
9504       bfd *def_bfd;
9505       const char *msg;
9506       struct elf_link_hash_entry *hi = h;
9507
9508       /* Check indirect symbol.  */
9509       while (hi->root.type == bfd_link_hash_indirect)
9510         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
9511
9512       if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
9513         /* xgettext:c-format */
9514         msg = _("%B: internal symbol `%s' in %B is referenced by DSO");
9515       else if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
9516         /* xgettext:c-format */
9517         msg = _("%B: hidden symbol `%s' in %B is referenced by DSO");
9518       else
9519         /* xgettext:c-format */
9520         msg = _("%B: local symbol `%s' in %B is referenced by DSO");
9521       def_bfd = flinfo->output_bfd;
9522       if (hi->root.u.def.section != bfd_abs_section_ptr)
9523         def_bfd = hi->root.u.def.section->owner;
9524       _bfd_error_handler (msg, flinfo->output_bfd,
9525                           h->root.root.string, def_bfd);
9526       bfd_set_error (bfd_error_bad_value);
9527       eoinfo->failed = TRUE;
9528       return FALSE;
9529     }
9530
9531   /* We don't want to output symbols that have never been mentioned by
9532      a regular file, or that we have been told to strip.  However, if
9533      h->indx is set to -2, the symbol is used by a reloc and we must
9534      output it.  */
9535   strip = FALSE;
9536   if (h->indx == -2)
9537     ;
9538   else if ((h->def_dynamic
9539             || h->ref_dynamic
9540             || h->root.type == bfd_link_hash_new)
9541            && !h->def_regular
9542            && !h->ref_regular)
9543     strip = TRUE;
9544   else if (flinfo->info->strip == strip_all)
9545     strip = TRUE;
9546   else if (flinfo->info->strip == strip_some
9547            && bfd_hash_lookup (flinfo->info->keep_hash,
9548                                h->root.root.string, FALSE, FALSE) == NULL)
9549     strip = TRUE;
9550   else if ((h->root.type == bfd_link_hash_defined
9551             || h->root.type == bfd_link_hash_defweak)
9552            && ((flinfo->info->strip_discarded
9553                 && discarded_section (h->root.u.def.section))
9554                || ((h->root.u.def.section->flags & SEC_LINKER_CREATED) == 0
9555                    && h->root.u.def.section->owner != NULL
9556                    && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)))
9557     strip = TRUE;
9558   else if ((h->root.type == bfd_link_hash_undefined
9559             || h->root.type == bfd_link_hash_undefweak)
9560            && h->root.u.undef.abfd != NULL
9561            && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0)
9562     strip = TRUE;
9563
9564   type = h->type;
9565
9566   /* If we're stripping it, and it's not a dynamic symbol, there's
9567      nothing else to do.   However, if it is a forced local symbol or
9568      an ifunc symbol we need to give the backend finish_dynamic_symbol
9569      function a chance to make it dynamic.  */
9570   if (strip
9571       && h->dynindx == -1
9572       && type != STT_GNU_IFUNC
9573       && !h->forced_local)
9574     return TRUE;
9575
9576   sym.st_value = 0;
9577   sym.st_size = h->size;
9578   sym.st_other = h->other;
9579   switch (h->root.type)
9580     {
9581     default:
9582     case bfd_link_hash_new:
9583     case bfd_link_hash_warning:
9584       abort ();
9585       return FALSE;
9586
9587     case bfd_link_hash_undefined:
9588     case bfd_link_hash_undefweak:
9589       input_sec = bfd_und_section_ptr;
9590       sym.st_shndx = SHN_UNDEF;
9591       break;
9592
9593     case bfd_link_hash_defined:
9594     case bfd_link_hash_defweak:
9595       {
9596         input_sec = h->root.u.def.section;
9597         if (input_sec->output_section != NULL)
9598           {
9599             sym.st_shndx =
9600               _bfd_elf_section_from_bfd_section (flinfo->output_bfd,
9601                                                  input_sec->output_section);
9602             if (sym.st_shndx == SHN_BAD)
9603               {
9604                 _bfd_error_handler
9605                   /* xgettext:c-format */
9606                   (_("%B: could not find output section %A for input section %A"),
9607                    flinfo->output_bfd, input_sec->output_section, input_sec);
9608                 bfd_set_error (bfd_error_nonrepresentable_section);
9609                 eoinfo->failed = TRUE;
9610                 return FALSE;
9611               }
9612
9613             /* ELF symbols in relocatable files are section relative,
9614                but in nonrelocatable files they are virtual
9615                addresses.  */
9616             sym.st_value = h->root.u.def.value + input_sec->output_offset;
9617             if (!bfd_link_relocatable (flinfo->info))
9618               {
9619                 sym.st_value += input_sec->output_section->vma;
9620                 if (h->type == STT_TLS)
9621                   {
9622                     asection *tls_sec = elf_hash_table (flinfo->info)->tls_sec;
9623                     if (tls_sec != NULL)
9624                       sym.st_value -= tls_sec->vma;
9625                   }
9626               }
9627           }
9628         else
9629           {
9630             BFD_ASSERT (input_sec->owner == NULL
9631                         || (input_sec->owner->flags & DYNAMIC) != 0);
9632             sym.st_shndx = SHN_UNDEF;
9633             input_sec = bfd_und_section_ptr;
9634           }
9635       }
9636       break;
9637
9638     case bfd_link_hash_common:
9639       input_sec = h->root.u.c.p->section;
9640       sym.st_shndx = bed->common_section_index (input_sec);
9641       sym.st_value = 1 << h->root.u.c.p->alignment_power;
9642       break;
9643
9644     case bfd_link_hash_indirect:
9645       /* These symbols are created by symbol versioning.  They point
9646          to the decorated version of the name.  For example, if the
9647          symbol foo@@GNU_1.2 is the default, which should be used when
9648          foo is used with no version, then we add an indirect symbol
9649          foo which points to foo@@GNU_1.2.  We ignore these symbols,
9650          since the indirected symbol is already in the hash table.  */
9651       return TRUE;
9652     }
9653
9654   if (type == STT_COMMON || type == STT_OBJECT)
9655     switch (h->root.type)
9656       {
9657       case bfd_link_hash_common:
9658         type = elf_link_convert_common_type (flinfo->info, type);
9659         break;
9660       case bfd_link_hash_defined:
9661       case bfd_link_hash_defweak:
9662         if (bed->common_definition (&sym))
9663           type = elf_link_convert_common_type (flinfo->info, type);
9664         else
9665           type = STT_OBJECT;
9666         break;
9667       case bfd_link_hash_undefined:
9668       case bfd_link_hash_undefweak:
9669         break;
9670       default:
9671         abort ();
9672       }
9673
9674   if (h->forced_local)
9675     {
9676       sym.st_info = ELF_ST_INFO (STB_LOCAL, type);
9677       /* Turn off visibility on local symbol.  */
9678       sym.st_other &= ~ELF_ST_VISIBILITY (-1);
9679     }
9680   /* Set STB_GNU_UNIQUE only if symbol is defined in regular object.  */
9681   else if (h->unique_global && h->def_regular)
9682     sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, type);
9683   else if (h->root.type == bfd_link_hash_undefweak
9684            || h->root.type == bfd_link_hash_defweak)
9685     sym.st_info = ELF_ST_INFO (STB_WEAK, type);
9686   else
9687     sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
9688   sym.st_target_internal = h->target_internal;
9689
9690   /* Give the processor backend a chance to tweak the symbol value,
9691      and also to finish up anything that needs to be done for this
9692      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
9693      forced local syms when non-shared is due to a historical quirk.
9694      STT_GNU_IFUNC symbol must go through PLT.  */
9695   if ((h->type == STT_GNU_IFUNC
9696        && h->def_regular
9697        && !bfd_link_relocatable (flinfo->info))
9698       || ((h->dynindx != -1
9699            || h->forced_local)
9700           && ((bfd_link_pic (flinfo->info)
9701                && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
9702                    || h->root.type != bfd_link_hash_undefweak))
9703               || !h->forced_local)
9704           && elf_hash_table (flinfo->info)->dynamic_sections_created))
9705     {
9706       if (! ((*bed->elf_backend_finish_dynamic_symbol)
9707              (flinfo->output_bfd, flinfo->info, h, &sym)))
9708         {
9709           eoinfo->failed = TRUE;
9710           return FALSE;
9711         }
9712     }
9713
9714   /* If we are marking the symbol as undefined, and there are no
9715      non-weak references to this symbol from a regular object, then
9716      mark the symbol as weak undefined; if there are non-weak
9717      references, mark the symbol as strong.  We can't do this earlier,
9718      because it might not be marked as undefined until the
9719      finish_dynamic_symbol routine gets through with it.  */
9720   if (sym.st_shndx == SHN_UNDEF
9721       && h->ref_regular
9722       && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
9723           || ELF_ST_BIND (sym.st_info) == STB_WEAK))
9724     {
9725       int bindtype;
9726       type = ELF_ST_TYPE (sym.st_info);
9727
9728       /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */
9729       if (type == STT_GNU_IFUNC)
9730         type = STT_FUNC;
9731
9732       if (h->ref_regular_nonweak)
9733         bindtype = STB_GLOBAL;
9734       else
9735         bindtype = STB_WEAK;
9736       sym.st_info = ELF_ST_INFO (bindtype, type);
9737     }
9738
9739   /* If this is a symbol defined in a dynamic library, don't use the
9740      symbol size from the dynamic library.  Relinking an executable
9741      against a new library may introduce gratuitous changes in the
9742      executable's symbols if we keep the size.  */
9743   if (sym.st_shndx == SHN_UNDEF
9744       && !h->def_regular
9745       && h->def_dynamic)
9746     sym.st_size = 0;
9747
9748   /* If a non-weak symbol with non-default visibility is not defined
9749      locally, it is a fatal error.  */
9750   if (!bfd_link_relocatable (flinfo->info)
9751       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
9752       && ELF_ST_BIND (sym.st_info) != STB_WEAK
9753       && h->root.type == bfd_link_hash_undefined
9754       && !h->def_regular)
9755     {
9756       const char *msg;
9757
9758       if (ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED)
9759         /* xgettext:c-format */
9760         msg = _("%B: protected symbol `%s' isn't defined");
9761       else if (ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL)
9762         /* xgettext:c-format */
9763         msg = _("%B: internal symbol `%s' isn't defined");
9764       else
9765         /* xgettext:c-format */
9766         msg = _("%B: hidden symbol `%s' isn't defined");
9767       _bfd_error_handler (msg, flinfo->output_bfd, h->root.root.string);
9768       bfd_set_error (bfd_error_bad_value);
9769       eoinfo->failed = TRUE;
9770       return FALSE;
9771     }
9772
9773   /* If this symbol should be put in the .dynsym section, then put it
9774      there now.  We already know the symbol index.  We also fill in
9775      the entry in the .hash section.  */
9776   if (elf_hash_table (flinfo->info)->dynsym != NULL
9777       && h->dynindx != -1
9778       && elf_hash_table (flinfo->info)->dynamic_sections_created)
9779     {
9780       bfd_byte *esym;
9781
9782       /* Since there is no version information in the dynamic string,
9783          if there is no version info in symbol version section, we will
9784          have a run-time problem if not linking executable, referenced
9785          by shared library, or not bound locally.  */
9786       if (h->verinfo.verdef == NULL
9787           && (!bfd_link_executable (flinfo->info)
9788               || h->ref_dynamic
9789               || !h->def_regular))
9790         {
9791           char *p = strrchr (h->root.root.string, ELF_VER_CHR);
9792
9793           if (p && p [1] != '\0')
9794             {
9795               _bfd_error_handler
9796                 /* xgettext:c-format */
9797                 (_("%B: No symbol version section for versioned symbol `%s'"),
9798                  flinfo->output_bfd, h->root.root.string);
9799               eoinfo->failed = TRUE;
9800               return FALSE;
9801             }
9802         }
9803
9804       sym.st_name = h->dynstr_index;
9805       esym = (elf_hash_table (flinfo->info)->dynsym->contents
9806               + h->dynindx * bed->s->sizeof_sym);
9807       if (!check_dynsym (flinfo->output_bfd, &sym))
9808         {
9809           eoinfo->failed = TRUE;
9810           return FALSE;
9811         }
9812       bed->s->swap_symbol_out (flinfo->output_bfd, &sym, esym, 0);
9813
9814       if (flinfo->hash_sec != NULL)
9815         {
9816           size_t hash_entry_size;
9817           bfd_byte *bucketpos;
9818           bfd_vma chain;
9819           size_t bucketcount;
9820           size_t bucket;
9821
9822           bucketcount = elf_hash_table (flinfo->info)->bucketcount;
9823           bucket = h->u.elf_hash_value % bucketcount;
9824
9825           hash_entry_size
9826             = elf_section_data (flinfo->hash_sec)->this_hdr.sh_entsize;
9827           bucketpos = ((bfd_byte *) flinfo->hash_sec->contents
9828                        + (bucket + 2) * hash_entry_size);
9829           chain = bfd_get (8 * hash_entry_size, flinfo->output_bfd, bucketpos);
9830           bfd_put (8 * hash_entry_size, flinfo->output_bfd, h->dynindx,
9831                    bucketpos);
9832           bfd_put (8 * hash_entry_size, flinfo->output_bfd, chain,
9833                    ((bfd_byte *) flinfo->hash_sec->contents
9834                     + (bucketcount + 2 + h->dynindx) * hash_entry_size));
9835         }
9836
9837       if (flinfo->symver_sec != NULL && flinfo->symver_sec->contents != NULL)
9838         {
9839           Elf_Internal_Versym iversym;
9840           Elf_External_Versym *eversym;
9841
9842           if (!h->def_regular)
9843             {
9844               if (h->verinfo.verdef == NULL
9845                   || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
9846                       & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
9847                 iversym.vs_vers = 0;
9848               else
9849                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
9850             }
9851           else
9852             {
9853               if (h->verinfo.vertree == NULL)
9854                 iversym.vs_vers = 1;
9855               else
9856                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
9857               if (flinfo->info->create_default_symver)
9858                 iversym.vs_vers++;
9859             }
9860
9861           /* Turn on VERSYM_HIDDEN only if the hidden versioned symbol is
9862              defined locally.  */
9863           if (h->versioned == versioned_hidden && h->def_regular)
9864             iversym.vs_vers |= VERSYM_HIDDEN;
9865
9866           eversym = (Elf_External_Versym *) flinfo->symver_sec->contents;
9867           eversym += h->dynindx;
9868           _bfd_elf_swap_versym_out (flinfo->output_bfd, &iversym, eversym);
9869         }
9870     }
9871
9872   /* If the symbol is undefined, and we didn't output it to .dynsym,
9873      strip it from .symtab too.  Obviously we can't do this for
9874      relocatable output or when needed for --emit-relocs.  */
9875   else if (input_sec == bfd_und_section_ptr
9876            && h->indx != -2
9877            && !bfd_link_relocatable (flinfo->info))
9878     return TRUE;
9879   /* Also strip others that we couldn't earlier due to dynamic symbol
9880      processing.  */
9881   if (strip)
9882     return TRUE;
9883   if ((input_sec->flags & SEC_EXCLUDE) != 0)
9884     return TRUE;
9885
9886   /* Output a FILE symbol so that following locals are not associated
9887      with the wrong input file.  We need one for forced local symbols
9888      if we've seen more than one FILE symbol or when we have exactly
9889      one FILE symbol but global symbols are present in a file other
9890      than the one with the FILE symbol.  We also need one if linker
9891      defined symbols are present.  In practice these conditions are
9892      always met, so just emit the FILE symbol unconditionally.  */
9893   if (eoinfo->localsyms
9894       && !eoinfo->file_sym_done
9895       && eoinfo->flinfo->filesym_count != 0)
9896     {
9897       Elf_Internal_Sym fsym;
9898
9899       memset (&fsym, 0, sizeof (fsym));
9900       fsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
9901       fsym.st_shndx = SHN_ABS;
9902       if (!elf_link_output_symstrtab (eoinfo->flinfo, NULL, &fsym,
9903                                       bfd_und_section_ptr, NULL))
9904         return FALSE;
9905
9906       eoinfo->file_sym_done = TRUE;
9907     }
9908
9909   indx = bfd_get_symcount (flinfo->output_bfd);
9910   ret = elf_link_output_symstrtab (flinfo, h->root.root.string, &sym,
9911                                    input_sec, h);
9912   if (ret == 0)
9913     {
9914       eoinfo->failed = TRUE;
9915       return FALSE;
9916     }
9917   else if (ret == 1)
9918     h->indx = indx;
9919   else if (h->indx == -2)
9920     abort();
9921
9922   return TRUE;
9923 }
9924
9925 /* Return TRUE if special handling is done for relocs in SEC against
9926    symbols defined in discarded sections.  */
9927
9928 static bfd_boolean
9929 elf_section_ignore_discarded_relocs (asection *sec)
9930 {
9931   const struct elf_backend_data *bed;
9932
9933   switch (sec->sec_info_type)
9934     {
9935     case SEC_INFO_TYPE_STABS:
9936     case SEC_INFO_TYPE_EH_FRAME:
9937     case SEC_INFO_TYPE_EH_FRAME_ENTRY:
9938       return TRUE;
9939     default:
9940       break;
9941     }
9942
9943   bed = get_elf_backend_data (sec->owner);
9944   if (bed->elf_backend_ignore_discarded_relocs != NULL
9945       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
9946     return TRUE;
9947
9948   return FALSE;
9949 }
9950
9951 /* Return a mask saying how ld should treat relocations in SEC against
9952    symbols defined in discarded sections.  If this function returns
9953    COMPLAIN set, ld will issue a warning message.  If this function
9954    returns PRETEND set, and the discarded section was link-once and the
9955    same size as the kept link-once section, ld will pretend that the
9956    symbol was actually defined in the kept section.  Otherwise ld will
9957    zero the reloc (at least that is the intent, but some cooperation by
9958    the target dependent code is needed, particularly for REL targets).  */
9959
9960 unsigned int
9961 _bfd_elf_default_action_discarded (asection *sec)
9962 {
9963   if (sec->flags & SEC_DEBUGGING)
9964     return PRETEND;
9965
9966   if (strcmp (".eh_frame", sec->name) == 0)
9967     return 0;
9968
9969   if (strcmp (".gcc_except_table", sec->name) == 0)
9970     return 0;
9971
9972   return COMPLAIN | PRETEND;
9973 }
9974
9975 /* Find a match between a section and a member of a section group.  */
9976
9977 static asection *
9978 match_group_member (asection *sec, asection *group,
9979                     struct bfd_link_info *info)
9980 {
9981   asection *first = elf_next_in_group (group);
9982   asection *s = first;
9983
9984   while (s != NULL)
9985     {
9986       if (bfd_elf_match_symbols_in_sections (s, sec, info))
9987         return s;
9988
9989       s = elf_next_in_group (s);
9990       if (s == first)
9991         break;
9992     }
9993
9994   return NULL;
9995 }
9996
9997 /* Check if the kept section of a discarded section SEC can be used
9998    to replace it.  Return the replacement if it is OK.  Otherwise return
9999    NULL.  */
10000
10001 asection *
10002 _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
10003 {
10004   asection *kept;
10005
10006   kept = sec->kept_section;
10007   if (kept != NULL)
10008     {
10009       if ((kept->flags & SEC_GROUP) != 0)
10010         kept = match_group_member (sec, kept, info);
10011       if (kept != NULL
10012           && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
10013               != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
10014         kept = NULL;
10015       sec->kept_section = kept;
10016     }
10017   return kept;
10018 }
10019
10020 /* Link an input file into the linker output file.  This function
10021    handles all the sections and relocations of the input file at once.
10022    This is so that we only have to read the local symbols once, and
10023    don't have to keep them in memory.  */
10024
10025 static bfd_boolean
10026 elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
10027 {
10028   int (*relocate_section)
10029     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
10030      Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
10031   bfd *output_bfd;
10032   Elf_Internal_Shdr *symtab_hdr;
10033   size_t locsymcount;
10034   size_t extsymoff;
10035   Elf_Internal_Sym *isymbuf;
10036   Elf_Internal_Sym *isym;
10037   Elf_Internal_Sym *isymend;
10038   long *pindex;
10039   asection **ppsection;
10040   asection *o;
10041   const struct elf_backend_data *bed;
10042   struct elf_link_hash_entry **sym_hashes;
10043   bfd_size_type address_size;
10044   bfd_vma r_type_mask;
10045   int r_sym_shift;
10046   bfd_boolean have_file_sym = FALSE;
10047
10048   output_bfd = flinfo->output_bfd;
10049   bed = get_elf_backend_data (output_bfd);
10050   relocate_section = bed->elf_backend_relocate_section;
10051
10052   /* If this is a dynamic object, we don't want to do anything here:
10053      we don't want the local symbols, and we don't want the section
10054      contents.  */
10055   if ((input_bfd->flags & DYNAMIC) != 0)
10056     return TRUE;
10057
10058   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10059   if (elf_bad_symtab (input_bfd))
10060     {
10061       locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
10062       extsymoff = 0;
10063     }
10064   else
10065     {
10066       locsymcount = symtab_hdr->sh_info;
10067       extsymoff = symtab_hdr->sh_info;
10068     }
10069
10070   /* Read the local symbols.  */
10071   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
10072   if (isymbuf == NULL && locsymcount != 0)
10073     {
10074       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
10075                                       flinfo->internal_syms,
10076                                       flinfo->external_syms,
10077                                       flinfo->locsym_shndx);
10078       if (isymbuf == NULL)
10079         return FALSE;
10080     }
10081
10082   /* Find local symbol sections and adjust values of symbols in
10083      SEC_MERGE sections.  Write out those local symbols we know are
10084      going into the output file.  */
10085   isymend = isymbuf + locsymcount;
10086   for (isym = isymbuf, pindex = flinfo->indices, ppsection = flinfo->sections;
10087        isym < isymend;
10088        isym++, pindex++, ppsection++)
10089     {
10090       asection *isec;
10091       const char *name;
10092       Elf_Internal_Sym osym;
10093       long indx;
10094       int ret;
10095
10096       *pindex = -1;
10097
10098       if (elf_bad_symtab (input_bfd))
10099         {
10100           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
10101             {
10102               *ppsection = NULL;
10103               continue;
10104             }
10105         }
10106
10107       if (isym->st_shndx == SHN_UNDEF)
10108         isec = bfd_und_section_ptr;
10109       else if (isym->st_shndx == SHN_ABS)
10110         isec = bfd_abs_section_ptr;
10111       else if (isym->st_shndx == SHN_COMMON)
10112         isec = bfd_com_section_ptr;
10113       else
10114         {
10115           isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
10116           if (isec == NULL)
10117             {
10118               /* Don't attempt to output symbols with st_shnx in the
10119                  reserved range other than SHN_ABS and SHN_COMMON.  */
10120               *ppsection = NULL;
10121               continue;
10122             }
10123           else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE
10124                    && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
10125             isym->st_value =
10126               _bfd_merged_section_offset (output_bfd, &isec,
10127                                           elf_section_data (isec)->sec_info,
10128                                           isym->st_value);
10129         }
10130
10131       *ppsection = isec;
10132
10133       /* Don't output the first, undefined, symbol.  In fact, don't
10134          output any undefined local symbol.  */
10135       if (isec == bfd_und_section_ptr)
10136         continue;
10137
10138       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
10139         {
10140           /* We never output section symbols.  Instead, we use the
10141              section symbol of the corresponding section in the output
10142              file.  */
10143           continue;
10144         }
10145
10146       /* If we are stripping all symbols, we don't want to output this
10147          one.  */
10148       if (flinfo->info->strip == strip_all)
10149         continue;
10150
10151       /* If we are discarding all local symbols, we don't want to
10152          output this one.  If we are generating a relocatable output
10153          file, then some of the local symbols may be required by
10154          relocs; we output them below as we discover that they are
10155          needed.  */
10156       if (flinfo->info->discard == discard_all)
10157         continue;
10158
10159       /* If this symbol is defined in a section which we are
10160          discarding, we don't need to keep it.  */
10161       if (isym->st_shndx != SHN_UNDEF
10162           && isym->st_shndx < SHN_LORESERVE
10163           && bfd_section_removed_from_list (output_bfd,
10164                                             isec->output_section))
10165         continue;
10166
10167       /* Get the name of the symbol.  */
10168       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
10169                                               isym->st_name);
10170       if (name == NULL)
10171         return FALSE;
10172
10173       /* See if we are discarding symbols with this name.  */
10174       if ((flinfo->info->strip == strip_some
10175            && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE)
10176                == NULL))
10177           || (((flinfo->info->discard == discard_sec_merge
10178                 && (isec->flags & SEC_MERGE)
10179                 && !bfd_link_relocatable (flinfo->info))
10180                || flinfo->info->discard == discard_l)
10181               && bfd_is_local_label_name (input_bfd, name)))
10182         continue;
10183
10184       if (ELF_ST_TYPE (isym->st_info) == STT_FILE)
10185         {
10186           if (input_bfd->lto_output)
10187             /* -flto puts a temp file name here.  This means builds
10188                are not reproducible.  Discard the symbol.  */
10189             continue;
10190           have_file_sym = TRUE;
10191           flinfo->filesym_count += 1;
10192         }
10193       if (!have_file_sym)
10194         {
10195           /* In the absence of debug info, bfd_find_nearest_line uses
10196              FILE symbols to determine the source file for local
10197              function symbols.  Provide a FILE symbol here if input
10198              files lack such, so that their symbols won't be
10199              associated with a previous input file.  It's not the
10200              source file, but the best we can do.  */
10201           have_file_sym = TRUE;
10202           flinfo->filesym_count += 1;
10203           memset (&osym, 0, sizeof (osym));
10204           osym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
10205           osym.st_shndx = SHN_ABS;
10206           if (!elf_link_output_symstrtab (flinfo,
10207                                           (input_bfd->lto_output ? NULL
10208                                            : input_bfd->filename),
10209                                           &osym, bfd_abs_section_ptr,
10210                                           NULL))
10211             return FALSE;
10212         }
10213
10214       osym = *isym;
10215
10216       /* Adjust the section index for the output file.  */
10217       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
10218                                                          isec->output_section);
10219       if (osym.st_shndx == SHN_BAD)
10220         return FALSE;
10221
10222       /* ELF symbols in relocatable files are section relative, but
10223          in executable files they are virtual addresses.  Note that
10224          this code assumes that all ELF sections have an associated
10225          BFD section with a reasonable value for output_offset; below
10226          we assume that they also have a reasonable value for
10227          output_section.  Any special sections must be set up to meet
10228          these requirements.  */
10229       osym.st_value += isec->output_offset;
10230       if (!bfd_link_relocatable (flinfo->info))
10231         {
10232           osym.st_value += isec->output_section->vma;
10233           if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
10234             {
10235               /* STT_TLS symbols are relative to PT_TLS segment base.  */
10236               BFD_ASSERT (elf_hash_table (flinfo->info)->tls_sec != NULL);
10237               osym.st_value -= elf_hash_table (flinfo->info)->tls_sec->vma;
10238             }
10239         }
10240
10241       indx = bfd_get_symcount (output_bfd);
10242       ret = elf_link_output_symstrtab (flinfo, name, &osym, isec, NULL);
10243       if (ret == 0)
10244         return FALSE;
10245       else if (ret == 1)
10246         *pindex = indx;
10247     }
10248
10249   if (bed->s->arch_size == 32)
10250     {
10251       r_type_mask = 0xff;
10252       r_sym_shift = 8;
10253       address_size = 4;
10254     }
10255   else
10256     {
10257       r_type_mask = 0xffffffff;
10258       r_sym_shift = 32;
10259       address_size = 8;
10260     }
10261
10262   /* Relocate the contents of each section.  */
10263   sym_hashes = elf_sym_hashes (input_bfd);
10264   for (o = input_bfd->sections; o != NULL; o = o->next)
10265     {
10266       bfd_byte *contents;
10267
10268       if (! o->linker_mark)
10269         {
10270           /* This section was omitted from the link.  */
10271           continue;
10272         }
10273
10274       if (bfd_link_relocatable (flinfo->info)
10275           && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
10276         {
10277           /* Deal with the group signature symbol.  */
10278           struct bfd_elf_section_data *sec_data = elf_section_data (o);
10279           unsigned long symndx = sec_data->this_hdr.sh_info;
10280           asection *osec = o->output_section;
10281
10282           if (symndx >= locsymcount
10283               || (elf_bad_symtab (input_bfd)
10284                   && flinfo->sections[symndx] == NULL))
10285             {
10286               struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
10287               while (h->root.type == bfd_link_hash_indirect
10288                      || h->root.type == bfd_link_hash_warning)
10289                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
10290               /* Arrange for symbol to be output.  */
10291               h->indx = -2;
10292               elf_section_data (osec)->this_hdr.sh_info = -2;
10293             }
10294           else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
10295             {
10296               /* We'll use the output section target_index.  */
10297               asection *sec = flinfo->sections[symndx]->output_section;
10298               elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
10299             }
10300           else
10301             {
10302               if (flinfo->indices[symndx] == -1)
10303                 {
10304                   /* Otherwise output the local symbol now.  */
10305                   Elf_Internal_Sym sym = isymbuf[symndx];
10306                   asection *sec = flinfo->sections[symndx]->output_section;
10307                   const char *name;
10308                   long indx;
10309                   int ret;
10310
10311                   name = bfd_elf_string_from_elf_section (input_bfd,
10312                                                           symtab_hdr->sh_link,
10313                                                           sym.st_name);
10314                   if (name == NULL)
10315                     return FALSE;
10316
10317                   sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
10318                                                                     sec);
10319                   if (sym.st_shndx == SHN_BAD)
10320                     return FALSE;
10321
10322                   sym.st_value += o->output_offset;
10323
10324                   indx = bfd_get_symcount (output_bfd);
10325                   ret = elf_link_output_symstrtab (flinfo, name, &sym, o,
10326                                                    NULL);
10327                   if (ret == 0)
10328                     return FALSE;
10329                   else if (ret == 1)
10330                     flinfo->indices[symndx] = indx;
10331                   else
10332                     abort ();
10333                 }
10334               elf_section_data (osec)->this_hdr.sh_info
10335                 = flinfo->indices[symndx];
10336             }
10337         }
10338
10339       if ((o->flags & SEC_HAS_CONTENTS) == 0
10340           || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
10341         continue;
10342
10343       if ((o->flags & SEC_LINKER_CREATED) != 0)
10344         {
10345           /* Section was created by _bfd_elf_link_create_dynamic_sections
10346              or somesuch.  */
10347           continue;
10348         }
10349
10350       /* Get the contents of the section.  They have been cached by a
10351          relaxation routine.  Note that o is a section in an input
10352          file, so the contents field will not have been set by any of
10353          the routines which work on output files.  */
10354       if (elf_section_data (o)->this_hdr.contents != NULL)
10355         {
10356           contents = elf_section_data (o)->this_hdr.contents;
10357           if (bed->caches_rawsize
10358               && o->rawsize != 0
10359               && o->rawsize < o->size)
10360             {
10361               memcpy (flinfo->contents, contents, o->rawsize);
10362               contents = flinfo->contents;
10363             }
10364         }
10365       else
10366         {
10367           contents = flinfo->contents;
10368           if (! bfd_get_full_section_contents (input_bfd, o, &contents))
10369             return FALSE;
10370         }
10371
10372       if ((o->flags & SEC_RELOC) != 0)
10373         {
10374           Elf_Internal_Rela *internal_relocs;
10375           Elf_Internal_Rela *rel, *relend;
10376           int action_discarded;
10377           int ret;
10378
10379           /* Get the swapped relocs.  */
10380           internal_relocs
10381             = _bfd_elf_link_read_relocs (input_bfd, o, flinfo->external_relocs,
10382                                          flinfo->internal_relocs, FALSE);
10383           if (internal_relocs == NULL
10384               && o->reloc_count > 0)
10385             return FALSE;
10386
10387           /* We need to reverse-copy input .ctors/.dtors sections if
10388              they are placed in .init_array/.finit_array for output.  */
10389           if (o->size > address_size
10390               && ((strncmp (o->name, ".ctors", 6) == 0
10391                    && strcmp (o->output_section->name,
10392                               ".init_array") == 0)
10393                   || (strncmp (o->name, ".dtors", 6) == 0
10394                       && strcmp (o->output_section->name,
10395                                  ".fini_array") == 0))
10396               && (o->name[6] == 0 || o->name[6] == '.'))
10397             {
10398               if (o->size != o->reloc_count * address_size)
10399                 {
10400                   _bfd_error_handler
10401                     /* xgettext:c-format */
10402                     (_("error: %B: size of section %A is not "
10403                        "multiple of address size"),
10404                      input_bfd, o);
10405                   bfd_set_error (bfd_error_on_input);
10406                   return FALSE;
10407                 }
10408               o->flags |= SEC_ELF_REVERSE_COPY;
10409             }
10410
10411           action_discarded = -1;
10412           if (!elf_section_ignore_discarded_relocs (o))
10413             action_discarded = (*bed->action_discarded) (o);
10414
10415           /* Run through the relocs evaluating complex reloc symbols and
10416              looking for relocs against symbols from discarded sections
10417              or section symbols from removed link-once sections.
10418              Complain about relocs against discarded sections.  Zero
10419              relocs against removed link-once sections.  */
10420
10421           rel = internal_relocs;
10422           relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
10423           for ( ; rel < relend; rel++)
10424             {
10425               unsigned long r_symndx = rel->r_info >> r_sym_shift;
10426               unsigned int s_type;
10427               asection **ps, *sec;
10428               struct elf_link_hash_entry *h = NULL;
10429               const char *sym_name;
10430
10431               if (r_symndx == STN_UNDEF)
10432                 continue;
10433
10434               if (r_symndx >= locsymcount
10435                   || (elf_bad_symtab (input_bfd)
10436                       && flinfo->sections[r_symndx] == NULL))
10437                 {
10438                   h = sym_hashes[r_symndx - extsymoff];
10439
10440                   /* Badly formatted input files can contain relocs that
10441                      reference non-existant symbols.  Check here so that
10442                      we do not seg fault.  */
10443                   if (h == NULL)
10444                     {
10445                       char buffer [32];
10446
10447                       sprintf_vma (buffer, rel->r_info);
10448                       _bfd_error_handler
10449                         /* xgettext:c-format */
10450                         (_("error: %B contains a reloc (0x%s) for section %A "
10451                            "that references a non-existent global symbol"),
10452                          input_bfd, buffer, o);
10453                       bfd_set_error (bfd_error_bad_value);
10454                       return FALSE;
10455                     }
10456
10457                   while (h->root.type == bfd_link_hash_indirect
10458                          || h->root.type == bfd_link_hash_warning)
10459                     h = (struct elf_link_hash_entry *) h->root.u.i.link;
10460
10461                   s_type = h->type;
10462
10463                   /* If a plugin symbol is referenced from a non-IR file,
10464                      mark the symbol as undefined.  Note that the
10465                      linker may attach linker created dynamic sections
10466                      to the plugin bfd.  Symbols defined in linker
10467                      created sections are not plugin symbols.  */
10468                   if (h->root.non_ir_ref
10469                       && (h->root.type == bfd_link_hash_defined
10470                           || h->root.type == bfd_link_hash_defweak)
10471                       && (h->root.u.def.section->flags
10472                           & SEC_LINKER_CREATED) == 0
10473                       && h->root.u.def.section->owner != NULL
10474                       && (h->root.u.def.section->owner->flags
10475                           & BFD_PLUGIN) != 0)
10476                     {
10477                       h->root.type = bfd_link_hash_undefined;
10478                       h->root.u.undef.abfd = h->root.u.def.section->owner;
10479                     }
10480
10481                   ps = NULL;
10482                   if (h->root.type == bfd_link_hash_defined
10483                       || h->root.type == bfd_link_hash_defweak)
10484                     ps = &h->root.u.def.section;
10485
10486                   sym_name = h->root.root.string;
10487                 }
10488               else
10489                 {
10490                   Elf_Internal_Sym *sym = isymbuf + r_symndx;
10491
10492                   s_type = ELF_ST_TYPE (sym->st_info);
10493                   ps = &flinfo->sections[r_symndx];
10494                   sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10495                                                sym, *ps);
10496                 }
10497
10498               if ((s_type == STT_RELC || s_type == STT_SRELC)
10499                   && !bfd_link_relocatable (flinfo->info))
10500                 {
10501                   bfd_vma val;
10502                   bfd_vma dot = (rel->r_offset
10503                                  + o->output_offset + o->output_section->vma);
10504 #ifdef DEBUG
10505                   printf ("Encountered a complex symbol!");
10506                   printf (" (input_bfd %s, section %s, reloc %ld\n",
10507                           input_bfd->filename, o->name,
10508                           (long) (rel - internal_relocs));
10509                   printf (" symbol: idx  %8.8lx, name %s\n",
10510                           r_symndx, sym_name);
10511                   printf (" reloc : info %8.8lx, addr %8.8lx\n",
10512                           (unsigned long) rel->r_info,
10513                           (unsigned long) rel->r_offset);
10514 #endif
10515                   if (!eval_symbol (&val, &sym_name, input_bfd, flinfo, dot,
10516                                     isymbuf, locsymcount, s_type == STT_SRELC))
10517                     return FALSE;
10518
10519                   /* Symbol evaluated OK.  Update to absolute value.  */
10520                   set_symbol_value (input_bfd, isymbuf, locsymcount,
10521                                     r_symndx, val);
10522                   continue;
10523                 }
10524
10525               if (action_discarded != -1 && ps != NULL)
10526                 {
10527                   /* Complain if the definition comes from a
10528                      discarded section.  */
10529                   if ((sec = *ps) != NULL && discarded_section (sec))
10530                     {
10531                       BFD_ASSERT (r_symndx != STN_UNDEF);
10532                       if (action_discarded & COMPLAIN)
10533                         (*flinfo->info->callbacks->einfo)
10534                           /* xgettext:c-format */
10535                           (_("%X`%s' referenced in section `%A' of %B: "
10536                              "defined in discarded section `%A' of %B\n"),
10537                            sym_name, o, input_bfd, sec, sec->owner);
10538
10539                       /* Try to do the best we can to support buggy old
10540                          versions of gcc.  Pretend that the symbol is
10541                          really defined in the kept linkonce section.
10542                          FIXME: This is quite broken.  Modifying the
10543                          symbol here means we will be changing all later
10544                          uses of the symbol, not just in this section.  */
10545                       if (action_discarded & PRETEND)
10546                         {
10547                           asection *kept;
10548
10549                           kept = _bfd_elf_check_kept_section (sec,
10550                                                               flinfo->info);
10551                           if (kept != NULL)
10552                             {
10553                               *ps = kept;
10554                               continue;
10555                             }
10556                         }
10557                     }
10558                 }
10559             }
10560
10561           /* Relocate the section by invoking a back end routine.
10562
10563              The back end routine is responsible for adjusting the
10564              section contents as necessary, and (if using Rela relocs
10565              and generating a relocatable output file) adjusting the
10566              reloc addend as necessary.
10567
10568              The back end routine does not have to worry about setting
10569              the reloc address or the reloc symbol index.
10570
10571              The back end routine is given a pointer to the swapped in
10572              internal symbols, and can access the hash table entries
10573              for the external symbols via elf_sym_hashes (input_bfd).
10574
10575              When generating relocatable output, the back end routine
10576              must handle STB_LOCAL/STT_SECTION symbols specially.  The
10577              output symbol is going to be a section symbol
10578              corresponding to the output section, which will require
10579              the addend to be adjusted.  */
10580
10581           ret = (*relocate_section) (output_bfd, flinfo->info,
10582                                      input_bfd, o, contents,
10583                                      internal_relocs,
10584                                      isymbuf,
10585                                      flinfo->sections);
10586           if (!ret)
10587             return FALSE;
10588
10589           if (ret == 2
10590               || bfd_link_relocatable (flinfo->info)
10591               || flinfo->info->emitrelocations)
10592             {
10593               Elf_Internal_Rela *irela;
10594               Elf_Internal_Rela *irelaend, *irelamid;
10595               bfd_vma last_offset;
10596               struct elf_link_hash_entry **rel_hash;
10597               struct elf_link_hash_entry **rel_hash_list, **rela_hash_list;
10598               Elf_Internal_Shdr *input_rel_hdr, *input_rela_hdr;
10599               unsigned int next_erel;
10600               bfd_boolean rela_normal;
10601               struct bfd_elf_section_data *esdi, *esdo;
10602
10603               esdi = elf_section_data (o);
10604               esdo = elf_section_data (o->output_section);
10605               rela_normal = FALSE;
10606
10607               /* Adjust the reloc addresses and symbol indices.  */
10608
10609               irela = internal_relocs;
10610               irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
10611               rel_hash = esdo->rel.hashes + esdo->rel.count;
10612               /* We start processing the REL relocs, if any.  When we reach
10613                  IRELAMID in the loop, we switch to the RELA relocs.  */
10614               irelamid = irela;
10615               if (esdi->rel.hdr != NULL)
10616                 irelamid += (NUM_SHDR_ENTRIES (esdi->rel.hdr)
10617                              * bed->s->int_rels_per_ext_rel);
10618               rel_hash_list = rel_hash;
10619               rela_hash_list = NULL;
10620               last_offset = o->output_offset;
10621               if (!bfd_link_relocatable (flinfo->info))
10622                 last_offset += o->output_section->vma;
10623               for (next_erel = 0; irela < irelaend; irela++, next_erel++)
10624                 {
10625                   unsigned long r_symndx;
10626                   asection *sec;
10627                   Elf_Internal_Sym sym;
10628
10629                   if (next_erel == bed->s->int_rels_per_ext_rel)
10630                     {
10631                       rel_hash++;
10632                       next_erel = 0;
10633                     }
10634
10635                   if (irela == irelamid)
10636                     {
10637                       rel_hash = esdo->rela.hashes + esdo->rela.count;
10638                       rela_hash_list = rel_hash;
10639                       rela_normal = bed->rela_normal;
10640                     }
10641
10642                   irela->r_offset = _bfd_elf_section_offset (output_bfd,
10643                                                              flinfo->info, o,
10644                                                              irela->r_offset);
10645                   if (irela->r_offset >= (bfd_vma) -2)
10646                     {
10647                       /* This is a reloc for a deleted entry or somesuch.
10648                          Turn it into an R_*_NONE reloc, at the same
10649                          offset as the last reloc.  elf_eh_frame.c and
10650                          bfd_elf_discard_info rely on reloc offsets
10651                          being ordered.  */
10652                       irela->r_offset = last_offset;
10653                       irela->r_info = 0;
10654                       irela->r_addend = 0;
10655                       continue;
10656                     }
10657
10658                   irela->r_offset += o->output_offset;
10659
10660                   /* Relocs in an executable have to be virtual addresses.  */
10661                   if (!bfd_link_relocatable (flinfo->info))
10662                     irela->r_offset += o->output_section->vma;
10663
10664                   last_offset = irela->r_offset;
10665
10666                   r_symndx = irela->r_info >> r_sym_shift;
10667                   if (r_symndx == STN_UNDEF)
10668                     continue;
10669
10670                   if (r_symndx >= locsymcount
10671                       || (elf_bad_symtab (input_bfd)
10672                           && flinfo->sections[r_symndx] == NULL))
10673                     {
10674                       struct elf_link_hash_entry *rh;
10675                       unsigned long indx;
10676
10677                       /* This is a reloc against a global symbol.  We
10678                          have not yet output all the local symbols, so
10679                          we do not know the symbol index of any global
10680                          symbol.  We set the rel_hash entry for this
10681                          reloc to point to the global hash table entry
10682                          for this symbol.  The symbol index is then
10683                          set at the end of bfd_elf_final_link.  */
10684                       indx = r_symndx - extsymoff;
10685                       rh = elf_sym_hashes (input_bfd)[indx];
10686                       while (rh->root.type == bfd_link_hash_indirect
10687                              || rh->root.type == bfd_link_hash_warning)
10688                         rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
10689
10690                       /* Setting the index to -2 tells
10691                          elf_link_output_extsym that this symbol is
10692                          used by a reloc.  */
10693                       BFD_ASSERT (rh->indx < 0);
10694                       rh->indx = -2;
10695
10696                       *rel_hash = rh;
10697
10698                       continue;
10699                     }
10700
10701                   /* This is a reloc against a local symbol.  */
10702
10703                   *rel_hash = NULL;
10704                   sym = isymbuf[r_symndx];
10705                   sec = flinfo->sections[r_symndx];
10706                   if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
10707                     {
10708                       /* I suppose the backend ought to fill in the
10709                          section of any STT_SECTION symbol against a
10710                          processor specific section.  */
10711                       r_symndx = STN_UNDEF;
10712                       if (bfd_is_abs_section (sec))
10713                         ;
10714                       else if (sec == NULL || sec->owner == NULL)
10715                         {
10716                           bfd_set_error (bfd_error_bad_value);
10717                           return FALSE;
10718                         }
10719                       else
10720                         {
10721                           asection *osec = sec->output_section;
10722
10723                           /* If we have discarded a section, the output
10724                              section will be the absolute section.  In
10725                              case of discarded SEC_MERGE sections, use
10726                              the kept section.  relocate_section should
10727                              have already handled discarded linkonce
10728                              sections.  */
10729                           if (bfd_is_abs_section (osec)
10730                               && sec->kept_section != NULL
10731                               && sec->kept_section->output_section != NULL)
10732                             {
10733                               osec = sec->kept_section->output_section;
10734                               irela->r_addend -= osec->vma;
10735                             }
10736
10737                           if (!bfd_is_abs_section (osec))
10738                             {
10739                               r_symndx = osec->target_index;
10740                               if (r_symndx == STN_UNDEF)
10741                                 {
10742                                   irela->r_addend += osec->vma;
10743                                   osec = _bfd_nearby_section (output_bfd, osec,
10744                                                               osec->vma);
10745                                   irela->r_addend -= osec->vma;
10746                                   r_symndx = osec->target_index;
10747                                 }
10748                             }
10749                         }
10750
10751                       /* Adjust the addend according to where the
10752                          section winds up in the output section.  */
10753                       if (rela_normal)
10754                         irela->r_addend += sec->output_offset;
10755                     }
10756                   else
10757                     {
10758                       if (flinfo->indices[r_symndx] == -1)
10759                         {
10760                           unsigned long shlink;
10761                           const char *name;
10762                           asection *osec;
10763                           long indx;
10764
10765                           if (flinfo->info->strip == strip_all)
10766                             {
10767                               /* You can't do ld -r -s.  */
10768                               bfd_set_error (bfd_error_invalid_operation);
10769                               return FALSE;
10770                             }
10771
10772                           /* This symbol was skipped earlier, but
10773                              since it is needed by a reloc, we
10774                              must output it now.  */
10775                           shlink = symtab_hdr->sh_link;
10776                           name = (bfd_elf_string_from_elf_section
10777                                   (input_bfd, shlink, sym.st_name));
10778                           if (name == NULL)
10779                             return FALSE;
10780
10781                           osec = sec->output_section;
10782                           sym.st_shndx =
10783                             _bfd_elf_section_from_bfd_section (output_bfd,
10784                                                                osec);
10785                           if (sym.st_shndx == SHN_BAD)
10786                             return FALSE;
10787
10788                           sym.st_value += sec->output_offset;
10789                           if (!bfd_link_relocatable (flinfo->info))
10790                             {
10791                               sym.st_value += osec->vma;
10792                               if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
10793                                 {
10794                                   /* STT_TLS symbols are relative to PT_TLS
10795                                      segment base.  */
10796                                   BFD_ASSERT (elf_hash_table (flinfo->info)
10797                                               ->tls_sec != NULL);
10798                                   sym.st_value -= (elf_hash_table (flinfo->info)
10799                                                    ->tls_sec->vma);
10800                                 }
10801                             }
10802
10803                           indx = bfd_get_symcount (output_bfd);
10804                           ret = elf_link_output_symstrtab (flinfo, name,
10805                                                            &sym, sec,
10806                                                            NULL);
10807                           if (ret == 0)
10808                             return FALSE;
10809                           else if (ret == 1)
10810                             flinfo->indices[r_symndx] = indx;
10811                           else
10812                             abort ();
10813                         }
10814
10815                       r_symndx = flinfo->indices[r_symndx];
10816                     }
10817
10818                   irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
10819                                    | (irela->r_info & r_type_mask));
10820                 }
10821
10822               /* Swap out the relocs.  */
10823               input_rel_hdr = esdi->rel.hdr;
10824               if (input_rel_hdr && input_rel_hdr->sh_size != 0)
10825                 {
10826                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
10827                                                      input_rel_hdr,
10828                                                      internal_relocs,
10829                                                      rel_hash_list))
10830                     return FALSE;
10831                   internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
10832                                       * bed->s->int_rels_per_ext_rel);
10833                   rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
10834                 }
10835
10836               input_rela_hdr = esdi->rela.hdr;
10837               if (input_rela_hdr && input_rela_hdr->sh_size != 0)
10838                 {
10839                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
10840                                                      input_rela_hdr,
10841                                                      internal_relocs,
10842                                                      rela_hash_list))
10843                     return FALSE;
10844                 }
10845             }
10846         }
10847
10848       /* Write out the modified section contents.  */
10849       if (bed->elf_backend_write_section
10850           && (*bed->elf_backend_write_section) (output_bfd, flinfo->info, o,
10851                                                 contents))
10852         {
10853           /* Section written out.  */
10854         }
10855       else switch (o->sec_info_type)
10856         {
10857         case SEC_INFO_TYPE_STABS:
10858           if (! (_bfd_write_section_stabs
10859                  (output_bfd,
10860                   &elf_hash_table (flinfo->info)->stab_info,
10861                   o, &elf_section_data (o)->sec_info, contents)))
10862             return FALSE;
10863           break;
10864         case SEC_INFO_TYPE_MERGE:
10865           if (! _bfd_write_merged_section (output_bfd, o,
10866                                            elf_section_data (o)->sec_info))
10867             return FALSE;
10868           break;
10869         case SEC_INFO_TYPE_EH_FRAME:
10870           {
10871             if (! _bfd_elf_write_section_eh_frame (output_bfd, flinfo->info,
10872                                                    o, contents))
10873               return FALSE;
10874           }
10875           break;
10876         case SEC_INFO_TYPE_EH_FRAME_ENTRY:
10877           {
10878             if (! _bfd_elf_write_section_eh_frame_entry (output_bfd,
10879                                                          flinfo->info,
10880                                                          o, contents))
10881               return FALSE;
10882           }
10883           break;
10884         default:
10885           {
10886             if (! (o->flags & SEC_EXCLUDE))
10887               {
10888                 file_ptr offset = (file_ptr) o->output_offset;
10889                 bfd_size_type todo = o->size;
10890
10891                 offset *= bfd_octets_per_byte (output_bfd);
10892
10893                 if ((o->flags & SEC_ELF_REVERSE_COPY))
10894                   {
10895                     /* Reverse-copy input section to output.  */
10896                     do
10897                       {
10898                         todo -= address_size;
10899                         if (! bfd_set_section_contents (output_bfd,
10900                                                         o->output_section,
10901                                                         contents + todo,
10902                                                         offset,
10903                                                         address_size))
10904                           return FALSE;
10905                         if (todo == 0)
10906                           break;
10907                         offset += address_size;
10908                       }
10909                     while (1);
10910                   }
10911                 else if (! bfd_set_section_contents (output_bfd,
10912                                                      o->output_section,
10913                                                      contents,
10914                                                      offset, todo))
10915                   return FALSE;
10916               }
10917           }
10918           break;
10919         }
10920     }
10921
10922   return TRUE;
10923 }
10924
10925 /* Generate a reloc when linking an ELF file.  This is a reloc
10926    requested by the linker, and does not come from any input file.  This
10927    is used to build constructor and destructor tables when linking
10928    with -Ur.  */
10929
10930 static bfd_boolean
10931 elf_reloc_link_order (bfd *output_bfd,
10932                       struct bfd_link_info *info,
10933                       asection *output_section,
10934                       struct bfd_link_order *link_order)
10935 {
10936   reloc_howto_type *howto;
10937   long indx;
10938   bfd_vma offset;
10939   bfd_vma addend;
10940   struct bfd_elf_section_reloc_data *reldata;
10941   struct elf_link_hash_entry **rel_hash_ptr;
10942   Elf_Internal_Shdr *rel_hdr;
10943   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10944   Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
10945   bfd_byte *erel;
10946   unsigned int i;
10947   struct bfd_elf_section_data *esdo = elf_section_data (output_section);
10948
10949   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
10950   if (howto == NULL)
10951     {
10952       bfd_set_error (bfd_error_bad_value);
10953       return FALSE;
10954     }
10955
10956   addend = link_order->u.reloc.p->addend;
10957
10958   if (esdo->rel.hdr)
10959     reldata = &esdo->rel;
10960   else if (esdo->rela.hdr)
10961     reldata = &esdo->rela;
10962   else
10963     {
10964       reldata = NULL;
10965       BFD_ASSERT (0);
10966     }
10967
10968   /* Figure out the symbol index.  */
10969   rel_hash_ptr = reldata->hashes + reldata->count;
10970   if (link_order->type == bfd_section_reloc_link_order)
10971     {
10972       indx = link_order->u.reloc.p->u.section->target_index;
10973       BFD_ASSERT (indx != 0);
10974       *rel_hash_ptr = NULL;
10975     }
10976   else
10977     {
10978       struct elf_link_hash_entry *h;
10979
10980       /* Treat a reloc against a defined symbol as though it were
10981          actually against the section.  */
10982       h = ((struct elf_link_hash_entry *)
10983            bfd_wrapped_link_hash_lookup (output_bfd, info,
10984                                          link_order->u.reloc.p->u.name,
10985                                          FALSE, FALSE, TRUE));
10986       if (h != NULL
10987           && (h->root.type == bfd_link_hash_defined
10988               || h->root.type == bfd_link_hash_defweak))
10989         {
10990           asection *section;
10991
10992           section = h->root.u.def.section;
10993           indx = section->output_section->target_index;
10994           *rel_hash_ptr = NULL;
10995           /* It seems that we ought to add the symbol value to the
10996              addend here, but in practice it has already been added
10997              because it was passed to constructor_callback.  */
10998           addend += section->output_section->vma + section->output_offset;
10999         }
11000       else if (h != NULL)
11001         {
11002           /* Setting the index to -2 tells elf_link_output_extsym that
11003              this symbol is used by a reloc.  */
11004           h->indx = -2;
11005           *rel_hash_ptr = h;
11006           indx = 0;
11007         }
11008       else
11009         {
11010           (*info->callbacks->unattached_reloc)
11011             (info, link_order->u.reloc.p->u.name, NULL, NULL, 0);
11012           indx = 0;
11013         }
11014     }
11015
11016   /* If this is an inplace reloc, we must write the addend into the
11017      object file.  */
11018   if (howto->partial_inplace && addend != 0)
11019     {
11020       bfd_size_type size;
11021       bfd_reloc_status_type rstat;
11022       bfd_byte *buf;
11023       bfd_boolean ok;
11024       const char *sym_name;
11025
11026       size = (bfd_size_type) bfd_get_reloc_size (howto);
11027       buf = (bfd_byte *) bfd_zmalloc (size);
11028       if (buf == NULL && size != 0)
11029         return FALSE;
11030       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
11031       switch (rstat)
11032         {
11033         case bfd_reloc_ok:
11034           break;
11035
11036         default:
11037         case bfd_reloc_outofrange:
11038           abort ();
11039
11040         case bfd_reloc_overflow:
11041           if (link_order->type == bfd_section_reloc_link_order)
11042             sym_name = bfd_section_name (output_bfd,
11043                                          link_order->u.reloc.p->u.section);
11044           else
11045             sym_name = link_order->u.reloc.p->u.name;
11046           (*info->callbacks->reloc_overflow) (info, NULL, sym_name,
11047                                               howto->name, addend, NULL, NULL,
11048                                               (bfd_vma) 0);
11049           break;
11050         }
11051
11052       ok = bfd_set_section_contents (output_bfd, output_section, buf,
11053                                      link_order->offset
11054                                      * bfd_octets_per_byte (output_bfd),
11055                                      size);
11056       free (buf);
11057       if (! ok)
11058         return FALSE;
11059     }
11060
11061   /* The address of a reloc is relative to the section in a
11062      relocatable file, and is a virtual address in an executable
11063      file.  */
11064   offset = link_order->offset;
11065   if (! bfd_link_relocatable (info))
11066     offset += output_section->vma;
11067
11068   for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
11069     {
11070       irel[i].r_offset = offset;
11071       irel[i].r_info = 0;
11072       irel[i].r_addend = 0;
11073     }
11074   if (bed->s->arch_size == 32)
11075     irel[0].r_info = ELF32_R_INFO (indx, howto->type);
11076   else
11077     irel[0].r_info = ELF64_R_INFO (indx, howto->type);
11078
11079   rel_hdr = reldata->hdr;
11080   erel = rel_hdr->contents;
11081   if (rel_hdr->sh_type == SHT_REL)
11082     {
11083       erel += reldata->count * bed->s->sizeof_rel;
11084       (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
11085     }
11086   else
11087     {
11088       irel[0].r_addend = addend;
11089       erel += reldata->count * bed->s->sizeof_rela;
11090       (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
11091     }
11092
11093   ++reldata->count;
11094
11095   return TRUE;
11096 }
11097
11098
11099 /* Get the output vma of the section pointed to by the sh_link field.  */
11100
11101 static bfd_vma
11102 elf_get_linked_section_vma (struct bfd_link_order *p)
11103 {
11104   Elf_Internal_Shdr **elf_shdrp;
11105   asection *s;
11106   int elfsec;
11107
11108   s = p->u.indirect.section;
11109   elf_shdrp = elf_elfsections (s->owner);
11110   elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
11111   elfsec = elf_shdrp[elfsec]->sh_link;
11112   /* PR 290:
11113      The Intel C compiler generates SHT_IA_64_UNWIND with
11114      SHF_LINK_ORDER.  But it doesn't set the sh_link or
11115      sh_info fields.  Hence we could get the situation
11116      where elfsec is 0.  */
11117   if (elfsec == 0)
11118     {
11119       const struct elf_backend_data *bed
11120         = get_elf_backend_data (s->owner);
11121       if (bed->link_order_error_handler)
11122         bed->link_order_error_handler
11123           /* xgettext:c-format */
11124           (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
11125       return 0;
11126     }
11127   else
11128     {
11129       s = elf_shdrp[elfsec]->bfd_section;
11130       return s->output_section->vma + s->output_offset;
11131     }
11132 }
11133
11134
11135 /* Compare two sections based on the locations of the sections they are
11136    linked to.  Used by elf_fixup_link_order.  */
11137
11138 static int
11139 compare_link_order (const void * a, const void * b)
11140 {
11141   bfd_vma apos;
11142   bfd_vma bpos;
11143
11144   apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
11145   bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
11146   if (apos < bpos)
11147     return -1;
11148   return apos > bpos;
11149 }
11150
11151
11152 /* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
11153    order as their linked sections.  Returns false if this could not be done
11154    because an output section includes both ordered and unordered
11155    sections.  Ideally we'd do this in the linker proper.  */
11156
11157 static bfd_boolean
11158 elf_fixup_link_order (bfd *abfd, asection *o)
11159 {
11160   int seen_linkorder;
11161   int seen_other;
11162   int n;
11163   struct bfd_link_order *p;
11164   bfd *sub;
11165   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11166   unsigned elfsec;
11167   struct bfd_link_order **sections;
11168   asection *s, *other_sec, *linkorder_sec;
11169   bfd_vma offset;
11170
11171   other_sec = NULL;
11172   linkorder_sec = NULL;
11173   seen_other = 0;
11174   seen_linkorder = 0;
11175   for (p = o->map_head.link_order; p != NULL; p = p->next)
11176     {
11177       if (p->type == bfd_indirect_link_order)
11178         {
11179           s = p->u.indirect.section;
11180           sub = s->owner;
11181           if (bfd_get_flavour (sub) == bfd_target_elf_flavour
11182               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
11183               && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
11184               && elfsec < elf_numsections (sub)
11185               && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER
11186               && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub))
11187             {
11188               seen_linkorder++;
11189               linkorder_sec = s;
11190             }
11191           else
11192             {
11193               seen_other++;
11194               other_sec = s;
11195             }
11196         }
11197       else
11198         seen_other++;
11199
11200       if (seen_other && seen_linkorder)
11201         {
11202           if (other_sec && linkorder_sec)
11203             _bfd_error_handler
11204               /* xgettext:c-format */
11205               (_("%A has both ordered [`%A' in %B] "
11206                  "and unordered [`%A' in %B] sections"),
11207                o, linkorder_sec, linkorder_sec->owner,
11208                other_sec, other_sec->owner);
11209           else
11210             _bfd_error_handler
11211               (_("%A has both ordered and unordered sections"), o);
11212           bfd_set_error (bfd_error_bad_value);
11213           return FALSE;
11214         }
11215     }
11216
11217   if (!seen_linkorder)
11218     return TRUE;
11219
11220   sections = (struct bfd_link_order **)
11221     bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *));
11222   if (sections == NULL)
11223     return FALSE;
11224   seen_linkorder = 0;
11225
11226   for (p = o->map_head.link_order; p != NULL; p = p->next)
11227     {
11228       sections[seen_linkorder++] = p;
11229     }
11230   /* Sort the input sections in the order of their linked section.  */
11231   qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
11232          compare_link_order);
11233
11234   /* Change the offsets of the sections.  */
11235   offset = 0;
11236   for (n = 0; n < seen_linkorder; n++)
11237     {
11238       s = sections[n]->u.indirect.section;
11239       offset &= ~(bfd_vma) 0 << s->alignment_power;
11240       s->output_offset = offset / bfd_octets_per_byte (abfd);
11241       sections[n]->offset = offset;
11242       offset += sections[n]->size;
11243     }
11244
11245   free (sections);
11246   return TRUE;
11247 }
11248
11249 /* Generate an import library in INFO->implib_bfd from symbols in ABFD.
11250    Returns TRUE upon success, FALSE otherwise.  */
11251
11252 static bfd_boolean
11253 elf_output_implib (bfd *abfd, struct bfd_link_info *info)
11254 {
11255   bfd_boolean ret = FALSE;
11256   bfd *implib_bfd;
11257   const struct elf_backend_data *bed;
11258   flagword flags;
11259   enum bfd_architecture arch;
11260   unsigned int mach;
11261   asymbol **sympp = NULL;
11262   long symsize;
11263   long symcount;
11264   long src_count;
11265   elf_symbol_type *osymbuf;
11266
11267   implib_bfd = info->out_implib_bfd;
11268   bed = get_elf_backend_data (abfd);
11269
11270   if (!bfd_set_format (implib_bfd, bfd_object))
11271     return FALSE;
11272
11273   flags = bfd_get_file_flags (abfd);
11274   flags &= ~HAS_RELOC;
11275   if (!bfd_set_start_address (implib_bfd, 0)
11276       || !bfd_set_file_flags (implib_bfd, flags))
11277     return FALSE;
11278
11279   /* Copy architecture of output file to import library file.  */
11280   arch = bfd_get_arch (abfd);
11281   mach = bfd_get_mach (abfd);
11282   if (!bfd_set_arch_mach (implib_bfd, arch, mach)
11283       && (abfd->target_defaulted
11284           || bfd_get_arch (abfd) != bfd_get_arch (implib_bfd)))
11285     return FALSE;
11286
11287   /* Get symbol table size.  */
11288   symsize = bfd_get_symtab_upper_bound (abfd);
11289   if (symsize < 0)
11290     return FALSE;
11291
11292   /* Read in the symbol table.  */
11293   sympp = (asymbol **) xmalloc (symsize);
11294   symcount = bfd_canonicalize_symtab (abfd, sympp);
11295   if (symcount < 0)
11296     goto free_sym_buf;
11297
11298   /* Allow the BFD backend to copy any private header data it
11299      understands from the output BFD to the import library BFD.  */
11300   if (! bfd_copy_private_header_data (abfd, implib_bfd))
11301     goto free_sym_buf;
11302
11303   /* Filter symbols to appear in the import library.  */
11304   if (bed->elf_backend_filter_implib_symbols)
11305     symcount = bed->elf_backend_filter_implib_symbols (abfd, info, sympp,
11306                                                        symcount);
11307   else
11308     symcount = _bfd_elf_filter_global_symbols (abfd, info, sympp, symcount);
11309   if (symcount == 0)
11310     {
11311       bfd_set_error (bfd_error_no_symbols);
11312       _bfd_error_handler (_("%B: no symbol found for import library"),
11313                           implib_bfd);
11314       goto free_sym_buf;
11315     }
11316
11317
11318   /* Make symbols absolute.  */
11319   osymbuf = (elf_symbol_type *) bfd_alloc2 (implib_bfd, symcount,
11320                                             sizeof (*osymbuf));
11321   for (src_count = 0; src_count < symcount; src_count++)
11322     {
11323       memcpy (&osymbuf[src_count], (elf_symbol_type *) sympp[src_count],
11324               sizeof (*osymbuf));
11325       osymbuf[src_count].symbol.section = bfd_abs_section_ptr;
11326       osymbuf[src_count].internal_elf_sym.st_shndx = SHN_ABS;
11327       osymbuf[src_count].symbol.value += sympp[src_count]->section->vma;
11328       osymbuf[src_count].internal_elf_sym.st_value =
11329         osymbuf[src_count].symbol.value;
11330       sympp[src_count] = &osymbuf[src_count].symbol;
11331     }
11332
11333   bfd_set_symtab (implib_bfd, sympp, symcount);
11334
11335   /* Allow the BFD backend to copy any private data it understands
11336      from the output BFD to the import library BFD.  This is done last
11337      to permit the routine to look at the filtered symbol table.  */
11338   if (! bfd_copy_private_bfd_data (abfd, implib_bfd))
11339     goto free_sym_buf;
11340
11341   if (!bfd_close (implib_bfd))
11342     goto free_sym_buf;
11343
11344   ret = TRUE;
11345
11346 free_sym_buf:
11347   free (sympp);
11348   return ret;
11349 }
11350
11351 static void
11352 elf_final_link_free (bfd *obfd, struct elf_final_link_info *flinfo)
11353 {
11354   asection *o;
11355
11356   if (flinfo->symstrtab != NULL)
11357     _bfd_elf_strtab_free (flinfo->symstrtab);
11358   if (flinfo->contents != NULL)
11359     free (flinfo->contents);
11360   if (flinfo->external_relocs != NULL)
11361     free (flinfo->external_relocs);
11362   if (flinfo->internal_relocs != NULL)
11363     free (flinfo->internal_relocs);
11364   if (flinfo->external_syms != NULL)
11365     free (flinfo->external_syms);
11366   if (flinfo->locsym_shndx != NULL)
11367     free (flinfo->locsym_shndx);
11368   if (flinfo->internal_syms != NULL)
11369     free (flinfo->internal_syms);
11370   if (flinfo->indices != NULL)
11371     free (flinfo->indices);
11372   if (flinfo->sections != NULL)
11373     free (flinfo->sections);
11374   if (flinfo->symshndxbuf != NULL)
11375     free (flinfo->symshndxbuf);
11376   for (o = obfd->sections; o != NULL; o = o->next)
11377     {
11378       struct bfd_elf_section_data *esdo = elf_section_data (o);
11379       if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL)
11380         free (esdo->rel.hashes);
11381       if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL)
11382         free (esdo->rela.hashes);
11383     }
11384 }
11385
11386 /* Do the final step of an ELF link.  */
11387
11388 bfd_boolean
11389 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
11390 {
11391   bfd_boolean dynamic;
11392   bfd_boolean emit_relocs;
11393   bfd *dynobj;
11394   struct elf_final_link_info flinfo;
11395   asection *o;
11396   struct bfd_link_order *p;
11397   bfd *sub;
11398   bfd_size_type max_contents_size;
11399   bfd_size_type max_external_reloc_size;
11400   bfd_size_type max_internal_reloc_count;
11401   bfd_size_type max_sym_count;
11402   bfd_size_type max_sym_shndx_count;
11403   Elf_Internal_Sym elfsym;
11404   unsigned int i;
11405   Elf_Internal_Shdr *symtab_hdr;
11406   Elf_Internal_Shdr *symtab_shndx_hdr;
11407   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11408   struct elf_outext_info eoinfo;
11409   bfd_boolean merged;
11410   size_t relativecount = 0;
11411   asection *reldyn = 0;
11412   bfd_size_type amt;
11413   asection *attr_section = NULL;
11414   bfd_vma attr_size = 0;
11415   const char *std_attrs_section;
11416   struct elf_link_hash_table *htab = elf_hash_table (info);
11417
11418   if (!is_elf_hash_table (htab))
11419     return FALSE;
11420
11421   if (bfd_link_pic (info))
11422     abfd->flags |= DYNAMIC;
11423
11424   dynamic = htab->dynamic_sections_created;
11425   dynobj = htab->dynobj;
11426
11427   emit_relocs = (bfd_link_relocatable (info)
11428                  || info->emitrelocations);
11429
11430   flinfo.info = info;
11431   flinfo.output_bfd = abfd;
11432   flinfo.symstrtab = _bfd_elf_strtab_init ();
11433   if (flinfo.symstrtab == NULL)
11434     return FALSE;
11435
11436   if (! dynamic)
11437     {
11438       flinfo.hash_sec = NULL;
11439       flinfo.symver_sec = NULL;
11440     }
11441   else
11442     {
11443       flinfo.hash_sec = bfd_get_linker_section (dynobj, ".hash");
11444       /* Note that dynsym_sec can be NULL (on VMS).  */
11445       flinfo.symver_sec = bfd_get_linker_section (dynobj, ".gnu.version");
11446       /* Note that it is OK if symver_sec is NULL.  */
11447     }
11448
11449   flinfo.contents = NULL;
11450   flinfo.external_relocs = NULL;
11451   flinfo.internal_relocs = NULL;
11452   flinfo.external_syms = NULL;
11453   flinfo.locsym_shndx = NULL;
11454   flinfo.internal_syms = NULL;
11455   flinfo.indices = NULL;
11456   flinfo.sections = NULL;
11457   flinfo.symshndxbuf = NULL;
11458   flinfo.filesym_count = 0;
11459
11460   /* The object attributes have been merged.  Remove the input
11461      sections from the link, and set the contents of the output
11462      secton.  */
11463   std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
11464   for (o = abfd->sections; o != NULL; o = o->next)
11465     {
11466       if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
11467           || strcmp (o->name, ".gnu.attributes") == 0)
11468         {
11469           for (p = o->map_head.link_order; p != NULL; p = p->next)
11470             {
11471               asection *input_section;
11472
11473               if (p->type != bfd_indirect_link_order)
11474                 continue;
11475               input_section = p->u.indirect.section;
11476               /* Hack: reset the SEC_HAS_CONTENTS flag so that
11477                  elf_link_input_bfd ignores this section.  */
11478               input_section->flags &= ~SEC_HAS_CONTENTS;
11479             }
11480
11481           attr_size = bfd_elf_obj_attr_size (abfd);
11482           if (attr_size)
11483             {
11484               bfd_set_section_size (abfd, o, attr_size);
11485               attr_section = o;
11486               /* Skip this section later on.  */
11487               o->map_head.link_order = NULL;
11488             }
11489           else
11490             o->flags |= SEC_EXCLUDE;
11491         }
11492     }
11493
11494   /* Count up the number of relocations we will output for each output
11495      section, so that we know the sizes of the reloc sections.  We
11496      also figure out some maximum sizes.  */
11497   max_contents_size = 0;
11498   max_external_reloc_size = 0;
11499   max_internal_reloc_count = 0;
11500   max_sym_count = 0;
11501   max_sym_shndx_count = 0;
11502   merged = FALSE;
11503   for (o = abfd->sections; o != NULL; o = o->next)
11504     {
11505       struct bfd_elf_section_data *esdo = elf_section_data (o);
11506       o->reloc_count = 0;
11507
11508       for (p = o->map_head.link_order; p != NULL; p = p->next)
11509         {
11510           unsigned int reloc_count = 0;
11511           unsigned int additional_reloc_count = 0;
11512           struct bfd_elf_section_data *esdi = NULL;
11513
11514           if (p->type == bfd_section_reloc_link_order
11515               || p->type == bfd_symbol_reloc_link_order)
11516             reloc_count = 1;
11517           else if (p->type == bfd_indirect_link_order)
11518             {
11519               asection *sec;
11520
11521               sec = p->u.indirect.section;
11522
11523               /* Mark all sections which are to be included in the
11524                  link.  This will normally be every section.  We need
11525                  to do this so that we can identify any sections which
11526                  the linker has decided to not include.  */
11527               sec->linker_mark = TRUE;
11528
11529               if (sec->flags & SEC_MERGE)
11530                 merged = TRUE;
11531
11532               if (sec->rawsize > max_contents_size)
11533                 max_contents_size = sec->rawsize;
11534               if (sec->size > max_contents_size)
11535                 max_contents_size = sec->size;
11536
11537               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
11538                   && (sec->owner->flags & DYNAMIC) == 0)
11539                 {
11540                   size_t sym_count;
11541
11542                   /* We are interested in just local symbols, not all
11543                      symbols.  */
11544                   if (elf_bad_symtab (sec->owner))
11545                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
11546                                  / bed->s->sizeof_sym);
11547                   else
11548                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
11549
11550                   if (sym_count > max_sym_count)
11551                     max_sym_count = sym_count;
11552
11553                   if (sym_count > max_sym_shndx_count
11554                       && elf_symtab_shndx_list (sec->owner) != NULL)
11555                     max_sym_shndx_count = sym_count;
11556
11557                   if (esdo->this_hdr.sh_type == SHT_REL
11558                       || esdo->this_hdr.sh_type == SHT_RELA)
11559                     /* Some backends use reloc_count in relocation sections
11560                        to count particular types of relocs.  Of course,
11561                        reloc sections themselves can't have relocations.  */
11562                     ;
11563                   else if (emit_relocs)
11564                     {
11565                       reloc_count = sec->reloc_count;
11566                       if (bed->elf_backend_count_additional_relocs)
11567                         {
11568                           int c;
11569                           c = (*bed->elf_backend_count_additional_relocs) (sec);
11570                           additional_reloc_count += c;
11571                         }
11572                     }
11573                   else if (bed->elf_backend_count_relocs)
11574                     reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
11575
11576                   esdi = elf_section_data (sec);
11577
11578                   if ((sec->flags & SEC_RELOC) != 0)
11579                     {
11580                       size_t ext_size = 0;
11581
11582                       if (esdi->rel.hdr != NULL)
11583                         ext_size = esdi->rel.hdr->sh_size;
11584                       if (esdi->rela.hdr != NULL)
11585                         ext_size += esdi->rela.hdr->sh_size;
11586
11587                       if (ext_size > max_external_reloc_size)
11588                         max_external_reloc_size = ext_size;
11589                       if (sec->reloc_count > max_internal_reloc_count)
11590                         max_internal_reloc_count = sec->reloc_count;
11591                     }
11592                 }
11593             }
11594
11595           if (reloc_count == 0)
11596             continue;
11597
11598           reloc_count += additional_reloc_count;
11599           o->reloc_count += reloc_count;
11600
11601           if (p->type == bfd_indirect_link_order && emit_relocs)
11602             {
11603               if (esdi->rel.hdr)
11604                 {
11605                   esdo->rel.count += NUM_SHDR_ENTRIES (esdi->rel.hdr);
11606                   esdo->rel.count += additional_reloc_count;
11607                 }
11608               if (esdi->rela.hdr)
11609                 {
11610                   esdo->rela.count += NUM_SHDR_ENTRIES (esdi->rela.hdr);
11611                   esdo->rela.count += additional_reloc_count;
11612                 }
11613             }
11614           else
11615             {
11616               if (o->use_rela_p)
11617                 esdo->rela.count += reloc_count;
11618               else
11619                 esdo->rel.count += reloc_count;
11620             }
11621         }
11622
11623       if (o->reloc_count > 0)
11624         o->flags |= SEC_RELOC;
11625       else
11626         {
11627           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
11628              set it (this is probably a bug) and if it is set
11629              assign_section_numbers will create a reloc section.  */
11630           o->flags &=~ SEC_RELOC;
11631         }
11632
11633       /* If the SEC_ALLOC flag is not set, force the section VMA to
11634          zero.  This is done in elf_fake_sections as well, but forcing
11635          the VMA to 0 here will ensure that relocs against these
11636          sections are handled correctly.  */
11637       if ((o->flags & SEC_ALLOC) == 0
11638           && ! o->user_set_vma)
11639         o->vma = 0;
11640     }
11641
11642   if (! bfd_link_relocatable (info) && merged)
11643     elf_link_hash_traverse (htab, _bfd_elf_link_sec_merge_syms, abfd);
11644
11645   /* Figure out the file positions for everything but the symbol table
11646      and the relocs.  We set symcount to force assign_section_numbers
11647      to create a symbol table.  */
11648   bfd_get_symcount (abfd) = info->strip != strip_all || emit_relocs;
11649   BFD_ASSERT (! abfd->output_has_begun);
11650   if (! _bfd_elf_compute_section_file_positions (abfd, info))
11651     goto error_return;
11652
11653   /* Set sizes, and assign file positions for reloc sections.  */
11654   for (o = abfd->sections; o != NULL; o = o->next)
11655     {
11656       struct bfd_elf_section_data *esdo = elf_section_data (o);
11657       if ((o->flags & SEC_RELOC) != 0)
11658         {
11659           if (esdo->rel.hdr
11660               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rel)))
11661             goto error_return;
11662
11663           if (esdo->rela.hdr
11664               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rela)))
11665             goto error_return;
11666         }
11667
11668       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
11669          to count upwards while actually outputting the relocations.  */
11670       esdo->rel.count = 0;
11671       esdo->rela.count = 0;
11672
11673       if (esdo->this_hdr.sh_offset == (file_ptr) -1)
11674         {
11675           /* Cache the section contents so that they can be compressed
11676              later.  Use bfd_malloc since it will be freed by
11677              bfd_compress_section_contents.  */
11678           unsigned char *contents = esdo->this_hdr.contents;
11679           if ((o->flags & SEC_ELF_COMPRESS) == 0 || contents != NULL)
11680             abort ();
11681           contents
11682             = (unsigned char *) bfd_malloc (esdo->this_hdr.sh_size);
11683           if (contents == NULL)
11684             goto error_return;
11685           esdo->this_hdr.contents = contents;
11686         }
11687     }
11688
11689   /* We have now assigned file positions for all the sections except
11690      .symtab, .strtab, and non-loaded reloc sections.  We start the
11691      .symtab section at the current file position, and write directly
11692      to it.  We build the .strtab section in memory.  */
11693   bfd_get_symcount (abfd) = 0;
11694   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11695   /* sh_name is set in prep_headers.  */
11696   symtab_hdr->sh_type = SHT_SYMTAB;
11697   /* sh_flags, sh_addr and sh_size all start off zero.  */
11698   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
11699   /* sh_link is set in assign_section_numbers.  */
11700   /* sh_info is set below.  */
11701   /* sh_offset is set just below.  */
11702   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
11703
11704   if (max_sym_count < 20)
11705     max_sym_count = 20;
11706   htab->strtabsize = max_sym_count;
11707   amt = max_sym_count * sizeof (struct elf_sym_strtab);
11708   htab->strtab = (struct elf_sym_strtab *) bfd_malloc (amt);
11709   if (htab->strtab == NULL)
11710     goto error_return;
11711   /* The real buffer will be allocated in elf_link_swap_symbols_out.  */
11712   flinfo.symshndxbuf
11713     = (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF)
11714        ? (Elf_External_Sym_Shndx *) -1 : NULL);
11715
11716   if (info->strip != strip_all || emit_relocs)
11717     {
11718       file_ptr off = elf_next_file_pos (abfd);
11719
11720       _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
11721
11722       /* Note that at this point elf_next_file_pos (abfd) is
11723          incorrect.  We do not yet know the size of the .symtab section.
11724          We correct next_file_pos below, after we do know the size.  */
11725
11726       /* Start writing out the symbol table.  The first symbol is always a
11727          dummy symbol.  */
11728       elfsym.st_value = 0;
11729       elfsym.st_size = 0;
11730       elfsym.st_info = 0;
11731       elfsym.st_other = 0;
11732       elfsym.st_shndx = SHN_UNDEF;
11733       elfsym.st_target_internal = 0;
11734       if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym,
11735                                      bfd_und_section_ptr, NULL) != 1)
11736         goto error_return;
11737
11738       /* Output a symbol for each section.  We output these even if we are
11739          discarding local symbols, since they are used for relocs.  These
11740          symbols have no names.  We store the index of each one in the
11741          index field of the section, so that we can find it again when
11742          outputting relocs.  */
11743
11744       elfsym.st_size = 0;
11745       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
11746       elfsym.st_other = 0;
11747       elfsym.st_value = 0;
11748       elfsym.st_target_internal = 0;
11749       for (i = 1; i < elf_numsections (abfd); i++)
11750         {
11751           o = bfd_section_from_elf_index (abfd, i);
11752           if (o != NULL)
11753             {
11754               o->target_index = bfd_get_symcount (abfd);
11755               elfsym.st_shndx = i;
11756               if (!bfd_link_relocatable (info))
11757                 elfsym.st_value = o->vma;
11758               if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym, o,
11759                                              NULL) != 1)
11760                 goto error_return;
11761             }
11762         }
11763     }
11764
11765   /* Allocate some memory to hold information read in from the input
11766      files.  */
11767   if (max_contents_size != 0)
11768     {
11769       flinfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
11770       if (flinfo.contents == NULL)
11771         goto error_return;
11772     }
11773
11774   if (max_external_reloc_size != 0)
11775     {
11776       flinfo.external_relocs = bfd_malloc (max_external_reloc_size);
11777       if (flinfo.external_relocs == NULL)
11778         goto error_return;
11779     }
11780
11781   if (max_internal_reloc_count != 0)
11782     {
11783       amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
11784       amt *= sizeof (Elf_Internal_Rela);
11785       flinfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
11786       if (flinfo.internal_relocs == NULL)
11787         goto error_return;
11788     }
11789
11790   if (max_sym_count != 0)
11791     {
11792       amt = max_sym_count * bed->s->sizeof_sym;
11793       flinfo.external_syms = (bfd_byte *) bfd_malloc (amt);
11794       if (flinfo.external_syms == NULL)
11795         goto error_return;
11796
11797       amt = max_sym_count * sizeof (Elf_Internal_Sym);
11798       flinfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
11799       if (flinfo.internal_syms == NULL)
11800         goto error_return;
11801
11802       amt = max_sym_count * sizeof (long);
11803       flinfo.indices = (long int *) bfd_malloc (amt);
11804       if (flinfo.indices == NULL)
11805         goto error_return;
11806
11807       amt = max_sym_count * sizeof (asection *);
11808       flinfo.sections = (asection **) bfd_malloc (amt);
11809       if (flinfo.sections == NULL)
11810         goto error_return;
11811     }
11812
11813   if (max_sym_shndx_count != 0)
11814     {
11815       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
11816       flinfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
11817       if (flinfo.locsym_shndx == NULL)
11818         goto error_return;
11819     }
11820
11821   if (htab->tls_sec)
11822     {
11823       bfd_vma base, end = 0;
11824       asection *sec;
11825
11826       for (sec = htab->tls_sec;
11827            sec && (sec->flags & SEC_THREAD_LOCAL);
11828            sec = sec->next)
11829         {
11830           bfd_size_type size = sec->size;
11831
11832           if (size == 0
11833               && (sec->flags & SEC_HAS_CONTENTS) == 0)
11834             {
11835               struct bfd_link_order *ord = sec->map_tail.link_order;
11836
11837               if (ord != NULL)
11838                 size = ord->offset + ord->size;
11839             }
11840           end = sec->vma + size;
11841         }
11842       base = htab->tls_sec->vma;
11843       /* Only align end of TLS section if static TLS doesn't have special
11844          alignment requirements.  */
11845       if (bed->static_tls_alignment == 1)
11846         end = align_power (end, htab->tls_sec->alignment_power);
11847       htab->tls_size = end - base;
11848     }
11849
11850   /* Reorder SHF_LINK_ORDER sections.  */
11851   for (o = abfd->sections; o != NULL; o = o->next)
11852     {
11853       if (!elf_fixup_link_order (abfd, o))
11854         return FALSE;
11855     }
11856
11857   if (!_bfd_elf_fixup_eh_frame_hdr (info))
11858     return FALSE;
11859
11860   /* Since ELF permits relocations to be against local symbols, we
11861      must have the local symbols available when we do the relocations.
11862      Since we would rather only read the local symbols once, and we
11863      would rather not keep them in memory, we handle all the
11864      relocations for a single input file at the same time.
11865
11866      Unfortunately, there is no way to know the total number of local
11867      symbols until we have seen all of them, and the local symbol
11868      indices precede the global symbol indices.  This means that when
11869      we are generating relocatable output, and we see a reloc against
11870      a global symbol, we can not know the symbol index until we have
11871      finished examining all the local symbols to see which ones we are
11872      going to output.  To deal with this, we keep the relocations in
11873      memory, and don't output them until the end of the link.  This is
11874      an unfortunate waste of memory, but I don't see a good way around
11875      it.  Fortunately, it only happens when performing a relocatable
11876      link, which is not the common case.  FIXME: If keep_memory is set
11877      we could write the relocs out and then read them again; I don't
11878      know how bad the memory loss will be.  */
11879
11880   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
11881     sub->output_has_begun = FALSE;
11882   for (o = abfd->sections; o != NULL; o = o->next)
11883     {
11884       for (p = o->map_head.link_order; p != NULL; p = p->next)
11885         {
11886           if (p->type == bfd_indirect_link_order
11887               && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
11888                   == bfd_target_elf_flavour)
11889               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
11890             {
11891               if (! sub->output_has_begun)
11892                 {
11893                   if (! elf_link_input_bfd (&flinfo, sub))
11894                     goto error_return;
11895                   sub->output_has_begun = TRUE;
11896                 }
11897             }
11898           else if (p->type == bfd_section_reloc_link_order
11899                    || p->type == bfd_symbol_reloc_link_order)
11900             {
11901               if (! elf_reloc_link_order (abfd, info, o, p))
11902                 goto error_return;
11903             }
11904           else
11905             {
11906               if (! _bfd_default_link_order (abfd, info, o, p))
11907                 {
11908                   if (p->type == bfd_indirect_link_order
11909                       && (bfd_get_flavour (sub)
11910                           == bfd_target_elf_flavour)
11911                       && (elf_elfheader (sub)->e_ident[EI_CLASS]
11912                           != bed->s->elfclass))
11913                     {
11914                       const char *iclass, *oclass;
11915
11916                       switch (bed->s->elfclass)
11917                         {
11918                         case ELFCLASS64: oclass = "ELFCLASS64"; break;
11919                         case ELFCLASS32: oclass = "ELFCLASS32"; break;
11920                         case ELFCLASSNONE: oclass = "ELFCLASSNONE"; break;
11921                         default: abort ();
11922                         }
11923
11924                       switch (elf_elfheader (sub)->e_ident[EI_CLASS])
11925                         {
11926                         case ELFCLASS64: iclass = "ELFCLASS64"; break;
11927                         case ELFCLASS32: iclass = "ELFCLASS32"; break;
11928                         case ELFCLASSNONE: iclass = "ELFCLASSNONE"; break;
11929                         default: abort ();
11930                         }
11931
11932                       bfd_set_error (bfd_error_wrong_format);
11933                       _bfd_error_handler
11934                         /* xgettext:c-format */
11935                         (_("%B: file class %s incompatible with %s"),
11936                          sub, iclass, oclass);
11937                     }
11938
11939                   goto error_return;
11940                 }
11941             }
11942         }
11943     }
11944
11945   /* Free symbol buffer if needed.  */
11946   if (!info->reduce_memory_overheads)
11947     {
11948       for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
11949         if (bfd_get_flavour (sub) == bfd_target_elf_flavour
11950             && elf_tdata (sub)->symbuf)
11951           {
11952             free (elf_tdata (sub)->symbuf);
11953             elf_tdata (sub)->symbuf = NULL;
11954           }
11955     }
11956
11957   /* Output any global symbols that got converted to local in a
11958      version script or due to symbol visibility.  We do this in a
11959      separate step since ELF requires all local symbols to appear
11960      prior to any global symbols.  FIXME: We should only do this if
11961      some global symbols were, in fact, converted to become local.
11962      FIXME: Will this work correctly with the Irix 5 linker?  */
11963   eoinfo.failed = FALSE;
11964   eoinfo.flinfo = &flinfo;
11965   eoinfo.localsyms = TRUE;
11966   eoinfo.file_sym_done = FALSE;
11967   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
11968   if (eoinfo.failed)
11969     return FALSE;
11970
11971   /* If backend needs to output some local symbols not present in the hash
11972      table, do it now.  */
11973   if (bed->elf_backend_output_arch_local_syms
11974       && (info->strip != strip_all || emit_relocs))
11975     {
11976       typedef int (*out_sym_func)
11977         (void *, const char *, Elf_Internal_Sym *, asection *,
11978          struct elf_link_hash_entry *);
11979
11980       if (! ((*bed->elf_backend_output_arch_local_syms)
11981              (abfd, info, &flinfo,
11982               (out_sym_func) elf_link_output_symstrtab)))
11983         return FALSE;
11984     }
11985
11986   /* That wrote out all the local symbols.  Finish up the symbol table
11987      with the global symbols. Even if we want to strip everything we
11988      can, we still need to deal with those global symbols that got
11989      converted to local in a version script.  */
11990
11991   /* The sh_info field records the index of the first non local symbol.  */
11992   symtab_hdr->sh_info = bfd_get_symcount (abfd);
11993
11994   if (dynamic
11995       && htab->dynsym != NULL
11996       && htab->dynsym->output_section != bfd_abs_section_ptr)
11997     {
11998       Elf_Internal_Sym sym;
11999       bfd_byte *dynsym = htab->dynsym->contents;
12000
12001       o = htab->dynsym->output_section;
12002       elf_section_data (o)->this_hdr.sh_info = htab->local_dynsymcount + 1;
12003
12004       /* Write out the section symbols for the output sections.  */
12005       if (bfd_link_pic (info)
12006           || htab->is_relocatable_executable)
12007         {
12008           asection *s;
12009
12010           sym.st_size = 0;
12011           sym.st_name = 0;
12012           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
12013           sym.st_other = 0;
12014           sym.st_target_internal = 0;
12015
12016           for (s = abfd->sections; s != NULL; s = s->next)
12017             {
12018               int indx;
12019               bfd_byte *dest;
12020               long dynindx;
12021
12022               dynindx = elf_section_data (s)->dynindx;
12023               if (dynindx <= 0)
12024                 continue;
12025               indx = elf_section_data (s)->this_idx;
12026               BFD_ASSERT (indx > 0);
12027               sym.st_shndx = indx;
12028               if (! check_dynsym (abfd, &sym))
12029                 return FALSE;
12030               sym.st_value = s->vma;
12031               dest = dynsym + dynindx * bed->s->sizeof_sym;
12032               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
12033             }
12034         }
12035
12036       /* Write out the local dynsyms.  */
12037       if (htab->dynlocal)
12038         {
12039           struct elf_link_local_dynamic_entry *e;
12040           for (e = htab->dynlocal; e ; e = e->next)
12041             {
12042               asection *s;
12043               bfd_byte *dest;
12044
12045               /* Copy the internal symbol and turn off visibility.
12046                  Note that we saved a word of storage and overwrote
12047                  the original st_name with the dynstr_index.  */
12048               sym = e->isym;
12049               sym.st_other &= ~ELF_ST_VISIBILITY (-1);
12050
12051               s = bfd_section_from_elf_index (e->input_bfd,
12052                                               e->isym.st_shndx);
12053               if (s != NULL)
12054                 {
12055                   sym.st_shndx =
12056                     elf_section_data (s->output_section)->this_idx;
12057                   if (! check_dynsym (abfd, &sym))
12058                     return FALSE;
12059                   sym.st_value = (s->output_section->vma
12060                                   + s->output_offset
12061                                   + e->isym.st_value);
12062                 }
12063
12064               dest = dynsym + e->dynindx * bed->s->sizeof_sym;
12065               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
12066             }
12067         }
12068     }
12069
12070   /* We get the global symbols from the hash table.  */
12071   eoinfo.failed = FALSE;
12072   eoinfo.localsyms = FALSE;
12073   eoinfo.flinfo = &flinfo;
12074   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
12075   if (eoinfo.failed)
12076     return FALSE;
12077
12078   /* If backend needs to output some symbols not present in the hash
12079      table, do it now.  */
12080   if (bed->elf_backend_output_arch_syms
12081       && (info->strip != strip_all || emit_relocs))
12082     {
12083       typedef int (*out_sym_func)
12084         (void *, const char *, Elf_Internal_Sym *, asection *,
12085          struct elf_link_hash_entry *);
12086
12087       if (! ((*bed->elf_backend_output_arch_syms)
12088              (abfd, info, &flinfo,
12089               (out_sym_func) elf_link_output_symstrtab)))
12090         return FALSE;
12091     }
12092
12093   /* Finalize the .strtab section.  */
12094   _bfd_elf_strtab_finalize (flinfo.symstrtab);
12095
12096   /* Swap out the .strtab section. */
12097   if (!elf_link_swap_symbols_out (&flinfo))
12098     return FALSE;
12099
12100   /* Now we know the size of the symtab section.  */
12101   if (bfd_get_symcount (abfd) > 0)
12102     {
12103       /* Finish up and write out the symbol string table (.strtab)
12104          section.  */
12105       Elf_Internal_Shdr *symstrtab_hdr = NULL;
12106       file_ptr off = symtab_hdr->sh_offset + symtab_hdr->sh_size;
12107
12108       if (elf_symtab_shndx_list (abfd))
12109         {
12110           symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
12111
12112           if (symtab_shndx_hdr != NULL && symtab_shndx_hdr->sh_name != 0)
12113             {
12114               symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
12115               symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
12116               symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
12117               amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
12118               symtab_shndx_hdr->sh_size = amt;
12119
12120               off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
12121                                                                off, TRUE);
12122
12123               if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
12124                   || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
12125                 return FALSE;
12126             }
12127         }
12128
12129       symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
12130       /* sh_name was set in prep_headers.  */
12131       symstrtab_hdr->sh_type = SHT_STRTAB;
12132       symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
12133       symstrtab_hdr->sh_addr = 0;
12134       symstrtab_hdr->sh_size = _bfd_elf_strtab_size (flinfo.symstrtab);
12135       symstrtab_hdr->sh_entsize = 0;
12136       symstrtab_hdr->sh_link = 0;
12137       symstrtab_hdr->sh_info = 0;
12138       /* sh_offset is set just below.  */
12139       symstrtab_hdr->sh_addralign = 1;
12140
12141       off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr,
12142                                                        off, TRUE);
12143       elf_next_file_pos (abfd) = off;
12144
12145       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
12146           || ! _bfd_elf_strtab_emit (abfd, flinfo.symstrtab))
12147         return FALSE;
12148     }
12149
12150   if (info->out_implib_bfd && !elf_output_implib (abfd, info))
12151     {
12152       _bfd_error_handler (_("%B: failed to generate import library"),
12153                           info->out_implib_bfd);
12154       return FALSE;
12155     }
12156
12157   /* Adjust the relocs to have the correct symbol indices.  */
12158   for (o = abfd->sections; o != NULL; o = o->next)
12159     {
12160       struct bfd_elf_section_data *esdo = elf_section_data (o);
12161       bfd_boolean sort;
12162       if ((o->flags & SEC_RELOC) == 0)
12163         continue;
12164
12165       sort = bed->sort_relocs_p == NULL || (*bed->sort_relocs_p) (o);
12166       if (esdo->rel.hdr != NULL
12167           && !elf_link_adjust_relocs (abfd, o, &esdo->rel, sort))
12168         return FALSE;
12169       if (esdo->rela.hdr != NULL
12170           && !elf_link_adjust_relocs (abfd, o, &esdo->rela, sort))
12171         return FALSE;
12172
12173       /* Set the reloc_count field to 0 to prevent write_relocs from
12174          trying to swap the relocs out itself.  */
12175       o->reloc_count = 0;
12176     }
12177
12178   if (dynamic && info->combreloc && dynobj != NULL)
12179     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
12180
12181   /* If we are linking against a dynamic object, or generating a
12182      shared library, finish up the dynamic linking information.  */
12183   if (dynamic)
12184     {
12185       bfd_byte *dyncon, *dynconend;
12186
12187       /* Fix up .dynamic entries.  */
12188       o = bfd_get_linker_section (dynobj, ".dynamic");
12189       BFD_ASSERT (o != NULL);
12190
12191       dyncon = o->contents;
12192       dynconend = o->contents + o->size;
12193       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
12194         {
12195           Elf_Internal_Dyn dyn;
12196           const char *name;
12197           unsigned int type;
12198           bfd_size_type sh_size;
12199           bfd_vma sh_addr;
12200
12201           bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
12202
12203           switch (dyn.d_tag)
12204             {
12205             default:
12206               continue;
12207             case DT_NULL:
12208               if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
12209                 {
12210                   switch (elf_section_data (reldyn)->this_hdr.sh_type)
12211                     {
12212                     case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
12213                     case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
12214                     default: continue;
12215                     }
12216                   dyn.d_un.d_val = relativecount;
12217                   relativecount = 0;
12218                   break;
12219                 }
12220               continue;
12221
12222             case DT_INIT:
12223               name = info->init_function;
12224               goto get_sym;
12225             case DT_FINI:
12226               name = info->fini_function;
12227             get_sym:
12228               {
12229                 struct elf_link_hash_entry *h;
12230
12231                 h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
12232                 if (h != NULL
12233                     && (h->root.type == bfd_link_hash_defined
12234                         || h->root.type == bfd_link_hash_defweak))
12235                   {
12236                     dyn.d_un.d_ptr = h->root.u.def.value;
12237                     o = h->root.u.def.section;
12238                     if (o->output_section != NULL)
12239                       dyn.d_un.d_ptr += (o->output_section->vma
12240                                          + o->output_offset);
12241                     else
12242                       {
12243                         /* The symbol is imported from another shared
12244                            library and does not apply to this one.  */
12245                         dyn.d_un.d_ptr = 0;
12246                       }
12247                     break;
12248                   }
12249               }
12250               continue;
12251
12252             case DT_PREINIT_ARRAYSZ:
12253               name = ".preinit_array";
12254               goto get_out_size;
12255             case DT_INIT_ARRAYSZ:
12256               name = ".init_array";
12257               goto get_out_size;
12258             case DT_FINI_ARRAYSZ:
12259               name = ".fini_array";
12260             get_out_size:
12261               o = bfd_get_section_by_name (abfd, name);
12262               if (o == NULL)
12263                 {
12264                   _bfd_error_handler
12265                     (_("could not find section %s"), name);
12266                   goto error_return;
12267                 }
12268               if (o->size == 0)
12269                 _bfd_error_handler
12270                   (_("warning: %s section has zero size"), name);
12271               dyn.d_un.d_val = o->size;
12272               break;
12273
12274             case DT_PREINIT_ARRAY:
12275               name = ".preinit_array";
12276               goto get_out_vma;
12277             case DT_INIT_ARRAY:
12278               name = ".init_array";
12279               goto get_out_vma;
12280             case DT_FINI_ARRAY:
12281               name = ".fini_array";
12282             get_out_vma:
12283               o = bfd_get_section_by_name (abfd, name);
12284               goto do_vma;
12285
12286             case DT_HASH:
12287               name = ".hash";
12288               goto get_vma;
12289             case DT_GNU_HASH:
12290               name = ".gnu.hash";
12291               goto get_vma;
12292             case DT_STRTAB:
12293               name = ".dynstr";
12294               goto get_vma;
12295             case DT_SYMTAB:
12296               name = ".dynsym";
12297               goto get_vma;
12298             case DT_VERDEF:
12299               name = ".gnu.version_d";
12300               goto get_vma;
12301             case DT_VERNEED:
12302               name = ".gnu.version_r";
12303               goto get_vma;
12304             case DT_VERSYM:
12305               name = ".gnu.version";
12306             get_vma:
12307               o = bfd_get_linker_section (dynobj, name);
12308             do_vma:
12309               if (o == NULL)
12310                 {
12311                   _bfd_error_handler
12312                     (_("could not find section %s"), name);
12313                   goto error_return;
12314                 }
12315               if (elf_section_data (o->output_section)->this_hdr.sh_type == SHT_NOTE)
12316                 {
12317                   _bfd_error_handler
12318                     (_("warning: section '%s' is being made into a note"), name);
12319                   bfd_set_error (bfd_error_nonrepresentable_section);
12320                   goto error_return;
12321                 }
12322               dyn.d_un.d_ptr = o->output_section->vma + o->output_offset;
12323               break;
12324
12325             case DT_REL:
12326             case DT_RELA:
12327             case DT_RELSZ:
12328             case DT_RELASZ:
12329               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
12330                 type = SHT_REL;
12331               else
12332                 type = SHT_RELA;
12333               sh_size = 0;
12334               sh_addr = 0;
12335               for (i = 1; i < elf_numsections (abfd); i++)
12336                 {
12337                   Elf_Internal_Shdr *hdr;
12338
12339                   hdr = elf_elfsections (abfd)[i];
12340                   if (hdr->sh_type == type
12341                       && (hdr->sh_flags & SHF_ALLOC) != 0)
12342                     {
12343                       sh_size += hdr->sh_size;
12344                       if (sh_addr == 0
12345                           || sh_addr > hdr->sh_addr)
12346                         sh_addr = hdr->sh_addr;
12347                     }
12348                 }
12349
12350               if (bed->dtrel_excludes_plt && htab->srelplt != NULL)
12351                 {
12352                   /* Don't count procedure linkage table relocs in the
12353                      overall reloc count.  */
12354                   sh_size -= htab->srelplt->size;
12355                   if (sh_size == 0)
12356                     /* If the size is zero, make the address zero too.
12357                        This is to avoid a glibc bug.  If the backend
12358                        emits DT_RELA/DT_RELASZ even when DT_RELASZ is
12359                        zero, then we'll put DT_RELA at the end of
12360                        DT_JMPREL.  glibc will interpret the end of
12361                        DT_RELA matching the end of DT_JMPREL as the
12362                        case where DT_RELA includes DT_JMPREL, and for
12363                        LD_BIND_NOW will decide that processing DT_RELA
12364                        will process the PLT relocs too.  Net result:
12365                        No PLT relocs applied.  */
12366                     sh_addr = 0;
12367
12368                   /* If .rela.plt is the first .rela section, exclude
12369                      it from DT_RELA.  */
12370                   else if (sh_addr == (htab->srelplt->output_section->vma
12371                                        + htab->srelplt->output_offset))
12372                     sh_addr += htab->srelplt->size;
12373                 }
12374
12375               if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
12376                 dyn.d_un.d_val = sh_size;
12377               else
12378                 dyn.d_un.d_ptr = sh_addr;
12379               break;
12380             }
12381           bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
12382         }
12383     }
12384
12385   /* If we have created any dynamic sections, then output them.  */
12386   if (dynobj != NULL)
12387     {
12388       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
12389         goto error_return;
12390
12391       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
12392       if (((info->warn_shared_textrel && bfd_link_pic (info))
12393            || info->error_textrel)
12394           && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL)
12395         {
12396           bfd_byte *dyncon, *dynconend;
12397
12398           dyncon = o->contents;
12399           dynconend = o->contents + o->size;
12400           for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
12401             {
12402               Elf_Internal_Dyn dyn;
12403
12404               bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
12405
12406               if (dyn.d_tag == DT_TEXTREL)
12407                 {
12408                   if (info->error_textrel)
12409                     info->callbacks->einfo
12410                       (_("%P%X: read-only segment has dynamic relocations.\n"));
12411                   else
12412                     info->callbacks->einfo
12413                       (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
12414                   break;
12415                 }
12416             }
12417         }
12418
12419       for (o = dynobj->sections; o != NULL; o = o->next)
12420         {
12421           if ((o->flags & SEC_HAS_CONTENTS) == 0
12422               || o->size == 0
12423               || o->output_section == bfd_abs_section_ptr)
12424             continue;
12425           if ((o->flags & SEC_LINKER_CREATED) == 0)
12426             {
12427               /* At this point, we are only interested in sections
12428                  created by _bfd_elf_link_create_dynamic_sections.  */
12429               continue;
12430             }
12431           if (htab->stab_info.stabstr == o)
12432             continue;
12433           if (htab->eh_info.hdr_sec == o)
12434             continue;
12435           if (strcmp (o->name, ".dynstr") != 0)
12436             {
12437               if (! bfd_set_section_contents (abfd, o->output_section,
12438                                               o->contents,
12439                                               (file_ptr) o->output_offset
12440                                               * bfd_octets_per_byte (abfd),
12441                                               o->size))
12442                 goto error_return;
12443             }
12444           else
12445             {
12446               /* The contents of the .dynstr section are actually in a
12447                  stringtab.  */
12448               file_ptr off;
12449
12450               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
12451               if (bfd_seek (abfd, off, SEEK_SET) != 0
12452                   || !_bfd_elf_strtab_emit (abfd, htab->dynstr))
12453                 goto error_return;
12454             }
12455         }
12456     }
12457
12458   if (bfd_link_relocatable (info))
12459     {
12460       bfd_boolean failed = FALSE;
12461
12462       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
12463       if (failed)
12464         goto error_return;
12465     }
12466
12467   /* If we have optimized stabs strings, output them.  */
12468   if (htab->stab_info.stabstr != NULL)
12469     {
12470       if (!_bfd_write_stab_strings (abfd, &htab->stab_info))
12471         goto error_return;
12472     }
12473
12474   if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
12475     goto error_return;
12476
12477   elf_final_link_free (abfd, &flinfo);
12478
12479   elf_linker (abfd) = TRUE;
12480
12481   if (attr_section)
12482     {
12483       bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
12484       if (contents == NULL)
12485         return FALSE;   /* Bail out and fail.  */
12486       bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
12487       bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
12488       free (contents);
12489     }
12490
12491   return TRUE;
12492
12493  error_return:
12494   elf_final_link_free (abfd, &flinfo);
12495   return FALSE;
12496 }
12497 \f
12498 /* Initialize COOKIE for input bfd ABFD.  */
12499
12500 static bfd_boolean
12501 init_reloc_cookie (struct elf_reloc_cookie *cookie,
12502                    struct bfd_link_info *info, bfd *abfd)
12503 {
12504   Elf_Internal_Shdr *symtab_hdr;
12505   const struct elf_backend_data *bed;
12506
12507   bed = get_elf_backend_data (abfd);
12508   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12509
12510   cookie->abfd = abfd;
12511   cookie->sym_hashes = elf_sym_hashes (abfd);
12512   cookie->bad_symtab = elf_bad_symtab (abfd);
12513   if (cookie->bad_symtab)
12514     {
12515       cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
12516       cookie->extsymoff = 0;
12517     }
12518   else
12519     {
12520       cookie->locsymcount = symtab_hdr->sh_info;
12521       cookie->extsymoff = symtab_hdr->sh_info;
12522     }
12523
12524   if (bed->s->arch_size == 32)
12525     cookie->r_sym_shift = 8;
12526   else
12527     cookie->r_sym_shift = 32;
12528
12529   cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
12530   if (cookie->locsyms == NULL && cookie->locsymcount != 0)
12531     {
12532       cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12533                                               cookie->locsymcount, 0,
12534                                               NULL, NULL, NULL);
12535       if (cookie->locsyms == NULL)
12536         {
12537           info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
12538           return FALSE;
12539         }
12540       if (info->keep_memory)
12541         symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
12542     }
12543   return TRUE;
12544 }
12545
12546 /* Free the memory allocated by init_reloc_cookie, if appropriate.  */
12547
12548 static void
12549 fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd)
12550 {
12551   Elf_Internal_Shdr *symtab_hdr;
12552
12553   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12554   if (cookie->locsyms != NULL
12555       && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
12556     free (cookie->locsyms);
12557 }
12558
12559 /* Initialize the relocation information in COOKIE for input section SEC
12560    of input bfd ABFD.  */
12561
12562 static bfd_boolean
12563 init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
12564                         struct bfd_link_info *info, bfd *abfd,
12565                         asection *sec)
12566 {
12567   const struct elf_backend_data *bed;
12568
12569   if (sec->reloc_count == 0)
12570     {
12571       cookie->rels = NULL;
12572       cookie->relend = NULL;
12573     }
12574   else
12575     {
12576       bed = get_elf_backend_data (abfd);
12577
12578       cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
12579                                                 info->keep_memory);
12580       if (cookie->rels == NULL)
12581         return FALSE;
12582       cookie->rel = cookie->rels;
12583       cookie->relend = (cookie->rels
12584                         + sec->reloc_count * bed->s->int_rels_per_ext_rel);
12585     }
12586   cookie->rel = cookie->rels;
12587   return TRUE;
12588 }
12589
12590 /* Free the memory allocated by init_reloc_cookie_rels,
12591    if appropriate.  */
12592
12593 static void
12594 fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
12595                         asection *sec)
12596 {
12597   if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
12598     free (cookie->rels);
12599 }
12600
12601 /* Initialize the whole of COOKIE for input section SEC.  */
12602
12603 static bfd_boolean
12604 init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
12605                                struct bfd_link_info *info,
12606                                asection *sec)
12607 {
12608   if (!init_reloc_cookie (cookie, info, sec->owner))
12609     goto error1;
12610   if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
12611     goto error2;
12612   return TRUE;
12613
12614  error2:
12615   fini_reloc_cookie (cookie, sec->owner);
12616  error1:
12617   return FALSE;
12618 }
12619
12620 /* Free the memory allocated by init_reloc_cookie_for_section,
12621    if appropriate.  */
12622
12623 static void
12624 fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
12625                                asection *sec)
12626 {
12627   fini_reloc_cookie_rels (cookie, sec);
12628   fini_reloc_cookie (cookie, sec->owner);
12629 }
12630 \f
12631 /* Garbage collect unused sections.  */
12632
12633 /* Default gc_mark_hook.  */
12634
12635 asection *
12636 _bfd_elf_gc_mark_hook (asection *sec,
12637                        struct bfd_link_info *info ATTRIBUTE_UNUSED,
12638                        Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
12639                        struct elf_link_hash_entry *h,
12640                        Elf_Internal_Sym *sym)
12641 {
12642   if (h != NULL)
12643     {
12644       switch (h->root.type)
12645         {
12646         case bfd_link_hash_defined:
12647         case bfd_link_hash_defweak:
12648           return h->root.u.def.section;
12649
12650         case bfd_link_hash_common:
12651           return h->root.u.c.p->section;
12652
12653         default:
12654           break;
12655         }
12656     }
12657   else
12658     return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
12659
12660   return NULL;
12661 }
12662
12663 /* For undefined __start_<name> and __stop_<name> symbols, return the
12664    first input section matching <name>.  Return NULL otherwise.  */
12665
12666 asection *
12667 _bfd_elf_is_start_stop (const struct bfd_link_info *info,
12668                         struct elf_link_hash_entry *h)
12669 {
12670   asection *s;
12671   const char *sec_name;
12672
12673   if (h->root.type != bfd_link_hash_undefined
12674       && h->root.type != bfd_link_hash_undefweak)
12675     return NULL;
12676
12677   s = h->root.u.undef.section;
12678   if (s != NULL)
12679     {
12680       if (s == (asection *) 0 - 1)
12681         return NULL;
12682       return s;
12683     }
12684
12685   sec_name = NULL;
12686   if (strncmp (h->root.root.string, "__start_", 8) == 0)
12687     sec_name = h->root.root.string + 8;
12688   else if (strncmp (h->root.root.string, "__stop_", 7) == 0)
12689     sec_name = h->root.root.string + 7;
12690
12691   if (sec_name != NULL && *sec_name != '\0')
12692     {
12693       bfd *i;
12694
12695       for (i = info->input_bfds; i != NULL; i = i->link.next)
12696         {
12697           s = bfd_get_section_by_name (i, sec_name);
12698           if (s != NULL)
12699             {
12700               h->root.u.undef.section = s;
12701               break;
12702             }
12703         }
12704     }
12705
12706   if (s == NULL)
12707     h->root.u.undef.section = (asection *) 0 - 1;
12708
12709   return s;
12710 }
12711
12712 /* COOKIE->rel describes a relocation against section SEC, which is
12713    a section we've decided to keep.  Return the section that contains
12714    the relocation symbol, or NULL if no section contains it.  */
12715
12716 asection *
12717 _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
12718                        elf_gc_mark_hook_fn gc_mark_hook,
12719                        struct elf_reloc_cookie *cookie,
12720                        bfd_boolean *start_stop)
12721 {
12722   unsigned long r_symndx;
12723   struct elf_link_hash_entry *h;
12724
12725   r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
12726   if (r_symndx == STN_UNDEF)
12727     return NULL;
12728
12729   if (r_symndx >= cookie->locsymcount
12730       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
12731     {
12732       h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
12733       if (h == NULL)
12734         {
12735           info->callbacks->einfo (_("%F%P: corrupt input: %B\n"),
12736                                   sec->owner);
12737           return NULL;
12738         }
12739       while (h->root.type == bfd_link_hash_indirect
12740              || h->root.type == bfd_link_hash_warning)
12741         h = (struct elf_link_hash_entry *) h->root.u.i.link;
12742       h->mark = 1;
12743       /* If this symbol is weak and there is a non-weak definition, we
12744          keep the non-weak definition because many backends put
12745          dynamic reloc info on the non-weak definition for code
12746          handling copy relocs.  */
12747       if (h->u.weakdef != NULL)
12748         h->u.weakdef->mark = 1;
12749
12750       if (start_stop != NULL)
12751         {
12752           /* To work around a glibc bug, mark all XXX input sections
12753              when there is an as yet undefined reference to __start_XXX
12754              or __stop_XXX symbols.  The linker will later define such
12755              symbols for orphan input sections that have a name
12756              representable as a C identifier.  */
12757           asection *s = _bfd_elf_is_start_stop (info, h);
12758
12759           if (s != NULL)
12760             {
12761               *start_stop = !s->gc_mark;
12762               return s;
12763             }
12764         }
12765
12766       return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
12767     }
12768
12769   return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
12770                           &cookie->locsyms[r_symndx]);
12771 }
12772
12773 /* COOKIE->rel describes a relocation against section SEC, which is
12774    a section we've decided to keep.  Mark the section that contains
12775    the relocation symbol.  */
12776
12777 bfd_boolean
12778 _bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
12779                         asection *sec,
12780                         elf_gc_mark_hook_fn gc_mark_hook,
12781                         struct elf_reloc_cookie *cookie)
12782 {
12783   asection *rsec;
12784   bfd_boolean start_stop = FALSE;
12785
12786   rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie, &start_stop);
12787   while (rsec != NULL)
12788     {
12789       if (!rsec->gc_mark)
12790         {
12791           if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour
12792               || (rsec->owner->flags & DYNAMIC) != 0)
12793             rsec->gc_mark = 1;
12794           else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
12795             return FALSE;
12796         }
12797       if (!start_stop)
12798         break;
12799       rsec = bfd_get_next_section_by_name (rsec->owner, rsec);
12800     }
12801   return TRUE;
12802 }
12803
12804 /* The mark phase of garbage collection.  For a given section, mark
12805    it and any sections in this section's group, and all the sections
12806    which define symbols to which it refers.  */
12807
12808 bfd_boolean
12809 _bfd_elf_gc_mark (struct bfd_link_info *info,
12810                   asection *sec,
12811                   elf_gc_mark_hook_fn gc_mark_hook)
12812 {
12813   bfd_boolean ret;
12814   asection *group_sec, *eh_frame;
12815
12816   sec->gc_mark = 1;
12817
12818   /* Mark all the sections in the group.  */
12819   group_sec = elf_section_data (sec)->next_in_group;
12820   if (group_sec && !group_sec->gc_mark)
12821     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
12822       return FALSE;
12823
12824   /* Look through the section relocs.  */
12825   ret = TRUE;
12826   eh_frame = elf_eh_frame_section (sec->owner);
12827   if ((sec->flags & SEC_RELOC) != 0
12828       && sec->reloc_count > 0
12829       && sec != eh_frame)
12830     {
12831       struct elf_reloc_cookie cookie;
12832
12833       if (!init_reloc_cookie_for_section (&cookie, info, sec))
12834         ret = FALSE;
12835       else
12836         {
12837           for (; cookie.rel < cookie.relend; cookie.rel++)
12838             if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
12839               {
12840                 ret = FALSE;
12841                 break;
12842               }
12843           fini_reloc_cookie_for_section (&cookie, sec);
12844         }
12845     }
12846
12847   if (ret && eh_frame && elf_fde_list (sec))
12848     {
12849       struct elf_reloc_cookie cookie;
12850
12851       if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
12852         ret = FALSE;
12853       else
12854         {
12855           if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
12856                                       gc_mark_hook, &cookie))
12857             ret = FALSE;
12858           fini_reloc_cookie_for_section (&cookie, eh_frame);
12859         }
12860     }
12861
12862   eh_frame = elf_section_eh_frame_entry (sec);
12863   if (ret && eh_frame && !eh_frame->gc_mark)
12864     if (!_bfd_elf_gc_mark (info, eh_frame, gc_mark_hook))
12865       ret = FALSE;
12866
12867   return ret;
12868 }
12869
12870 /* Scan and mark sections in a special or debug section group.  */
12871
12872 static void
12873 _bfd_elf_gc_mark_debug_special_section_group (asection *grp)
12874 {
12875   /* Point to first section of section group.  */
12876   asection *ssec;
12877   /* Used to iterate the section group.  */
12878   asection *msec;
12879
12880   bfd_boolean is_special_grp = TRUE;
12881   bfd_boolean is_debug_grp = TRUE;
12882
12883   /* First scan to see if group contains any section other than debug
12884      and special section.  */
12885   ssec = msec = elf_next_in_group (grp);
12886   do
12887     {
12888       if ((msec->flags & SEC_DEBUGGING) == 0)
12889         is_debug_grp = FALSE;
12890
12891       if ((msec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) != 0)
12892         is_special_grp = FALSE;
12893
12894       msec = elf_next_in_group (msec);
12895     }
12896   while (msec != ssec);
12897
12898   /* If this is a pure debug section group or pure special section group,
12899      keep all sections in this group.  */
12900   if (is_debug_grp || is_special_grp)
12901     {
12902       do
12903         {
12904           msec->gc_mark = 1;
12905           msec = elf_next_in_group (msec);
12906         }
12907       while (msec != ssec);
12908     }
12909 }
12910
12911 /* Keep debug and special sections.  */
12912
12913 bfd_boolean
12914 _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12915                                  elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED)
12916 {
12917   bfd *ibfd;
12918
12919   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12920     {
12921       asection *isec;
12922       bfd_boolean some_kept;
12923       bfd_boolean debug_frag_seen;
12924
12925       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
12926         continue;
12927
12928       /* Ensure all linker created sections are kept,
12929          see if any other section is already marked,
12930          and note if we have any fragmented debug sections.  */
12931       debug_frag_seen = some_kept = FALSE;
12932       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12933         {
12934           if ((isec->flags & SEC_LINKER_CREATED) != 0)
12935             isec->gc_mark = 1;
12936           else if (isec->gc_mark)
12937             some_kept = TRUE;
12938
12939           if (debug_frag_seen == FALSE
12940               && (isec->flags & SEC_DEBUGGING)
12941               && CONST_STRNEQ (isec->name, ".debug_line."))
12942             debug_frag_seen = TRUE;
12943         }
12944
12945       /* If no section in this file will be kept, then we can
12946          toss out the debug and special sections.  */
12947       if (!some_kept)
12948         continue;
12949
12950       /* Keep debug and special sections like .comment when they are
12951          not part of a group.  Also keep section groups that contain
12952          just debug sections or special sections.  */
12953       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12954         {
12955           if ((isec->flags & SEC_GROUP) != 0)
12956             _bfd_elf_gc_mark_debug_special_section_group (isec);
12957           else if (((isec->flags & SEC_DEBUGGING) != 0
12958                     || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
12959                    && elf_next_in_group (isec) == NULL)
12960             isec->gc_mark = 1;
12961         }
12962
12963       if (! debug_frag_seen)
12964         continue;
12965
12966       /* Look for CODE sections which are going to be discarded,
12967          and find and discard any fragmented debug sections which
12968          are associated with that code section.  */
12969       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12970         if ((isec->flags & SEC_CODE) != 0
12971             && isec->gc_mark == 0)
12972           {
12973             unsigned int ilen;
12974             asection *dsec;
12975
12976             ilen = strlen (isec->name);
12977
12978             /* Association is determined by the name of the debug section
12979                containing the name of the code section as a suffix.  For
12980                example .debug_line.text.foo is a debug section associated
12981                with .text.foo.  */
12982             for (dsec = ibfd->sections; dsec != NULL; dsec = dsec->next)
12983               {
12984                 unsigned int dlen;
12985
12986                 if (dsec->gc_mark == 0
12987                     || (dsec->flags & SEC_DEBUGGING) == 0)
12988                   continue;
12989
12990                 dlen = strlen (dsec->name);
12991
12992                 if (dlen > ilen
12993                     && strncmp (dsec->name + (dlen - ilen),
12994                                 isec->name, ilen) == 0)
12995                   {
12996                     dsec->gc_mark = 0;
12997                   }
12998               }
12999           }
13000     }
13001   return TRUE;
13002 }
13003
13004 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
13005
13006 typedef bfd_boolean (*gc_sweep_hook_fn)
13007   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
13008
13009 static bfd_boolean
13010 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
13011 {
13012   bfd *sub;
13013   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13014   gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook;
13015
13016   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
13017     {
13018       asection *o;
13019
13020       if (bfd_get_flavour (sub) != bfd_target_elf_flavour
13021           || !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
13022         continue;
13023
13024       for (o = sub->sections; o != NULL; o = o->next)
13025         {
13026           /* When any section in a section group is kept, we keep all
13027              sections in the section group.  If the first member of
13028              the section group is excluded, we will also exclude the
13029              group section.  */
13030           if (o->flags & SEC_GROUP)
13031             {
13032               asection *first = elf_next_in_group (o);
13033               o->gc_mark = first->gc_mark;
13034             }
13035
13036           if (o->gc_mark)
13037             continue;
13038
13039           /* Skip sweeping sections already excluded.  */
13040           if (o->flags & SEC_EXCLUDE)
13041             continue;
13042
13043           /* Since this is early in the link process, it is simple
13044              to remove a section from the output.  */
13045           o->flags |= SEC_EXCLUDE;
13046
13047           if (info->print_gc_sections && o->size != 0)
13048             /* xgettext:c-format */
13049             _bfd_error_handler (_("Removing unused section '%A' in file '%B'"),
13050                                 o, sub);
13051
13052           /* But we also have to update some of the relocation
13053              info we collected before.  */
13054           if (gc_sweep_hook
13055               && (o->flags & SEC_RELOC) != 0
13056               && o->reloc_count != 0
13057               && !((info->strip == strip_all || info->strip == strip_debugger)
13058                    && (o->flags & SEC_DEBUGGING) != 0)
13059               && !bfd_is_abs_section (o->output_section))
13060             {
13061               Elf_Internal_Rela *internal_relocs;
13062               bfd_boolean r;
13063
13064               internal_relocs
13065                 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
13066                                              info->keep_memory);
13067               if (internal_relocs == NULL)
13068                 return FALSE;
13069
13070               r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
13071
13072               if (elf_section_data (o)->relocs != internal_relocs)
13073                 free (internal_relocs);
13074
13075               if (!r)
13076                 return FALSE;
13077             }
13078         }
13079     }
13080
13081   return TRUE;
13082 }
13083
13084 /* Propagate collected vtable information.  This is called through
13085    elf_link_hash_traverse.  */
13086
13087 static bfd_boolean
13088 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
13089 {
13090   /* Those that are not vtables.  */
13091   if (h->vtable == NULL || h->vtable->parent == NULL)
13092     return TRUE;
13093
13094   /* Those vtables that do not have parents, we cannot merge.  */
13095   if (h->vtable->parent == (struct elf_link_hash_entry *) -1)
13096     return TRUE;
13097
13098   /* If we've already been done, exit.  */
13099   if (h->vtable->used && h->vtable->used[-1])
13100     return TRUE;
13101
13102   /* Make sure the parent's table is up to date.  */
13103   elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp);
13104
13105   if (h->vtable->used == NULL)
13106     {
13107       /* None of this table's entries were referenced.  Re-use the
13108          parent's table.  */
13109       h->vtable->used = h->vtable->parent->vtable->used;
13110       h->vtable->size = h->vtable->parent->vtable->size;
13111     }
13112   else
13113     {
13114       size_t n;
13115       bfd_boolean *cu, *pu;
13116
13117       /* Or the parent's entries into ours.  */
13118       cu = h->vtable->used;
13119       cu[-1] = TRUE;
13120       pu = h->vtable->parent->vtable->used;
13121       if (pu != NULL)
13122         {
13123           const struct elf_backend_data *bed;
13124           unsigned int log_file_align;
13125
13126           bed = get_elf_backend_data (h->root.u.def.section->owner);
13127           log_file_align = bed->s->log_file_align;
13128           n = h->vtable->parent->vtable->size >> log_file_align;
13129           while (n--)
13130             {
13131               if (*pu)
13132                 *cu = TRUE;
13133               pu++;
13134               cu++;
13135             }
13136         }
13137     }
13138
13139   return TRUE;
13140 }
13141
13142 static bfd_boolean
13143 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
13144 {
13145   asection *sec;
13146   bfd_vma hstart, hend;
13147   Elf_Internal_Rela *relstart, *relend, *rel;
13148   const struct elf_backend_data *bed;
13149   unsigned int log_file_align;
13150
13151   /* Take care of both those symbols that do not describe vtables as
13152      well as those that are not loaded.  */
13153   if (h->vtable == NULL || h->vtable->parent == NULL)
13154     return TRUE;
13155
13156   BFD_ASSERT (h->root.type == bfd_link_hash_defined
13157               || h->root.type == bfd_link_hash_defweak);
13158
13159   sec = h->root.u.def.section;
13160   hstart = h->root.u.def.value;
13161   hend = hstart + h->size;
13162
13163   relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
13164   if (!relstart)
13165     return *(bfd_boolean *) okp = FALSE;
13166   bed = get_elf_backend_data (sec->owner);
13167   log_file_align = bed->s->log_file_align;
13168
13169   relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
13170
13171   for (rel = relstart; rel < relend; ++rel)
13172     if (rel->r_offset >= hstart && rel->r_offset < hend)
13173       {
13174         /* If the entry is in use, do nothing.  */
13175         if (h->vtable->used
13176             && (rel->r_offset - hstart) < h->vtable->size)
13177           {
13178             bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
13179             if (h->vtable->used[entry])
13180               continue;
13181           }
13182         /* Otherwise, kill it.  */
13183         rel->r_offset = rel->r_info = rel->r_addend = 0;
13184       }
13185
13186   return TRUE;
13187 }
13188
13189 /* Mark sections containing dynamically referenced symbols.  When
13190    building shared libraries, we must assume that any visible symbol is
13191    referenced.  */
13192
13193 bfd_boolean
13194 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
13195 {
13196   struct bfd_link_info *info = (struct bfd_link_info *) inf;
13197   struct bfd_elf_dynamic_list *d = info->dynamic_list;
13198
13199   if ((h->root.type == bfd_link_hash_defined
13200        || h->root.type == bfd_link_hash_defweak)
13201       && (h->ref_dynamic
13202           || ((h->def_regular || ELF_COMMON_DEF_P (h))
13203               && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
13204               && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
13205               && (!bfd_link_executable (info)
13206                   || info->gc_keep_exported
13207                   || info->export_dynamic
13208                   || (h->dynamic
13209                       && d != NULL
13210                       && (*d->match) (&d->head, NULL, h->root.root.string)))
13211               && (h->versioned >= versioned
13212                   || !bfd_hide_sym_by_version (info->version_info,
13213                                                h->root.root.string)))))
13214     h->root.u.def.section->flags |= SEC_KEEP;
13215
13216   return TRUE;
13217 }
13218
13219 /* Keep all sections containing symbols undefined on the command-line,
13220    and the section containing the entry symbol.  */
13221
13222 void
13223 _bfd_elf_gc_keep (struct bfd_link_info *info)
13224 {
13225   struct bfd_sym_chain *sym;
13226
13227   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
13228     {
13229       struct elf_link_hash_entry *h;
13230
13231       h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
13232                                 FALSE, FALSE, FALSE);
13233
13234       if (h != NULL
13235           && (h->root.type == bfd_link_hash_defined
13236               || h->root.type == bfd_link_hash_defweak)
13237           && !bfd_is_abs_section (h->root.u.def.section)
13238           && !bfd_is_und_section (h->root.u.def.section))
13239         h->root.u.def.section->flags |= SEC_KEEP;
13240     }
13241 }
13242
13243 bfd_boolean
13244 bfd_elf_parse_eh_frame_entries (bfd *abfd ATTRIBUTE_UNUSED,
13245                                 struct bfd_link_info *info)
13246 {
13247   bfd *ibfd = info->input_bfds;
13248
13249   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
13250     {
13251       asection *sec;
13252       struct elf_reloc_cookie cookie;
13253
13254       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
13255         continue;
13256
13257       if (!init_reloc_cookie (&cookie, info, ibfd))
13258         return FALSE;
13259
13260       for (sec = ibfd->sections; sec; sec = sec->next)
13261         {
13262           if (CONST_STRNEQ (bfd_section_name (ibfd, sec), ".eh_frame_entry")
13263               && init_reloc_cookie_rels (&cookie, info, ibfd, sec))
13264             {
13265               _bfd_elf_parse_eh_frame_entry (info, sec, &cookie);
13266               fini_reloc_cookie_rels (&cookie, sec);
13267             }
13268         }
13269     }
13270   return TRUE;
13271 }
13272
13273 /* Do mark and sweep of unused sections.  */
13274
13275 bfd_boolean
13276 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
13277 {
13278   bfd_boolean ok = TRUE;
13279   bfd *sub;
13280   elf_gc_mark_hook_fn gc_mark_hook;
13281   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13282   struct elf_link_hash_table *htab;
13283
13284   if (!bed->can_gc_sections
13285       || !is_elf_hash_table (info->hash))
13286     {
13287       _bfd_error_handler(_("Warning: gc-sections option ignored"));
13288       return TRUE;
13289     }
13290
13291   bed->gc_keep (info);
13292   htab = elf_hash_table (info);
13293
13294   /* Try to parse each bfd's .eh_frame section.  Point elf_eh_frame_section
13295      at the .eh_frame section if we can mark the FDEs individually.  */
13296   for (sub = info->input_bfds;
13297        info->eh_frame_hdr_type != COMPACT_EH_HDR && sub != NULL;
13298        sub = sub->link.next)
13299     {
13300       asection *sec;
13301       struct elf_reloc_cookie cookie;
13302
13303       sec = bfd_get_section_by_name (sub, ".eh_frame");
13304       while (sec && init_reloc_cookie_for_section (&cookie, info, sec))
13305         {
13306           _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
13307           if (elf_section_data (sec)->sec_info
13308               && (sec->flags & SEC_LINKER_CREATED) == 0)
13309             elf_eh_frame_section (sub) = sec;
13310           fini_reloc_cookie_for_section (&cookie, sec);
13311           sec = bfd_get_next_section_by_name (NULL, sec);
13312         }
13313     }
13314
13315   /* Apply transitive closure to the vtable entry usage info.  */
13316   elf_link_hash_traverse (htab, elf_gc_propagate_vtable_entries_used, &ok);
13317   if (!ok)
13318     return FALSE;
13319
13320   /* Kill the vtable relocations that were not used.  */
13321   elf_link_hash_traverse (htab, elf_gc_smash_unused_vtentry_relocs, &ok);
13322   if (!ok)
13323     return FALSE;
13324
13325   /* Mark dynamically referenced symbols.  */
13326   if (htab->dynamic_sections_created || info->gc_keep_exported)
13327     elf_link_hash_traverse (htab, bed->gc_mark_dynamic_ref, info);
13328
13329   /* Grovel through relocs to find out who stays ...  */
13330   gc_mark_hook = bed->gc_mark_hook;
13331   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
13332     {
13333       asection *o;
13334
13335       if (bfd_get_flavour (sub) != bfd_target_elf_flavour
13336           || !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
13337         continue;
13338
13339       /* Start at sections marked with SEC_KEEP (ref _bfd_elf_gc_keep).
13340          Also treat note sections as a root, if the section is not part
13341          of a group.  */
13342       for (o = sub->sections; o != NULL; o = o->next)
13343         if (!o->gc_mark
13344             && (o->flags & SEC_EXCLUDE) == 0
13345             && ((o->flags & SEC_KEEP) != 0
13346                 || (elf_section_data (o)->this_hdr.sh_type == SHT_NOTE
13347                     && elf_next_in_group (o) == NULL )))
13348           {
13349             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
13350               return FALSE;
13351           }
13352     }
13353
13354   /* Allow the backend to mark additional target specific sections.  */
13355   bed->gc_mark_extra_sections (info, gc_mark_hook);
13356
13357   /* ... and mark SEC_EXCLUDE for those that go.  */
13358   return elf_gc_sweep (abfd, info);
13359 }
13360 \f
13361 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
13362
13363 bfd_boolean
13364 bfd_elf_gc_record_vtinherit (bfd *abfd,
13365                              asection *sec,
13366                              struct elf_link_hash_entry *h,
13367                              bfd_vma offset)
13368 {
13369   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
13370   struct elf_link_hash_entry **search, *child;
13371   size_t extsymcount;
13372   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13373
13374   /* The sh_info field of the symtab header tells us where the
13375      external symbols start.  We don't care about the local symbols at
13376      this point.  */
13377   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
13378   if (!elf_bad_symtab (abfd))
13379     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
13380
13381   sym_hashes = elf_sym_hashes (abfd);
13382   sym_hashes_end = sym_hashes + extsymcount;
13383
13384   /* Hunt down the child symbol, which is in this section at the same
13385      offset as the relocation.  */
13386   for (search = sym_hashes; search != sym_hashes_end; ++search)
13387     {
13388       if ((child = *search) != NULL
13389           && (child->root.type == bfd_link_hash_defined
13390               || child->root.type == bfd_link_hash_defweak)
13391           && child->root.u.def.section == sec
13392           && child->root.u.def.value == offset)
13393         goto win;
13394     }
13395
13396   /* xgettext:c-format */
13397   _bfd_error_handler (_("%B: %A+%lu: No symbol found for INHERIT"),
13398                       abfd, sec, (unsigned long) offset);
13399   bfd_set_error (bfd_error_invalid_operation);
13400   return FALSE;
13401
13402  win:
13403   if (!child->vtable)
13404     {
13405       child->vtable = ((struct elf_link_virtual_table_entry *)
13406                        bfd_zalloc (abfd, sizeof (*child->vtable)));
13407       if (!child->vtable)
13408         return FALSE;
13409     }
13410   if (!h)
13411     {
13412       /* This *should* only be the absolute section.  It could potentially
13413          be that someone has defined a non-global vtable though, which
13414          would be bad.  It isn't worth paging in the local symbols to be
13415          sure though; that case should simply be handled by the assembler.  */
13416
13417       child->vtable->parent = (struct elf_link_hash_entry *) -1;
13418     }
13419   else
13420     child->vtable->parent = h;
13421
13422   return TRUE;
13423 }
13424
13425 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
13426
13427 bfd_boolean
13428 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
13429                            asection *sec ATTRIBUTE_UNUSED,
13430                            struct elf_link_hash_entry *h,
13431                            bfd_vma addend)
13432 {
13433   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13434   unsigned int log_file_align = bed->s->log_file_align;
13435
13436   if (!h->vtable)
13437     {
13438       h->vtable = ((struct elf_link_virtual_table_entry *)
13439                    bfd_zalloc (abfd, sizeof (*h->vtable)));
13440       if (!h->vtable)
13441         return FALSE;
13442     }
13443
13444   if (addend >= h->vtable->size)
13445     {
13446       size_t size, bytes, file_align;
13447       bfd_boolean *ptr = h->vtable->used;
13448
13449       /* While the symbol is undefined, we have to be prepared to handle
13450          a zero size.  */
13451       file_align = 1 << log_file_align;
13452       if (h->root.type == bfd_link_hash_undefined)
13453         size = addend + file_align;
13454       else
13455         {
13456           size = h->size;
13457           if (addend >= size)
13458             {
13459               /* Oops!  We've got a reference past the defined end of
13460                  the table.  This is probably a bug -- shall we warn?  */
13461               size = addend + file_align;
13462             }
13463         }
13464       size = (size + file_align - 1) & -file_align;
13465
13466       /* Allocate one extra entry for use as a "done" flag for the
13467          consolidation pass.  */
13468       bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
13469
13470       if (ptr)
13471         {
13472           ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
13473
13474           if (ptr != NULL)
13475             {
13476               size_t oldbytes;
13477
13478               oldbytes = (((h->vtable->size >> log_file_align) + 1)
13479                           * sizeof (bfd_boolean));
13480               memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
13481             }
13482         }
13483       else
13484         ptr = (bfd_boolean *) bfd_zmalloc (bytes);
13485
13486       if (ptr == NULL)
13487         return FALSE;
13488
13489       /* And arrange for that done flag to be at index -1.  */
13490       h->vtable->used = ptr + 1;
13491       h->vtable->size = size;
13492     }
13493
13494   h->vtable->used[addend >> log_file_align] = TRUE;
13495
13496   return TRUE;
13497 }
13498
13499 /* Map an ELF section header flag to its corresponding string.  */
13500 typedef struct
13501 {
13502   char *flag_name;
13503   flagword flag_value;
13504 } elf_flags_to_name_table;
13505
13506 static elf_flags_to_name_table elf_flags_to_names [] =
13507 {
13508   { "SHF_WRITE", SHF_WRITE },
13509   { "SHF_ALLOC", SHF_ALLOC },
13510   { "SHF_EXECINSTR", SHF_EXECINSTR },
13511   { "SHF_MERGE", SHF_MERGE },
13512   { "SHF_STRINGS", SHF_STRINGS },
13513   { "SHF_INFO_LINK", SHF_INFO_LINK},
13514   { "SHF_LINK_ORDER", SHF_LINK_ORDER},
13515   { "SHF_OS_NONCONFORMING", SHF_OS_NONCONFORMING},
13516   { "SHF_GROUP", SHF_GROUP },
13517   { "SHF_TLS", SHF_TLS },
13518   { "SHF_MASKOS", SHF_MASKOS },
13519   { "SHF_EXCLUDE", SHF_EXCLUDE },
13520 };
13521
13522 /* Returns TRUE if the section is to be included, otherwise FALSE.  */
13523 bfd_boolean
13524 bfd_elf_lookup_section_flags (struct bfd_link_info *info,
13525                               struct flag_info *flaginfo,
13526                               asection *section)
13527 {
13528   const bfd_vma sh_flags = elf_section_flags (section);
13529
13530   if (!flaginfo->flags_initialized)
13531     {
13532       bfd *obfd = info->output_bfd;
13533       const struct elf_backend_data *bed = get_elf_backend_data (obfd);
13534       struct flag_info_list *tf = flaginfo->flag_list;
13535       int with_hex = 0;
13536       int without_hex = 0;
13537
13538       for (tf = flaginfo->flag_list; tf != NULL; tf = tf->next)
13539         {
13540           unsigned i;
13541           flagword (*lookup) (char *);
13542
13543           lookup = bed->elf_backend_lookup_section_flags_hook;
13544           if (lookup != NULL)
13545             {
13546               flagword hexval = (*lookup) ((char *) tf->name);
13547
13548               if (hexval != 0)
13549                 {
13550                   if (tf->with == with_flags)
13551                     with_hex |= hexval;
13552                   else if (tf->with == without_flags)
13553                     without_hex |= hexval;
13554                   tf->valid = TRUE;
13555                   continue;
13556                 }
13557             }
13558           for (i = 0; i < ARRAY_SIZE (elf_flags_to_names); ++i)
13559             {
13560               if (strcmp (tf->name, elf_flags_to_names[i].flag_name) == 0)
13561                 {
13562                   if (tf->with == with_flags)
13563                     with_hex |= elf_flags_to_names[i].flag_value;
13564                   else if (tf->with == without_flags)
13565                     without_hex |= elf_flags_to_names[i].flag_value;
13566                   tf->valid = TRUE;
13567                   break;
13568                 }
13569             }
13570           if (!tf->valid)
13571             {
13572               info->callbacks->einfo
13573                 (_("Unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
13574               return FALSE;
13575             }
13576         }
13577       flaginfo->flags_initialized = TRUE;
13578       flaginfo->only_with_flags |= with_hex;
13579       flaginfo->not_with_flags |= without_hex;
13580     }
13581
13582   if ((flaginfo->only_with_flags & sh_flags) != flaginfo->only_with_flags)
13583     return FALSE;
13584
13585   if ((flaginfo->not_with_flags & sh_flags) != 0)
13586     return FALSE;
13587
13588   return TRUE;
13589 }
13590
13591 struct alloc_got_off_arg {
13592   bfd_vma gotoff;
13593   struct bfd_link_info *info;
13594 };
13595
13596 /* We need a special top-level link routine to convert got reference counts
13597    to real got offsets.  */
13598
13599 static bfd_boolean
13600 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
13601 {
13602   struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
13603   bfd *obfd = gofarg->info->output_bfd;
13604   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
13605
13606   if (h->got.refcount > 0)
13607     {
13608       h->got.offset = gofarg->gotoff;
13609       gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0);
13610     }
13611   else
13612     h->got.offset = (bfd_vma) -1;
13613
13614   return TRUE;
13615 }
13616
13617 /* And an accompanying bit to work out final got entry offsets once
13618    we're done.  Should be called from final_link.  */
13619
13620 bfd_boolean
13621 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
13622                                         struct bfd_link_info *info)
13623 {
13624   bfd *i;
13625   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13626   bfd_vma gotoff;
13627   struct alloc_got_off_arg gofarg;
13628
13629   BFD_ASSERT (abfd == info->output_bfd);
13630
13631   if (! is_elf_hash_table (info->hash))
13632     return FALSE;
13633
13634   /* The GOT offset is relative to the .got section, but the GOT header is
13635      put into the .got.plt section, if the backend uses it.  */
13636   if (bed->want_got_plt)
13637     gotoff = 0;
13638   else
13639     gotoff = bed->got_header_size;
13640
13641   /* Do the local .got entries first.  */
13642   for (i = info->input_bfds; i; i = i->link.next)
13643     {
13644       bfd_signed_vma *local_got;
13645       size_t j, locsymcount;
13646       Elf_Internal_Shdr *symtab_hdr;
13647
13648       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
13649         continue;
13650
13651       local_got = elf_local_got_refcounts (i);
13652       if (!local_got)
13653         continue;
13654
13655       symtab_hdr = &elf_tdata (i)->symtab_hdr;
13656       if (elf_bad_symtab (i))
13657         locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
13658       else
13659         locsymcount = symtab_hdr->sh_info;
13660
13661       for (j = 0; j < locsymcount; ++j)
13662         {
13663           if (local_got[j] > 0)
13664             {
13665               local_got[j] = gotoff;
13666               gotoff += bed->got_elt_size (abfd, info, NULL, i, j);
13667             }
13668           else
13669             local_got[j] = (bfd_vma) -1;
13670         }
13671     }
13672
13673   /* Then the global .got entries.  .plt refcounts are handled by
13674      adjust_dynamic_symbol  */
13675   gofarg.gotoff = gotoff;
13676   gofarg.info = info;
13677   elf_link_hash_traverse (elf_hash_table (info),
13678                           elf_gc_allocate_got_offsets,
13679                           &gofarg);
13680   return TRUE;
13681 }
13682
13683 /* Many folk need no more in the way of final link than this, once
13684    got entry reference counting is enabled.  */
13685
13686 bfd_boolean
13687 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
13688 {
13689   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
13690     return FALSE;
13691
13692   /* Invoke the regular ELF backend linker to do all the work.  */
13693   return bfd_elf_final_link (abfd, info);
13694 }
13695
13696 bfd_boolean
13697 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
13698 {
13699   struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
13700
13701   if (rcookie->bad_symtab)
13702     rcookie->rel = rcookie->rels;
13703
13704   for (; rcookie->rel < rcookie->relend; rcookie->rel++)
13705     {
13706       unsigned long r_symndx;
13707
13708       if (! rcookie->bad_symtab)
13709         if (rcookie->rel->r_offset > offset)
13710           return FALSE;
13711       if (rcookie->rel->r_offset != offset)
13712         continue;
13713
13714       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
13715       if (r_symndx == STN_UNDEF)
13716         return TRUE;
13717
13718       if (r_symndx >= rcookie->locsymcount
13719           || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
13720         {
13721           struct elf_link_hash_entry *h;
13722
13723           h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
13724
13725           while (h->root.type == bfd_link_hash_indirect
13726                  || h->root.type == bfd_link_hash_warning)
13727             h = (struct elf_link_hash_entry *) h->root.u.i.link;
13728
13729           if ((h->root.type == bfd_link_hash_defined
13730                || h->root.type == bfd_link_hash_defweak)
13731               && (h->root.u.def.section->owner != rcookie->abfd
13732                   || h->root.u.def.section->kept_section != NULL
13733                   || discarded_section (h->root.u.def.section)))
13734             return TRUE;
13735         }
13736       else
13737         {
13738           /* It's not a relocation against a global symbol,
13739              but it could be a relocation against a local
13740              symbol for a discarded section.  */
13741           asection *isec;
13742           Elf_Internal_Sym *isym;
13743
13744           /* Need to: get the symbol; get the section.  */
13745           isym = &rcookie->locsyms[r_symndx];
13746           isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
13747           if (isec != NULL
13748               && (isec->kept_section != NULL
13749                   || discarded_section (isec)))
13750             return TRUE;
13751         }
13752       return FALSE;
13753     }
13754   return FALSE;
13755 }
13756
13757 /* Discard unneeded references to discarded sections.
13758    Returns -1 on error, 1 if any section's size was changed, 0 if
13759    nothing changed.  This function assumes that the relocations are in
13760    sorted order, which is true for all known assemblers.  */
13761
13762 int
13763 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
13764 {
13765   struct elf_reloc_cookie cookie;
13766   asection *o;
13767   bfd *abfd;
13768   int changed = 0;
13769
13770   if (info->traditional_format
13771       || !is_elf_hash_table (info->hash))
13772     return 0;
13773
13774   o = bfd_get_section_by_name (output_bfd, ".stab");
13775   if (o != NULL)
13776     {
13777       asection *i;
13778
13779       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
13780         {
13781           if (i->size == 0
13782               || i->reloc_count == 0
13783               || i->sec_info_type != SEC_INFO_TYPE_STABS)
13784             continue;
13785
13786           abfd = i->owner;
13787           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
13788             continue;
13789
13790           if (!init_reloc_cookie_for_section (&cookie, info, i))
13791             return -1;
13792
13793           if (_bfd_discard_section_stabs (abfd, i,
13794                                           elf_section_data (i)->sec_info,
13795                                           bfd_elf_reloc_symbol_deleted_p,
13796                                           &cookie))
13797             changed = 1;
13798
13799           fini_reloc_cookie_for_section (&cookie, i);
13800         }
13801     }
13802
13803   o = NULL;
13804   if (info->eh_frame_hdr_type != COMPACT_EH_HDR)
13805     o = bfd_get_section_by_name (output_bfd, ".eh_frame");
13806   if (o != NULL)
13807     {
13808       asection *i;
13809
13810       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
13811         {
13812           if (i->size == 0)
13813             continue;
13814
13815           abfd = i->owner;
13816           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
13817             continue;
13818
13819           if (!init_reloc_cookie_for_section (&cookie, info, i))
13820             return -1;
13821
13822           _bfd_elf_parse_eh_frame (abfd, info, i, &cookie);
13823           if (_bfd_elf_discard_section_eh_frame (abfd, info, i,
13824                                                  bfd_elf_reloc_symbol_deleted_p,
13825                                                  &cookie))
13826             changed = 1;
13827
13828           fini_reloc_cookie_for_section (&cookie, i);
13829         }
13830     }
13831
13832   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
13833     {
13834       const struct elf_backend_data *bed;
13835
13836       if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
13837         continue;
13838
13839       bed = get_elf_backend_data (abfd);
13840
13841       if (bed->elf_backend_discard_info != NULL)
13842         {
13843           if (!init_reloc_cookie (&cookie, info, abfd))
13844             return -1;
13845
13846           if ((*bed->elf_backend_discard_info) (abfd, &cookie, info))
13847             changed = 1;
13848
13849           fini_reloc_cookie (&cookie, abfd);
13850         }
13851     }
13852
13853   if (info->eh_frame_hdr_type == COMPACT_EH_HDR)
13854     _bfd_elf_end_eh_frame_parsing (info);
13855
13856   if (info->eh_frame_hdr_type
13857       && !bfd_link_relocatable (info)
13858       && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
13859     changed = 1;
13860
13861   return changed;
13862 }
13863
13864 bfd_boolean
13865 _bfd_elf_section_already_linked (bfd *abfd,
13866                                  asection *sec,
13867                                  struct bfd_link_info *info)
13868 {
13869   flagword flags;
13870   const char *name, *key;
13871   struct bfd_section_already_linked *l;
13872   struct bfd_section_already_linked_hash_entry *already_linked_list;
13873
13874   if (sec->output_section == bfd_abs_section_ptr)
13875     return FALSE;
13876
13877   flags = sec->flags;
13878
13879   /* Return if it isn't a linkonce section.  A comdat group section
13880      also has SEC_LINK_ONCE set.  */
13881   if ((flags & SEC_LINK_ONCE) == 0)
13882     return FALSE;
13883
13884   /* Don't put group member sections on our list of already linked
13885      sections.  They are handled as a group via their group section.  */
13886   if (elf_sec_group (sec) != NULL)
13887     return FALSE;
13888
13889   /* For a SHT_GROUP section, use the group signature as the key.  */
13890   name = sec->name;
13891   if ((flags & SEC_GROUP) != 0
13892       && elf_next_in_group (sec) != NULL
13893       && elf_group_name (elf_next_in_group (sec)) != NULL)
13894     key = elf_group_name (elf_next_in_group (sec));
13895   else
13896     {
13897       /* Otherwise we should have a .gnu.linkonce.<type>.<key> section.  */
13898       if (CONST_STRNEQ (name, ".gnu.linkonce.")
13899           && (key = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
13900         key++;
13901       else
13902         /* Must be a user linkonce section that doesn't follow gcc's
13903            naming convention.  In this case we won't be matching
13904            single member groups.  */
13905         key = name;
13906     }
13907
13908   already_linked_list = bfd_section_already_linked_table_lookup (key);
13909
13910   for (l = already_linked_list->entry; l != NULL; l = l->next)
13911     {
13912       /* We may have 2 different types of sections on the list: group
13913          sections with a signature of <key> (<key> is some string),
13914          and linkonce sections named .gnu.linkonce.<type>.<key>.
13915          Match like sections.  LTO plugin sections are an exception.
13916          They are always named .gnu.linkonce.t.<key> and match either
13917          type of section.  */
13918       if (((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
13919            && ((flags & SEC_GROUP) != 0
13920                || strcmp (name, l->sec->name) == 0))
13921           || (l->sec->owner->flags & BFD_PLUGIN) != 0)
13922         {
13923           /* The section has already been linked.  See if we should
13924              issue a warning.  */
13925           if (!_bfd_handle_already_linked (sec, l, info))
13926             return FALSE;
13927
13928           if (flags & SEC_GROUP)
13929             {
13930               asection *first = elf_next_in_group (sec);
13931               asection *s = first;
13932
13933               while (s != NULL)
13934                 {
13935                   s->output_section = bfd_abs_section_ptr;
13936                   /* Record which group discards it.  */
13937                   s->kept_section = l->sec;
13938                   s = elf_next_in_group (s);
13939                   /* These lists are circular.  */
13940                   if (s == first)
13941                     break;
13942                 }
13943             }
13944
13945           return TRUE;
13946         }
13947     }
13948
13949   /* A single member comdat group section may be discarded by a
13950      linkonce section and vice versa.  */
13951   if ((flags & SEC_GROUP) != 0)
13952     {
13953       asection *first = elf_next_in_group (sec);
13954
13955       if (first != NULL && elf_next_in_group (first) == first)
13956         /* Check this single member group against linkonce sections.  */
13957         for (l = already_linked_list->entry; l != NULL; l = l->next)
13958           if ((l->sec->flags & SEC_GROUP) == 0
13959               && bfd_elf_match_symbols_in_sections (l->sec, first, info))
13960             {
13961               first->output_section = bfd_abs_section_ptr;
13962               first->kept_section = l->sec;
13963               sec->output_section = bfd_abs_section_ptr;
13964               break;
13965             }
13966     }
13967   else
13968     /* Check this linkonce section against single member groups.  */
13969     for (l = already_linked_list->entry; l != NULL; l = l->next)
13970       if (l->sec->flags & SEC_GROUP)
13971         {
13972           asection *first = elf_next_in_group (l->sec);
13973
13974           if (first != NULL
13975               && elf_next_in_group (first) == first
13976               && bfd_elf_match_symbols_in_sections (first, sec, info))
13977             {
13978               sec->output_section = bfd_abs_section_ptr;
13979               sec->kept_section = first;
13980               break;
13981             }
13982         }
13983
13984   /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F'
13985      referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4
13986      specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce'
13987      prefix) instead.  `.gnu.linkonce.r.*' were the `.rodata' part of its
13988      matching `.gnu.linkonce.t.*'.  If `.gnu.linkonce.r.F' is not discarded
13989      but its `.gnu.linkonce.t.F' is discarded means we chose one-only
13990      `.gnu.linkonce.t.F' section from a different bfd not requiring any
13991      `.gnu.linkonce.r.F'.  Thus `.gnu.linkonce.r.F' should be discarded.
13992      The reverse order cannot happen as there is never a bfd with only the
13993      `.gnu.linkonce.r.F' section.  The order of sections in a bfd does not
13994      matter as here were are looking only for cross-bfd sections.  */
13995
13996   if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
13997     for (l = already_linked_list->entry; l != NULL; l = l->next)
13998       if ((l->sec->flags & SEC_GROUP) == 0
13999           && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
14000         {
14001           if (abfd != l->sec->owner)
14002             sec->output_section = bfd_abs_section_ptr;
14003           break;
14004         }
14005
14006   /* This is the first section with this name.  Record it.  */
14007   if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
14008     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
14009   return sec->output_section == bfd_abs_section_ptr;
14010 }
14011
14012 bfd_boolean
14013 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
14014 {
14015   return sym->st_shndx == SHN_COMMON;
14016 }
14017
14018 unsigned int
14019 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
14020 {
14021   return SHN_COMMON;
14022 }
14023
14024 asection *
14025 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
14026 {
14027   return bfd_com_section_ptr;
14028 }
14029
14030 bfd_vma
14031 _bfd_elf_default_got_elt_size (bfd *abfd,
14032                                struct bfd_link_info *info ATTRIBUTE_UNUSED,
14033                                struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
14034                                bfd *ibfd ATTRIBUTE_UNUSED,
14035                                unsigned long symndx ATTRIBUTE_UNUSED)
14036 {
14037   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14038   return bed->s->arch_size / 8;
14039 }
14040
14041 /* Routines to support the creation of dynamic relocs.  */
14042
14043 /* Returns the name of the dynamic reloc section associated with SEC.  */
14044
14045 static const char *
14046 get_dynamic_reloc_section_name (bfd *       abfd,
14047                                 asection *  sec,
14048                                 bfd_boolean is_rela)
14049 {
14050   char *name;
14051   const char *old_name = bfd_get_section_name (NULL, sec);
14052   const char *prefix = is_rela ? ".rela" : ".rel";
14053
14054   if (old_name == NULL)
14055     return NULL;
14056
14057   name = bfd_alloc (abfd, strlen (prefix) + strlen (old_name) + 1);
14058   sprintf (name, "%s%s", prefix, old_name);
14059
14060   return name;
14061 }
14062
14063 /* Returns the dynamic reloc section associated with SEC.
14064    If necessary compute the name of the dynamic reloc section based
14065    on SEC's name (looked up in ABFD's string table) and the setting
14066    of IS_RELA.  */
14067
14068 asection *
14069 _bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
14070                                     asection *  sec,
14071                                     bfd_boolean is_rela)
14072 {
14073   asection * reloc_sec = elf_section_data (sec)->sreloc;
14074
14075   if (reloc_sec == NULL)
14076     {
14077       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
14078
14079       if (name != NULL)
14080         {
14081           reloc_sec = bfd_get_linker_section (abfd, name);
14082
14083           if (reloc_sec != NULL)
14084             elf_section_data (sec)->sreloc = reloc_sec;
14085         }
14086     }
14087
14088   return reloc_sec;
14089 }
14090
14091 /* Returns the dynamic reloc section associated with SEC.  If the
14092    section does not exist it is created and attached to the DYNOBJ
14093    bfd and stored in the SRELOC field of SEC's elf_section_data
14094    structure.
14095
14096    ALIGNMENT is the alignment for the newly created section and
14097    IS_RELA defines whether the name should be .rela.<SEC's name>
14098    or .rel.<SEC's name>.  The section name is looked up in the
14099    string table associated with ABFD.  */
14100
14101 asection *
14102 _bfd_elf_make_dynamic_reloc_section (asection *sec,
14103                                      bfd *dynobj,
14104                                      unsigned int alignment,
14105                                      bfd *abfd,
14106                                      bfd_boolean is_rela)
14107 {
14108   asection * reloc_sec = elf_section_data (sec)->sreloc;
14109
14110   if (reloc_sec == NULL)
14111     {
14112       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
14113
14114       if (name == NULL)
14115         return NULL;
14116
14117       reloc_sec = bfd_get_linker_section (dynobj, name);
14118
14119       if (reloc_sec == NULL)
14120         {
14121           flagword flags = (SEC_HAS_CONTENTS | SEC_READONLY
14122                             | SEC_IN_MEMORY | SEC_LINKER_CREATED);
14123           if ((sec->flags & SEC_ALLOC) != 0)
14124             flags |= SEC_ALLOC | SEC_LOAD;
14125
14126           reloc_sec = bfd_make_section_anyway_with_flags (dynobj, name, flags);
14127           if (reloc_sec != NULL)
14128             {
14129               /* _bfd_elf_get_sec_type_attr chooses a section type by
14130                  name.  Override as it may be wrong, eg. for a user
14131                  section named "auto" we'll get ".relauto" which is
14132                  seen to be a .rela section.  */
14133               elf_section_type (reloc_sec) = is_rela ? SHT_RELA : SHT_REL;
14134               if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
14135                 reloc_sec = NULL;
14136             }
14137         }
14138
14139       elf_section_data (sec)->sreloc = reloc_sec;
14140     }
14141
14142   return reloc_sec;
14143 }
14144
14145 /* Copy the ELF symbol type and other attributes for a linker script
14146    assignment from HSRC to HDEST.  Generally this should be treated as
14147    if we found a strong non-dynamic definition for HDEST (except that
14148    ld ignores multiple definition errors).  */
14149 void
14150 _bfd_elf_copy_link_hash_symbol_type (bfd *abfd,
14151                                      struct bfd_link_hash_entry *hdest,
14152                                      struct bfd_link_hash_entry *hsrc)
14153 {
14154   struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *) hdest;
14155   struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *) hsrc;
14156   Elf_Internal_Sym isym;
14157
14158   ehdest->type = ehsrc->type;
14159   ehdest->target_internal = ehsrc->target_internal;
14160
14161   isym.st_other = ehsrc->other;
14162   elf_merge_st_other (abfd, ehdest, &isym, NULL, TRUE, FALSE);
14163 }
14164
14165 /* Append a RELA relocation REL to section S in BFD.  */
14166
14167 void
14168 elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
14169 {
14170   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14171   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
14172   BFD_ASSERT (loc + bed->s->sizeof_rela <= s->contents + s->size);
14173   bed->s->swap_reloca_out (abfd, rel, loc);
14174 }
14175
14176 /* Append a REL relocation REL to section S in BFD.  */
14177
14178 void
14179 elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
14180 {
14181   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14182   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rel);
14183   BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size);
14184   bed->s->swap_reloc_out (abfd, rel, loc);
14185 }