Automatic date update in version.in
[external/binutils.git] / bfd / elflink.c
1 /* ELF linking support for BFD.
2    Copyright (C) 1995-2018 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           asection *s;
222           for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
223             if ((ibfd->flags
224                  & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0
225                 && bfd_get_flavour (ibfd) == bfd_target_elf_flavour
226                 && !((s = ibfd->sections) != NULL
227                      && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS))
228               {
229                 abfd = ibfd;
230                 break;
231               }
232         }
233       hash_table->dynobj = abfd;
234     }
235
236   if (hash_table->dynstr == NULL)
237     {
238       hash_table->dynstr = _bfd_elf_strtab_init ();
239       if (hash_table->dynstr == NULL)
240         return FALSE;
241     }
242   return TRUE;
243 }
244
245 /* Create some sections which will be filled in with dynamic linking
246    information.  ABFD is an input file which requires dynamic sections
247    to be created.  The dynamic sections take up virtual memory space
248    when the final executable is run, so we need to create them before
249    addresses are assigned to the output sections.  We work out the
250    actual contents and size of these sections later.  */
251
252 bfd_boolean
253 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
254 {
255   flagword flags;
256   asection *s;
257   const struct elf_backend_data *bed;
258   struct elf_link_hash_entry *h;
259
260   if (! is_elf_hash_table (info->hash))
261     return FALSE;
262
263   if (elf_hash_table (info)->dynamic_sections_created)
264     return TRUE;
265
266   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
267     return FALSE;
268
269   abfd = elf_hash_table (info)->dynobj;
270   bed = get_elf_backend_data (abfd);
271
272   flags = bed->dynamic_sec_flags;
273
274   /* A dynamically linked executable has a .interp section, but a
275      shared library does not.  */
276   if (bfd_link_executable (info) && !info->nointerp)
277     {
278       s = bfd_make_section_anyway_with_flags (abfd, ".interp",
279                                               flags | SEC_READONLY);
280       if (s == NULL)
281         return FALSE;
282     }
283
284   /* Create sections to hold version informations.  These are removed
285      if they are not needed.  */
286   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_d",
287                                           flags | SEC_READONLY);
288   if (s == NULL
289       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
290     return FALSE;
291
292   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version",
293                                           flags | SEC_READONLY);
294   if (s == NULL
295       || ! bfd_set_section_alignment (abfd, s, 1))
296     return FALSE;
297
298   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_r",
299                                           flags | SEC_READONLY);
300   if (s == NULL
301       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
302     return FALSE;
303
304   s = bfd_make_section_anyway_with_flags (abfd, ".dynsym",
305                                           flags | SEC_READONLY);
306   if (s == NULL
307       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
308     return FALSE;
309   elf_hash_table (info)->dynsym = s;
310
311   s = bfd_make_section_anyway_with_flags (abfd, ".dynstr",
312                                           flags | SEC_READONLY);
313   if (s == NULL)
314     return FALSE;
315
316   s = bfd_make_section_anyway_with_flags (abfd, ".dynamic", flags);
317   if (s == NULL
318       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
319     return FALSE;
320
321   /* The special symbol _DYNAMIC is always set to the start of the
322      .dynamic section.  We could set _DYNAMIC in a linker script, but we
323      only want to define it if we are, in fact, creating a .dynamic
324      section.  We don't want to define it if there is no .dynamic
325      section, since on some ELF platforms the start up code examines it
326      to decide how to initialize the process.  */
327   h = _bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC");
328   elf_hash_table (info)->hdynamic = h;
329   if (h == NULL)
330     return FALSE;
331
332   if (info->emit_hash)
333     {
334       s = bfd_make_section_anyway_with_flags (abfd, ".hash",
335                                               flags | SEC_READONLY);
336       if (s == NULL
337           || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
338         return FALSE;
339       elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
340     }
341
342   if (info->emit_gnu_hash)
343     {
344       s = bfd_make_section_anyway_with_flags (abfd, ".gnu.hash",
345                                               flags | SEC_READONLY);
346       if (s == NULL
347           || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
348         return FALSE;
349       /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section:
350          4 32-bit words followed by variable count of 64-bit words, then
351          variable count of 32-bit words.  */
352       if (bed->s->arch_size == 64)
353         elf_section_data (s)->this_hdr.sh_entsize = 0;
354       else
355         elf_section_data (s)->this_hdr.sh_entsize = 4;
356     }
357
358   /* Let the backend create the rest of the sections.  This lets the
359      backend set the right flags.  The backend will normally create
360      the .got and .plt sections.  */
361   if (bed->elf_backend_create_dynamic_sections == NULL
362       || ! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
363     return FALSE;
364
365   elf_hash_table (info)->dynamic_sections_created = TRUE;
366
367   return TRUE;
368 }
369
370 /* Create dynamic sections when linking against a dynamic object.  */
371
372 bfd_boolean
373 _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
374 {
375   flagword flags, pltflags;
376   struct elf_link_hash_entry *h;
377   asection *s;
378   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
379   struct elf_link_hash_table *htab = elf_hash_table (info);
380
381   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
382      .rel[a].bss sections.  */
383   flags = bed->dynamic_sec_flags;
384
385   pltflags = flags;
386   if (bed->plt_not_loaded)
387     /* We do not clear SEC_ALLOC here because we still want the OS to
388        allocate space for the section; it's just that there's nothing
389        to read in from the object file.  */
390     pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS);
391   else
392     pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD;
393   if (bed->plt_readonly)
394     pltflags |= SEC_READONLY;
395
396   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
397   if (s == NULL
398       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
399     return FALSE;
400   htab->splt = s;
401
402   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
403      .plt section.  */
404   if (bed->want_plt_sym)
405     {
406       h = _bfd_elf_define_linkage_sym (abfd, info, s,
407                                        "_PROCEDURE_LINKAGE_TABLE_");
408       elf_hash_table (info)->hplt = h;
409       if (h == NULL)
410         return FALSE;
411     }
412
413   s = bfd_make_section_anyway_with_flags (abfd,
414                                           (bed->rela_plts_and_copies_p
415                                            ? ".rela.plt" : ".rel.plt"),
416                                           flags | SEC_READONLY);
417   if (s == NULL
418       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
419     return FALSE;
420   htab->srelplt = s;
421
422   if (! _bfd_elf_create_got_section (abfd, info))
423     return FALSE;
424
425   if (bed->want_dynbss)
426     {
427       /* The .dynbss section is a place to put symbols which are defined
428          by dynamic objects, are referenced by regular objects, and are
429          not functions.  We must allocate space for them in the process
430          image and use a R_*_COPY reloc to tell the dynamic linker to
431          initialize them at run time.  The linker script puts the .dynbss
432          section into the .bss section of the final image.  */
433       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
434                                               SEC_ALLOC | SEC_LINKER_CREATED);
435       if (s == NULL)
436         return FALSE;
437       htab->sdynbss = s;
438
439       if (bed->want_dynrelro)
440         {
441           /* Similarly, but for symbols that were originally in read-only
442              sections.  This section doesn't really need to have contents,
443              but make it like other .data.rel.ro sections.  */
444           s = bfd_make_section_anyway_with_flags (abfd, ".data.rel.ro",
445                                                   flags);
446           if (s == NULL)
447             return FALSE;
448           htab->sdynrelro = s;
449         }
450
451       /* The .rel[a].bss section holds copy relocs.  This section is not
452          normally needed.  We need to create it here, though, so that the
453          linker will map it to an output section.  We can't just create it
454          only if we need it, because we will not know whether we need it
455          until we have seen all the input files, and the first time the
456          main linker code calls BFD after examining all the input files
457          (size_dynamic_sections) the input sections have already been
458          mapped to the output sections.  If the section turns out not to
459          be needed, we can discard it later.  We will never need this
460          section when generating a shared object, since they do not use
461          copy relocs.  */
462       if (bfd_link_executable (info))
463         {
464           s = bfd_make_section_anyway_with_flags (abfd,
465                                                   (bed->rela_plts_and_copies_p
466                                                    ? ".rela.bss" : ".rel.bss"),
467                                                   flags | SEC_READONLY);
468           if (s == NULL
469               || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
470             return FALSE;
471           htab->srelbss = s;
472
473           if (bed->want_dynrelro)
474             {
475               s = (bfd_make_section_anyway_with_flags
476                    (abfd, (bed->rela_plts_and_copies_p
477                            ? ".rela.data.rel.ro" : ".rel.data.rel.ro"),
478                     flags | SEC_READONLY));
479               if (s == NULL
480                   || ! bfd_set_section_alignment (abfd, s,
481                                                   bed->s->log_file_align))
482                 return FALSE;
483               htab->sreldynrelro = s;
484             }
485         }
486     }
487
488   return TRUE;
489 }
490 \f
491 /* Record a new dynamic symbol.  We record the dynamic symbols as we
492    read the input files, since we need to have a list of all of them
493    before we can determine the final sizes of the output sections.
494    Note that we may actually call this function even though we are not
495    going to output any dynamic symbols; in some cases we know that a
496    symbol should be in the dynamic symbol table, but only if there is
497    one.  */
498
499 bfd_boolean
500 bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
501                                     struct elf_link_hash_entry *h)
502 {
503   if (h->dynindx == -1)
504     {
505       struct elf_strtab_hash *dynstr;
506       char *p;
507       const char *name;
508       size_t indx;
509
510       /* XXX: The ABI draft says the linker must turn hidden and
511          internal symbols into STB_LOCAL symbols when producing the
512          DSO. However, if ld.so honors st_other in the dynamic table,
513          this would not be necessary.  */
514       switch (ELF_ST_VISIBILITY (h->other))
515         {
516         case STV_INTERNAL:
517         case STV_HIDDEN:
518           if (h->root.type != bfd_link_hash_undefined
519               && h->root.type != bfd_link_hash_undefweak)
520             {
521               h->forced_local = 1;
522               if (!elf_hash_table (info)->is_relocatable_executable)
523                 return TRUE;
524             }
525
526         default:
527           break;
528         }
529
530       h->dynindx = elf_hash_table (info)->dynsymcount;
531       ++elf_hash_table (info)->dynsymcount;
532
533       dynstr = elf_hash_table (info)->dynstr;
534       if (dynstr == NULL)
535         {
536           /* Create a strtab to hold the dynamic symbol names.  */
537           elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
538           if (dynstr == NULL)
539             return FALSE;
540         }
541
542       /* We don't put any version information in the dynamic string
543          table.  */
544       name = h->root.root.string;
545       p = strchr (name, ELF_VER_CHR);
546       if (p != NULL)
547         /* We know that the p points into writable memory.  In fact,
548            there are only a few symbols that have read-only names, being
549            those like _GLOBAL_OFFSET_TABLE_ that are created specially
550            by the backends.  Most symbols will have names pointing into
551            an ELF string table read from a file, or to objalloc memory.  */
552         *p = 0;
553
554       indx = _bfd_elf_strtab_add (dynstr, name, p != NULL);
555
556       if (p != NULL)
557         *p = ELF_VER_CHR;
558
559       if (indx == (size_t) -1)
560         return FALSE;
561       h->dynstr_index = indx;
562     }
563
564   return TRUE;
565 }
566 \f
567 /* Mark a symbol dynamic.  */
568
569 static void
570 bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info,
571                                   struct elf_link_hash_entry *h,
572                                   Elf_Internal_Sym *sym)
573 {
574   struct bfd_elf_dynamic_list *d = info->dynamic_list;
575
576   /* It may be called more than once on the same H.  */
577   if(h->dynamic || bfd_link_relocatable (info))
578     return;
579
580   if ((info->dynamic_data
581        && (h->type == STT_OBJECT
582            || h->type == STT_COMMON
583            || (sym != NULL
584                && (ELF_ST_TYPE (sym->st_info) == STT_OBJECT
585                    || ELF_ST_TYPE (sym->st_info) == STT_COMMON))))
586       || (d != NULL
587           && h->non_elf
588           && (*d->match) (&d->head, NULL, h->root.root.string)))
589     {
590       h->dynamic = 1;
591       /* NB: If a symbol is made dynamic by --dynamic-list, it has
592          non-IR reference.  */
593       h->root.non_ir_ref_dynamic = 1;
594     }
595 }
596
597 /* Record an assignment to a symbol made by a linker script.  We need
598    this in case some dynamic object refers to this symbol.  */
599
600 bfd_boolean
601 bfd_elf_record_link_assignment (bfd *output_bfd,
602                                 struct bfd_link_info *info,
603                                 const char *name,
604                                 bfd_boolean provide,
605                                 bfd_boolean hidden)
606 {
607   struct elf_link_hash_entry *h, *hv;
608   struct elf_link_hash_table *htab;
609   const struct elf_backend_data *bed;
610
611   if (!is_elf_hash_table (info->hash))
612     return TRUE;
613
614   htab = elf_hash_table (info);
615   h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE);
616   if (h == NULL)
617     return provide;
618
619   if (h->root.type == bfd_link_hash_warning)
620     h = (struct elf_link_hash_entry *) h->root.u.i.link;
621
622   if (h->versioned == unknown)
623     {
624       /* Set versioned if symbol version is unknown.  */
625       char *version = strrchr (name, ELF_VER_CHR);
626       if (version)
627         {
628           if (version > name && version[-1] != ELF_VER_CHR)
629             h->versioned = versioned_hidden;
630           else
631             h->versioned = versioned;
632         }
633     }
634
635   /* Symbols defined in a linker script but not referenced anywhere
636      else will have non_elf set.  */
637   if (h->non_elf)
638     {
639       bfd_elf_link_mark_dynamic_symbol (info, h, NULL);
640       h->non_elf = 0;
641     }
642
643   switch (h->root.type)
644     {
645     case bfd_link_hash_defined:
646     case bfd_link_hash_defweak:
647     case bfd_link_hash_common:
648       break;
649     case bfd_link_hash_undefweak:
650     case bfd_link_hash_undefined:
651       /* Since we're defining the symbol, don't let it seem to have not
652          been defined.  record_dynamic_symbol and size_dynamic_sections
653          may depend on this.  */
654       h->root.type = bfd_link_hash_new;
655       if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root)
656         bfd_link_repair_undef_list (&htab->root);
657       break;
658     case bfd_link_hash_new:
659       break;
660     case bfd_link_hash_indirect:
661       /* We had a versioned symbol in a dynamic library.  We make the
662          the versioned symbol point to this one.  */
663       bed = get_elf_backend_data (output_bfd);
664       hv = h;
665       while (hv->root.type == bfd_link_hash_indirect
666              || hv->root.type == bfd_link_hash_warning)
667         hv = (struct elf_link_hash_entry *) hv->root.u.i.link;
668       /* We don't need to update h->root.u since linker will set them
669          later.  */
670       h->root.type = bfd_link_hash_undefined;
671       hv->root.type = bfd_link_hash_indirect;
672       hv->root.u.i.link = (struct bfd_link_hash_entry *) h;
673       (*bed->elf_backend_copy_indirect_symbol) (info, h, hv);
674       break;
675     default:
676       BFD_FAIL ();
677       return FALSE;
678     }
679
680   /* If this symbol is being provided by the linker script, and it is
681      currently defined by a dynamic object, but not by a regular
682      object, then mark it as undefined so that the generic linker will
683      force the correct value.  */
684   if (provide
685       && h->def_dynamic
686       && !h->def_regular)
687     h->root.type = bfd_link_hash_undefined;
688
689   /* If this symbol is not being provided by the linker script, and it is
690      currently defined by a dynamic object, but not by a regular object,
691      then clear out any version information because the symbol will not be
692      associated with the dynamic object any more.  */
693   if (!provide
694       && h->def_dynamic
695       && !h->def_regular)
696     h->verinfo.verdef = NULL;
697
698   /* Make sure this symbol is not garbage collected.  */
699   h->mark = 1;
700
701   h->def_regular = 1;
702
703   if (hidden)
704     {
705       bed = get_elf_backend_data (output_bfd);
706       if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
707         h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
708       (*bed->elf_backend_hide_symbol) (info, h, TRUE);
709     }
710
711   /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects
712      and executables.  */
713   if (!bfd_link_relocatable (info)
714       && h->dynindx != -1
715       && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
716           || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL))
717     h->forced_local = 1;
718
719   if ((h->def_dynamic
720        || h->ref_dynamic
721        || bfd_link_dll (info)
722        || elf_hash_table (info)->is_relocatable_executable)
723       && !h->forced_local
724       && h->dynindx == -1)
725     {
726       if (! bfd_elf_link_record_dynamic_symbol (info, h))
727         return FALSE;
728
729       /* If this is a weak defined symbol, and we know a corresponding
730          real symbol from the same dynamic object, make sure the real
731          symbol is also made into a dynamic symbol.  */
732       if (h->is_weakalias)
733         {
734           struct elf_link_hash_entry *def = weakdef (h);
735
736           if (def->dynindx == -1
737               && !bfd_elf_link_record_dynamic_symbol (info, def))
738             return FALSE;
739         }
740     }
741
742   return TRUE;
743 }
744
745 /* Record a new local dynamic symbol.  Returns 0 on failure, 1 on
746    success, and 2 on a failure caused by attempting to record a symbol
747    in a discarded section, eg. a discarded link-once section symbol.  */
748
749 int
750 bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info,
751                                           bfd *input_bfd,
752                                           long input_indx)
753 {
754   bfd_size_type amt;
755   struct elf_link_local_dynamic_entry *entry;
756   struct elf_link_hash_table *eht;
757   struct elf_strtab_hash *dynstr;
758   size_t dynstr_index;
759   char *name;
760   Elf_External_Sym_Shndx eshndx;
761   char esym[sizeof (Elf64_External_Sym)];
762
763   if (! is_elf_hash_table (info->hash))
764     return 0;
765
766   /* See if the entry exists already.  */
767   for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
768     if (entry->input_bfd == input_bfd && entry->input_indx == input_indx)
769       return 1;
770
771   amt = sizeof (*entry);
772   entry = (struct elf_link_local_dynamic_entry *) bfd_alloc (input_bfd, amt);
773   if (entry == NULL)
774     return 0;
775
776   /* Go find the symbol, so that we can find it's name.  */
777   if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr,
778                              1, input_indx, &entry->isym, esym, &eshndx))
779     {
780       bfd_release (input_bfd, entry);
781       return 0;
782     }
783
784   if (entry->isym.st_shndx != SHN_UNDEF
785       && entry->isym.st_shndx < SHN_LORESERVE)
786     {
787       asection *s;
788
789       s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx);
790       if (s == NULL || bfd_is_abs_section (s->output_section))
791         {
792           /* We can still bfd_release here as nothing has done another
793              bfd_alloc.  We can't do this later in this function.  */
794           bfd_release (input_bfd, entry);
795           return 2;
796         }
797     }
798
799   name = (bfd_elf_string_from_elf_section
800           (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link,
801            entry->isym.st_name));
802
803   dynstr = elf_hash_table (info)->dynstr;
804   if (dynstr == NULL)
805     {
806       /* Create a strtab to hold the dynamic symbol names.  */
807       elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
808       if (dynstr == NULL)
809         return 0;
810     }
811
812   dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE);
813   if (dynstr_index == (size_t) -1)
814     return 0;
815   entry->isym.st_name = dynstr_index;
816
817   eht = elf_hash_table (info);
818
819   entry->next = eht->dynlocal;
820   eht->dynlocal = entry;
821   entry->input_bfd = input_bfd;
822   entry->input_indx = input_indx;
823   eht->dynsymcount++;
824
825   /* Whatever binding the symbol had before, it's now local.  */
826   entry->isym.st_info
827     = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info));
828
829   /* The dynindx will be set at the end of size_dynamic_sections.  */
830
831   return 1;
832 }
833
834 /* Return the dynindex of a local dynamic symbol.  */
835
836 long
837 _bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info,
838                                     bfd *input_bfd,
839                                     long input_indx)
840 {
841   struct elf_link_local_dynamic_entry *e;
842
843   for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
844     if (e->input_bfd == input_bfd && e->input_indx == input_indx)
845       return e->dynindx;
846   return -1;
847 }
848
849 /* This function is used to renumber the dynamic symbols, if some of
850    them are removed because they are marked as local.  This is called
851    via elf_link_hash_traverse.  */
852
853 static bfd_boolean
854 elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h,
855                                       void *data)
856 {
857   size_t *count = (size_t *) data;
858
859   if (h->forced_local)
860     return TRUE;
861
862   if (h->dynindx != -1)
863     h->dynindx = ++(*count);
864
865   return TRUE;
866 }
867
868
869 /* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with
870    STB_LOCAL binding.  */
871
872 static bfd_boolean
873 elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h,
874                                             void *data)
875 {
876   size_t *count = (size_t *) data;
877
878   if (!h->forced_local)
879     return TRUE;
880
881   if (h->dynindx != -1)
882     h->dynindx = ++(*count);
883
884   return TRUE;
885 }
886
887 /* Return true if the dynamic symbol for a given section should be
888    omitted when creating a shared library.  */
889 bfd_boolean
890 _bfd_elf_omit_section_dynsym_default (bfd *output_bfd ATTRIBUTE_UNUSED,
891                                       struct bfd_link_info *info,
892                                       asection *p)
893 {
894   struct elf_link_hash_table *htab;
895   asection *ip;
896
897   switch (elf_section_data (p)->this_hdr.sh_type)
898     {
899     case SHT_PROGBITS:
900     case SHT_NOBITS:
901       /* If sh_type is yet undecided, assume it could be
902          SHT_PROGBITS/SHT_NOBITS.  */
903     case SHT_NULL:
904       htab = elf_hash_table (info);
905       if (p == htab->tls_sec)
906         return FALSE;
907
908       if (htab->text_index_section != NULL)
909         return p != htab->text_index_section && p != htab->data_index_section;
910
911       return (htab->dynobj != NULL
912               && (ip = bfd_get_linker_section (htab->dynobj, p->name)) != NULL
913               && ip->output_section == p);
914
915       /* There shouldn't be section relative relocations
916          against any other section.  */
917     default:
918       return TRUE;
919     }
920 }
921
922 bfd_boolean
923 _bfd_elf_omit_section_dynsym_all
924     (bfd *output_bfd ATTRIBUTE_UNUSED,
925      struct bfd_link_info *info ATTRIBUTE_UNUSED,
926      asection *p ATTRIBUTE_UNUSED)
927 {
928   return TRUE;
929 }
930
931 /* Assign dynsym indices.  In a shared library we generate a section
932    symbol for each output section, which come first.  Next come symbols
933    which have been forced to local binding.  Then all of the back-end
934    allocated local dynamic syms, followed by the rest of the global
935    symbols.  If SECTION_SYM_COUNT is NULL, section dynindx is not set.
936    (This prevents the early call before elf_backend_init_index_section
937    and strip_excluded_output_sections setting dynindx for sections
938    that are stripped.)  */
939
940 static unsigned long
941 _bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
942                                 struct bfd_link_info *info,
943                                 unsigned long *section_sym_count)
944 {
945   unsigned long dynsymcount = 0;
946   bfd_boolean do_sec = section_sym_count != NULL;
947
948   if (bfd_link_pic (info)
949       || elf_hash_table (info)->is_relocatable_executable)
950     {
951       const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
952       asection *p;
953       for (p = output_bfd->sections; p ; p = p->next)
954         if ((p->flags & SEC_EXCLUDE) == 0
955             && (p->flags & SEC_ALLOC) != 0
956             && elf_hash_table (info)->dynamic_relocs
957             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
958           {
959             ++dynsymcount;
960             if (do_sec)
961               elf_section_data (p)->dynindx = dynsymcount;
962           }
963         else if (do_sec)
964           elf_section_data (p)->dynindx = 0;
965     }
966   if (do_sec)
967     *section_sym_count = dynsymcount;
968
969   elf_link_hash_traverse (elf_hash_table (info),
970                           elf_link_renumber_local_hash_table_dynsyms,
971                           &dynsymcount);
972
973   if (elf_hash_table (info)->dynlocal)
974     {
975       struct elf_link_local_dynamic_entry *p;
976       for (p = elf_hash_table (info)->dynlocal; p ; p = p->next)
977         p->dynindx = ++dynsymcount;
978     }
979   elf_hash_table (info)->local_dynsymcount = dynsymcount;
980
981   elf_link_hash_traverse (elf_hash_table (info),
982                           elf_link_renumber_hash_table_dynsyms,
983                           &dynsymcount);
984
985   /* There is an unused NULL entry at the head of the table which we
986      must account for in our count even if the table is empty since it
987      is intended for the mandatory DT_SYMTAB tag (.dynsym section) in
988      .dynamic section.  */
989   dynsymcount++;
990
991   elf_hash_table (info)->dynsymcount = dynsymcount;
992   return dynsymcount;
993 }
994
995 /* Merge st_other field.  */
996
997 static void
998 elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h,
999                     const Elf_Internal_Sym *isym, asection *sec,
1000                     bfd_boolean definition, bfd_boolean dynamic)
1001 {
1002   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1003
1004   /* If st_other has a processor-specific meaning, specific
1005      code might be needed here.  */
1006   if (bed->elf_backend_merge_symbol_attribute)
1007     (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
1008                                                 dynamic);
1009
1010   if (!dynamic)
1011     {
1012       unsigned symvis = ELF_ST_VISIBILITY (isym->st_other);
1013       unsigned hvis = ELF_ST_VISIBILITY (h->other);
1014
1015       /* Keep the most constraining visibility.  Leave the remainder
1016          of the st_other field to elf_backend_merge_symbol_attribute.  */
1017       if (symvis - 1 < hvis - 1)
1018         h->other = symvis | (h->other & ~ELF_ST_VISIBILITY (-1));
1019     }
1020   else if (definition
1021            && ELF_ST_VISIBILITY (isym->st_other) != STV_DEFAULT
1022            && (sec->flags & SEC_READONLY) == 0)
1023     h->protected_def = 1;
1024 }
1025
1026 /* This function is called when we want to merge a new symbol with an
1027    existing symbol.  It handles the various cases which arise when we
1028    find a definition in a dynamic object, or when there is already a
1029    definition in a dynamic object.  The new symbol is described by
1030    NAME, SYM, PSEC, and PVALUE.  We set SYM_HASH to the hash table
1031    entry.  We set POLDBFD to the old symbol's BFD.  We set POLD_WEAK
1032    if the old symbol was weak.  We set POLD_ALIGNMENT to the alignment
1033    of an old common symbol.  We set OVERRIDE if the old symbol is
1034    overriding a new definition.  We set TYPE_CHANGE_OK if it is OK for
1035    the type to change.  We set SIZE_CHANGE_OK if it is OK for the size
1036    to change.  By OK to change, we mean that we shouldn't warn if the
1037    type or size does change.  */
1038
1039 static bfd_boolean
1040 _bfd_elf_merge_symbol (bfd *abfd,
1041                        struct bfd_link_info *info,
1042                        const char *name,
1043                        Elf_Internal_Sym *sym,
1044                        asection **psec,
1045                        bfd_vma *pvalue,
1046                        struct elf_link_hash_entry **sym_hash,
1047                        bfd **poldbfd,
1048                        bfd_boolean *pold_weak,
1049                        unsigned int *pold_alignment,
1050                        bfd_boolean *skip,
1051                        bfd_boolean *override,
1052                        bfd_boolean *type_change_ok,
1053                        bfd_boolean *size_change_ok,
1054                        bfd_boolean *matched)
1055 {
1056   asection *sec, *oldsec;
1057   struct elf_link_hash_entry *h;
1058   struct elf_link_hash_entry *hi;
1059   struct elf_link_hash_entry *flip;
1060   int bind;
1061   bfd *oldbfd;
1062   bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
1063   bfd_boolean newweak, oldweak, newfunc, oldfunc;
1064   const struct elf_backend_data *bed;
1065   char *new_version;
1066   bfd_boolean default_sym = *matched;
1067
1068   *skip = FALSE;
1069   *override = FALSE;
1070
1071   sec = *psec;
1072   bind = ELF_ST_BIND (sym->st_info);
1073
1074   if (! bfd_is_und_section (sec))
1075     h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
1076   else
1077     h = ((struct elf_link_hash_entry *)
1078          bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
1079   if (h == NULL)
1080     return FALSE;
1081   *sym_hash = h;
1082
1083   bed = get_elf_backend_data (abfd);
1084
1085   /* NEW_VERSION is the symbol version of the new symbol.  */
1086   if (h->versioned != unversioned)
1087     {
1088       /* Symbol version is unknown or versioned.  */
1089       new_version = strrchr (name, ELF_VER_CHR);
1090       if (new_version)
1091         {
1092           if (h->versioned == unknown)
1093             {
1094               if (new_version > name && new_version[-1] != ELF_VER_CHR)
1095                 h->versioned = versioned_hidden;
1096               else
1097                 h->versioned = versioned;
1098             }
1099           new_version += 1;
1100           if (new_version[0] == '\0')
1101             new_version = NULL;
1102         }
1103       else
1104         h->versioned = unversioned;
1105     }
1106   else
1107     new_version = NULL;
1108
1109   /* For merging, we only care about real symbols.  But we need to make
1110      sure that indirect symbol dynamic flags are updated.  */
1111   hi = h;
1112   while (h->root.type == bfd_link_hash_indirect
1113          || h->root.type == bfd_link_hash_warning)
1114     h = (struct elf_link_hash_entry *) h->root.u.i.link;
1115
1116   if (!*matched)
1117     {
1118       if (hi == h || h->root.type == bfd_link_hash_new)
1119         *matched = TRUE;
1120       else
1121         {
1122           /* OLD_HIDDEN is true if the existing symbol is only visible
1123              to the symbol with the same symbol version.  NEW_HIDDEN is
1124              true if the new symbol is only visible to the symbol with
1125              the same symbol version.  */
1126           bfd_boolean old_hidden = h->versioned == versioned_hidden;
1127           bfd_boolean new_hidden = hi->versioned == versioned_hidden;
1128           if (!old_hidden && !new_hidden)
1129             /* The new symbol matches the existing symbol if both
1130                aren't hidden.  */
1131             *matched = TRUE;
1132           else
1133             {
1134               /* OLD_VERSION is the symbol version of the existing
1135                  symbol. */
1136               char *old_version;
1137
1138               if (h->versioned >= versioned)
1139                 old_version = strrchr (h->root.root.string,
1140                                        ELF_VER_CHR) + 1;
1141               else
1142                  old_version = NULL;
1143
1144               /* The new symbol matches the existing symbol if they
1145                  have the same symbol version.  */
1146               *matched = (old_version == new_version
1147                           || (old_version != NULL
1148                               && new_version != NULL
1149                               && strcmp (old_version, new_version) == 0));
1150             }
1151         }
1152     }
1153
1154   /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the
1155      existing symbol.  */
1156
1157   oldbfd = NULL;
1158   oldsec = NULL;
1159   switch (h->root.type)
1160     {
1161     default:
1162       break;
1163
1164     case bfd_link_hash_undefined:
1165     case bfd_link_hash_undefweak:
1166       oldbfd = h->root.u.undef.abfd;
1167       break;
1168
1169     case bfd_link_hash_defined:
1170     case bfd_link_hash_defweak:
1171       oldbfd = h->root.u.def.section->owner;
1172       oldsec = h->root.u.def.section;
1173       break;
1174
1175     case bfd_link_hash_common:
1176       oldbfd = h->root.u.c.p->section->owner;
1177       oldsec = h->root.u.c.p->section;
1178       if (pold_alignment)
1179         *pold_alignment = h->root.u.c.p->alignment_power;
1180       break;
1181     }
1182   if (poldbfd && *poldbfd == NULL)
1183     *poldbfd = oldbfd;
1184
1185   /* Differentiate strong and weak symbols.  */
1186   newweak = bind == STB_WEAK;
1187   oldweak = (h->root.type == bfd_link_hash_defweak
1188              || h->root.type == bfd_link_hash_undefweak);
1189   if (pold_weak)
1190     *pold_weak = oldweak;
1191
1192   /* We have to check it for every instance since the first few may be
1193      references and not all compilers emit symbol type for undefined
1194      symbols.  */
1195   bfd_elf_link_mark_dynamic_symbol (info, h, sym);
1196
1197   /* NEWDYN and OLDDYN indicate whether the new or old symbol,
1198      respectively, is from a dynamic object.  */
1199
1200   newdyn = (abfd->flags & DYNAMIC) != 0;
1201
1202   /* ref_dynamic_nonweak and dynamic_def flags track actual undefined
1203      syms and defined syms in dynamic libraries respectively.
1204      ref_dynamic on the other hand can be set for a symbol defined in
1205      a dynamic library, and def_dynamic may not be set;  When the
1206      definition in a dynamic lib is overridden by a definition in the
1207      executable use of the symbol in the dynamic lib becomes a
1208      reference to the executable symbol.  */
1209   if (newdyn)
1210     {
1211       if (bfd_is_und_section (sec))
1212         {
1213           if (bind != STB_WEAK)
1214             {
1215               h->ref_dynamic_nonweak = 1;
1216               hi->ref_dynamic_nonweak = 1;
1217             }
1218         }
1219       else
1220         {
1221           /* Update the existing symbol only if they match. */
1222           if (*matched)
1223             h->dynamic_def = 1;
1224           hi->dynamic_def = 1;
1225         }
1226     }
1227
1228   /* If we just created the symbol, mark it as being an ELF symbol.
1229      Other than that, there is nothing to do--there is no merge issue
1230      with a newly defined symbol--so we just return.  */
1231
1232   if (h->root.type == bfd_link_hash_new)
1233     {
1234       h->non_elf = 0;
1235       return TRUE;
1236     }
1237
1238   /* In cases involving weak versioned symbols, we may wind up trying
1239      to merge a symbol with itself.  Catch that here, to avoid the
1240      confusion that results if we try to override a symbol with
1241      itself.  The additional tests catch cases like
1242      _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a
1243      dynamic object, which we do want to handle here.  */
1244   if (abfd == oldbfd
1245       && (newweak || oldweak)
1246       && ((abfd->flags & DYNAMIC) == 0
1247           || !h->def_regular))
1248     return TRUE;
1249
1250   olddyn = FALSE;
1251   if (oldbfd != NULL)
1252     olddyn = (oldbfd->flags & DYNAMIC) != 0;
1253   else if (oldsec != NULL)
1254     {
1255       /* This handles the special SHN_MIPS_{TEXT,DATA} section
1256          indices used by MIPS ELF.  */
1257       olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
1258     }
1259
1260   /* Handle a case where plugin_notice won't be called and thus won't
1261      set the non_ir_ref flags on the first pass over symbols.  */
1262   if (oldbfd != NULL
1263       && (oldbfd->flags & BFD_PLUGIN) != (abfd->flags & BFD_PLUGIN)
1264       && newdyn != olddyn)
1265     {
1266       h->root.non_ir_ref_dynamic = TRUE;
1267       hi->root.non_ir_ref_dynamic = TRUE;
1268     }
1269
1270   /* NEWDEF and OLDDEF indicate whether the new or old symbol,
1271      respectively, appear to be a definition rather than reference.  */
1272
1273   newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec);
1274
1275   olddef = (h->root.type != bfd_link_hash_undefined
1276             && h->root.type != bfd_link_hash_undefweak
1277             && h->root.type != bfd_link_hash_common);
1278
1279   /* NEWFUNC and OLDFUNC indicate whether the new or old symbol,
1280      respectively, appear to be a function.  */
1281
1282   newfunc = (ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1283              && bed->is_function_type (ELF_ST_TYPE (sym->st_info)));
1284
1285   oldfunc = (h->type != STT_NOTYPE
1286              && bed->is_function_type (h->type));
1287
1288   if (!(newfunc && oldfunc)
1289       && ELF_ST_TYPE (sym->st_info) != h->type
1290       && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1291       && h->type != STT_NOTYPE
1292       && (newdef || bfd_is_com_section (sec))
1293       && (olddef || h->root.type == bfd_link_hash_common))
1294     {
1295       /* If creating a default indirect symbol ("foo" or "foo@") from
1296          a dynamic versioned definition ("foo@@") skip doing so if
1297          there is an existing regular definition with a different
1298          type.  We don't want, for example, a "time" variable in the
1299          executable overriding a "time" function in a shared library.  */
1300       if (newdyn
1301           && !olddyn)
1302         {
1303           *skip = TRUE;
1304           return TRUE;
1305         }
1306
1307       /* When adding a symbol from a regular object file after we have
1308          created indirect symbols, undo the indirection and any
1309          dynamic state.  */
1310       if (hi != h
1311           && !newdyn
1312           && olddyn)
1313         {
1314           h = hi;
1315           (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1316           h->forced_local = 0;
1317           h->ref_dynamic = 0;
1318           h->def_dynamic = 0;
1319           h->dynamic_def = 0;
1320           if (h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1321             {
1322               h->root.type = bfd_link_hash_undefined;
1323               h->root.u.undef.abfd = abfd;
1324             }
1325           else
1326             {
1327               h->root.type = bfd_link_hash_new;
1328               h->root.u.undef.abfd = NULL;
1329             }
1330           return TRUE;
1331         }
1332     }
1333
1334   /* Check TLS symbols.  We don't check undefined symbols introduced
1335      by "ld -u" which have no type (and oldbfd NULL), and we don't
1336      check symbols from plugins because they also have no type.  */
1337   if (oldbfd != NULL
1338       && (oldbfd->flags & BFD_PLUGIN) == 0
1339       && (abfd->flags & BFD_PLUGIN) == 0
1340       && ELF_ST_TYPE (sym->st_info) != h->type
1341       && (ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS))
1342     {
1343       bfd *ntbfd, *tbfd;
1344       bfd_boolean ntdef, tdef;
1345       asection *ntsec, *tsec;
1346
1347       if (h->type == STT_TLS)
1348         {
1349           ntbfd = abfd;
1350           ntsec = sec;
1351           ntdef = newdef;
1352           tbfd = oldbfd;
1353           tsec = oldsec;
1354           tdef = olddef;
1355         }
1356       else
1357         {
1358           ntbfd = oldbfd;
1359           ntsec = oldsec;
1360           ntdef = olddef;
1361           tbfd = abfd;
1362           tsec = sec;
1363           tdef = newdef;
1364         }
1365
1366       if (tdef && ntdef)
1367         _bfd_error_handler
1368           /* xgettext:c-format */
1369           (_("%s: TLS definition in %pB section %pA "
1370              "mismatches non-TLS definition in %pB section %pA"),
1371            h->root.root.string, tbfd, tsec, ntbfd, ntsec);
1372       else if (!tdef && !ntdef)
1373         _bfd_error_handler
1374           /* xgettext:c-format */
1375           (_("%s: TLS reference in %pB "
1376              "mismatches non-TLS reference in %pB"),
1377            h->root.root.string, tbfd, ntbfd);
1378       else if (tdef)
1379         _bfd_error_handler
1380           /* xgettext:c-format */
1381           (_("%s: TLS definition in %pB section %pA "
1382              "mismatches non-TLS reference in %pB"),
1383            h->root.root.string, tbfd, tsec, ntbfd);
1384       else
1385         _bfd_error_handler
1386           /* xgettext:c-format */
1387           (_("%s: TLS reference in %pB "
1388              "mismatches non-TLS definition in %pB section %pA"),
1389            h->root.root.string, tbfd, ntbfd, ntsec);
1390
1391       bfd_set_error (bfd_error_bad_value);
1392       return FALSE;
1393     }
1394
1395   /* If the old symbol has non-default visibility, we ignore the new
1396      definition from a dynamic object.  */
1397   if (newdyn
1398       && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1399       && !bfd_is_und_section (sec))
1400     {
1401       *skip = TRUE;
1402       /* Make sure this symbol is dynamic.  */
1403       h->ref_dynamic = 1;
1404       hi->ref_dynamic = 1;
1405       /* A protected symbol has external availability. Make sure it is
1406          recorded as dynamic.
1407
1408          FIXME: Should we check type and size for protected symbol?  */
1409       if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
1410         return bfd_elf_link_record_dynamic_symbol (info, h);
1411       else
1412         return TRUE;
1413     }
1414   else if (!newdyn
1415            && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
1416            && h->def_dynamic)
1417     {
1418       /* If the new symbol with non-default visibility comes from a
1419          relocatable file and the old definition comes from a dynamic
1420          object, we remove the old definition.  */
1421       if (hi->root.type == bfd_link_hash_indirect)
1422         {
1423           /* Handle the case where the old dynamic definition is
1424              default versioned.  We need to copy the symbol info from
1425              the symbol with default version to the normal one if it
1426              was referenced before.  */
1427           if (h->ref_regular)
1428             {
1429               hi->root.type = h->root.type;
1430               h->root.type = bfd_link_hash_indirect;
1431               (*bed->elf_backend_copy_indirect_symbol) (info, hi, h);
1432
1433               h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1434               if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
1435                 {
1436                   /* If the new symbol is hidden or internal, completely undo
1437                      any dynamic link state.  */
1438                   (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1439                   h->forced_local = 0;
1440                   h->ref_dynamic = 0;
1441                 }
1442               else
1443                 h->ref_dynamic = 1;
1444
1445               h->def_dynamic = 0;
1446               /* FIXME: Should we check type and size for protected symbol?  */
1447               h->size = 0;
1448               h->type = 0;
1449
1450               h = hi;
1451             }
1452           else
1453             h = hi;
1454         }
1455
1456       /* If the old symbol was undefined before, then it will still be
1457          on the undefs list.  If the new symbol is undefined or
1458          common, we can't make it bfd_link_hash_new here, because new
1459          undefined or common symbols will be added to the undefs list
1460          by _bfd_generic_link_add_one_symbol.  Symbols may not be
1461          added twice to the undefs list.  Also, if the new symbol is
1462          undefweak then we don't want to lose the strong undef.  */
1463       if (h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1464         {
1465           h->root.type = bfd_link_hash_undefined;
1466           h->root.u.undef.abfd = abfd;
1467         }
1468       else
1469         {
1470           h->root.type = bfd_link_hash_new;
1471           h->root.u.undef.abfd = NULL;
1472         }
1473
1474       if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
1475         {
1476           /* If the new symbol is hidden or internal, completely undo
1477              any dynamic link state.  */
1478           (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1479           h->forced_local = 0;
1480           h->ref_dynamic = 0;
1481         }
1482       else
1483         h->ref_dynamic = 1;
1484       h->def_dynamic = 0;
1485       /* FIXME: Should we check type and size for protected symbol?  */
1486       h->size = 0;
1487       h->type = 0;
1488       return TRUE;
1489     }
1490
1491   /* If a new weak symbol definition comes from a regular file and the
1492      old symbol comes from a dynamic library, we treat the new one as
1493      strong.  Similarly, an old weak symbol definition from a regular
1494      file is treated as strong when the new symbol comes from a dynamic
1495      library.  Further, an old weak symbol from a dynamic library is
1496      treated as strong if the new symbol is from a dynamic library.
1497      This reflects the way glibc's ld.so works.
1498
1499      Also allow a weak symbol to override a linker script symbol
1500      defined by an early pass over the script.  This is done so the
1501      linker knows the symbol is defined in an object file, for the
1502      DEFINED script function.
1503
1504      Do this before setting *type_change_ok or *size_change_ok so that
1505      we warn properly when dynamic library symbols are overridden.  */
1506
1507   if (newdef && !newdyn && (olddyn || h->root.ldscript_def))
1508     newweak = FALSE;
1509   if (olddef && newdyn)
1510     oldweak = FALSE;
1511
1512   /* Allow changes between different types of function symbol.  */
1513   if (newfunc && oldfunc)
1514     *type_change_ok = TRUE;
1515
1516   /* It's OK to change the type if either the existing symbol or the
1517      new symbol is weak.  A type change is also OK if the old symbol
1518      is undefined and the new symbol is defined.  */
1519
1520   if (oldweak
1521       || newweak
1522       || (newdef
1523           && h->root.type == bfd_link_hash_undefined))
1524     *type_change_ok = TRUE;
1525
1526   /* It's OK to change the size if either the existing symbol or the
1527      new symbol is weak, or if the old symbol is undefined.  */
1528
1529   if (*type_change_ok
1530       || h->root.type == bfd_link_hash_undefined)
1531     *size_change_ok = TRUE;
1532
1533   /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
1534      symbol, respectively, appears to be a common symbol in a dynamic
1535      object.  If a symbol appears in an uninitialized section, and is
1536      not weak, and is not a function, then it may be a common symbol
1537      which was resolved when the dynamic object was created.  We want
1538      to treat such symbols specially, because they raise special
1539      considerations when setting the symbol size: if the symbol
1540      appears as a common symbol in a regular object, and the size in
1541      the regular object is larger, we must make sure that we use the
1542      larger size.  This problematic case can always be avoided in C,
1543      but it must be handled correctly when using Fortran shared
1544      libraries.
1545
1546      Note that if NEWDYNCOMMON is set, NEWDEF will be set, and
1547      likewise for OLDDYNCOMMON and OLDDEF.
1548
1549      Note that this test is just a heuristic, and that it is quite
1550      possible to have an uninitialized symbol in a shared object which
1551      is really a definition, rather than a common symbol.  This could
1552      lead to some minor confusion when the symbol really is a common
1553      symbol in some regular object.  However, I think it will be
1554      harmless.  */
1555
1556   if (newdyn
1557       && newdef
1558       && !newweak
1559       && (sec->flags & SEC_ALLOC) != 0
1560       && (sec->flags & SEC_LOAD) == 0
1561       && sym->st_size > 0
1562       && !newfunc)
1563     newdyncommon = TRUE;
1564   else
1565     newdyncommon = FALSE;
1566
1567   if (olddyn
1568       && olddef
1569       && h->root.type == bfd_link_hash_defined
1570       && h->def_dynamic
1571       && (h->root.u.def.section->flags & SEC_ALLOC) != 0
1572       && (h->root.u.def.section->flags & SEC_LOAD) == 0
1573       && h->size > 0
1574       && !oldfunc)
1575     olddyncommon = TRUE;
1576   else
1577     olddyncommon = FALSE;
1578
1579   /* We now know everything about the old and new symbols.  We ask the
1580      backend to check if we can merge them.  */
1581   if (bed->merge_symbol != NULL)
1582     {
1583       if (!bed->merge_symbol (h, sym, psec, newdef, olddef, oldbfd, oldsec))
1584         return FALSE;
1585       sec = *psec;
1586     }
1587
1588   /* There are multiple definitions of a normal symbol.  Skip the
1589      default symbol as well as definition from an IR object.  */
1590   if (olddef && !olddyn && !oldweak && newdef && !newdyn && !newweak
1591       && !default_sym && h->def_regular
1592       && !(oldbfd != NULL
1593            && (oldbfd->flags & BFD_PLUGIN) != 0
1594            && (abfd->flags & BFD_PLUGIN) == 0))
1595     {
1596       /* Handle a multiple definition.  */
1597       (*info->callbacks->multiple_definition) (info, &h->root,
1598                                                abfd, sec, *pvalue);
1599       *skip = TRUE;
1600       return TRUE;
1601     }
1602
1603   /* If both the old and the new symbols look like common symbols in a
1604      dynamic object, set the size of the symbol to the larger of the
1605      two.  */
1606
1607   if (olddyncommon
1608       && newdyncommon
1609       && sym->st_size != h->size)
1610     {
1611       /* Since we think we have two common symbols, issue a multiple
1612          common warning if desired.  Note that we only warn if the
1613          size is different.  If the size is the same, we simply let
1614          the old symbol override the new one as normally happens with
1615          symbols defined in dynamic objects.  */
1616
1617       (*info->callbacks->multiple_common) (info, &h->root, abfd,
1618                                            bfd_link_hash_common, sym->st_size);
1619       if (sym->st_size > h->size)
1620         h->size = sym->st_size;
1621
1622       *size_change_ok = TRUE;
1623     }
1624
1625   /* If we are looking at a dynamic object, and we have found a
1626      definition, we need to see if the symbol was already defined by
1627      some other object.  If so, we want to use the existing
1628      definition, and we do not want to report a multiple symbol
1629      definition error; we do this by clobbering *PSEC to be
1630      bfd_und_section_ptr.
1631
1632      We treat a common symbol as a definition if the symbol in the
1633      shared library is a function, since common symbols always
1634      represent variables; this can cause confusion in principle, but
1635      any such confusion would seem to indicate an erroneous program or
1636      shared library.  We also permit a common symbol in a regular
1637      object to override a weak symbol in a shared object.  */
1638
1639   if (newdyn
1640       && newdef
1641       && (olddef
1642           || (h->root.type == bfd_link_hash_common
1643               && (newweak || newfunc))))
1644     {
1645       *override = TRUE;
1646       newdef = FALSE;
1647       newdyncommon = FALSE;
1648
1649       *psec = sec = bfd_und_section_ptr;
1650       *size_change_ok = TRUE;
1651
1652       /* If we get here when the old symbol is a common symbol, then
1653          we are explicitly letting it override a weak symbol or
1654          function in a dynamic object, and we don't want to warn about
1655          a type change.  If the old symbol is a defined symbol, a type
1656          change warning may still be appropriate.  */
1657
1658       if (h->root.type == bfd_link_hash_common)
1659         *type_change_ok = TRUE;
1660     }
1661
1662   /* Handle the special case of an old common symbol merging with a
1663      new symbol which looks like a common symbol in a shared object.
1664      We change *PSEC and *PVALUE to make the new symbol look like a
1665      common symbol, and let _bfd_generic_link_add_one_symbol do the
1666      right thing.  */
1667
1668   if (newdyncommon
1669       && h->root.type == bfd_link_hash_common)
1670     {
1671       *override = TRUE;
1672       newdef = FALSE;
1673       newdyncommon = FALSE;
1674       *pvalue = sym->st_size;
1675       *psec = sec = bed->common_section (oldsec);
1676       *size_change_ok = TRUE;
1677     }
1678
1679   /* Skip weak definitions of symbols that are already defined.  */
1680   if (newdef && olddef && newweak)
1681     {
1682       /* Don't skip new non-IR weak syms.  */
1683       if (!(oldbfd != NULL
1684             && (oldbfd->flags & BFD_PLUGIN) != 0
1685             && (abfd->flags & BFD_PLUGIN) == 0))
1686         {
1687           newdef = FALSE;
1688           *skip = TRUE;
1689         }
1690
1691       /* Merge st_other.  If the symbol already has a dynamic index,
1692          but visibility says it should not be visible, turn it into a
1693          local symbol.  */
1694       elf_merge_st_other (abfd, h, sym, sec, newdef, newdyn);
1695       if (h->dynindx != -1)
1696         switch (ELF_ST_VISIBILITY (h->other))
1697           {
1698           case STV_INTERNAL:
1699           case STV_HIDDEN:
1700             (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1701             break;
1702           }
1703     }
1704
1705   /* If the old symbol is from a dynamic object, and the new symbol is
1706      a definition which is not from a dynamic object, then the new
1707      symbol overrides the old symbol.  Symbols from regular files
1708      always take precedence over symbols from dynamic objects, even if
1709      they are defined after the dynamic object in the link.
1710
1711      As above, we again permit a common symbol in a regular object to
1712      override a definition in a shared object if the shared object
1713      symbol is a function or is weak.  */
1714
1715   flip = NULL;
1716   if (!newdyn
1717       && (newdef
1718           || (bfd_is_com_section (sec)
1719               && (oldweak || oldfunc)))
1720       && olddyn
1721       && olddef
1722       && h->def_dynamic)
1723     {
1724       /* Change the hash table entry to undefined, and let
1725          _bfd_generic_link_add_one_symbol do the right thing with the
1726          new definition.  */
1727
1728       h->root.type = bfd_link_hash_undefined;
1729       h->root.u.undef.abfd = h->root.u.def.section->owner;
1730       *size_change_ok = TRUE;
1731
1732       olddef = FALSE;
1733       olddyncommon = FALSE;
1734
1735       /* We again permit a type change when a common symbol may be
1736          overriding a function.  */
1737
1738       if (bfd_is_com_section (sec))
1739         {
1740           if (oldfunc)
1741             {
1742               /* If a common symbol overrides a function, make sure
1743                  that it isn't defined dynamically nor has type
1744                  function.  */
1745               h->def_dynamic = 0;
1746               h->type = STT_NOTYPE;
1747             }
1748           *type_change_ok = TRUE;
1749         }
1750
1751       if (hi->root.type == bfd_link_hash_indirect)
1752         flip = hi;
1753       else
1754         /* This union may have been set to be non-NULL when this symbol
1755            was seen in a dynamic object.  We must force the union to be
1756            NULL, so that it is correct for a regular symbol.  */
1757         h->verinfo.vertree = NULL;
1758     }
1759
1760   /* Handle the special case of a new common symbol merging with an
1761      old symbol that looks like it might be a common symbol defined in
1762      a shared object.  Note that we have already handled the case in
1763      which a new common symbol should simply override the definition
1764      in the shared library.  */
1765
1766   if (! newdyn
1767       && bfd_is_com_section (sec)
1768       && olddyncommon)
1769     {
1770       /* It would be best if we could set the hash table entry to a
1771          common symbol, but we don't know what to use for the section
1772          or the alignment.  */
1773       (*info->callbacks->multiple_common) (info, &h->root, abfd,
1774                                            bfd_link_hash_common, sym->st_size);
1775
1776       /* If the presumed common symbol in the dynamic object is
1777          larger, pretend that the new symbol has its size.  */
1778
1779       if (h->size > *pvalue)
1780         *pvalue = h->size;
1781
1782       /* We need to remember the alignment required by the symbol
1783          in the dynamic object.  */
1784       BFD_ASSERT (pold_alignment);
1785       *pold_alignment = h->root.u.def.section->alignment_power;
1786
1787       olddef = FALSE;
1788       olddyncommon = FALSE;
1789
1790       h->root.type = bfd_link_hash_undefined;
1791       h->root.u.undef.abfd = h->root.u.def.section->owner;
1792
1793       *size_change_ok = TRUE;
1794       *type_change_ok = TRUE;
1795
1796       if (hi->root.type == bfd_link_hash_indirect)
1797         flip = hi;
1798       else
1799         h->verinfo.vertree = NULL;
1800     }
1801
1802   if (flip != NULL)
1803     {
1804       /* Handle the case where we had a versioned symbol in a dynamic
1805          library and now find a definition in a normal object.  In this
1806          case, we make the versioned symbol point to the normal one.  */
1807       flip->root.type = h->root.type;
1808       flip->root.u.undef.abfd = h->root.u.undef.abfd;
1809       h->root.type = bfd_link_hash_indirect;
1810       h->root.u.i.link = (struct bfd_link_hash_entry *) flip;
1811       (*bed->elf_backend_copy_indirect_symbol) (info, flip, h);
1812       if (h->def_dynamic)
1813         {
1814           h->def_dynamic = 0;
1815           flip->ref_dynamic = 1;
1816         }
1817     }
1818
1819   return TRUE;
1820 }
1821
1822 /* This function is called to create an indirect symbol from the
1823    default for the symbol with the default version if needed. The
1824    symbol is described by H, NAME, SYM, SEC, and VALUE.  We
1825    set DYNSYM if the new indirect symbol is dynamic.  */
1826
1827 static bfd_boolean
1828 _bfd_elf_add_default_symbol (bfd *abfd,
1829                              struct bfd_link_info *info,
1830                              struct elf_link_hash_entry *h,
1831                              const char *name,
1832                              Elf_Internal_Sym *sym,
1833                              asection *sec,
1834                              bfd_vma value,
1835                              bfd **poldbfd,
1836                              bfd_boolean *dynsym)
1837 {
1838   bfd_boolean type_change_ok;
1839   bfd_boolean size_change_ok;
1840   bfd_boolean skip;
1841   char *shortname;
1842   struct elf_link_hash_entry *hi;
1843   struct bfd_link_hash_entry *bh;
1844   const struct elf_backend_data *bed;
1845   bfd_boolean collect;
1846   bfd_boolean dynamic;
1847   bfd_boolean override;
1848   char *p;
1849   size_t len, shortlen;
1850   asection *tmp_sec;
1851   bfd_boolean matched;
1852
1853   if (h->versioned == unversioned || h->versioned == versioned_hidden)
1854     return TRUE;
1855
1856   /* If this symbol has a version, and it is the default version, we
1857      create an indirect symbol from the default name to the fully
1858      decorated name.  This will cause external references which do not
1859      specify a version to be bound to this version of the symbol.  */
1860   p = strchr (name, ELF_VER_CHR);
1861   if (h->versioned == unknown)
1862     {
1863       if (p == NULL)
1864         {
1865           h->versioned = unversioned;
1866           return TRUE;
1867         }
1868       else
1869         {
1870           if (p[1] != ELF_VER_CHR)
1871             {
1872               h->versioned = versioned_hidden;
1873               return TRUE;
1874             }
1875           else
1876             h->versioned = versioned;
1877         }
1878     }
1879   else
1880     {
1881       /* PR ld/19073: We may see an unversioned definition after the
1882          default version.  */
1883       if (p == NULL)
1884         return TRUE;
1885     }
1886
1887   bed = get_elf_backend_data (abfd);
1888   collect = bed->collect;
1889   dynamic = (abfd->flags & DYNAMIC) != 0;
1890
1891   shortlen = p - name;
1892   shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1);
1893   if (shortname == NULL)
1894     return FALSE;
1895   memcpy (shortname, name, shortlen);
1896   shortname[shortlen] = '\0';
1897
1898   /* We are going to create a new symbol.  Merge it with any existing
1899      symbol with this name.  For the purposes of the merge, act as
1900      though we were defining the symbol we just defined, although we
1901      actually going to define an indirect symbol.  */
1902   type_change_ok = FALSE;
1903   size_change_ok = FALSE;
1904   matched = TRUE;
1905   tmp_sec = sec;
1906   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
1907                               &hi, poldbfd, NULL, NULL, &skip, &override,
1908                               &type_change_ok, &size_change_ok, &matched))
1909     return FALSE;
1910
1911   if (skip)
1912     goto nondefault;
1913
1914   if (hi->def_regular)
1915     {
1916       /* If the undecorated symbol will have a version added by a
1917          script different to H, then don't indirect to/from the
1918          undecorated symbol.  This isn't ideal because we may not yet
1919          have seen symbol versions, if given by a script on the
1920          command line rather than via --version-script.  */
1921       if (hi->verinfo.vertree == NULL && info->version_info != NULL)
1922         {
1923           bfd_boolean hide;
1924
1925           hi->verinfo.vertree
1926             = bfd_find_version_for_sym (info->version_info,
1927                                         hi->root.root.string, &hide);
1928           if (hi->verinfo.vertree != NULL && hide)
1929             {
1930               (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
1931               goto nondefault;
1932             }
1933         }
1934       if (hi->verinfo.vertree != NULL
1935           && strcmp (p + 1 + (p[1] == '@'), hi->verinfo.vertree->name) != 0)
1936         goto nondefault;
1937     }
1938
1939   if (! override)
1940     {
1941       /* Add the default symbol if not performing a relocatable link.  */
1942       if (! bfd_link_relocatable (info))
1943         {
1944           bh = &hi->root;
1945           if (! (_bfd_generic_link_add_one_symbol
1946                  (info, abfd, shortname, BSF_INDIRECT,
1947                   bfd_ind_section_ptr,
1948                   0, name, FALSE, collect, &bh)))
1949             return FALSE;
1950           hi = (struct elf_link_hash_entry *) bh;
1951         }
1952     }
1953   else
1954     {
1955       /* In this case the symbol named SHORTNAME is overriding the
1956          indirect symbol we want to add.  We were planning on making
1957          SHORTNAME an indirect symbol referring to NAME.  SHORTNAME
1958          is the name without a version.  NAME is the fully versioned
1959          name, and it is the default version.
1960
1961          Overriding means that we already saw a definition for the
1962          symbol SHORTNAME in a regular object, and it is overriding
1963          the symbol defined in the dynamic object.
1964
1965          When this happens, we actually want to change NAME, the
1966          symbol we just added, to refer to SHORTNAME.  This will cause
1967          references to NAME in the shared object to become references
1968          to SHORTNAME in the regular object.  This is what we expect
1969          when we override a function in a shared object: that the
1970          references in the shared object will be mapped to the
1971          definition in the regular object.  */
1972
1973       while (hi->root.type == bfd_link_hash_indirect
1974              || hi->root.type == bfd_link_hash_warning)
1975         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1976
1977       h->root.type = bfd_link_hash_indirect;
1978       h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1979       if (h->def_dynamic)
1980         {
1981           h->def_dynamic = 0;
1982           hi->ref_dynamic = 1;
1983           if (hi->ref_regular
1984               || hi->def_regular)
1985             {
1986               if (! bfd_elf_link_record_dynamic_symbol (info, hi))
1987                 return FALSE;
1988             }
1989         }
1990
1991       /* Now set HI to H, so that the following code will set the
1992          other fields correctly.  */
1993       hi = h;
1994     }
1995
1996   /* Check if HI is a warning symbol.  */
1997   if (hi->root.type == bfd_link_hash_warning)
1998     hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1999
2000   /* If there is a duplicate definition somewhere, then HI may not
2001      point to an indirect symbol.  We will have reported an error to
2002      the user in that case.  */
2003
2004   if (hi->root.type == bfd_link_hash_indirect)
2005     {
2006       struct elf_link_hash_entry *ht;
2007
2008       ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
2009       (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi);
2010
2011       /* A reference to the SHORTNAME symbol from a dynamic library
2012          will be satisfied by the versioned symbol at runtime.  In
2013          effect, we have a reference to the versioned symbol.  */
2014       ht->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
2015       hi->dynamic_def |= ht->dynamic_def;
2016
2017       /* See if the new flags lead us to realize that the symbol must
2018          be dynamic.  */
2019       if (! *dynsym)
2020         {
2021           if (! dynamic)
2022             {
2023               if (! bfd_link_executable (info)
2024                   || hi->def_dynamic
2025                   || hi->ref_dynamic)
2026                 *dynsym = TRUE;
2027             }
2028           else
2029             {
2030               if (hi->ref_regular)
2031                 *dynsym = TRUE;
2032             }
2033         }
2034     }
2035
2036   /* We also need to define an indirection from the nondefault version
2037      of the symbol.  */
2038
2039 nondefault:
2040   len = strlen (name);
2041   shortname = (char *) bfd_hash_allocate (&info->hash->table, len);
2042   if (shortname == NULL)
2043     return FALSE;
2044   memcpy (shortname, name, shortlen);
2045   memcpy (shortname + shortlen, p + 1, len - shortlen);
2046
2047   /* Once again, merge with any existing symbol.  */
2048   type_change_ok = FALSE;
2049   size_change_ok = FALSE;
2050   tmp_sec = sec;
2051   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
2052                               &hi, poldbfd, NULL, NULL, &skip, &override,
2053                               &type_change_ok, &size_change_ok, &matched))
2054     return FALSE;
2055
2056   if (skip)
2057     return TRUE;
2058
2059   if (override)
2060     {
2061       /* Here SHORTNAME is a versioned name, so we don't expect to see
2062          the type of override we do in the case above unless it is
2063          overridden by a versioned definition.  */
2064       if (hi->root.type != bfd_link_hash_defined
2065           && hi->root.type != bfd_link_hash_defweak)
2066         _bfd_error_handler
2067           /* xgettext:c-format */
2068           (_("%pB: unexpected redefinition of indirect versioned symbol `%s'"),
2069            abfd, shortname);
2070     }
2071   else
2072     {
2073       bh = &hi->root;
2074       if (! (_bfd_generic_link_add_one_symbol
2075              (info, abfd, shortname, BSF_INDIRECT,
2076               bfd_ind_section_ptr, 0, name, FALSE, collect, &bh)))
2077         return FALSE;
2078       hi = (struct elf_link_hash_entry *) bh;
2079
2080       /* If there is a duplicate definition somewhere, then HI may not
2081          point to an indirect symbol.  We will have reported an error
2082          to the user in that case.  */
2083
2084       if (hi->root.type == bfd_link_hash_indirect)
2085         {
2086           (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
2087           h->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
2088           hi->dynamic_def |= h->dynamic_def;
2089
2090           /* See if the new flags lead us to realize that the symbol
2091              must be dynamic.  */
2092           if (! *dynsym)
2093             {
2094               if (! dynamic)
2095                 {
2096                   if (! bfd_link_executable (info)
2097                       || hi->ref_dynamic)
2098                     *dynsym = TRUE;
2099                 }
2100               else
2101                 {
2102                   if (hi->ref_regular)
2103                     *dynsym = TRUE;
2104                 }
2105             }
2106         }
2107     }
2108
2109   return TRUE;
2110 }
2111 \f
2112 /* This routine is used to export all defined symbols into the dynamic
2113    symbol table.  It is called via elf_link_hash_traverse.  */
2114
2115 static bfd_boolean
2116 _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
2117 {
2118   struct elf_info_failed *eif = (struct elf_info_failed *) data;
2119
2120   /* Ignore indirect symbols.  These are added by the versioning code.  */
2121   if (h->root.type == bfd_link_hash_indirect)
2122     return TRUE;
2123
2124   /* Ignore this if we won't export it.  */
2125   if (!eif->info->export_dynamic && !h->dynamic)
2126     return TRUE;
2127
2128   if (h->dynindx == -1
2129       && (h->def_regular || h->ref_regular)
2130       && ! bfd_hide_sym_by_version (eif->info->version_info,
2131                                     h->root.root.string))
2132     {
2133       if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2134         {
2135           eif->failed = TRUE;
2136           return FALSE;
2137         }
2138     }
2139
2140   return TRUE;
2141 }
2142 \f
2143 /* Look through the symbols which are defined in other shared
2144    libraries and referenced here.  Update the list of version
2145    dependencies.  This will be put into the .gnu.version_r section.
2146    This function is called via elf_link_hash_traverse.  */
2147
2148 static bfd_boolean
2149 _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h,
2150                                          void *data)
2151 {
2152   struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
2153   Elf_Internal_Verneed *t;
2154   Elf_Internal_Vernaux *a;
2155   bfd_size_type amt;
2156
2157   /* We only care about symbols defined in shared objects with version
2158      information.  */
2159   if (!h->def_dynamic
2160       || h->def_regular
2161       || h->dynindx == -1
2162       || h->verinfo.verdef == NULL
2163       || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
2164           & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
2165     return TRUE;
2166
2167   /* See if we already know about this version.  */
2168   for (t = elf_tdata (rinfo->info->output_bfd)->verref;
2169        t != NULL;
2170        t = t->vn_nextref)
2171     {
2172       if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
2173         continue;
2174
2175       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2176         if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
2177           return TRUE;
2178
2179       break;
2180     }
2181
2182   /* This is a new version.  Add it to tree we are building.  */
2183
2184   if (t == NULL)
2185     {
2186       amt = sizeof *t;
2187       t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt);
2188       if (t == NULL)
2189         {
2190           rinfo->failed = TRUE;
2191           return FALSE;
2192         }
2193
2194       t->vn_bfd = h->verinfo.verdef->vd_bfd;
2195       t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref;
2196       elf_tdata (rinfo->info->output_bfd)->verref = t;
2197     }
2198
2199   amt = sizeof *a;
2200   a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
2201   if (a == NULL)
2202     {
2203       rinfo->failed = TRUE;
2204       return FALSE;
2205     }
2206
2207   /* Note that we are copying a string pointer here, and testing it
2208      above.  If bfd_elf_string_from_elf_section is ever changed to
2209      discard the string data when low in memory, this will have to be
2210      fixed.  */
2211   a->vna_nodename = h->verinfo.verdef->vd_nodename;
2212
2213   a->vna_flags = h->verinfo.verdef->vd_flags;
2214   a->vna_nextptr = t->vn_auxptr;
2215
2216   h->verinfo.verdef->vd_exp_refno = rinfo->vers;
2217   ++rinfo->vers;
2218
2219   a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
2220
2221   t->vn_auxptr = a;
2222
2223   return TRUE;
2224 }
2225
2226 /* Return TRUE and set *HIDE to TRUE if the versioned symbol is
2227    hidden.  Set *T_P to NULL if there is no match.  */
2228
2229 static bfd_boolean
2230 _bfd_elf_link_hide_versioned_symbol (struct bfd_link_info *info,
2231                                      struct elf_link_hash_entry *h,
2232                                      const char *version_p,
2233                                      struct bfd_elf_version_tree **t_p,
2234                                      bfd_boolean *hide)
2235 {
2236   struct bfd_elf_version_tree *t;
2237
2238   /* Look for the version.  If we find it, it is no longer weak.  */
2239   for (t = info->version_info; t != NULL; t = t->next)
2240     {
2241       if (strcmp (t->name, version_p) == 0)
2242         {
2243           size_t len;
2244           char *alc;
2245           struct bfd_elf_version_expr *d;
2246
2247           len = version_p - h->root.root.string;
2248           alc = (char *) bfd_malloc (len);
2249           if (alc == NULL)
2250             return FALSE;
2251           memcpy (alc, h->root.root.string, len - 1);
2252           alc[len - 1] = '\0';
2253           if (alc[len - 2] == ELF_VER_CHR)
2254             alc[len - 2] = '\0';
2255
2256           h->verinfo.vertree = t;
2257           t->used = TRUE;
2258           d = NULL;
2259
2260           if (t->globals.list != NULL)
2261             d = (*t->match) (&t->globals, NULL, alc);
2262
2263           /* See if there is anything to force this symbol to
2264              local scope.  */
2265           if (d == NULL && t->locals.list != NULL)
2266             {
2267               d = (*t->match) (&t->locals, NULL, alc);
2268               if (d != NULL
2269                   && h->dynindx != -1
2270                   && ! info->export_dynamic)
2271                 *hide = TRUE;
2272             }
2273
2274           free (alc);
2275           break;
2276         }
2277     }
2278
2279   *t_p = t;
2280
2281   return TRUE;
2282 }
2283
2284 /* Return TRUE if the symbol H is hidden by version script.  */
2285
2286 bfd_boolean
2287 _bfd_elf_link_hide_sym_by_version (struct bfd_link_info *info,
2288                                    struct elf_link_hash_entry *h)
2289 {
2290   const char *p;
2291   bfd_boolean hide = FALSE;
2292   const struct elf_backend_data *bed
2293     = get_elf_backend_data (info->output_bfd);
2294
2295   /* Version script only hides symbols defined in regular objects.  */
2296   if (!h->def_regular && !ELF_COMMON_DEF_P (h))
2297     return TRUE;
2298
2299   p = strchr (h->root.root.string, ELF_VER_CHR);
2300   if (p != NULL && h->verinfo.vertree == NULL)
2301     {
2302       struct bfd_elf_version_tree *t;
2303
2304       ++p;
2305       if (*p == ELF_VER_CHR)
2306         ++p;
2307
2308       if (*p != '\0'
2309           && _bfd_elf_link_hide_versioned_symbol (info, h, p, &t, &hide)
2310           && hide)
2311         {
2312           if (hide)
2313             (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2314           return TRUE;
2315         }
2316     }
2317
2318   /* If we don't have a version for this symbol, see if we can find
2319      something.  */
2320   if (h->verinfo.vertree == NULL && info->version_info != NULL)
2321     {
2322       h->verinfo.vertree
2323         = bfd_find_version_for_sym (info->version_info,
2324                                     h->root.root.string, &hide);
2325       if (h->verinfo.vertree != NULL && hide)
2326         {
2327           (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2328           return TRUE;
2329         }
2330     }
2331
2332   return FALSE;
2333 }
2334
2335 /* Figure out appropriate versions for all the symbols.  We may not
2336    have the version number script until we have read all of the input
2337    files, so until that point we don't know which symbols should be
2338    local.  This function is called via elf_link_hash_traverse.  */
2339
2340 static bfd_boolean
2341 _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
2342 {
2343   struct elf_info_failed *sinfo;
2344   struct bfd_link_info *info;
2345   const struct elf_backend_data *bed;
2346   struct elf_info_failed eif;
2347   char *p;
2348   bfd_boolean hide;
2349
2350   sinfo = (struct elf_info_failed *) data;
2351   info = sinfo->info;
2352
2353   /* Fix the symbol flags.  */
2354   eif.failed = FALSE;
2355   eif.info = info;
2356   if (! _bfd_elf_fix_symbol_flags (h, &eif))
2357     {
2358       if (eif.failed)
2359         sinfo->failed = TRUE;
2360       return FALSE;
2361     }
2362
2363   /* We only need version numbers for symbols defined in regular
2364      objects.  */
2365   if (!h->def_regular)
2366     return TRUE;
2367
2368   hide = FALSE;
2369   bed = get_elf_backend_data (info->output_bfd);
2370   p = strchr (h->root.root.string, ELF_VER_CHR);
2371   if (p != NULL && h->verinfo.vertree == NULL)
2372     {
2373       struct bfd_elf_version_tree *t;
2374
2375       ++p;
2376       if (*p == ELF_VER_CHR)
2377         ++p;
2378
2379       /* If there is no version string, we can just return out.  */
2380       if (*p == '\0')
2381         return TRUE;
2382
2383       if (!_bfd_elf_link_hide_versioned_symbol (info, h, p, &t, &hide))
2384         {
2385           sinfo->failed = TRUE;
2386           return FALSE;
2387         }
2388
2389       if (hide)
2390         (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2391
2392       /* If we are building an application, we need to create a
2393          version node for this version.  */
2394       if (t == NULL && bfd_link_executable (info))
2395         {
2396           struct bfd_elf_version_tree **pp;
2397           int version_index;
2398
2399           /* If we aren't going to export this symbol, we don't need
2400              to worry about it.  */
2401           if (h->dynindx == -1)
2402             return TRUE;
2403
2404           t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd,
2405                                                           sizeof *t);
2406           if (t == NULL)
2407             {
2408               sinfo->failed = TRUE;
2409               return FALSE;
2410             }
2411
2412           t->name = p;
2413           t->name_indx = (unsigned int) -1;
2414           t->used = TRUE;
2415
2416           version_index = 1;
2417           /* Don't count anonymous version tag.  */
2418           if (sinfo->info->version_info != NULL
2419               && sinfo->info->version_info->vernum == 0)
2420             version_index = 0;
2421           for (pp = &sinfo->info->version_info;
2422                *pp != NULL;
2423                pp = &(*pp)->next)
2424             ++version_index;
2425           t->vernum = version_index;
2426
2427           *pp = t;
2428
2429           h->verinfo.vertree = t;
2430         }
2431       else if (t == NULL)
2432         {
2433           /* We could not find the version for a symbol when
2434              generating a shared archive.  Return an error.  */
2435           _bfd_error_handler
2436             /* xgettext:c-format */
2437             (_("%pB: version node not found for symbol %s"),
2438              info->output_bfd, h->root.root.string);
2439           bfd_set_error (bfd_error_bad_value);
2440           sinfo->failed = TRUE;
2441           return FALSE;
2442         }
2443     }
2444
2445   /* If we don't have a version for this symbol, see if we can find
2446      something.  */
2447   if (!hide
2448       && h->verinfo.vertree == NULL
2449       && sinfo->info->version_info != NULL)
2450     {
2451       h->verinfo.vertree
2452         = bfd_find_version_for_sym (sinfo->info->version_info,
2453                                     h->root.root.string, &hide);
2454       if (h->verinfo.vertree != NULL && hide)
2455         (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2456     }
2457
2458   return TRUE;
2459 }
2460 \f
2461 /* Read and swap the relocs from the section indicated by SHDR.  This
2462    may be either a REL or a RELA section.  The relocations are
2463    translated into RELA relocations and stored in INTERNAL_RELOCS,
2464    which should have already been allocated to contain enough space.
2465    The EXTERNAL_RELOCS are a buffer where the external form of the
2466    relocations should be stored.
2467
2468    Returns FALSE if something goes wrong.  */
2469
2470 static bfd_boolean
2471 elf_link_read_relocs_from_section (bfd *abfd,
2472                                    asection *sec,
2473                                    Elf_Internal_Shdr *shdr,
2474                                    void *external_relocs,
2475                                    Elf_Internal_Rela *internal_relocs)
2476 {
2477   const struct elf_backend_data *bed;
2478   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
2479   const bfd_byte *erela;
2480   const bfd_byte *erelaend;
2481   Elf_Internal_Rela *irela;
2482   Elf_Internal_Shdr *symtab_hdr;
2483   size_t nsyms;
2484
2485   /* Position ourselves at the start of the section.  */
2486   if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
2487     return FALSE;
2488
2489   /* Read the relocations.  */
2490   if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
2491     return FALSE;
2492
2493   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2494   nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
2495
2496   bed = get_elf_backend_data (abfd);
2497
2498   /* Convert the external relocations to the internal format.  */
2499   if (shdr->sh_entsize == bed->s->sizeof_rel)
2500     swap_in = bed->s->swap_reloc_in;
2501   else if (shdr->sh_entsize == bed->s->sizeof_rela)
2502     swap_in = bed->s->swap_reloca_in;
2503   else
2504     {
2505       bfd_set_error (bfd_error_wrong_format);
2506       return FALSE;
2507     }
2508
2509   erela = (const bfd_byte *) external_relocs;
2510   erelaend = erela + shdr->sh_size;
2511   irela = internal_relocs;
2512   while (erela < erelaend)
2513     {
2514       bfd_vma r_symndx;
2515
2516       (*swap_in) (abfd, erela, irela);
2517       r_symndx = ELF32_R_SYM (irela->r_info);
2518       if (bed->s->arch_size == 64)
2519         r_symndx >>= 24;
2520       if (nsyms > 0)
2521         {
2522           if ((size_t) r_symndx >= nsyms)
2523             {
2524               _bfd_error_handler
2525                 /* xgettext:c-format */
2526                 (_("%pB: bad reloc symbol index (%#" PRIx64 " >= %#lx)"
2527                    " for offset %#" PRIx64 " in section `%pA'"),
2528                  abfd, (uint64_t) r_symndx, (unsigned long) nsyms,
2529                  (uint64_t) irela->r_offset, sec);
2530               bfd_set_error (bfd_error_bad_value);
2531               return FALSE;
2532             }
2533         }
2534       else if (r_symndx != STN_UNDEF)
2535         {
2536           _bfd_error_handler
2537             /* xgettext:c-format */
2538             (_("%pB: non-zero symbol index (%#" PRIx64 ")"
2539                " for offset %#" PRIx64 " in section `%pA'"
2540                " when the object file has no symbol table"),
2541              abfd, (uint64_t) r_symndx,
2542              (uint64_t) irela->r_offset, sec);
2543           bfd_set_error (bfd_error_bad_value);
2544           return FALSE;
2545         }
2546       irela += bed->s->int_rels_per_ext_rel;
2547       erela += shdr->sh_entsize;
2548     }
2549
2550   return TRUE;
2551 }
2552
2553 /* Read and swap the relocs for a section O.  They may have been
2554    cached.  If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are
2555    not NULL, they are used as buffers to read into.  They are known to
2556    be large enough.  If the INTERNAL_RELOCS relocs argument is NULL,
2557    the return value is allocated using either malloc or bfd_alloc,
2558    according to the KEEP_MEMORY argument.  If O has two relocation
2559    sections (both REL and RELA relocations), then the REL_HDR
2560    relocations will appear first in INTERNAL_RELOCS, followed by the
2561    RELA_HDR relocations.  */
2562
2563 Elf_Internal_Rela *
2564 _bfd_elf_link_read_relocs (bfd *abfd,
2565                            asection *o,
2566                            void *external_relocs,
2567                            Elf_Internal_Rela *internal_relocs,
2568                            bfd_boolean keep_memory)
2569 {
2570   void *alloc1 = NULL;
2571   Elf_Internal_Rela *alloc2 = NULL;
2572   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2573   struct bfd_elf_section_data *esdo = elf_section_data (o);
2574   Elf_Internal_Rela *internal_rela_relocs;
2575
2576   if (esdo->relocs != NULL)
2577     return esdo->relocs;
2578
2579   if (o->reloc_count == 0)
2580     return NULL;
2581
2582   if (internal_relocs == NULL)
2583     {
2584       bfd_size_type size;
2585
2586       size = (bfd_size_type) o->reloc_count * sizeof (Elf_Internal_Rela);
2587       if (keep_memory)
2588         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
2589       else
2590         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
2591       if (internal_relocs == NULL)
2592         goto error_return;
2593     }
2594
2595   if (external_relocs == NULL)
2596     {
2597       bfd_size_type size = 0;
2598
2599       if (esdo->rel.hdr)
2600         size += esdo->rel.hdr->sh_size;
2601       if (esdo->rela.hdr)
2602         size += esdo->rela.hdr->sh_size;
2603
2604       alloc1 = bfd_malloc (size);
2605       if (alloc1 == NULL)
2606         goto error_return;
2607       external_relocs = alloc1;
2608     }
2609
2610   internal_rela_relocs = internal_relocs;
2611   if (esdo->rel.hdr)
2612     {
2613       if (!elf_link_read_relocs_from_section (abfd, o, esdo->rel.hdr,
2614                                               external_relocs,
2615                                               internal_relocs))
2616         goto error_return;
2617       external_relocs = (((bfd_byte *) external_relocs)
2618                          + esdo->rel.hdr->sh_size);
2619       internal_rela_relocs += (NUM_SHDR_ENTRIES (esdo->rel.hdr)
2620                                * bed->s->int_rels_per_ext_rel);
2621     }
2622
2623   if (esdo->rela.hdr
2624       && (!elf_link_read_relocs_from_section (abfd, o, esdo->rela.hdr,
2625                                               external_relocs,
2626                                               internal_rela_relocs)))
2627     goto error_return;
2628
2629   /* Cache the results for next time, if we can.  */
2630   if (keep_memory)
2631     esdo->relocs = internal_relocs;
2632
2633   if (alloc1 != NULL)
2634     free (alloc1);
2635
2636   /* Don't free alloc2, since if it was allocated we are passing it
2637      back (under the name of internal_relocs).  */
2638
2639   return internal_relocs;
2640
2641  error_return:
2642   if (alloc1 != NULL)
2643     free (alloc1);
2644   if (alloc2 != NULL)
2645     {
2646       if (keep_memory)
2647         bfd_release (abfd, alloc2);
2648       else
2649         free (alloc2);
2650     }
2651   return NULL;
2652 }
2653
2654 /* Compute the size of, and allocate space for, REL_HDR which is the
2655    section header for a section containing relocations for O.  */
2656
2657 static bfd_boolean
2658 _bfd_elf_link_size_reloc_section (bfd *abfd,
2659                                   struct bfd_elf_section_reloc_data *reldata)
2660 {
2661   Elf_Internal_Shdr *rel_hdr = reldata->hdr;
2662
2663   /* That allows us to calculate the size of the section.  */
2664   rel_hdr->sh_size = rel_hdr->sh_entsize * reldata->count;
2665
2666   /* The contents field must last into write_object_contents, so we
2667      allocate it with bfd_alloc rather than malloc.  Also since we
2668      cannot be sure that the contents will actually be filled in,
2669      we zero the allocated space.  */
2670   rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size);
2671   if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
2672     return FALSE;
2673
2674   if (reldata->hashes == NULL && reldata->count)
2675     {
2676       struct elf_link_hash_entry **p;
2677
2678       p = ((struct elf_link_hash_entry **)
2679            bfd_zmalloc (reldata->count * sizeof (*p)));
2680       if (p == NULL)
2681         return FALSE;
2682
2683       reldata->hashes = p;
2684     }
2685
2686   return TRUE;
2687 }
2688
2689 /* Copy the relocations indicated by the INTERNAL_RELOCS (which
2690    originated from the section given by INPUT_REL_HDR) to the
2691    OUTPUT_BFD.  */
2692
2693 bfd_boolean
2694 _bfd_elf_link_output_relocs (bfd *output_bfd,
2695                              asection *input_section,
2696                              Elf_Internal_Shdr *input_rel_hdr,
2697                              Elf_Internal_Rela *internal_relocs,
2698                              struct elf_link_hash_entry **rel_hash
2699                                ATTRIBUTE_UNUSED)
2700 {
2701   Elf_Internal_Rela *irela;
2702   Elf_Internal_Rela *irelaend;
2703   bfd_byte *erel;
2704   struct bfd_elf_section_reloc_data *output_reldata;
2705   asection *output_section;
2706   const struct elf_backend_data *bed;
2707   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
2708   struct bfd_elf_section_data *esdo;
2709
2710   output_section = input_section->output_section;
2711
2712   bed = get_elf_backend_data (output_bfd);
2713   esdo = elf_section_data (output_section);
2714   if (esdo->rel.hdr && esdo->rel.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2715     {
2716       output_reldata = &esdo->rel;
2717       swap_out = bed->s->swap_reloc_out;
2718     }
2719   else if (esdo->rela.hdr
2720            && esdo->rela.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2721     {
2722       output_reldata = &esdo->rela;
2723       swap_out = bed->s->swap_reloca_out;
2724     }
2725   else
2726     {
2727       _bfd_error_handler
2728         /* xgettext:c-format */
2729         (_("%pB: relocation size mismatch in %pB section %pA"),
2730          output_bfd, input_section->owner, input_section);
2731       bfd_set_error (bfd_error_wrong_format);
2732       return FALSE;
2733     }
2734
2735   erel = output_reldata->hdr->contents;
2736   erel += output_reldata->count * input_rel_hdr->sh_entsize;
2737   irela = internal_relocs;
2738   irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr)
2739                       * bed->s->int_rels_per_ext_rel);
2740   while (irela < irelaend)
2741     {
2742       (*swap_out) (output_bfd, irela, erel);
2743       irela += bed->s->int_rels_per_ext_rel;
2744       erel += input_rel_hdr->sh_entsize;
2745     }
2746
2747   /* Bump the counter, so that we know where to add the next set of
2748      relocations.  */
2749   output_reldata->count += NUM_SHDR_ENTRIES (input_rel_hdr);
2750
2751   return TRUE;
2752 }
2753 \f
2754 /* Make weak undefined symbols in PIE dynamic.  */
2755
2756 bfd_boolean
2757 _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info,
2758                                  struct elf_link_hash_entry *h)
2759 {
2760   if (bfd_link_pie (info)
2761       && h->dynindx == -1
2762       && h->root.type == bfd_link_hash_undefweak)
2763     return bfd_elf_link_record_dynamic_symbol (info, h);
2764
2765   return TRUE;
2766 }
2767
2768 /* Fix up the flags for a symbol.  This handles various cases which
2769    can only be fixed after all the input files are seen.  This is
2770    currently called by both adjust_dynamic_symbol and
2771    assign_sym_version, which is unnecessary but perhaps more robust in
2772    the face of future changes.  */
2773
2774 static bfd_boolean
2775 _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
2776                            struct elf_info_failed *eif)
2777 {
2778   const struct elf_backend_data *bed;
2779
2780   /* If this symbol was mentioned in a non-ELF file, try to set
2781      DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
2782      permit a non-ELF file to correctly refer to a symbol defined in
2783      an ELF dynamic object.  */
2784   if (h->non_elf)
2785     {
2786       while (h->root.type == bfd_link_hash_indirect)
2787         h = (struct elf_link_hash_entry *) h->root.u.i.link;
2788
2789       if (h->root.type != bfd_link_hash_defined
2790           && h->root.type != bfd_link_hash_defweak)
2791         {
2792           h->ref_regular = 1;
2793           h->ref_regular_nonweak = 1;
2794         }
2795       else
2796         {
2797           if (h->root.u.def.section->owner != NULL
2798               && (bfd_get_flavour (h->root.u.def.section->owner)
2799                   == bfd_target_elf_flavour))
2800             {
2801               h->ref_regular = 1;
2802               h->ref_regular_nonweak = 1;
2803             }
2804           else
2805             h->def_regular = 1;
2806         }
2807
2808       if (h->dynindx == -1
2809           && (h->def_dynamic
2810               || h->ref_dynamic))
2811         {
2812           if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2813             {
2814               eif->failed = TRUE;
2815               return FALSE;
2816             }
2817         }
2818     }
2819   else
2820     {
2821       /* Unfortunately, NON_ELF is only correct if the symbol
2822          was first seen in a non-ELF file.  Fortunately, if the symbol
2823          was first seen in an ELF file, we're probably OK unless the
2824          symbol was defined in a non-ELF file.  Catch that case here.
2825          FIXME: We're still in trouble if the symbol was first seen in
2826          a dynamic object, and then later in a non-ELF regular object.  */
2827       if ((h->root.type == bfd_link_hash_defined
2828            || h->root.type == bfd_link_hash_defweak)
2829           && !h->def_regular
2830           && (h->root.u.def.section->owner != NULL
2831               ? (bfd_get_flavour (h->root.u.def.section->owner)
2832                  != bfd_target_elf_flavour)
2833               : (bfd_is_abs_section (h->root.u.def.section)
2834                  && !h->def_dynamic)))
2835         h->def_regular = 1;
2836     }
2837
2838   /* Backend specific symbol fixup.  */
2839   bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
2840   if (bed->elf_backend_fixup_symbol
2841       && !(*bed->elf_backend_fixup_symbol) (eif->info, h))
2842     return FALSE;
2843
2844   /* If this is a final link, and the symbol was defined as a common
2845      symbol in a regular object file, and there was no definition in
2846      any dynamic object, then the linker will have allocated space for
2847      the symbol in a common section but the DEF_REGULAR
2848      flag will not have been set.  */
2849   if (h->root.type == bfd_link_hash_defined
2850       && !h->def_regular
2851       && h->ref_regular
2852       && !h->def_dynamic
2853       && (h->root.u.def.section->owner->flags & (DYNAMIC | BFD_PLUGIN)) == 0)
2854     h->def_regular = 1;
2855
2856   /* Symbols defined in discarded sections shouldn't be dynamic.  */
2857   if (h->root.type == bfd_link_hash_undefined && h->indx == -3)
2858     (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2859
2860   /* If a weak undefined symbol has non-default visibility, we also
2861      hide it from the dynamic linker.  */
2862   else if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2863            && h->root.type == bfd_link_hash_undefweak)
2864     (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2865
2866   /* A hidden versioned symbol in executable should be forced local if
2867      it is is locally defined, not referenced by shared library and not
2868      exported.  */
2869   else if (bfd_link_executable (eif->info)
2870            && h->versioned == versioned_hidden
2871            && !eif->info->export_dynamic
2872            && !h->dynamic
2873            && !h->ref_dynamic
2874            && h->def_regular)
2875     (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2876
2877   /* If -Bsymbolic was used (which means to bind references to global
2878      symbols to the definition within the shared object), and this
2879      symbol was defined in a regular object, then it actually doesn't
2880      need a PLT entry.  Likewise, if the symbol has non-default
2881      visibility.  If the symbol has hidden or internal visibility, we
2882      will force it local.  */
2883   else if (h->needs_plt
2884            && bfd_link_pic (eif->info)
2885            && is_elf_hash_table (eif->info->hash)
2886            && (SYMBOLIC_BIND (eif->info, h)
2887                || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
2888            && h->def_regular)
2889     {
2890       bfd_boolean force_local;
2891
2892       force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
2893                      || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
2894       (*bed->elf_backend_hide_symbol) (eif->info, h, force_local);
2895     }
2896
2897   /* If this is a weak defined symbol in a dynamic object, and we know
2898      the real definition in the dynamic object, copy interesting flags
2899      over to the real definition.  */
2900   if (h->is_weakalias)
2901     {
2902       struct elf_link_hash_entry *def = weakdef (h);
2903
2904       /* If the real definition is defined by a regular object file,
2905          don't do anything special.  See the longer description in
2906          _bfd_elf_adjust_dynamic_symbol, below.  */
2907       if (def->def_regular)
2908         {
2909           h = def;
2910           while ((h = h->u.alias) != def)
2911             h->is_weakalias = 0;
2912         }
2913       else
2914         {
2915           while (h->root.type == bfd_link_hash_indirect)
2916             h = (struct elf_link_hash_entry *) h->root.u.i.link;
2917           BFD_ASSERT (h->root.type == bfd_link_hash_defined
2918                       || h->root.type == bfd_link_hash_defweak);
2919           BFD_ASSERT (def->def_dynamic);
2920           BFD_ASSERT (def->root.type == bfd_link_hash_defined);
2921           (*bed->elf_backend_copy_indirect_symbol) (eif->info, def, h);
2922         }
2923     }
2924
2925   return TRUE;
2926 }
2927
2928 /* Make the backend pick a good value for a dynamic symbol.  This is
2929    called via elf_link_hash_traverse, and also calls itself
2930    recursively.  */
2931
2932 static bfd_boolean
2933 _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
2934 {
2935   struct elf_info_failed *eif = (struct elf_info_failed *) data;
2936   struct elf_link_hash_table *htab;
2937   const struct elf_backend_data *bed;
2938
2939   if (! is_elf_hash_table (eif->info->hash))
2940     return FALSE;
2941
2942   /* Ignore indirect symbols.  These are added by the versioning code.  */
2943   if (h->root.type == bfd_link_hash_indirect)
2944     return TRUE;
2945
2946   /* Fix the symbol flags.  */
2947   if (! _bfd_elf_fix_symbol_flags (h, eif))
2948     return FALSE;
2949
2950   htab = elf_hash_table (eif->info);
2951   bed = get_elf_backend_data (htab->dynobj);
2952
2953   if (h->root.type == bfd_link_hash_undefweak)
2954     {
2955       if (eif->info->dynamic_undefined_weak == 0)
2956         (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2957       else if (eif->info->dynamic_undefined_weak > 0
2958                && h->ref_regular
2959                && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2960                && !bfd_hide_sym_by_version (eif->info->version_info,
2961                                             h->root.root.string))
2962         {
2963           if (!bfd_elf_link_record_dynamic_symbol (eif->info, h))
2964             {
2965               eif->failed = TRUE;
2966               return FALSE;
2967             }
2968         }
2969     }
2970
2971   /* If this symbol does not require a PLT entry, and it is not
2972      defined by a dynamic object, or is not referenced by a regular
2973      object, ignore it.  We do have to handle a weak defined symbol,
2974      even if no regular object refers to it, if we decided to add it
2975      to the dynamic symbol table.  FIXME: Do we normally need to worry
2976      about symbols which are defined by one dynamic object and
2977      referenced by another one?  */
2978   if (!h->needs_plt
2979       && h->type != STT_GNU_IFUNC
2980       && (h->def_regular
2981           || !h->def_dynamic
2982           || (!h->ref_regular
2983               && (!h->is_weakalias || weakdef (h)->dynindx == -1))))
2984     {
2985       h->plt = elf_hash_table (eif->info)->init_plt_offset;
2986       return TRUE;
2987     }
2988
2989   /* If we've already adjusted this symbol, don't do it again.  This
2990      can happen via a recursive call.  */
2991   if (h->dynamic_adjusted)
2992     return TRUE;
2993
2994   /* Don't look at this symbol again.  Note that we must set this
2995      after checking the above conditions, because we may look at a
2996      symbol once, decide not to do anything, and then get called
2997      recursively later after REF_REGULAR is set below.  */
2998   h->dynamic_adjusted = 1;
2999
3000   /* If this is a weak definition, and we know a real definition, and
3001      the real symbol is not itself defined by a regular object file,
3002      then get a good value for the real definition.  We handle the
3003      real symbol first, for the convenience of the backend routine.
3004
3005      Note that there is a confusing case here.  If the real definition
3006      is defined by a regular object file, we don't get the real symbol
3007      from the dynamic object, but we do get the weak symbol.  If the
3008      processor backend uses a COPY reloc, then if some routine in the
3009      dynamic object changes the real symbol, we will not see that
3010      change in the corresponding weak symbol.  This is the way other
3011      ELF linkers work as well, and seems to be a result of the shared
3012      library model.
3013
3014      I will clarify this issue.  Most SVR4 shared libraries define the
3015      variable _timezone and define timezone as a weak synonym.  The
3016      tzset call changes _timezone.  If you write
3017        extern int timezone;
3018        int _timezone = 5;
3019        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
3020      you might expect that, since timezone is a synonym for _timezone,
3021      the same number will print both times.  However, if the processor
3022      backend uses a COPY reloc, then actually timezone will be copied
3023      into your process image, and, since you define _timezone
3024      yourself, _timezone will not.  Thus timezone and _timezone will
3025      wind up at different memory locations.  The tzset call will set
3026      _timezone, leaving timezone unchanged.  */
3027
3028   if (h->is_weakalias)
3029     {
3030       struct elf_link_hash_entry *def = weakdef (h);
3031
3032       /* If we get to this point, there is an implicit reference to
3033          the alias by a regular object file via the weak symbol H.  */
3034       def->ref_regular = 1;
3035
3036       /* Ensure that the backend adjust_dynamic_symbol function sees
3037          the strong alias before H by recursively calling ourselves.  */
3038       if (!_bfd_elf_adjust_dynamic_symbol (def, eif))
3039         return FALSE;
3040     }
3041
3042   /* If a symbol has no type and no size and does not require a PLT
3043      entry, then we are probably about to do the wrong thing here: we
3044      are probably going to create a COPY reloc for an empty object.
3045      This case can arise when a shared object is built with assembly
3046      code, and the assembly code fails to set the symbol type.  */
3047   if (h->size == 0
3048       && h->type == STT_NOTYPE
3049       && !h->needs_plt)
3050     _bfd_error_handler
3051       (_("warning: type and size of dynamic symbol `%s' are not defined"),
3052        h->root.root.string);
3053
3054   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
3055     {
3056       eif->failed = TRUE;
3057       return FALSE;
3058     }
3059
3060   return TRUE;
3061 }
3062
3063 /* Adjust the dynamic symbol, H, for copy in the dynamic bss section,
3064    DYNBSS.  */
3065
3066 bfd_boolean
3067 _bfd_elf_adjust_dynamic_copy (struct bfd_link_info *info,
3068                               struct elf_link_hash_entry *h,
3069                               asection *dynbss)
3070 {
3071   unsigned int power_of_two;
3072   bfd_vma mask;
3073   asection *sec = h->root.u.def.section;
3074
3075   /* The section alignment of the definition is the maximum alignment
3076      requirement of symbols defined in the section.  Since we don't
3077      know the symbol alignment requirement, we start with the
3078      maximum alignment and check low bits of the symbol address
3079      for the minimum alignment.  */
3080   power_of_two = bfd_get_section_alignment (sec->owner, sec);
3081   mask = ((bfd_vma) 1 << power_of_two) - 1;
3082   while ((h->root.u.def.value & mask) != 0)
3083     {
3084        mask >>= 1;
3085        --power_of_two;
3086     }
3087
3088   if (power_of_two > bfd_get_section_alignment (dynbss->owner,
3089                                                 dynbss))
3090     {
3091       /* Adjust the section alignment if needed.  */
3092       if (! bfd_set_section_alignment (dynbss->owner, dynbss,
3093                                        power_of_two))
3094         return FALSE;
3095     }
3096
3097   /* We make sure that the symbol will be aligned properly.  */
3098   dynbss->size = BFD_ALIGN (dynbss->size, mask + 1);
3099
3100   /* Define the symbol as being at this point in DYNBSS.  */
3101   h->root.u.def.section = dynbss;
3102   h->root.u.def.value = dynbss->size;
3103
3104   /* Increment the size of DYNBSS to make room for the symbol.  */
3105   dynbss->size += h->size;
3106
3107   /* No error if extern_protected_data is true.  */
3108   if (h->protected_def
3109       && (!info->extern_protected_data
3110           || (info->extern_protected_data < 0
3111               && !get_elf_backend_data (dynbss->owner)->extern_protected_data)))
3112     info->callbacks->einfo
3113       (_("%P: copy reloc against protected `%pT' is dangerous\n"),
3114        h->root.root.string);
3115
3116   return TRUE;
3117 }
3118
3119 /* Adjust all external symbols pointing into SEC_MERGE sections
3120    to reflect the object merging within the sections.  */
3121
3122 static bfd_boolean
3123 _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
3124 {
3125   asection *sec;
3126
3127   if ((h->root.type == bfd_link_hash_defined
3128        || h->root.type == bfd_link_hash_defweak)
3129       && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
3130       && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
3131     {
3132       bfd *output_bfd = (bfd *) data;
3133
3134       h->root.u.def.value =
3135         _bfd_merged_section_offset (output_bfd,
3136                                     &h->root.u.def.section,
3137                                     elf_section_data (sec)->sec_info,
3138                                     h->root.u.def.value);
3139     }
3140
3141   return TRUE;
3142 }
3143
3144 /* Returns false if the symbol referred to by H should be considered
3145    to resolve local to the current module, and true if it should be
3146    considered to bind dynamically.  */
3147
3148 bfd_boolean
3149 _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
3150                            struct bfd_link_info *info,
3151                            bfd_boolean not_local_protected)
3152 {
3153   bfd_boolean binding_stays_local_p;
3154   const struct elf_backend_data *bed;
3155   struct elf_link_hash_table *hash_table;
3156
3157   if (h == NULL)
3158     return FALSE;
3159
3160   while (h->root.type == bfd_link_hash_indirect
3161          || h->root.type == bfd_link_hash_warning)
3162     h = (struct elf_link_hash_entry *) h->root.u.i.link;
3163
3164   /* If it was forced local, then clearly it's not dynamic.  */
3165   if (h->dynindx == -1)
3166     return FALSE;
3167   if (h->forced_local)
3168     return FALSE;
3169
3170   /* Identify the cases where name binding rules say that a
3171      visible symbol resolves locally.  */
3172   binding_stays_local_p = (bfd_link_executable (info)
3173                            || SYMBOLIC_BIND (info, h));
3174
3175   switch (ELF_ST_VISIBILITY (h->other))
3176     {
3177     case STV_INTERNAL:
3178     case STV_HIDDEN:
3179       return FALSE;
3180
3181     case STV_PROTECTED:
3182       hash_table = elf_hash_table (info);
3183       if (!is_elf_hash_table (hash_table))
3184         return FALSE;
3185
3186       bed = get_elf_backend_data (hash_table->dynobj);
3187
3188       /* Proper resolution for function pointer equality may require
3189          that these symbols perhaps be resolved dynamically, even though
3190          we should be resolving them to the current module.  */
3191       if (!not_local_protected || !bed->is_function_type (h->type))
3192         binding_stays_local_p = TRUE;
3193       break;
3194
3195     default:
3196       break;
3197     }
3198
3199   /* If it isn't defined locally, then clearly it's dynamic.  */
3200   if (!h->def_regular && !ELF_COMMON_DEF_P (h))
3201     return TRUE;
3202
3203   /* Otherwise, the symbol is dynamic if binding rules don't tell
3204      us that it remains local.  */
3205   return !binding_stays_local_p;
3206 }
3207
3208 /* Return true if the symbol referred to by H should be considered
3209    to resolve local to the current module, and false otherwise.  Differs
3210    from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
3211    undefined symbols.  The two functions are virtually identical except
3212    for the place where dynindx == -1 is tested.  If that test is true,
3213    _bfd_elf_dynamic_symbol_p will say the symbol is local, while
3214    _bfd_elf_symbol_refs_local_p will say the symbol is local only for
3215    defined symbols.
3216    It might seem that _bfd_elf_dynamic_symbol_p could be rewritten as
3217    !_bfd_elf_symbol_refs_local_p, except that targets differ in their
3218    treatment of undefined weak symbols.  For those that do not make
3219    undefined weak symbols dynamic, both functions may return false.  */
3220
3221 bfd_boolean
3222 _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
3223                               struct bfd_link_info *info,
3224                               bfd_boolean local_protected)
3225 {
3226   const struct elf_backend_data *bed;
3227   struct elf_link_hash_table *hash_table;
3228
3229   /* If it's a local sym, of course we resolve locally.  */
3230   if (h == NULL)
3231     return TRUE;
3232
3233   /* STV_HIDDEN or STV_INTERNAL ones must be local.  */
3234   if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
3235       || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
3236     return TRUE;
3237
3238   /* Forced local symbols resolve locally.  */
3239   if (h->forced_local)
3240     return TRUE;
3241
3242   /* Common symbols that become definitions don't get the DEF_REGULAR
3243      flag set, so test it first, and don't bail out.  */
3244   if (ELF_COMMON_DEF_P (h))
3245     /* Do nothing.  */;
3246   /* If we don't have a definition in a regular file, then we can't
3247      resolve locally.  The sym is either undefined or dynamic.  */
3248   else if (!h->def_regular)
3249     return FALSE;
3250
3251   /* Non-dynamic symbols resolve locally.  */
3252   if (h->dynindx == -1)
3253     return TRUE;
3254
3255   /* At this point, we know the symbol is defined and dynamic.  In an
3256      executable it must resolve locally, likewise when building symbolic
3257      shared libraries.  */
3258   if (bfd_link_executable (info) || SYMBOLIC_BIND (info, h))
3259     return TRUE;
3260
3261   /* Now deal with defined dynamic symbols in shared libraries.  Ones
3262      with default visibility might not resolve locally.  */
3263   if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
3264     return FALSE;
3265
3266   hash_table = elf_hash_table (info);
3267   if (!is_elf_hash_table (hash_table))
3268     return TRUE;
3269
3270   bed = get_elf_backend_data (hash_table->dynobj);
3271
3272   /* If extern_protected_data is false, STV_PROTECTED non-function
3273      symbols are local.  */
3274   if ((!info->extern_protected_data
3275        || (info->extern_protected_data < 0
3276            && !bed->extern_protected_data))
3277       && !bed->is_function_type (h->type))
3278     return TRUE;
3279
3280   /* Function pointer equality tests may require that STV_PROTECTED
3281      symbols be treated as dynamic symbols.  If the address of a
3282      function not defined in an executable is set to that function's
3283      plt entry in the executable, then the address of the function in
3284      a shared library must also be the plt entry in the executable.  */
3285   return local_protected;
3286 }
3287
3288 /* Caches some TLS segment info, and ensures that the TLS segment vma is
3289    aligned.  Returns the first TLS output section.  */
3290
3291 struct bfd_section *
3292 _bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
3293 {
3294   struct bfd_section *sec, *tls;
3295   unsigned int align = 0;
3296
3297   for (sec = obfd->sections; sec != NULL; sec = sec->next)
3298     if ((sec->flags & SEC_THREAD_LOCAL) != 0)
3299       break;
3300   tls = sec;
3301
3302   for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next)
3303     if (sec->alignment_power > align)
3304       align = sec->alignment_power;
3305
3306   elf_hash_table (info)->tls_sec = tls;
3307
3308   /* Ensure the alignment of the first section is the largest alignment,
3309      so that the tls segment starts aligned.  */
3310   if (tls != NULL)
3311     tls->alignment_power = align;
3312
3313   return tls;
3314 }
3315
3316 /* Return TRUE iff this is a non-common, definition of a non-function symbol.  */
3317 static bfd_boolean
3318 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
3319                                   Elf_Internal_Sym *sym)
3320 {
3321   const struct elf_backend_data *bed;
3322
3323   /* Local symbols do not count, but target specific ones might.  */
3324   if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
3325       && ELF_ST_BIND (sym->st_info) < STB_LOOS)
3326     return FALSE;
3327
3328   bed = get_elf_backend_data (abfd);
3329   /* Function symbols do not count.  */
3330   if (bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
3331     return FALSE;
3332
3333   /* If the section is undefined, then so is the symbol.  */
3334   if (sym->st_shndx == SHN_UNDEF)
3335     return FALSE;
3336
3337   /* If the symbol is defined in the common section, then
3338      it is a common definition and so does not count.  */
3339   if (bed->common_definition (sym))
3340     return FALSE;
3341
3342   /* If the symbol is in a target specific section then we
3343      must rely upon the backend to tell us what it is.  */
3344   if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
3345     /* FIXME - this function is not coded yet:
3346
3347        return _bfd_is_global_symbol_definition (abfd, sym);
3348
3349        Instead for now assume that the definition is not global,
3350        Even if this is wrong, at least the linker will behave
3351        in the same way that it used to do.  */
3352     return FALSE;
3353
3354   return TRUE;
3355 }
3356
3357 /* Search the symbol table of the archive element of the archive ABFD
3358    whose archive map contains a mention of SYMDEF, and determine if
3359    the symbol is defined in this element.  */
3360 static bfd_boolean
3361 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
3362 {
3363   Elf_Internal_Shdr * hdr;
3364   size_t symcount;
3365   size_t extsymcount;
3366   size_t extsymoff;
3367   Elf_Internal_Sym *isymbuf;
3368   Elf_Internal_Sym *isym;
3369   Elf_Internal_Sym *isymend;
3370   bfd_boolean result;
3371
3372   abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
3373   if (abfd == NULL)
3374     return FALSE;
3375
3376   if (! bfd_check_format (abfd, bfd_object))
3377     return FALSE;
3378
3379   /* Select the appropriate symbol table.  If we don't know if the
3380      object file is an IR object, give linker LTO plugin a chance to
3381      get the correct symbol table.  */
3382   if (abfd->plugin_format == bfd_plugin_yes
3383 #if BFD_SUPPORTS_PLUGINS
3384       || (abfd->plugin_format == bfd_plugin_unknown
3385           && bfd_link_plugin_object_p (abfd))
3386 #endif
3387       )
3388     {
3389       /* Use the IR symbol table if the object has been claimed by
3390          plugin.  */
3391       abfd = abfd->plugin_dummy_bfd;
3392       hdr = &elf_tdata (abfd)->symtab_hdr;
3393     }
3394   else if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
3395     hdr = &elf_tdata (abfd)->symtab_hdr;
3396   else
3397     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3398
3399   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3400
3401   /* The sh_info field of the symtab header tells us where the
3402      external symbols start.  We don't care about the local symbols.  */
3403   if (elf_bad_symtab (abfd))
3404     {
3405       extsymcount = symcount;
3406       extsymoff = 0;
3407     }
3408   else
3409     {
3410       extsymcount = symcount - hdr->sh_info;
3411       extsymoff = hdr->sh_info;
3412     }
3413
3414   if (extsymcount == 0)
3415     return FALSE;
3416
3417   /* Read in the symbol table.  */
3418   isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3419                                   NULL, NULL, NULL);
3420   if (isymbuf == NULL)
3421     return FALSE;
3422
3423   /* Scan the symbol table looking for SYMDEF.  */
3424   result = FALSE;
3425   for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
3426     {
3427       const char *name;
3428
3429       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3430                                               isym->st_name);
3431       if (name == NULL)
3432         break;
3433
3434       if (strcmp (name, symdef->name) == 0)
3435         {
3436           result = is_global_data_symbol_definition (abfd, isym);
3437           break;
3438         }
3439     }
3440
3441   free (isymbuf);
3442
3443   return result;
3444 }
3445 \f
3446 /* Add an entry to the .dynamic table.  */
3447
3448 bfd_boolean
3449 _bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
3450                             bfd_vma tag,
3451                             bfd_vma val)
3452 {
3453   struct elf_link_hash_table *hash_table;
3454   const struct elf_backend_data *bed;
3455   asection *s;
3456   bfd_size_type newsize;
3457   bfd_byte *newcontents;
3458   Elf_Internal_Dyn dyn;
3459
3460   hash_table = elf_hash_table (info);
3461   if (! is_elf_hash_table (hash_table))
3462     return FALSE;
3463
3464   if (tag == DT_RELA || tag == DT_REL)
3465     hash_table->dynamic_relocs = TRUE;
3466
3467   bed = get_elf_backend_data (hash_table->dynobj);
3468   s = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
3469   BFD_ASSERT (s != NULL);
3470
3471   newsize = s->size + bed->s->sizeof_dyn;
3472   newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
3473   if (newcontents == NULL)
3474     return FALSE;
3475
3476   dyn.d_tag = tag;
3477   dyn.d_un.d_val = val;
3478   bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size);
3479
3480   s->size = newsize;
3481   s->contents = newcontents;
3482
3483   return TRUE;
3484 }
3485
3486 /* Add a DT_NEEDED entry for this dynamic object if DO_IT is true,
3487    otherwise just check whether one already exists.  Returns -1 on error,
3488    1 if a DT_NEEDED tag already exists, and 0 on success.  */
3489
3490 static int
3491 elf_add_dt_needed_tag (bfd *abfd,
3492                        struct bfd_link_info *info,
3493                        const char *soname,
3494                        bfd_boolean do_it)
3495 {
3496   struct elf_link_hash_table *hash_table;
3497   size_t strindex;
3498
3499   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
3500     return -1;
3501
3502   hash_table = elf_hash_table (info);
3503   strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE);
3504   if (strindex == (size_t) -1)
3505     return -1;
3506
3507   if (_bfd_elf_strtab_refcount (hash_table->dynstr, strindex) != 1)
3508     {
3509       asection *sdyn;
3510       const struct elf_backend_data *bed;
3511       bfd_byte *extdyn;
3512
3513       bed = get_elf_backend_data (hash_table->dynobj);
3514       sdyn = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
3515       if (sdyn != NULL)
3516         for (extdyn = sdyn->contents;
3517              extdyn < sdyn->contents + sdyn->size;
3518              extdyn += bed->s->sizeof_dyn)
3519           {
3520             Elf_Internal_Dyn dyn;
3521
3522             bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn);
3523             if (dyn.d_tag == DT_NEEDED
3524                 && dyn.d_un.d_val == strindex)
3525               {
3526                 _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3527                 return 1;
3528               }
3529           }
3530     }
3531
3532   if (do_it)
3533     {
3534       if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
3535         return -1;
3536
3537       if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
3538         return -1;
3539     }
3540   else
3541     /* We were just checking for existence of the tag.  */
3542     _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3543
3544   return 0;
3545 }
3546
3547 /* Return true if SONAME is on the needed list between NEEDED and STOP
3548    (or the end of list if STOP is NULL), and needed by a library that
3549    will be loaded.  */
3550
3551 static bfd_boolean
3552 on_needed_list (const char *soname,
3553                 struct bfd_link_needed_list *needed,
3554                 struct bfd_link_needed_list *stop)
3555 {
3556   struct bfd_link_needed_list *look;
3557   for (look = needed; look != stop; look = look->next)
3558     if (strcmp (soname, look->name) == 0
3559         && ((elf_dyn_lib_class (look->by) & DYN_AS_NEEDED) == 0
3560             /* If needed by a library that itself is not directly
3561                needed, recursively check whether that library is
3562                indirectly needed.  Since we add DT_NEEDED entries to
3563                the end of the list, library dependencies appear after
3564                the library.  Therefore search prior to the current
3565                LOOK, preventing possible infinite recursion.  */
3566             || on_needed_list (elf_dt_name (look->by), needed, look)))
3567       return TRUE;
3568
3569   return FALSE;
3570 }
3571
3572 /* Sort symbol by value, section, and size.  */
3573 static int
3574 elf_sort_symbol (const void *arg1, const void *arg2)
3575 {
3576   const struct elf_link_hash_entry *h1;
3577   const struct elf_link_hash_entry *h2;
3578   bfd_signed_vma vdiff;
3579
3580   h1 = *(const struct elf_link_hash_entry **) arg1;
3581   h2 = *(const struct elf_link_hash_entry **) arg2;
3582   vdiff = h1->root.u.def.value - h2->root.u.def.value;
3583   if (vdiff != 0)
3584     return vdiff > 0 ? 1 : -1;
3585   else
3586     {
3587       int sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id;
3588       if (sdiff != 0)
3589         return sdiff > 0 ? 1 : -1;
3590     }
3591   vdiff = h1->size - h2->size;
3592   return vdiff == 0 ? 0 : vdiff > 0 ? 1 : -1;
3593 }
3594
3595 /* This function is used to adjust offsets into .dynstr for
3596    dynamic symbols.  This is called via elf_link_hash_traverse.  */
3597
3598 static bfd_boolean
3599 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
3600 {
3601   struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;
3602
3603   if (h->dynindx != -1)
3604     h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
3605   return TRUE;
3606 }
3607
3608 /* Assign string offsets in .dynstr, update all structures referencing
3609    them.  */
3610
3611 static bfd_boolean
3612 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
3613 {
3614   struct elf_link_hash_table *hash_table = elf_hash_table (info);
3615   struct elf_link_local_dynamic_entry *entry;
3616   struct elf_strtab_hash *dynstr = hash_table->dynstr;
3617   bfd *dynobj = hash_table->dynobj;
3618   asection *sdyn;
3619   bfd_size_type size;
3620   const struct elf_backend_data *bed;
3621   bfd_byte *extdyn;
3622
3623   _bfd_elf_strtab_finalize (dynstr);
3624   size = _bfd_elf_strtab_size (dynstr);
3625
3626   bed = get_elf_backend_data (dynobj);
3627   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
3628   BFD_ASSERT (sdyn != NULL);
3629
3630   /* Update all .dynamic entries referencing .dynstr strings.  */
3631   for (extdyn = sdyn->contents;
3632        extdyn < sdyn->contents + sdyn->size;
3633        extdyn += bed->s->sizeof_dyn)
3634     {
3635       Elf_Internal_Dyn dyn;
3636
3637       bed->s->swap_dyn_in (dynobj, extdyn, &dyn);
3638       switch (dyn.d_tag)
3639         {
3640         case DT_STRSZ:
3641           dyn.d_un.d_val = size;
3642           break;
3643         case DT_NEEDED:
3644         case DT_SONAME:
3645         case DT_RPATH:
3646         case DT_RUNPATH:
3647         case DT_FILTER:
3648         case DT_AUXILIARY:
3649         case DT_AUDIT:
3650         case DT_DEPAUDIT:
3651           dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
3652           break;
3653         default:
3654           continue;
3655         }
3656       bed->s->swap_dyn_out (dynobj, &dyn, extdyn);
3657     }
3658
3659   /* Now update local dynamic symbols.  */
3660   for (entry = hash_table->dynlocal; entry ; entry = entry->next)
3661     entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
3662                                                   entry->isym.st_name);
3663
3664   /* And the rest of dynamic symbols.  */
3665   elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr);
3666
3667   /* Adjust version definitions.  */
3668   if (elf_tdata (output_bfd)->cverdefs)
3669     {
3670       asection *s;
3671       bfd_byte *p;
3672       size_t i;
3673       Elf_Internal_Verdef def;
3674       Elf_Internal_Verdaux defaux;
3675
3676       s = bfd_get_linker_section (dynobj, ".gnu.version_d");
3677       p = s->contents;
3678       do
3679         {
3680           _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
3681                                    &def);
3682           p += sizeof (Elf_External_Verdef);
3683           if (def.vd_aux != sizeof (Elf_External_Verdef))
3684             continue;
3685           for (i = 0; i < def.vd_cnt; ++i)
3686             {
3687               _bfd_elf_swap_verdaux_in (output_bfd,
3688                                         (Elf_External_Verdaux *) p, &defaux);
3689               defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
3690                                                         defaux.vda_name);
3691               _bfd_elf_swap_verdaux_out (output_bfd,
3692                                          &defaux, (Elf_External_Verdaux *) p);
3693               p += sizeof (Elf_External_Verdaux);
3694             }
3695         }
3696       while (def.vd_next);
3697     }
3698
3699   /* Adjust version references.  */
3700   if (elf_tdata (output_bfd)->verref)
3701     {
3702       asection *s;
3703       bfd_byte *p;
3704       size_t i;
3705       Elf_Internal_Verneed need;
3706       Elf_Internal_Vernaux needaux;
3707
3708       s = bfd_get_linker_section (dynobj, ".gnu.version_r");
3709       p = s->contents;
3710       do
3711         {
3712           _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
3713                                     &need);
3714           need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
3715           _bfd_elf_swap_verneed_out (output_bfd, &need,
3716                                      (Elf_External_Verneed *) p);
3717           p += sizeof (Elf_External_Verneed);
3718           for (i = 0; i < need.vn_cnt; ++i)
3719             {
3720               _bfd_elf_swap_vernaux_in (output_bfd,
3721                                         (Elf_External_Vernaux *) p, &needaux);
3722               needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
3723                                                          needaux.vna_name);
3724               _bfd_elf_swap_vernaux_out (output_bfd,
3725                                          &needaux,
3726                                          (Elf_External_Vernaux *) p);
3727               p += sizeof (Elf_External_Vernaux);
3728             }
3729         }
3730       while (need.vn_next);
3731     }
3732
3733   return TRUE;
3734 }
3735 \f
3736 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3737    The default is to only match when the INPUT and OUTPUT are exactly
3738    the same target.  */
3739
3740 bfd_boolean
3741 _bfd_elf_default_relocs_compatible (const bfd_target *input,
3742                                     const bfd_target *output)
3743 {
3744   return input == output;
3745 }
3746
3747 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3748    This version is used when different targets for the same architecture
3749    are virtually identical.  */
3750
3751 bfd_boolean
3752 _bfd_elf_relocs_compatible (const bfd_target *input,
3753                             const bfd_target *output)
3754 {
3755   const struct elf_backend_data *obed, *ibed;
3756
3757   if (input == output)
3758     return TRUE;
3759
3760   ibed = xvec_get_elf_backend_data (input);
3761   obed = xvec_get_elf_backend_data (output);
3762
3763   if (ibed->arch != obed->arch)
3764     return FALSE;
3765
3766   /* If both backends are using this function, deem them compatible.  */
3767   return ibed->relocs_compatible == obed->relocs_compatible;
3768 }
3769
3770 /* Make a special call to the linker "notice" function to tell it that
3771    we are about to handle an as-needed lib, or have finished
3772    processing the lib.  */
3773
3774 bfd_boolean
3775 _bfd_elf_notice_as_needed (bfd *ibfd,
3776                            struct bfd_link_info *info,
3777                            enum notice_asneeded_action act)
3778 {
3779   return (*info->callbacks->notice) (info, NULL, NULL, ibfd, NULL, act, 0);
3780 }
3781
3782 /* Check relocations an ELF object file.  */
3783
3784 bfd_boolean
3785 _bfd_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
3786 {
3787   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3788   struct elf_link_hash_table *htab = elf_hash_table (info);
3789
3790   /* If this object is the same format as the output object, and it is
3791      not a shared library, then let the backend look through the
3792      relocs.
3793
3794      This is required to build global offset table entries and to
3795      arrange for dynamic relocs.  It is not required for the
3796      particular common case of linking non PIC code, even when linking
3797      against shared libraries, but unfortunately there is no way of
3798      knowing whether an object file has been compiled PIC or not.
3799      Looking through the relocs is not particularly time consuming.
3800      The problem is that we must either (1) keep the relocs in memory,
3801      which causes the linker to require additional runtime memory or
3802      (2) read the relocs twice from the input file, which wastes time.
3803      This would be a good case for using mmap.
3804
3805      I have no idea how to handle linking PIC code into a file of a
3806      different format.  It probably can't be done.  */
3807   if ((abfd->flags & DYNAMIC) == 0
3808       && is_elf_hash_table (htab)
3809       && bed->check_relocs != NULL
3810       && elf_object_id (abfd) == elf_hash_table_id (htab)
3811       && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
3812     {
3813       asection *o;
3814
3815       for (o = abfd->sections; o != NULL; o = o->next)
3816         {
3817           Elf_Internal_Rela *internal_relocs;
3818           bfd_boolean ok;
3819
3820           /* Don't check relocations in excluded sections.  */
3821           if ((o->flags & SEC_RELOC) == 0
3822               || (o->flags & SEC_EXCLUDE) != 0
3823               || o->reloc_count == 0
3824               || ((info->strip == strip_all || info->strip == strip_debugger)
3825                   && (o->flags & SEC_DEBUGGING) != 0)
3826               || bfd_is_abs_section (o->output_section))
3827             continue;
3828
3829           internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
3830                                                        info->keep_memory);
3831           if (internal_relocs == NULL)
3832             return FALSE;
3833
3834           ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
3835
3836           if (elf_section_data (o)->relocs != internal_relocs)
3837             free (internal_relocs);
3838
3839           if (! ok)
3840             return FALSE;
3841         }
3842     }
3843
3844   return TRUE;
3845 }
3846
3847 /* Add symbols from an ELF object file to the linker hash table.  */
3848
3849 static bfd_boolean
3850 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
3851 {
3852   Elf_Internal_Ehdr *ehdr;
3853   Elf_Internal_Shdr *hdr;
3854   size_t symcount;
3855   size_t extsymcount;
3856   size_t extsymoff;
3857   struct elf_link_hash_entry **sym_hash;
3858   bfd_boolean dynamic;
3859   Elf_External_Versym *extversym = NULL;
3860   Elf_External_Versym *ever;
3861   struct elf_link_hash_entry *weaks;
3862   struct elf_link_hash_entry **nondeflt_vers = NULL;
3863   size_t nondeflt_vers_cnt = 0;
3864   Elf_Internal_Sym *isymbuf = NULL;
3865   Elf_Internal_Sym *isym;
3866   Elf_Internal_Sym *isymend;
3867   const struct elf_backend_data *bed;
3868   bfd_boolean add_needed;
3869   struct elf_link_hash_table *htab;
3870   bfd_size_type amt;
3871   void *alloc_mark = NULL;
3872   struct bfd_hash_entry **old_table = NULL;
3873   unsigned int old_size = 0;
3874   unsigned int old_count = 0;
3875   void *old_tab = NULL;
3876   void *old_ent;
3877   struct bfd_link_hash_entry *old_undefs = NULL;
3878   struct bfd_link_hash_entry *old_undefs_tail = NULL;
3879   void *old_strtab = NULL;
3880   size_t tabsize = 0;
3881   asection *s;
3882   bfd_boolean just_syms;
3883
3884   htab = elf_hash_table (info);
3885   bed = get_elf_backend_data (abfd);
3886
3887   if ((abfd->flags & DYNAMIC) == 0)
3888     dynamic = FALSE;
3889   else
3890     {
3891       dynamic = TRUE;
3892
3893       /* You can't use -r against a dynamic object.  Also, there's no
3894          hope of using a dynamic object which does not exactly match
3895          the format of the output file.  */
3896       if (bfd_link_relocatable (info)
3897           || !is_elf_hash_table (htab)
3898           || info->output_bfd->xvec != abfd->xvec)
3899         {
3900           if (bfd_link_relocatable (info))
3901             bfd_set_error (bfd_error_invalid_operation);
3902           else
3903             bfd_set_error (bfd_error_wrong_format);
3904           goto error_return;
3905         }
3906     }
3907
3908   ehdr = elf_elfheader (abfd);
3909   if (info->warn_alternate_em
3910       && bed->elf_machine_code != ehdr->e_machine
3911       && ((bed->elf_machine_alt1 != 0
3912            && ehdr->e_machine == bed->elf_machine_alt1)
3913           || (bed->elf_machine_alt2 != 0
3914               && ehdr->e_machine == bed->elf_machine_alt2)))
3915     _bfd_error_handler
3916       /* xgettext:c-format */
3917       (_("alternate ELF machine code found (%d) in %pB, expecting %d"),
3918        ehdr->e_machine, abfd, bed->elf_machine_code);
3919
3920   /* As a GNU extension, any input sections which are named
3921      .gnu.warning.SYMBOL are treated as warning symbols for the given
3922      symbol.  This differs from .gnu.warning sections, which generate
3923      warnings when they are included in an output file.  */
3924   /* PR 12761: Also generate this warning when building shared libraries.  */
3925   for (s = abfd->sections; s != NULL; s = s->next)
3926     {
3927       const char *name;
3928
3929       name = bfd_get_section_name (abfd, s);
3930       if (CONST_STRNEQ (name, ".gnu.warning."))
3931         {
3932           char *msg;
3933           bfd_size_type sz;
3934
3935           name += sizeof ".gnu.warning." - 1;
3936
3937           /* If this is a shared object, then look up the symbol
3938              in the hash table.  If it is there, and it is already
3939              been defined, then we will not be using the entry
3940              from this shared object, so we don't need to warn.
3941              FIXME: If we see the definition in a regular object
3942              later on, we will warn, but we shouldn't.  The only
3943              fix is to keep track of what warnings we are supposed
3944              to emit, and then handle them all at the end of the
3945              link.  */
3946           if (dynamic)
3947             {
3948               struct elf_link_hash_entry *h;
3949
3950               h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
3951
3952               /* FIXME: What about bfd_link_hash_common?  */
3953               if (h != NULL
3954                   && (h->root.type == bfd_link_hash_defined
3955                       || h->root.type == bfd_link_hash_defweak))
3956                 continue;
3957             }
3958
3959           sz = s->size;
3960           msg = (char *) bfd_alloc (abfd, sz + 1);
3961           if (msg == NULL)
3962             goto error_return;
3963
3964           if (! bfd_get_section_contents (abfd, s, msg, 0, sz))
3965             goto error_return;
3966
3967           msg[sz] = '\0';
3968
3969           if (! (_bfd_generic_link_add_one_symbol
3970                  (info, abfd, name, BSF_WARNING, s, 0, msg,
3971                   FALSE, bed->collect, NULL)))
3972             goto error_return;
3973
3974           if (bfd_link_executable (info))
3975             {
3976               /* Clobber the section size so that the warning does
3977                  not get copied into the output file.  */
3978               s->size = 0;
3979
3980               /* Also set SEC_EXCLUDE, so that symbols defined in
3981                  the warning section don't get copied to the output.  */
3982               s->flags |= SEC_EXCLUDE;
3983             }
3984         }
3985     }
3986
3987   just_syms = ((s = abfd->sections) != NULL
3988                && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS);
3989
3990   add_needed = TRUE;
3991   if (! dynamic)
3992     {
3993       /* If we are creating a shared library, create all the dynamic
3994          sections immediately.  We need to attach them to something,
3995          so we attach them to this BFD, provided it is the right
3996          format and is not from ld --just-symbols.  Always create the
3997          dynamic sections for -E/--dynamic-list.  FIXME: If there
3998          are no input BFD's of the same format as the output, we can't
3999          make a shared library.  */
4000       if (!just_syms
4001           && (bfd_link_pic (info)
4002               || (!bfd_link_relocatable (info)
4003                   && info->nointerp
4004                   && (info->export_dynamic || info->dynamic)))
4005           && is_elf_hash_table (htab)
4006           && info->output_bfd->xvec == abfd->xvec
4007           && !htab->dynamic_sections_created)
4008         {
4009           if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
4010             goto error_return;
4011         }
4012     }
4013   else if (!is_elf_hash_table (htab))
4014     goto error_return;
4015   else
4016     {
4017       const char *soname = NULL;
4018       char *audit = NULL;
4019       struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
4020       const Elf_Internal_Phdr *phdr;
4021       int ret;
4022
4023       /* ld --just-symbols and dynamic objects don't mix very well.
4024          ld shouldn't allow it.  */
4025       if (just_syms)
4026         abort ();
4027
4028       /* If this dynamic lib was specified on the command line with
4029          --as-needed in effect, then we don't want to add a DT_NEEDED
4030          tag unless the lib is actually used.  Similary for libs brought
4031          in by another lib's DT_NEEDED.  When --no-add-needed is used
4032          on a dynamic lib, we don't want to add a DT_NEEDED entry for
4033          any dynamic library in DT_NEEDED tags in the dynamic lib at
4034          all.  */
4035       add_needed = (elf_dyn_lib_class (abfd)
4036                     & (DYN_AS_NEEDED | DYN_DT_NEEDED
4037                        | DYN_NO_NEEDED)) == 0;
4038
4039       s = bfd_get_section_by_name (abfd, ".dynamic");
4040       if (s != NULL)
4041         {
4042           bfd_byte *dynbuf;
4043           bfd_byte *extdyn;
4044           unsigned int elfsec;
4045           unsigned long shlink;
4046
4047           if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
4048             {
4049 error_free_dyn:
4050               free (dynbuf);
4051               goto error_return;
4052             }
4053
4054           elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
4055           if (elfsec == SHN_BAD)
4056             goto error_free_dyn;
4057           shlink = elf_elfsections (abfd)[elfsec]->sh_link;
4058
4059           for (extdyn = dynbuf;
4060                extdyn < dynbuf + s->size;
4061                extdyn += bed->s->sizeof_dyn)
4062             {
4063               Elf_Internal_Dyn dyn;
4064
4065               bed->s->swap_dyn_in (abfd, extdyn, &dyn);
4066               if (dyn.d_tag == DT_SONAME)
4067                 {
4068                   unsigned int tagv = dyn.d_un.d_val;
4069                   soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4070                   if (soname == NULL)
4071                     goto error_free_dyn;
4072                 }
4073               if (dyn.d_tag == DT_NEEDED)
4074                 {
4075                   struct bfd_link_needed_list *n, **pn;
4076                   char *fnm, *anm;
4077                   unsigned int tagv = dyn.d_un.d_val;
4078
4079                   amt = sizeof (struct bfd_link_needed_list);
4080                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
4081                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4082                   if (n == NULL || fnm == NULL)
4083                     goto error_free_dyn;
4084                   amt = strlen (fnm) + 1;
4085                   anm = (char *) bfd_alloc (abfd, amt);
4086                   if (anm == NULL)
4087                     goto error_free_dyn;
4088                   memcpy (anm, fnm, amt);
4089                   n->name = anm;
4090                   n->by = abfd;
4091                   n->next = NULL;
4092                   for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next)
4093                     ;
4094                   *pn = n;
4095                 }
4096               if (dyn.d_tag == DT_RUNPATH)
4097                 {
4098                   struct bfd_link_needed_list *n, **pn;
4099                   char *fnm, *anm;
4100                   unsigned int tagv = dyn.d_un.d_val;
4101
4102                   amt = sizeof (struct bfd_link_needed_list);
4103                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
4104                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4105                   if (n == NULL || fnm == NULL)
4106                     goto error_free_dyn;
4107                   amt = strlen (fnm) + 1;
4108                   anm = (char *) bfd_alloc (abfd, amt);
4109                   if (anm == NULL)
4110                     goto error_free_dyn;
4111                   memcpy (anm, fnm, amt);
4112                   n->name = anm;
4113                   n->by = abfd;
4114                   n->next = NULL;
4115                   for (pn = & runpath;
4116                        *pn != NULL;
4117                        pn = &(*pn)->next)
4118                     ;
4119                   *pn = n;
4120                 }
4121               /* Ignore DT_RPATH if we have seen DT_RUNPATH.  */
4122               if (!runpath && dyn.d_tag == DT_RPATH)
4123                 {
4124                   struct bfd_link_needed_list *n, **pn;
4125                   char *fnm, *anm;
4126                   unsigned int tagv = dyn.d_un.d_val;
4127
4128                   amt = sizeof (struct bfd_link_needed_list);
4129                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
4130                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4131                   if (n == NULL || fnm == NULL)
4132                     goto error_free_dyn;
4133                   amt = strlen (fnm) + 1;
4134                   anm = (char *) bfd_alloc (abfd, amt);
4135                   if (anm == NULL)
4136                     goto error_free_dyn;
4137                   memcpy (anm, fnm, amt);
4138                   n->name = anm;
4139                   n->by = abfd;
4140                   n->next = NULL;
4141                   for (pn = & rpath;
4142                        *pn != NULL;
4143                        pn = &(*pn)->next)
4144                     ;
4145                   *pn = n;
4146                 }
4147               if (dyn.d_tag == DT_AUDIT)
4148                 {
4149                   unsigned int tagv = dyn.d_un.d_val;
4150                   audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4151                 }
4152             }
4153
4154           free (dynbuf);
4155         }
4156
4157       /* DT_RUNPATH overrides DT_RPATH.  Do _NOT_ bfd_release, as that
4158          frees all more recently bfd_alloc'd blocks as well.  */
4159       if (runpath)
4160         rpath = runpath;
4161
4162       if (rpath)
4163         {
4164           struct bfd_link_needed_list **pn;
4165           for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next)
4166             ;
4167           *pn = rpath;
4168         }
4169
4170       /* If we have a PT_GNU_RELRO program header, mark as read-only
4171          all sections contained fully therein.  This makes relro
4172          shared library sections appear as they will at run-time.  */
4173       phdr = elf_tdata (abfd)->phdr + elf_elfheader (abfd)->e_phnum;
4174       while (--phdr >= elf_tdata (abfd)->phdr)
4175         if (phdr->p_type == PT_GNU_RELRO)
4176           {
4177             for (s = abfd->sections; s != NULL; s = s->next)
4178               if ((s->flags & SEC_ALLOC) != 0
4179                   && s->vma >= phdr->p_vaddr
4180                   && s->vma + s->size <= phdr->p_vaddr + phdr->p_memsz)
4181                 s->flags |= SEC_READONLY;
4182             break;
4183           }
4184
4185       /* We do not want to include any of the sections in a dynamic
4186          object in the output file.  We hack by simply clobbering the
4187          list of sections in the BFD.  This could be handled more
4188          cleanly by, say, a new section flag; the existing
4189          SEC_NEVER_LOAD flag is not the one we want, because that one
4190          still implies that the section takes up space in the output
4191          file.  */
4192       bfd_section_list_clear (abfd);
4193
4194       /* Find the name to use in a DT_NEEDED entry that refers to this
4195          object.  If the object has a DT_SONAME entry, we use it.
4196          Otherwise, if the generic linker stuck something in
4197          elf_dt_name, we use that.  Otherwise, we just use the file
4198          name.  */
4199       if (soname == NULL || *soname == '\0')
4200         {
4201           soname = elf_dt_name (abfd);
4202           if (soname == NULL || *soname == '\0')
4203             soname = bfd_get_filename (abfd);
4204         }
4205
4206       /* Save the SONAME because sometimes the linker emulation code
4207          will need to know it.  */
4208       elf_dt_name (abfd) = soname;
4209
4210       ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4211       if (ret < 0)
4212         goto error_return;
4213
4214       /* If we have already included this dynamic object in the
4215          link, just ignore it.  There is no reason to include a
4216          particular dynamic object more than once.  */
4217       if (ret > 0)
4218         return TRUE;
4219
4220       /* Save the DT_AUDIT entry for the linker emulation code. */
4221       elf_dt_audit (abfd) = audit;
4222     }
4223
4224   /* If this is a dynamic object, we always link against the .dynsym
4225      symbol table, not the .symtab symbol table.  The dynamic linker
4226      will only see the .dynsym symbol table, so there is no reason to
4227      look at .symtab for a dynamic object.  */
4228
4229   if (! dynamic || elf_dynsymtab (abfd) == 0)
4230     hdr = &elf_tdata (abfd)->symtab_hdr;
4231   else
4232     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
4233
4234   symcount = hdr->sh_size / bed->s->sizeof_sym;
4235
4236   /* The sh_info field of the symtab header tells us where the
4237      external symbols start.  We don't care about the local symbols at
4238      this point.  */
4239   if (elf_bad_symtab (abfd))
4240     {
4241       extsymcount = symcount;
4242       extsymoff = 0;
4243     }
4244   else
4245     {
4246       extsymcount = symcount - hdr->sh_info;
4247       extsymoff = hdr->sh_info;
4248     }
4249
4250   sym_hash = elf_sym_hashes (abfd);
4251   if (extsymcount != 0)
4252     {
4253       isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
4254                                       NULL, NULL, NULL);
4255       if (isymbuf == NULL)
4256         goto error_return;
4257
4258       if (sym_hash == NULL)
4259         {
4260           /* We store a pointer to the hash table entry for each
4261              external symbol.  */
4262           amt = extsymcount;
4263           amt *= sizeof (struct elf_link_hash_entry *);
4264           sym_hash = (struct elf_link_hash_entry **) bfd_zalloc (abfd, amt);
4265           if (sym_hash == NULL)
4266             goto error_free_sym;
4267           elf_sym_hashes (abfd) = sym_hash;
4268         }
4269     }
4270
4271   if (dynamic)
4272     {
4273       /* Read in any version definitions.  */
4274       if (!_bfd_elf_slurp_version_tables (abfd,
4275                                           info->default_imported_symver))
4276         goto error_free_sym;
4277
4278       /* Read in the symbol versions, but don't bother to convert them
4279          to internal format.  */
4280       if (elf_dynversym (abfd) != 0)
4281         {
4282           Elf_Internal_Shdr *versymhdr;
4283
4284           versymhdr = &elf_tdata (abfd)->dynversym_hdr;
4285           extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
4286           if (extversym == NULL)
4287             goto error_free_sym;
4288           amt = versymhdr->sh_size;
4289           if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
4290               || bfd_bread (extversym, amt, abfd) != amt)
4291             goto error_free_vers;
4292         }
4293     }
4294
4295   /* If we are loading an as-needed shared lib, save the symbol table
4296      state before we start adding symbols.  If the lib turns out
4297      to be unneeded, restore the state.  */
4298   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4299     {
4300       unsigned int i;
4301       size_t entsize;
4302
4303       for (entsize = 0, i = 0; i < htab->root.table.size; i++)
4304         {
4305           struct bfd_hash_entry *p;
4306           struct elf_link_hash_entry *h;
4307
4308           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4309             {
4310               h = (struct elf_link_hash_entry *) p;
4311               entsize += htab->root.table.entsize;
4312               if (h->root.type == bfd_link_hash_warning)
4313                 entsize += htab->root.table.entsize;
4314             }
4315         }
4316
4317       tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
4318       old_tab = bfd_malloc (tabsize + entsize);
4319       if (old_tab == NULL)
4320         goto error_free_vers;
4321
4322       /* Remember the current objalloc pointer, so that all mem for
4323          symbols added can later be reclaimed.  */
4324       alloc_mark = bfd_hash_allocate (&htab->root.table, 1);
4325       if (alloc_mark == NULL)
4326         goto error_free_vers;
4327
4328       /* Make a special call to the linker "notice" function to
4329          tell it that we are about to handle an as-needed lib.  */
4330       if (!(*bed->notice_as_needed) (abfd, info, notice_as_needed))
4331         goto error_free_vers;
4332
4333       /* Clone the symbol table.  Remember some pointers into the
4334          symbol table, and dynamic symbol count.  */
4335       old_ent = (char *) old_tab + tabsize;
4336       memcpy (old_tab, htab->root.table.table, tabsize);
4337       old_undefs = htab->root.undefs;
4338       old_undefs_tail = htab->root.undefs_tail;
4339       old_table = htab->root.table.table;
4340       old_size = htab->root.table.size;
4341       old_count = htab->root.table.count;
4342       old_strtab = _bfd_elf_strtab_save (htab->dynstr);
4343       if (old_strtab == NULL)
4344         goto error_free_vers;
4345
4346       for (i = 0; i < htab->root.table.size; i++)
4347         {
4348           struct bfd_hash_entry *p;
4349           struct elf_link_hash_entry *h;
4350
4351           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4352             {
4353               memcpy (old_ent, p, htab->root.table.entsize);
4354               old_ent = (char *) old_ent + htab->root.table.entsize;
4355               h = (struct elf_link_hash_entry *) p;
4356               if (h->root.type == bfd_link_hash_warning)
4357                 {
4358                   memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
4359                   old_ent = (char *) old_ent + htab->root.table.entsize;
4360                 }
4361             }
4362         }
4363     }
4364
4365   weaks = NULL;
4366   ever = extversym != NULL ? extversym + extsymoff : NULL;
4367   for (isym = isymbuf, isymend = isymbuf + extsymcount;
4368        isym < isymend;
4369        isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
4370     {
4371       int bind;
4372       bfd_vma value;
4373       asection *sec, *new_sec;
4374       flagword flags;
4375       const char *name;
4376       struct elf_link_hash_entry *h;
4377       struct elf_link_hash_entry *hi;
4378       bfd_boolean definition;
4379       bfd_boolean size_change_ok;
4380       bfd_boolean type_change_ok;
4381       bfd_boolean new_weak;
4382       bfd_boolean old_weak;
4383       bfd_boolean override;
4384       bfd_boolean common;
4385       bfd_boolean discarded;
4386       unsigned int old_alignment;
4387       bfd *old_bfd;
4388       bfd_boolean matched;
4389
4390       override = FALSE;
4391
4392       flags = BSF_NO_FLAGS;
4393       sec = NULL;
4394       value = isym->st_value;
4395       common = bed->common_definition (isym);
4396       if (common && info->inhibit_common_definition)
4397         {
4398           /* Treat common symbol as undefined for --no-define-common.  */
4399           isym->st_shndx = SHN_UNDEF;
4400           common = FALSE;
4401         }
4402       discarded = FALSE;
4403
4404       bind = ELF_ST_BIND (isym->st_info);
4405       switch (bind)
4406         {
4407         case STB_LOCAL:
4408           /* This should be impossible, since ELF requires that all
4409              global symbols follow all local symbols, and that sh_info
4410              point to the first global symbol.  Unfortunately, Irix 5
4411              screws this up.  */
4412           continue;
4413
4414         case STB_GLOBAL:
4415           if (isym->st_shndx != SHN_UNDEF && !common)
4416             flags = BSF_GLOBAL;
4417           break;
4418
4419         case STB_WEAK:
4420           flags = BSF_WEAK;
4421           break;
4422
4423         case STB_GNU_UNIQUE:
4424           flags = BSF_GNU_UNIQUE;
4425           break;
4426
4427         default:
4428           /* Leave it up to the processor backend.  */
4429           break;
4430         }
4431
4432       if (isym->st_shndx == SHN_UNDEF)
4433         sec = bfd_und_section_ptr;
4434       else if (isym->st_shndx == SHN_ABS)
4435         sec = bfd_abs_section_ptr;
4436       else if (isym->st_shndx == SHN_COMMON)
4437         {
4438           sec = bfd_com_section_ptr;
4439           /* What ELF calls the size we call the value.  What ELF
4440              calls the value we call the alignment.  */
4441           value = isym->st_size;
4442         }
4443       else
4444         {
4445           sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
4446           if (sec == NULL)
4447             sec = bfd_abs_section_ptr;
4448           else if (discarded_section (sec))
4449             {
4450               /* Symbols from discarded section are undefined.  We keep
4451                  its visibility.  */
4452               sec = bfd_und_section_ptr;
4453               discarded = TRUE;
4454               isym->st_shndx = SHN_UNDEF;
4455             }
4456           else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
4457             value -= sec->vma;
4458         }
4459
4460       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4461                                               isym->st_name);
4462       if (name == NULL)
4463         goto error_free_vers;
4464
4465       if (isym->st_shndx == SHN_COMMON
4466           && (abfd->flags & BFD_PLUGIN) != 0)
4467         {
4468           asection *xc = bfd_get_section_by_name (abfd, "COMMON");
4469
4470           if (xc == NULL)
4471             {
4472               flagword sflags = (SEC_ALLOC | SEC_IS_COMMON | SEC_KEEP
4473                                  | SEC_EXCLUDE);
4474               xc = bfd_make_section_with_flags (abfd, "COMMON", sflags);
4475               if (xc == NULL)
4476                 goto error_free_vers;
4477             }
4478           sec = xc;
4479         }
4480       else if (isym->st_shndx == SHN_COMMON
4481                && ELF_ST_TYPE (isym->st_info) == STT_TLS
4482                && !bfd_link_relocatable (info))
4483         {
4484           asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
4485
4486           if (tcomm == NULL)
4487             {
4488               flagword sflags = (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_IS_COMMON
4489                                  | SEC_LINKER_CREATED);
4490               tcomm = bfd_make_section_with_flags (abfd, ".tcommon", sflags);
4491               if (tcomm == NULL)
4492                 goto error_free_vers;
4493             }
4494           sec = tcomm;
4495         }
4496       else if (bed->elf_add_symbol_hook)
4497         {
4498           if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
4499                                              &sec, &value))
4500             goto error_free_vers;
4501
4502           /* The hook function sets the name to NULL if this symbol
4503              should be skipped for some reason.  */
4504           if (name == NULL)
4505             continue;
4506         }
4507
4508       /* Sanity check that all possibilities were handled.  */
4509       if (sec == NULL)
4510         {
4511           bfd_set_error (bfd_error_bad_value);
4512           goto error_free_vers;
4513         }
4514
4515       /* Silently discard TLS symbols from --just-syms.  There's
4516          no way to combine a static TLS block with a new TLS block
4517          for this executable.  */
4518       if (ELF_ST_TYPE (isym->st_info) == STT_TLS
4519           && sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
4520         continue;
4521
4522       if (bfd_is_und_section (sec)
4523           || bfd_is_com_section (sec))
4524         definition = FALSE;
4525       else
4526         definition = TRUE;
4527
4528       size_change_ok = FALSE;
4529       type_change_ok = bed->type_change_ok;
4530       old_weak = FALSE;
4531       matched = FALSE;
4532       old_alignment = 0;
4533       old_bfd = NULL;
4534       new_sec = sec;
4535
4536       if (is_elf_hash_table (htab))
4537         {
4538           Elf_Internal_Versym iver;
4539           unsigned int vernum = 0;
4540           bfd_boolean skip;
4541
4542           if (ever == NULL)
4543             {
4544               if (info->default_imported_symver)
4545                 /* Use the default symbol version created earlier.  */
4546                 iver.vs_vers = elf_tdata (abfd)->cverdefs;
4547               else
4548                 iver.vs_vers = 0;
4549             }
4550           else
4551             _bfd_elf_swap_versym_in (abfd, ever, &iver);
4552
4553           vernum = iver.vs_vers & VERSYM_VERSION;
4554
4555           /* If this is a hidden symbol, or if it is not version
4556              1, we append the version name to the symbol name.
4557              However, we do not modify a non-hidden absolute symbol
4558              if it is not a function, because it might be the version
4559              symbol itself.  FIXME: What if it isn't?  */
4560           if ((iver.vs_vers & VERSYM_HIDDEN) != 0
4561               || (vernum > 1
4562                   && (!bfd_is_abs_section (sec)
4563                       || bed->is_function_type (ELF_ST_TYPE (isym->st_info)))))
4564             {
4565               const char *verstr;
4566               size_t namelen, verlen, newlen;
4567               char *newname, *p;
4568
4569               if (isym->st_shndx != SHN_UNDEF)
4570                 {
4571                   if (vernum > elf_tdata (abfd)->cverdefs)
4572                     verstr = NULL;
4573                   else if (vernum > 1)
4574                     verstr =
4575                       elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
4576                   else
4577                     verstr = "";
4578
4579                   if (verstr == NULL)
4580                     {
4581                       _bfd_error_handler
4582                         /* xgettext:c-format */
4583                         (_("%pB: %s: invalid version %u (max %d)"),
4584                          abfd, name, vernum,
4585                          elf_tdata (abfd)->cverdefs);
4586                       bfd_set_error (bfd_error_bad_value);
4587                       goto error_free_vers;
4588                     }
4589                 }
4590               else
4591                 {
4592                   /* We cannot simply test for the number of
4593                      entries in the VERNEED section since the
4594                      numbers for the needed versions do not start
4595                      at 0.  */
4596                   Elf_Internal_Verneed *t;
4597
4598                   verstr = NULL;
4599                   for (t = elf_tdata (abfd)->verref;
4600                        t != NULL;
4601                        t = t->vn_nextref)
4602                     {
4603                       Elf_Internal_Vernaux *a;
4604
4605                       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
4606                         {
4607                           if (a->vna_other == vernum)
4608                             {
4609                               verstr = a->vna_nodename;
4610                               break;
4611                             }
4612                         }
4613                       if (a != NULL)
4614                         break;
4615                     }
4616                   if (verstr == NULL)
4617                     {
4618                       _bfd_error_handler
4619                         /* xgettext:c-format */
4620                         (_("%pB: %s: invalid needed version %d"),
4621                          abfd, name, vernum);
4622                       bfd_set_error (bfd_error_bad_value);
4623                       goto error_free_vers;
4624                     }
4625                 }
4626
4627               namelen = strlen (name);
4628               verlen = strlen (verstr);
4629               newlen = namelen + verlen + 2;
4630               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4631                   && isym->st_shndx != SHN_UNDEF)
4632                 ++newlen;
4633
4634               newname = (char *) bfd_hash_allocate (&htab->root.table, newlen);
4635               if (newname == NULL)
4636                 goto error_free_vers;
4637               memcpy (newname, name, namelen);
4638               p = newname + namelen;
4639               *p++ = ELF_VER_CHR;
4640               /* If this is a defined non-hidden version symbol,
4641                  we add another @ to the name.  This indicates the
4642                  default version of the symbol.  */
4643               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4644                   && isym->st_shndx != SHN_UNDEF)
4645                 *p++ = ELF_VER_CHR;
4646               memcpy (p, verstr, verlen + 1);
4647
4648               name = newname;
4649             }
4650
4651           /* If this symbol has default visibility and the user has
4652              requested we not re-export it, then mark it as hidden.  */
4653           if (!bfd_is_und_section (sec)
4654               && !dynamic
4655               && abfd->no_export
4656               && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
4657             isym->st_other = (STV_HIDDEN
4658                               | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
4659
4660           if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec, &value,
4661                                       sym_hash, &old_bfd, &old_weak,
4662                                       &old_alignment, &skip, &override,
4663                                       &type_change_ok, &size_change_ok,
4664                                       &matched))
4665             goto error_free_vers;
4666
4667           if (skip)
4668             continue;
4669
4670           /* Override a definition only if the new symbol matches the
4671              existing one.  */
4672           if (override && matched)
4673             definition = FALSE;
4674
4675           h = *sym_hash;
4676           while (h->root.type == bfd_link_hash_indirect
4677                  || h->root.type == bfd_link_hash_warning)
4678             h = (struct elf_link_hash_entry *) h->root.u.i.link;
4679
4680           if (elf_tdata (abfd)->verdef != NULL
4681               && vernum > 1
4682               && definition)
4683             h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
4684         }
4685
4686       if (! (_bfd_generic_link_add_one_symbol
4687              (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
4688               (struct bfd_link_hash_entry **) sym_hash)))
4689         goto error_free_vers;
4690
4691       if ((abfd->flags & DYNAMIC) == 0
4692           && (bfd_get_flavour (info->output_bfd)
4693               == bfd_target_elf_flavour))
4694         {
4695           if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4696             elf_tdata (info->output_bfd)->has_gnu_symbols
4697               |= elf_gnu_symbol_ifunc;
4698           if ((flags & BSF_GNU_UNIQUE))
4699             elf_tdata (info->output_bfd)->has_gnu_symbols
4700               |= elf_gnu_symbol_unique;
4701         }
4702
4703       h = *sym_hash;
4704       /* We need to make sure that indirect symbol dynamic flags are
4705          updated.  */
4706       hi = h;
4707       while (h->root.type == bfd_link_hash_indirect
4708              || h->root.type == bfd_link_hash_warning)
4709         h = (struct elf_link_hash_entry *) h->root.u.i.link;
4710
4711       /* Setting the index to -3 tells elf_link_output_extsym that
4712          this symbol is defined in a discarded section.  */
4713       if (discarded)
4714         h->indx = -3;
4715
4716       *sym_hash = h;
4717
4718       new_weak = (flags & BSF_WEAK) != 0;
4719       if (dynamic
4720           && definition
4721           && new_weak
4722           && !bed->is_function_type (ELF_ST_TYPE (isym->st_info))
4723           && is_elf_hash_table (htab)
4724           && h->u.alias == NULL)
4725         {
4726           /* Keep a list of all weak defined non function symbols from
4727              a dynamic object, using the alias field.  Later in this
4728              function we will set the alias field to the correct
4729              value.  We only put non-function symbols from dynamic
4730              objects on this list, because that happens to be the only
4731              time we need to know the normal symbol corresponding to a
4732              weak symbol, and the information is time consuming to
4733              figure out.  If the alias field is not already NULL,
4734              then this symbol was already defined by some previous
4735              dynamic object, and we will be using that previous
4736              definition anyhow.  */
4737
4738           h->u.alias = weaks;
4739           weaks = h;
4740         }
4741
4742       /* Set the alignment of a common symbol.  */
4743       if ((common || bfd_is_com_section (sec))
4744           && h->root.type == bfd_link_hash_common)
4745         {
4746           unsigned int align;
4747
4748           if (common)
4749             align = bfd_log2 (isym->st_value);
4750           else
4751             {
4752               /* The new symbol is a common symbol in a shared object.
4753                  We need to get the alignment from the section.  */
4754               align = new_sec->alignment_power;
4755             }
4756           if (align > old_alignment)
4757             h->root.u.c.p->alignment_power = align;
4758           else
4759             h->root.u.c.p->alignment_power = old_alignment;
4760         }
4761
4762       if (is_elf_hash_table (htab))
4763         {
4764           /* Set a flag in the hash table entry indicating the type of
4765              reference or definition we just found.  A dynamic symbol
4766              is one which is referenced or defined by both a regular
4767              object and a shared object.  */
4768           bfd_boolean dynsym = FALSE;
4769
4770           /* Plugin symbols aren't normal.  Don't set def_regular or
4771              ref_regular for them, or make them dynamic.  */
4772           if ((abfd->flags & BFD_PLUGIN) != 0)
4773             ;
4774           else if (! dynamic)
4775             {
4776               if (! definition)
4777                 {
4778                   h->ref_regular = 1;
4779                   if (bind != STB_WEAK)
4780                     h->ref_regular_nonweak = 1;
4781                 }
4782               else
4783                 {
4784                   h->def_regular = 1;
4785                   if (h->def_dynamic)
4786                     {
4787                       h->def_dynamic = 0;
4788                       h->ref_dynamic = 1;
4789                     }
4790                 }
4791
4792               /* If the indirect symbol has been forced local, don't
4793                  make the real symbol dynamic.  */
4794               if ((h == hi || !hi->forced_local)
4795                   && (bfd_link_dll (info)
4796                       || h->def_dynamic
4797                       || h->ref_dynamic))
4798                 dynsym = TRUE;
4799             }
4800           else
4801             {
4802               if (! definition)
4803                 {
4804                   h->ref_dynamic = 1;
4805                   hi->ref_dynamic = 1;
4806                 }
4807               else
4808                 {
4809                   h->def_dynamic = 1;
4810                   hi->def_dynamic = 1;
4811                 }
4812
4813               /* If the indirect symbol has been forced local, don't
4814                  make the real symbol dynamic.  */
4815               if ((h == hi || !hi->forced_local)
4816                   && (h->def_regular
4817                       || h->ref_regular
4818                       || (h->is_weakalias
4819                           && weakdef (h)->dynindx != -1)))
4820                 dynsym = TRUE;
4821             }
4822
4823           /* Check to see if we need to add an indirect symbol for
4824              the default name.  */
4825           if (definition
4826               || (!override && h->root.type == bfd_link_hash_common))
4827             if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
4828                                               sec, value, &old_bfd, &dynsym))
4829               goto error_free_vers;
4830
4831           /* Check the alignment when a common symbol is involved. This
4832              can change when a common symbol is overridden by a normal
4833              definition or a common symbol is ignored due to the old
4834              normal definition. We need to make sure the maximum
4835              alignment is maintained.  */
4836           if ((old_alignment || common)
4837               && h->root.type != bfd_link_hash_common)
4838             {
4839               unsigned int common_align;
4840               unsigned int normal_align;
4841               unsigned int symbol_align;
4842               bfd *normal_bfd;
4843               bfd *common_bfd;
4844
4845               BFD_ASSERT (h->root.type == bfd_link_hash_defined
4846                           || h->root.type == bfd_link_hash_defweak);
4847
4848               symbol_align = ffs (h->root.u.def.value) - 1;
4849               if (h->root.u.def.section->owner != NULL
4850                   && (h->root.u.def.section->owner->flags
4851                        & (DYNAMIC | BFD_PLUGIN)) == 0)
4852                 {
4853                   normal_align = h->root.u.def.section->alignment_power;
4854                   if (normal_align > symbol_align)
4855                     normal_align = symbol_align;
4856                 }
4857               else
4858                 normal_align = symbol_align;
4859
4860               if (old_alignment)
4861                 {
4862                   common_align = old_alignment;
4863                   common_bfd = old_bfd;
4864                   normal_bfd = abfd;
4865                 }
4866               else
4867                 {
4868                   common_align = bfd_log2 (isym->st_value);
4869                   common_bfd = abfd;
4870                   normal_bfd = old_bfd;
4871                 }
4872
4873               if (normal_align < common_align)
4874                 {
4875                   /* PR binutils/2735 */
4876                   if (normal_bfd == NULL)
4877                     _bfd_error_handler
4878                       /* xgettext:c-format */
4879                       (_("warning: alignment %u of common symbol `%s' in %pB is"
4880                          " greater than the alignment (%u) of its section %pA"),
4881                        1 << common_align, name, common_bfd,
4882                        1 << normal_align, h->root.u.def.section);
4883                   else
4884                     _bfd_error_handler
4885                       /* xgettext:c-format */
4886                       (_("warning: alignment %u of symbol `%s' in %pB"
4887                          " is smaller than %u in %pB"),
4888                        1 << normal_align, name, normal_bfd,
4889                        1 << common_align, common_bfd);
4890                 }
4891             }
4892
4893           /* Remember the symbol size if it isn't undefined.  */
4894           if (isym->st_size != 0
4895               && isym->st_shndx != SHN_UNDEF
4896               && (definition || h->size == 0))
4897             {
4898               if (h->size != 0
4899                   && h->size != isym->st_size
4900                   && ! size_change_ok)
4901                 _bfd_error_handler
4902                   /* xgettext:c-format */
4903                   (_("warning: size of symbol `%s' changed"
4904                      " from %" PRIu64 " in %pB to %" PRIu64 " in %pB"),
4905                    name, (uint64_t) h->size, old_bfd,
4906                    (uint64_t) isym->st_size, abfd);
4907
4908               h->size = isym->st_size;
4909             }
4910
4911           /* If this is a common symbol, then we always want H->SIZE
4912              to be the size of the common symbol.  The code just above
4913              won't fix the size if a common symbol becomes larger.  We
4914              don't warn about a size change here, because that is
4915              covered by --warn-common.  Allow changes between different
4916              function types.  */
4917           if (h->root.type == bfd_link_hash_common)
4918             h->size = h->root.u.c.size;
4919
4920           if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
4921               && ((definition && !new_weak)
4922                   || (old_weak && h->root.type == bfd_link_hash_common)
4923                   || h->type == STT_NOTYPE))
4924             {
4925               unsigned int type = ELF_ST_TYPE (isym->st_info);
4926
4927               /* Turn an IFUNC symbol from a DSO into a normal FUNC
4928                  symbol.  */
4929               if (type == STT_GNU_IFUNC
4930                   && (abfd->flags & DYNAMIC) != 0)
4931                 type = STT_FUNC;
4932
4933               if (h->type != type)
4934                 {
4935                   if (h->type != STT_NOTYPE && ! type_change_ok)
4936                     /* xgettext:c-format */
4937                     _bfd_error_handler
4938                       (_("warning: type of symbol `%s' changed"
4939                          " from %d to %d in %pB"),
4940                        name, h->type, type, abfd);
4941
4942                   h->type = type;
4943                 }
4944             }
4945
4946           /* Merge st_other field.  */
4947           elf_merge_st_other (abfd, h, isym, sec, definition, dynamic);
4948
4949           /* We don't want to make debug symbol dynamic.  */
4950           if (definition
4951               && (sec->flags & SEC_DEBUGGING)
4952               && !bfd_link_relocatable (info))
4953             dynsym = FALSE;
4954
4955           /* Nor should we make plugin symbols dynamic.  */
4956           if ((abfd->flags & BFD_PLUGIN) != 0)
4957             dynsym = FALSE;
4958
4959           if (definition)
4960             {
4961               h->target_internal = isym->st_target_internal;
4962               h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
4963             }
4964
4965           if (definition && !dynamic)
4966             {
4967               char *p = strchr (name, ELF_VER_CHR);
4968               if (p != NULL && p[1] != ELF_VER_CHR)
4969                 {
4970                   /* Queue non-default versions so that .symver x, x@FOO
4971                      aliases can be checked.  */
4972                   if (!nondeflt_vers)
4973                     {
4974                       amt = ((isymend - isym + 1)
4975                              * sizeof (struct elf_link_hash_entry *));
4976                       nondeflt_vers
4977                         = (struct elf_link_hash_entry **) bfd_malloc (amt);
4978                       if (!nondeflt_vers)
4979                         goto error_free_vers;
4980                     }
4981                   nondeflt_vers[nondeflt_vers_cnt++] = h;
4982                 }
4983             }
4984
4985           if (dynsym && h->dynindx == -1)
4986             {
4987               if (! bfd_elf_link_record_dynamic_symbol (info, h))
4988                 goto error_free_vers;
4989               if (h->is_weakalias
4990                   && weakdef (h)->dynindx == -1)
4991                 {
4992                   if (!bfd_elf_link_record_dynamic_symbol (info, weakdef (h)))
4993                     goto error_free_vers;
4994                 }
4995             }
4996           else if (h->dynindx != -1)
4997             /* If the symbol already has a dynamic index, but
4998                visibility says it should not be visible, turn it into
4999                a local symbol.  */
5000             switch (ELF_ST_VISIBILITY (h->other))
5001               {
5002               case STV_INTERNAL:
5003               case STV_HIDDEN:
5004                 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
5005                 dynsym = FALSE;
5006                 break;
5007               }
5008
5009           /* Don't add DT_NEEDED for references from the dummy bfd nor
5010              for unmatched symbol.  */
5011           if (!add_needed
5012               && matched
5013               && definition
5014               && ((dynsym
5015                    && h->ref_regular_nonweak
5016                    && (old_bfd == NULL
5017                        || (old_bfd->flags & BFD_PLUGIN) == 0))
5018                   || (h->ref_dynamic_nonweak
5019                       && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
5020                       && !on_needed_list (elf_dt_name (abfd),
5021                                           htab->needed, NULL))))
5022             {
5023               int ret;
5024               const char *soname = elf_dt_name (abfd);
5025
5026               info->callbacks->minfo ("%!", soname, old_bfd,
5027                                       h->root.root.string);
5028
5029               /* A symbol from a library loaded via DT_NEEDED of some
5030                  other library is referenced by a regular object.
5031                  Add a DT_NEEDED entry for it.  Issue an error if
5032                  --no-add-needed is used and the reference was not
5033                  a weak one.  */
5034               if (old_bfd != NULL
5035                   && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
5036                 {
5037                   _bfd_error_handler
5038                     /* xgettext:c-format */
5039                     (_("%pB: undefined reference to symbol '%s'"),
5040                      old_bfd, name);
5041                   bfd_set_error (bfd_error_missing_dso);
5042                   goto error_free_vers;
5043                 }
5044
5045               elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class)
5046                 (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED);
5047
5048               add_needed = TRUE;
5049               ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
5050               if (ret < 0)
5051                 goto error_free_vers;
5052
5053               BFD_ASSERT (ret == 0);
5054             }
5055         }
5056     }
5057
5058   if (info->lto_plugin_active
5059       && !bfd_link_relocatable (info)
5060       && (abfd->flags & BFD_PLUGIN) == 0
5061       && !just_syms
5062       && extsymcount)
5063     {
5064       int r_sym_shift;
5065
5066       if (bed->s->arch_size == 32)
5067         r_sym_shift = 8;
5068       else
5069         r_sym_shift = 32;
5070
5071       /* If linker plugin is enabled, set non_ir_ref_regular on symbols
5072          referenced in regular objects so that linker plugin will get
5073          the correct symbol resolution.  */
5074
5075       sym_hash = elf_sym_hashes (abfd);
5076       for (s = abfd->sections; s != NULL; s = s->next)
5077         {
5078           Elf_Internal_Rela *internal_relocs;
5079           Elf_Internal_Rela *rel, *relend;
5080
5081           /* Don't check relocations in excluded sections.  */
5082           if ((s->flags & SEC_RELOC) == 0
5083               || s->reloc_count == 0
5084               || (s->flags & SEC_EXCLUDE) != 0
5085               || ((info->strip == strip_all
5086                    || info->strip == strip_debugger)
5087                   && (s->flags & SEC_DEBUGGING) != 0))
5088             continue;
5089
5090           internal_relocs = _bfd_elf_link_read_relocs (abfd, s, NULL,
5091                                                        NULL,
5092                                                        info->keep_memory);
5093           if (internal_relocs == NULL)
5094             goto error_free_vers;
5095
5096           rel = internal_relocs;
5097           relend = rel + s->reloc_count;
5098           for ( ; rel < relend; rel++)
5099             {
5100               unsigned long r_symndx = rel->r_info >> r_sym_shift;
5101               struct elf_link_hash_entry *h;
5102
5103               /* Skip local symbols.  */
5104               if (r_symndx < extsymoff)
5105                 continue;
5106
5107               h = sym_hash[r_symndx - extsymoff];
5108               if (h != NULL)
5109                 h->root.non_ir_ref_regular = 1;
5110             }
5111
5112           if (elf_section_data (s)->relocs != internal_relocs)
5113             free (internal_relocs);
5114         }
5115     }
5116
5117   if (extversym != NULL)
5118     {
5119       free (extversym);
5120       extversym = NULL;
5121     }
5122
5123   if (isymbuf != NULL)
5124     {
5125       free (isymbuf);
5126       isymbuf = NULL;
5127     }
5128
5129   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
5130     {
5131       unsigned int i;
5132
5133       /* Restore the symbol table.  */
5134       old_ent = (char *) old_tab + tabsize;
5135       memset (elf_sym_hashes (abfd), 0,
5136               extsymcount * sizeof (struct elf_link_hash_entry *));
5137       htab->root.table.table = old_table;
5138       htab->root.table.size = old_size;
5139       htab->root.table.count = old_count;
5140       memcpy (htab->root.table.table, old_tab, tabsize);
5141       htab->root.undefs = old_undefs;
5142       htab->root.undefs_tail = old_undefs_tail;
5143       _bfd_elf_strtab_restore (htab->dynstr, old_strtab);
5144       free (old_strtab);
5145       old_strtab = NULL;
5146       for (i = 0; i < htab->root.table.size; i++)
5147         {
5148           struct bfd_hash_entry *p;
5149           struct elf_link_hash_entry *h;
5150           bfd_size_type size;
5151           unsigned int alignment_power;
5152           unsigned int non_ir_ref_dynamic;
5153
5154           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
5155             {
5156               h = (struct elf_link_hash_entry *) p;
5157               if (h->root.type == bfd_link_hash_warning)
5158                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
5159
5160               /* Preserve the maximum alignment and size for common
5161                  symbols even if this dynamic lib isn't on DT_NEEDED
5162                  since it can still be loaded at run time by another
5163                  dynamic lib.  */
5164               if (h->root.type == bfd_link_hash_common)
5165                 {
5166                   size = h->root.u.c.size;
5167                   alignment_power = h->root.u.c.p->alignment_power;
5168                 }
5169               else
5170                 {
5171                   size = 0;
5172                   alignment_power = 0;
5173                 }
5174               /* Preserve non_ir_ref_dynamic so that this symbol
5175                  will be exported when the dynamic lib becomes needed
5176                  in the second pass.  */
5177               non_ir_ref_dynamic = h->root.non_ir_ref_dynamic;
5178               memcpy (p, old_ent, htab->root.table.entsize);
5179               old_ent = (char *) old_ent + htab->root.table.entsize;
5180               h = (struct elf_link_hash_entry *) p;
5181               if (h->root.type == bfd_link_hash_warning)
5182                 {
5183                   memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
5184                   old_ent = (char *) old_ent + htab->root.table.entsize;
5185                   h = (struct elf_link_hash_entry *) h->root.u.i.link;
5186                 }
5187               if (h->root.type == bfd_link_hash_common)
5188                 {
5189                   if (size > h->root.u.c.size)
5190                     h->root.u.c.size = size;
5191                   if (alignment_power > h->root.u.c.p->alignment_power)
5192                     h->root.u.c.p->alignment_power = alignment_power;
5193                 }
5194               h->root.non_ir_ref_dynamic = non_ir_ref_dynamic;
5195             }
5196         }
5197
5198       /* Make a special call to the linker "notice" function to
5199          tell it that symbols added for crefs may need to be removed.  */
5200       if (!(*bed->notice_as_needed) (abfd, info, notice_not_needed))
5201         goto error_free_vers;
5202
5203       free (old_tab);
5204       objalloc_free_block ((struct objalloc *) htab->root.table.memory,
5205                            alloc_mark);
5206       if (nondeflt_vers != NULL)
5207         free (nondeflt_vers);
5208       return TRUE;
5209     }
5210
5211   if (old_tab != NULL)
5212     {
5213       if (!(*bed->notice_as_needed) (abfd, info, notice_needed))
5214         goto error_free_vers;
5215       free (old_tab);
5216       old_tab = NULL;
5217     }
5218
5219   /* Now that all the symbols from this input file are created, if
5220      not performing a relocatable link, handle .symver foo, foo@BAR
5221      such that any relocs against foo become foo@BAR.  */
5222   if (!bfd_link_relocatable (info) && nondeflt_vers != NULL)
5223     {
5224       size_t cnt, symidx;
5225
5226       for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
5227         {
5228           struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
5229           char *shortname, *p;
5230
5231           p = strchr (h->root.root.string, ELF_VER_CHR);
5232           if (p == NULL
5233               || (h->root.type != bfd_link_hash_defined
5234                   && h->root.type != bfd_link_hash_defweak))
5235             continue;
5236
5237           amt = p - h->root.root.string;
5238           shortname = (char *) bfd_malloc (amt + 1);
5239           if (!shortname)
5240             goto error_free_vers;
5241           memcpy (shortname, h->root.root.string, amt);
5242           shortname[amt] = '\0';
5243
5244           hi = (struct elf_link_hash_entry *)
5245                bfd_link_hash_lookup (&htab->root, shortname,
5246                                      FALSE, FALSE, FALSE);
5247           if (hi != NULL
5248               && hi->root.type == h->root.type
5249               && hi->root.u.def.value == h->root.u.def.value
5250               && hi->root.u.def.section == h->root.u.def.section)
5251             {
5252               (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
5253               hi->root.type = bfd_link_hash_indirect;
5254               hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
5255               (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
5256               sym_hash = elf_sym_hashes (abfd);
5257               if (sym_hash)
5258                 for (symidx = 0; symidx < extsymcount; ++symidx)
5259                   if (sym_hash[symidx] == hi)
5260                     {
5261                       sym_hash[symidx] = h;
5262                       break;
5263                     }
5264             }
5265           free (shortname);
5266         }
5267       free (nondeflt_vers);
5268       nondeflt_vers = NULL;
5269     }
5270
5271   /* Now set the alias field correctly for all the weak defined
5272      symbols we found.  The only way to do this is to search all the
5273      symbols.  Since we only need the information for non functions in
5274      dynamic objects, that's the only time we actually put anything on
5275      the list WEAKS.  We need this information so that if a regular
5276      object refers to a symbol defined weakly in a dynamic object, the
5277      real symbol in the dynamic object is also put in the dynamic
5278      symbols; we also must arrange for both symbols to point to the
5279      same memory location.  We could handle the general case of symbol
5280      aliasing, but a general symbol alias can only be generated in
5281      assembler code, handling it correctly would be very time
5282      consuming, and other ELF linkers don't handle general aliasing
5283      either.  */
5284   if (weaks != NULL)
5285     {
5286       struct elf_link_hash_entry **hpp;
5287       struct elf_link_hash_entry **hppend;
5288       struct elf_link_hash_entry **sorted_sym_hash;
5289       struct elf_link_hash_entry *h;
5290       size_t sym_count;
5291
5292       /* Since we have to search the whole symbol list for each weak
5293          defined symbol, search time for N weak defined symbols will be
5294          O(N^2). Binary search will cut it down to O(NlogN).  */
5295       amt = extsymcount;
5296       amt *= sizeof (struct elf_link_hash_entry *);
5297       sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt);
5298       if (sorted_sym_hash == NULL)
5299         goto error_return;
5300       sym_hash = sorted_sym_hash;
5301       hpp = elf_sym_hashes (abfd);
5302       hppend = hpp + extsymcount;
5303       sym_count = 0;
5304       for (; hpp < hppend; hpp++)
5305         {
5306           h = *hpp;
5307           if (h != NULL
5308               && h->root.type == bfd_link_hash_defined
5309               && !bed->is_function_type (h->type))
5310             {
5311               *sym_hash = h;
5312               sym_hash++;
5313               sym_count++;
5314             }
5315         }
5316
5317       qsort (sorted_sym_hash, sym_count,
5318              sizeof (struct elf_link_hash_entry *),
5319              elf_sort_symbol);
5320
5321       while (weaks != NULL)
5322         {
5323           struct elf_link_hash_entry *hlook;
5324           asection *slook;
5325           bfd_vma vlook;
5326           size_t i, j, idx = 0;
5327
5328           hlook = weaks;
5329           weaks = hlook->u.alias;
5330           hlook->u.alias = NULL;
5331
5332           if (hlook->root.type != bfd_link_hash_defined
5333               && hlook->root.type != bfd_link_hash_defweak)
5334             continue;
5335
5336           slook = hlook->root.u.def.section;
5337           vlook = hlook->root.u.def.value;
5338
5339           i = 0;
5340           j = sym_count;
5341           while (i != j)
5342             {
5343               bfd_signed_vma vdiff;
5344               idx = (i + j) / 2;
5345               h = sorted_sym_hash[idx];
5346               vdiff = vlook - h->root.u.def.value;
5347               if (vdiff < 0)
5348                 j = idx;
5349               else if (vdiff > 0)
5350                 i = idx + 1;
5351               else
5352                 {
5353                   int sdiff = slook->id - h->root.u.def.section->id;
5354                   if (sdiff < 0)
5355                     j = idx;
5356                   else if (sdiff > 0)
5357                     i = idx + 1;
5358                   else
5359                     break;
5360                 }
5361             }
5362
5363           /* We didn't find a value/section match.  */
5364           if (i == j)
5365             continue;
5366
5367           /* With multiple aliases, or when the weak symbol is already
5368              strongly defined, we have multiple matching symbols and
5369              the binary search above may land on any of them.  Step
5370              one past the matching symbol(s).  */
5371           while (++idx != j)
5372             {
5373               h = sorted_sym_hash[idx];
5374               if (h->root.u.def.section != slook
5375                   || h->root.u.def.value != vlook)
5376                 break;
5377             }
5378
5379           /* Now look back over the aliases.  Since we sorted by size
5380              as well as value and section, we'll choose the one with
5381              the largest size.  */
5382           while (idx-- != i)
5383             {
5384               h = sorted_sym_hash[idx];
5385
5386               /* Stop if value or section doesn't match.  */
5387               if (h->root.u.def.section != slook
5388                   || h->root.u.def.value != vlook)
5389                 break;
5390               else if (h != hlook)
5391                 {
5392                   struct elf_link_hash_entry *t;
5393
5394                   hlook->u.alias = h;
5395                   hlook->is_weakalias = 1;
5396                   t = h;
5397                   if (t->u.alias != NULL)
5398                     while (t->u.alias != h)
5399                       t = t->u.alias;
5400                   t->u.alias = hlook;
5401
5402                   /* If the weak definition is in the list of dynamic
5403                      symbols, make sure the real definition is put
5404                      there as well.  */
5405                   if (hlook->dynindx != -1 && h->dynindx == -1)
5406                     {
5407                       if (! bfd_elf_link_record_dynamic_symbol (info, h))
5408                         {
5409                         err_free_sym_hash:
5410                           free (sorted_sym_hash);
5411                           goto error_return;
5412                         }
5413                     }
5414
5415                   /* If the real definition is in the list of dynamic
5416                      symbols, make sure the weak definition is put
5417                      there as well.  If we don't do this, then the
5418                      dynamic loader might not merge the entries for the
5419                      real definition and the weak definition.  */
5420                   if (h->dynindx != -1 && hlook->dynindx == -1)
5421                     {
5422                       if (! bfd_elf_link_record_dynamic_symbol (info, hlook))
5423                         goto err_free_sym_hash;
5424                     }
5425                   break;
5426                 }
5427             }
5428         }
5429
5430       free (sorted_sym_hash);
5431     }
5432
5433   if (bed->check_directives
5434       && !(*bed->check_directives) (abfd, info))
5435     return FALSE;
5436
5437   /* If this is a non-traditional link, try to optimize the handling
5438      of the .stab/.stabstr sections.  */
5439   if (! dynamic
5440       && ! info->traditional_format
5441       && is_elf_hash_table (htab)
5442       && (info->strip != strip_all && info->strip != strip_debugger))
5443     {
5444       asection *stabstr;
5445
5446       stabstr = bfd_get_section_by_name (abfd, ".stabstr");
5447       if (stabstr != NULL)
5448         {
5449           bfd_size_type string_offset = 0;
5450           asection *stab;
5451
5452           for (stab = abfd->sections; stab; stab = stab->next)
5453             if (CONST_STRNEQ (stab->name, ".stab")
5454                 && (!stab->name[5] ||
5455                     (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
5456                 && (stab->flags & SEC_MERGE) == 0
5457                 && !bfd_is_abs_section (stab->output_section))
5458               {
5459                 struct bfd_elf_section_data *secdata;
5460
5461                 secdata = elf_section_data (stab);
5462                 if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab,
5463                                                stabstr, &secdata->sec_info,
5464                                                &string_offset))
5465                   goto error_return;
5466                 if (secdata->sec_info)
5467                   stab->sec_info_type = SEC_INFO_TYPE_STABS;
5468             }
5469         }
5470     }
5471
5472   if (is_elf_hash_table (htab) && add_needed)
5473     {
5474       /* Add this bfd to the loaded list.  */
5475       struct elf_link_loaded_list *n;
5476
5477       n = (struct elf_link_loaded_list *) bfd_alloc (abfd, sizeof (*n));
5478       if (n == NULL)
5479         goto error_return;
5480       n->abfd = abfd;
5481       n->next = htab->loaded;
5482       htab->loaded = n;
5483     }
5484
5485   return TRUE;
5486
5487  error_free_vers:
5488   if (old_tab != NULL)
5489     free (old_tab);
5490   if (old_strtab != NULL)
5491     free (old_strtab);
5492   if (nondeflt_vers != NULL)
5493     free (nondeflt_vers);
5494   if (extversym != NULL)
5495     free (extversym);
5496  error_free_sym:
5497   if (isymbuf != NULL)
5498     free (isymbuf);
5499  error_return:
5500   return FALSE;
5501 }
5502
5503 /* Return the linker hash table entry of a symbol that might be
5504    satisfied by an archive symbol.  Return -1 on error.  */
5505
5506 struct elf_link_hash_entry *
5507 _bfd_elf_archive_symbol_lookup (bfd *abfd,
5508                                 struct bfd_link_info *info,
5509                                 const char *name)
5510 {
5511   struct elf_link_hash_entry *h;
5512   char *p, *copy;
5513   size_t len, first;
5514
5515   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, TRUE);
5516   if (h != NULL)
5517     return h;
5518
5519   /* If this is a default version (the name contains @@), look up the
5520      symbol again with only one `@' as well as without the version.
5521      The effect is that references to the symbol with and without the
5522      version will be matched by the default symbol in the archive.  */
5523
5524   p = strchr (name, ELF_VER_CHR);
5525   if (p == NULL || p[1] != ELF_VER_CHR)
5526     return h;
5527
5528   /* First check with only one `@'.  */
5529   len = strlen (name);
5530   copy = (char *) bfd_alloc (abfd, len);
5531   if (copy == NULL)
5532     return (struct elf_link_hash_entry *) -1;
5533
5534   first = p - name + 1;
5535   memcpy (copy, name, first);
5536   memcpy (copy + first, name + first + 1, len - first);
5537
5538   h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, TRUE);
5539   if (h == NULL)
5540     {
5541       /* We also need to check references to the symbol without the
5542          version.  */
5543       copy[first - 1] = '\0';
5544       h = elf_link_hash_lookup (elf_hash_table (info), copy,
5545                                 FALSE, FALSE, TRUE);
5546     }
5547
5548   bfd_release (abfd, copy);
5549   return h;
5550 }
5551
5552 /* Add symbols from an ELF archive file to the linker hash table.  We
5553    don't use _bfd_generic_link_add_archive_symbols because we need to
5554    handle versioned symbols.
5555
5556    Fortunately, ELF archive handling is simpler than that done by
5557    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
5558    oddities.  In ELF, if we find a symbol in the archive map, and the
5559    symbol is currently undefined, we know that we must pull in that
5560    object file.
5561
5562    Unfortunately, we do have to make multiple passes over the symbol
5563    table until nothing further is resolved.  */
5564
5565 static bfd_boolean
5566 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
5567 {
5568   symindex c;
5569   unsigned char *included = NULL;
5570   carsym *symdefs;
5571   bfd_boolean loop;
5572   bfd_size_type amt;
5573   const struct elf_backend_data *bed;
5574   struct elf_link_hash_entry * (*archive_symbol_lookup)
5575     (bfd *, struct bfd_link_info *, const char *);
5576
5577   if (! bfd_has_map (abfd))
5578     {
5579       /* An empty archive is a special case.  */
5580       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
5581         return TRUE;
5582       bfd_set_error (bfd_error_no_armap);
5583       return FALSE;
5584     }
5585
5586   /* Keep track of all symbols we know to be already defined, and all
5587      files we know to be already included.  This is to speed up the
5588      second and subsequent passes.  */
5589   c = bfd_ardata (abfd)->symdef_count;
5590   if (c == 0)
5591     return TRUE;
5592   amt = c;
5593   amt *= sizeof (*included);
5594   included = (unsigned char *) bfd_zmalloc (amt);
5595   if (included == NULL)
5596     return FALSE;
5597
5598   symdefs = bfd_ardata (abfd)->symdefs;
5599   bed = get_elf_backend_data (abfd);
5600   archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup;
5601
5602   do
5603     {
5604       file_ptr last;
5605       symindex i;
5606       carsym *symdef;
5607       carsym *symdefend;
5608
5609       loop = FALSE;
5610       last = -1;
5611
5612       symdef = symdefs;
5613       symdefend = symdef + c;
5614       for (i = 0; symdef < symdefend; symdef++, i++)
5615         {
5616           struct elf_link_hash_entry *h;
5617           bfd *element;
5618           struct bfd_link_hash_entry *undefs_tail;
5619           symindex mark;
5620
5621           if (included[i])
5622             continue;
5623           if (symdef->file_offset == last)
5624             {
5625               included[i] = TRUE;
5626               continue;
5627             }
5628
5629           h = archive_symbol_lookup (abfd, info, symdef->name);
5630           if (h == (struct elf_link_hash_entry *) -1)
5631             goto error_return;
5632
5633           if (h == NULL)
5634             continue;
5635
5636           if (h->root.type == bfd_link_hash_common)
5637             {
5638               /* We currently have a common symbol.  The archive map contains
5639                  a reference to this symbol, so we may want to include it.  We
5640                  only want to include it however, if this archive element
5641                  contains a definition of the symbol, not just another common
5642                  declaration of it.
5643
5644                  Unfortunately some archivers (including GNU ar) will put
5645                  declarations of common symbols into their archive maps, as
5646                  well as real definitions, so we cannot just go by the archive
5647                  map alone.  Instead we must read in the element's symbol
5648                  table and check that to see what kind of symbol definition
5649                  this is.  */
5650               if (! elf_link_is_defined_archive_symbol (abfd, symdef))
5651                 continue;
5652             }
5653           else if (h->root.type != bfd_link_hash_undefined)
5654             {
5655               if (h->root.type != bfd_link_hash_undefweak)
5656                 /* Symbol must be defined.  Don't check it again.  */
5657                 included[i] = TRUE;
5658               continue;
5659             }
5660
5661           /* We need to include this archive member.  */
5662           element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
5663           if (element == NULL)
5664             goto error_return;
5665
5666           if (! bfd_check_format (element, bfd_object))
5667             goto error_return;
5668
5669           undefs_tail = info->hash->undefs_tail;
5670
5671           if (!(*info->callbacks
5672                 ->add_archive_element) (info, element, symdef->name, &element))
5673             continue;
5674           if (!bfd_link_add_symbols (element, info))
5675             goto error_return;
5676
5677           /* If there are any new undefined symbols, we need to make
5678              another pass through the archive in order to see whether
5679              they can be defined.  FIXME: This isn't perfect, because
5680              common symbols wind up on undefs_tail and because an
5681              undefined symbol which is defined later on in this pass
5682              does not require another pass.  This isn't a bug, but it
5683              does make the code less efficient than it could be.  */
5684           if (undefs_tail != info->hash->undefs_tail)
5685             loop = TRUE;
5686
5687           /* Look backward to mark all symbols from this object file
5688              which we have already seen in this pass.  */
5689           mark = i;
5690           do
5691             {
5692               included[mark] = TRUE;
5693               if (mark == 0)
5694                 break;
5695               --mark;
5696             }
5697           while (symdefs[mark].file_offset == symdef->file_offset);
5698
5699           /* We mark subsequent symbols from this object file as we go
5700              on through the loop.  */
5701           last = symdef->file_offset;
5702         }
5703     }
5704   while (loop);
5705
5706   free (included);
5707
5708   return TRUE;
5709
5710  error_return:
5711   if (included != NULL)
5712     free (included);
5713   return FALSE;
5714 }
5715
5716 /* Given an ELF BFD, add symbols to the global hash table as
5717    appropriate.  */
5718
5719 bfd_boolean
5720 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
5721 {
5722   switch (bfd_get_format (abfd))
5723     {
5724     case bfd_object:
5725       return elf_link_add_object_symbols (abfd, info);
5726     case bfd_archive:
5727       return elf_link_add_archive_symbols (abfd, info);
5728     default:
5729       bfd_set_error (bfd_error_wrong_format);
5730       return FALSE;
5731     }
5732 }
5733 \f
5734 struct hash_codes_info
5735 {
5736   unsigned long *hashcodes;
5737   bfd_boolean error;
5738 };
5739
5740 /* This function will be called though elf_link_hash_traverse to store
5741    all hash value of the exported symbols in an array.  */
5742
5743 static bfd_boolean
5744 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
5745 {
5746   struct hash_codes_info *inf = (struct hash_codes_info *) data;
5747   const char *name;
5748   unsigned long ha;
5749   char *alc = NULL;
5750
5751   /* Ignore indirect symbols.  These are added by the versioning code.  */
5752   if (h->dynindx == -1)
5753     return TRUE;
5754
5755   name = h->root.root.string;
5756   if (h->versioned >= versioned)
5757     {
5758       char *p = strchr (name, ELF_VER_CHR);
5759       if (p != NULL)
5760         {
5761           alc = (char *) bfd_malloc (p - name + 1);
5762           if (alc == NULL)
5763             {
5764               inf->error = TRUE;
5765               return FALSE;
5766             }
5767           memcpy (alc, name, p - name);
5768           alc[p - name] = '\0';
5769           name = alc;
5770         }
5771     }
5772
5773   /* Compute the hash value.  */
5774   ha = bfd_elf_hash (name);
5775
5776   /* Store the found hash value in the array given as the argument.  */
5777   *(inf->hashcodes)++ = ha;
5778
5779   /* And store it in the struct so that we can put it in the hash table
5780      later.  */
5781   h->u.elf_hash_value = ha;
5782
5783   if (alc != NULL)
5784     free (alc);
5785
5786   return TRUE;
5787 }
5788
5789 struct collect_gnu_hash_codes
5790 {
5791   bfd *output_bfd;
5792   const struct elf_backend_data *bed;
5793   unsigned long int nsyms;
5794   unsigned long int maskbits;
5795   unsigned long int *hashcodes;
5796   unsigned long int *hashval;
5797   unsigned long int *indx;
5798   unsigned long int *counts;
5799   bfd_vma *bitmask;
5800   bfd_byte *contents;
5801   long int min_dynindx;
5802   unsigned long int bucketcount;
5803   unsigned long int symindx;
5804   long int local_indx;
5805   long int shift1, shift2;
5806   unsigned long int mask;
5807   bfd_boolean error;
5808 };
5809
5810 /* This function will be called though elf_link_hash_traverse to store
5811    all hash value of the exported symbols in an array.  */
5812
5813 static bfd_boolean
5814 elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data)
5815 {
5816   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5817   const char *name;
5818   unsigned long ha;
5819   char *alc = NULL;
5820
5821   /* Ignore indirect symbols.  These are added by the versioning code.  */
5822   if (h->dynindx == -1)
5823     return TRUE;
5824
5825   /* Ignore also local symbols and undefined symbols.  */
5826   if (! (*s->bed->elf_hash_symbol) (h))
5827     return TRUE;
5828
5829   name = h->root.root.string;
5830   if (h->versioned >= versioned)
5831     {
5832       char *p = strchr (name, ELF_VER_CHR);
5833       if (p != NULL)
5834         {
5835           alc = (char *) bfd_malloc (p - name + 1);
5836           if (alc == NULL)
5837             {
5838               s->error = TRUE;
5839               return FALSE;
5840             }
5841           memcpy (alc, name, p - name);
5842           alc[p - name] = '\0';
5843           name = alc;
5844         }
5845     }
5846
5847   /* Compute the hash value.  */
5848   ha = bfd_elf_gnu_hash (name);
5849
5850   /* Store the found hash value in the array for compute_bucket_count,
5851      and also for .dynsym reordering purposes.  */
5852   s->hashcodes[s->nsyms] = ha;
5853   s->hashval[h->dynindx] = ha;
5854   ++s->nsyms;
5855   if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx)
5856     s->min_dynindx = h->dynindx;
5857
5858   if (alc != NULL)
5859     free (alc);
5860
5861   return TRUE;
5862 }
5863
5864 /* This function will be called though elf_link_hash_traverse to do
5865    final dynaminc symbol renumbering.  */
5866
5867 static bfd_boolean
5868 elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data)
5869 {
5870   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5871   unsigned long int bucket;
5872   unsigned long int val;
5873
5874   /* Ignore indirect symbols.  */
5875   if (h->dynindx == -1)
5876     return TRUE;
5877
5878   /* Ignore also local symbols and undefined symbols.  */
5879   if (! (*s->bed->elf_hash_symbol) (h))
5880     {
5881       if (h->dynindx >= s->min_dynindx)
5882         h->dynindx = s->local_indx++;
5883       return TRUE;
5884     }
5885
5886   bucket = s->hashval[h->dynindx] % s->bucketcount;
5887   val = (s->hashval[h->dynindx] >> s->shift1)
5888         & ((s->maskbits >> s->shift1) - 1);
5889   s->bitmask[val] |= ((bfd_vma) 1) << (s->hashval[h->dynindx] & s->mask);
5890   s->bitmask[val]
5891     |= ((bfd_vma) 1) << ((s->hashval[h->dynindx] >> s->shift2) & s->mask);
5892   val = s->hashval[h->dynindx] & ~(unsigned long int) 1;
5893   if (s->counts[bucket] == 1)
5894     /* Last element terminates the chain.  */
5895     val |= 1;
5896   bfd_put_32 (s->output_bfd, val,
5897               s->contents + (s->indx[bucket] - s->symindx) * 4);
5898   --s->counts[bucket];
5899   h->dynindx = s->indx[bucket]++;
5900   return TRUE;
5901 }
5902
5903 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
5904
5905 bfd_boolean
5906 _bfd_elf_hash_symbol (struct elf_link_hash_entry *h)
5907 {
5908   return !(h->forced_local
5909            || h->root.type == bfd_link_hash_undefined
5910            || h->root.type == bfd_link_hash_undefweak
5911            || ((h->root.type == bfd_link_hash_defined
5912                 || h->root.type == bfd_link_hash_defweak)
5913                && h->root.u.def.section->output_section == NULL));
5914 }
5915
5916 /* Array used to determine the number of hash table buckets to use
5917    based on the number of symbols there are.  If there are fewer than
5918    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
5919    fewer than 37 we use 17 buckets, and so forth.  We never use more
5920    than 32771 buckets.  */
5921
5922 static const size_t elf_buckets[] =
5923 {
5924   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
5925   16411, 32771, 0
5926 };
5927
5928 /* Compute bucket count for hashing table.  We do not use a static set
5929    of possible tables sizes anymore.  Instead we determine for all
5930    possible reasonable sizes of the table the outcome (i.e., the
5931    number of collisions etc) and choose the best solution.  The
5932    weighting functions are not too simple to allow the table to grow
5933    without bounds.  Instead one of the weighting factors is the size.
5934    Therefore the result is always a good payoff between few collisions
5935    (= short chain lengths) and table size.  */
5936 static size_t
5937 compute_bucket_count (struct bfd_link_info *info ATTRIBUTE_UNUSED,
5938                       unsigned long int *hashcodes ATTRIBUTE_UNUSED,
5939                       unsigned long int nsyms,
5940                       int gnu_hash)
5941 {
5942   size_t best_size = 0;
5943   unsigned long int i;
5944
5945   /* We have a problem here.  The following code to optimize the table
5946      size requires an integer type with more the 32 bits.  If
5947      BFD_HOST_U_64_BIT is set we know about such a type.  */
5948 #ifdef BFD_HOST_U_64_BIT
5949   if (info->optimize)
5950     {
5951       size_t minsize;
5952       size_t maxsize;
5953       BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
5954       bfd *dynobj = elf_hash_table (info)->dynobj;
5955       size_t dynsymcount = elf_hash_table (info)->dynsymcount;
5956       const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
5957       unsigned long int *counts;
5958       bfd_size_type amt;
5959       unsigned int no_improvement_count = 0;
5960
5961       /* Possible optimization parameters: if we have NSYMS symbols we say
5962          that the hashing table must at least have NSYMS/4 and at most
5963          2*NSYMS buckets.  */
5964       minsize = nsyms / 4;
5965       if (minsize == 0)
5966         minsize = 1;
5967       best_size = maxsize = nsyms * 2;
5968       if (gnu_hash)
5969         {
5970           if (minsize < 2)
5971             minsize = 2;
5972           if ((best_size & 31) == 0)
5973             ++best_size;
5974         }
5975
5976       /* Create array where we count the collisions in.  We must use bfd_malloc
5977          since the size could be large.  */
5978       amt = maxsize;
5979       amt *= sizeof (unsigned long int);
5980       counts = (unsigned long int *) bfd_malloc (amt);
5981       if (counts == NULL)
5982         return 0;
5983
5984       /* Compute the "optimal" size for the hash table.  The criteria is a
5985          minimal chain length.  The minor criteria is (of course) the size
5986          of the table.  */
5987       for (i = minsize; i < maxsize; ++i)
5988         {
5989           /* Walk through the array of hashcodes and count the collisions.  */
5990           BFD_HOST_U_64_BIT max;
5991           unsigned long int j;
5992           unsigned long int fact;
5993
5994           if (gnu_hash && (i & 31) == 0)
5995             continue;
5996
5997           memset (counts, '\0', i * sizeof (unsigned long int));
5998
5999           /* Determine how often each hash bucket is used.  */
6000           for (j = 0; j < nsyms; ++j)
6001             ++counts[hashcodes[j] % i];
6002
6003           /* For the weight function we need some information about the
6004              pagesize on the target.  This is information need not be 100%
6005              accurate.  Since this information is not available (so far) we
6006              define it here to a reasonable default value.  If it is crucial
6007              to have a better value some day simply define this value.  */
6008 # ifndef BFD_TARGET_PAGESIZE
6009 #  define BFD_TARGET_PAGESIZE   (4096)
6010 # endif
6011
6012           /* We in any case need 2 + DYNSYMCOUNT entries for the size values
6013              and the chains.  */
6014           max = (2 + dynsymcount) * bed->s->sizeof_hash_entry;
6015
6016 # if 1
6017           /* Variant 1: optimize for short chains.  We add the squares
6018              of all the chain lengths (which favors many small chain
6019              over a few long chains).  */
6020           for (j = 0; j < i; ++j)
6021             max += counts[j] * counts[j];
6022
6023           /* This adds penalties for the overall size of the table.  */
6024           fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
6025           max *= fact * fact;
6026 # else
6027           /* Variant 2: Optimize a lot more for small table.  Here we
6028              also add squares of the size but we also add penalties for
6029              empty slots (the +1 term).  */
6030           for (j = 0; j < i; ++j)
6031             max += (1 + counts[j]) * (1 + counts[j]);
6032
6033           /* The overall size of the table is considered, but not as
6034              strong as in variant 1, where it is squared.  */
6035           fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
6036           max *= fact;
6037 # endif
6038
6039           /* Compare with current best results.  */
6040           if (max < best_chlen)
6041             {
6042               best_chlen = max;
6043               best_size = i;
6044               no_improvement_count = 0;
6045             }
6046           /* PR 11843: Avoid futile long searches for the best bucket size
6047              when there are a large number of symbols.  */
6048           else if (++no_improvement_count == 100)
6049             break;
6050         }
6051
6052       free (counts);
6053     }
6054   else
6055 #endif /* defined (BFD_HOST_U_64_BIT) */
6056     {
6057       /* This is the fallback solution if no 64bit type is available or if we
6058          are not supposed to spend much time on optimizations.  We select the
6059          bucket count using a fixed set of numbers.  */
6060       for (i = 0; elf_buckets[i] != 0; i++)
6061         {
6062           best_size = elf_buckets[i];
6063           if (nsyms < elf_buckets[i + 1])
6064             break;
6065         }
6066       if (gnu_hash && best_size < 2)
6067         best_size = 2;
6068     }
6069
6070   return best_size;
6071 }
6072
6073 /* Size any SHT_GROUP section for ld -r.  */
6074
6075 bfd_boolean
6076 _bfd_elf_size_group_sections (struct bfd_link_info *info)
6077 {
6078   bfd *ibfd;
6079   asection *s;
6080
6081   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
6082     if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
6083         && (s = ibfd->sections) != NULL
6084         && s->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
6085         && !_bfd_elf_fixup_group_sections (ibfd, bfd_abs_section_ptr))
6086       return FALSE;
6087   return TRUE;
6088 }
6089
6090 /* Set a default stack segment size.  The value in INFO wins.  If it
6091    is unset, LEGACY_SYMBOL's value is used, and if that symbol is
6092    undefined it is initialized.  */
6093
6094 bfd_boolean
6095 bfd_elf_stack_segment_size (bfd *output_bfd,
6096                             struct bfd_link_info *info,
6097                             const char *legacy_symbol,
6098                             bfd_vma default_size)
6099 {
6100   struct elf_link_hash_entry *h = NULL;
6101
6102   /* Look for legacy symbol.  */
6103   if (legacy_symbol)
6104     h = elf_link_hash_lookup (elf_hash_table (info), legacy_symbol,
6105                               FALSE, FALSE, FALSE);
6106   if (h && (h->root.type == bfd_link_hash_defined
6107             || h->root.type == bfd_link_hash_defweak)
6108       && h->def_regular
6109       && (h->type == STT_NOTYPE || h->type == STT_OBJECT))
6110     {
6111       /* The symbol has no type if specified on the command line.  */
6112       h->type = STT_OBJECT;
6113       if (info->stacksize)
6114         /* xgettext:c-format */
6115         _bfd_error_handler (_("%pB: stack size specified and %s set"),
6116                             output_bfd, legacy_symbol);
6117       else if (h->root.u.def.section != bfd_abs_section_ptr)
6118         /* xgettext:c-format */
6119         _bfd_error_handler (_("%pB: %s not absolute"),
6120                             output_bfd, legacy_symbol);
6121       else
6122         info->stacksize = h->root.u.def.value;
6123     }
6124
6125   if (!info->stacksize)
6126     /* If the user didn't set a size, or explicitly inhibit the
6127        size, set it now.  */
6128     info->stacksize = default_size;
6129
6130   /* Provide the legacy symbol, if it is referenced.  */
6131   if (h && (h->root.type == bfd_link_hash_undefined
6132             || h->root.type == bfd_link_hash_undefweak))
6133     {
6134       struct bfd_link_hash_entry *bh = NULL;
6135
6136       if (!(_bfd_generic_link_add_one_symbol
6137             (info, output_bfd, legacy_symbol,
6138              BSF_GLOBAL, bfd_abs_section_ptr,
6139              info->stacksize >= 0 ? info->stacksize : 0,
6140              NULL, FALSE, get_elf_backend_data (output_bfd)->collect, &bh)))
6141         return FALSE;
6142
6143       h = (struct elf_link_hash_entry *) bh;
6144       h->def_regular = 1;
6145       h->type = STT_OBJECT;
6146     }
6147
6148   return TRUE;
6149 }
6150
6151 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
6152
6153 struct elf_gc_sweep_symbol_info
6154 {
6155   struct bfd_link_info *info;
6156   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
6157                        bfd_boolean);
6158 };
6159
6160 static bfd_boolean
6161 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
6162 {
6163   if (!h->mark
6164       && (((h->root.type == bfd_link_hash_defined
6165             || h->root.type == bfd_link_hash_defweak)
6166            && !((h->def_regular || ELF_COMMON_DEF_P (h))
6167                 && h->root.u.def.section->gc_mark))
6168           || h->root.type == bfd_link_hash_undefined
6169           || h->root.type == bfd_link_hash_undefweak))
6170     {
6171       struct elf_gc_sweep_symbol_info *inf;
6172
6173       inf = (struct elf_gc_sweep_symbol_info *) data;
6174       (*inf->hide_symbol) (inf->info, h, TRUE);
6175       h->def_regular = 0;
6176       h->ref_regular = 0;
6177       h->ref_regular_nonweak = 0;
6178     }
6179
6180   return TRUE;
6181 }
6182
6183 /* Set up the sizes and contents of the ELF dynamic sections.  This is
6184    called by the ELF linker emulation before_allocation routine.  We
6185    must set the sizes of the sections before the linker sets the
6186    addresses of the various sections.  */
6187
6188 bfd_boolean
6189 bfd_elf_size_dynamic_sections (bfd *output_bfd,
6190                                const char *soname,
6191                                const char *rpath,
6192                                const char *filter_shlib,
6193                                const char *audit,
6194                                const char *depaudit,
6195                                const char * const *auxiliary_filters,
6196                                struct bfd_link_info *info,
6197                                asection **sinterpptr)
6198 {
6199   bfd *dynobj;
6200   const struct elf_backend_data *bed;
6201
6202   *sinterpptr = NULL;
6203
6204   if (!is_elf_hash_table (info->hash))
6205     return TRUE;
6206
6207   dynobj = elf_hash_table (info)->dynobj;
6208
6209   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
6210     {
6211       struct bfd_elf_version_tree *verdefs;
6212       struct elf_info_failed asvinfo;
6213       struct bfd_elf_version_tree *t;
6214       struct bfd_elf_version_expr *d;
6215       asection *s;
6216       size_t soname_indx;
6217
6218       /* If we are supposed to export all symbols into the dynamic symbol
6219          table (this is not the normal case), then do so.  */
6220       if (info->export_dynamic
6221           || (bfd_link_executable (info) && info->dynamic))
6222         {
6223           struct elf_info_failed eif;
6224
6225           eif.info = info;
6226           eif.failed = FALSE;
6227           elf_link_hash_traverse (elf_hash_table (info),
6228                                   _bfd_elf_export_symbol,
6229                                   &eif);
6230           if (eif.failed)
6231             return FALSE;
6232         }
6233
6234       if (soname != NULL)
6235         {
6236           soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6237                                              soname, TRUE);
6238           if (soname_indx == (size_t) -1
6239               || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
6240             return FALSE;
6241         }
6242       else
6243         soname_indx = (size_t) -1;
6244
6245       /* Make all global versions with definition.  */
6246       for (t = info->version_info; t != NULL; t = t->next)
6247         for (d = t->globals.list; d != NULL; d = d->next)
6248           if (!d->symver && d->literal)
6249             {
6250               const char *verstr, *name;
6251               size_t namelen, verlen, newlen;
6252               char *newname, *p, leading_char;
6253               struct elf_link_hash_entry *newh;
6254
6255               leading_char = bfd_get_symbol_leading_char (output_bfd);
6256               name = d->pattern;
6257               namelen = strlen (name) + (leading_char != '\0');
6258               verstr = t->name;
6259               verlen = strlen (verstr);
6260               newlen = namelen + verlen + 3;
6261
6262               newname = (char *) bfd_malloc (newlen);
6263               if (newname == NULL)
6264                 return FALSE;
6265               newname[0] = leading_char;
6266               memcpy (newname + (leading_char != '\0'), name, namelen);
6267
6268               /* Check the hidden versioned definition.  */
6269               p = newname + namelen;
6270               *p++ = ELF_VER_CHR;
6271               memcpy (p, verstr, verlen + 1);
6272               newh = elf_link_hash_lookup (elf_hash_table (info),
6273                                            newname, FALSE, FALSE,
6274                                            FALSE);
6275               if (newh == NULL
6276                   || (newh->root.type != bfd_link_hash_defined
6277                       && newh->root.type != bfd_link_hash_defweak))
6278                 {
6279                   /* Check the default versioned definition.  */
6280                   *p++ = ELF_VER_CHR;
6281                   memcpy (p, verstr, verlen + 1);
6282                   newh = elf_link_hash_lookup (elf_hash_table (info),
6283                                                newname, FALSE, FALSE,
6284                                                FALSE);
6285                 }
6286               free (newname);
6287
6288               /* Mark this version if there is a definition and it is
6289                  not defined in a shared object.  */
6290               if (newh != NULL
6291                   && !newh->def_dynamic
6292                   && (newh->root.type == bfd_link_hash_defined
6293                       || newh->root.type == bfd_link_hash_defweak))
6294                 d->symver = 1;
6295             }
6296
6297       /* Attach all the symbols to their version information.  */
6298       asvinfo.info = info;
6299       asvinfo.failed = FALSE;
6300
6301       elf_link_hash_traverse (elf_hash_table (info),
6302                               _bfd_elf_link_assign_sym_version,
6303                               &asvinfo);
6304       if (asvinfo.failed)
6305         return FALSE;
6306
6307       if (!info->allow_undefined_version)
6308         {
6309           /* Check if all global versions have a definition.  */
6310           bfd_boolean all_defined = TRUE;
6311           for (t = info->version_info; t != NULL; t = t->next)
6312             for (d = t->globals.list; d != NULL; d = d->next)
6313               if (d->literal && !d->symver && !d->script)
6314                 {
6315                   _bfd_error_handler
6316                     (_("%s: undefined version: %s"),
6317                      d->pattern, t->name);
6318                   all_defined = FALSE;
6319                 }
6320
6321           if (!all_defined)
6322             {
6323               bfd_set_error (bfd_error_bad_value);
6324               return FALSE;
6325             }
6326         }
6327
6328       /* Set up the version definition section.  */
6329       s = bfd_get_linker_section (dynobj, ".gnu.version_d");
6330       BFD_ASSERT (s != NULL);
6331
6332       /* We may have created additional version definitions if we are
6333          just linking a regular application.  */
6334       verdefs = info->version_info;
6335
6336       /* Skip anonymous version tag.  */
6337       if (verdefs != NULL && verdefs->vernum == 0)
6338         verdefs = verdefs->next;
6339
6340       if (verdefs == NULL && !info->create_default_symver)
6341         s->flags |= SEC_EXCLUDE;
6342       else
6343         {
6344           unsigned int cdefs;
6345           bfd_size_type size;
6346           bfd_byte *p;
6347           Elf_Internal_Verdef def;
6348           Elf_Internal_Verdaux defaux;
6349           struct bfd_link_hash_entry *bh;
6350           struct elf_link_hash_entry *h;
6351           const char *name;
6352
6353           cdefs = 0;
6354           size = 0;
6355
6356           /* Make space for the base version.  */
6357           size += sizeof (Elf_External_Verdef);
6358           size += sizeof (Elf_External_Verdaux);
6359           ++cdefs;
6360
6361           /* Make space for the default version.  */
6362           if (info->create_default_symver)
6363             {
6364               size += sizeof (Elf_External_Verdef);
6365               ++cdefs;
6366             }
6367
6368           for (t = verdefs; t != NULL; t = t->next)
6369             {
6370               struct bfd_elf_version_deps *n;
6371
6372               /* Don't emit base version twice.  */
6373               if (t->vernum == 0)
6374                 continue;
6375
6376               size += sizeof (Elf_External_Verdef);
6377               size += sizeof (Elf_External_Verdaux);
6378               ++cdefs;
6379
6380               for (n = t->deps; n != NULL; n = n->next)
6381                 size += sizeof (Elf_External_Verdaux);
6382             }
6383
6384           s->size = size;
6385           s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6386           if (s->contents == NULL && s->size != 0)
6387             return FALSE;
6388
6389           /* Fill in the version definition section.  */
6390
6391           p = s->contents;
6392
6393           def.vd_version = VER_DEF_CURRENT;
6394           def.vd_flags = VER_FLG_BASE;
6395           def.vd_ndx = 1;
6396           def.vd_cnt = 1;
6397           if (info->create_default_symver)
6398             {
6399               def.vd_aux = 2 * sizeof (Elf_External_Verdef);
6400               def.vd_next = sizeof (Elf_External_Verdef);
6401             }
6402           else
6403             {
6404               def.vd_aux = sizeof (Elf_External_Verdef);
6405               def.vd_next = (sizeof (Elf_External_Verdef)
6406                              + sizeof (Elf_External_Verdaux));
6407             }
6408
6409           if (soname_indx != (size_t) -1)
6410             {
6411               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6412                                       soname_indx);
6413               def.vd_hash = bfd_elf_hash (soname);
6414               defaux.vda_name = soname_indx;
6415               name = soname;
6416             }
6417           else
6418             {
6419               size_t indx;
6420
6421               name = lbasename (output_bfd->filename);
6422               def.vd_hash = bfd_elf_hash (name);
6423               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6424                                           name, FALSE);
6425               if (indx == (size_t) -1)
6426                 return FALSE;
6427               defaux.vda_name = indx;
6428             }
6429           defaux.vda_next = 0;
6430
6431           _bfd_elf_swap_verdef_out (output_bfd, &def,
6432                                     (Elf_External_Verdef *) p);
6433           p += sizeof (Elf_External_Verdef);
6434           if (info->create_default_symver)
6435             {
6436               /* Add a symbol representing this version.  */
6437               bh = NULL;
6438               if (! (_bfd_generic_link_add_one_symbol
6439                      (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
6440                       0, NULL, FALSE,
6441                       get_elf_backend_data (dynobj)->collect, &bh)))
6442                 return FALSE;
6443               h = (struct elf_link_hash_entry *) bh;
6444               h->non_elf = 0;
6445               h->def_regular = 1;
6446               h->type = STT_OBJECT;
6447               h->verinfo.vertree = NULL;
6448
6449               if (! bfd_elf_link_record_dynamic_symbol (info, h))
6450                 return FALSE;
6451
6452               /* Create a duplicate of the base version with the same
6453                  aux block, but different flags.  */
6454               def.vd_flags = 0;
6455               def.vd_ndx = 2;
6456               def.vd_aux = sizeof (Elf_External_Verdef);
6457               if (verdefs)
6458                 def.vd_next = (sizeof (Elf_External_Verdef)
6459                                + sizeof (Elf_External_Verdaux));
6460               else
6461                 def.vd_next = 0;
6462               _bfd_elf_swap_verdef_out (output_bfd, &def,
6463                                         (Elf_External_Verdef *) p);
6464               p += sizeof (Elf_External_Verdef);
6465             }
6466           _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6467                                      (Elf_External_Verdaux *) p);
6468           p += sizeof (Elf_External_Verdaux);
6469
6470           for (t = verdefs; t != NULL; t = t->next)
6471             {
6472               unsigned int cdeps;
6473               struct bfd_elf_version_deps *n;
6474
6475               /* Don't emit the base version twice.  */
6476               if (t->vernum == 0)
6477                 continue;
6478
6479               cdeps = 0;
6480               for (n = t->deps; n != NULL; n = n->next)
6481                 ++cdeps;
6482
6483               /* Add a symbol representing this version.  */
6484               bh = NULL;
6485               if (! (_bfd_generic_link_add_one_symbol
6486                      (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
6487                       0, NULL, FALSE,
6488                       get_elf_backend_data (dynobj)->collect, &bh)))
6489                 return FALSE;
6490               h = (struct elf_link_hash_entry *) bh;
6491               h->non_elf = 0;
6492               h->def_regular = 1;
6493               h->type = STT_OBJECT;
6494               h->verinfo.vertree = t;
6495
6496               if (! bfd_elf_link_record_dynamic_symbol (info, h))
6497                 return FALSE;
6498
6499               def.vd_version = VER_DEF_CURRENT;
6500               def.vd_flags = 0;
6501               if (t->globals.list == NULL
6502                   && t->locals.list == NULL
6503                   && ! t->used)
6504                 def.vd_flags |= VER_FLG_WEAK;
6505               def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1);
6506               def.vd_cnt = cdeps + 1;
6507               def.vd_hash = bfd_elf_hash (t->name);
6508               def.vd_aux = sizeof (Elf_External_Verdef);
6509               def.vd_next = 0;
6510
6511               /* If a basever node is next, it *must* be the last node in
6512                  the chain, otherwise Verdef construction breaks.  */
6513               if (t->next != NULL && t->next->vernum == 0)
6514                 BFD_ASSERT (t->next->next == NULL);
6515
6516               if (t->next != NULL && t->next->vernum != 0)
6517                 def.vd_next = (sizeof (Elf_External_Verdef)
6518                                + (cdeps + 1) * sizeof (Elf_External_Verdaux));
6519
6520               _bfd_elf_swap_verdef_out (output_bfd, &def,
6521                                         (Elf_External_Verdef *) p);
6522               p += sizeof (Elf_External_Verdef);
6523
6524               defaux.vda_name = h->dynstr_index;
6525               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6526                                       h->dynstr_index);
6527               defaux.vda_next = 0;
6528               if (t->deps != NULL)
6529                 defaux.vda_next = sizeof (Elf_External_Verdaux);
6530               t->name_indx = defaux.vda_name;
6531
6532               _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6533                                          (Elf_External_Verdaux *) p);
6534               p += sizeof (Elf_External_Verdaux);
6535
6536               for (n = t->deps; n != NULL; n = n->next)
6537                 {
6538                   if (n->version_needed == NULL)
6539                     {
6540                       /* This can happen if there was an error in the
6541                          version script.  */
6542                       defaux.vda_name = 0;
6543                     }
6544                   else
6545                     {
6546                       defaux.vda_name = n->version_needed->name_indx;
6547                       _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6548                                               defaux.vda_name);
6549                     }
6550                   if (n->next == NULL)
6551                     defaux.vda_next = 0;
6552                   else
6553                     defaux.vda_next = sizeof (Elf_External_Verdaux);
6554
6555                   _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6556                                              (Elf_External_Verdaux *) p);
6557                   p += sizeof (Elf_External_Verdaux);
6558                 }
6559             }
6560
6561           elf_tdata (output_bfd)->cverdefs = cdefs;
6562         }
6563     }
6564
6565   bed = get_elf_backend_data (output_bfd);
6566
6567   if (info->gc_sections && bed->can_gc_sections)
6568     {
6569       struct elf_gc_sweep_symbol_info sweep_info;
6570
6571       /* Remove the symbols that were in the swept sections from the
6572          dynamic symbol table.  */
6573       sweep_info.info = info;
6574       sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
6575       elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
6576                               &sweep_info);
6577     }
6578
6579   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
6580     {
6581       asection *s;
6582       struct elf_find_verdep_info sinfo;
6583
6584       /* Work out the size of the version reference section.  */
6585
6586       s = bfd_get_linker_section (dynobj, ".gnu.version_r");
6587       BFD_ASSERT (s != NULL);
6588
6589       sinfo.info = info;
6590       sinfo.vers = elf_tdata (output_bfd)->cverdefs;
6591       if (sinfo.vers == 0)
6592         sinfo.vers = 1;
6593       sinfo.failed = FALSE;
6594
6595       elf_link_hash_traverse (elf_hash_table (info),
6596                               _bfd_elf_link_find_version_dependencies,
6597                               &sinfo);
6598       if (sinfo.failed)
6599         return FALSE;
6600
6601       if (elf_tdata (output_bfd)->verref == NULL)
6602         s->flags |= SEC_EXCLUDE;
6603       else
6604         {
6605           Elf_Internal_Verneed *vn;
6606           unsigned int size;
6607           unsigned int crefs;
6608           bfd_byte *p;
6609
6610           /* Build the version dependency section.  */
6611           size = 0;
6612           crefs = 0;
6613           for (vn = elf_tdata (output_bfd)->verref;
6614                vn != NULL;
6615                vn = vn->vn_nextref)
6616             {
6617               Elf_Internal_Vernaux *a;
6618
6619               size += sizeof (Elf_External_Verneed);
6620               ++crefs;
6621               for (a = vn->vn_auxptr; a != NULL; a = a->vna_nextptr)
6622                 size += sizeof (Elf_External_Vernaux);
6623             }
6624
6625           s->size = size;
6626           s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6627           if (s->contents == NULL)
6628             return FALSE;
6629
6630           p = s->contents;
6631           for (vn = elf_tdata (output_bfd)->verref;
6632                vn != NULL;
6633                vn = vn->vn_nextref)
6634             {
6635               unsigned int caux;
6636               Elf_Internal_Vernaux *a;
6637               size_t indx;
6638
6639               caux = 0;
6640               for (a = vn->vn_auxptr; a != NULL; a = a->vna_nextptr)
6641                 ++caux;
6642
6643               vn->vn_version = VER_NEED_CURRENT;
6644               vn->vn_cnt = caux;
6645               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6646                                           elf_dt_name (vn->vn_bfd) != NULL
6647                                           ? elf_dt_name (vn->vn_bfd)
6648                                           : lbasename (vn->vn_bfd->filename),
6649                                           FALSE);
6650               if (indx == (size_t) -1)
6651                 return FALSE;
6652               vn->vn_file = indx;
6653               vn->vn_aux = sizeof (Elf_External_Verneed);
6654               if (vn->vn_nextref == NULL)
6655                 vn->vn_next = 0;
6656               else
6657                 vn->vn_next = (sizeof (Elf_External_Verneed)
6658                                + caux * sizeof (Elf_External_Vernaux));
6659
6660               _bfd_elf_swap_verneed_out (output_bfd, vn,
6661                                          (Elf_External_Verneed *) p);
6662               p += sizeof (Elf_External_Verneed);
6663
6664               for (a = vn->vn_auxptr; a != NULL; a = a->vna_nextptr)
6665                 {
6666                   a->vna_hash = bfd_elf_hash (a->vna_nodename);
6667                   indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6668                                               a->vna_nodename, FALSE);
6669                   if (indx == (size_t) -1)
6670                     return FALSE;
6671                   a->vna_name = indx;
6672                   if (a->vna_nextptr == NULL)
6673                     a->vna_next = 0;
6674                   else
6675                     a->vna_next = sizeof (Elf_External_Vernaux);
6676
6677                   _bfd_elf_swap_vernaux_out (output_bfd, a,
6678                                              (Elf_External_Vernaux *) p);
6679                   p += sizeof (Elf_External_Vernaux);
6680                 }
6681             }
6682
6683           elf_tdata (output_bfd)->cverrefs = crefs;
6684         }
6685     }
6686
6687   /* Any syms created from now on start with -1 in
6688      got.refcount/offset and plt.refcount/offset.  */
6689   elf_hash_table (info)->init_got_refcount
6690     = elf_hash_table (info)->init_got_offset;
6691   elf_hash_table (info)->init_plt_refcount
6692     = elf_hash_table (info)->init_plt_offset;
6693
6694   if (bfd_link_relocatable (info)
6695       && !_bfd_elf_size_group_sections (info))
6696     return FALSE;
6697
6698   /* The backend may have to create some sections regardless of whether
6699      we're dynamic or not.  */
6700   if (bed->elf_backend_always_size_sections
6701       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
6702     return FALSE;
6703
6704   /* Determine any GNU_STACK segment requirements, after the backend
6705      has had a chance to set a default segment size.  */
6706   if (info->execstack)
6707     elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
6708   else if (info->noexecstack)
6709     elf_stack_flags (output_bfd) = PF_R | PF_W;
6710   else
6711     {
6712       bfd *inputobj;
6713       asection *notesec = NULL;
6714       int exec = 0;
6715
6716       for (inputobj = info->input_bfds;
6717            inputobj;
6718            inputobj = inputobj->link.next)
6719         {
6720           asection *s;
6721
6722           if (inputobj->flags
6723               & (DYNAMIC | EXEC_P | BFD_PLUGIN | BFD_LINKER_CREATED))
6724             continue;
6725           s = inputobj->sections;
6726           if (s == NULL || s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
6727             continue;
6728
6729           s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
6730           if (s)
6731             {
6732               if (s->flags & SEC_CODE)
6733                 exec = PF_X;
6734               notesec = s;
6735             }
6736           else if (bed->default_execstack)
6737             exec = PF_X;
6738         }
6739       if (notesec || info->stacksize > 0)
6740         elf_stack_flags (output_bfd) = PF_R | PF_W | exec;
6741       if (notesec && exec && bfd_link_relocatable (info)
6742           && notesec->output_section != bfd_abs_section_ptr)
6743         notesec->output_section->flags |= SEC_CODE;
6744     }
6745
6746   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
6747     {
6748       struct elf_info_failed eif;
6749       struct elf_link_hash_entry *h;
6750       asection *dynstr;
6751       asection *s;
6752
6753       *sinterpptr = bfd_get_linker_section (dynobj, ".interp");
6754       BFD_ASSERT (*sinterpptr != NULL || !bfd_link_executable (info) || info->nointerp);
6755
6756       if (info->symbolic)
6757         {
6758           if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
6759             return FALSE;
6760           info->flags |= DF_SYMBOLIC;
6761         }
6762
6763       if (rpath != NULL)
6764         {
6765           size_t indx;
6766           bfd_vma tag;
6767
6768           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
6769                                       TRUE);
6770           if (indx == (size_t) -1)
6771             return FALSE;
6772
6773           tag = info->new_dtags ? DT_RUNPATH : DT_RPATH;
6774           if (!_bfd_elf_add_dynamic_entry (info, tag, indx))
6775             return FALSE;
6776         }
6777
6778       if (filter_shlib != NULL)
6779         {
6780           size_t indx;
6781
6782           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6783                                       filter_shlib, TRUE);
6784           if (indx == (size_t) -1
6785               || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
6786             return FALSE;
6787         }
6788
6789       if (auxiliary_filters != NULL)
6790         {
6791           const char * const *p;
6792
6793           for (p = auxiliary_filters; *p != NULL; p++)
6794             {
6795               size_t indx;
6796
6797               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6798                                           *p, TRUE);
6799               if (indx == (size_t) -1
6800                   || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
6801                 return FALSE;
6802             }
6803         }
6804
6805       if (audit != NULL)
6806         {
6807           size_t indx;
6808
6809           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit,
6810                                       TRUE);
6811           if (indx == (size_t) -1
6812               || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx))
6813             return FALSE;
6814         }
6815
6816       if (depaudit != NULL)
6817         {
6818           size_t indx;
6819
6820           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit,
6821                                       TRUE);
6822           if (indx == (size_t) -1
6823               || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx))
6824             return FALSE;
6825         }
6826
6827       eif.info = info;
6828       eif.failed = FALSE;
6829
6830       /* Find all symbols which were defined in a dynamic object and make
6831          the backend pick a reasonable value for them.  */
6832       elf_link_hash_traverse (elf_hash_table (info),
6833                               _bfd_elf_adjust_dynamic_symbol,
6834                               &eif);
6835       if (eif.failed)
6836         return FALSE;
6837
6838       /* Add some entries to the .dynamic section.  We fill in some of the
6839          values later, in bfd_elf_final_link, but we must add the entries
6840          now so that we know the final size of the .dynamic section.  */
6841
6842       /* If there are initialization and/or finalization functions to
6843          call then add the corresponding DT_INIT/DT_FINI entries.  */
6844       h = (info->init_function
6845            ? elf_link_hash_lookup (elf_hash_table (info),
6846                                    info->init_function, FALSE,
6847                                    FALSE, FALSE)
6848            : NULL);
6849       if (h != NULL
6850           && (h->ref_regular
6851               || h->def_regular))
6852         {
6853           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
6854             return FALSE;
6855         }
6856       h = (info->fini_function
6857            ? elf_link_hash_lookup (elf_hash_table (info),
6858                                    info->fini_function, FALSE,
6859                                    FALSE, FALSE)
6860            : NULL);
6861       if (h != NULL
6862           && (h->ref_regular
6863               || h->def_regular))
6864         {
6865           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
6866             return FALSE;
6867         }
6868
6869       s = bfd_get_section_by_name (output_bfd, ".preinit_array");
6870       if (s != NULL && s->linker_has_input)
6871         {
6872           /* DT_PREINIT_ARRAY is not allowed in shared library.  */
6873           if (! bfd_link_executable (info))
6874             {
6875               bfd *sub;
6876               asection *o;
6877
6878               for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
6879                 if (bfd_get_flavour (sub) == bfd_target_elf_flavour
6880                     && (o = sub->sections) != NULL
6881                     && o->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
6882                   for (o = sub->sections; o != NULL; o = o->next)
6883                     if (elf_section_data (o)->this_hdr.sh_type
6884                         == SHT_PREINIT_ARRAY)
6885                       {
6886                         _bfd_error_handler
6887                           (_("%pB: .preinit_array section is not allowed in DSO"),
6888                            sub);
6889                         break;
6890                       }
6891
6892               bfd_set_error (bfd_error_nonrepresentable_section);
6893               return FALSE;
6894             }
6895
6896           if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
6897               || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
6898             return FALSE;
6899         }
6900       s = bfd_get_section_by_name (output_bfd, ".init_array");
6901       if (s != NULL && s->linker_has_input)
6902         {
6903           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
6904               || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
6905             return FALSE;
6906         }
6907       s = bfd_get_section_by_name (output_bfd, ".fini_array");
6908       if (s != NULL && s->linker_has_input)
6909         {
6910           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
6911               || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
6912             return FALSE;
6913         }
6914
6915       dynstr = bfd_get_linker_section (dynobj, ".dynstr");
6916       /* If .dynstr is excluded from the link, we don't want any of
6917          these tags.  Strictly, we should be checking each section
6918          individually;  This quick check covers for the case where
6919          someone does a /DISCARD/ : { *(*) }.  */
6920       if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
6921         {
6922           bfd_size_type strsize;
6923
6924           strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6925           if ((info->emit_hash
6926                && !_bfd_elf_add_dynamic_entry (info, DT_HASH, 0))
6927               || (info->emit_gnu_hash
6928                   && !_bfd_elf_add_dynamic_entry (info, DT_GNU_HASH, 0))
6929               || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
6930               || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
6931               || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
6932               || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
6933                                               bed->s->sizeof_sym))
6934             return FALSE;
6935         }
6936     }
6937
6938   if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
6939     return FALSE;
6940
6941   /* The backend must work out the sizes of all the other dynamic
6942      sections.  */
6943   if (dynobj != NULL
6944       && bed->elf_backend_size_dynamic_sections != NULL
6945       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
6946     return FALSE;
6947
6948   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
6949     {
6950       if (elf_tdata (output_bfd)->cverdefs)
6951         {
6952           unsigned int crefs = elf_tdata (output_bfd)->cverdefs;
6953
6954           if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
6955               || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, crefs))
6956             return FALSE;
6957         }
6958
6959       if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
6960         {
6961           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
6962             return FALSE;
6963         }
6964       else if (info->flags & DF_BIND_NOW)
6965         {
6966           if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
6967             return FALSE;
6968         }
6969
6970       if (info->flags_1)
6971         {
6972           if (bfd_link_executable (info))
6973             info->flags_1 &= ~ (DF_1_INITFIRST
6974                                 | DF_1_NODELETE
6975                                 | DF_1_NOOPEN);
6976           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
6977             return FALSE;
6978         }
6979
6980       if (elf_tdata (output_bfd)->cverrefs)
6981         {
6982           unsigned int crefs = elf_tdata (output_bfd)->cverrefs;
6983
6984           if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
6985               || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
6986             return FALSE;
6987         }
6988
6989       if ((elf_tdata (output_bfd)->cverrefs == 0
6990            && elf_tdata (output_bfd)->cverdefs == 0)
6991           || _bfd_elf_link_renumber_dynsyms (output_bfd, info, NULL) <= 1)
6992         {
6993           asection *s;
6994
6995           s = bfd_get_linker_section (dynobj, ".gnu.version");
6996           s->flags |= SEC_EXCLUDE;
6997         }
6998     }
6999   return TRUE;
7000 }
7001
7002 /* Find the first non-excluded output section.  We'll use its
7003    section symbol for some emitted relocs.  */
7004 void
7005 _bfd_elf_init_1_index_section (bfd *output_bfd, struct bfd_link_info *info)
7006 {
7007   asection *s;
7008
7009   for (s = output_bfd->sections; s != NULL; s = s->next)
7010     if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
7011         && !_bfd_elf_omit_section_dynsym_default (output_bfd, info, s))
7012       {
7013         elf_hash_table (info)->text_index_section = s;
7014         break;
7015       }
7016 }
7017
7018 /* Find two non-excluded output sections, one for code, one for data.
7019    We'll use their section symbols for some emitted relocs.  */
7020 void
7021 _bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
7022 {
7023   asection *s;
7024
7025   /* Data first, since setting text_index_section changes
7026      _bfd_elf_omit_section_dynsym_default.  */
7027   for (s = output_bfd->sections; s != NULL; s = s->next)
7028     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
7029         && !_bfd_elf_omit_section_dynsym_default (output_bfd, info, s))
7030       {
7031         elf_hash_table (info)->data_index_section = s;
7032         break;
7033       }
7034
7035   for (s = output_bfd->sections; s != NULL; s = s->next)
7036     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
7037          == (SEC_ALLOC | SEC_READONLY))
7038         && !_bfd_elf_omit_section_dynsym_default (output_bfd, info, s))
7039       {
7040         elf_hash_table (info)->text_index_section = s;
7041         break;
7042       }
7043
7044   if (elf_hash_table (info)->text_index_section == NULL)
7045     elf_hash_table (info)->text_index_section
7046       = elf_hash_table (info)->data_index_section;
7047 }
7048
7049 bfd_boolean
7050 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
7051 {
7052   const struct elf_backend_data *bed;
7053   unsigned long section_sym_count;
7054   bfd_size_type dynsymcount = 0;
7055
7056   if (!is_elf_hash_table (info->hash))
7057     return TRUE;
7058
7059   bed = get_elf_backend_data (output_bfd);
7060   (*bed->elf_backend_init_index_section) (output_bfd, info);
7061
7062   /* Assign dynsym indices.  In a shared library we generate a section
7063      symbol for each output section, which come first.  Next come all
7064      of the back-end allocated local dynamic syms, followed by the rest
7065      of the global symbols.
7066
7067      This is usually not needed for static binaries, however backends
7068      can request to always do it, e.g. the MIPS backend uses dynamic
7069      symbol counts to lay out GOT, which will be produced in the
7070      presence of GOT relocations even in static binaries (holding fixed
7071      data in that case, to satisfy those relocations).  */
7072
7073   if (elf_hash_table (info)->dynamic_sections_created
7074       || bed->always_renumber_dynsyms)
7075     dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info,
7076                                                   &section_sym_count);
7077
7078   if (elf_hash_table (info)->dynamic_sections_created)
7079     {
7080       bfd *dynobj;
7081       asection *s;
7082       unsigned int dtagcount;
7083
7084       dynobj = elf_hash_table (info)->dynobj;
7085
7086       /* Work out the size of the symbol version section.  */
7087       s = bfd_get_linker_section (dynobj, ".gnu.version");
7088       BFD_ASSERT (s != NULL);
7089       if ((s->flags & SEC_EXCLUDE) == 0)
7090         {
7091           s->size = dynsymcount * sizeof (Elf_External_Versym);
7092           s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
7093           if (s->contents == NULL)
7094             return FALSE;
7095
7096           if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
7097             return FALSE;
7098         }
7099
7100       /* Set the size of the .dynsym and .hash sections.  We counted
7101          the number of dynamic symbols in elf_link_add_object_symbols.
7102          We will build the contents of .dynsym and .hash when we build
7103          the final symbol table, because until then we do not know the
7104          correct value to give the symbols.  We built the .dynstr
7105          section as we went along in elf_link_add_object_symbols.  */
7106       s = elf_hash_table (info)->dynsym;
7107       BFD_ASSERT (s != NULL);
7108       s->size = dynsymcount * bed->s->sizeof_sym;
7109
7110       s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
7111       if (s->contents == NULL)
7112         return FALSE;
7113
7114       /* The first entry in .dynsym is a dummy symbol.  Clear all the
7115          section syms, in case we don't output them all.  */
7116       ++section_sym_count;
7117       memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
7118
7119       elf_hash_table (info)->bucketcount = 0;
7120
7121       /* Compute the size of the hashing table.  As a side effect this
7122          computes the hash values for all the names we export.  */
7123       if (info->emit_hash)
7124         {
7125           unsigned long int *hashcodes;
7126           struct hash_codes_info hashinf;
7127           bfd_size_type amt;
7128           unsigned long int nsyms;
7129           size_t bucketcount;
7130           size_t hash_entry_size;
7131
7132           /* Compute the hash values for all exported symbols.  At the same
7133              time store the values in an array so that we could use them for
7134              optimizations.  */
7135           amt = dynsymcount * sizeof (unsigned long int);
7136           hashcodes = (unsigned long int *) bfd_malloc (amt);
7137           if (hashcodes == NULL)
7138             return FALSE;
7139           hashinf.hashcodes = hashcodes;
7140           hashinf.error = FALSE;
7141
7142           /* Put all hash values in HASHCODES.  */
7143           elf_link_hash_traverse (elf_hash_table (info),
7144                                   elf_collect_hash_codes, &hashinf);
7145           if (hashinf.error)
7146             {
7147               free (hashcodes);
7148               return FALSE;
7149             }
7150
7151           nsyms = hashinf.hashcodes - hashcodes;
7152           bucketcount
7153             = compute_bucket_count (info, hashcodes, nsyms, 0);
7154           free (hashcodes);
7155
7156           if (bucketcount == 0 && nsyms > 0)
7157             return FALSE;
7158
7159           elf_hash_table (info)->bucketcount = bucketcount;
7160
7161           s = bfd_get_linker_section (dynobj, ".hash");
7162           BFD_ASSERT (s != NULL);
7163           hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
7164           s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
7165           s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
7166           if (s->contents == NULL)
7167             return FALSE;
7168
7169           bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
7170           bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
7171                    s->contents + hash_entry_size);
7172         }
7173
7174       if (info->emit_gnu_hash)
7175         {
7176           size_t i, cnt;
7177           unsigned char *contents;
7178           struct collect_gnu_hash_codes cinfo;
7179           bfd_size_type amt;
7180           size_t bucketcount;
7181
7182           memset (&cinfo, 0, sizeof (cinfo));
7183
7184           /* Compute the hash values for all exported symbols.  At the same
7185              time store the values in an array so that we could use them for
7186              optimizations.  */
7187           amt = dynsymcount * 2 * sizeof (unsigned long int);
7188           cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt);
7189           if (cinfo.hashcodes == NULL)
7190             return FALSE;
7191
7192           cinfo.hashval = cinfo.hashcodes + dynsymcount;
7193           cinfo.min_dynindx = -1;
7194           cinfo.output_bfd = output_bfd;
7195           cinfo.bed = bed;
7196
7197           /* Put all hash values in HASHCODES.  */
7198           elf_link_hash_traverse (elf_hash_table (info),
7199                                   elf_collect_gnu_hash_codes, &cinfo);
7200           if (cinfo.error)
7201             {
7202               free (cinfo.hashcodes);
7203               return FALSE;
7204             }
7205
7206           bucketcount
7207             = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1);
7208
7209           if (bucketcount == 0)
7210             {
7211               free (cinfo.hashcodes);
7212               return FALSE;
7213             }
7214
7215           s = bfd_get_linker_section (dynobj, ".gnu.hash");
7216           BFD_ASSERT (s != NULL);
7217
7218           if (cinfo.nsyms == 0)
7219             {
7220               /* Empty .gnu.hash section is special.  */
7221               BFD_ASSERT (cinfo.min_dynindx == -1);
7222               free (cinfo.hashcodes);
7223               s->size = 5 * 4 + bed->s->arch_size / 8;
7224               contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
7225               if (contents == NULL)
7226                 return FALSE;
7227               s->contents = contents;
7228               /* 1 empty bucket.  */
7229               bfd_put_32 (output_bfd, 1, contents);
7230               /* SYMIDX above the special symbol 0.  */
7231               bfd_put_32 (output_bfd, 1, contents + 4);
7232               /* Just one word for bitmask.  */
7233               bfd_put_32 (output_bfd, 1, contents + 8);
7234               /* Only hash fn bloom filter.  */
7235               bfd_put_32 (output_bfd, 0, contents + 12);
7236               /* No hashes are valid - empty bitmask.  */
7237               bfd_put (bed->s->arch_size, output_bfd, 0, contents + 16);
7238               /* No hashes in the only bucket.  */
7239               bfd_put_32 (output_bfd, 0,
7240                           contents + 16 + bed->s->arch_size / 8);
7241             }
7242           else
7243             {
7244               unsigned long int maskwords, maskbitslog2, x;
7245               BFD_ASSERT (cinfo.min_dynindx != -1);
7246
7247               x = cinfo.nsyms;
7248               maskbitslog2 = 1;
7249               while ((x >>= 1) != 0)
7250                 ++maskbitslog2;
7251               if (maskbitslog2 < 3)
7252                 maskbitslog2 = 5;
7253               else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms)
7254                 maskbitslog2 = maskbitslog2 + 3;
7255               else
7256                 maskbitslog2 = maskbitslog2 + 2;
7257               if (bed->s->arch_size == 64)
7258                 {
7259                   if (maskbitslog2 == 5)
7260                     maskbitslog2 = 6;
7261                   cinfo.shift1 = 6;
7262                 }
7263               else
7264                 cinfo.shift1 = 5;
7265               cinfo.mask = (1 << cinfo.shift1) - 1;
7266               cinfo.shift2 = maskbitslog2;
7267               cinfo.maskbits = 1 << maskbitslog2;
7268               maskwords = 1 << (maskbitslog2 - cinfo.shift1);
7269               amt = bucketcount * sizeof (unsigned long int) * 2;
7270               amt += maskwords * sizeof (bfd_vma);
7271               cinfo.bitmask = (bfd_vma *) bfd_malloc (amt);
7272               if (cinfo.bitmask == NULL)
7273                 {
7274                   free (cinfo.hashcodes);
7275                   return FALSE;
7276                 }
7277
7278               cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords);
7279               cinfo.indx = cinfo.counts + bucketcount;
7280               cinfo.symindx = dynsymcount - cinfo.nsyms;
7281               memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma));
7282
7283               /* Determine how often each hash bucket is used.  */
7284               memset (cinfo.counts, 0, bucketcount * sizeof (cinfo.counts[0]));
7285               for (i = 0; i < cinfo.nsyms; ++i)
7286                 ++cinfo.counts[cinfo.hashcodes[i] % bucketcount];
7287
7288               for (i = 0, cnt = cinfo.symindx; i < bucketcount; ++i)
7289                 if (cinfo.counts[i] != 0)
7290                   {
7291                     cinfo.indx[i] = cnt;
7292                     cnt += cinfo.counts[i];
7293                   }
7294               BFD_ASSERT (cnt == dynsymcount);
7295               cinfo.bucketcount = bucketcount;
7296               cinfo.local_indx = cinfo.min_dynindx;
7297
7298               s->size = (4 + bucketcount + cinfo.nsyms) * 4;
7299               s->size += cinfo.maskbits / 8;
7300               contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
7301               if (contents == NULL)
7302                 {
7303                   free (cinfo.bitmask);
7304                   free (cinfo.hashcodes);
7305                   return FALSE;
7306                 }
7307
7308               s->contents = contents;
7309               bfd_put_32 (output_bfd, bucketcount, contents);
7310               bfd_put_32 (output_bfd, cinfo.symindx, contents + 4);
7311               bfd_put_32 (output_bfd, maskwords, contents + 8);
7312               bfd_put_32 (output_bfd, cinfo.shift2, contents + 12);
7313               contents += 16 + cinfo.maskbits / 8;
7314
7315               for (i = 0; i < bucketcount; ++i)
7316                 {
7317                   if (cinfo.counts[i] == 0)
7318                     bfd_put_32 (output_bfd, 0, contents);
7319                   else
7320                     bfd_put_32 (output_bfd, cinfo.indx[i], contents);
7321                   contents += 4;
7322                 }
7323
7324               cinfo.contents = contents;
7325
7326               /* Renumber dynamic symbols, populate .gnu.hash section.  */
7327               elf_link_hash_traverse (elf_hash_table (info),
7328                                       elf_renumber_gnu_hash_syms, &cinfo);
7329
7330               contents = s->contents + 16;
7331               for (i = 0; i < maskwords; ++i)
7332                 {
7333                   bfd_put (bed->s->arch_size, output_bfd, cinfo.bitmask[i],
7334                            contents);
7335                   contents += bed->s->arch_size / 8;
7336                 }
7337
7338               free (cinfo.bitmask);
7339               free (cinfo.hashcodes);
7340             }
7341         }
7342
7343       s = bfd_get_linker_section (dynobj, ".dynstr");
7344       BFD_ASSERT (s != NULL);
7345
7346       elf_finalize_dynstr (output_bfd, info);
7347
7348       s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
7349
7350       for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
7351         if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
7352           return FALSE;
7353     }
7354
7355   return TRUE;
7356 }
7357 \f
7358 /* Make sure sec_info_type is cleared if sec_info is cleared too.  */
7359
7360 static void
7361 merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
7362                             asection *sec)
7363 {
7364   BFD_ASSERT (sec->sec_info_type == SEC_INFO_TYPE_MERGE);
7365   sec->sec_info_type = SEC_INFO_TYPE_NONE;
7366 }
7367
7368 /* Finish SHF_MERGE section merging.  */
7369
7370 bfd_boolean
7371 _bfd_elf_merge_sections (bfd *obfd, struct bfd_link_info *info)
7372 {
7373   bfd *ibfd;
7374   asection *sec;
7375
7376   if (!is_elf_hash_table (info->hash))
7377     return FALSE;
7378
7379   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7380     if ((ibfd->flags & DYNAMIC) == 0
7381         && bfd_get_flavour (ibfd) == bfd_target_elf_flavour
7382         && (elf_elfheader (ibfd)->e_ident[EI_CLASS]
7383             == get_elf_backend_data (obfd)->s->elfclass))
7384       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7385         if ((sec->flags & SEC_MERGE) != 0
7386             && !bfd_is_abs_section (sec->output_section))
7387           {
7388             struct bfd_elf_section_data *secdata;
7389
7390             secdata = elf_section_data (sec);
7391             if (! _bfd_add_merge_section (obfd,
7392                                           &elf_hash_table (info)->merge_info,
7393                                           sec, &secdata->sec_info))
7394               return FALSE;
7395             else if (secdata->sec_info)
7396               sec->sec_info_type = SEC_INFO_TYPE_MERGE;
7397           }
7398
7399   if (elf_hash_table (info)->merge_info != NULL)
7400     _bfd_merge_sections (obfd, info, elf_hash_table (info)->merge_info,
7401                          merge_sections_remove_hook);
7402   return TRUE;
7403 }
7404
7405 /* Create an entry in an ELF linker hash table.  */
7406
7407 struct bfd_hash_entry *
7408 _bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
7409                             struct bfd_hash_table *table,
7410                             const char *string)
7411 {
7412   /* Allocate the structure if it has not already been allocated by a
7413      subclass.  */
7414   if (entry == NULL)
7415     {
7416       entry = (struct bfd_hash_entry *)
7417         bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry));
7418       if (entry == NULL)
7419         return entry;
7420     }
7421
7422   /* Call the allocation method of the superclass.  */
7423   entry = _bfd_link_hash_newfunc (entry, table, string);
7424   if (entry != NULL)
7425     {
7426       struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
7427       struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table;
7428
7429       /* Set local fields.  */
7430       ret->indx = -1;
7431       ret->dynindx = -1;
7432       ret->got = htab->init_got_refcount;
7433       ret->plt = htab->init_plt_refcount;
7434       memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry)
7435                               - offsetof (struct elf_link_hash_entry, size)));
7436       /* Assume that we have been called by a non-ELF symbol reader.
7437          This flag is then reset by the code which reads an ELF input
7438          file.  This ensures that a symbol created by a non-ELF symbol
7439          reader will have the flag set correctly.  */
7440       ret->non_elf = 1;
7441     }
7442
7443   return entry;
7444 }
7445
7446 /* Copy data from an indirect symbol to its direct symbol, hiding the
7447    old indirect symbol.  Also used for copying flags to a weakdef.  */
7448
7449 void
7450 _bfd_elf_link_hash_copy_indirect (struct bfd_link_info *info,
7451                                   struct elf_link_hash_entry *dir,
7452                                   struct elf_link_hash_entry *ind)
7453 {
7454   struct elf_link_hash_table *htab;
7455
7456   /* Copy down any references that we may have already seen to the
7457      symbol which just became indirect.  */
7458
7459   if (dir->versioned != versioned_hidden)
7460     dir->ref_dynamic |= ind->ref_dynamic;
7461   dir->ref_regular |= ind->ref_regular;
7462   dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
7463   dir->non_got_ref |= ind->non_got_ref;
7464   dir->needs_plt |= ind->needs_plt;
7465   dir->pointer_equality_needed |= ind->pointer_equality_needed;
7466
7467   if (ind->root.type != bfd_link_hash_indirect)
7468     return;
7469
7470   /* Copy over the global and procedure linkage table refcount entries.
7471      These may have been already set up by a check_relocs routine.  */
7472   htab = elf_hash_table (info);
7473   if (ind->got.refcount > htab->init_got_refcount.refcount)
7474     {
7475       if (dir->got.refcount < 0)
7476         dir->got.refcount = 0;
7477       dir->got.refcount += ind->got.refcount;
7478       ind->got.refcount = htab->init_got_refcount.refcount;
7479     }
7480
7481   if (ind->plt.refcount > htab->init_plt_refcount.refcount)
7482     {
7483       if (dir->plt.refcount < 0)
7484         dir->plt.refcount = 0;
7485       dir->plt.refcount += ind->plt.refcount;
7486       ind->plt.refcount = htab->init_plt_refcount.refcount;
7487     }
7488
7489   if (ind->dynindx != -1)
7490     {
7491       if (dir->dynindx != -1)
7492         _bfd_elf_strtab_delref (htab->dynstr, dir->dynstr_index);
7493       dir->dynindx = ind->dynindx;
7494       dir->dynstr_index = ind->dynstr_index;
7495       ind->dynindx = -1;
7496       ind->dynstr_index = 0;
7497     }
7498 }
7499
7500 void
7501 _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info,
7502                                 struct elf_link_hash_entry *h,
7503                                 bfd_boolean force_local)
7504 {
7505   /* STT_GNU_IFUNC symbol must go through PLT.  */
7506   if (h->type != STT_GNU_IFUNC)
7507     {
7508       h->plt = elf_hash_table (info)->init_plt_offset;
7509       h->needs_plt = 0;
7510     }
7511   if (force_local)
7512     {
7513       h->forced_local = 1;
7514       if (h->dynindx != -1)
7515         {
7516           _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7517                                   h->dynstr_index);
7518           h->dynindx = -1;
7519           h->dynstr_index = 0;
7520         }
7521     }
7522 }
7523
7524 /* Hide a symbol. */
7525
7526 void
7527 _bfd_elf_link_hide_symbol (bfd *output_bfd,
7528                            struct bfd_link_info *info,
7529                            struct bfd_link_hash_entry *h)
7530 {
7531   if (is_elf_hash_table (info->hash))
7532     {
7533       const struct elf_backend_data *bed
7534         = get_elf_backend_data (output_bfd);
7535       struct elf_link_hash_entry *eh
7536         = (struct elf_link_hash_entry *) h;
7537       bed->elf_backend_hide_symbol (info, eh, TRUE);
7538       eh->def_dynamic = 0;
7539       eh->ref_dynamic = 0;
7540       eh->dynamic_def = 0;
7541     }
7542 }
7543
7544 /* Initialize an ELF linker hash table.  *TABLE has been zeroed by our
7545    caller.  */
7546
7547 bfd_boolean
7548 _bfd_elf_link_hash_table_init
7549   (struct elf_link_hash_table *table,
7550    bfd *abfd,
7551    struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
7552                                       struct bfd_hash_table *,
7553                                       const char *),
7554    unsigned int entsize,
7555    enum elf_target_id target_id)
7556 {
7557   bfd_boolean ret;
7558   int can_refcount = get_elf_backend_data (abfd)->can_refcount;
7559
7560   table->init_got_refcount.refcount = can_refcount - 1;
7561   table->init_plt_refcount.refcount = can_refcount - 1;
7562   table->init_got_offset.offset = -(bfd_vma) 1;
7563   table->init_plt_offset.offset = -(bfd_vma) 1;
7564   /* The first dynamic symbol is a dummy.  */
7565   table->dynsymcount = 1;
7566
7567   ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
7568
7569   table->root.type = bfd_link_elf_hash_table;
7570   table->hash_table_id = target_id;
7571
7572   return ret;
7573 }
7574
7575 /* Create an ELF linker hash table.  */
7576
7577 struct bfd_link_hash_table *
7578 _bfd_elf_link_hash_table_create (bfd *abfd)
7579 {
7580   struct elf_link_hash_table *ret;
7581   bfd_size_type amt = sizeof (struct elf_link_hash_table);
7582
7583   ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
7584   if (ret == NULL)
7585     return NULL;
7586
7587   if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc,
7588                                        sizeof (struct elf_link_hash_entry),
7589                                        GENERIC_ELF_DATA))
7590     {
7591       free (ret);
7592       return NULL;
7593     }
7594   ret->root.hash_table_free = _bfd_elf_link_hash_table_free;
7595
7596   return &ret->root;
7597 }
7598
7599 /* Destroy an ELF linker hash table.  */
7600
7601 void
7602 _bfd_elf_link_hash_table_free (bfd *obfd)
7603 {
7604   struct elf_link_hash_table *htab;
7605
7606   htab = (struct elf_link_hash_table *) obfd->link.hash;
7607   if (htab->dynstr != NULL)
7608     _bfd_elf_strtab_free (htab->dynstr);
7609   _bfd_merge_sections_free (htab->merge_info);
7610   _bfd_generic_link_hash_table_free (obfd);
7611 }
7612
7613 /* This is a hook for the ELF emulation code in the generic linker to
7614    tell the backend linker what file name to use for the DT_NEEDED
7615    entry for a dynamic object.  */
7616
7617 void
7618 bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
7619 {
7620   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7621       && bfd_get_format (abfd) == bfd_object)
7622     elf_dt_name (abfd) = name;
7623 }
7624
7625 int
7626 bfd_elf_get_dyn_lib_class (bfd *abfd)
7627 {
7628   int lib_class;
7629   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7630       && bfd_get_format (abfd) == bfd_object)
7631     lib_class = elf_dyn_lib_class (abfd);
7632   else
7633     lib_class = 0;
7634   return lib_class;
7635 }
7636
7637 void
7638 bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class)
7639 {
7640   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7641       && bfd_get_format (abfd) == bfd_object)
7642     elf_dyn_lib_class (abfd) = lib_class;
7643 }
7644
7645 /* Get the list of DT_NEEDED entries for a link.  This is a hook for
7646    the linker ELF emulation code.  */
7647
7648 struct bfd_link_needed_list *
7649 bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
7650                          struct bfd_link_info *info)
7651 {
7652   if (! is_elf_hash_table (info->hash))
7653     return NULL;
7654   return elf_hash_table (info)->needed;
7655 }
7656
7657 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link.  This is a
7658    hook for the linker ELF emulation code.  */
7659
7660 struct bfd_link_needed_list *
7661 bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED,
7662                           struct bfd_link_info *info)
7663 {
7664   if (! is_elf_hash_table (info->hash))
7665     return NULL;
7666   return elf_hash_table (info)->runpath;
7667 }
7668
7669 /* Get the name actually used for a dynamic object for a link.  This
7670    is the SONAME entry if there is one.  Otherwise, it is the string
7671    passed to bfd_elf_set_dt_needed_name, or it is the filename.  */
7672
7673 const char *
7674 bfd_elf_get_dt_soname (bfd *abfd)
7675 {
7676   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7677       && bfd_get_format (abfd) == bfd_object)
7678     return elf_dt_name (abfd);
7679   return NULL;
7680 }
7681
7682 /* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
7683    the ELF linker emulation code.  */
7684
7685 bfd_boolean
7686 bfd_elf_get_bfd_needed_list (bfd *abfd,
7687                              struct bfd_link_needed_list **pneeded)
7688 {
7689   asection *s;
7690   bfd_byte *dynbuf = NULL;
7691   unsigned int elfsec;
7692   unsigned long shlink;
7693   bfd_byte *extdyn, *extdynend;
7694   size_t extdynsize;
7695   void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
7696
7697   *pneeded = NULL;
7698
7699   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
7700       || bfd_get_format (abfd) != bfd_object)
7701     return TRUE;
7702
7703   s = bfd_get_section_by_name (abfd, ".dynamic");
7704   if (s == NULL || s->size == 0)
7705     return TRUE;
7706
7707   if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
7708     goto error_return;
7709
7710   elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
7711   if (elfsec == SHN_BAD)
7712     goto error_return;
7713
7714   shlink = elf_elfsections (abfd)[elfsec]->sh_link;
7715
7716   extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
7717   swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
7718
7719   extdyn = dynbuf;
7720   extdynend = extdyn + s->size;
7721   for (; extdyn < extdynend; extdyn += extdynsize)
7722     {
7723       Elf_Internal_Dyn dyn;
7724
7725       (*swap_dyn_in) (abfd, extdyn, &dyn);
7726
7727       if (dyn.d_tag == DT_NULL)
7728         break;
7729
7730       if (dyn.d_tag == DT_NEEDED)
7731         {
7732           const char *string;
7733           struct bfd_link_needed_list *l;
7734           unsigned int tagv = dyn.d_un.d_val;
7735           bfd_size_type amt;
7736
7737           string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
7738           if (string == NULL)
7739             goto error_return;
7740
7741           amt = sizeof *l;
7742           l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
7743           if (l == NULL)
7744             goto error_return;
7745
7746           l->by = abfd;
7747           l->name = string;
7748           l->next = *pneeded;
7749           *pneeded = l;
7750         }
7751     }
7752
7753   free (dynbuf);
7754
7755   return TRUE;
7756
7757  error_return:
7758   if (dynbuf != NULL)
7759     free (dynbuf);
7760   return FALSE;
7761 }
7762
7763 struct elf_symbuf_symbol
7764 {
7765   unsigned long st_name;        /* Symbol name, index in string tbl */
7766   unsigned char st_info;        /* Type and binding attributes */
7767   unsigned char st_other;       /* Visibilty, and target specific */
7768 };
7769
7770 struct elf_symbuf_head
7771 {
7772   struct elf_symbuf_symbol *ssym;
7773   size_t count;
7774   unsigned int st_shndx;
7775 };
7776
7777 struct elf_symbol
7778 {
7779   union
7780     {
7781       Elf_Internal_Sym *isym;
7782       struct elf_symbuf_symbol *ssym;
7783     } u;
7784   const char *name;
7785 };
7786
7787 /* Sort references to symbols by ascending section number.  */
7788
7789 static int
7790 elf_sort_elf_symbol (const void *arg1, const void *arg2)
7791 {
7792   const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1;
7793   const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2;
7794
7795   return s1->st_shndx - s2->st_shndx;
7796 }
7797
7798 static int
7799 elf_sym_name_compare (const void *arg1, const void *arg2)
7800 {
7801   const struct elf_symbol *s1 = (const struct elf_symbol *) arg1;
7802   const struct elf_symbol *s2 = (const struct elf_symbol *) arg2;
7803   return strcmp (s1->name, s2->name);
7804 }
7805
7806 static struct elf_symbuf_head *
7807 elf_create_symbuf (size_t symcount, Elf_Internal_Sym *isymbuf)
7808 {
7809   Elf_Internal_Sym **ind, **indbufend, **indbuf;
7810   struct elf_symbuf_symbol *ssym;
7811   struct elf_symbuf_head *ssymbuf, *ssymhead;
7812   size_t i, shndx_count, total_size;
7813
7814   indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf));
7815   if (indbuf == NULL)
7816     return NULL;
7817
7818   for (ind = indbuf, i = 0; i < symcount; i++)
7819     if (isymbuf[i].st_shndx != SHN_UNDEF)
7820       *ind++ = &isymbuf[i];
7821   indbufend = ind;
7822
7823   qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *),
7824          elf_sort_elf_symbol);
7825
7826   shndx_count = 0;
7827   if (indbufend > indbuf)
7828     for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++)
7829       if (ind[0]->st_shndx != ind[1]->st_shndx)
7830         shndx_count++;
7831
7832   total_size = ((shndx_count + 1) * sizeof (*ssymbuf)
7833                 + (indbufend - indbuf) * sizeof (*ssym));
7834   ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size);
7835   if (ssymbuf == NULL)
7836     {
7837       free (indbuf);
7838       return NULL;
7839     }
7840
7841   ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1);
7842   ssymbuf->ssym = NULL;
7843   ssymbuf->count = shndx_count;
7844   ssymbuf->st_shndx = 0;
7845   for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++)
7846     {
7847       if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx)
7848         {
7849           ssymhead++;
7850           ssymhead->ssym = ssym;
7851           ssymhead->count = 0;
7852           ssymhead->st_shndx = (*ind)->st_shndx;
7853         }
7854       ssym->st_name = (*ind)->st_name;
7855       ssym->st_info = (*ind)->st_info;
7856       ssym->st_other = (*ind)->st_other;
7857       ssymhead->count++;
7858     }
7859   BFD_ASSERT ((size_t) (ssymhead - ssymbuf) == shndx_count
7860               && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf)
7861                   == total_size));
7862
7863   free (indbuf);
7864   return ssymbuf;
7865 }
7866
7867 /* Check if 2 sections define the same set of local and global
7868    symbols.  */
7869
7870 static bfd_boolean
7871 bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
7872                                    struct bfd_link_info *info)
7873 {
7874   bfd *bfd1, *bfd2;
7875   const struct elf_backend_data *bed1, *bed2;
7876   Elf_Internal_Shdr *hdr1, *hdr2;
7877   size_t symcount1, symcount2;
7878   Elf_Internal_Sym *isymbuf1, *isymbuf2;
7879   struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
7880   Elf_Internal_Sym *isym, *isymend;
7881   struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
7882   size_t count1, count2, i;
7883   unsigned int shndx1, shndx2;
7884   bfd_boolean result;
7885
7886   bfd1 = sec1->owner;
7887   bfd2 = sec2->owner;
7888
7889   /* Both sections have to be in ELF.  */
7890   if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
7891       || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
7892     return FALSE;
7893
7894   if (elf_section_type (sec1) != elf_section_type (sec2))
7895     return FALSE;
7896
7897   shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
7898   shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
7899   if (shndx1 == SHN_BAD || shndx2 == SHN_BAD)
7900     return FALSE;
7901
7902   bed1 = get_elf_backend_data (bfd1);
7903   bed2 = get_elf_backend_data (bfd2);
7904   hdr1 = &elf_tdata (bfd1)->symtab_hdr;
7905   symcount1 = hdr1->sh_size / bed1->s->sizeof_sym;
7906   hdr2 = &elf_tdata (bfd2)->symtab_hdr;
7907   symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
7908
7909   if (symcount1 == 0 || symcount2 == 0)
7910     return FALSE;
7911
7912   result = FALSE;
7913   isymbuf1 = NULL;
7914   isymbuf2 = NULL;
7915   ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf;
7916   ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf;
7917
7918   if (ssymbuf1 == NULL)
7919     {
7920       isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
7921                                        NULL, NULL, NULL);
7922       if (isymbuf1 == NULL)
7923         goto done;
7924
7925       if (!info->reduce_memory_overheads)
7926         elf_tdata (bfd1)->symbuf = ssymbuf1
7927           = elf_create_symbuf (symcount1, isymbuf1);
7928     }
7929
7930   if (ssymbuf1 == NULL || ssymbuf2 == NULL)
7931     {
7932       isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
7933                                        NULL, NULL, NULL);
7934       if (isymbuf2 == NULL)
7935         goto done;
7936
7937       if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
7938         elf_tdata (bfd2)->symbuf = ssymbuf2
7939           = elf_create_symbuf (symcount2, isymbuf2);
7940     }
7941
7942   if (ssymbuf1 != NULL && ssymbuf2 != NULL)
7943     {
7944       /* Optimized faster version.  */
7945       size_t lo, hi, mid;
7946       struct elf_symbol *symp;
7947       struct elf_symbuf_symbol *ssym, *ssymend;
7948
7949       lo = 0;
7950       hi = ssymbuf1->count;
7951       ssymbuf1++;
7952       count1 = 0;
7953       while (lo < hi)
7954         {
7955           mid = (lo + hi) / 2;
7956           if (shndx1 < ssymbuf1[mid].st_shndx)
7957             hi = mid;
7958           else if (shndx1 > ssymbuf1[mid].st_shndx)
7959             lo = mid + 1;
7960           else
7961             {
7962               count1 = ssymbuf1[mid].count;
7963               ssymbuf1 += mid;
7964               break;
7965             }
7966         }
7967
7968       lo = 0;
7969       hi = ssymbuf2->count;
7970       ssymbuf2++;
7971       count2 = 0;
7972       while (lo < hi)
7973         {
7974           mid = (lo + hi) / 2;
7975           if (shndx2 < ssymbuf2[mid].st_shndx)
7976             hi = mid;
7977           else if (shndx2 > ssymbuf2[mid].st_shndx)
7978             lo = mid + 1;
7979           else
7980             {
7981               count2 = ssymbuf2[mid].count;
7982               ssymbuf2 += mid;
7983               break;
7984             }
7985         }
7986
7987       if (count1 == 0 || count2 == 0 || count1 != count2)
7988         goto done;
7989
7990       symtable1
7991         = (struct elf_symbol *) bfd_malloc (count1 * sizeof (*symtable1));
7992       symtable2
7993         = (struct elf_symbol *) bfd_malloc (count2 * sizeof (*symtable2));
7994       if (symtable1 == NULL || symtable2 == NULL)
7995         goto done;
7996
7997       symp = symtable1;
7998       for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
7999            ssym < ssymend; ssym++, symp++)
8000         {
8001           symp->u.ssym = ssym;
8002           symp->name = bfd_elf_string_from_elf_section (bfd1,
8003                                                         hdr1->sh_link,
8004                                                         ssym->st_name);
8005         }
8006
8007       symp = symtable2;
8008       for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
8009            ssym < ssymend; ssym++, symp++)
8010         {
8011           symp->u.ssym = ssym;
8012           symp->name = bfd_elf_string_from_elf_section (bfd2,
8013                                                         hdr2->sh_link,
8014                                                         ssym->st_name);
8015         }
8016
8017       /* Sort symbol by name.  */
8018       qsort (symtable1, count1, sizeof (struct elf_symbol),
8019              elf_sym_name_compare);
8020       qsort (symtable2, count1, sizeof (struct elf_symbol),
8021              elf_sym_name_compare);
8022
8023       for (i = 0; i < count1; i++)
8024         /* Two symbols must have the same binding, type and name.  */
8025         if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info
8026             || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other
8027             || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
8028           goto done;
8029
8030       result = TRUE;
8031       goto done;
8032     }
8033
8034   symtable1 = (struct elf_symbol *)
8035       bfd_malloc (symcount1 * sizeof (struct elf_symbol));
8036   symtable2 = (struct elf_symbol *)
8037       bfd_malloc (symcount2 * sizeof (struct elf_symbol));
8038   if (symtable1 == NULL || symtable2 == NULL)
8039     goto done;
8040
8041   /* Count definitions in the section.  */
8042   count1 = 0;
8043   for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
8044     if (isym->st_shndx == shndx1)
8045       symtable1[count1++].u.isym = isym;
8046
8047   count2 = 0;
8048   for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
8049     if (isym->st_shndx == shndx2)
8050       symtable2[count2++].u.isym = isym;
8051
8052   if (count1 == 0 || count2 == 0 || count1 != count2)
8053     goto done;
8054
8055   for (i = 0; i < count1; i++)
8056     symtable1[i].name
8057       = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link,
8058                                          symtable1[i].u.isym->st_name);
8059
8060   for (i = 0; i < count2; i++)
8061     symtable2[i].name
8062       = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link,
8063                                          symtable2[i].u.isym->st_name);
8064
8065   /* Sort symbol by name.  */
8066   qsort (symtable1, count1, sizeof (struct elf_symbol),
8067          elf_sym_name_compare);
8068   qsort (symtable2, count1, sizeof (struct elf_symbol),
8069          elf_sym_name_compare);
8070
8071   for (i = 0; i < count1; i++)
8072     /* Two symbols must have the same binding, type and name.  */
8073     if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info
8074         || symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other
8075         || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
8076       goto done;
8077
8078   result = TRUE;
8079
8080 done:
8081   if (symtable1)
8082     free (symtable1);
8083   if (symtable2)
8084     free (symtable2);
8085   if (isymbuf1)
8086     free (isymbuf1);
8087   if (isymbuf2)
8088     free (isymbuf2);
8089
8090   return result;
8091 }
8092
8093 /* Return TRUE if 2 section types are compatible.  */
8094
8095 bfd_boolean
8096 _bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
8097                                  bfd *bbfd, const asection *bsec)
8098 {
8099   if (asec == NULL
8100       || bsec == NULL
8101       || abfd->xvec->flavour != bfd_target_elf_flavour
8102       || bbfd->xvec->flavour != bfd_target_elf_flavour)
8103     return TRUE;
8104
8105   return elf_section_type (asec) == elf_section_type (bsec);
8106 }
8107 \f
8108 /* Final phase of ELF linker.  */
8109
8110 /* A structure we use to avoid passing large numbers of arguments.  */
8111
8112 struct elf_final_link_info
8113 {
8114   /* General link information.  */
8115   struct bfd_link_info *info;
8116   /* Output BFD.  */
8117   bfd *output_bfd;
8118   /* Symbol string table.  */
8119   struct elf_strtab_hash *symstrtab;
8120   /* .hash section.  */
8121   asection *hash_sec;
8122   /* symbol version section (.gnu.version).  */
8123   asection *symver_sec;
8124   /* Buffer large enough to hold contents of any section.  */
8125   bfd_byte *contents;
8126   /* Buffer large enough to hold external relocs of any section.  */
8127   void *external_relocs;
8128   /* Buffer large enough to hold internal relocs of any section.  */
8129   Elf_Internal_Rela *internal_relocs;
8130   /* Buffer large enough to hold external local symbols of any input
8131      BFD.  */
8132   bfd_byte *external_syms;
8133   /* And a buffer for symbol section indices.  */
8134   Elf_External_Sym_Shndx *locsym_shndx;
8135   /* Buffer large enough to hold internal local symbols of any input
8136      BFD.  */
8137   Elf_Internal_Sym *internal_syms;
8138   /* Array large enough to hold a symbol index for each local symbol
8139      of any input BFD.  */
8140   long *indices;
8141   /* Array large enough to hold a section pointer for each local
8142      symbol of any input BFD.  */
8143   asection **sections;
8144   /* Buffer for SHT_SYMTAB_SHNDX section.  */
8145   Elf_External_Sym_Shndx *symshndxbuf;
8146   /* Number of STT_FILE syms seen.  */
8147   size_t filesym_count;
8148 };
8149
8150 /* This struct is used to pass information to elf_link_output_extsym.  */
8151
8152 struct elf_outext_info
8153 {
8154   bfd_boolean failed;
8155   bfd_boolean localsyms;
8156   bfd_boolean file_sym_done;
8157   struct elf_final_link_info *flinfo;
8158 };
8159
8160
8161 /* Support for evaluating a complex relocation.
8162
8163    Complex relocations are generalized, self-describing relocations.  The
8164    implementation of them consists of two parts: complex symbols, and the
8165    relocations themselves.
8166
8167    The relocations are use a reserved elf-wide relocation type code (R_RELC
8168    external / BFD_RELOC_RELC internal) and an encoding of relocation field
8169    information (start bit, end bit, word width, etc) into the addend.  This
8170    information is extracted from CGEN-generated operand tables within gas.
8171
8172    Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
8173    internal) representing prefix-notation expressions, including but not
8174    limited to those sorts of expressions normally encoded as addends in the
8175    addend field.  The symbol mangling format is:
8176
8177    <node> := <literal>
8178           |  <unary-operator> ':' <node>
8179           |  <binary-operator> ':' <node> ':' <node>
8180           ;
8181
8182    <literal> := 's' <digits=N> ':' <N character symbol name>
8183              |  'S' <digits=N> ':' <N character section name>
8184              |  '#' <hexdigits>
8185              ;
8186
8187    <binary-operator> := as in C
8188    <unary-operator> := as in C, plus "0-" for unambiguous negation.  */
8189
8190 static void
8191 set_symbol_value (bfd *bfd_with_globals,
8192                   Elf_Internal_Sym *isymbuf,
8193                   size_t locsymcount,
8194                   size_t symidx,
8195                   bfd_vma val)
8196 {
8197   struct elf_link_hash_entry **sym_hashes;
8198   struct elf_link_hash_entry *h;
8199   size_t extsymoff = locsymcount;
8200
8201   if (symidx < locsymcount)
8202     {
8203       Elf_Internal_Sym *sym;
8204
8205       sym = isymbuf + symidx;
8206       if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
8207         {
8208           /* It is a local symbol: move it to the
8209              "absolute" section and give it a value.  */
8210           sym->st_shndx = SHN_ABS;
8211           sym->st_value = val;
8212           return;
8213         }
8214       BFD_ASSERT (elf_bad_symtab (bfd_with_globals));
8215       extsymoff = 0;
8216     }
8217
8218   /* It is a global symbol: set its link type
8219      to "defined" and give it a value.  */
8220
8221   sym_hashes = elf_sym_hashes (bfd_with_globals);
8222   h = sym_hashes [symidx - extsymoff];
8223   while (h->root.type == bfd_link_hash_indirect
8224          || h->root.type == bfd_link_hash_warning)
8225     h = (struct elf_link_hash_entry *) h->root.u.i.link;
8226   h->root.type = bfd_link_hash_defined;
8227   h->root.u.def.value = val;
8228   h->root.u.def.section = bfd_abs_section_ptr;
8229 }
8230
8231 static bfd_boolean
8232 resolve_symbol (const char *name,
8233                 bfd *input_bfd,
8234                 struct elf_final_link_info *flinfo,
8235                 bfd_vma *result,
8236                 Elf_Internal_Sym *isymbuf,
8237                 size_t locsymcount)
8238 {
8239   Elf_Internal_Sym *sym;
8240   struct bfd_link_hash_entry *global_entry;
8241   const char *candidate = NULL;
8242   Elf_Internal_Shdr *symtab_hdr;
8243   size_t i;
8244
8245   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
8246
8247   for (i = 0; i < locsymcount; ++ i)
8248     {
8249       sym = isymbuf + i;
8250
8251       if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
8252         continue;
8253
8254       candidate = bfd_elf_string_from_elf_section (input_bfd,
8255                                                    symtab_hdr->sh_link,
8256                                                    sym->st_name);
8257 #ifdef DEBUG
8258       printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n",
8259               name, candidate, (unsigned long) sym->st_value);
8260 #endif
8261       if (candidate && strcmp (candidate, name) == 0)
8262         {
8263           asection *sec = flinfo->sections [i];
8264
8265           *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0);
8266           *result += sec->output_offset + sec->output_section->vma;
8267 #ifdef DEBUG
8268           printf ("Found symbol with value %8.8lx\n",
8269                   (unsigned long) *result);
8270 #endif
8271           return TRUE;
8272         }
8273     }
8274
8275   /* Hmm, haven't found it yet. perhaps it is a global.  */
8276   global_entry = bfd_link_hash_lookup (flinfo->info->hash, name,
8277                                        FALSE, FALSE, TRUE);
8278   if (!global_entry)
8279     return FALSE;
8280
8281   if (global_entry->type == bfd_link_hash_defined
8282       || global_entry->type == bfd_link_hash_defweak)
8283     {
8284       *result = (global_entry->u.def.value
8285                  + global_entry->u.def.section->output_section->vma
8286                  + global_entry->u.def.section->output_offset);
8287 #ifdef DEBUG
8288       printf ("Found GLOBAL symbol '%s' with value %8.8lx\n",
8289               global_entry->root.string, (unsigned long) *result);
8290 #endif
8291       return TRUE;
8292     }
8293
8294   return FALSE;
8295 }
8296
8297 /* Looks up NAME in SECTIONS.  If found sets RESULT to NAME's address (in
8298    bytes) and returns TRUE, otherwise returns FALSE.  Accepts pseudo-section
8299    names like "foo.end" which is the end address of section "foo".  */
8300
8301 static bfd_boolean
8302 resolve_section (const char *name,
8303                  asection *sections,
8304                  bfd_vma *result,
8305                  bfd * abfd)
8306 {
8307   asection *curr;
8308   unsigned int len;
8309
8310   for (curr = sections; curr; curr = curr->next)
8311     if (strcmp (curr->name, name) == 0)
8312       {
8313         *result = curr->vma;
8314         return TRUE;
8315       }
8316
8317   /* Hmm. still haven't found it. try pseudo-section names.  */
8318   /* FIXME: This could be coded more efficiently...  */
8319   for (curr = sections; curr; curr = curr->next)
8320     {
8321       len = strlen (curr->name);
8322       if (len > strlen (name))
8323         continue;
8324
8325       if (strncmp (curr->name, name, len) == 0)
8326         {
8327           if (strncmp (".end", name + len, 4) == 0)
8328             {
8329               *result = curr->vma + curr->size / bfd_octets_per_byte (abfd);
8330               return TRUE;
8331             }
8332
8333           /* Insert more pseudo-section names here, if you like.  */
8334         }
8335     }
8336
8337   return FALSE;
8338 }
8339
8340 static void
8341 undefined_reference (const char *reftype, const char *name)
8342 {
8343   /* xgettext:c-format */
8344   _bfd_error_handler (_("undefined %s reference in complex symbol: %s"),
8345                       reftype, name);
8346 }
8347
8348 static bfd_boolean
8349 eval_symbol (bfd_vma *result,
8350              const char **symp,
8351              bfd *input_bfd,
8352              struct elf_final_link_info *flinfo,
8353              bfd_vma dot,
8354              Elf_Internal_Sym *isymbuf,
8355              size_t locsymcount,
8356              int signed_p)
8357 {
8358   size_t len;
8359   size_t symlen;
8360   bfd_vma a;
8361   bfd_vma b;
8362   char symbuf[4096];
8363   const char *sym = *symp;
8364   const char *symend;
8365   bfd_boolean symbol_is_section = FALSE;
8366
8367   len = strlen (sym);
8368   symend = sym + len;
8369
8370   if (len < 1 || len > sizeof (symbuf))
8371     {
8372       bfd_set_error (bfd_error_invalid_operation);
8373       return FALSE;
8374     }
8375
8376   switch (* sym)
8377     {
8378     case '.':
8379       *result = dot;
8380       *symp = sym + 1;
8381       return TRUE;
8382
8383     case '#':
8384       ++sym;
8385       *result = strtoul (sym, (char **) symp, 16);
8386       return TRUE;
8387
8388     case 'S':
8389       symbol_is_section = TRUE;
8390       /* Fall through.  */
8391     case 's':
8392       ++sym;
8393       symlen = strtol (sym, (char **) symp, 10);
8394       sym = *symp + 1; /* Skip the trailing ':'.  */
8395
8396       if (symend < sym || symlen + 1 > sizeof (symbuf))
8397         {
8398           bfd_set_error (bfd_error_invalid_operation);
8399           return FALSE;
8400         }
8401
8402       memcpy (symbuf, sym, symlen);
8403       symbuf[symlen] = '\0';
8404       *symp = sym + symlen;
8405
8406       /* Is it always possible, with complex symbols, that gas "mis-guessed"
8407          the symbol as a section, or vice-versa. so we're pretty liberal in our
8408          interpretation here; section means "try section first", not "must be a
8409          section", and likewise with symbol.  */
8410
8411       if (symbol_is_section)
8412         {
8413           if (!resolve_section (symbuf, flinfo->output_bfd->sections, result, input_bfd)
8414               && !resolve_symbol (symbuf, input_bfd, flinfo, result,
8415                                   isymbuf, locsymcount))
8416             {
8417               undefined_reference ("section", symbuf);
8418               return FALSE;
8419             }
8420         }
8421       else
8422         {
8423           if (!resolve_symbol (symbuf, input_bfd, flinfo, result,
8424                                isymbuf, locsymcount)
8425               && !resolve_section (symbuf, flinfo->output_bfd->sections,
8426                                    result, input_bfd))
8427             {
8428               undefined_reference ("symbol", symbuf);
8429               return FALSE;
8430             }
8431         }
8432
8433       return TRUE;
8434
8435       /* All that remains are operators.  */
8436
8437 #define UNARY_OP(op)                                            \
8438   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
8439     {                                                           \
8440       sym += strlen (#op);                                      \
8441       if (*sym == ':')                                          \
8442         ++sym;                                                  \
8443       *symp = sym;                                              \
8444       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,       \
8445                         isymbuf, locsymcount, signed_p))        \
8446         return FALSE;                                           \
8447       if (signed_p)                                             \
8448         *result = op ((bfd_signed_vma) a);                      \
8449       else                                                      \
8450         *result = op a;                                         \
8451       return TRUE;                                              \
8452     }
8453
8454 #define BINARY_OP(op)                                           \
8455   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
8456     {                                                           \
8457       sym += strlen (#op);                                      \
8458       if (*sym == ':')                                          \
8459         ++sym;                                                  \
8460       *symp = sym;                                              \
8461       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,       \
8462                         isymbuf, locsymcount, signed_p))        \
8463         return FALSE;                                           \
8464       ++*symp;                                                  \
8465       if (!eval_symbol (&b, symp, input_bfd, flinfo, dot,       \
8466                         isymbuf, locsymcount, signed_p))        \
8467         return FALSE;                                           \
8468       if (signed_p)                                             \
8469         *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \
8470       else                                                      \
8471         *result = a op b;                                       \
8472       return TRUE;                                              \
8473     }
8474
8475     default:
8476       UNARY_OP  (0-);
8477       BINARY_OP (<<);
8478       BINARY_OP (>>);
8479       BINARY_OP (==);
8480       BINARY_OP (!=);
8481       BINARY_OP (<=);
8482       BINARY_OP (>=);
8483       BINARY_OP (&&);
8484       BINARY_OP (||);
8485       UNARY_OP  (~);
8486       UNARY_OP  (!);
8487       BINARY_OP (*);
8488       BINARY_OP (/);
8489       BINARY_OP (%);
8490       BINARY_OP (^);
8491       BINARY_OP (|);
8492       BINARY_OP (&);
8493       BINARY_OP (+);
8494       BINARY_OP (-);
8495       BINARY_OP (<);
8496       BINARY_OP (>);
8497 #undef UNARY_OP
8498 #undef BINARY_OP
8499       _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
8500       bfd_set_error (bfd_error_invalid_operation);
8501       return FALSE;
8502     }
8503 }
8504
8505 static void
8506 put_value (bfd_vma size,
8507            unsigned long chunksz,
8508            bfd *input_bfd,
8509            bfd_vma x,
8510            bfd_byte *location)
8511 {
8512   location += (size - chunksz);
8513
8514   for (; size; size -= chunksz, location -= chunksz)
8515     {
8516       switch (chunksz)
8517         {
8518         case 1:
8519           bfd_put_8 (input_bfd, x, location);
8520           x >>= 8;
8521           break;
8522         case 2:
8523           bfd_put_16 (input_bfd, x, location);
8524           x >>= 16;
8525           break;
8526         case 4:
8527           bfd_put_32 (input_bfd, x, location);
8528           /* Computed this way because x >>= 32 is undefined if x is a 32-bit value.  */
8529           x >>= 16;
8530           x >>= 16;
8531           break;
8532 #ifdef BFD64
8533         case 8:
8534           bfd_put_64 (input_bfd, x, location);
8535           /* Computed this way because x >>= 64 is undefined if x is a 64-bit value.  */
8536           x >>= 32;
8537           x >>= 32;
8538           break;
8539 #endif
8540         default:
8541           abort ();
8542           break;
8543         }
8544     }
8545 }
8546
8547 static bfd_vma
8548 get_value (bfd_vma size,
8549            unsigned long chunksz,
8550            bfd *input_bfd,
8551            bfd_byte *location)
8552 {
8553   int shift;
8554   bfd_vma x = 0;
8555
8556   /* Sanity checks.  */
8557   BFD_ASSERT (chunksz <= sizeof (x)
8558               && size >= chunksz
8559               && chunksz != 0
8560               && (size % chunksz) == 0
8561               && input_bfd != NULL
8562               && location != NULL);
8563
8564   if (chunksz == sizeof (x))
8565     {
8566       BFD_ASSERT (size == chunksz);
8567
8568       /* Make sure that we do not perform an undefined shift operation.
8569          We know that size == chunksz so there will only be one iteration
8570          of the loop below.  */
8571       shift = 0;
8572     }
8573   else
8574     shift = 8 * chunksz;
8575
8576   for (; size; size -= chunksz, location += chunksz)
8577     {
8578       switch (chunksz)
8579         {
8580         case 1:
8581           x = (x << shift) | bfd_get_8 (input_bfd, location);
8582           break;
8583         case 2:
8584           x = (x << shift) | bfd_get_16 (input_bfd, location);
8585           break;
8586         case 4:
8587           x = (x << shift) | bfd_get_32 (input_bfd, location);
8588           break;
8589 #ifdef BFD64
8590         case 8:
8591           x = (x << shift) | bfd_get_64 (input_bfd, location);
8592           break;
8593 #endif
8594         default:
8595           abort ();
8596         }
8597     }
8598   return x;
8599 }
8600
8601 static void
8602 decode_complex_addend (unsigned long *start,   /* in bits */
8603                        unsigned long *oplen,   /* in bits */
8604                        unsigned long *len,     /* in bits */
8605                        unsigned long *wordsz,  /* in bytes */
8606                        unsigned long *chunksz, /* in bytes */
8607                        unsigned long *lsb0_p,
8608                        unsigned long *signed_p,
8609                        unsigned long *trunc_p,
8610                        unsigned long encoded)
8611 {
8612   * start     =  encoded        & 0x3F;
8613   * len       = (encoded >>  6) & 0x3F;
8614   * oplen     = (encoded >> 12) & 0x3F;
8615   * wordsz    = (encoded >> 18) & 0xF;
8616   * chunksz   = (encoded >> 22) & 0xF;
8617   * lsb0_p    = (encoded >> 27) & 1;
8618   * signed_p  = (encoded >> 28) & 1;
8619   * trunc_p   = (encoded >> 29) & 1;
8620 }
8621
8622 bfd_reloc_status_type
8623 bfd_elf_perform_complex_relocation (bfd *input_bfd,
8624                                     asection *input_section ATTRIBUTE_UNUSED,
8625                                     bfd_byte *contents,
8626                                     Elf_Internal_Rela *rel,
8627                                     bfd_vma relocation)
8628 {
8629   bfd_vma shift, x, mask;
8630   unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p;
8631   bfd_reloc_status_type r;
8632
8633   /*  Perform this reloc, since it is complex.
8634       (this is not to say that it necessarily refers to a complex
8635       symbol; merely that it is a self-describing CGEN based reloc.
8636       i.e. the addend has the complete reloc information (bit start, end,
8637       word size, etc) encoded within it.).  */
8638
8639   decode_complex_addend (&start, &oplen, &len, &wordsz,
8640                          &chunksz, &lsb0_p, &signed_p,
8641                          &trunc_p, rel->r_addend);
8642
8643   mask = (((1L << (len - 1)) - 1) << 1) | 1;
8644
8645   if (lsb0_p)
8646     shift = (start + 1) - len;
8647   else
8648     shift = (8 * wordsz) - (start + len);
8649
8650   x = get_value (wordsz, chunksz, input_bfd,
8651                  contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
8652
8653 #ifdef DEBUG
8654   printf ("Doing complex reloc: "
8655           "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
8656           "chunksz %ld, start %ld, len %ld, oplen %ld\n"
8657           "    dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
8658           lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
8659           oplen, (unsigned long) x, (unsigned long) mask,
8660           (unsigned long) relocation);
8661 #endif
8662
8663   r = bfd_reloc_ok;
8664   if (! trunc_p)
8665     /* Now do an overflow check.  */
8666     r = bfd_check_overflow ((signed_p
8667                              ? complain_overflow_signed
8668                              : complain_overflow_unsigned),
8669                             len, 0, (8 * wordsz),
8670                             relocation);
8671
8672   /* Do the deed.  */
8673   x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
8674
8675 #ifdef DEBUG
8676   printf ("           relocation: %8.8lx\n"
8677           "         shifted mask: %8.8lx\n"
8678           " shifted/masked reloc: %8.8lx\n"
8679           "               result: %8.8lx\n",
8680           (unsigned long) relocation, (unsigned long) (mask << shift),
8681           (unsigned long) ((relocation & mask) << shift), (unsigned long) x);
8682 #endif
8683   put_value (wordsz, chunksz, input_bfd, x,
8684              contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
8685   return r;
8686 }
8687
8688 /* Functions to read r_offset from external (target order) reloc
8689    entry.  Faster than bfd_getl32 et al, because we let the compiler
8690    know the value is aligned.  */
8691
8692 static bfd_vma
8693 ext32l_r_offset (const void *p)
8694 {
8695   union aligned32
8696   {
8697     uint32_t v;
8698     unsigned char c[4];
8699   };
8700   const union aligned32 *a
8701     = (const union aligned32 *) &((const Elf32_External_Rel *) p)->r_offset;
8702
8703   uint32_t aval = (  (uint32_t) a->c[0]
8704                    | (uint32_t) a->c[1] << 8
8705                    | (uint32_t) a->c[2] << 16
8706                    | (uint32_t) a->c[3] << 24);
8707   return aval;
8708 }
8709
8710 static bfd_vma
8711 ext32b_r_offset (const void *p)
8712 {
8713   union aligned32
8714   {
8715     uint32_t v;
8716     unsigned char c[4];
8717   };
8718   const union aligned32 *a
8719     = (const union aligned32 *) &((const Elf32_External_Rel *) p)->r_offset;
8720
8721   uint32_t aval = (  (uint32_t) a->c[0] << 24
8722                    | (uint32_t) a->c[1] << 16
8723                    | (uint32_t) a->c[2] << 8
8724                    | (uint32_t) a->c[3]);
8725   return aval;
8726 }
8727
8728 #ifdef BFD_HOST_64_BIT
8729 static bfd_vma
8730 ext64l_r_offset (const void *p)
8731 {
8732   union aligned64
8733   {
8734     uint64_t v;
8735     unsigned char c[8];
8736   };
8737   const union aligned64 *a
8738     = (const union aligned64 *) &((const Elf64_External_Rel *) p)->r_offset;
8739
8740   uint64_t aval = (  (uint64_t) a->c[0]
8741                    | (uint64_t) a->c[1] << 8
8742                    | (uint64_t) a->c[2] << 16
8743                    | (uint64_t) a->c[3] << 24
8744                    | (uint64_t) a->c[4] << 32
8745                    | (uint64_t) a->c[5] << 40
8746                    | (uint64_t) a->c[6] << 48
8747                    | (uint64_t) a->c[7] << 56);
8748   return aval;
8749 }
8750
8751 static bfd_vma
8752 ext64b_r_offset (const void *p)
8753 {
8754   union aligned64
8755   {
8756     uint64_t v;
8757     unsigned char c[8];
8758   };
8759   const union aligned64 *a
8760     = (const union aligned64 *) &((const Elf64_External_Rel *) p)->r_offset;
8761
8762   uint64_t aval = (  (uint64_t) a->c[0] << 56
8763                    | (uint64_t) a->c[1] << 48
8764                    | (uint64_t) a->c[2] << 40
8765                    | (uint64_t) a->c[3] << 32
8766                    | (uint64_t) a->c[4] << 24
8767                    | (uint64_t) a->c[5] << 16
8768                    | (uint64_t) a->c[6] << 8
8769                    | (uint64_t) a->c[7]);
8770   return aval;
8771 }
8772 #endif
8773
8774 /* When performing a relocatable link, the input relocations are
8775    preserved.  But, if they reference global symbols, the indices
8776    referenced must be updated.  Update all the relocations found in
8777    RELDATA.  */
8778
8779 static bfd_boolean
8780 elf_link_adjust_relocs (bfd *abfd,
8781                         asection *sec,
8782                         struct bfd_elf_section_reloc_data *reldata,
8783                         bfd_boolean sort,
8784                         struct bfd_link_info *info)
8785 {
8786   unsigned int i;
8787   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8788   bfd_byte *erela;
8789   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8790   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8791   bfd_vma r_type_mask;
8792   int r_sym_shift;
8793   unsigned int count = reldata->count;
8794   struct elf_link_hash_entry **rel_hash = reldata->hashes;
8795
8796   if (reldata->hdr->sh_entsize == bed->s->sizeof_rel)
8797     {
8798       swap_in = bed->s->swap_reloc_in;
8799       swap_out = bed->s->swap_reloc_out;
8800     }
8801   else if (reldata->hdr->sh_entsize == bed->s->sizeof_rela)
8802     {
8803       swap_in = bed->s->swap_reloca_in;
8804       swap_out = bed->s->swap_reloca_out;
8805     }
8806   else
8807     abort ();
8808
8809   if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
8810     abort ();
8811
8812   if (bed->s->arch_size == 32)
8813     {
8814       r_type_mask = 0xff;
8815       r_sym_shift = 8;
8816     }
8817   else
8818     {
8819       r_type_mask = 0xffffffff;
8820       r_sym_shift = 32;
8821     }
8822
8823   erela = reldata->hdr->contents;
8824   for (i = 0; i < count; i++, rel_hash++, erela += reldata->hdr->sh_entsize)
8825     {
8826       Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
8827       unsigned int j;
8828
8829       if (*rel_hash == NULL)
8830         continue;
8831
8832       if ((*rel_hash)->indx == -2
8833           && info->gc_sections
8834           && ! info->gc_keep_exported)
8835         {
8836           /* PR 21524: Let the user know if a symbol was removed by garbage collection.  */
8837           _bfd_error_handler (_("%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"),
8838                               abfd, sec,
8839                               (*rel_hash)->root.root.string);
8840           _bfd_error_handler (_("%pB:%pA: error: try relinking with --gc-keep-exported enabled"),
8841                               abfd, sec);
8842           bfd_set_error (bfd_error_invalid_operation);
8843           return FALSE;
8844         }
8845       BFD_ASSERT ((*rel_hash)->indx >= 0);
8846
8847       (*swap_in) (abfd, erela, irela);
8848       for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
8849         irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
8850                            | (irela[j].r_info & r_type_mask));
8851       (*swap_out) (abfd, irela, erela);
8852     }
8853
8854   if (bed->elf_backend_update_relocs)
8855     (*bed->elf_backend_update_relocs) (sec, reldata);
8856
8857   if (sort && count != 0)
8858     {
8859       bfd_vma (*ext_r_off) (const void *);
8860       bfd_vma r_off;
8861       size_t elt_size;
8862       bfd_byte *base, *end, *p, *loc;
8863       bfd_byte *buf = NULL;
8864
8865       if (bed->s->arch_size == 32)
8866         {
8867           if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8868             ext_r_off = ext32l_r_offset;
8869           else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8870             ext_r_off = ext32b_r_offset;
8871           else
8872             abort ();
8873         }
8874       else
8875         {
8876 #ifdef BFD_HOST_64_BIT
8877           if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8878             ext_r_off = ext64l_r_offset;
8879           else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8880             ext_r_off = ext64b_r_offset;
8881           else
8882 #endif
8883             abort ();
8884         }
8885
8886       /*  Must use a stable sort here.  A modified insertion sort,
8887           since the relocs are mostly sorted already.  */
8888       elt_size = reldata->hdr->sh_entsize;
8889       base = reldata->hdr->contents;
8890       end = base + count * elt_size;
8891       if (elt_size > sizeof (Elf64_External_Rela))
8892         abort ();
8893
8894       /* Ensure the first element is lowest.  This acts as a sentinel,
8895          speeding the main loop below.  */
8896       r_off = (*ext_r_off) (base);
8897       for (p = loc = base; (p += elt_size) < end; )
8898         {
8899           bfd_vma r_off2 = (*ext_r_off) (p);
8900           if (r_off > r_off2)
8901             {
8902               r_off = r_off2;
8903               loc = p;
8904             }
8905         }
8906       if (loc != base)
8907         {
8908           /* Don't just swap *base and *loc as that changes the order
8909              of the original base[0] and base[1] if they happen to
8910              have the same r_offset.  */
8911           bfd_byte onebuf[sizeof (Elf64_External_Rela)];
8912           memcpy (onebuf, loc, elt_size);
8913           memmove (base + elt_size, base, loc - base);
8914           memcpy (base, onebuf, elt_size);
8915         }
8916
8917       for (p = base + elt_size; (p += elt_size) < end; )
8918         {
8919           /* base to p is sorted, *p is next to insert.  */
8920           r_off = (*ext_r_off) (p);
8921           /* Search the sorted region for location to insert.  */
8922           loc = p - elt_size;
8923           while (r_off < (*ext_r_off) (loc))
8924             loc -= elt_size;
8925           loc += elt_size;
8926           if (loc != p)
8927             {
8928               /* Chances are there is a run of relocs to insert here,
8929                  from one of more input files.  Files are not always
8930                  linked in order due to the way elf_link_input_bfd is
8931                  called.  See pr17666.  */
8932               size_t sortlen = p - loc;
8933               bfd_vma r_off2 = (*ext_r_off) (loc);
8934               size_t runlen = elt_size;
8935               size_t buf_size = 96 * 1024;
8936               while (p + runlen < end
8937                      && (sortlen <= buf_size
8938                          || runlen + elt_size <= buf_size)
8939                      && r_off2 > (*ext_r_off) (p + runlen))
8940                 runlen += elt_size;
8941               if (buf == NULL)
8942                 {
8943                   buf = bfd_malloc (buf_size);
8944                   if (buf == NULL)
8945                     return FALSE;
8946                 }
8947               if (runlen < sortlen)
8948                 {
8949                   memcpy (buf, p, runlen);
8950                   memmove (loc + runlen, loc, sortlen);
8951                   memcpy (loc, buf, runlen);
8952                 }
8953               else
8954                 {
8955                   memcpy (buf, loc, sortlen);
8956                   memmove (loc, p, runlen);
8957                   memcpy (loc + runlen, buf, sortlen);
8958                 }
8959               p += runlen - elt_size;
8960             }
8961         }
8962       /* Hashes are no longer valid.  */
8963       free (reldata->hashes);
8964       reldata->hashes = NULL;
8965       free (buf);
8966     }
8967   return TRUE;
8968 }
8969
8970 struct elf_link_sort_rela
8971 {
8972   union {
8973     bfd_vma offset;
8974     bfd_vma sym_mask;
8975   } u;
8976   enum elf_reloc_type_class type;
8977   /* We use this as an array of size int_rels_per_ext_rel.  */
8978   Elf_Internal_Rela rela[1];
8979 };
8980
8981 static int
8982 elf_link_sort_cmp1 (const void *A, const void *B)
8983 {
8984   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8985   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8986   int relativea, relativeb;
8987
8988   relativea = a->type == reloc_class_relative;
8989   relativeb = b->type == reloc_class_relative;
8990
8991   if (relativea < relativeb)
8992     return 1;
8993   if (relativea > relativeb)
8994     return -1;
8995   if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
8996     return -1;
8997   if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
8998     return 1;
8999   if (a->rela->r_offset < b->rela->r_offset)
9000     return -1;
9001   if (a->rela->r_offset > b->rela->r_offset)
9002     return 1;
9003   return 0;
9004 }
9005
9006 static int
9007 elf_link_sort_cmp2 (const void *A, const void *B)
9008 {
9009   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
9010   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
9011
9012   if (a->type < b->type)
9013     return -1;
9014   if (a->type > b->type)
9015     return 1;
9016   if (a->u.offset < b->u.offset)
9017     return -1;
9018   if (a->u.offset > b->u.offset)
9019     return 1;
9020   if (a->rela->r_offset < b->rela->r_offset)
9021     return -1;
9022   if (a->rela->r_offset > b->rela->r_offset)
9023     return 1;
9024   return 0;
9025 }
9026
9027 static size_t
9028 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
9029 {
9030   asection *dynamic_relocs;
9031   asection *rela_dyn;
9032   asection *rel_dyn;
9033   bfd_size_type count, size;
9034   size_t i, ret, sort_elt, ext_size;
9035   bfd_byte *sort, *s_non_relative, *p;
9036   struct elf_link_sort_rela *sq;
9037   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9038   int i2e = bed->s->int_rels_per_ext_rel;
9039   unsigned int opb = bfd_octets_per_byte (abfd);
9040   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
9041   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
9042   struct bfd_link_order *lo;
9043   bfd_vma r_sym_mask;
9044   bfd_boolean use_rela;
9045
9046   /* Find a dynamic reloc section.  */
9047   rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
9048   rel_dyn  = bfd_get_section_by_name (abfd, ".rel.dyn");
9049   if (rela_dyn != NULL && rela_dyn->size > 0
9050       && rel_dyn != NULL && rel_dyn->size > 0)
9051     {
9052       bfd_boolean use_rela_initialised = FALSE;
9053
9054       /* This is just here to stop gcc from complaining.
9055          Its initialization checking code is not perfect.  */
9056       use_rela = TRUE;
9057
9058       /* Both sections are present.  Examine the sizes
9059          of the indirect sections to help us choose.  */
9060       for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
9061         if (lo->type == bfd_indirect_link_order)
9062           {
9063             asection *o = lo->u.indirect.section;
9064
9065             if ((o->size % bed->s->sizeof_rela) == 0)
9066               {
9067                 if ((o->size % bed->s->sizeof_rel) == 0)
9068                   /* Section size is divisible by both rel and rela sizes.
9069                      It is of no help to us.  */
9070                   ;
9071                 else
9072                   {
9073                     /* Section size is only divisible by rela.  */
9074                     if (use_rela_initialised && !use_rela)
9075                       {
9076                         _bfd_error_handler (_("%pB: unable to sort relocs - "
9077                                               "they are in more than one size"),
9078                                             abfd);
9079                         bfd_set_error (bfd_error_invalid_operation);
9080                         return 0;
9081                       }
9082                     else
9083                       {
9084                         use_rela = TRUE;
9085                         use_rela_initialised = TRUE;
9086                       }
9087                   }
9088               }
9089             else if ((o->size % bed->s->sizeof_rel) == 0)
9090               {
9091                 /* Section size is only divisible by rel.  */
9092                 if (use_rela_initialised && use_rela)
9093                   {
9094                     _bfd_error_handler (_("%pB: unable to sort relocs - "
9095                                           "they are in more than one size"),
9096                                         abfd);
9097                     bfd_set_error (bfd_error_invalid_operation);
9098                     return 0;
9099                   }
9100                 else
9101                   {
9102                     use_rela = FALSE;
9103                     use_rela_initialised = TRUE;
9104                   }
9105               }
9106             else
9107               {
9108                 /* The section size is not divisible by either -
9109                    something is wrong.  */
9110                 _bfd_error_handler (_("%pB: unable to sort relocs - "
9111                                       "they are of an unknown size"), abfd);
9112                 bfd_set_error (bfd_error_invalid_operation);
9113                 return 0;
9114               }
9115           }
9116
9117       for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
9118         if (lo->type == bfd_indirect_link_order)
9119           {
9120             asection *o = lo->u.indirect.section;
9121
9122             if ((o->size % bed->s->sizeof_rela) == 0)
9123               {
9124                 if ((o->size % bed->s->sizeof_rel) == 0)
9125                   /* Section size is divisible by both rel and rela sizes.
9126                      It is of no help to us.  */
9127                   ;
9128                 else
9129                   {
9130                     /* Section size is only divisible by rela.  */
9131                     if (use_rela_initialised && !use_rela)
9132                       {
9133                         _bfd_error_handler (_("%pB: unable to sort relocs - "
9134                                               "they are in more than one size"),
9135                                             abfd);
9136                         bfd_set_error (bfd_error_invalid_operation);
9137                         return 0;
9138                       }
9139                     else
9140                       {
9141                         use_rela = TRUE;
9142                         use_rela_initialised = TRUE;
9143                       }
9144                   }
9145               }
9146             else if ((o->size % bed->s->sizeof_rel) == 0)
9147               {
9148                 /* Section size is only divisible by rel.  */
9149                 if (use_rela_initialised && use_rela)
9150                   {
9151                     _bfd_error_handler (_("%pB: unable to sort relocs - "
9152                                           "they are in more than one size"),
9153                                         abfd);
9154                     bfd_set_error (bfd_error_invalid_operation);
9155                     return 0;
9156                   }
9157                 else
9158                   {
9159                     use_rela = FALSE;
9160                     use_rela_initialised = TRUE;
9161                   }
9162               }
9163             else
9164               {
9165                 /* The section size is not divisible by either -
9166                    something is wrong.  */
9167                 _bfd_error_handler (_("%pB: unable to sort relocs - "
9168                                       "they are of an unknown size"), abfd);
9169                 bfd_set_error (bfd_error_invalid_operation);
9170                 return 0;
9171               }
9172           }
9173
9174       if (! use_rela_initialised)
9175         /* Make a guess.  */
9176         use_rela = TRUE;
9177     }
9178   else if (rela_dyn != NULL && rela_dyn->size > 0)
9179     use_rela = TRUE;
9180   else if (rel_dyn != NULL && rel_dyn->size > 0)
9181     use_rela = FALSE;
9182   else
9183     return 0;
9184
9185   if (use_rela)
9186     {
9187       dynamic_relocs = rela_dyn;
9188       ext_size = bed->s->sizeof_rela;
9189       swap_in = bed->s->swap_reloca_in;
9190       swap_out = bed->s->swap_reloca_out;
9191     }
9192   else
9193     {
9194       dynamic_relocs = rel_dyn;
9195       ext_size = bed->s->sizeof_rel;
9196       swap_in = bed->s->swap_reloc_in;
9197       swap_out = bed->s->swap_reloc_out;
9198     }
9199
9200   size = 0;
9201   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
9202     if (lo->type == bfd_indirect_link_order)
9203       size += lo->u.indirect.section->size;
9204
9205   if (size != dynamic_relocs->size)
9206     return 0;
9207
9208   sort_elt = (sizeof (struct elf_link_sort_rela)
9209               + (i2e - 1) * sizeof (Elf_Internal_Rela));
9210
9211   count = dynamic_relocs->size / ext_size;
9212   if (count == 0)
9213     return 0;
9214   sort = (bfd_byte *) bfd_zmalloc (sort_elt * count);
9215
9216   if (sort == NULL)
9217     {
9218       (*info->callbacks->warning)
9219         (info, _("not enough memory to sort relocations"), 0, abfd, 0, 0);
9220       return 0;
9221     }
9222
9223   if (bed->s->arch_size == 32)
9224     r_sym_mask = ~(bfd_vma) 0xff;
9225   else
9226     r_sym_mask = ~(bfd_vma) 0xffffffff;
9227
9228   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
9229     if (lo->type == bfd_indirect_link_order)
9230       {
9231         bfd_byte *erel, *erelend;
9232         asection *o = lo->u.indirect.section;
9233
9234         if (o->contents == NULL && o->size != 0)
9235           {
9236             /* This is a reloc section that is being handled as a normal
9237                section.  See bfd_section_from_shdr.  We can't combine
9238                relocs in this case.  */
9239             free (sort);
9240             return 0;
9241           }
9242         erel = o->contents;
9243         erelend = o->contents + o->size;
9244         p = sort + o->output_offset * opb / ext_size * sort_elt;
9245
9246         while (erel < erelend)
9247           {
9248             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
9249
9250             (*swap_in) (abfd, erel, s->rela);
9251             s->type = (*bed->elf_backend_reloc_type_class) (info, o, s->rela);
9252             s->u.sym_mask = r_sym_mask;
9253             p += sort_elt;
9254             erel += ext_size;
9255           }
9256       }
9257
9258   qsort (sort, count, sort_elt, elf_link_sort_cmp1);
9259
9260   for (i = 0, p = sort; i < count; i++, p += sort_elt)
9261     {
9262       struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
9263       if (s->type != reloc_class_relative)
9264         break;
9265     }
9266   ret = i;
9267   s_non_relative = p;
9268
9269   sq = (struct elf_link_sort_rela *) s_non_relative;
9270   for (; i < count; i++, p += sort_elt)
9271     {
9272       struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
9273       if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
9274         sq = sp;
9275       sp->u.offset = sq->rela->r_offset;
9276     }
9277
9278   qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
9279
9280   struct elf_link_hash_table *htab = elf_hash_table (info);
9281   if (htab->srelplt && htab->srelplt->output_section == dynamic_relocs)
9282     {
9283       /* We have plt relocs in .rela.dyn.  */
9284       sq = (struct elf_link_sort_rela *) sort;
9285       for (i = 0; i < count; i++)
9286         if (sq[count - i - 1].type != reloc_class_plt)
9287           break;
9288       if (i != 0 && htab->srelplt->size == i * ext_size)
9289         {
9290           struct bfd_link_order **plo;
9291           /* Put srelplt link_order last.  This is so the output_offset
9292              set in the next loop is correct for DT_JMPREL.  */
9293           for (plo = &dynamic_relocs->map_head.link_order; *plo != NULL; )
9294             if ((*plo)->type == bfd_indirect_link_order
9295                 && (*plo)->u.indirect.section == htab->srelplt)
9296               {
9297                 lo = *plo;
9298                 *plo = lo->next;
9299               }
9300             else
9301               plo = &(*plo)->next;
9302           *plo = lo;
9303           lo->next = NULL;
9304           dynamic_relocs->map_tail.link_order = lo;
9305         }
9306     }
9307
9308   p = sort;
9309   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
9310     if (lo->type == bfd_indirect_link_order)
9311       {
9312         bfd_byte *erel, *erelend;
9313         asection *o = lo->u.indirect.section;
9314
9315         erel = o->contents;
9316         erelend = o->contents + o->size;
9317         o->output_offset = (p - sort) / sort_elt * ext_size / opb;
9318         while (erel < erelend)
9319           {
9320             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
9321             (*swap_out) (abfd, s->rela, erel);
9322             p += sort_elt;
9323             erel += ext_size;
9324           }
9325       }
9326
9327   free (sort);
9328   *psec = dynamic_relocs;
9329   return ret;
9330 }
9331
9332 /* Add a symbol to the output symbol string table.  */
9333
9334 static int
9335 elf_link_output_symstrtab (struct elf_final_link_info *flinfo,
9336                            const char *name,
9337                            Elf_Internal_Sym *elfsym,
9338                            asection *input_sec,
9339                            struct elf_link_hash_entry *h)
9340 {
9341   int (*output_symbol_hook)
9342     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
9343      struct elf_link_hash_entry *);
9344   struct elf_link_hash_table *hash_table;
9345   const struct elf_backend_data *bed;
9346   bfd_size_type strtabsize;
9347
9348   BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
9349
9350   bed = get_elf_backend_data (flinfo->output_bfd);
9351   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
9352   if (output_symbol_hook != NULL)
9353     {
9354       int ret = (*output_symbol_hook) (flinfo->info, name, elfsym, input_sec, h);
9355       if (ret != 1)
9356         return ret;
9357     }
9358
9359   if (name == NULL
9360       || *name == '\0'
9361       || (input_sec->flags & SEC_EXCLUDE))
9362     elfsym->st_name = (unsigned long) -1;
9363   else
9364     {
9365       /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
9366          to get the final offset for st_name.  */
9367       elfsym->st_name
9368         = (unsigned long) _bfd_elf_strtab_add (flinfo->symstrtab,
9369                                                name, FALSE);
9370       if (elfsym->st_name == (unsigned long) -1)
9371         return 0;
9372     }
9373
9374   hash_table = elf_hash_table (flinfo->info);
9375   strtabsize = hash_table->strtabsize;
9376   if (strtabsize <= hash_table->strtabcount)
9377     {
9378       strtabsize += strtabsize;
9379       hash_table->strtabsize = strtabsize;
9380       strtabsize *= sizeof (*hash_table->strtab);
9381       hash_table->strtab
9382         = (struct elf_sym_strtab *) bfd_realloc (hash_table->strtab,
9383                                                  strtabsize);
9384       if (hash_table->strtab == NULL)
9385         return 0;
9386     }
9387   hash_table->strtab[hash_table->strtabcount].sym = *elfsym;
9388   hash_table->strtab[hash_table->strtabcount].dest_index
9389     = hash_table->strtabcount;
9390   hash_table->strtab[hash_table->strtabcount].destshndx_index
9391     = flinfo->symshndxbuf ? bfd_get_symcount (flinfo->output_bfd) : 0;
9392
9393   bfd_get_symcount (flinfo->output_bfd) += 1;
9394   hash_table->strtabcount += 1;
9395
9396   return 1;
9397 }
9398
9399 /* Swap symbols out to the symbol table and flush the output symbols to
9400    the file.  */
9401
9402 static bfd_boolean
9403 elf_link_swap_symbols_out (struct elf_final_link_info *flinfo)
9404 {
9405   struct elf_link_hash_table *hash_table = elf_hash_table (flinfo->info);
9406   bfd_size_type amt;
9407   size_t i;
9408   const struct elf_backend_data *bed;
9409   bfd_byte *symbuf;
9410   Elf_Internal_Shdr *hdr;
9411   file_ptr pos;
9412   bfd_boolean ret;
9413
9414   if (!hash_table->strtabcount)
9415     return TRUE;
9416
9417   BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
9418
9419   bed = get_elf_backend_data (flinfo->output_bfd);
9420
9421   amt = bed->s->sizeof_sym * hash_table->strtabcount;
9422   symbuf = (bfd_byte *) bfd_malloc (amt);
9423   if (symbuf == NULL)
9424     return FALSE;
9425
9426   if (flinfo->symshndxbuf)
9427     {
9428       amt = sizeof (Elf_External_Sym_Shndx);
9429       amt *= bfd_get_symcount (flinfo->output_bfd);
9430       flinfo->symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
9431       if (flinfo->symshndxbuf == NULL)
9432         {
9433           free (symbuf);
9434           return FALSE;
9435         }
9436     }
9437
9438   for (i = 0; i < hash_table->strtabcount; i++)
9439     {
9440       struct elf_sym_strtab *elfsym = &hash_table->strtab[i];
9441       if (elfsym->sym.st_name == (unsigned long) -1)
9442         elfsym->sym.st_name = 0;
9443       else
9444         elfsym->sym.st_name
9445           = (unsigned long) _bfd_elf_strtab_offset (flinfo->symstrtab,
9446                                                     elfsym->sym.st_name);
9447       bed->s->swap_symbol_out (flinfo->output_bfd, &elfsym->sym,
9448                                ((bfd_byte *) symbuf
9449                                 + (elfsym->dest_index
9450                                    * bed->s->sizeof_sym)),
9451                                (flinfo->symshndxbuf
9452                                 + elfsym->destshndx_index));
9453     }
9454
9455   hdr = &elf_tdata (flinfo->output_bfd)->symtab_hdr;
9456   pos = hdr->sh_offset + hdr->sh_size;
9457   amt = hash_table->strtabcount * bed->s->sizeof_sym;
9458   if (bfd_seek (flinfo->output_bfd, pos, SEEK_SET) == 0
9459       && bfd_bwrite (symbuf, amt, flinfo->output_bfd) == amt)
9460     {
9461       hdr->sh_size += amt;
9462       ret = TRUE;
9463     }
9464   else
9465     ret = FALSE;
9466
9467   free (symbuf);
9468
9469   free (hash_table->strtab);
9470   hash_table->strtab = NULL;
9471
9472   return ret;
9473 }
9474
9475 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
9476
9477 static bfd_boolean
9478 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
9479 {
9480   if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
9481       && sym->st_shndx < SHN_LORESERVE)
9482     {
9483       /* The gABI doesn't support dynamic symbols in output sections
9484          beyond 64k.  */
9485       _bfd_error_handler
9486         /* xgettext:c-format */
9487         (_("%pB: too many sections: %d (>= %d)"),
9488          abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
9489       bfd_set_error (bfd_error_nonrepresentable_section);
9490       return FALSE;
9491     }
9492   return TRUE;
9493 }
9494
9495 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
9496    allowing an unsatisfied unversioned symbol in the DSO to match a
9497    versioned symbol that would normally require an explicit version.
9498    We also handle the case that a DSO references a hidden symbol
9499    which may be satisfied by a versioned symbol in another DSO.  */
9500
9501 static bfd_boolean
9502 elf_link_check_versioned_symbol (struct bfd_link_info *info,
9503                                  const struct elf_backend_data *bed,
9504                                  struct elf_link_hash_entry *h)
9505 {
9506   bfd *abfd;
9507   struct elf_link_loaded_list *loaded;
9508
9509   if (!is_elf_hash_table (info->hash))
9510     return FALSE;
9511
9512   /* Check indirect symbol.  */
9513   while (h->root.type == bfd_link_hash_indirect)
9514     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9515
9516   switch (h->root.type)
9517     {
9518     default:
9519       abfd = NULL;
9520       break;
9521
9522     case bfd_link_hash_undefined:
9523     case bfd_link_hash_undefweak:
9524       abfd = h->root.u.undef.abfd;
9525       if (abfd == NULL
9526           || (abfd->flags & DYNAMIC) == 0
9527           || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
9528         return FALSE;
9529       break;
9530
9531     case bfd_link_hash_defined:
9532     case bfd_link_hash_defweak:
9533       abfd = h->root.u.def.section->owner;
9534       break;
9535
9536     case bfd_link_hash_common:
9537       abfd = h->root.u.c.p->section->owner;
9538       break;
9539     }
9540   BFD_ASSERT (abfd != NULL);
9541
9542   for (loaded = elf_hash_table (info)->loaded;
9543        loaded != NULL;
9544        loaded = loaded->next)
9545     {
9546       bfd *input;
9547       Elf_Internal_Shdr *hdr;
9548       size_t symcount;
9549       size_t extsymcount;
9550       size_t extsymoff;
9551       Elf_Internal_Shdr *versymhdr;
9552       Elf_Internal_Sym *isym;
9553       Elf_Internal_Sym *isymend;
9554       Elf_Internal_Sym *isymbuf;
9555       Elf_External_Versym *ever;
9556       Elf_External_Versym *extversym;
9557
9558       input = loaded->abfd;
9559
9560       /* We check each DSO for a possible hidden versioned definition.  */
9561       if (input == abfd
9562           || (input->flags & DYNAMIC) == 0
9563           || elf_dynversym (input) == 0)
9564         continue;
9565
9566       hdr = &elf_tdata (input)->dynsymtab_hdr;
9567
9568       symcount = hdr->sh_size / bed->s->sizeof_sym;
9569       if (elf_bad_symtab (input))
9570         {
9571           extsymcount = symcount;
9572           extsymoff = 0;
9573         }
9574       else
9575         {
9576           extsymcount = symcount - hdr->sh_info;
9577           extsymoff = hdr->sh_info;
9578         }
9579
9580       if (extsymcount == 0)
9581         continue;
9582
9583       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
9584                                       NULL, NULL, NULL);
9585       if (isymbuf == NULL)
9586         return FALSE;
9587
9588       /* Read in any version definitions.  */
9589       versymhdr = &elf_tdata (input)->dynversym_hdr;
9590       extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
9591       if (extversym == NULL)
9592         goto error_ret;
9593
9594       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
9595           || (bfd_bread (extversym, versymhdr->sh_size, input)
9596               != versymhdr->sh_size))
9597         {
9598           free (extversym);
9599         error_ret:
9600           free (isymbuf);
9601           return FALSE;
9602         }
9603
9604       ever = extversym + extsymoff;
9605       isymend = isymbuf + extsymcount;
9606       for (isym = isymbuf; isym < isymend; isym++, ever++)
9607         {
9608           const char *name;
9609           Elf_Internal_Versym iver;
9610           unsigned short version_index;
9611
9612           if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
9613               || isym->st_shndx == SHN_UNDEF)
9614             continue;
9615
9616           name = bfd_elf_string_from_elf_section (input,
9617                                                   hdr->sh_link,
9618                                                   isym->st_name);
9619           if (strcmp (name, h->root.root.string) != 0)
9620             continue;
9621
9622           _bfd_elf_swap_versym_in (input, ever, &iver);
9623
9624           if ((iver.vs_vers & VERSYM_HIDDEN) == 0
9625               && !(h->def_regular
9626                    && h->forced_local))
9627             {
9628               /* If we have a non-hidden versioned sym, then it should
9629                  have provided a definition for the undefined sym unless
9630                  it is defined in a non-shared object and forced local.
9631                */
9632               abort ();
9633             }
9634
9635           version_index = iver.vs_vers & VERSYM_VERSION;
9636           if (version_index == 1 || version_index == 2)
9637             {
9638               /* This is the base or first version.  We can use it.  */
9639               free (extversym);
9640               free (isymbuf);
9641               return TRUE;
9642             }
9643         }
9644
9645       free (extversym);
9646       free (isymbuf);
9647     }
9648
9649   return FALSE;
9650 }
9651
9652 /* Convert ELF common symbol TYPE.  */
9653
9654 static int
9655 elf_link_convert_common_type (struct bfd_link_info *info, int type)
9656 {
9657   /* Commom symbol can only appear in relocatable link.  */
9658   if (!bfd_link_relocatable (info))
9659     abort ();
9660   switch (info->elf_stt_common)
9661     {
9662     case unchanged:
9663       break;
9664     case elf_stt_common:
9665       type = STT_COMMON;
9666       break;
9667     case no_elf_stt_common:
9668       type = STT_OBJECT;
9669       break;
9670     }
9671   return type;
9672 }
9673
9674 /* Add an external symbol to the symbol table.  This is called from
9675    the hash table traversal routine.  When generating a shared object,
9676    we go through the symbol table twice.  The first time we output
9677    anything that might have been forced to local scope in a version
9678    script.  The second time we output the symbols that are still
9679    global symbols.  */
9680
9681 static bfd_boolean
9682 elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
9683 {
9684   struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh;
9685   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
9686   struct elf_final_link_info *flinfo = eoinfo->flinfo;
9687   bfd_boolean strip;
9688   Elf_Internal_Sym sym;
9689   asection *input_sec;
9690   const struct elf_backend_data *bed;
9691   long indx;
9692   int ret;
9693   unsigned int type;
9694
9695   if (h->root.type == bfd_link_hash_warning)
9696     {
9697       h = (struct elf_link_hash_entry *) h->root.u.i.link;
9698       if (h->root.type == bfd_link_hash_new)
9699         return TRUE;
9700     }
9701
9702   /* Decide whether to output this symbol in this pass.  */
9703   if (eoinfo->localsyms)
9704     {
9705       if (!h->forced_local)
9706         return TRUE;
9707     }
9708   else
9709     {
9710       if (h->forced_local)
9711         return TRUE;
9712     }
9713
9714   bed = get_elf_backend_data (flinfo->output_bfd);
9715
9716   if (h->root.type == bfd_link_hash_undefined)
9717     {
9718       /* If we have an undefined symbol reference here then it must have
9719          come from a shared library that is being linked in.  (Undefined
9720          references in regular files have already been handled unless
9721          they are in unreferenced sections which are removed by garbage
9722          collection).  */
9723       bfd_boolean ignore_undef = FALSE;
9724
9725       /* Some symbols may be special in that the fact that they're
9726          undefined can be safely ignored - let backend determine that.  */
9727       if (bed->elf_backend_ignore_undef_symbol)
9728         ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
9729
9730       /* If we are reporting errors for this situation then do so now.  */
9731       if (!ignore_undef
9732           && h->ref_dynamic
9733           && (!h->ref_regular || flinfo->info->gc_sections)
9734           && !elf_link_check_versioned_symbol (flinfo->info, bed, h)
9735           && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
9736         (*flinfo->info->callbacks->undefined_symbol)
9737           (flinfo->info, h->root.root.string,
9738            h->ref_regular ? NULL : h->root.u.undef.abfd,
9739            NULL, 0,
9740            flinfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR);
9741
9742       /* Strip a global symbol defined in a discarded section.  */
9743       if (h->indx == -3)
9744         return TRUE;
9745     }
9746
9747   /* We should also warn if a forced local symbol is referenced from
9748      shared libraries.  */
9749   if (bfd_link_executable (flinfo->info)
9750       && h->forced_local
9751       && h->ref_dynamic
9752       && h->def_regular
9753       && !h->dynamic_def
9754       && h->ref_dynamic_nonweak
9755       && !elf_link_check_versioned_symbol (flinfo->info, bed, h))
9756     {
9757       bfd *def_bfd;
9758       const char *msg;
9759       struct elf_link_hash_entry *hi = h;
9760
9761       /* Check indirect symbol.  */
9762       while (hi->root.type == bfd_link_hash_indirect)
9763         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
9764
9765       if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
9766         /* xgettext:c-format */
9767         msg = _("%pB: internal symbol `%s' in %pB is referenced by DSO");
9768       else if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
9769         /* xgettext:c-format */
9770         msg = _("%pB: hidden symbol `%s' in %pB is referenced by DSO");
9771       else
9772         /* xgettext:c-format */
9773         msg = _("%pB: local symbol `%s' in %pB is referenced by DSO");
9774       def_bfd = flinfo->output_bfd;
9775       if (hi->root.u.def.section != bfd_abs_section_ptr)
9776         def_bfd = hi->root.u.def.section->owner;
9777       _bfd_error_handler (msg, flinfo->output_bfd,
9778                           h->root.root.string, def_bfd);
9779       bfd_set_error (bfd_error_bad_value);
9780       eoinfo->failed = TRUE;
9781       return FALSE;
9782     }
9783
9784   /* We don't want to output symbols that have never been mentioned by
9785      a regular file, or that we have been told to strip.  However, if
9786      h->indx is set to -2, the symbol is used by a reloc and we must
9787      output it.  */
9788   strip = FALSE;
9789   if (h->indx == -2)
9790     ;
9791   else if ((h->def_dynamic
9792             || h->ref_dynamic
9793             || h->root.type == bfd_link_hash_new)
9794            && !h->def_regular
9795            && !h->ref_regular)
9796     strip = TRUE;
9797   else if (flinfo->info->strip == strip_all)
9798     strip = TRUE;
9799   else if (flinfo->info->strip == strip_some
9800            && bfd_hash_lookup (flinfo->info->keep_hash,
9801                                h->root.root.string, FALSE, FALSE) == NULL)
9802     strip = TRUE;
9803   else if ((h->root.type == bfd_link_hash_defined
9804             || h->root.type == bfd_link_hash_defweak)
9805            && ((flinfo->info->strip_discarded
9806                 && discarded_section (h->root.u.def.section))
9807                || ((h->root.u.def.section->flags & SEC_LINKER_CREATED) == 0
9808                    && h->root.u.def.section->owner != NULL
9809                    && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)))
9810     strip = TRUE;
9811   else if ((h->root.type == bfd_link_hash_undefined
9812             || h->root.type == bfd_link_hash_undefweak)
9813            && h->root.u.undef.abfd != NULL
9814            && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0)
9815     strip = TRUE;
9816
9817   type = h->type;
9818
9819   /* If we're stripping it, and it's not a dynamic symbol, there's
9820      nothing else to do.   However, if it is a forced local symbol or
9821      an ifunc symbol we need to give the backend finish_dynamic_symbol
9822      function a chance to make it dynamic.  */
9823   if (strip
9824       && h->dynindx == -1
9825       && type != STT_GNU_IFUNC
9826       && !h->forced_local)
9827     return TRUE;
9828
9829   sym.st_value = 0;
9830   sym.st_size = h->size;
9831   sym.st_other = h->other;
9832   switch (h->root.type)
9833     {
9834     default:
9835     case bfd_link_hash_new:
9836     case bfd_link_hash_warning:
9837       abort ();
9838       return FALSE;
9839
9840     case bfd_link_hash_undefined:
9841     case bfd_link_hash_undefweak:
9842       input_sec = bfd_und_section_ptr;
9843       sym.st_shndx = SHN_UNDEF;
9844       break;
9845
9846     case bfd_link_hash_defined:
9847     case bfd_link_hash_defweak:
9848       {
9849         input_sec = h->root.u.def.section;
9850         if (input_sec->output_section != NULL)
9851           {
9852             sym.st_shndx =
9853               _bfd_elf_section_from_bfd_section (flinfo->output_bfd,
9854                                                  input_sec->output_section);
9855             if (sym.st_shndx == SHN_BAD)
9856               {
9857                 _bfd_error_handler
9858                   /* xgettext:c-format */
9859                   (_("%pB: could not find output section %pA for input section %pA"),
9860                    flinfo->output_bfd, input_sec->output_section, input_sec);
9861                 bfd_set_error (bfd_error_nonrepresentable_section);
9862                 eoinfo->failed = TRUE;
9863                 return FALSE;
9864               }
9865
9866             /* ELF symbols in relocatable files are section relative,
9867                but in nonrelocatable files they are virtual
9868                addresses.  */
9869             sym.st_value = h->root.u.def.value + input_sec->output_offset;
9870             if (!bfd_link_relocatable (flinfo->info))
9871               {
9872                 sym.st_value += input_sec->output_section->vma;
9873                 if (h->type == STT_TLS)
9874                   {
9875                     asection *tls_sec = elf_hash_table (flinfo->info)->tls_sec;
9876                     if (tls_sec != NULL)
9877                       sym.st_value -= tls_sec->vma;
9878                   }
9879               }
9880           }
9881         else
9882           {
9883             BFD_ASSERT (input_sec->owner == NULL
9884                         || (input_sec->owner->flags & DYNAMIC) != 0);
9885             sym.st_shndx = SHN_UNDEF;
9886             input_sec = bfd_und_section_ptr;
9887           }
9888       }
9889       break;
9890
9891     case bfd_link_hash_common:
9892       input_sec = h->root.u.c.p->section;
9893       sym.st_shndx = bed->common_section_index (input_sec);
9894       sym.st_value = 1 << h->root.u.c.p->alignment_power;
9895       break;
9896
9897     case bfd_link_hash_indirect:
9898       /* These symbols are created by symbol versioning.  They point
9899          to the decorated version of the name.  For example, if the
9900          symbol foo@@GNU_1.2 is the default, which should be used when
9901          foo is used with no version, then we add an indirect symbol
9902          foo which points to foo@@GNU_1.2.  We ignore these symbols,
9903          since the indirected symbol is already in the hash table.  */
9904       return TRUE;
9905     }
9906
9907   if (type == STT_COMMON || type == STT_OBJECT)
9908     switch (h->root.type)
9909       {
9910       case bfd_link_hash_common:
9911         type = elf_link_convert_common_type (flinfo->info, type);
9912         break;
9913       case bfd_link_hash_defined:
9914       case bfd_link_hash_defweak:
9915         if (bed->common_definition (&sym))
9916           type = elf_link_convert_common_type (flinfo->info, type);
9917         else
9918           type = STT_OBJECT;
9919         break;
9920       case bfd_link_hash_undefined:
9921       case bfd_link_hash_undefweak:
9922         break;
9923       default:
9924         abort ();
9925       }
9926
9927   if (h->forced_local)
9928     {
9929       sym.st_info = ELF_ST_INFO (STB_LOCAL, type);
9930       /* Turn off visibility on local symbol.  */
9931       sym.st_other &= ~ELF_ST_VISIBILITY (-1);
9932     }
9933   /* Set STB_GNU_UNIQUE only if symbol is defined in regular object.  */
9934   else if (h->unique_global && h->def_regular)
9935     sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, type);
9936   else if (h->root.type == bfd_link_hash_undefweak
9937            || h->root.type == bfd_link_hash_defweak)
9938     sym.st_info = ELF_ST_INFO (STB_WEAK, type);
9939   else
9940     sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
9941   sym.st_target_internal = h->target_internal;
9942
9943   /* Give the processor backend a chance to tweak the symbol value,
9944      and also to finish up anything that needs to be done for this
9945      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
9946      forced local syms when non-shared is due to a historical quirk.
9947      STT_GNU_IFUNC symbol must go through PLT.  */
9948   if ((h->type == STT_GNU_IFUNC
9949        && h->def_regular
9950        && !bfd_link_relocatable (flinfo->info))
9951       || ((h->dynindx != -1
9952            || h->forced_local)
9953           && ((bfd_link_pic (flinfo->info)
9954                && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
9955                    || h->root.type != bfd_link_hash_undefweak))
9956               || !h->forced_local)
9957           && elf_hash_table (flinfo->info)->dynamic_sections_created))
9958     {
9959       if (! ((*bed->elf_backend_finish_dynamic_symbol)
9960              (flinfo->output_bfd, flinfo->info, h, &sym)))
9961         {
9962           eoinfo->failed = TRUE;
9963           return FALSE;
9964         }
9965     }
9966
9967   /* If we are marking the symbol as undefined, and there are no
9968      non-weak references to this symbol from a regular object, then
9969      mark the symbol as weak undefined; if there are non-weak
9970      references, mark the symbol as strong.  We can't do this earlier,
9971      because it might not be marked as undefined until the
9972      finish_dynamic_symbol routine gets through with it.  */
9973   if (sym.st_shndx == SHN_UNDEF
9974       && h->ref_regular
9975       && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
9976           || ELF_ST_BIND (sym.st_info) == STB_WEAK))
9977     {
9978       int bindtype;
9979       type = ELF_ST_TYPE (sym.st_info);
9980
9981       /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */
9982       if (type == STT_GNU_IFUNC)
9983         type = STT_FUNC;
9984
9985       if (h->ref_regular_nonweak)
9986         bindtype = STB_GLOBAL;
9987       else
9988         bindtype = STB_WEAK;
9989       sym.st_info = ELF_ST_INFO (bindtype, type);
9990     }
9991
9992   /* If this is a symbol defined in a dynamic library, don't use the
9993      symbol size from the dynamic library.  Relinking an executable
9994      against a new library may introduce gratuitous changes in the
9995      executable's symbols if we keep the size.  */
9996   if (sym.st_shndx == SHN_UNDEF
9997       && !h->def_regular
9998       && h->def_dynamic)
9999     sym.st_size = 0;
10000
10001   /* If a non-weak symbol with non-default visibility is not defined
10002      locally, it is a fatal error.  */
10003   if (!bfd_link_relocatable (flinfo->info)
10004       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
10005       && ELF_ST_BIND (sym.st_info) != STB_WEAK
10006       && h->root.type == bfd_link_hash_undefined
10007       && !h->def_regular)
10008     {
10009       const char *msg;
10010
10011       if (ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED)
10012         /* xgettext:c-format */
10013         msg = _("%pB: protected symbol `%s' isn't defined");
10014       else if (ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL)
10015         /* xgettext:c-format */
10016         msg = _("%pB: internal symbol `%s' isn't defined");
10017       else
10018         /* xgettext:c-format */
10019         msg = _("%pB: hidden symbol `%s' isn't defined");
10020       _bfd_error_handler (msg, flinfo->output_bfd, h->root.root.string);
10021       bfd_set_error (bfd_error_bad_value);
10022       eoinfo->failed = TRUE;
10023       return FALSE;
10024     }
10025
10026   /* If this symbol should be put in the .dynsym section, then put it
10027      there now.  We already know the symbol index.  We also fill in
10028      the entry in the .hash section.  */
10029   if (elf_hash_table (flinfo->info)->dynsym != NULL
10030       && h->dynindx != -1
10031       && elf_hash_table (flinfo->info)->dynamic_sections_created)
10032     {
10033       bfd_byte *esym;
10034
10035       /* Since there is no version information in the dynamic string,
10036          if there is no version info in symbol version section, we will
10037          have a run-time problem if not linking executable, referenced
10038          by shared library, or not bound locally.  */
10039       if (h->verinfo.verdef == NULL
10040           && (!bfd_link_executable (flinfo->info)
10041               || h->ref_dynamic
10042               || !h->def_regular))
10043         {
10044           char *p = strrchr (h->root.root.string, ELF_VER_CHR);
10045
10046           if (p && p [1] != '\0')
10047             {
10048               _bfd_error_handler
10049                 /* xgettext:c-format */
10050                 (_("%pB: no symbol version section for versioned symbol `%s'"),
10051                  flinfo->output_bfd, h->root.root.string);
10052               eoinfo->failed = TRUE;
10053               return FALSE;
10054             }
10055         }
10056
10057       sym.st_name = h->dynstr_index;
10058       esym = (elf_hash_table (flinfo->info)->dynsym->contents
10059               + h->dynindx * bed->s->sizeof_sym);
10060       if (!check_dynsym (flinfo->output_bfd, &sym))
10061         {
10062           eoinfo->failed = TRUE;
10063           return FALSE;
10064         }
10065       bed->s->swap_symbol_out (flinfo->output_bfd, &sym, esym, 0);
10066
10067       if (flinfo->hash_sec != NULL)
10068         {
10069           size_t hash_entry_size;
10070           bfd_byte *bucketpos;
10071           bfd_vma chain;
10072           size_t bucketcount;
10073           size_t bucket;
10074
10075           bucketcount = elf_hash_table (flinfo->info)->bucketcount;
10076           bucket = h->u.elf_hash_value % bucketcount;
10077
10078           hash_entry_size
10079             = elf_section_data (flinfo->hash_sec)->this_hdr.sh_entsize;
10080           bucketpos = ((bfd_byte *) flinfo->hash_sec->contents
10081                        + (bucket + 2) * hash_entry_size);
10082           chain = bfd_get (8 * hash_entry_size, flinfo->output_bfd, bucketpos);
10083           bfd_put (8 * hash_entry_size, flinfo->output_bfd, h->dynindx,
10084                    bucketpos);
10085           bfd_put (8 * hash_entry_size, flinfo->output_bfd, chain,
10086                    ((bfd_byte *) flinfo->hash_sec->contents
10087                     + (bucketcount + 2 + h->dynindx) * hash_entry_size));
10088         }
10089
10090       if (flinfo->symver_sec != NULL && flinfo->symver_sec->contents != NULL)
10091         {
10092           Elf_Internal_Versym iversym;
10093           Elf_External_Versym *eversym;
10094
10095           if (!h->def_regular)
10096             {
10097               if (h->verinfo.verdef == NULL
10098                   || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
10099                       & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
10100                 iversym.vs_vers = 0;
10101               else
10102                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
10103             }
10104           else
10105             {
10106               if (h->verinfo.vertree == NULL)
10107                 iversym.vs_vers = 1;
10108               else
10109                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
10110               if (flinfo->info->create_default_symver)
10111                 iversym.vs_vers++;
10112             }
10113
10114           /* Turn on VERSYM_HIDDEN only if the hidden versioned symbol is
10115              defined locally.  */
10116           if (h->versioned == versioned_hidden && h->def_regular)
10117             iversym.vs_vers |= VERSYM_HIDDEN;
10118
10119           eversym = (Elf_External_Versym *) flinfo->symver_sec->contents;
10120           eversym += h->dynindx;
10121           _bfd_elf_swap_versym_out (flinfo->output_bfd, &iversym, eversym);
10122         }
10123     }
10124
10125   /* If the symbol is undefined, and we didn't output it to .dynsym,
10126      strip it from .symtab too.  Obviously we can't do this for
10127      relocatable output or when needed for --emit-relocs.  */
10128   else if (input_sec == bfd_und_section_ptr
10129            && h->indx != -2
10130            /* PR 22319 Do not strip global undefined symbols marked as being needed.  */
10131            && (h->mark != 1 || ELF_ST_BIND (sym.st_info) != STB_GLOBAL)
10132            && !bfd_link_relocatable (flinfo->info))
10133     return TRUE;
10134
10135   /* Also strip others that we couldn't earlier due to dynamic symbol
10136      processing.  */
10137   if (strip)
10138     return TRUE;
10139   if ((input_sec->flags & SEC_EXCLUDE) != 0)
10140     return TRUE;
10141
10142   /* Output a FILE symbol so that following locals are not associated
10143      with the wrong input file.  We need one for forced local symbols
10144      if we've seen more than one FILE symbol or when we have exactly
10145      one FILE symbol but global symbols are present in a file other
10146      than the one with the FILE symbol.  We also need one if linker
10147      defined symbols are present.  In practice these conditions are
10148      always met, so just emit the FILE symbol unconditionally.  */
10149   if (eoinfo->localsyms
10150       && !eoinfo->file_sym_done
10151       && eoinfo->flinfo->filesym_count != 0)
10152     {
10153       Elf_Internal_Sym fsym;
10154
10155       memset (&fsym, 0, sizeof (fsym));
10156       fsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
10157       fsym.st_shndx = SHN_ABS;
10158       if (!elf_link_output_symstrtab (eoinfo->flinfo, NULL, &fsym,
10159                                       bfd_und_section_ptr, NULL))
10160         return FALSE;
10161
10162       eoinfo->file_sym_done = TRUE;
10163     }
10164
10165   indx = bfd_get_symcount (flinfo->output_bfd);
10166   ret = elf_link_output_symstrtab (flinfo, h->root.root.string, &sym,
10167                                    input_sec, h);
10168   if (ret == 0)
10169     {
10170       eoinfo->failed = TRUE;
10171       return FALSE;
10172     }
10173   else if (ret == 1)
10174     h->indx = indx;
10175   else if (h->indx == -2)
10176     abort();
10177
10178   return TRUE;
10179 }
10180
10181 /* Return TRUE if special handling is done for relocs in SEC against
10182    symbols defined in discarded sections.  */
10183
10184 static bfd_boolean
10185 elf_section_ignore_discarded_relocs (asection *sec)
10186 {
10187   const struct elf_backend_data *bed;
10188
10189   switch (sec->sec_info_type)
10190     {
10191     case SEC_INFO_TYPE_STABS:
10192     case SEC_INFO_TYPE_EH_FRAME:
10193     case SEC_INFO_TYPE_EH_FRAME_ENTRY:
10194       return TRUE;
10195     default:
10196       break;
10197     }
10198
10199   bed = get_elf_backend_data (sec->owner);
10200   if (bed->elf_backend_ignore_discarded_relocs != NULL
10201       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
10202     return TRUE;
10203
10204   return FALSE;
10205 }
10206
10207 /* Return a mask saying how ld should treat relocations in SEC against
10208    symbols defined in discarded sections.  If this function returns
10209    COMPLAIN set, ld will issue a warning message.  If this function
10210    returns PRETEND set, and the discarded section was link-once and the
10211    same size as the kept link-once section, ld will pretend that the
10212    symbol was actually defined in the kept section.  Otherwise ld will
10213    zero the reloc (at least that is the intent, but some cooperation by
10214    the target dependent code is needed, particularly for REL targets).  */
10215
10216 unsigned int
10217 _bfd_elf_default_action_discarded (asection *sec)
10218 {
10219   if (sec->flags & SEC_DEBUGGING)
10220     return PRETEND;
10221
10222   if (strcmp (".eh_frame", sec->name) == 0)
10223     return 0;
10224
10225   if (strcmp (".gcc_except_table", sec->name) == 0)
10226     return 0;
10227
10228   return COMPLAIN | PRETEND;
10229 }
10230
10231 /* Find a match between a section and a member of a section group.  */
10232
10233 static asection *
10234 match_group_member (asection *sec, asection *group,
10235                     struct bfd_link_info *info)
10236 {
10237   asection *first = elf_next_in_group (group);
10238   asection *s = first;
10239
10240   while (s != NULL)
10241     {
10242       if (bfd_elf_match_symbols_in_sections (s, sec, info))
10243         return s;
10244
10245       s = elf_next_in_group (s);
10246       if (s == first)
10247         break;
10248     }
10249
10250   return NULL;
10251 }
10252
10253 /* Check if the kept section of a discarded section SEC can be used
10254    to replace it.  Return the replacement if it is OK.  Otherwise return
10255    NULL.  */
10256
10257 asection *
10258 _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
10259 {
10260   asection *kept;
10261
10262   kept = sec->kept_section;
10263   if (kept != NULL)
10264     {
10265       if ((kept->flags & SEC_GROUP) != 0)
10266         kept = match_group_member (sec, kept, info);
10267       if (kept != NULL
10268           && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
10269               != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
10270         kept = NULL;
10271       sec->kept_section = kept;
10272     }
10273   return kept;
10274 }
10275
10276 /* Link an input file into the linker output file.  This function
10277    handles all the sections and relocations of the input file at once.
10278    This is so that we only have to read the local symbols once, and
10279    don't have to keep them in memory.  */
10280
10281 static bfd_boolean
10282 elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
10283 {
10284   int (*relocate_section)
10285     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
10286      Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
10287   bfd *output_bfd;
10288   Elf_Internal_Shdr *symtab_hdr;
10289   size_t locsymcount;
10290   size_t extsymoff;
10291   Elf_Internal_Sym *isymbuf;
10292   Elf_Internal_Sym *isym;
10293   Elf_Internal_Sym *isymend;
10294   long *pindex;
10295   asection **ppsection;
10296   asection *o;
10297   const struct elf_backend_data *bed;
10298   struct elf_link_hash_entry **sym_hashes;
10299   bfd_size_type address_size;
10300   bfd_vma r_type_mask;
10301   int r_sym_shift;
10302   bfd_boolean have_file_sym = FALSE;
10303
10304   output_bfd = flinfo->output_bfd;
10305   bed = get_elf_backend_data (output_bfd);
10306   relocate_section = bed->elf_backend_relocate_section;
10307
10308   /* If this is a dynamic object, we don't want to do anything here:
10309      we don't want the local symbols, and we don't want the section
10310      contents.  */
10311   if ((input_bfd->flags & DYNAMIC) != 0)
10312     return TRUE;
10313
10314   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10315   if (elf_bad_symtab (input_bfd))
10316     {
10317       locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
10318       extsymoff = 0;
10319     }
10320   else
10321     {
10322       locsymcount = symtab_hdr->sh_info;
10323       extsymoff = symtab_hdr->sh_info;
10324     }
10325
10326   /* Read the local symbols.  */
10327   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
10328   if (isymbuf == NULL && locsymcount != 0)
10329     {
10330       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
10331                                       flinfo->internal_syms,
10332                                       flinfo->external_syms,
10333                                       flinfo->locsym_shndx);
10334       if (isymbuf == NULL)
10335         return FALSE;
10336     }
10337
10338   /* Find local symbol sections and adjust values of symbols in
10339      SEC_MERGE sections.  Write out those local symbols we know are
10340      going into the output file.  */
10341   isymend = isymbuf + locsymcount;
10342   for (isym = isymbuf, pindex = flinfo->indices, ppsection = flinfo->sections;
10343        isym < isymend;
10344        isym++, pindex++, ppsection++)
10345     {
10346       asection *isec;
10347       const char *name;
10348       Elf_Internal_Sym osym;
10349       long indx;
10350       int ret;
10351
10352       *pindex = -1;
10353
10354       if (elf_bad_symtab (input_bfd))
10355         {
10356           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
10357             {
10358               *ppsection = NULL;
10359               continue;
10360             }
10361         }
10362
10363       if (isym->st_shndx == SHN_UNDEF)
10364         isec = bfd_und_section_ptr;
10365       else if (isym->st_shndx == SHN_ABS)
10366         isec = bfd_abs_section_ptr;
10367       else if (isym->st_shndx == SHN_COMMON)
10368         isec = bfd_com_section_ptr;
10369       else
10370         {
10371           isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
10372           if (isec == NULL)
10373             {
10374               /* Don't attempt to output symbols with st_shnx in the
10375                  reserved range other than SHN_ABS and SHN_COMMON.  */
10376               *ppsection = NULL;
10377               continue;
10378             }
10379           else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE
10380                    && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
10381             isym->st_value =
10382               _bfd_merged_section_offset (output_bfd, &isec,
10383                                           elf_section_data (isec)->sec_info,
10384                                           isym->st_value);
10385         }
10386
10387       *ppsection = isec;
10388
10389       /* Don't output the first, undefined, symbol.  In fact, don't
10390          output any undefined local symbol.  */
10391       if (isec == bfd_und_section_ptr)
10392         continue;
10393
10394       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
10395         {
10396           /* We never output section symbols.  Instead, we use the
10397              section symbol of the corresponding section in the output
10398              file.  */
10399           continue;
10400         }
10401
10402       /* If we are stripping all symbols, we don't want to output this
10403          one.  */
10404       if (flinfo->info->strip == strip_all)
10405         continue;
10406
10407       /* If we are discarding all local symbols, we don't want to
10408          output this one.  If we are generating a relocatable output
10409          file, then some of the local symbols may be required by
10410          relocs; we output them below as we discover that they are
10411          needed.  */
10412       if (flinfo->info->discard == discard_all)
10413         continue;
10414
10415       /* If this symbol is defined in a section which we are
10416          discarding, we don't need to keep it.  */
10417       if (isym->st_shndx != SHN_UNDEF
10418           && isym->st_shndx < SHN_LORESERVE
10419           && bfd_section_removed_from_list (output_bfd,
10420                                             isec->output_section))
10421         continue;
10422
10423       /* Get the name of the symbol.  */
10424       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
10425                                               isym->st_name);
10426       if (name == NULL)
10427         return FALSE;
10428
10429       /* See if we are discarding symbols with this name.  */
10430       if ((flinfo->info->strip == strip_some
10431            && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE)
10432                == NULL))
10433           || (((flinfo->info->discard == discard_sec_merge
10434                 && (isec->flags & SEC_MERGE)
10435                 && !bfd_link_relocatable (flinfo->info))
10436                || flinfo->info->discard == discard_l)
10437               && bfd_is_local_label_name (input_bfd, name)))
10438         continue;
10439
10440       if (ELF_ST_TYPE (isym->st_info) == STT_FILE)
10441         {
10442           if (input_bfd->lto_output)
10443             /* -flto puts a temp file name here.  This means builds
10444                are not reproducible.  Discard the symbol.  */
10445             continue;
10446           have_file_sym = TRUE;
10447           flinfo->filesym_count += 1;
10448         }
10449       if (!have_file_sym)
10450         {
10451           /* In the absence of debug info, bfd_find_nearest_line uses
10452              FILE symbols to determine the source file for local
10453              function symbols.  Provide a FILE symbol here if input
10454              files lack such, so that their symbols won't be
10455              associated with a previous input file.  It's not the
10456              source file, but the best we can do.  */
10457           have_file_sym = TRUE;
10458           flinfo->filesym_count += 1;
10459           memset (&osym, 0, sizeof (osym));
10460           osym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
10461           osym.st_shndx = SHN_ABS;
10462           if (!elf_link_output_symstrtab (flinfo,
10463                                           (input_bfd->lto_output ? NULL
10464                                            : input_bfd->filename),
10465                                           &osym, bfd_abs_section_ptr,
10466                                           NULL))
10467             return FALSE;
10468         }
10469
10470       osym = *isym;
10471
10472       /* Adjust the section index for the output file.  */
10473       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
10474                                                          isec->output_section);
10475       if (osym.st_shndx == SHN_BAD)
10476         return FALSE;
10477
10478       /* ELF symbols in relocatable files are section relative, but
10479          in executable files they are virtual addresses.  Note that
10480          this code assumes that all ELF sections have an associated
10481          BFD section with a reasonable value for output_offset; below
10482          we assume that they also have a reasonable value for
10483          output_section.  Any special sections must be set up to meet
10484          these requirements.  */
10485       osym.st_value += isec->output_offset;
10486       if (!bfd_link_relocatable (flinfo->info))
10487         {
10488           osym.st_value += isec->output_section->vma;
10489           if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
10490             {
10491               /* STT_TLS symbols are relative to PT_TLS segment base.  */
10492               BFD_ASSERT (elf_hash_table (flinfo->info)->tls_sec != NULL);
10493               osym.st_value -= elf_hash_table (flinfo->info)->tls_sec->vma;
10494             }
10495         }
10496
10497       indx = bfd_get_symcount (output_bfd);
10498       ret = elf_link_output_symstrtab (flinfo, name, &osym, isec, NULL);
10499       if (ret == 0)
10500         return FALSE;
10501       else if (ret == 1)
10502         *pindex = indx;
10503     }
10504
10505   if (bed->s->arch_size == 32)
10506     {
10507       r_type_mask = 0xff;
10508       r_sym_shift = 8;
10509       address_size = 4;
10510     }
10511   else
10512     {
10513       r_type_mask = 0xffffffff;
10514       r_sym_shift = 32;
10515       address_size = 8;
10516     }
10517
10518   /* Relocate the contents of each section.  */
10519   sym_hashes = elf_sym_hashes (input_bfd);
10520   for (o = input_bfd->sections; o != NULL; o = o->next)
10521     {
10522       bfd_byte *contents;
10523
10524       if (! o->linker_mark)
10525         {
10526           /* This section was omitted from the link.  */
10527           continue;
10528         }
10529
10530       if (!flinfo->info->resolve_section_groups
10531           && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
10532         {
10533           /* Deal with the group signature symbol.  */
10534           struct bfd_elf_section_data *sec_data = elf_section_data (o);
10535           unsigned long symndx = sec_data->this_hdr.sh_info;
10536           asection *osec = o->output_section;
10537
10538           BFD_ASSERT (bfd_link_relocatable (flinfo->info));
10539           if (symndx >= locsymcount
10540               || (elf_bad_symtab (input_bfd)
10541                   && flinfo->sections[symndx] == NULL))
10542             {
10543               struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
10544               while (h->root.type == bfd_link_hash_indirect
10545                      || h->root.type == bfd_link_hash_warning)
10546                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
10547               /* Arrange for symbol to be output.  */
10548               h->indx = -2;
10549               elf_section_data (osec)->this_hdr.sh_info = -2;
10550             }
10551           else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
10552             {
10553               /* We'll use the output section target_index.  */
10554               asection *sec = flinfo->sections[symndx]->output_section;
10555               elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
10556             }
10557           else
10558             {
10559               if (flinfo->indices[symndx] == -1)
10560                 {
10561                   /* Otherwise output the local symbol now.  */
10562                   Elf_Internal_Sym sym = isymbuf[symndx];
10563                   asection *sec = flinfo->sections[symndx]->output_section;
10564                   const char *name;
10565                   long indx;
10566                   int ret;
10567
10568                   name = bfd_elf_string_from_elf_section (input_bfd,
10569                                                           symtab_hdr->sh_link,
10570                                                           sym.st_name);
10571                   if (name == NULL)
10572                     return FALSE;
10573
10574                   sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
10575                                                                     sec);
10576                   if (sym.st_shndx == SHN_BAD)
10577                     return FALSE;
10578
10579                   sym.st_value += o->output_offset;
10580
10581                   indx = bfd_get_symcount (output_bfd);
10582                   ret = elf_link_output_symstrtab (flinfo, name, &sym, o,
10583                                                    NULL);
10584                   if (ret == 0)
10585                     return FALSE;
10586                   else if (ret == 1)
10587                     flinfo->indices[symndx] = indx;
10588                   else
10589                     abort ();
10590                 }
10591               elf_section_data (osec)->this_hdr.sh_info
10592                 = flinfo->indices[symndx];
10593             }
10594         }
10595
10596       if ((o->flags & SEC_HAS_CONTENTS) == 0
10597           || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
10598         continue;
10599
10600       if ((o->flags & SEC_LINKER_CREATED) != 0)
10601         {
10602           /* Section was created by _bfd_elf_link_create_dynamic_sections
10603              or somesuch.  */
10604           continue;
10605         }
10606
10607       /* Get the contents of the section.  They have been cached by a
10608          relaxation routine.  Note that o is a section in an input
10609          file, so the contents field will not have been set by any of
10610          the routines which work on output files.  */
10611       if (elf_section_data (o)->this_hdr.contents != NULL)
10612         {
10613           contents = elf_section_data (o)->this_hdr.contents;
10614           if (bed->caches_rawsize
10615               && o->rawsize != 0
10616               && o->rawsize < o->size)
10617             {
10618               memcpy (flinfo->contents, contents, o->rawsize);
10619               contents = flinfo->contents;
10620             }
10621         }
10622       else
10623         {
10624           contents = flinfo->contents;
10625           if (! bfd_get_full_section_contents (input_bfd, o, &contents))
10626             return FALSE;
10627         }
10628
10629       if ((o->flags & SEC_RELOC) != 0)
10630         {
10631           Elf_Internal_Rela *internal_relocs;
10632           Elf_Internal_Rela *rel, *relend;
10633           int action_discarded;
10634           int ret;
10635
10636           /* Get the swapped relocs.  */
10637           internal_relocs
10638             = _bfd_elf_link_read_relocs (input_bfd, o, flinfo->external_relocs,
10639                                          flinfo->internal_relocs, FALSE);
10640           if (internal_relocs == NULL
10641               && o->reloc_count > 0)
10642             return FALSE;
10643
10644           /* We need to reverse-copy input .ctors/.dtors sections if
10645              they are placed in .init_array/.finit_array for output.  */
10646           if (o->size > address_size
10647               && ((strncmp (o->name, ".ctors", 6) == 0
10648                    && strcmp (o->output_section->name,
10649                               ".init_array") == 0)
10650                   || (strncmp (o->name, ".dtors", 6) == 0
10651                       && strcmp (o->output_section->name,
10652                                  ".fini_array") == 0))
10653               && (o->name[6] == 0 || o->name[6] == '.'))
10654             {
10655               if (o->size * bed->s->int_rels_per_ext_rel
10656                   != o->reloc_count * address_size)
10657                 {
10658                   _bfd_error_handler
10659                     /* xgettext:c-format */
10660                     (_("error: %pB: size of section %pA is not "
10661                        "multiple of address size"),
10662                      input_bfd, o);
10663                   bfd_set_error (bfd_error_bad_value);
10664                   return FALSE;
10665                 }
10666               o->flags |= SEC_ELF_REVERSE_COPY;
10667             }
10668
10669           action_discarded = -1;
10670           if (!elf_section_ignore_discarded_relocs (o))
10671             action_discarded = (*bed->action_discarded) (o);
10672
10673           /* Run through the relocs evaluating complex reloc symbols and
10674              looking for relocs against symbols from discarded sections
10675              or section symbols from removed link-once sections.
10676              Complain about relocs against discarded sections.  Zero
10677              relocs against removed link-once sections.  */
10678
10679           rel = internal_relocs;
10680           relend = rel + o->reloc_count;
10681           for ( ; rel < relend; rel++)
10682             {
10683               unsigned long r_symndx = rel->r_info >> r_sym_shift;
10684               unsigned int s_type;
10685               asection **ps, *sec;
10686               struct elf_link_hash_entry *h = NULL;
10687               const char *sym_name;
10688
10689               if (r_symndx == STN_UNDEF)
10690                 continue;
10691
10692               if (r_symndx >= locsymcount
10693                   || (elf_bad_symtab (input_bfd)
10694                       && flinfo->sections[r_symndx] == NULL))
10695                 {
10696                   h = sym_hashes[r_symndx - extsymoff];
10697
10698                   /* Badly formatted input files can contain relocs that
10699                      reference non-existant symbols.  Check here so that
10700                      we do not seg fault.  */
10701                   if (h == NULL)
10702                     {
10703                       _bfd_error_handler
10704                         /* xgettext:c-format */
10705                         (_("error: %pB contains a reloc (%#" PRIx64 ") for section %pA "
10706                            "that references a non-existent global symbol"),
10707                          input_bfd, (uint64_t) rel->r_info, o);
10708                       bfd_set_error (bfd_error_bad_value);
10709                       return FALSE;
10710                     }
10711
10712                   while (h->root.type == bfd_link_hash_indirect
10713                          || h->root.type == bfd_link_hash_warning)
10714                     h = (struct elf_link_hash_entry *) h->root.u.i.link;
10715
10716                   s_type = h->type;
10717
10718                   /* If a plugin symbol is referenced from a non-IR file,
10719                      mark the symbol as undefined.  Note that the
10720                      linker may attach linker created dynamic sections
10721                      to the plugin bfd.  Symbols defined in linker
10722                      created sections are not plugin symbols.  */
10723                   if ((h->root.non_ir_ref_regular
10724                        || h->root.non_ir_ref_dynamic)
10725                       && (h->root.type == bfd_link_hash_defined
10726                           || h->root.type == bfd_link_hash_defweak)
10727                       && (h->root.u.def.section->flags
10728                           & SEC_LINKER_CREATED) == 0
10729                       && h->root.u.def.section->owner != NULL
10730                       && (h->root.u.def.section->owner->flags
10731                           & BFD_PLUGIN) != 0)
10732                     {
10733                       h->root.type = bfd_link_hash_undefined;
10734                       h->root.u.undef.abfd = h->root.u.def.section->owner;
10735                     }
10736
10737                   ps = NULL;
10738                   if (h->root.type == bfd_link_hash_defined
10739                       || h->root.type == bfd_link_hash_defweak)
10740                     ps = &h->root.u.def.section;
10741
10742                   sym_name = h->root.root.string;
10743                 }
10744               else
10745                 {
10746                   Elf_Internal_Sym *sym = isymbuf + r_symndx;
10747
10748                   s_type = ELF_ST_TYPE (sym->st_info);
10749                   ps = &flinfo->sections[r_symndx];
10750                   sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10751                                                sym, *ps);
10752                 }
10753
10754               if ((s_type == STT_RELC || s_type == STT_SRELC)
10755                   && !bfd_link_relocatable (flinfo->info))
10756                 {
10757                   bfd_vma val;
10758                   bfd_vma dot = (rel->r_offset
10759                                  + o->output_offset + o->output_section->vma);
10760 #ifdef DEBUG
10761                   printf ("Encountered a complex symbol!");
10762                   printf (" (input_bfd %s, section %s, reloc %ld\n",
10763                           input_bfd->filename, o->name,
10764                           (long) (rel - internal_relocs));
10765                   printf (" symbol: idx  %8.8lx, name %s\n",
10766                           r_symndx, sym_name);
10767                   printf (" reloc : info %8.8lx, addr %8.8lx\n",
10768                           (unsigned long) rel->r_info,
10769                           (unsigned long) rel->r_offset);
10770 #endif
10771                   if (!eval_symbol (&val, &sym_name, input_bfd, flinfo, dot,
10772                                     isymbuf, locsymcount, s_type == STT_SRELC))
10773                     return FALSE;
10774
10775                   /* Symbol evaluated OK.  Update to absolute value.  */
10776                   set_symbol_value (input_bfd, isymbuf, locsymcount,
10777                                     r_symndx, val);
10778                   continue;
10779                 }
10780
10781               if (action_discarded != -1 && ps != NULL)
10782                 {
10783                   /* Complain if the definition comes from a
10784                      discarded section.  */
10785                   if ((sec = *ps) != NULL && discarded_section (sec))
10786                     {
10787                       BFD_ASSERT (r_symndx != STN_UNDEF);
10788                       if (action_discarded & COMPLAIN)
10789                         (*flinfo->info->callbacks->einfo)
10790                           /* xgettext:c-format */
10791                           (_("%X`%s' referenced in section `%pA' of %pB: "
10792                              "defined in discarded section `%pA' of %pB\n"),
10793                            sym_name, o, input_bfd, sec, sec->owner);
10794
10795                       /* Try to do the best we can to support buggy old
10796                          versions of gcc.  Pretend that the symbol is
10797                          really defined in the kept linkonce section.
10798                          FIXME: This is quite broken.  Modifying the
10799                          symbol here means we will be changing all later
10800                          uses of the symbol, not just in this section.  */
10801                       if (action_discarded & PRETEND)
10802                         {
10803                           asection *kept;
10804
10805                           kept = _bfd_elf_check_kept_section (sec,
10806                                                               flinfo->info);
10807                           if (kept != NULL)
10808                             {
10809                               *ps = kept;
10810                               continue;
10811                             }
10812                         }
10813                     }
10814                 }
10815             }
10816
10817           /* Relocate the section by invoking a back end routine.
10818
10819              The back end routine is responsible for adjusting the
10820              section contents as necessary, and (if using Rela relocs
10821              and generating a relocatable output file) adjusting the
10822              reloc addend as necessary.
10823
10824              The back end routine does not have to worry about setting
10825              the reloc address or the reloc symbol index.
10826
10827              The back end routine is given a pointer to the swapped in
10828              internal symbols, and can access the hash table entries
10829              for the external symbols via elf_sym_hashes (input_bfd).
10830
10831              When generating relocatable output, the back end routine
10832              must handle STB_LOCAL/STT_SECTION symbols specially.  The
10833              output symbol is going to be a section symbol
10834              corresponding to the output section, which will require
10835              the addend to be adjusted.  */
10836
10837           ret = (*relocate_section) (output_bfd, flinfo->info,
10838                                      input_bfd, o, contents,
10839                                      internal_relocs,
10840                                      isymbuf,
10841                                      flinfo->sections);
10842           if (!ret)
10843             return FALSE;
10844
10845           if (ret == 2
10846               || bfd_link_relocatable (flinfo->info)
10847               || flinfo->info->emitrelocations)
10848             {
10849               Elf_Internal_Rela *irela;
10850               Elf_Internal_Rela *irelaend, *irelamid;
10851               bfd_vma last_offset;
10852               struct elf_link_hash_entry **rel_hash;
10853               struct elf_link_hash_entry **rel_hash_list, **rela_hash_list;
10854               Elf_Internal_Shdr *input_rel_hdr, *input_rela_hdr;
10855               unsigned int next_erel;
10856               bfd_boolean rela_normal;
10857               struct bfd_elf_section_data *esdi, *esdo;
10858
10859               esdi = elf_section_data (o);
10860               esdo = elf_section_data (o->output_section);
10861               rela_normal = FALSE;
10862
10863               /* Adjust the reloc addresses and symbol indices.  */
10864
10865               irela = internal_relocs;
10866               irelaend = irela + o->reloc_count;
10867               rel_hash = esdo->rel.hashes + esdo->rel.count;
10868               /* We start processing the REL relocs, if any.  When we reach
10869                  IRELAMID in the loop, we switch to the RELA relocs.  */
10870               irelamid = irela;
10871               if (esdi->rel.hdr != NULL)
10872                 irelamid += (NUM_SHDR_ENTRIES (esdi->rel.hdr)
10873                              * bed->s->int_rels_per_ext_rel);
10874               rel_hash_list = rel_hash;
10875               rela_hash_list = NULL;
10876               last_offset = o->output_offset;
10877               if (!bfd_link_relocatable (flinfo->info))
10878                 last_offset += o->output_section->vma;
10879               for (next_erel = 0; irela < irelaend; irela++, next_erel++)
10880                 {
10881                   unsigned long r_symndx;
10882                   asection *sec;
10883                   Elf_Internal_Sym sym;
10884
10885                   if (next_erel == bed->s->int_rels_per_ext_rel)
10886                     {
10887                       rel_hash++;
10888                       next_erel = 0;
10889                     }
10890
10891                   if (irela == irelamid)
10892                     {
10893                       rel_hash = esdo->rela.hashes + esdo->rela.count;
10894                       rela_hash_list = rel_hash;
10895                       rela_normal = bed->rela_normal;
10896                     }
10897
10898                   irela->r_offset = _bfd_elf_section_offset (output_bfd,
10899                                                              flinfo->info, o,
10900                                                              irela->r_offset);
10901                   if (irela->r_offset >= (bfd_vma) -2)
10902                     {
10903                       /* This is a reloc for a deleted entry or somesuch.
10904                          Turn it into an R_*_NONE reloc, at the same
10905                          offset as the last reloc.  elf_eh_frame.c and
10906                          bfd_elf_discard_info rely on reloc offsets
10907                          being ordered.  */
10908                       irela->r_offset = last_offset;
10909                       irela->r_info = 0;
10910                       irela->r_addend = 0;
10911                       continue;
10912                     }
10913
10914                   irela->r_offset += o->output_offset;
10915
10916                   /* Relocs in an executable have to be virtual addresses.  */
10917                   if (!bfd_link_relocatable (flinfo->info))
10918                     irela->r_offset += o->output_section->vma;
10919
10920                   last_offset = irela->r_offset;
10921
10922                   r_symndx = irela->r_info >> r_sym_shift;
10923                   if (r_symndx == STN_UNDEF)
10924                     continue;
10925
10926                   if (r_symndx >= locsymcount
10927                       || (elf_bad_symtab (input_bfd)
10928                           && flinfo->sections[r_symndx] == NULL))
10929                     {
10930                       struct elf_link_hash_entry *rh;
10931                       unsigned long indx;
10932
10933                       /* This is a reloc against a global symbol.  We
10934                          have not yet output all the local symbols, so
10935                          we do not know the symbol index of any global
10936                          symbol.  We set the rel_hash entry for this
10937                          reloc to point to the global hash table entry
10938                          for this symbol.  The symbol index is then
10939                          set at the end of bfd_elf_final_link.  */
10940                       indx = r_symndx - extsymoff;
10941                       rh = elf_sym_hashes (input_bfd)[indx];
10942                       while (rh->root.type == bfd_link_hash_indirect
10943                              || rh->root.type == bfd_link_hash_warning)
10944                         rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
10945
10946                       /* Setting the index to -2 tells
10947                          elf_link_output_extsym that this symbol is
10948                          used by a reloc.  */
10949                       BFD_ASSERT (rh->indx < 0);
10950                       rh->indx = -2;
10951                       *rel_hash = rh;
10952
10953                       continue;
10954                     }
10955
10956                   /* This is a reloc against a local symbol.  */
10957
10958                   *rel_hash = NULL;
10959                   sym = isymbuf[r_symndx];
10960                   sec = flinfo->sections[r_symndx];
10961                   if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
10962                     {
10963                       /* I suppose the backend ought to fill in the
10964                          section of any STT_SECTION symbol against a
10965                          processor specific section.  */
10966                       r_symndx = STN_UNDEF;
10967                       if (bfd_is_abs_section (sec))
10968                         ;
10969                       else if (sec == NULL || sec->owner == NULL)
10970                         {
10971                           bfd_set_error (bfd_error_bad_value);
10972                           return FALSE;
10973                         }
10974                       else
10975                         {
10976                           asection *osec = sec->output_section;
10977
10978                           /* If we have discarded a section, the output
10979                              section will be the absolute section.  In
10980                              case of discarded SEC_MERGE sections, use
10981                              the kept section.  relocate_section should
10982                              have already handled discarded linkonce
10983                              sections.  */
10984                           if (bfd_is_abs_section (osec)
10985                               && sec->kept_section != NULL
10986                               && sec->kept_section->output_section != NULL)
10987                             {
10988                               osec = sec->kept_section->output_section;
10989                               irela->r_addend -= osec->vma;
10990                             }
10991
10992                           if (!bfd_is_abs_section (osec))
10993                             {
10994                               r_symndx = osec->target_index;
10995                               if (r_symndx == STN_UNDEF)
10996                                 {
10997                                   irela->r_addend += osec->vma;
10998                                   osec = _bfd_nearby_section (output_bfd, osec,
10999                                                               osec->vma);
11000                                   irela->r_addend -= osec->vma;
11001                                   r_symndx = osec->target_index;
11002                                 }
11003                             }
11004                         }
11005
11006                       /* Adjust the addend according to where the
11007                          section winds up in the output section.  */
11008                       if (rela_normal)
11009                         irela->r_addend += sec->output_offset;
11010                     }
11011                   else
11012                     {
11013                       if (flinfo->indices[r_symndx] == -1)
11014                         {
11015                           unsigned long shlink;
11016                           const char *name;
11017                           asection *osec;
11018                           long indx;
11019
11020                           if (flinfo->info->strip == strip_all)
11021                             {
11022                               /* You can't do ld -r -s.  */
11023                               bfd_set_error (bfd_error_invalid_operation);
11024                               return FALSE;
11025                             }
11026
11027                           /* This symbol was skipped earlier, but
11028                              since it is needed by a reloc, we
11029                              must output it now.  */
11030                           shlink = symtab_hdr->sh_link;
11031                           name = (bfd_elf_string_from_elf_section
11032                                   (input_bfd, shlink, sym.st_name));
11033                           if (name == NULL)
11034                             return FALSE;
11035
11036                           osec = sec->output_section;
11037                           sym.st_shndx =
11038                             _bfd_elf_section_from_bfd_section (output_bfd,
11039                                                                osec);
11040                           if (sym.st_shndx == SHN_BAD)
11041                             return FALSE;
11042
11043                           sym.st_value += sec->output_offset;
11044                           if (!bfd_link_relocatable (flinfo->info))
11045                             {
11046                               sym.st_value += osec->vma;
11047                               if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
11048                                 {
11049                                   /* STT_TLS symbols are relative to PT_TLS
11050                                      segment base.  */
11051                                   BFD_ASSERT (elf_hash_table (flinfo->info)
11052                                               ->tls_sec != NULL);
11053                                   sym.st_value -= (elf_hash_table (flinfo->info)
11054                                                    ->tls_sec->vma);
11055                                 }
11056                             }
11057
11058                           indx = bfd_get_symcount (output_bfd);
11059                           ret = elf_link_output_symstrtab (flinfo, name,
11060                                                            &sym, sec,
11061                                                            NULL);
11062                           if (ret == 0)
11063                             return FALSE;
11064                           else if (ret == 1)
11065                             flinfo->indices[r_symndx] = indx;
11066                           else
11067                             abort ();
11068                         }
11069
11070                       r_symndx = flinfo->indices[r_symndx];
11071                     }
11072
11073                   irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
11074                                    | (irela->r_info & r_type_mask));
11075                 }
11076
11077               /* Swap out the relocs.  */
11078               input_rel_hdr = esdi->rel.hdr;
11079               if (input_rel_hdr && input_rel_hdr->sh_size != 0)
11080                 {
11081                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
11082                                                      input_rel_hdr,
11083                                                      internal_relocs,
11084                                                      rel_hash_list))
11085                     return FALSE;
11086                   internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
11087                                       * bed->s->int_rels_per_ext_rel);
11088                   rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
11089                 }
11090
11091               input_rela_hdr = esdi->rela.hdr;
11092               if (input_rela_hdr && input_rela_hdr->sh_size != 0)
11093                 {
11094                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
11095                                                      input_rela_hdr,
11096                                                      internal_relocs,
11097                                                      rela_hash_list))
11098                     return FALSE;
11099                 }
11100             }
11101         }
11102
11103       /* Write out the modified section contents.  */
11104       if (bed->elf_backend_write_section
11105           && (*bed->elf_backend_write_section) (output_bfd, flinfo->info, o,
11106                                                 contents))
11107         {
11108           /* Section written out.  */
11109         }
11110       else switch (o->sec_info_type)
11111         {
11112         case SEC_INFO_TYPE_STABS:
11113           if (! (_bfd_write_section_stabs
11114                  (output_bfd,
11115                   &elf_hash_table (flinfo->info)->stab_info,
11116                   o, &elf_section_data (o)->sec_info, contents)))
11117             return FALSE;
11118           break;
11119         case SEC_INFO_TYPE_MERGE:
11120           if (! _bfd_write_merged_section (output_bfd, o,
11121                                            elf_section_data (o)->sec_info))
11122             return FALSE;
11123           break;
11124         case SEC_INFO_TYPE_EH_FRAME:
11125           {
11126             if (! _bfd_elf_write_section_eh_frame (output_bfd, flinfo->info,
11127                                                    o, contents))
11128               return FALSE;
11129           }
11130           break;
11131         case SEC_INFO_TYPE_EH_FRAME_ENTRY:
11132           {
11133             if (! _bfd_elf_write_section_eh_frame_entry (output_bfd,
11134                                                          flinfo->info,
11135                                                          o, contents))
11136               return FALSE;
11137           }
11138           break;
11139         default:
11140           {
11141             if (! (o->flags & SEC_EXCLUDE))
11142               {
11143                 file_ptr offset = (file_ptr) o->output_offset;
11144                 bfd_size_type todo = o->size;
11145
11146                 offset *= bfd_octets_per_byte (output_bfd);
11147
11148                 if ((o->flags & SEC_ELF_REVERSE_COPY))
11149                   {
11150                     /* Reverse-copy input section to output.  */
11151                     do
11152                       {
11153                         todo -= address_size;
11154                         if (! bfd_set_section_contents (output_bfd,
11155                                                         o->output_section,
11156                                                         contents + todo,
11157                                                         offset,
11158                                                         address_size))
11159                           return FALSE;
11160                         if (todo == 0)
11161                           break;
11162                         offset += address_size;
11163                       }
11164                     while (1);
11165                   }
11166                 else if (! bfd_set_section_contents (output_bfd,
11167                                                      o->output_section,
11168                                                      contents,
11169                                                      offset, todo))
11170                   return FALSE;
11171               }
11172           }
11173           break;
11174         }
11175     }
11176
11177   return TRUE;
11178 }
11179
11180 /* Generate a reloc when linking an ELF file.  This is a reloc
11181    requested by the linker, and does not come from any input file.  This
11182    is used to build constructor and destructor tables when linking
11183    with -Ur.  */
11184
11185 static bfd_boolean
11186 elf_reloc_link_order (bfd *output_bfd,
11187                       struct bfd_link_info *info,
11188                       asection *output_section,
11189                       struct bfd_link_order *link_order)
11190 {
11191   reloc_howto_type *howto;
11192   long indx;
11193   bfd_vma offset;
11194   bfd_vma addend;
11195   struct bfd_elf_section_reloc_data *reldata;
11196   struct elf_link_hash_entry **rel_hash_ptr;
11197   Elf_Internal_Shdr *rel_hdr;
11198   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
11199   Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
11200   bfd_byte *erel;
11201   unsigned int i;
11202   struct bfd_elf_section_data *esdo = elf_section_data (output_section);
11203
11204   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
11205   if (howto == NULL)
11206     {
11207       bfd_set_error (bfd_error_bad_value);
11208       return FALSE;
11209     }
11210
11211   addend = link_order->u.reloc.p->addend;
11212
11213   if (esdo->rel.hdr)
11214     reldata = &esdo->rel;
11215   else if (esdo->rela.hdr)
11216     reldata = &esdo->rela;
11217   else
11218     {
11219       reldata = NULL;
11220       BFD_ASSERT (0);
11221     }
11222
11223   /* Figure out the symbol index.  */
11224   rel_hash_ptr = reldata->hashes + reldata->count;
11225   if (link_order->type == bfd_section_reloc_link_order)
11226     {
11227       indx = link_order->u.reloc.p->u.section->target_index;
11228       BFD_ASSERT (indx != 0);
11229       *rel_hash_ptr = NULL;
11230     }
11231   else
11232     {
11233       struct elf_link_hash_entry *h;
11234
11235       /* Treat a reloc against a defined symbol as though it were
11236          actually against the section.  */
11237       h = ((struct elf_link_hash_entry *)
11238            bfd_wrapped_link_hash_lookup (output_bfd, info,
11239                                          link_order->u.reloc.p->u.name,
11240                                          FALSE, FALSE, TRUE));
11241       if (h != NULL
11242           && (h->root.type == bfd_link_hash_defined
11243               || h->root.type == bfd_link_hash_defweak))
11244         {
11245           asection *section;
11246
11247           section = h->root.u.def.section;
11248           indx = section->output_section->target_index;
11249           *rel_hash_ptr = NULL;
11250           /* It seems that we ought to add the symbol value to the
11251              addend here, but in practice it has already been added
11252              because it was passed to constructor_callback.  */
11253           addend += section->output_section->vma + section->output_offset;
11254         }
11255       else if (h != NULL)
11256         {
11257           /* Setting the index to -2 tells elf_link_output_extsym that
11258              this symbol is used by a reloc.  */
11259           h->indx = -2;
11260           *rel_hash_ptr = h;
11261           indx = 0;
11262         }
11263       else
11264         {
11265           (*info->callbacks->unattached_reloc)
11266             (info, link_order->u.reloc.p->u.name, NULL, NULL, 0);
11267           indx = 0;
11268         }
11269     }
11270
11271   /* If this is an inplace reloc, we must write the addend into the
11272      object file.  */
11273   if (howto->partial_inplace && addend != 0)
11274     {
11275       bfd_size_type size;
11276       bfd_reloc_status_type rstat;
11277       bfd_byte *buf;
11278       bfd_boolean ok;
11279       const char *sym_name;
11280
11281       size = (bfd_size_type) bfd_get_reloc_size (howto);
11282       buf = (bfd_byte *) bfd_zmalloc (size);
11283       if (buf == NULL && size != 0)
11284         return FALSE;
11285       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
11286       switch (rstat)
11287         {
11288         case bfd_reloc_ok:
11289           break;
11290
11291         default:
11292         case bfd_reloc_outofrange:
11293           abort ();
11294
11295         case bfd_reloc_overflow:
11296           if (link_order->type == bfd_section_reloc_link_order)
11297             sym_name = bfd_section_name (output_bfd,
11298                                          link_order->u.reloc.p->u.section);
11299           else
11300             sym_name = link_order->u.reloc.p->u.name;
11301           (*info->callbacks->reloc_overflow) (info, NULL, sym_name,
11302                                               howto->name, addend, NULL, NULL,
11303                                               (bfd_vma) 0);
11304           break;
11305         }
11306
11307       ok = bfd_set_section_contents (output_bfd, output_section, buf,
11308                                      link_order->offset
11309                                      * bfd_octets_per_byte (output_bfd),
11310                                      size);
11311       free (buf);
11312       if (! ok)
11313         return FALSE;
11314     }
11315
11316   /* The address of a reloc is relative to the section in a
11317      relocatable file, and is a virtual address in an executable
11318      file.  */
11319   offset = link_order->offset;
11320   if (! bfd_link_relocatable (info))
11321     offset += output_section->vma;
11322
11323   for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
11324     {
11325       irel[i].r_offset = offset;
11326       irel[i].r_info = 0;
11327       irel[i].r_addend = 0;
11328     }
11329   if (bed->s->arch_size == 32)
11330     irel[0].r_info = ELF32_R_INFO (indx, howto->type);
11331   else
11332     irel[0].r_info = ELF64_R_INFO (indx, howto->type);
11333
11334   rel_hdr = reldata->hdr;
11335   erel = rel_hdr->contents;
11336   if (rel_hdr->sh_type == SHT_REL)
11337     {
11338       erel += reldata->count * bed->s->sizeof_rel;
11339       (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
11340     }
11341   else
11342     {
11343       irel[0].r_addend = addend;
11344       erel += reldata->count * bed->s->sizeof_rela;
11345       (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
11346     }
11347
11348   ++reldata->count;
11349
11350   return TRUE;
11351 }
11352
11353
11354 /* Get the output vma of the section pointed to by the sh_link field.  */
11355
11356 static bfd_vma
11357 elf_get_linked_section_vma (struct bfd_link_order *p)
11358 {
11359   Elf_Internal_Shdr **elf_shdrp;
11360   asection *s;
11361   int elfsec;
11362
11363   s = p->u.indirect.section;
11364   elf_shdrp = elf_elfsections (s->owner);
11365   elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
11366   elfsec = elf_shdrp[elfsec]->sh_link;
11367   /* PR 290:
11368      The Intel C compiler generates SHT_IA_64_UNWIND with
11369      SHF_LINK_ORDER.  But it doesn't set the sh_link or
11370      sh_info fields.  Hence we could get the situation
11371      where elfsec is 0.  */
11372   if (elfsec == 0)
11373     {
11374       const struct elf_backend_data *bed
11375         = get_elf_backend_data (s->owner);
11376       if (bed->link_order_error_handler)
11377         bed->link_order_error_handler
11378           /* xgettext:c-format */
11379           (_("%pB: warning: sh_link not set for section `%pA'"), s->owner, s);
11380       return 0;
11381     }
11382   else
11383     {
11384       s = elf_shdrp[elfsec]->bfd_section;
11385       return s->output_section->vma + s->output_offset;
11386     }
11387 }
11388
11389
11390 /* Compare two sections based on the locations of the sections they are
11391    linked to.  Used by elf_fixup_link_order.  */
11392
11393 static int
11394 compare_link_order (const void * a, const void * b)
11395 {
11396   bfd_vma apos;
11397   bfd_vma bpos;
11398
11399   apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
11400   bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
11401   if (apos < bpos)
11402     return -1;
11403   return apos > bpos;
11404 }
11405
11406
11407 /* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
11408    order as their linked sections.  Returns false if this could not be done
11409    because an output section includes both ordered and unordered
11410    sections.  Ideally we'd do this in the linker proper.  */
11411
11412 static bfd_boolean
11413 elf_fixup_link_order (bfd *abfd, asection *o)
11414 {
11415   int seen_linkorder;
11416   int seen_other;
11417   int n;
11418   struct bfd_link_order *p;
11419   bfd *sub;
11420   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11421   unsigned elfsec;
11422   struct bfd_link_order **sections;
11423   asection *s, *other_sec, *linkorder_sec;
11424   bfd_vma offset;
11425
11426   other_sec = NULL;
11427   linkorder_sec = NULL;
11428   seen_other = 0;
11429   seen_linkorder = 0;
11430   for (p = o->map_head.link_order; p != NULL; p = p->next)
11431     {
11432       if (p->type == bfd_indirect_link_order)
11433         {
11434           s = p->u.indirect.section;
11435           sub = s->owner;
11436           if (bfd_get_flavour (sub) == bfd_target_elf_flavour
11437               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
11438               && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
11439               && elfsec < elf_numsections (sub)
11440               && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER
11441               && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub))
11442             {
11443               seen_linkorder++;
11444               linkorder_sec = s;
11445             }
11446           else
11447             {
11448               seen_other++;
11449               other_sec = s;
11450             }
11451         }
11452       else
11453         seen_other++;
11454
11455       if (seen_other && seen_linkorder)
11456         {
11457           if (other_sec && linkorder_sec)
11458             _bfd_error_handler
11459               /* xgettext:c-format */
11460               (_("%pA has both ordered [`%pA' in %pB] "
11461                  "and unordered [`%pA' in %pB] sections"),
11462                o, linkorder_sec, linkorder_sec->owner,
11463                other_sec, other_sec->owner);
11464           else
11465             _bfd_error_handler
11466               (_("%pA has both ordered and unordered sections"), o);
11467           bfd_set_error (bfd_error_bad_value);
11468           return FALSE;
11469         }
11470     }
11471
11472   if (!seen_linkorder)
11473     return TRUE;
11474
11475   sections = (struct bfd_link_order **)
11476     bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *));
11477   if (sections == NULL)
11478     return FALSE;
11479   seen_linkorder = 0;
11480
11481   for (p = o->map_head.link_order; p != NULL; p = p->next)
11482     {
11483       sections[seen_linkorder++] = p;
11484     }
11485   /* Sort the input sections in the order of their linked section.  */
11486   qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
11487          compare_link_order);
11488
11489   /* Change the offsets of the sections.  */
11490   offset = 0;
11491   for (n = 0; n < seen_linkorder; n++)
11492     {
11493       s = sections[n]->u.indirect.section;
11494       offset &= ~(bfd_vma) 0 << s->alignment_power;
11495       s->output_offset = offset / bfd_octets_per_byte (abfd);
11496       sections[n]->offset = offset;
11497       offset += sections[n]->size;
11498     }
11499
11500   free (sections);
11501   return TRUE;
11502 }
11503
11504 /* Generate an import library in INFO->implib_bfd from symbols in ABFD.
11505    Returns TRUE upon success, FALSE otherwise.  */
11506
11507 static bfd_boolean
11508 elf_output_implib (bfd *abfd, struct bfd_link_info *info)
11509 {
11510   bfd_boolean ret = FALSE;
11511   bfd *implib_bfd;
11512   const struct elf_backend_data *bed;
11513   flagword flags;
11514   enum bfd_architecture arch;
11515   unsigned int mach;
11516   asymbol **sympp = NULL;
11517   long symsize;
11518   long symcount;
11519   long src_count;
11520   elf_symbol_type *osymbuf;
11521
11522   implib_bfd = info->out_implib_bfd;
11523   bed = get_elf_backend_data (abfd);
11524
11525   if (!bfd_set_format (implib_bfd, bfd_object))
11526     return FALSE;
11527
11528   /* Use flag from executable but make it a relocatable object.  */
11529   flags = bfd_get_file_flags (abfd);
11530   flags &= ~HAS_RELOC;
11531   if (!bfd_set_start_address (implib_bfd, 0)
11532       || !bfd_set_file_flags (implib_bfd, flags & ~EXEC_P))
11533     return FALSE;
11534
11535   /* Copy architecture of output file to import library file.  */
11536   arch = bfd_get_arch (abfd);
11537   mach = bfd_get_mach (abfd);
11538   if (!bfd_set_arch_mach (implib_bfd, arch, mach)
11539       && (abfd->target_defaulted
11540           || bfd_get_arch (abfd) != bfd_get_arch (implib_bfd)))
11541     return FALSE;
11542
11543   /* Get symbol table size.  */
11544   symsize = bfd_get_symtab_upper_bound (abfd);
11545   if (symsize < 0)
11546     return FALSE;
11547
11548   /* Read in the symbol table.  */
11549   sympp = (asymbol **) xmalloc (symsize);
11550   symcount = bfd_canonicalize_symtab (abfd, sympp);
11551   if (symcount < 0)
11552     goto free_sym_buf;
11553
11554   /* Allow the BFD backend to copy any private header data it
11555      understands from the output BFD to the import library BFD.  */
11556   if (! bfd_copy_private_header_data (abfd, implib_bfd))
11557     goto free_sym_buf;
11558
11559   /* Filter symbols to appear in the import library.  */
11560   if (bed->elf_backend_filter_implib_symbols)
11561     symcount = bed->elf_backend_filter_implib_symbols (abfd, info, sympp,
11562                                                        symcount);
11563   else
11564     symcount = _bfd_elf_filter_global_symbols (abfd, info, sympp, symcount);
11565   if (symcount == 0)
11566     {
11567       bfd_set_error (bfd_error_no_symbols);
11568       _bfd_error_handler (_("%pB: no symbol found for import library"),
11569                           implib_bfd);
11570       goto free_sym_buf;
11571     }
11572
11573
11574   /* Make symbols absolute.  */
11575   osymbuf = (elf_symbol_type *) bfd_alloc2 (implib_bfd, symcount,
11576                                             sizeof (*osymbuf));
11577   for (src_count = 0; src_count < symcount; src_count++)
11578     {
11579       memcpy (&osymbuf[src_count], (elf_symbol_type *) sympp[src_count],
11580               sizeof (*osymbuf));
11581       osymbuf[src_count].symbol.section = bfd_abs_section_ptr;
11582       osymbuf[src_count].internal_elf_sym.st_shndx = SHN_ABS;
11583       osymbuf[src_count].symbol.value += sympp[src_count]->section->vma;
11584       osymbuf[src_count].internal_elf_sym.st_value =
11585         osymbuf[src_count].symbol.value;
11586       sympp[src_count] = &osymbuf[src_count].symbol;
11587     }
11588
11589   bfd_set_symtab (implib_bfd, sympp, symcount);
11590
11591   /* Allow the BFD backend to copy any private data it understands
11592      from the output BFD to the import library BFD.  This is done last
11593      to permit the routine to look at the filtered symbol table.  */
11594   if (! bfd_copy_private_bfd_data (abfd, implib_bfd))
11595     goto free_sym_buf;
11596
11597   if (!bfd_close (implib_bfd))
11598     goto free_sym_buf;
11599
11600   ret = TRUE;
11601
11602 free_sym_buf:
11603   free (sympp);
11604   return ret;
11605 }
11606
11607 static void
11608 elf_final_link_free (bfd *obfd, struct elf_final_link_info *flinfo)
11609 {
11610   asection *o;
11611
11612   if (flinfo->symstrtab != NULL)
11613     _bfd_elf_strtab_free (flinfo->symstrtab);
11614   if (flinfo->contents != NULL)
11615     free (flinfo->contents);
11616   if (flinfo->external_relocs != NULL)
11617     free (flinfo->external_relocs);
11618   if (flinfo->internal_relocs != NULL)
11619     free (flinfo->internal_relocs);
11620   if (flinfo->external_syms != NULL)
11621     free (flinfo->external_syms);
11622   if (flinfo->locsym_shndx != NULL)
11623     free (flinfo->locsym_shndx);
11624   if (flinfo->internal_syms != NULL)
11625     free (flinfo->internal_syms);
11626   if (flinfo->indices != NULL)
11627     free (flinfo->indices);
11628   if (flinfo->sections != NULL)
11629     free (flinfo->sections);
11630   if (flinfo->symshndxbuf != NULL)
11631     free (flinfo->symshndxbuf);
11632   for (o = obfd->sections; o != NULL; o = o->next)
11633     {
11634       struct bfd_elf_section_data *esdo = elf_section_data (o);
11635       if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL)
11636         free (esdo->rel.hashes);
11637       if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL)
11638         free (esdo->rela.hashes);
11639     }
11640 }
11641
11642 /* Do the final step of an ELF link.  */
11643
11644 bfd_boolean
11645 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
11646 {
11647   bfd_boolean dynamic;
11648   bfd_boolean emit_relocs;
11649   bfd *dynobj;
11650   struct elf_final_link_info flinfo;
11651   asection *o;
11652   struct bfd_link_order *p;
11653   bfd *sub;
11654   bfd_size_type max_contents_size;
11655   bfd_size_type max_external_reloc_size;
11656   bfd_size_type max_internal_reloc_count;
11657   bfd_size_type max_sym_count;
11658   bfd_size_type max_sym_shndx_count;
11659   Elf_Internal_Sym elfsym;
11660   unsigned int i;
11661   Elf_Internal_Shdr *symtab_hdr;
11662   Elf_Internal_Shdr *symtab_shndx_hdr;
11663   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11664   struct elf_outext_info eoinfo;
11665   bfd_boolean merged;
11666   size_t relativecount = 0;
11667   asection *reldyn = 0;
11668   bfd_size_type amt;
11669   asection *attr_section = NULL;
11670   bfd_vma attr_size = 0;
11671   const char *std_attrs_section;
11672   struct elf_link_hash_table *htab = elf_hash_table (info);
11673
11674   if (!is_elf_hash_table (htab))
11675     return FALSE;
11676
11677   if (bfd_link_pic (info))
11678     abfd->flags |= DYNAMIC;
11679
11680   dynamic = htab->dynamic_sections_created;
11681   dynobj = htab->dynobj;
11682
11683   emit_relocs = (bfd_link_relocatable (info)
11684                  || info->emitrelocations);
11685
11686   flinfo.info = info;
11687   flinfo.output_bfd = abfd;
11688   flinfo.symstrtab = _bfd_elf_strtab_init ();
11689   if (flinfo.symstrtab == NULL)
11690     return FALSE;
11691
11692   if (! dynamic)
11693     {
11694       flinfo.hash_sec = NULL;
11695       flinfo.symver_sec = NULL;
11696     }
11697   else
11698     {
11699       flinfo.hash_sec = bfd_get_linker_section (dynobj, ".hash");
11700       /* Note that dynsym_sec can be NULL (on VMS).  */
11701       flinfo.symver_sec = bfd_get_linker_section (dynobj, ".gnu.version");
11702       /* Note that it is OK if symver_sec is NULL.  */
11703     }
11704
11705   flinfo.contents = NULL;
11706   flinfo.external_relocs = NULL;
11707   flinfo.internal_relocs = NULL;
11708   flinfo.external_syms = NULL;
11709   flinfo.locsym_shndx = NULL;
11710   flinfo.internal_syms = NULL;
11711   flinfo.indices = NULL;
11712   flinfo.sections = NULL;
11713   flinfo.symshndxbuf = NULL;
11714   flinfo.filesym_count = 0;
11715
11716   /* The object attributes have been merged.  Remove the input
11717      sections from the link, and set the contents of the output
11718      secton.  */
11719   std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
11720   for (o = abfd->sections; o != NULL; o = o->next)
11721     {
11722       bfd_boolean remove = FALSE;
11723
11724       if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
11725           || strcmp (o->name, ".gnu.attributes") == 0)
11726         {
11727           for (p = o->map_head.link_order; p != NULL; p = p->next)
11728             {
11729               asection *input_section;
11730
11731               if (p->type != bfd_indirect_link_order)
11732                 continue;
11733               input_section = p->u.indirect.section;
11734               /* Hack: reset the SEC_HAS_CONTENTS flag so that
11735                  elf_link_input_bfd ignores this section.  */
11736               input_section->flags &= ~SEC_HAS_CONTENTS;
11737             }
11738
11739           attr_size = bfd_elf_obj_attr_size (abfd);
11740           bfd_set_section_size (abfd, o, attr_size);
11741           /* Skip this section later on.  */
11742           o->map_head.link_order = NULL;
11743           if (attr_size)
11744             attr_section = o;
11745           else
11746             remove = TRUE;
11747         }
11748       else if ((o->flags & SEC_GROUP) != 0 && o->size == 0)
11749         {
11750           /* Remove empty group section from linker output.  */
11751           remove = TRUE;
11752         }
11753       if (remove)
11754         {
11755           o->flags |= SEC_EXCLUDE;
11756           bfd_section_list_remove (abfd, o);
11757           abfd->section_count--;
11758         }
11759     }
11760
11761   /* Count up the number of relocations we will output for each output
11762      section, so that we know the sizes of the reloc sections.  We
11763      also figure out some maximum sizes.  */
11764   max_contents_size = 0;
11765   max_external_reloc_size = 0;
11766   max_internal_reloc_count = 0;
11767   max_sym_count = 0;
11768   max_sym_shndx_count = 0;
11769   merged = FALSE;
11770   for (o = abfd->sections; o != NULL; o = o->next)
11771     {
11772       struct bfd_elf_section_data *esdo = elf_section_data (o);
11773       o->reloc_count = 0;
11774
11775       for (p = o->map_head.link_order; p != NULL; p = p->next)
11776         {
11777           unsigned int reloc_count = 0;
11778           unsigned int additional_reloc_count = 0;
11779           struct bfd_elf_section_data *esdi = NULL;
11780
11781           if (p->type == bfd_section_reloc_link_order
11782               || p->type == bfd_symbol_reloc_link_order)
11783             reloc_count = 1;
11784           else if (p->type == bfd_indirect_link_order)
11785             {
11786               asection *sec;
11787
11788               sec = p->u.indirect.section;
11789
11790               /* Mark all sections which are to be included in the
11791                  link.  This will normally be every section.  We need
11792                  to do this so that we can identify any sections which
11793                  the linker has decided to not include.  */
11794               sec->linker_mark = TRUE;
11795
11796               if (sec->flags & SEC_MERGE)
11797                 merged = TRUE;
11798
11799               if (sec->rawsize > max_contents_size)
11800                 max_contents_size = sec->rawsize;
11801               if (sec->size > max_contents_size)
11802                 max_contents_size = sec->size;
11803
11804               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
11805                   && (sec->owner->flags & DYNAMIC) == 0)
11806                 {
11807                   size_t sym_count;
11808
11809                   /* We are interested in just local symbols, not all
11810                      symbols.  */
11811                   if (elf_bad_symtab (sec->owner))
11812                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
11813                                  / bed->s->sizeof_sym);
11814                   else
11815                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
11816
11817                   if (sym_count > max_sym_count)
11818                     max_sym_count = sym_count;
11819
11820                   if (sym_count > max_sym_shndx_count
11821                       && elf_symtab_shndx_list (sec->owner) != NULL)
11822                     max_sym_shndx_count = sym_count;
11823
11824                   if (esdo->this_hdr.sh_type == SHT_REL
11825                       || esdo->this_hdr.sh_type == SHT_RELA)
11826                     /* Some backends use reloc_count in relocation sections
11827                        to count particular types of relocs.  Of course,
11828                        reloc sections themselves can't have relocations.  */
11829                     ;
11830                   else if (emit_relocs)
11831                     {
11832                       reloc_count = sec->reloc_count;
11833                       if (bed->elf_backend_count_additional_relocs)
11834                         {
11835                           int c;
11836                           c = (*bed->elf_backend_count_additional_relocs) (sec);
11837                           additional_reloc_count += c;
11838                         }
11839                     }
11840                   else if (bed->elf_backend_count_relocs)
11841                     reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
11842
11843                   esdi = elf_section_data (sec);
11844
11845                   if ((sec->flags & SEC_RELOC) != 0)
11846                     {
11847                       size_t ext_size = 0;
11848
11849                       if (esdi->rel.hdr != NULL)
11850                         ext_size = esdi->rel.hdr->sh_size;
11851                       if (esdi->rela.hdr != NULL)
11852                         ext_size += esdi->rela.hdr->sh_size;
11853
11854                       if (ext_size > max_external_reloc_size)
11855                         max_external_reloc_size = ext_size;
11856                       if (sec->reloc_count > max_internal_reloc_count)
11857                         max_internal_reloc_count = sec->reloc_count;
11858                     }
11859                 }
11860             }
11861
11862           if (reloc_count == 0)
11863             continue;
11864
11865           reloc_count += additional_reloc_count;
11866           o->reloc_count += reloc_count;
11867
11868           if (p->type == bfd_indirect_link_order && emit_relocs)
11869             {
11870               if (esdi->rel.hdr)
11871                 {
11872                   esdo->rel.count += NUM_SHDR_ENTRIES (esdi->rel.hdr);
11873                   esdo->rel.count += additional_reloc_count;
11874                 }
11875               if (esdi->rela.hdr)
11876                 {
11877                   esdo->rela.count += NUM_SHDR_ENTRIES (esdi->rela.hdr);
11878                   esdo->rela.count += additional_reloc_count;
11879                 }
11880             }
11881           else
11882             {
11883               if (o->use_rela_p)
11884                 esdo->rela.count += reloc_count;
11885               else
11886                 esdo->rel.count += reloc_count;
11887             }
11888         }
11889
11890       if (o->reloc_count > 0)
11891         o->flags |= SEC_RELOC;
11892       else
11893         {
11894           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
11895              set it (this is probably a bug) and if it is set
11896              assign_section_numbers will create a reloc section.  */
11897           o->flags &=~ SEC_RELOC;
11898         }
11899
11900       /* If the SEC_ALLOC flag is not set, force the section VMA to
11901          zero.  This is done in elf_fake_sections as well, but forcing
11902          the VMA to 0 here will ensure that relocs against these
11903          sections are handled correctly.  */
11904       if ((o->flags & SEC_ALLOC) == 0
11905           && ! o->user_set_vma)
11906         o->vma = 0;
11907     }
11908
11909   if (! bfd_link_relocatable (info) && merged)
11910     elf_link_hash_traverse (htab, _bfd_elf_link_sec_merge_syms, abfd);
11911
11912   /* Figure out the file positions for everything but the symbol table
11913      and the relocs.  We set symcount to force assign_section_numbers
11914      to create a symbol table.  */
11915   bfd_get_symcount (abfd) = info->strip != strip_all || emit_relocs;
11916   BFD_ASSERT (! abfd->output_has_begun);
11917   if (! _bfd_elf_compute_section_file_positions (abfd, info))
11918     goto error_return;
11919
11920   /* Set sizes, and assign file positions for reloc sections.  */
11921   for (o = abfd->sections; o != NULL; o = o->next)
11922     {
11923       struct bfd_elf_section_data *esdo = elf_section_data (o);
11924       if ((o->flags & SEC_RELOC) != 0)
11925         {
11926           if (esdo->rel.hdr
11927               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rel)))
11928             goto error_return;
11929
11930           if (esdo->rela.hdr
11931               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rela)))
11932             goto error_return;
11933         }
11934
11935       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
11936          to count upwards while actually outputting the relocations.  */
11937       esdo->rel.count = 0;
11938       esdo->rela.count = 0;
11939
11940       if (esdo->this_hdr.sh_offset == (file_ptr) -1)
11941         {
11942           /* Cache the section contents so that they can be compressed
11943              later.  Use bfd_malloc since it will be freed by
11944              bfd_compress_section_contents.  */
11945           unsigned char *contents = esdo->this_hdr.contents;
11946           if ((o->flags & SEC_ELF_COMPRESS) == 0 || contents != NULL)
11947             abort ();
11948           contents
11949             = (unsigned char *) bfd_malloc (esdo->this_hdr.sh_size);
11950           if (contents == NULL)
11951             goto error_return;
11952           esdo->this_hdr.contents = contents;
11953         }
11954     }
11955
11956   /* We have now assigned file positions for all the sections except
11957      .symtab, .strtab, and non-loaded reloc sections.  We start the
11958      .symtab section at the current file position, and write directly
11959      to it.  We build the .strtab section in memory.  */
11960   bfd_get_symcount (abfd) = 0;
11961   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11962   /* sh_name is set in prep_headers.  */
11963   symtab_hdr->sh_type = SHT_SYMTAB;
11964   /* sh_flags, sh_addr and sh_size all start off zero.  */
11965   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
11966   /* sh_link is set in assign_section_numbers.  */
11967   /* sh_info is set below.  */
11968   /* sh_offset is set just below.  */
11969   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
11970
11971   if (max_sym_count < 20)
11972     max_sym_count = 20;
11973   htab->strtabsize = max_sym_count;
11974   amt = max_sym_count * sizeof (struct elf_sym_strtab);
11975   htab->strtab = (struct elf_sym_strtab *) bfd_malloc (amt);
11976   if (htab->strtab == NULL)
11977     goto error_return;
11978   /* The real buffer will be allocated in elf_link_swap_symbols_out.  */
11979   flinfo.symshndxbuf
11980     = (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF)
11981        ? (Elf_External_Sym_Shndx *) -1 : NULL);
11982
11983   if (info->strip != strip_all || emit_relocs)
11984     {
11985       file_ptr off = elf_next_file_pos (abfd);
11986
11987       _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
11988
11989       /* Note that at this point elf_next_file_pos (abfd) is
11990          incorrect.  We do not yet know the size of the .symtab section.
11991          We correct next_file_pos below, after we do know the size.  */
11992
11993       /* Start writing out the symbol table.  The first symbol is always a
11994          dummy symbol.  */
11995       elfsym.st_value = 0;
11996       elfsym.st_size = 0;
11997       elfsym.st_info = 0;
11998       elfsym.st_other = 0;
11999       elfsym.st_shndx = SHN_UNDEF;
12000       elfsym.st_target_internal = 0;
12001       if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym,
12002                                      bfd_und_section_ptr, NULL) != 1)
12003         goto error_return;
12004
12005       /* Output a symbol for each section.  We output these even if we are
12006          discarding local symbols, since they are used for relocs.  These
12007          symbols have no names.  We store the index of each one in the
12008          index field of the section, so that we can find it again when
12009          outputting relocs.  */
12010
12011       elfsym.st_size = 0;
12012       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
12013       elfsym.st_other = 0;
12014       elfsym.st_value = 0;
12015       elfsym.st_target_internal = 0;
12016       for (i = 1; i < elf_numsections (abfd); i++)
12017         {
12018           o = bfd_section_from_elf_index (abfd, i);
12019           if (o != NULL)
12020             {
12021               o->target_index = bfd_get_symcount (abfd);
12022               elfsym.st_shndx = i;
12023               if (!bfd_link_relocatable (info))
12024                 elfsym.st_value = o->vma;
12025               if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym, o,
12026                                              NULL) != 1)
12027                 goto error_return;
12028             }
12029         }
12030     }
12031
12032   /* Allocate some memory to hold information read in from the input
12033      files.  */
12034   if (max_contents_size != 0)
12035     {
12036       flinfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
12037       if (flinfo.contents == NULL)
12038         goto error_return;
12039     }
12040
12041   if (max_external_reloc_size != 0)
12042     {
12043       flinfo.external_relocs = bfd_malloc (max_external_reloc_size);
12044       if (flinfo.external_relocs == NULL)
12045         goto error_return;
12046     }
12047
12048   if (max_internal_reloc_count != 0)
12049     {
12050       amt = max_internal_reloc_count * sizeof (Elf_Internal_Rela);
12051       flinfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
12052       if (flinfo.internal_relocs == NULL)
12053         goto error_return;
12054     }
12055
12056   if (max_sym_count != 0)
12057     {
12058       amt = max_sym_count * bed->s->sizeof_sym;
12059       flinfo.external_syms = (bfd_byte *) bfd_malloc (amt);
12060       if (flinfo.external_syms == NULL)
12061         goto error_return;
12062
12063       amt = max_sym_count * sizeof (Elf_Internal_Sym);
12064       flinfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
12065       if (flinfo.internal_syms == NULL)
12066         goto error_return;
12067
12068       amt = max_sym_count * sizeof (long);
12069       flinfo.indices = (long int *) bfd_malloc (amt);
12070       if (flinfo.indices == NULL)
12071         goto error_return;
12072
12073       amt = max_sym_count * sizeof (asection *);
12074       flinfo.sections = (asection **) bfd_malloc (amt);
12075       if (flinfo.sections == NULL)
12076         goto error_return;
12077     }
12078
12079   if (max_sym_shndx_count != 0)
12080     {
12081       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
12082       flinfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
12083       if (flinfo.locsym_shndx == NULL)
12084         goto error_return;
12085     }
12086
12087   if (htab->tls_sec)
12088     {
12089       bfd_vma base, end = 0;
12090       asection *sec;
12091
12092       for (sec = htab->tls_sec;
12093            sec && (sec->flags & SEC_THREAD_LOCAL);
12094            sec = sec->next)
12095         {
12096           bfd_size_type size = sec->size;
12097
12098           if (size == 0
12099               && (sec->flags & SEC_HAS_CONTENTS) == 0)
12100             {
12101               struct bfd_link_order *ord = sec->map_tail.link_order;
12102
12103               if (ord != NULL)
12104                 size = ord->offset + ord->size;
12105             }
12106           end = sec->vma + size;
12107         }
12108       base = htab->tls_sec->vma;
12109       /* Only align end of TLS section if static TLS doesn't have special
12110          alignment requirements.  */
12111       if (bed->static_tls_alignment == 1)
12112         end = align_power (end, htab->tls_sec->alignment_power);
12113       htab->tls_size = end - base;
12114     }
12115
12116   /* Reorder SHF_LINK_ORDER sections.  */
12117   for (o = abfd->sections; o != NULL; o = o->next)
12118     {
12119       if (!elf_fixup_link_order (abfd, o))
12120         return FALSE;
12121     }
12122
12123   if (!_bfd_elf_fixup_eh_frame_hdr (info))
12124     return FALSE;
12125
12126   /* Since ELF permits relocations to be against local symbols, we
12127      must have the local symbols available when we do the relocations.
12128      Since we would rather only read the local symbols once, and we
12129      would rather not keep them in memory, we handle all the
12130      relocations for a single input file at the same time.
12131
12132      Unfortunately, there is no way to know the total number of local
12133      symbols until we have seen all of them, and the local symbol
12134      indices precede the global symbol indices.  This means that when
12135      we are generating relocatable output, and we see a reloc against
12136      a global symbol, we can not know the symbol index until we have
12137      finished examining all the local symbols to see which ones we are
12138      going to output.  To deal with this, we keep the relocations in
12139      memory, and don't output them until the end of the link.  This is
12140      an unfortunate waste of memory, but I don't see a good way around
12141      it.  Fortunately, it only happens when performing a relocatable
12142      link, which is not the common case.  FIXME: If keep_memory is set
12143      we could write the relocs out and then read them again; I don't
12144      know how bad the memory loss will be.  */
12145
12146   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12147     sub->output_has_begun = FALSE;
12148   for (o = abfd->sections; o != NULL; o = o->next)
12149     {
12150       for (p = o->map_head.link_order; p != NULL; p = p->next)
12151         {
12152           if (p->type == bfd_indirect_link_order
12153               && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
12154                   == bfd_target_elf_flavour)
12155               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
12156             {
12157               if (! sub->output_has_begun)
12158                 {
12159                   if (! elf_link_input_bfd (&flinfo, sub))
12160                     goto error_return;
12161                   sub->output_has_begun = TRUE;
12162                 }
12163             }
12164           else if (p->type == bfd_section_reloc_link_order
12165                    || p->type == bfd_symbol_reloc_link_order)
12166             {
12167               if (! elf_reloc_link_order (abfd, info, o, p))
12168                 goto error_return;
12169             }
12170           else
12171             {
12172               if (! _bfd_default_link_order (abfd, info, o, p))
12173                 {
12174                   if (p->type == bfd_indirect_link_order
12175                       && (bfd_get_flavour (sub)
12176                           == bfd_target_elf_flavour)
12177                       && (elf_elfheader (sub)->e_ident[EI_CLASS]
12178                           != bed->s->elfclass))
12179                     {
12180                       const char *iclass, *oclass;
12181
12182                       switch (bed->s->elfclass)
12183                         {
12184                         case ELFCLASS64: oclass = "ELFCLASS64"; break;
12185                         case ELFCLASS32: oclass = "ELFCLASS32"; break;
12186                         case ELFCLASSNONE: oclass = "ELFCLASSNONE"; break;
12187                         default: abort ();
12188                         }
12189
12190                       switch (elf_elfheader (sub)->e_ident[EI_CLASS])
12191                         {
12192                         case ELFCLASS64: iclass = "ELFCLASS64"; break;
12193                         case ELFCLASS32: iclass = "ELFCLASS32"; break;
12194                         case ELFCLASSNONE: iclass = "ELFCLASSNONE"; break;
12195                         default: abort ();
12196                         }
12197
12198                       bfd_set_error (bfd_error_wrong_format);
12199                       _bfd_error_handler
12200                         /* xgettext:c-format */
12201                         (_("%pB: file class %s incompatible with %s"),
12202                          sub, iclass, oclass);
12203                     }
12204
12205                   goto error_return;
12206                 }
12207             }
12208         }
12209     }
12210
12211   /* Free symbol buffer if needed.  */
12212   if (!info->reduce_memory_overheads)
12213     {
12214       for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12215         if (bfd_get_flavour (sub) == bfd_target_elf_flavour
12216             && elf_tdata (sub)->symbuf)
12217           {
12218             free (elf_tdata (sub)->symbuf);
12219             elf_tdata (sub)->symbuf = NULL;
12220           }
12221     }
12222
12223   /* Output any global symbols that got converted to local in a
12224      version script or due to symbol visibility.  We do this in a
12225      separate step since ELF requires all local symbols to appear
12226      prior to any global symbols.  FIXME: We should only do this if
12227      some global symbols were, in fact, converted to become local.
12228      FIXME: Will this work correctly with the Irix 5 linker?  */
12229   eoinfo.failed = FALSE;
12230   eoinfo.flinfo = &flinfo;
12231   eoinfo.localsyms = TRUE;
12232   eoinfo.file_sym_done = FALSE;
12233   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
12234   if (eoinfo.failed)
12235     return FALSE;
12236
12237   /* If backend needs to output some local symbols not present in the hash
12238      table, do it now.  */
12239   if (bed->elf_backend_output_arch_local_syms
12240       && (info->strip != strip_all || emit_relocs))
12241     {
12242       typedef int (*out_sym_func)
12243         (void *, const char *, Elf_Internal_Sym *, asection *,
12244          struct elf_link_hash_entry *);
12245
12246       if (! ((*bed->elf_backend_output_arch_local_syms)
12247              (abfd, info, &flinfo,
12248               (out_sym_func) elf_link_output_symstrtab)))
12249         return FALSE;
12250     }
12251
12252   /* That wrote out all the local symbols.  Finish up the symbol table
12253      with the global symbols. Even if we want to strip everything we
12254      can, we still need to deal with those global symbols that got
12255      converted to local in a version script.  */
12256
12257   /* The sh_info field records the index of the first non local symbol.  */
12258   symtab_hdr->sh_info = bfd_get_symcount (abfd);
12259
12260   if (dynamic
12261       && htab->dynsym != NULL
12262       && htab->dynsym->output_section != bfd_abs_section_ptr)
12263     {
12264       Elf_Internal_Sym sym;
12265       bfd_byte *dynsym = htab->dynsym->contents;
12266
12267       o = htab->dynsym->output_section;
12268       elf_section_data (o)->this_hdr.sh_info = htab->local_dynsymcount + 1;
12269
12270       /* Write out the section symbols for the output sections.  */
12271       if (bfd_link_pic (info)
12272           || htab->is_relocatable_executable)
12273         {
12274           asection *s;
12275
12276           sym.st_size = 0;
12277           sym.st_name = 0;
12278           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
12279           sym.st_other = 0;
12280           sym.st_target_internal = 0;
12281
12282           for (s = abfd->sections; s != NULL; s = s->next)
12283             {
12284               int indx;
12285               bfd_byte *dest;
12286               long dynindx;
12287
12288               dynindx = elf_section_data (s)->dynindx;
12289               if (dynindx <= 0)
12290                 continue;
12291               indx = elf_section_data (s)->this_idx;
12292               BFD_ASSERT (indx > 0);
12293               sym.st_shndx = indx;
12294               if (! check_dynsym (abfd, &sym))
12295                 return FALSE;
12296               sym.st_value = s->vma;
12297               dest = dynsym + dynindx * bed->s->sizeof_sym;
12298               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
12299             }
12300         }
12301
12302       /* Write out the local dynsyms.  */
12303       if (htab->dynlocal)
12304         {
12305           struct elf_link_local_dynamic_entry *e;
12306           for (e = htab->dynlocal; e ; e = e->next)
12307             {
12308               asection *s;
12309               bfd_byte *dest;
12310
12311               /* Copy the internal symbol and turn off visibility.
12312                  Note that we saved a word of storage and overwrote
12313                  the original st_name with the dynstr_index.  */
12314               sym = e->isym;
12315               sym.st_other &= ~ELF_ST_VISIBILITY (-1);
12316
12317               s = bfd_section_from_elf_index (e->input_bfd,
12318                                               e->isym.st_shndx);
12319               if (s != NULL)
12320                 {
12321                   sym.st_shndx =
12322                     elf_section_data (s->output_section)->this_idx;
12323                   if (! check_dynsym (abfd, &sym))
12324                     return FALSE;
12325                   sym.st_value = (s->output_section->vma
12326                                   + s->output_offset
12327                                   + e->isym.st_value);
12328                 }
12329
12330               dest = dynsym + e->dynindx * bed->s->sizeof_sym;
12331               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
12332             }
12333         }
12334     }
12335
12336   /* We get the global symbols from the hash table.  */
12337   eoinfo.failed = FALSE;
12338   eoinfo.localsyms = FALSE;
12339   eoinfo.flinfo = &flinfo;
12340   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
12341   if (eoinfo.failed)
12342     return FALSE;
12343
12344   /* If backend needs to output some symbols not present in the hash
12345      table, do it now.  */
12346   if (bed->elf_backend_output_arch_syms
12347       && (info->strip != strip_all || emit_relocs))
12348     {
12349       typedef int (*out_sym_func)
12350         (void *, const char *, Elf_Internal_Sym *, asection *,
12351          struct elf_link_hash_entry *);
12352
12353       if (! ((*bed->elf_backend_output_arch_syms)
12354              (abfd, info, &flinfo,
12355               (out_sym_func) elf_link_output_symstrtab)))
12356         return FALSE;
12357     }
12358
12359   /* Finalize the .strtab section.  */
12360   _bfd_elf_strtab_finalize (flinfo.symstrtab);
12361
12362   /* Swap out the .strtab section. */
12363   if (!elf_link_swap_symbols_out (&flinfo))
12364     return FALSE;
12365
12366   /* Now we know the size of the symtab section.  */
12367   if (bfd_get_symcount (abfd) > 0)
12368     {
12369       /* Finish up and write out the symbol string table (.strtab)
12370          section.  */
12371       Elf_Internal_Shdr *symstrtab_hdr = NULL;
12372       file_ptr off = symtab_hdr->sh_offset + symtab_hdr->sh_size;
12373
12374       if (elf_symtab_shndx_list (abfd))
12375         {
12376           symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
12377
12378           if (symtab_shndx_hdr != NULL && symtab_shndx_hdr->sh_name != 0)
12379             {
12380               symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
12381               symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
12382               symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
12383               amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
12384               symtab_shndx_hdr->sh_size = amt;
12385
12386               off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
12387                                                                off, TRUE);
12388
12389               if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
12390                   || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
12391                 return FALSE;
12392             }
12393         }
12394
12395       symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
12396       /* sh_name was set in prep_headers.  */
12397       symstrtab_hdr->sh_type = SHT_STRTAB;
12398       symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
12399       symstrtab_hdr->sh_addr = 0;
12400       symstrtab_hdr->sh_size = _bfd_elf_strtab_size (flinfo.symstrtab);
12401       symstrtab_hdr->sh_entsize = 0;
12402       symstrtab_hdr->sh_link = 0;
12403       symstrtab_hdr->sh_info = 0;
12404       /* sh_offset is set just below.  */
12405       symstrtab_hdr->sh_addralign = 1;
12406
12407       off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr,
12408                                                        off, TRUE);
12409       elf_next_file_pos (abfd) = off;
12410
12411       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
12412           || ! _bfd_elf_strtab_emit (abfd, flinfo.symstrtab))
12413         return FALSE;
12414     }
12415
12416   if (info->out_implib_bfd && !elf_output_implib (abfd, info))
12417     {
12418       _bfd_error_handler (_("%pB: failed to generate import library"),
12419                           info->out_implib_bfd);
12420       return FALSE;
12421     }
12422
12423   /* Adjust the relocs to have the correct symbol indices.  */
12424   for (o = abfd->sections; o != NULL; o = o->next)
12425     {
12426       struct bfd_elf_section_data *esdo = elf_section_data (o);
12427       bfd_boolean sort;
12428
12429       if ((o->flags & SEC_RELOC) == 0)
12430         continue;
12431
12432       sort = bed->sort_relocs_p == NULL || (*bed->sort_relocs_p) (o);
12433       if (esdo->rel.hdr != NULL
12434           && !elf_link_adjust_relocs (abfd, o, &esdo->rel, sort, info))
12435         return FALSE;
12436       if (esdo->rela.hdr != NULL
12437           && !elf_link_adjust_relocs (abfd, o, &esdo->rela, sort, info))
12438         return FALSE;
12439
12440       /* Set the reloc_count field to 0 to prevent write_relocs from
12441          trying to swap the relocs out itself.  */
12442       o->reloc_count = 0;
12443     }
12444
12445   if (dynamic && info->combreloc && dynobj != NULL)
12446     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
12447
12448   /* If we are linking against a dynamic object, or generating a
12449      shared library, finish up the dynamic linking information.  */
12450   if (dynamic)
12451     {
12452       bfd_byte *dyncon, *dynconend;
12453
12454       /* Fix up .dynamic entries.  */
12455       o = bfd_get_linker_section (dynobj, ".dynamic");
12456       BFD_ASSERT (o != NULL);
12457
12458       dyncon = o->contents;
12459       dynconend = o->contents + o->size;
12460       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
12461         {
12462           Elf_Internal_Dyn dyn;
12463           const char *name;
12464           unsigned int type;
12465           bfd_size_type sh_size;
12466           bfd_vma sh_addr;
12467
12468           bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
12469
12470           switch (dyn.d_tag)
12471             {
12472             default:
12473               continue;
12474             case DT_NULL:
12475               if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
12476                 {
12477                   switch (elf_section_data (reldyn)->this_hdr.sh_type)
12478                     {
12479                     case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
12480                     case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
12481                     default: continue;
12482                     }
12483                   dyn.d_un.d_val = relativecount;
12484                   relativecount = 0;
12485                   break;
12486                 }
12487               continue;
12488
12489             case DT_INIT:
12490               name = info->init_function;
12491               goto get_sym;
12492             case DT_FINI:
12493               name = info->fini_function;
12494             get_sym:
12495               {
12496                 struct elf_link_hash_entry *h;
12497
12498                 h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
12499                 if (h != NULL
12500                     && (h->root.type == bfd_link_hash_defined
12501                         || h->root.type == bfd_link_hash_defweak))
12502                   {
12503                     dyn.d_un.d_ptr = h->root.u.def.value;
12504                     o = h->root.u.def.section;
12505                     if (o->output_section != NULL)
12506                       dyn.d_un.d_ptr += (o->output_section->vma
12507                                          + o->output_offset);
12508                     else
12509                       {
12510                         /* The symbol is imported from another shared
12511                            library and does not apply to this one.  */
12512                         dyn.d_un.d_ptr = 0;
12513                       }
12514                     break;
12515                   }
12516               }
12517               continue;
12518
12519             case DT_PREINIT_ARRAYSZ:
12520               name = ".preinit_array";
12521               goto get_out_size;
12522             case DT_INIT_ARRAYSZ:
12523               name = ".init_array";
12524               goto get_out_size;
12525             case DT_FINI_ARRAYSZ:
12526               name = ".fini_array";
12527             get_out_size:
12528               o = bfd_get_section_by_name (abfd, name);
12529               if (o == NULL)
12530                 {
12531                   _bfd_error_handler
12532                     (_("could not find section %s"), name);
12533                   goto error_return;
12534                 }
12535               if (o->size == 0)
12536                 _bfd_error_handler
12537                   (_("warning: %s section has zero size"), name);
12538               dyn.d_un.d_val = o->size;
12539               break;
12540
12541             case DT_PREINIT_ARRAY:
12542               name = ".preinit_array";
12543               goto get_out_vma;
12544             case DT_INIT_ARRAY:
12545               name = ".init_array";
12546               goto get_out_vma;
12547             case DT_FINI_ARRAY:
12548               name = ".fini_array";
12549             get_out_vma:
12550               o = bfd_get_section_by_name (abfd, name);
12551               goto do_vma;
12552
12553             case DT_HASH:
12554               name = ".hash";
12555               goto get_vma;
12556             case DT_GNU_HASH:
12557               name = ".gnu.hash";
12558               goto get_vma;
12559             case DT_STRTAB:
12560               name = ".dynstr";
12561               goto get_vma;
12562             case DT_SYMTAB:
12563               name = ".dynsym";
12564               goto get_vma;
12565             case DT_VERDEF:
12566               name = ".gnu.version_d";
12567               goto get_vma;
12568             case DT_VERNEED:
12569               name = ".gnu.version_r";
12570               goto get_vma;
12571             case DT_VERSYM:
12572               name = ".gnu.version";
12573             get_vma:
12574               o = bfd_get_linker_section (dynobj, name);
12575             do_vma:
12576               if (o == NULL || bfd_is_abs_section (o->output_section))
12577                 {
12578                   _bfd_error_handler
12579                     (_("could not find section %s"), name);
12580                   goto error_return;
12581                 }
12582               if (elf_section_data (o->output_section)->this_hdr.sh_type == SHT_NOTE)
12583                 {
12584                   _bfd_error_handler
12585                     (_("warning: section '%s' is being made into a note"), name);
12586                   bfd_set_error (bfd_error_nonrepresentable_section);
12587                   goto error_return;
12588                 }
12589               dyn.d_un.d_ptr = o->output_section->vma + o->output_offset;
12590               break;
12591
12592             case DT_REL:
12593             case DT_RELA:
12594             case DT_RELSZ:
12595             case DT_RELASZ:
12596               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
12597                 type = SHT_REL;
12598               else
12599                 type = SHT_RELA;
12600               sh_size = 0;
12601               sh_addr = 0;
12602               for (i = 1; i < elf_numsections (abfd); i++)
12603                 {
12604                   Elf_Internal_Shdr *hdr;
12605
12606                   hdr = elf_elfsections (abfd)[i];
12607                   if (hdr->sh_type == type
12608                       && (hdr->sh_flags & SHF_ALLOC) != 0)
12609                     {
12610                       sh_size += hdr->sh_size;
12611                       if (sh_addr == 0
12612                           || sh_addr > hdr->sh_addr)
12613                         sh_addr = hdr->sh_addr;
12614                     }
12615                 }
12616
12617               if (bed->dtrel_excludes_plt && htab->srelplt != NULL)
12618                 {
12619                   /* Don't count procedure linkage table relocs in the
12620                      overall reloc count.  */
12621                   sh_size -= htab->srelplt->size;
12622                   if (sh_size == 0)
12623                     /* If the size is zero, make the address zero too.
12624                        This is to avoid a glibc bug.  If the backend
12625                        emits DT_RELA/DT_RELASZ even when DT_RELASZ is
12626                        zero, then we'll put DT_RELA at the end of
12627                        DT_JMPREL.  glibc will interpret the end of
12628                        DT_RELA matching the end of DT_JMPREL as the
12629                        case where DT_RELA includes DT_JMPREL, and for
12630                        LD_BIND_NOW will decide that processing DT_RELA
12631                        will process the PLT relocs too.  Net result:
12632                        No PLT relocs applied.  */
12633                     sh_addr = 0;
12634
12635                   /* If .rela.plt is the first .rela section, exclude
12636                      it from DT_RELA.  */
12637                   else if (sh_addr == (htab->srelplt->output_section->vma
12638                                        + htab->srelplt->output_offset))
12639                     sh_addr += htab->srelplt->size;
12640                 }
12641
12642               if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
12643                 dyn.d_un.d_val = sh_size;
12644               else
12645                 dyn.d_un.d_ptr = sh_addr;
12646               break;
12647             }
12648           bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
12649         }
12650     }
12651
12652   /* If we have created any dynamic sections, then output them.  */
12653   if (dynobj != NULL)
12654     {
12655       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
12656         goto error_return;
12657
12658       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
12659       if (((info->warn_shared_textrel && bfd_link_pic (info))
12660            || info->error_textrel)
12661           && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL)
12662         {
12663           bfd_byte *dyncon, *dynconend;
12664
12665           dyncon = o->contents;
12666           dynconend = o->contents + o->size;
12667           for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
12668             {
12669               Elf_Internal_Dyn dyn;
12670
12671               bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
12672
12673               if (dyn.d_tag == DT_TEXTREL)
12674                 {
12675                   if (info->error_textrel)
12676                     info->callbacks->einfo
12677                       (_("%P%X: read-only segment has dynamic relocations\n"));
12678                   else
12679                     info->callbacks->einfo
12680                       (_("%P: warning: creating a DT_TEXTREL in a shared object\n"));
12681                   break;
12682                 }
12683             }
12684         }
12685
12686       for (o = dynobj->sections; o != NULL; o = o->next)
12687         {
12688           if ((o->flags & SEC_HAS_CONTENTS) == 0
12689               || o->size == 0
12690               || o->output_section == bfd_abs_section_ptr)
12691             continue;
12692           if ((o->flags & SEC_LINKER_CREATED) == 0)
12693             {
12694               /* At this point, we are only interested in sections
12695                  created by _bfd_elf_link_create_dynamic_sections.  */
12696               continue;
12697             }
12698           if (htab->stab_info.stabstr == o)
12699             continue;
12700           if (htab->eh_info.hdr_sec == o)
12701             continue;
12702           if (strcmp (o->name, ".dynstr") != 0)
12703             {
12704               if (! bfd_set_section_contents (abfd, o->output_section,
12705                                               o->contents,
12706                                               (file_ptr) o->output_offset
12707                                               * bfd_octets_per_byte (abfd),
12708                                               o->size))
12709                 goto error_return;
12710             }
12711           else
12712             {
12713               /* The contents of the .dynstr section are actually in a
12714                  stringtab.  */
12715               file_ptr off;
12716
12717               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
12718               if (bfd_seek (abfd, off, SEEK_SET) != 0
12719                   || !_bfd_elf_strtab_emit (abfd, htab->dynstr))
12720                 goto error_return;
12721             }
12722         }
12723     }
12724
12725   if (!info->resolve_section_groups)
12726     {
12727       bfd_boolean failed = FALSE;
12728
12729       BFD_ASSERT (bfd_link_relocatable (info));
12730       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
12731       if (failed)
12732         goto error_return;
12733     }
12734
12735   /* If we have optimized stabs strings, output them.  */
12736   if (htab->stab_info.stabstr != NULL)
12737     {
12738       if (!_bfd_write_stab_strings (abfd, &htab->stab_info))
12739         goto error_return;
12740     }
12741
12742   if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
12743     goto error_return;
12744
12745   elf_final_link_free (abfd, &flinfo);
12746
12747   elf_linker (abfd) = TRUE;
12748
12749   if (attr_section)
12750     {
12751       bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
12752       if (contents == NULL)
12753         return FALSE;   /* Bail out and fail.  */
12754       bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
12755       bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
12756       free (contents);
12757     }
12758
12759   return TRUE;
12760
12761  error_return:
12762   elf_final_link_free (abfd, &flinfo);
12763   return FALSE;
12764 }
12765 \f
12766 /* Initialize COOKIE for input bfd ABFD.  */
12767
12768 static bfd_boolean
12769 init_reloc_cookie (struct elf_reloc_cookie *cookie,
12770                    struct bfd_link_info *info, bfd *abfd)
12771 {
12772   Elf_Internal_Shdr *symtab_hdr;
12773   const struct elf_backend_data *bed;
12774
12775   bed = get_elf_backend_data (abfd);
12776   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12777
12778   cookie->abfd = abfd;
12779   cookie->sym_hashes = elf_sym_hashes (abfd);
12780   cookie->bad_symtab = elf_bad_symtab (abfd);
12781   if (cookie->bad_symtab)
12782     {
12783       cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
12784       cookie->extsymoff = 0;
12785     }
12786   else
12787     {
12788       cookie->locsymcount = symtab_hdr->sh_info;
12789       cookie->extsymoff = symtab_hdr->sh_info;
12790     }
12791
12792   if (bed->s->arch_size == 32)
12793     cookie->r_sym_shift = 8;
12794   else
12795     cookie->r_sym_shift = 32;
12796
12797   cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
12798   if (cookie->locsyms == NULL && cookie->locsymcount != 0)
12799     {
12800       cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12801                                               cookie->locsymcount, 0,
12802                                               NULL, NULL, NULL);
12803       if (cookie->locsyms == NULL)
12804         {
12805           info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
12806           return FALSE;
12807         }
12808       if (info->keep_memory)
12809         symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
12810     }
12811   return TRUE;
12812 }
12813
12814 /* Free the memory allocated by init_reloc_cookie, if appropriate.  */
12815
12816 static void
12817 fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd)
12818 {
12819   Elf_Internal_Shdr *symtab_hdr;
12820
12821   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12822   if (cookie->locsyms != NULL
12823       && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
12824     free (cookie->locsyms);
12825 }
12826
12827 /* Initialize the relocation information in COOKIE for input section SEC
12828    of input bfd ABFD.  */
12829
12830 static bfd_boolean
12831 init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
12832                         struct bfd_link_info *info, bfd *abfd,
12833                         asection *sec)
12834 {
12835   if (sec->reloc_count == 0)
12836     {
12837       cookie->rels = NULL;
12838       cookie->relend = NULL;
12839     }
12840   else
12841     {
12842       cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
12843                                                 info->keep_memory);
12844       if (cookie->rels == NULL)
12845         return FALSE;
12846       cookie->rel = cookie->rels;
12847       cookie->relend = cookie->rels + sec->reloc_count;
12848     }
12849   cookie->rel = cookie->rels;
12850   return TRUE;
12851 }
12852
12853 /* Free the memory allocated by init_reloc_cookie_rels,
12854    if appropriate.  */
12855
12856 static void
12857 fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
12858                         asection *sec)
12859 {
12860   if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
12861     free (cookie->rels);
12862 }
12863
12864 /* Initialize the whole of COOKIE for input section SEC.  */
12865
12866 static bfd_boolean
12867 init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
12868                                struct bfd_link_info *info,
12869                                asection *sec)
12870 {
12871   if (!init_reloc_cookie (cookie, info, sec->owner))
12872     goto error1;
12873   if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
12874     goto error2;
12875   return TRUE;
12876
12877  error2:
12878   fini_reloc_cookie (cookie, sec->owner);
12879  error1:
12880   return FALSE;
12881 }
12882
12883 /* Free the memory allocated by init_reloc_cookie_for_section,
12884    if appropriate.  */
12885
12886 static void
12887 fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
12888                                asection *sec)
12889 {
12890   fini_reloc_cookie_rels (cookie, sec);
12891   fini_reloc_cookie (cookie, sec->owner);
12892 }
12893 \f
12894 /* Garbage collect unused sections.  */
12895
12896 /* Default gc_mark_hook.  */
12897
12898 asection *
12899 _bfd_elf_gc_mark_hook (asection *sec,
12900                        struct bfd_link_info *info ATTRIBUTE_UNUSED,
12901                        Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
12902                        struct elf_link_hash_entry *h,
12903                        Elf_Internal_Sym *sym)
12904 {
12905   if (h != NULL)
12906     {
12907       switch (h->root.type)
12908         {
12909         case bfd_link_hash_defined:
12910         case bfd_link_hash_defweak:
12911           return h->root.u.def.section;
12912
12913         case bfd_link_hash_common:
12914           return h->root.u.c.p->section;
12915
12916         default:
12917           break;
12918         }
12919     }
12920   else
12921     return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
12922
12923   return NULL;
12924 }
12925
12926 /* Return the debug definition section.  */
12927
12928 static asection *
12929 elf_gc_mark_debug_section (asection *sec ATTRIBUTE_UNUSED,
12930                            struct bfd_link_info *info ATTRIBUTE_UNUSED,
12931                            Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
12932                            struct elf_link_hash_entry *h,
12933                            Elf_Internal_Sym *sym)
12934 {
12935   if (h != NULL)
12936     {
12937       /* Return the global debug definition section.  */
12938       if ((h->root.type == bfd_link_hash_defined
12939            || h->root.type == bfd_link_hash_defweak)
12940           && (h->root.u.def.section->flags & SEC_DEBUGGING) != 0)
12941         return h->root.u.def.section;
12942     }
12943   else
12944     {
12945       /* Return the local debug definition section.  */
12946       asection *isec = bfd_section_from_elf_index (sec->owner,
12947                                                    sym->st_shndx);
12948       if ((isec->flags & SEC_DEBUGGING) != 0)
12949         return isec;
12950     }
12951
12952   return NULL;
12953 }
12954
12955 /* COOKIE->rel describes a relocation against section SEC, which is
12956    a section we've decided to keep.  Return the section that contains
12957    the relocation symbol, or NULL if no section contains it.  */
12958
12959 asection *
12960 _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
12961                        elf_gc_mark_hook_fn gc_mark_hook,
12962                        struct elf_reloc_cookie *cookie,
12963                        bfd_boolean *start_stop)
12964 {
12965   unsigned long r_symndx;
12966   struct elf_link_hash_entry *h;
12967
12968   r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
12969   if (r_symndx == STN_UNDEF)
12970     return NULL;
12971
12972   if (r_symndx >= cookie->locsymcount
12973       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
12974     {
12975       h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
12976       if (h == NULL)
12977         {
12978           info->callbacks->einfo (_("%F%P: corrupt input: %pB\n"),
12979                                   sec->owner);
12980           return NULL;
12981         }
12982       while (h->root.type == bfd_link_hash_indirect
12983              || h->root.type == bfd_link_hash_warning)
12984         h = (struct elf_link_hash_entry *) h->root.u.i.link;
12985       h->mark = 1;
12986       /* If this symbol is weak and there is a non-weak definition, we
12987          keep the non-weak definition because many backends put
12988          dynamic reloc info on the non-weak definition for code
12989          handling copy relocs.  */
12990       if (h->is_weakalias)
12991         weakdef (h)->mark = 1;
12992
12993       if (start_stop != NULL)
12994         {
12995           /* To work around a glibc bug, mark XXX input sections
12996              when there is a reference to __start_XXX or __stop_XXX
12997              symbols.  */
12998           if (h->start_stop)
12999             {
13000               asection *s = h->u2.start_stop_section;
13001               *start_stop = !s->gc_mark;
13002               return s;
13003             }
13004         }
13005
13006       return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
13007     }
13008
13009   return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
13010                           &cookie->locsyms[r_symndx]);
13011 }
13012
13013 /* COOKIE->rel describes a relocation against section SEC, which is
13014    a section we've decided to keep.  Mark the section that contains
13015    the relocation symbol.  */
13016
13017 bfd_boolean
13018 _bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
13019                         asection *sec,
13020                         elf_gc_mark_hook_fn gc_mark_hook,
13021                         struct elf_reloc_cookie *cookie)
13022 {
13023   asection *rsec;
13024   bfd_boolean start_stop = FALSE;
13025
13026   rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie, &start_stop);
13027   while (rsec != NULL)
13028     {
13029       if (!rsec->gc_mark)
13030         {
13031           if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour
13032               || (rsec->owner->flags & DYNAMIC) != 0)
13033             rsec->gc_mark = 1;
13034           else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
13035             return FALSE;
13036         }
13037       if (!start_stop)
13038         break;
13039       rsec = bfd_get_next_section_by_name (rsec->owner, rsec);
13040     }
13041   return TRUE;
13042 }
13043
13044 /* The mark phase of garbage collection.  For a given section, mark
13045    it and any sections in this section's group, and all the sections
13046    which define symbols to which it refers.  */
13047
13048 bfd_boolean
13049 _bfd_elf_gc_mark (struct bfd_link_info *info,
13050                   asection *sec,
13051                   elf_gc_mark_hook_fn gc_mark_hook)
13052 {
13053   bfd_boolean ret;
13054   asection *group_sec, *eh_frame;
13055
13056   sec->gc_mark = 1;
13057
13058   /* Mark all the sections in the group.  */
13059   group_sec = elf_section_data (sec)->next_in_group;
13060   if (group_sec && !group_sec->gc_mark)
13061     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
13062       return FALSE;
13063
13064   /* Look through the section relocs.  */
13065   ret = TRUE;
13066   eh_frame = elf_eh_frame_section (sec->owner);
13067   if ((sec->flags & SEC_RELOC) != 0
13068       && sec->reloc_count > 0
13069       && sec != eh_frame)
13070     {
13071       struct elf_reloc_cookie cookie;
13072
13073       if (!init_reloc_cookie_for_section (&cookie, info, sec))
13074         ret = FALSE;
13075       else
13076         {
13077           for (; cookie.rel < cookie.relend; cookie.rel++)
13078             if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
13079               {
13080                 ret = FALSE;
13081                 break;
13082               }
13083           fini_reloc_cookie_for_section (&cookie, sec);
13084         }
13085     }
13086
13087   if (ret && eh_frame && elf_fde_list (sec))
13088     {
13089       struct elf_reloc_cookie cookie;
13090
13091       if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
13092         ret = FALSE;
13093       else
13094         {
13095           if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
13096                                       gc_mark_hook, &cookie))
13097             ret = FALSE;
13098           fini_reloc_cookie_for_section (&cookie, eh_frame);
13099         }
13100     }
13101
13102   eh_frame = elf_section_eh_frame_entry (sec);
13103   if (ret && eh_frame && !eh_frame->gc_mark)
13104     if (!_bfd_elf_gc_mark (info, eh_frame, gc_mark_hook))
13105       ret = FALSE;
13106
13107   return ret;
13108 }
13109
13110 /* Scan and mark sections in a special or debug section group.  */
13111
13112 static void
13113 _bfd_elf_gc_mark_debug_special_section_group (asection *grp)
13114 {
13115   /* Point to first section of section group.  */
13116   asection *ssec;
13117   /* Used to iterate the section group.  */
13118   asection *msec;
13119
13120   bfd_boolean is_special_grp = TRUE;
13121   bfd_boolean is_debug_grp = TRUE;
13122
13123   /* First scan to see if group contains any section other than debug
13124      and special section.  */
13125   ssec = msec = elf_next_in_group (grp);
13126   do
13127     {
13128       if ((msec->flags & SEC_DEBUGGING) == 0)
13129         is_debug_grp = FALSE;
13130
13131       if ((msec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) != 0)
13132         is_special_grp = FALSE;
13133
13134       msec = elf_next_in_group (msec);
13135     }
13136   while (msec != ssec);
13137
13138   /* If this is a pure debug section group or pure special section group,
13139      keep all sections in this group.  */
13140   if (is_debug_grp || is_special_grp)
13141     {
13142       do
13143         {
13144           msec->gc_mark = 1;
13145           msec = elf_next_in_group (msec);
13146         }
13147       while (msec != ssec);
13148     }
13149 }
13150
13151 /* Keep debug and special sections.  */
13152
13153 bfd_boolean
13154 _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
13155                                  elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED)
13156 {
13157   bfd *ibfd;
13158
13159   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
13160     {
13161       asection *isec;
13162       bfd_boolean some_kept;
13163       bfd_boolean debug_frag_seen;
13164       bfd_boolean has_kept_debug_info;
13165
13166       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
13167         continue;
13168       isec = ibfd->sections;
13169       if (isec == NULL || isec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13170         continue;
13171
13172       /* Ensure all linker created sections are kept,
13173          see if any other section is already marked,
13174          and note if we have any fragmented debug sections.  */
13175       debug_frag_seen = some_kept = has_kept_debug_info = FALSE;
13176       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
13177         {
13178           if ((isec->flags & SEC_LINKER_CREATED) != 0)
13179             isec->gc_mark = 1;
13180           else if (isec->gc_mark
13181                    && (isec->flags & SEC_ALLOC) != 0
13182                    && elf_section_type (isec) != SHT_NOTE)
13183             some_kept = TRUE;
13184
13185           if (!debug_frag_seen
13186               && (isec->flags & SEC_DEBUGGING)
13187               && CONST_STRNEQ (isec->name, ".debug_line."))
13188             debug_frag_seen = TRUE;
13189         }
13190
13191       /* If no non-note alloc section in this file will be kept, then
13192          we can toss out the debug and special sections.  */
13193       if (!some_kept)
13194         continue;
13195
13196       /* Keep debug and special sections like .comment when they are
13197          not part of a group.  Also keep section groups that contain
13198          just debug sections or special sections.  */
13199       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
13200         {
13201           if ((isec->flags & SEC_GROUP) != 0)
13202             _bfd_elf_gc_mark_debug_special_section_group (isec);
13203           else if (((isec->flags & SEC_DEBUGGING) != 0
13204                     || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
13205                    && elf_next_in_group (isec) == NULL)
13206             isec->gc_mark = 1;
13207           if (isec->gc_mark && (isec->flags & SEC_DEBUGGING) != 0)
13208             has_kept_debug_info = TRUE;
13209         }
13210
13211       /* Look for CODE sections which are going to be discarded,
13212          and find and discard any fragmented debug sections which
13213          are associated with that code section.  */
13214       if (debug_frag_seen)
13215         for (isec = ibfd->sections; isec != NULL; isec = isec->next)
13216           if ((isec->flags & SEC_CODE) != 0
13217               && isec->gc_mark == 0)
13218             {
13219               unsigned int ilen;
13220               asection *dsec;
13221
13222               ilen = strlen (isec->name);
13223
13224               /* Association is determined by the name of the debug
13225                  section containing the name of the code section as
13226                  a suffix.  For example .debug_line.text.foo is a
13227                  debug section associated with .text.foo.  */
13228               for (dsec = ibfd->sections; dsec != NULL; dsec = dsec->next)
13229                 {
13230                   unsigned int dlen;
13231
13232                   if (dsec->gc_mark == 0
13233                       || (dsec->flags & SEC_DEBUGGING) == 0)
13234                     continue;
13235
13236                   dlen = strlen (dsec->name);
13237
13238                   if (dlen > ilen
13239                       && strncmp (dsec->name + (dlen - ilen),
13240                                   isec->name, ilen) == 0)
13241                     dsec->gc_mark = 0;
13242                 }
13243           }
13244
13245       /* Mark debug sections referenced by kept debug sections.  */
13246       if (has_kept_debug_info)
13247         for (isec = ibfd->sections; isec != NULL; isec = isec->next)
13248           if (isec->gc_mark
13249               && (isec->flags & SEC_DEBUGGING) != 0)
13250             if (!_bfd_elf_gc_mark (info, isec,
13251                                    elf_gc_mark_debug_section))
13252               return FALSE;
13253     }
13254   return TRUE;
13255 }
13256
13257 static bfd_boolean
13258 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
13259 {
13260   bfd *sub;
13261   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13262
13263   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
13264     {
13265       asection *o;
13266
13267       if (bfd_get_flavour (sub) != bfd_target_elf_flavour
13268           || elf_object_id (sub) != elf_hash_table_id (elf_hash_table (info))
13269           || !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
13270         continue;
13271       o = sub->sections;
13272       if (o == NULL || o->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13273         continue;
13274
13275       for (o = sub->sections; o != NULL; o = o->next)
13276         {
13277           /* When any section in a section group is kept, we keep all
13278              sections in the section group.  If the first member of
13279              the section group is excluded, we will also exclude the
13280              group section.  */
13281           if (o->flags & SEC_GROUP)
13282             {
13283               asection *first = elf_next_in_group (o);
13284               o->gc_mark = first->gc_mark;
13285             }
13286
13287           if (o->gc_mark)
13288             continue;
13289
13290           /* Skip sweeping sections already excluded.  */
13291           if (o->flags & SEC_EXCLUDE)
13292             continue;
13293
13294           /* Since this is early in the link process, it is simple
13295              to remove a section from the output.  */
13296           o->flags |= SEC_EXCLUDE;
13297
13298           if (info->print_gc_sections && o->size != 0)
13299             /* xgettext:c-format */
13300             _bfd_error_handler (_("removing unused section '%pA' in file '%pB'"),
13301                                 o, sub);
13302         }
13303     }
13304
13305   return TRUE;
13306 }
13307
13308 /* Propagate collected vtable information.  This is called through
13309    elf_link_hash_traverse.  */
13310
13311 static bfd_boolean
13312 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
13313 {
13314   /* Those that are not vtables.  */
13315   if (h->start_stop
13316       || h->u2.vtable == NULL
13317       || h->u2.vtable->parent == NULL)
13318     return TRUE;
13319
13320   /* Those vtables that do not have parents, we cannot merge.  */
13321   if (h->u2.vtable->parent == (struct elf_link_hash_entry *) -1)
13322     return TRUE;
13323
13324   /* If we've already been done, exit.  */
13325   if (h->u2.vtable->used && h->u2.vtable->used[-1])
13326     return TRUE;
13327
13328   /* Make sure the parent's table is up to date.  */
13329   elf_gc_propagate_vtable_entries_used (h->u2.vtable->parent, okp);
13330
13331   if (h->u2.vtable->used == NULL)
13332     {
13333       /* None of this table's entries were referenced.  Re-use the
13334          parent's table.  */
13335       h->u2.vtable->used = h->u2.vtable->parent->u2.vtable->used;
13336       h->u2.vtable->size = h->u2.vtable->parent->u2.vtable->size;
13337     }
13338   else
13339     {
13340       size_t n;
13341       bfd_boolean *cu, *pu;
13342
13343       /* Or the parent's entries into ours.  */
13344       cu = h->u2.vtable->used;
13345       cu[-1] = TRUE;
13346       pu = h->u2.vtable->parent->u2.vtable->used;
13347       if (pu != NULL)
13348         {
13349           const struct elf_backend_data *bed;
13350           unsigned int log_file_align;
13351
13352           bed = get_elf_backend_data (h->root.u.def.section->owner);
13353           log_file_align = bed->s->log_file_align;
13354           n = h->u2.vtable->parent->u2.vtable->size >> log_file_align;
13355           while (n--)
13356             {
13357               if (*pu)
13358                 *cu = TRUE;
13359               pu++;
13360               cu++;
13361             }
13362         }
13363     }
13364
13365   return TRUE;
13366 }
13367
13368 static bfd_boolean
13369 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
13370 {
13371   asection *sec;
13372   bfd_vma hstart, hend;
13373   Elf_Internal_Rela *relstart, *relend, *rel;
13374   const struct elf_backend_data *bed;
13375   unsigned int log_file_align;
13376
13377   /* Take care of both those symbols that do not describe vtables as
13378      well as those that are not loaded.  */
13379   if (h->start_stop
13380       || h->u2.vtable == NULL
13381       || h->u2.vtable->parent == NULL)
13382     return TRUE;
13383
13384   BFD_ASSERT (h->root.type == bfd_link_hash_defined
13385               || h->root.type == bfd_link_hash_defweak);
13386
13387   sec = h->root.u.def.section;
13388   hstart = h->root.u.def.value;
13389   hend = hstart + h->size;
13390
13391   relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
13392   if (!relstart)
13393     return *(bfd_boolean *) okp = FALSE;
13394   bed = get_elf_backend_data (sec->owner);
13395   log_file_align = bed->s->log_file_align;
13396
13397   relend = relstart + sec->reloc_count;
13398
13399   for (rel = relstart; rel < relend; ++rel)
13400     if (rel->r_offset >= hstart && rel->r_offset < hend)
13401       {
13402         /* If the entry is in use, do nothing.  */
13403         if (h->u2.vtable->used
13404             && (rel->r_offset - hstart) < h->u2.vtable->size)
13405           {
13406             bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
13407             if (h->u2.vtable->used[entry])
13408               continue;
13409           }
13410         /* Otherwise, kill it.  */
13411         rel->r_offset = rel->r_info = rel->r_addend = 0;
13412       }
13413
13414   return TRUE;
13415 }
13416
13417 /* Mark sections containing dynamically referenced symbols.  When
13418    building shared libraries, we must assume that any visible symbol is
13419    referenced.  */
13420
13421 bfd_boolean
13422 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
13423 {
13424   struct bfd_link_info *info = (struct bfd_link_info *) inf;
13425   struct bfd_elf_dynamic_list *d = info->dynamic_list;
13426
13427   if ((h->root.type == bfd_link_hash_defined
13428        || h->root.type == bfd_link_hash_defweak)
13429       && ((h->ref_dynamic && !h->forced_local)
13430           || ((h->def_regular || ELF_COMMON_DEF_P (h))
13431               && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
13432               && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
13433               && (!bfd_link_executable (info)
13434                   || info->gc_keep_exported
13435                   || info->export_dynamic
13436                   || (h->dynamic
13437                       && d != NULL
13438                       && (*d->match) (&d->head, NULL, h->root.root.string)))
13439               && (h->versioned >= versioned
13440                   || !bfd_hide_sym_by_version (info->version_info,
13441                                                h->root.root.string)))))
13442     h->root.u.def.section->flags |= SEC_KEEP;
13443
13444   return TRUE;
13445 }
13446
13447 /* Keep all sections containing symbols undefined on the command-line,
13448    and the section containing the entry symbol.  */
13449
13450 void
13451 _bfd_elf_gc_keep (struct bfd_link_info *info)
13452 {
13453   struct bfd_sym_chain *sym;
13454
13455   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
13456     {
13457       struct elf_link_hash_entry *h;
13458
13459       h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
13460                                 FALSE, FALSE, FALSE);
13461
13462       if (h != NULL
13463           && (h->root.type == bfd_link_hash_defined
13464               || h->root.type == bfd_link_hash_defweak)
13465           && !bfd_is_abs_section (h->root.u.def.section)
13466           && !bfd_is_und_section (h->root.u.def.section))
13467         h->root.u.def.section->flags |= SEC_KEEP;
13468     }
13469 }
13470
13471 bfd_boolean
13472 bfd_elf_parse_eh_frame_entries (bfd *abfd ATTRIBUTE_UNUSED,
13473                                 struct bfd_link_info *info)
13474 {
13475   bfd *ibfd = info->input_bfds;
13476
13477   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
13478     {
13479       asection *sec;
13480       struct elf_reloc_cookie cookie;
13481
13482       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
13483         continue;
13484       sec = ibfd->sections;
13485       if (sec == NULL || sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13486         continue;
13487
13488       if (!init_reloc_cookie (&cookie, info, ibfd))
13489         return FALSE;
13490
13491       for (sec = ibfd->sections; sec; sec = sec->next)
13492         {
13493           if (CONST_STRNEQ (bfd_section_name (ibfd, sec), ".eh_frame_entry")
13494               && init_reloc_cookie_rels (&cookie, info, ibfd, sec))
13495             {
13496               _bfd_elf_parse_eh_frame_entry (info, sec, &cookie);
13497               fini_reloc_cookie_rels (&cookie, sec);
13498             }
13499         }
13500     }
13501   return TRUE;
13502 }
13503
13504 /* Do mark and sweep of unused sections.  */
13505
13506 bfd_boolean
13507 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
13508 {
13509   bfd_boolean ok = TRUE;
13510   bfd *sub;
13511   elf_gc_mark_hook_fn gc_mark_hook;
13512   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13513   struct elf_link_hash_table *htab;
13514
13515   if (!bed->can_gc_sections
13516       || !is_elf_hash_table (info->hash))
13517     {
13518       _bfd_error_handler(_("warning: gc-sections option ignored"));
13519       return TRUE;
13520     }
13521
13522   bed->gc_keep (info);
13523   htab = elf_hash_table (info);
13524
13525   /* Try to parse each bfd's .eh_frame section.  Point elf_eh_frame_section
13526      at the .eh_frame section if we can mark the FDEs individually.  */
13527   for (sub = info->input_bfds;
13528        info->eh_frame_hdr_type != COMPACT_EH_HDR && sub != NULL;
13529        sub = sub->link.next)
13530     {
13531       asection *sec;
13532       struct elf_reloc_cookie cookie;
13533
13534       sec = sub->sections;
13535       if (sec == NULL || sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13536         continue;
13537       sec = bfd_get_section_by_name (sub, ".eh_frame");
13538       while (sec && init_reloc_cookie_for_section (&cookie, info, sec))
13539         {
13540           _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
13541           if (elf_section_data (sec)->sec_info
13542               && (sec->flags & SEC_LINKER_CREATED) == 0)
13543             elf_eh_frame_section (sub) = sec;
13544           fini_reloc_cookie_for_section (&cookie, sec);
13545           sec = bfd_get_next_section_by_name (NULL, sec);
13546         }
13547     }
13548
13549   /* Apply transitive closure to the vtable entry usage info.  */
13550   elf_link_hash_traverse (htab, elf_gc_propagate_vtable_entries_used, &ok);
13551   if (!ok)
13552     return FALSE;
13553
13554   /* Kill the vtable relocations that were not used.  */
13555   elf_link_hash_traverse (htab, elf_gc_smash_unused_vtentry_relocs, &ok);
13556   if (!ok)
13557     return FALSE;
13558
13559   /* Mark dynamically referenced symbols.  */
13560   if (htab->dynamic_sections_created || info->gc_keep_exported)
13561     elf_link_hash_traverse (htab, bed->gc_mark_dynamic_ref, info);
13562
13563   /* Grovel through relocs to find out who stays ...  */
13564   gc_mark_hook = bed->gc_mark_hook;
13565   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
13566     {
13567       asection *o;
13568
13569       if (bfd_get_flavour (sub) != bfd_target_elf_flavour
13570           || elf_object_id (sub) != elf_hash_table_id (htab)
13571           || !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
13572         continue;
13573
13574       o = sub->sections;
13575       if (o == NULL || o->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13576         continue;
13577
13578       /* Start at sections marked with SEC_KEEP (ref _bfd_elf_gc_keep).
13579          Also treat note sections as a root, if the section is not part
13580          of a group.  We must keep all PREINIT_ARRAY, INIT_ARRAY as
13581          well as FINI_ARRAY sections for ld -r.  */
13582       for (o = sub->sections; o != NULL; o = o->next)
13583         if (!o->gc_mark
13584             && (o->flags & SEC_EXCLUDE) == 0
13585             && ((o->flags & SEC_KEEP) != 0
13586                 || (bfd_link_relocatable (info)
13587                     && ((elf_section_data (o)->this_hdr.sh_type
13588                          == SHT_PREINIT_ARRAY)
13589                         || (elf_section_data (o)->this_hdr.sh_type
13590                             == SHT_INIT_ARRAY)
13591                         || (elf_section_data (o)->this_hdr.sh_type
13592                             == SHT_FINI_ARRAY)))
13593                 || (elf_section_data (o)->this_hdr.sh_type == SHT_NOTE
13594                     && elf_next_in_group (o) == NULL )))
13595           {
13596             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
13597               return FALSE;
13598           }
13599     }
13600
13601   /* Allow the backend to mark additional target specific sections.  */
13602   bed->gc_mark_extra_sections (info, gc_mark_hook);
13603
13604   /* ... and mark SEC_EXCLUDE for those that go.  */
13605   return elf_gc_sweep (abfd, info);
13606 }
13607 \f
13608 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
13609
13610 bfd_boolean
13611 bfd_elf_gc_record_vtinherit (bfd *abfd,
13612                              asection *sec,
13613                              struct elf_link_hash_entry *h,
13614                              bfd_vma offset)
13615 {
13616   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
13617   struct elf_link_hash_entry **search, *child;
13618   size_t extsymcount;
13619   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13620
13621   /* The sh_info field of the symtab header tells us where the
13622      external symbols start.  We don't care about the local symbols at
13623      this point.  */
13624   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
13625   if (!elf_bad_symtab (abfd))
13626     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
13627
13628   sym_hashes = elf_sym_hashes (abfd);
13629   sym_hashes_end = sym_hashes + extsymcount;
13630
13631   /* Hunt down the child symbol, which is in this section at the same
13632      offset as the relocation.  */
13633   for (search = sym_hashes; search != sym_hashes_end; ++search)
13634     {
13635       if ((child = *search) != NULL
13636           && (child->root.type == bfd_link_hash_defined
13637               || child->root.type == bfd_link_hash_defweak)
13638           && child->root.u.def.section == sec
13639           && child->root.u.def.value == offset)
13640         goto win;
13641     }
13642
13643   /* xgettext:c-format */
13644   _bfd_error_handler (_("%pB: %pA+%#" PRIx64 ": no symbol found for INHERIT"),
13645                       abfd, sec, (uint64_t) offset);
13646   bfd_set_error (bfd_error_invalid_operation);
13647   return FALSE;
13648
13649  win:
13650   if (!child->u2.vtable)
13651     {
13652       child->u2.vtable = ((struct elf_link_virtual_table_entry *)
13653                           bfd_zalloc (abfd, sizeof (*child->u2.vtable)));
13654       if (!child->u2.vtable)
13655         return FALSE;
13656     }
13657   if (!h)
13658     {
13659       /* This *should* only be the absolute section.  It could potentially
13660          be that someone has defined a non-global vtable though, which
13661          would be bad.  It isn't worth paging in the local symbols to be
13662          sure though; that case should simply be handled by the assembler.  */
13663
13664       child->u2.vtable->parent = (struct elf_link_hash_entry *) -1;
13665     }
13666   else
13667     child->u2.vtable->parent = h;
13668
13669   return TRUE;
13670 }
13671
13672 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
13673
13674 bfd_boolean
13675 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
13676                            asection *sec ATTRIBUTE_UNUSED,
13677                            struct elf_link_hash_entry *h,
13678                            bfd_vma addend)
13679 {
13680   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13681   unsigned int log_file_align = bed->s->log_file_align;
13682
13683   if (!h->u2.vtable)
13684     {
13685       h->u2.vtable = ((struct elf_link_virtual_table_entry *)
13686                       bfd_zalloc (abfd, sizeof (*h->u2.vtable)));
13687       if (!h->u2.vtable)
13688         return FALSE;
13689     }
13690
13691   if (addend >= h->u2.vtable->size)
13692     {
13693       size_t size, bytes, file_align;
13694       bfd_boolean *ptr = h->u2.vtable->used;
13695
13696       /* While the symbol is undefined, we have to be prepared to handle
13697          a zero size.  */
13698       file_align = 1 << log_file_align;
13699       if (h->root.type == bfd_link_hash_undefined)
13700         size = addend + file_align;
13701       else
13702         {
13703           size = h->size;
13704           if (addend >= size)
13705             {
13706               /* Oops!  We've got a reference past the defined end of
13707                  the table.  This is probably a bug -- shall we warn?  */
13708               size = addend + file_align;
13709             }
13710         }
13711       size = (size + file_align - 1) & -file_align;
13712
13713       /* Allocate one extra entry for use as a "done" flag for the
13714          consolidation pass.  */
13715       bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
13716
13717       if (ptr)
13718         {
13719           ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
13720
13721           if (ptr != NULL)
13722             {
13723               size_t oldbytes;
13724
13725               oldbytes = (((h->u2.vtable->size >> log_file_align) + 1)
13726                           * sizeof (bfd_boolean));
13727               memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
13728             }
13729         }
13730       else
13731         ptr = (bfd_boolean *) bfd_zmalloc (bytes);
13732
13733       if (ptr == NULL)
13734         return FALSE;
13735
13736       /* And arrange for that done flag to be at index -1.  */
13737       h->u2.vtable->used = ptr + 1;
13738       h->u2.vtable->size = size;
13739     }
13740
13741   h->u2.vtable->used[addend >> log_file_align] = TRUE;
13742
13743   return TRUE;
13744 }
13745
13746 /* Map an ELF section header flag to its corresponding string.  */
13747 typedef struct
13748 {
13749   char *flag_name;
13750   flagword flag_value;
13751 } elf_flags_to_name_table;
13752
13753 static elf_flags_to_name_table elf_flags_to_names [] =
13754 {
13755   { "SHF_WRITE", SHF_WRITE },
13756   { "SHF_ALLOC", SHF_ALLOC },
13757   { "SHF_EXECINSTR", SHF_EXECINSTR },
13758   { "SHF_MERGE", SHF_MERGE },
13759   { "SHF_STRINGS", SHF_STRINGS },
13760   { "SHF_INFO_LINK", SHF_INFO_LINK},
13761   { "SHF_LINK_ORDER", SHF_LINK_ORDER},
13762   { "SHF_OS_NONCONFORMING", SHF_OS_NONCONFORMING},
13763   { "SHF_GROUP", SHF_GROUP },
13764   { "SHF_TLS", SHF_TLS },
13765   { "SHF_MASKOS", SHF_MASKOS },
13766   { "SHF_EXCLUDE", SHF_EXCLUDE },
13767 };
13768
13769 /* Returns TRUE if the section is to be included, otherwise FALSE.  */
13770 bfd_boolean
13771 bfd_elf_lookup_section_flags (struct bfd_link_info *info,
13772                               struct flag_info *flaginfo,
13773                               asection *section)
13774 {
13775   const bfd_vma sh_flags = elf_section_flags (section);
13776
13777   if (!flaginfo->flags_initialized)
13778     {
13779       bfd *obfd = info->output_bfd;
13780       const struct elf_backend_data *bed = get_elf_backend_data (obfd);
13781       struct flag_info_list *tf = flaginfo->flag_list;
13782       int with_hex = 0;
13783       int without_hex = 0;
13784
13785       for (tf = flaginfo->flag_list; tf != NULL; tf = tf->next)
13786         {
13787           unsigned i;
13788           flagword (*lookup) (char *);
13789
13790           lookup = bed->elf_backend_lookup_section_flags_hook;
13791           if (lookup != NULL)
13792             {
13793               flagword hexval = (*lookup) ((char *) tf->name);
13794
13795               if (hexval != 0)
13796                 {
13797                   if (tf->with == with_flags)
13798                     with_hex |= hexval;
13799                   else if (tf->with == without_flags)
13800                     without_hex |= hexval;
13801                   tf->valid = TRUE;
13802                   continue;
13803                 }
13804             }
13805           for (i = 0; i < ARRAY_SIZE (elf_flags_to_names); ++i)
13806             {
13807               if (strcmp (tf->name, elf_flags_to_names[i].flag_name) == 0)
13808                 {
13809                   if (tf->with == with_flags)
13810                     with_hex |= elf_flags_to_names[i].flag_value;
13811                   else if (tf->with == without_flags)
13812                     without_hex |= elf_flags_to_names[i].flag_value;
13813                   tf->valid = TRUE;
13814                   break;
13815                 }
13816             }
13817           if (!tf->valid)
13818             {
13819               info->callbacks->einfo
13820                 (_("unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
13821               return FALSE;
13822             }
13823         }
13824       flaginfo->flags_initialized = TRUE;
13825       flaginfo->only_with_flags |= with_hex;
13826       flaginfo->not_with_flags |= without_hex;
13827     }
13828
13829   if ((flaginfo->only_with_flags & sh_flags) != flaginfo->only_with_flags)
13830     return FALSE;
13831
13832   if ((flaginfo->not_with_flags & sh_flags) != 0)
13833     return FALSE;
13834
13835   return TRUE;
13836 }
13837
13838 struct alloc_got_off_arg {
13839   bfd_vma gotoff;
13840   struct bfd_link_info *info;
13841 };
13842
13843 /* We need a special top-level link routine to convert got reference counts
13844    to real got offsets.  */
13845
13846 static bfd_boolean
13847 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
13848 {
13849   struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
13850   bfd *obfd = gofarg->info->output_bfd;
13851   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
13852
13853   if (h->got.refcount > 0)
13854     {
13855       h->got.offset = gofarg->gotoff;
13856       gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0);
13857     }
13858   else
13859     h->got.offset = (bfd_vma) -1;
13860
13861   return TRUE;
13862 }
13863
13864 /* And an accompanying bit to work out final got entry offsets once
13865    we're done.  Should be called from final_link.  */
13866
13867 bfd_boolean
13868 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
13869                                         struct bfd_link_info *info)
13870 {
13871   bfd *i;
13872   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13873   bfd_vma gotoff;
13874   struct alloc_got_off_arg gofarg;
13875
13876   BFD_ASSERT (abfd == info->output_bfd);
13877
13878   if (! is_elf_hash_table (info->hash))
13879     return FALSE;
13880
13881   /* The GOT offset is relative to the .got section, but the GOT header is
13882      put into the .got.plt section, if the backend uses it.  */
13883   if (bed->want_got_plt)
13884     gotoff = 0;
13885   else
13886     gotoff = bed->got_header_size;
13887
13888   /* Do the local .got entries first.  */
13889   for (i = info->input_bfds; i; i = i->link.next)
13890     {
13891       bfd_signed_vma *local_got;
13892       size_t j, locsymcount;
13893       Elf_Internal_Shdr *symtab_hdr;
13894
13895       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
13896         continue;
13897
13898       local_got = elf_local_got_refcounts (i);
13899       if (!local_got)
13900         continue;
13901
13902       symtab_hdr = &elf_tdata (i)->symtab_hdr;
13903       if (elf_bad_symtab (i))
13904         locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
13905       else
13906         locsymcount = symtab_hdr->sh_info;
13907
13908       for (j = 0; j < locsymcount; ++j)
13909         {
13910           if (local_got[j] > 0)
13911             {
13912               local_got[j] = gotoff;
13913               gotoff += bed->got_elt_size (abfd, info, NULL, i, j);
13914             }
13915           else
13916             local_got[j] = (bfd_vma) -1;
13917         }
13918     }
13919
13920   /* Then the global .got entries.  .plt refcounts are handled by
13921      adjust_dynamic_symbol  */
13922   gofarg.gotoff = gotoff;
13923   gofarg.info = info;
13924   elf_link_hash_traverse (elf_hash_table (info),
13925                           elf_gc_allocate_got_offsets,
13926                           &gofarg);
13927   return TRUE;
13928 }
13929
13930 /* Many folk need no more in the way of final link than this, once
13931    got entry reference counting is enabled.  */
13932
13933 bfd_boolean
13934 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
13935 {
13936   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
13937     return FALSE;
13938
13939   /* Invoke the regular ELF backend linker to do all the work.  */
13940   return bfd_elf_final_link (abfd, info);
13941 }
13942
13943 bfd_boolean
13944 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
13945 {
13946   struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
13947
13948   if (rcookie->bad_symtab)
13949     rcookie->rel = rcookie->rels;
13950
13951   for (; rcookie->rel < rcookie->relend; rcookie->rel++)
13952     {
13953       unsigned long r_symndx;
13954
13955       if (! rcookie->bad_symtab)
13956         if (rcookie->rel->r_offset > offset)
13957           return FALSE;
13958       if (rcookie->rel->r_offset != offset)
13959         continue;
13960
13961       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
13962       if (r_symndx == STN_UNDEF)
13963         return TRUE;
13964
13965       if (r_symndx >= rcookie->locsymcount
13966           || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
13967         {
13968           struct elf_link_hash_entry *h;
13969
13970           h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
13971
13972           while (h->root.type == bfd_link_hash_indirect
13973                  || h->root.type == bfd_link_hash_warning)
13974             h = (struct elf_link_hash_entry *) h->root.u.i.link;
13975
13976           if ((h->root.type == bfd_link_hash_defined
13977                || h->root.type == bfd_link_hash_defweak)
13978               && (h->root.u.def.section->owner != rcookie->abfd
13979                   || h->root.u.def.section->kept_section != NULL
13980                   || discarded_section (h->root.u.def.section)))
13981             return TRUE;
13982         }
13983       else
13984         {
13985           /* It's not a relocation against a global symbol,
13986              but it could be a relocation against a local
13987              symbol for a discarded section.  */
13988           asection *isec;
13989           Elf_Internal_Sym *isym;
13990
13991           /* Need to: get the symbol; get the section.  */
13992           isym = &rcookie->locsyms[r_symndx];
13993           isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
13994           if (isec != NULL
13995               && (isec->kept_section != NULL
13996                   || discarded_section (isec)))
13997             return TRUE;
13998         }
13999       return FALSE;
14000     }
14001   return FALSE;
14002 }
14003
14004 /* Discard unneeded references to discarded sections.
14005    Returns -1 on error, 1 if any section's size was changed, 0 if
14006    nothing changed.  This function assumes that the relocations are in
14007    sorted order, which is true for all known assemblers.  */
14008
14009 int
14010 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
14011 {
14012   struct elf_reloc_cookie cookie;
14013   asection *o;
14014   bfd *abfd;
14015   int changed = 0;
14016
14017   if (info->traditional_format
14018       || !is_elf_hash_table (info->hash))
14019     return 0;
14020
14021   o = bfd_get_section_by_name (output_bfd, ".stab");
14022   if (o != NULL)
14023     {
14024       asection *i;
14025
14026       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
14027         {
14028           if (i->size == 0
14029               || i->reloc_count == 0
14030               || i->sec_info_type != SEC_INFO_TYPE_STABS)
14031             continue;
14032
14033           abfd = i->owner;
14034           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
14035             continue;
14036
14037           if (!init_reloc_cookie_for_section (&cookie, info, i))
14038             return -1;
14039
14040           if (_bfd_discard_section_stabs (abfd, i,
14041                                           elf_section_data (i)->sec_info,
14042                                           bfd_elf_reloc_symbol_deleted_p,
14043                                           &cookie))
14044             changed = 1;
14045
14046           fini_reloc_cookie_for_section (&cookie, i);
14047         }
14048     }
14049
14050   o = NULL;
14051   if (info->eh_frame_hdr_type != COMPACT_EH_HDR)
14052     o = bfd_get_section_by_name (output_bfd, ".eh_frame");
14053   if (o != NULL)
14054     {
14055       asection *i;
14056       int eh_changed = 0;
14057       unsigned int eh_alignment;
14058
14059       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
14060         {
14061           if (i->size == 0)
14062             continue;
14063
14064           abfd = i->owner;
14065           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
14066             continue;
14067
14068           if (!init_reloc_cookie_for_section (&cookie, info, i))
14069             return -1;
14070
14071           _bfd_elf_parse_eh_frame (abfd, info, i, &cookie);
14072           if (_bfd_elf_discard_section_eh_frame (abfd, info, i,
14073                                                  bfd_elf_reloc_symbol_deleted_p,
14074                                                  &cookie))
14075             {
14076               eh_changed = 1;
14077               if (i->size != i->rawsize)
14078                 changed = 1;
14079             }
14080
14081           fini_reloc_cookie_for_section (&cookie, i);
14082         }
14083
14084       eh_alignment = 1 << o->alignment_power;
14085       /* Skip over zero terminator, and prevent empty sections from
14086          adding alignment padding at the end.  */
14087       for (i = o->map_tail.s; i != NULL; i = i->map_tail.s)
14088         if (i->size == 0)
14089           i->flags |= SEC_EXCLUDE;
14090         else if (i->size > 4)
14091           break;
14092       /* The last non-empty eh_frame section doesn't need padding.  */
14093       if (i != NULL)
14094         i = i->map_tail.s;
14095       /* Any prior sections must pad the last FDE out to the output
14096          section alignment.  Otherwise we might have zero padding
14097          between sections, which would be seen as a terminator.  */
14098       for (; i != NULL; i = i->map_tail.s)
14099         if (i->size == 4)
14100           /* All but the last zero terminator should have been removed.  */
14101           BFD_FAIL ();
14102         else
14103           {
14104             bfd_size_type size
14105               = (i->size + eh_alignment - 1) & -eh_alignment;
14106             if (i->size != size)
14107               {
14108                 i->size = size;
14109                 changed = 1;
14110                 eh_changed = 1;
14111               }
14112           }
14113       if (eh_changed)
14114         elf_link_hash_traverse (elf_hash_table (info),
14115                                 _bfd_elf_adjust_eh_frame_global_symbol, NULL);
14116     }
14117
14118   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
14119     {
14120       const struct elf_backend_data *bed;
14121       asection *s;
14122
14123       if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
14124         continue;
14125       s = abfd->sections;
14126       if (s == NULL || s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
14127         continue;
14128
14129       bed = get_elf_backend_data (abfd);
14130
14131       if (bed->elf_backend_discard_info != NULL)
14132         {
14133           if (!init_reloc_cookie (&cookie, info, abfd))
14134             return -1;
14135
14136           if ((*bed->elf_backend_discard_info) (abfd, &cookie, info))
14137             changed = 1;
14138
14139           fini_reloc_cookie (&cookie, abfd);
14140         }
14141     }
14142
14143   if (info->eh_frame_hdr_type == COMPACT_EH_HDR)
14144     _bfd_elf_end_eh_frame_parsing (info);
14145
14146   if (info->eh_frame_hdr_type
14147       && !bfd_link_relocatable (info)
14148       && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
14149     changed = 1;
14150
14151   return changed;
14152 }
14153
14154 bfd_boolean
14155 _bfd_elf_section_already_linked (bfd *abfd,
14156                                  asection *sec,
14157                                  struct bfd_link_info *info)
14158 {
14159   flagword flags;
14160   const char *name, *key;
14161   struct bfd_section_already_linked *l;
14162   struct bfd_section_already_linked_hash_entry *already_linked_list;
14163
14164   if (sec->output_section == bfd_abs_section_ptr)
14165     return FALSE;
14166
14167   flags = sec->flags;
14168
14169   /* Return if it isn't a linkonce section.  A comdat group section
14170      also has SEC_LINK_ONCE set.  */
14171   if ((flags & SEC_LINK_ONCE) == 0)
14172     return FALSE;
14173
14174   /* Don't put group member sections on our list of already linked
14175      sections.  They are handled as a group via their group section.  */
14176   if (elf_sec_group (sec) != NULL)
14177     return FALSE;
14178
14179   /* For a SHT_GROUP section, use the group signature as the key.  */
14180   name = sec->name;
14181   if ((flags & SEC_GROUP) != 0
14182       && elf_next_in_group (sec) != NULL
14183       && elf_group_name (elf_next_in_group (sec)) != NULL)
14184     key = elf_group_name (elf_next_in_group (sec));
14185   else
14186     {
14187       /* Otherwise we should have a .gnu.linkonce.<type>.<key> section.  */
14188       if (CONST_STRNEQ (name, ".gnu.linkonce.")
14189           && (key = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
14190         key++;
14191       else
14192         /* Must be a user linkonce section that doesn't follow gcc's
14193            naming convention.  In this case we won't be matching
14194            single member groups.  */
14195         key = name;
14196     }
14197
14198   already_linked_list = bfd_section_already_linked_table_lookup (key);
14199
14200   for (l = already_linked_list->entry; l != NULL; l = l->next)
14201     {
14202       /* We may have 2 different types of sections on the list: group
14203          sections with a signature of <key> (<key> is some string),
14204          and linkonce sections named .gnu.linkonce.<type>.<key>.
14205          Match like sections.  LTO plugin sections are an exception.
14206          They are always named .gnu.linkonce.t.<key> and match either
14207          type of section.  */
14208       if (((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
14209            && ((flags & SEC_GROUP) != 0
14210                || strcmp (name, l->sec->name) == 0))
14211           || (l->sec->owner->flags & BFD_PLUGIN) != 0)
14212         {
14213           /* The section has already been linked.  See if we should
14214              issue a warning.  */
14215           if (!_bfd_handle_already_linked (sec, l, info))
14216             return FALSE;
14217
14218           if (flags & SEC_GROUP)
14219             {
14220               asection *first = elf_next_in_group (sec);
14221               asection *s = first;
14222
14223               while (s != NULL)
14224                 {
14225                   s->output_section = bfd_abs_section_ptr;
14226                   /* Record which group discards it.  */
14227                   s->kept_section = l->sec;
14228                   s = elf_next_in_group (s);
14229                   /* These lists are circular.  */
14230                   if (s == first)
14231                     break;
14232                 }
14233             }
14234
14235           return TRUE;
14236         }
14237     }
14238
14239   /* A single member comdat group section may be discarded by a
14240      linkonce section and vice versa.  */
14241   if ((flags & SEC_GROUP) != 0)
14242     {
14243       asection *first = elf_next_in_group (sec);
14244
14245       if (first != NULL && elf_next_in_group (first) == first)
14246         /* Check this single member group against linkonce sections.  */
14247         for (l = already_linked_list->entry; l != NULL; l = l->next)
14248           if ((l->sec->flags & SEC_GROUP) == 0
14249               && bfd_elf_match_symbols_in_sections (l->sec, first, info))
14250             {
14251               first->output_section = bfd_abs_section_ptr;
14252               first->kept_section = l->sec;
14253               sec->output_section = bfd_abs_section_ptr;
14254               break;
14255             }
14256     }
14257   else
14258     /* Check this linkonce section against single member groups.  */
14259     for (l = already_linked_list->entry; l != NULL; l = l->next)
14260       if (l->sec->flags & SEC_GROUP)
14261         {
14262           asection *first = elf_next_in_group (l->sec);
14263
14264           if (first != NULL
14265               && elf_next_in_group (first) == first
14266               && bfd_elf_match_symbols_in_sections (first, sec, info))
14267             {
14268               sec->output_section = bfd_abs_section_ptr;
14269               sec->kept_section = first;
14270               break;
14271             }
14272         }
14273
14274   /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F'
14275      referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4
14276      specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce'
14277      prefix) instead.  `.gnu.linkonce.r.*' were the `.rodata' part of its
14278      matching `.gnu.linkonce.t.*'.  If `.gnu.linkonce.r.F' is not discarded
14279      but its `.gnu.linkonce.t.F' is discarded means we chose one-only
14280      `.gnu.linkonce.t.F' section from a different bfd not requiring any
14281      `.gnu.linkonce.r.F'.  Thus `.gnu.linkonce.r.F' should be discarded.
14282      The reverse order cannot happen as there is never a bfd with only the
14283      `.gnu.linkonce.r.F' section.  The order of sections in a bfd does not
14284      matter as here were are looking only for cross-bfd sections.  */
14285
14286   if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
14287     for (l = already_linked_list->entry; l != NULL; l = l->next)
14288       if ((l->sec->flags & SEC_GROUP) == 0
14289           && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
14290         {
14291           if (abfd != l->sec->owner)
14292             sec->output_section = bfd_abs_section_ptr;
14293           break;
14294         }
14295
14296   /* This is the first section with this name.  Record it.  */
14297   if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
14298     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
14299   return sec->output_section == bfd_abs_section_ptr;
14300 }
14301
14302 bfd_boolean
14303 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
14304 {
14305   return sym->st_shndx == SHN_COMMON;
14306 }
14307
14308 unsigned int
14309 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
14310 {
14311   return SHN_COMMON;
14312 }
14313
14314 asection *
14315 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
14316 {
14317   return bfd_com_section_ptr;
14318 }
14319
14320 bfd_vma
14321 _bfd_elf_default_got_elt_size (bfd *abfd,
14322                                struct bfd_link_info *info ATTRIBUTE_UNUSED,
14323                                struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
14324                                bfd *ibfd ATTRIBUTE_UNUSED,
14325                                unsigned long symndx ATTRIBUTE_UNUSED)
14326 {
14327   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14328   return bed->s->arch_size / 8;
14329 }
14330
14331 /* Routines to support the creation of dynamic relocs.  */
14332
14333 /* Returns the name of the dynamic reloc section associated with SEC.  */
14334
14335 static const char *
14336 get_dynamic_reloc_section_name (bfd *       abfd,
14337                                 asection *  sec,
14338                                 bfd_boolean is_rela)
14339 {
14340   char *name;
14341   const char *old_name = bfd_get_section_name (NULL, sec);
14342   const char *prefix = is_rela ? ".rela" : ".rel";
14343
14344   if (old_name == NULL)
14345     return NULL;
14346
14347   name = bfd_alloc (abfd, strlen (prefix) + strlen (old_name) + 1);
14348   sprintf (name, "%s%s", prefix, old_name);
14349
14350   return name;
14351 }
14352
14353 /* Returns the dynamic reloc section associated with SEC.
14354    If necessary compute the name of the dynamic reloc section based
14355    on SEC's name (looked up in ABFD's string table) and the setting
14356    of IS_RELA.  */
14357
14358 asection *
14359 _bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
14360                                     asection *  sec,
14361                                     bfd_boolean is_rela)
14362 {
14363   asection * reloc_sec = elf_section_data (sec)->sreloc;
14364
14365   if (reloc_sec == NULL)
14366     {
14367       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
14368
14369       if (name != NULL)
14370         {
14371           reloc_sec = bfd_get_linker_section (abfd, name);
14372
14373           if (reloc_sec != NULL)
14374             elf_section_data (sec)->sreloc = reloc_sec;
14375         }
14376     }
14377
14378   return reloc_sec;
14379 }
14380
14381 /* Returns the dynamic reloc section associated with SEC.  If the
14382    section does not exist it is created and attached to the DYNOBJ
14383    bfd and stored in the SRELOC field of SEC's elf_section_data
14384    structure.
14385
14386    ALIGNMENT is the alignment for the newly created section and
14387    IS_RELA defines whether the name should be .rela.<SEC's name>
14388    or .rel.<SEC's name>.  The section name is looked up in the
14389    string table associated with ABFD.  */
14390
14391 asection *
14392 _bfd_elf_make_dynamic_reloc_section (asection *sec,
14393                                      bfd *dynobj,
14394                                      unsigned int alignment,
14395                                      bfd *abfd,
14396                                      bfd_boolean is_rela)
14397 {
14398   asection * reloc_sec = elf_section_data (sec)->sreloc;
14399
14400   if (reloc_sec == NULL)
14401     {
14402       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
14403
14404       if (name == NULL)
14405         return NULL;
14406
14407       reloc_sec = bfd_get_linker_section (dynobj, name);
14408
14409       if (reloc_sec == NULL)
14410         {
14411           flagword flags = (SEC_HAS_CONTENTS | SEC_READONLY
14412                             | SEC_IN_MEMORY | SEC_LINKER_CREATED);
14413           if ((sec->flags & SEC_ALLOC) != 0)
14414             flags |= SEC_ALLOC | SEC_LOAD;
14415
14416           reloc_sec = bfd_make_section_anyway_with_flags (dynobj, name, flags);
14417           if (reloc_sec != NULL)
14418             {
14419               /* _bfd_elf_get_sec_type_attr chooses a section type by
14420                  name.  Override as it may be wrong, eg. for a user
14421                  section named "auto" we'll get ".relauto" which is
14422                  seen to be a .rela section.  */
14423               elf_section_type (reloc_sec) = is_rela ? SHT_RELA : SHT_REL;
14424               if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
14425                 reloc_sec = NULL;
14426             }
14427         }
14428
14429       elf_section_data (sec)->sreloc = reloc_sec;
14430     }
14431
14432   return reloc_sec;
14433 }
14434
14435 /* Copy the ELF symbol type and other attributes for a linker script
14436    assignment from HSRC to HDEST.  Generally this should be treated as
14437    if we found a strong non-dynamic definition for HDEST (except that
14438    ld ignores multiple definition errors).  */
14439 void
14440 _bfd_elf_copy_link_hash_symbol_type (bfd *abfd,
14441                                      struct bfd_link_hash_entry *hdest,
14442                                      struct bfd_link_hash_entry *hsrc)
14443 {
14444   struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *) hdest;
14445   struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *) hsrc;
14446   Elf_Internal_Sym isym;
14447
14448   ehdest->type = ehsrc->type;
14449   ehdest->target_internal = ehsrc->target_internal;
14450
14451   isym.st_other = ehsrc->other;
14452   elf_merge_st_other (abfd, ehdest, &isym, NULL, TRUE, FALSE);
14453 }
14454
14455 /* Append a RELA relocation REL to section S in BFD.  */
14456
14457 void
14458 elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
14459 {
14460   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14461   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
14462   BFD_ASSERT (loc + bed->s->sizeof_rela <= s->contents + s->size);
14463   bed->s->swap_reloca_out (abfd, rel, loc);
14464 }
14465
14466 /* Append a REL relocation REL to section S in BFD.  */
14467
14468 void
14469 elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
14470 {
14471   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14472   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rel);
14473   BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size);
14474   bed->s->swap_reloc_out (abfd, rel, loc);
14475 }
14476
14477 /* Define __start, __stop, .startof. or .sizeof. symbol.  */
14478
14479 struct bfd_link_hash_entry *
14480 bfd_elf_define_start_stop (struct bfd_link_info *info,
14481                            const char *symbol, asection *sec)
14482 {
14483   struct elf_link_hash_entry *h;
14484
14485   h = elf_link_hash_lookup (elf_hash_table (info), symbol,
14486                             FALSE, FALSE, TRUE);
14487   if (h != NULL
14488       && (h->root.type == bfd_link_hash_undefined
14489           || h->root.type == bfd_link_hash_undefweak
14490           || ((h->ref_regular || h->def_dynamic) && !h->def_regular)))
14491     {
14492       bfd_boolean was_dynamic = h->ref_dynamic || h->def_dynamic;
14493       h->root.type = bfd_link_hash_defined;
14494       h->root.u.def.section = sec;
14495       h->root.u.def.value = 0;
14496       h->def_regular = 1;
14497       h->def_dynamic = 0;
14498       h->start_stop = 1;
14499       h->u2.start_stop_section = sec;
14500       if (symbol[0] == '.')
14501         {
14502           /* .startof. and .sizeof. symbols are local.  */
14503           const struct elf_backend_data *bed;
14504           bed = get_elf_backend_data (info->output_bfd);
14505           (*bed->elf_backend_hide_symbol) (info, h, TRUE);
14506         }
14507       else
14508         {
14509           if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
14510             h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_PROTECTED;
14511           if (was_dynamic)
14512             bfd_elf_link_record_dynamic_symbol (info, h);
14513         }
14514       return &h->root;
14515     }
14516   return NULL;
14517 }