* elflink.c (elf_link_add_object_symbols): Don't create .tcommon
[external/binutils.git] / bfd / elflink.c
1 /* ELF linking support for BFD.
2    Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
3    2005, 2006 Free Software Foundation, Inc.
4
5    This file is part of BFD, the Binary File Descriptor library.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
20
21 #include "bfd.h"
22 #include "sysdep.h"
23 #include "bfdlink.h"
24 #include "libbfd.h"
25 #define ARCH_SIZE 0
26 #include "elf-bfd.h"
27 #include "safe-ctype.h"
28 #include "libiberty.h"
29 #include "objalloc.h"
30
31 /* Define a symbol in a dynamic linkage section.  */
32
33 struct elf_link_hash_entry *
34 _bfd_elf_define_linkage_sym (bfd *abfd,
35                              struct bfd_link_info *info,
36                              asection *sec,
37                              const char *name)
38 {
39   struct elf_link_hash_entry *h;
40   struct bfd_link_hash_entry *bh;
41   const struct elf_backend_data *bed;
42
43   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
44   if (h != NULL)
45     {
46       /* Zap symbol defined in an as-needed lib that wasn't linked.
47          This is a symptom of a larger problem:  Absolute symbols
48          defined in shared libraries can't be overridden, because we
49          lose the link to the bfd which is via the symbol section.  */
50       h->root.type = bfd_link_hash_new;
51     }
52
53   bh = &h->root;
54   if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL,
55                                          sec, 0, NULL, FALSE,
56                                          get_elf_backend_data (abfd)->collect,
57                                          &bh))
58     return NULL;
59   h = (struct elf_link_hash_entry *) bh;
60   h->def_regular = 1;
61   h->type = STT_OBJECT;
62   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
63
64   bed = get_elf_backend_data (abfd);
65   (*bed->elf_backend_hide_symbol) (info, h, TRUE);
66   return h;
67 }
68
69 bfd_boolean
70 _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
71 {
72   flagword flags;
73   asection *s;
74   struct elf_link_hash_entry *h;
75   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
76   int ptralign;
77
78   /* This function may be called more than once.  */
79   s = bfd_get_section_by_name (abfd, ".got");
80   if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
81     return TRUE;
82
83   switch (bed->s->arch_size)
84     {
85     case 32:
86       ptralign = 2;
87       break;
88
89     case 64:
90       ptralign = 3;
91       break;
92
93     default:
94       bfd_set_error (bfd_error_bad_value);
95       return FALSE;
96     }
97
98   flags = bed->dynamic_sec_flags;
99
100   s = bfd_make_section_with_flags (abfd, ".got", flags);
101   if (s == NULL
102       || !bfd_set_section_alignment (abfd, s, ptralign))
103     return FALSE;
104
105   if (bed->want_got_plt)
106     {
107       s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
108       if (s == NULL
109           || !bfd_set_section_alignment (abfd, s, ptralign))
110         return FALSE;
111     }
112
113   if (bed->want_got_sym)
114     {
115       /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
116          (or .got.plt) section.  We don't do this in the linker script
117          because we don't want to define the symbol if we are not creating
118          a global offset table.  */
119       h = _bfd_elf_define_linkage_sym (abfd, info, s, "_GLOBAL_OFFSET_TABLE_");
120       elf_hash_table (info)->hgot = h;
121       if (h == NULL)
122         return FALSE;
123     }
124
125   /* The first bit of the global offset table is the header.  */
126   s->size += bed->got_header_size;
127
128   return TRUE;
129 }
130 \f
131 /* Create a strtab to hold the dynamic symbol names.  */
132 static bfd_boolean
133 _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info)
134 {
135   struct elf_link_hash_table *hash_table;
136
137   hash_table = elf_hash_table (info);
138   if (hash_table->dynobj == NULL)
139     hash_table->dynobj = abfd;
140
141   if (hash_table->dynstr == NULL)
142     {
143       hash_table->dynstr = _bfd_elf_strtab_init ();
144       if (hash_table->dynstr == NULL)
145         return FALSE;
146     }
147   return TRUE;
148 }
149
150 /* Create some sections which will be filled in with dynamic linking
151    information.  ABFD is an input file which requires dynamic sections
152    to be created.  The dynamic sections take up virtual memory space
153    when the final executable is run, so we need to create them before
154    addresses are assigned to the output sections.  We work out the
155    actual contents and size of these sections later.  */
156
157 bfd_boolean
158 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
159 {
160   flagword flags;
161   register asection *s;
162   const struct elf_backend_data *bed;
163
164   if (! is_elf_hash_table (info->hash))
165     return FALSE;
166
167   if (elf_hash_table (info)->dynamic_sections_created)
168     return TRUE;
169
170   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
171     return FALSE;
172
173   abfd = elf_hash_table (info)->dynobj;
174   bed = get_elf_backend_data (abfd);
175
176   flags = bed->dynamic_sec_flags;
177
178   /* A dynamically linked executable has a .interp section, but a
179      shared library does not.  */
180   if (info->executable)
181     {
182       s = bfd_make_section_with_flags (abfd, ".interp",
183                                        flags | SEC_READONLY);
184       if (s == NULL)
185         return FALSE;
186     }
187
188   if (! info->traditional_format)
189     {
190       s = bfd_make_section_with_flags (abfd, ".eh_frame_hdr",
191                                        flags | SEC_READONLY);
192       if (s == NULL
193           || ! bfd_set_section_alignment (abfd, s, 2))
194         return FALSE;
195       elf_hash_table (info)->eh_info.hdr_sec = s;
196     }
197
198   /* Create sections to hold version informations.  These are removed
199      if they are not needed.  */
200   s = bfd_make_section_with_flags (abfd, ".gnu.version_d",
201                                    flags | SEC_READONLY);
202   if (s == NULL
203       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
204     return FALSE;
205
206   s = bfd_make_section_with_flags (abfd, ".gnu.version",
207                                    flags | SEC_READONLY);
208   if (s == NULL
209       || ! bfd_set_section_alignment (abfd, s, 1))
210     return FALSE;
211
212   s = bfd_make_section_with_flags (abfd, ".gnu.version_r",
213                                    flags | SEC_READONLY);
214   if (s == NULL
215       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
216     return FALSE;
217
218   s = bfd_make_section_with_flags (abfd, ".dynsym",
219                                    flags | SEC_READONLY);
220   if (s == NULL
221       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
222     return FALSE;
223
224   s = bfd_make_section_with_flags (abfd, ".dynstr",
225                                    flags | SEC_READONLY);
226   if (s == NULL)
227     return FALSE;
228
229   s = bfd_make_section_with_flags (abfd, ".dynamic", flags);
230   if (s == NULL
231       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
232     return FALSE;
233
234   /* The special symbol _DYNAMIC is always set to the start of the
235      .dynamic section.  We could set _DYNAMIC in a linker script, but we
236      only want to define it if we are, in fact, creating a .dynamic
237      section.  We don't want to define it if there is no .dynamic
238      section, since on some ELF platforms the start up code examines it
239      to decide how to initialize the process.  */
240   if (!_bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC"))
241     return FALSE;
242
243   s = bfd_make_section_with_flags (abfd, ".hash",
244                                    flags | SEC_READONLY);
245   if (s == NULL
246       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
247     return FALSE;
248   elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
249
250   /* Let the backend create the rest of the sections.  This lets the
251      backend set the right flags.  The backend will normally create
252      the .got and .plt sections.  */
253   if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
254     return FALSE;
255
256   elf_hash_table (info)->dynamic_sections_created = TRUE;
257
258   return TRUE;
259 }
260
261 /* Create dynamic sections when linking against a dynamic object.  */
262
263 bfd_boolean
264 _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
265 {
266   flagword flags, pltflags;
267   struct elf_link_hash_entry *h;
268   asection *s;
269   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
270
271   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
272      .rel[a].bss sections.  */
273   flags = bed->dynamic_sec_flags;
274
275   pltflags = flags;
276   if (bed->plt_not_loaded)
277     /* We do not clear SEC_ALLOC here because we still want the OS to
278        allocate space for the section; it's just that there's nothing
279        to read in from the object file.  */
280     pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS);
281   else
282     pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD;
283   if (bed->plt_readonly)
284     pltflags |= SEC_READONLY;
285
286   s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
287   if (s == NULL
288       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
289     return FALSE;
290
291   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
292      .plt section.  */
293   if (bed->want_plt_sym)
294     {
295       h = _bfd_elf_define_linkage_sym (abfd, info, s,
296                                        "_PROCEDURE_LINKAGE_TABLE_");
297       elf_hash_table (info)->hplt = h;
298       if (h == NULL)
299         return FALSE;
300     }
301
302   s = bfd_make_section_with_flags (abfd,
303                                    (bed->default_use_rela_p
304                                     ? ".rela.plt" : ".rel.plt"),
305                                    flags | SEC_READONLY);
306   if (s == NULL
307       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
308     return FALSE;
309
310   if (! _bfd_elf_create_got_section (abfd, info))
311     return FALSE;
312
313   if (bed->want_dynbss)
314     {
315       /* The .dynbss section is a place to put symbols which are defined
316          by dynamic objects, are referenced by regular objects, and are
317          not functions.  We must allocate space for them in the process
318          image and use a R_*_COPY reloc to tell the dynamic linker to
319          initialize them at run time.  The linker script puts the .dynbss
320          section into the .bss section of the final image.  */
321       s = bfd_make_section_with_flags (abfd, ".dynbss",
322                                        (SEC_ALLOC
323                                         | SEC_LINKER_CREATED));
324       if (s == NULL)
325         return FALSE;
326
327       /* The .rel[a].bss section holds copy relocs.  This section is not
328          normally needed.  We need to create it here, though, so that the
329          linker will map it to an output section.  We can't just create it
330          only if we need it, because we will not know whether we need it
331          until we have seen all the input files, and the first time the
332          main linker code calls BFD after examining all the input files
333          (size_dynamic_sections) the input sections have already been
334          mapped to the output sections.  If the section turns out not to
335          be needed, we can discard it later.  We will never need this
336          section when generating a shared object, since they do not use
337          copy relocs.  */
338       if (! info->shared)
339         {
340           s = bfd_make_section_with_flags (abfd,
341                                            (bed->default_use_rela_p
342                                             ? ".rela.bss" : ".rel.bss"),
343                                            flags | SEC_READONLY);
344           if (s == NULL
345               || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
346             return FALSE;
347         }
348     }
349
350   return TRUE;
351 }
352 \f
353 /* Record a new dynamic symbol.  We record the dynamic symbols as we
354    read the input files, since we need to have a list of all of them
355    before we can determine the final sizes of the output sections.
356    Note that we may actually call this function even though we are not
357    going to output any dynamic symbols; in some cases we know that a
358    symbol should be in the dynamic symbol table, but only if there is
359    one.  */
360
361 bfd_boolean
362 bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
363                                     struct elf_link_hash_entry *h)
364 {
365   if (h->dynindx == -1)
366     {
367       struct elf_strtab_hash *dynstr;
368       char *p;
369       const char *name;
370       bfd_size_type indx;
371
372       /* XXX: The ABI draft says the linker must turn hidden and
373          internal symbols into STB_LOCAL symbols when producing the
374          DSO. However, if ld.so honors st_other in the dynamic table,
375          this would not be necessary.  */
376       switch (ELF_ST_VISIBILITY (h->other))
377         {
378         case STV_INTERNAL:
379         case STV_HIDDEN:
380           if (h->root.type != bfd_link_hash_undefined
381               && h->root.type != bfd_link_hash_undefweak)
382             {
383               h->forced_local = 1;
384               if (!elf_hash_table (info)->is_relocatable_executable)
385                 return TRUE;
386             }
387
388         default:
389           break;
390         }
391
392       h->dynindx = elf_hash_table (info)->dynsymcount;
393       ++elf_hash_table (info)->dynsymcount;
394
395       dynstr = elf_hash_table (info)->dynstr;
396       if (dynstr == NULL)
397         {
398           /* Create a strtab to hold the dynamic symbol names.  */
399           elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
400           if (dynstr == NULL)
401             return FALSE;
402         }
403
404       /* We don't put any version information in the dynamic string
405          table.  */
406       name = h->root.root.string;
407       p = strchr (name, ELF_VER_CHR);
408       if (p != NULL)
409         /* We know that the p points into writable memory.  In fact,
410            there are only a few symbols that have read-only names, being
411            those like _GLOBAL_OFFSET_TABLE_ that are created specially
412            by the backends.  Most symbols will have names pointing into
413            an ELF string table read from a file, or to objalloc memory.  */
414         *p = 0;
415
416       indx = _bfd_elf_strtab_add (dynstr, name, p != NULL);
417
418       if (p != NULL)
419         *p = ELF_VER_CHR;
420
421       if (indx == (bfd_size_type) -1)
422         return FALSE;
423       h->dynstr_index = indx;
424     }
425
426   return TRUE;
427 }
428 \f
429 /* Record an assignment to a symbol made by a linker script.  We need
430    this in case some dynamic object refers to this symbol.  */
431
432 bfd_boolean
433 bfd_elf_record_link_assignment (bfd *output_bfd,
434                                 struct bfd_link_info *info,
435                                 const char *name,
436                                 bfd_boolean provide,
437                                 bfd_boolean hidden)
438 {
439   struct elf_link_hash_entry *h;
440   struct elf_link_hash_table *htab;
441
442   if (!is_elf_hash_table (info->hash))
443     return TRUE;
444
445   htab = elf_hash_table (info);
446   h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE);
447   if (h == NULL)
448     return provide;
449
450   /* Since we're defining the symbol, don't let it seem to have not
451      been defined.  record_dynamic_symbol and size_dynamic_sections
452      may depend on this.  */
453   if (h->root.type == bfd_link_hash_undefweak
454       || h->root.type == bfd_link_hash_undefined)
455     {
456       h->root.type = bfd_link_hash_new;
457       if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root)
458         bfd_link_repair_undef_list (&htab->root);
459     }
460
461   if (h->root.type == bfd_link_hash_new)
462     h->non_elf = 0;
463
464   /* If this symbol is being provided by the linker script, and it is
465      currently defined by a dynamic object, but not by a regular
466      object, then mark it as undefined so that the generic linker will
467      force the correct value.  */
468   if (provide
469       && h->def_dynamic
470       && !h->def_regular)
471     h->root.type = bfd_link_hash_undefined;
472
473   /* If this symbol is not being provided by the linker script, and it is
474      currently defined by a dynamic object, but not by a regular object,
475      then clear out any version information because the symbol will not be
476      associated with the dynamic object any more.  */
477   if (!provide
478       && h->def_dynamic
479       && !h->def_regular)
480     h->verinfo.verdef = NULL;
481
482   h->def_regular = 1;
483
484   if (provide && hidden)
485     {
486       const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
487
488       h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
489       (*bed->elf_backend_hide_symbol) (info, h, TRUE);
490     }
491
492   /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects
493      and executables.  */
494   if (!info->relocatable
495       && h->dynindx != -1
496       && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
497           || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL))
498     h->forced_local = 1;
499
500   if ((h->def_dynamic
501        || h->ref_dynamic
502        || info->shared
503        || (info->executable && elf_hash_table (info)->is_relocatable_executable))
504       && h->dynindx == -1)
505     {
506       if (! bfd_elf_link_record_dynamic_symbol (info, h))
507         return FALSE;
508
509       /* If this is a weak defined symbol, and we know a corresponding
510          real symbol from the same dynamic object, make sure the real
511          symbol is also made into a dynamic symbol.  */
512       if (h->u.weakdef != NULL
513           && h->u.weakdef->dynindx == -1)
514         {
515           if (! bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
516             return FALSE;
517         }
518     }
519
520   return TRUE;
521 }
522
523 /* Record a new local dynamic symbol.  Returns 0 on failure, 1 on
524    success, and 2 on a failure caused by attempting to record a symbol
525    in a discarded section, eg. a discarded link-once section symbol.  */
526
527 int
528 bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info,
529                                           bfd *input_bfd,
530                                           long input_indx)
531 {
532   bfd_size_type amt;
533   struct elf_link_local_dynamic_entry *entry;
534   struct elf_link_hash_table *eht;
535   struct elf_strtab_hash *dynstr;
536   unsigned long dynstr_index;
537   char *name;
538   Elf_External_Sym_Shndx eshndx;
539   char esym[sizeof (Elf64_External_Sym)];
540
541   if (! is_elf_hash_table (info->hash))
542     return 0;
543
544   /* See if the entry exists already.  */
545   for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
546     if (entry->input_bfd == input_bfd && entry->input_indx == input_indx)
547       return 1;
548
549   amt = sizeof (*entry);
550   entry = bfd_alloc (input_bfd, amt);
551   if (entry == NULL)
552     return 0;
553
554   /* Go find the symbol, so that we can find it's name.  */
555   if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr,
556                              1, input_indx, &entry->isym, esym, &eshndx))
557     {
558       bfd_release (input_bfd, entry);
559       return 0;
560     }
561
562   if (entry->isym.st_shndx != SHN_UNDEF
563       && (entry->isym.st_shndx < SHN_LORESERVE
564           || entry->isym.st_shndx > SHN_HIRESERVE))
565     {
566       asection *s;
567
568       s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx);
569       if (s == NULL || bfd_is_abs_section (s->output_section))
570         {
571           /* We can still bfd_release here as nothing has done another
572              bfd_alloc.  We can't do this later in this function.  */
573           bfd_release (input_bfd, entry);
574           return 2;
575         }
576     }
577
578   name = (bfd_elf_string_from_elf_section
579           (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link,
580            entry->isym.st_name));
581
582   dynstr = elf_hash_table (info)->dynstr;
583   if (dynstr == NULL)
584     {
585       /* Create a strtab to hold the dynamic symbol names.  */
586       elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
587       if (dynstr == NULL)
588         return 0;
589     }
590
591   dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE);
592   if (dynstr_index == (unsigned long) -1)
593     return 0;
594   entry->isym.st_name = dynstr_index;
595
596   eht = elf_hash_table (info);
597
598   entry->next = eht->dynlocal;
599   eht->dynlocal = entry;
600   entry->input_bfd = input_bfd;
601   entry->input_indx = input_indx;
602   eht->dynsymcount++;
603
604   /* Whatever binding the symbol had before, it's now local.  */
605   entry->isym.st_info
606     = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info));
607
608   /* The dynindx will be set at the end of size_dynamic_sections.  */
609
610   return 1;
611 }
612
613 /* Return the dynindex of a local dynamic symbol.  */
614
615 long
616 _bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info,
617                                     bfd *input_bfd,
618                                     long input_indx)
619 {
620   struct elf_link_local_dynamic_entry *e;
621
622   for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
623     if (e->input_bfd == input_bfd && e->input_indx == input_indx)
624       return e->dynindx;
625   return -1;
626 }
627
628 /* This function is used to renumber the dynamic symbols, if some of
629    them are removed because they are marked as local.  This is called
630    via elf_link_hash_traverse.  */
631
632 static bfd_boolean
633 elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h,
634                                       void *data)
635 {
636   size_t *count = data;
637
638   if (h->root.type == bfd_link_hash_warning)
639     h = (struct elf_link_hash_entry *) h->root.u.i.link;
640
641   if (h->forced_local)
642     return TRUE;
643
644   if (h->dynindx != -1)
645     h->dynindx = ++(*count);
646
647   return TRUE;
648 }
649
650
651 /* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with
652    STB_LOCAL binding.  */
653
654 static bfd_boolean
655 elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h,
656                                             void *data)
657 {
658   size_t *count = data;
659
660   if (h->root.type == bfd_link_hash_warning)
661     h = (struct elf_link_hash_entry *) h->root.u.i.link;
662
663   if (!h->forced_local)
664     return TRUE;
665
666   if (h->dynindx != -1)
667     h->dynindx = ++(*count);
668
669   return TRUE;
670 }
671
672 /* Return true if the dynamic symbol for a given section should be
673    omitted when creating a shared library.  */
674 bfd_boolean
675 _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
676                                    struct bfd_link_info *info,
677                                    asection *p)
678 {
679   switch (elf_section_data (p)->this_hdr.sh_type)
680     {
681     case SHT_PROGBITS:
682     case SHT_NOBITS:
683       /* If sh_type is yet undecided, assume it could be
684          SHT_PROGBITS/SHT_NOBITS.  */
685     case SHT_NULL:
686       if (strcmp (p->name, ".got") == 0
687           || strcmp (p->name, ".got.plt") == 0
688           || strcmp (p->name, ".plt") == 0)
689         {
690           asection *ip;
691           bfd *dynobj = elf_hash_table (info)->dynobj;
692
693           if (dynobj != NULL
694               && (ip = bfd_get_section_by_name (dynobj, p->name)) != NULL
695               && (ip->flags & SEC_LINKER_CREATED)
696               && ip->output_section == p)
697             return TRUE;
698         }
699       return FALSE;
700
701       /* There shouldn't be section relative relocations
702          against any other section.  */
703     default:
704       return TRUE;
705     }
706 }
707
708 /* Assign dynsym indices.  In a shared library we generate a section
709    symbol for each output section, which come first.  Next come symbols
710    which have been forced to local binding.  Then all of the back-end
711    allocated local dynamic syms, followed by the rest of the global
712    symbols.  */
713
714 static unsigned long
715 _bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
716                                 struct bfd_link_info *info,
717                                 unsigned long *section_sym_count)
718 {
719   unsigned long dynsymcount = 0;
720
721   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
722     {
723       const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
724       asection *p;
725       for (p = output_bfd->sections; p ; p = p->next)
726         if ((p->flags & SEC_EXCLUDE) == 0
727             && (p->flags & SEC_ALLOC) != 0
728             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
729           elf_section_data (p)->dynindx = ++dynsymcount;
730     }
731   *section_sym_count = dynsymcount;
732
733   elf_link_hash_traverse (elf_hash_table (info),
734                           elf_link_renumber_local_hash_table_dynsyms,
735                           &dynsymcount);
736
737   if (elf_hash_table (info)->dynlocal)
738     {
739       struct elf_link_local_dynamic_entry *p;
740       for (p = elf_hash_table (info)->dynlocal; p ; p = p->next)
741         p->dynindx = ++dynsymcount;
742     }
743
744   elf_link_hash_traverse (elf_hash_table (info),
745                           elf_link_renumber_hash_table_dynsyms,
746                           &dynsymcount);
747
748   /* There is an unused NULL entry at the head of the table which
749      we must account for in our count.  Unless there weren't any
750      symbols, which means we'll have no table at all.  */
751   if (dynsymcount != 0)
752     ++dynsymcount;
753
754   elf_hash_table (info)->dynsymcount = dynsymcount;
755   return dynsymcount;
756 }
757
758 /* This function is called when we want to define a new symbol.  It
759    handles the various cases which arise when we find a definition in
760    a dynamic object, or when there is already a definition in a
761    dynamic object.  The new symbol is described by NAME, SYM, PSEC,
762    and PVALUE.  We set SYM_HASH to the hash table entry.  We set
763    OVERRIDE if the old symbol is overriding a new definition.  We set
764    TYPE_CHANGE_OK if it is OK for the type to change.  We set
765    SIZE_CHANGE_OK if it is OK for the size to change.  By OK to
766    change, we mean that we shouldn't warn if the type or size does
767    change.  We set POLD_ALIGNMENT if an old common symbol in a dynamic
768    object is overridden by a regular object.  */
769
770 bfd_boolean
771 _bfd_elf_merge_symbol (bfd *abfd,
772                        struct bfd_link_info *info,
773                        const char *name,
774                        Elf_Internal_Sym *sym,
775                        asection **psec,
776                        bfd_vma *pvalue,
777                        unsigned int *pold_alignment,
778                        struct elf_link_hash_entry **sym_hash,
779                        bfd_boolean *skip,
780                        bfd_boolean *override,
781                        bfd_boolean *type_change_ok,
782                        bfd_boolean *size_change_ok)
783 {
784   asection *sec, *oldsec;
785   struct elf_link_hash_entry *h;
786   struct elf_link_hash_entry *flip;
787   int bind;
788   bfd *oldbfd;
789   bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
790   bfd_boolean newweak, oldweak;
791   const struct elf_backend_data *bed;
792
793   *skip = FALSE;
794   *override = FALSE;
795
796   sec = *psec;
797   bind = ELF_ST_BIND (sym->st_info);
798
799   if (! bfd_is_und_section (sec))
800     h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
801   else
802     h = ((struct elf_link_hash_entry *)
803          bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
804   if (h == NULL)
805     return FALSE;
806   *sym_hash = h;
807
808   /* This code is for coping with dynamic objects, and is only useful
809      if we are doing an ELF link.  */
810   if (info->hash->creator != abfd->xvec)
811     return TRUE;
812
813   /* For merging, we only care about real symbols.  */
814
815   while (h->root.type == bfd_link_hash_indirect
816          || h->root.type == bfd_link_hash_warning)
817     h = (struct elf_link_hash_entry *) h->root.u.i.link;
818
819   /* If we just created the symbol, mark it as being an ELF symbol.
820      Other than that, there is nothing to do--there is no merge issue
821      with a newly defined symbol--so we just return.  */
822
823   if (h->root.type == bfd_link_hash_new)
824     {
825       h->non_elf = 0;
826       return TRUE;
827     }
828
829   /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the
830      existing symbol.  */
831
832   switch (h->root.type)
833     {
834     default:
835       oldbfd = NULL;
836       oldsec = NULL;
837       break;
838
839     case bfd_link_hash_undefined:
840     case bfd_link_hash_undefweak:
841       oldbfd = h->root.u.undef.abfd;
842       oldsec = NULL;
843       break;
844
845     case bfd_link_hash_defined:
846     case bfd_link_hash_defweak:
847       oldbfd = h->root.u.def.section->owner;
848       oldsec = h->root.u.def.section;
849       break;
850
851     case bfd_link_hash_common:
852       oldbfd = h->root.u.c.p->section->owner;
853       oldsec = h->root.u.c.p->section;
854       break;
855     }
856
857   /* In cases involving weak versioned symbols, we may wind up trying
858      to merge a symbol with itself.  Catch that here, to avoid the
859      confusion that results if we try to override a symbol with
860      itself.  The additional tests catch cases like
861      _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a
862      dynamic object, which we do want to handle here.  */
863   if (abfd == oldbfd
864       && ((abfd->flags & DYNAMIC) == 0
865           || !h->def_regular))
866     return TRUE;
867
868   /* NEWDYN and OLDDYN indicate whether the new or old symbol,
869      respectively, is from a dynamic object.  */
870
871   newdyn = (abfd->flags & DYNAMIC) != 0;
872
873   olddyn = FALSE;
874   if (oldbfd != NULL)
875     olddyn = (oldbfd->flags & DYNAMIC) != 0;
876   else if (oldsec != NULL)
877     {
878       /* This handles the special SHN_MIPS_{TEXT,DATA} section
879          indices used by MIPS ELF.  */
880       olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
881     }
882
883   /* NEWDEF and OLDDEF indicate whether the new or old symbol,
884      respectively, appear to be a definition rather than reference.  */
885
886   newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec);
887
888   olddef = (h->root.type != bfd_link_hash_undefined
889             && h->root.type != bfd_link_hash_undefweak
890             && h->root.type != bfd_link_hash_common);
891
892   /* When we try to create a default indirect symbol from the dynamic
893      definition with the default version, we skip it if its type and
894      the type of existing regular definition mismatch.  We only do it
895      if the existing regular definition won't be dynamic.  */
896   if (pold_alignment == NULL
897       && !info->shared
898       && !info->export_dynamic
899       && !h->ref_dynamic
900       && newdyn
901       && newdef
902       && !olddyn
903       && (olddef || h->root.type == bfd_link_hash_common)
904       && ELF_ST_TYPE (sym->st_info) != h->type
905       && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
906       && h->type != STT_NOTYPE)
907     {
908       *skip = TRUE;
909       return TRUE;
910     }
911
912   /* Check TLS symbol.  We don't check undefined symbol introduced by
913      "ld -u".  */
914   if ((ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS)
915       && ELF_ST_TYPE (sym->st_info) != h->type
916       && oldbfd != NULL)
917     {
918       bfd *ntbfd, *tbfd;
919       bfd_boolean ntdef, tdef;
920       asection *ntsec, *tsec;
921
922       if (h->type == STT_TLS)
923         {
924           ntbfd = abfd;
925           ntsec = sec;
926           ntdef = newdef;
927           tbfd = oldbfd;
928           tsec = oldsec;
929           tdef = olddef;
930         }
931       else
932         {
933           ntbfd = oldbfd;
934           ntsec = oldsec;
935           ntdef = olddef;
936           tbfd = abfd;
937           tsec = sec;
938           tdef = newdef;
939         }
940
941       if (tdef && ntdef)
942         (*_bfd_error_handler)
943           (_("%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A"),
944            tbfd, tsec, ntbfd, ntsec, h->root.root.string);
945       else if (!tdef && !ntdef)
946         (*_bfd_error_handler)
947           (_("%s: TLS reference in %B mismatches non-TLS reference in %B"),
948            tbfd, ntbfd, h->root.root.string);
949       else if (tdef)
950         (*_bfd_error_handler)
951           (_("%s: TLS definition in %B section %A mismatches non-TLS reference in %B"),
952            tbfd, tsec, ntbfd, h->root.root.string);
953       else
954         (*_bfd_error_handler)
955           (_("%s: TLS reference in %B mismatches non-TLS definition in %B section %A"),
956            tbfd, ntbfd, ntsec, h->root.root.string);
957
958       bfd_set_error (bfd_error_bad_value);
959       return FALSE;
960     }
961
962   /* We need to remember if a symbol has a definition in a dynamic
963      object or is weak in all dynamic objects. Internal and hidden
964      visibility will make it unavailable to dynamic objects.  */
965   if (newdyn && !h->dynamic_def)
966     {
967       if (!bfd_is_und_section (sec))
968         h->dynamic_def = 1;
969       else
970         {
971           /* Check if this symbol is weak in all dynamic objects. If it
972              is the first time we see it in a dynamic object, we mark
973              if it is weak. Otherwise, we clear it.  */
974           if (!h->ref_dynamic)
975             {
976               if (bind == STB_WEAK)
977                 h->dynamic_weak = 1;
978             }
979           else if (bind != STB_WEAK)
980             h->dynamic_weak = 0;
981         }
982     }
983
984   /* If the old symbol has non-default visibility, we ignore the new
985      definition from a dynamic object.  */
986   if (newdyn
987       && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
988       && !bfd_is_und_section (sec))
989     {
990       *skip = TRUE;
991       /* Make sure this symbol is dynamic.  */
992       h->ref_dynamic = 1;
993       /* A protected symbol has external availability. Make sure it is
994          recorded as dynamic.
995
996          FIXME: Should we check type and size for protected symbol?  */
997       if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
998         return bfd_elf_link_record_dynamic_symbol (info, h);
999       else
1000         return TRUE;
1001     }
1002   else if (!newdyn
1003            && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
1004            && h->def_dynamic)
1005     {
1006       /* If the new symbol with non-default visibility comes from a
1007          relocatable file and the old definition comes from a dynamic
1008          object, we remove the old definition.  */
1009       if ((*sym_hash)->root.type == bfd_link_hash_indirect)
1010         h = *sym_hash;
1011
1012       if ((h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1013           && bfd_is_und_section (sec))
1014         {
1015           /* If the new symbol is undefined and the old symbol was
1016              also undefined before, we need to make sure
1017              _bfd_generic_link_add_one_symbol doesn't mess
1018              up the linker hash table undefs list.  Since the old
1019              definition came from a dynamic object, it is still on the
1020              undefs list.  */
1021           h->root.type = bfd_link_hash_undefined;
1022           h->root.u.undef.abfd = abfd;
1023         }
1024       else
1025         {
1026           h->root.type = bfd_link_hash_new;
1027           h->root.u.undef.abfd = NULL;
1028         }
1029
1030       if (h->def_dynamic)
1031         {
1032           h->def_dynamic = 0;
1033           h->ref_dynamic = 1;
1034           h->dynamic_def = 1;
1035         }
1036       /* FIXME: Should we check type and size for protected symbol?  */
1037       h->size = 0;
1038       h->type = 0;
1039       return TRUE;
1040     }
1041
1042   /* Differentiate strong and weak symbols.  */
1043   newweak = bind == STB_WEAK;
1044   oldweak = (h->root.type == bfd_link_hash_defweak
1045              || h->root.type == bfd_link_hash_undefweak);
1046
1047   /* If a new weak symbol definition comes from a regular file and the
1048      old symbol comes from a dynamic library, we treat the new one as
1049      strong.  Similarly, an old weak symbol definition from a regular
1050      file is treated as strong when the new symbol comes from a dynamic
1051      library.  Further, an old weak symbol from a dynamic library is
1052      treated as strong if the new symbol is from a dynamic library.
1053      This reflects the way glibc's ld.so works.
1054
1055      Do this before setting *type_change_ok or *size_change_ok so that
1056      we warn properly when dynamic library symbols are overridden.  */
1057
1058   if (newdef && !newdyn && olddyn)
1059     newweak = FALSE;
1060   if (olddef && newdyn)
1061     oldweak = FALSE;
1062
1063   /* It's OK to change the type if either the existing symbol or the
1064      new symbol is weak.  A type change is also OK if the old symbol
1065      is undefined and the new symbol is defined.  */
1066
1067   if (oldweak
1068       || newweak
1069       || (newdef
1070           && h->root.type == bfd_link_hash_undefined))
1071     *type_change_ok = TRUE;
1072
1073   /* It's OK to change the size if either the existing symbol or the
1074      new symbol is weak, or if the old symbol is undefined.  */
1075
1076   if (*type_change_ok
1077       || h->root.type == bfd_link_hash_undefined)
1078     *size_change_ok = TRUE;
1079
1080   /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
1081      symbol, respectively, appears to be a common symbol in a dynamic
1082      object.  If a symbol appears in an uninitialized section, and is
1083      not weak, and is not a function, then it may be a common symbol
1084      which was resolved when the dynamic object was created.  We want
1085      to treat such symbols specially, because they raise special
1086      considerations when setting the symbol size: if the symbol
1087      appears as a common symbol in a regular object, and the size in
1088      the regular object is larger, we must make sure that we use the
1089      larger size.  This problematic case can always be avoided in C,
1090      but it must be handled correctly when using Fortran shared
1091      libraries.
1092
1093      Note that if NEWDYNCOMMON is set, NEWDEF will be set, and
1094      likewise for OLDDYNCOMMON and OLDDEF.
1095
1096      Note that this test is just a heuristic, and that it is quite
1097      possible to have an uninitialized symbol in a shared object which
1098      is really a definition, rather than a common symbol.  This could
1099      lead to some minor confusion when the symbol really is a common
1100      symbol in some regular object.  However, I think it will be
1101      harmless.  */
1102
1103   if (newdyn
1104       && newdef
1105       && !newweak
1106       && (sec->flags & SEC_ALLOC) != 0
1107       && (sec->flags & SEC_LOAD) == 0
1108       && sym->st_size > 0
1109       && ELF_ST_TYPE (sym->st_info) != STT_FUNC)
1110     newdyncommon = TRUE;
1111   else
1112     newdyncommon = FALSE;
1113
1114   if (olddyn
1115       && olddef
1116       && h->root.type == bfd_link_hash_defined
1117       && h->def_dynamic
1118       && (h->root.u.def.section->flags & SEC_ALLOC) != 0
1119       && (h->root.u.def.section->flags & SEC_LOAD) == 0
1120       && h->size > 0
1121       && h->type != STT_FUNC)
1122     olddyncommon = TRUE;
1123   else
1124     olddyncommon = FALSE;
1125
1126   /* We now know everything about the old and new symbols.  We ask the
1127      backend to check if we can merge them.  */
1128   bed = get_elf_backend_data (abfd);
1129   if (bed->merge_symbol
1130       && !bed->merge_symbol (info, sym_hash, h, sym, psec, pvalue,
1131                              pold_alignment, skip, override,
1132                              type_change_ok, size_change_ok,
1133                              &newdyn, &newdef, &newdyncommon, &newweak,
1134                              abfd, &sec,
1135                              &olddyn, &olddef, &olddyncommon, &oldweak,
1136                              oldbfd, &oldsec))
1137     return FALSE;
1138
1139   /* If both the old and the new symbols look like common symbols in a
1140      dynamic object, set the size of the symbol to the larger of the
1141      two.  */
1142
1143   if (olddyncommon
1144       && newdyncommon
1145       && sym->st_size != h->size)
1146     {
1147       /* Since we think we have two common symbols, issue a multiple
1148          common warning if desired.  Note that we only warn if the
1149          size is different.  If the size is the same, we simply let
1150          the old symbol override the new one as normally happens with
1151          symbols defined in dynamic objects.  */
1152
1153       if (! ((*info->callbacks->multiple_common)
1154              (info, h->root.root.string, oldbfd, bfd_link_hash_common,
1155               h->size, abfd, bfd_link_hash_common, sym->st_size)))
1156         return FALSE;
1157
1158       if (sym->st_size > h->size)
1159         h->size = sym->st_size;
1160
1161       *size_change_ok = TRUE;
1162     }
1163
1164   /* If we are looking at a dynamic object, and we have found a
1165      definition, we need to see if the symbol was already defined by
1166      some other object.  If so, we want to use the existing
1167      definition, and we do not want to report a multiple symbol
1168      definition error; we do this by clobbering *PSEC to be
1169      bfd_und_section_ptr.
1170
1171      We treat a common symbol as a definition if the symbol in the
1172      shared library is a function, since common symbols always
1173      represent variables; this can cause confusion in principle, but
1174      any such confusion would seem to indicate an erroneous program or
1175      shared library.  We also permit a common symbol in a regular
1176      object to override a weak symbol in a shared object.  */
1177
1178   if (newdyn
1179       && newdef
1180       && (olddef
1181           || (h->root.type == bfd_link_hash_common
1182               && (newweak
1183                   || ELF_ST_TYPE (sym->st_info) == STT_FUNC))))
1184     {
1185       *override = TRUE;
1186       newdef = FALSE;
1187       newdyncommon = FALSE;
1188
1189       *psec = sec = bfd_und_section_ptr;
1190       *size_change_ok = TRUE;
1191
1192       /* If we get here when the old symbol is a common symbol, then
1193          we are explicitly letting it override a weak symbol or
1194          function in a dynamic object, and we don't want to warn about
1195          a type change.  If the old symbol is a defined symbol, a type
1196          change warning may still be appropriate.  */
1197
1198       if (h->root.type == bfd_link_hash_common)
1199         *type_change_ok = TRUE;
1200     }
1201
1202   /* Handle the special case of an old common symbol merging with a
1203      new symbol which looks like a common symbol in a shared object.
1204      We change *PSEC and *PVALUE to make the new symbol look like a
1205      common symbol, and let _bfd_generic_link_add_one_symbol do the
1206      right thing.  */
1207
1208   if (newdyncommon
1209       && h->root.type == bfd_link_hash_common)
1210     {
1211       *override = TRUE;
1212       newdef = FALSE;
1213       newdyncommon = FALSE;
1214       *pvalue = sym->st_size;
1215       *psec = sec = bed->common_section (oldsec);
1216       *size_change_ok = TRUE;
1217     }
1218
1219   /* Skip weak definitions of symbols that are already defined.  */
1220   if (newdef && olddef && newweak)
1221     *skip = TRUE;
1222
1223   /* If the old symbol is from a dynamic object, and the new symbol is
1224      a definition which is not from a dynamic object, then the new
1225      symbol overrides the old symbol.  Symbols from regular files
1226      always take precedence over symbols from dynamic objects, even if
1227      they are defined after the dynamic object in the link.
1228
1229      As above, we again permit a common symbol in a regular object to
1230      override a definition in a shared object if the shared object
1231      symbol is a function or is weak.  */
1232
1233   flip = NULL;
1234   if (!newdyn
1235       && (newdef
1236           || (bfd_is_com_section (sec)
1237               && (oldweak
1238                   || h->type == STT_FUNC)))
1239       && olddyn
1240       && olddef
1241       && h->def_dynamic)
1242     {
1243       /* Change the hash table entry to undefined, and let
1244          _bfd_generic_link_add_one_symbol do the right thing with the
1245          new definition.  */
1246
1247       h->root.type = bfd_link_hash_undefined;
1248       h->root.u.undef.abfd = h->root.u.def.section->owner;
1249       *size_change_ok = TRUE;
1250
1251       olddef = FALSE;
1252       olddyncommon = FALSE;
1253
1254       /* We again permit a type change when a common symbol may be
1255          overriding a function.  */
1256
1257       if (bfd_is_com_section (sec))
1258         *type_change_ok = TRUE;
1259
1260       if ((*sym_hash)->root.type == bfd_link_hash_indirect)
1261         flip = *sym_hash;
1262       else
1263         /* This union may have been set to be non-NULL when this symbol
1264            was seen in a dynamic object.  We must force the union to be
1265            NULL, so that it is correct for a regular symbol.  */
1266         h->verinfo.vertree = NULL;
1267     }
1268
1269   /* Handle the special case of a new common symbol merging with an
1270      old symbol that looks like it might be a common symbol defined in
1271      a shared object.  Note that we have already handled the case in
1272      which a new common symbol should simply override the definition
1273      in the shared library.  */
1274
1275   if (! newdyn
1276       && bfd_is_com_section (sec)
1277       && olddyncommon)
1278     {
1279       /* It would be best if we could set the hash table entry to a
1280          common symbol, but we don't know what to use for the section
1281          or the alignment.  */
1282       if (! ((*info->callbacks->multiple_common)
1283              (info, h->root.root.string, oldbfd, bfd_link_hash_common,
1284               h->size, abfd, bfd_link_hash_common, sym->st_size)))
1285         return FALSE;
1286
1287       /* If the presumed common symbol in the dynamic object is
1288          larger, pretend that the new symbol has its size.  */
1289
1290       if (h->size > *pvalue)
1291         *pvalue = h->size;
1292
1293       /* We need to remember the alignment required by the symbol
1294          in the dynamic object.  */
1295       BFD_ASSERT (pold_alignment);
1296       *pold_alignment = h->root.u.def.section->alignment_power;
1297
1298       olddef = FALSE;
1299       olddyncommon = FALSE;
1300
1301       h->root.type = bfd_link_hash_undefined;
1302       h->root.u.undef.abfd = h->root.u.def.section->owner;
1303
1304       *size_change_ok = TRUE;
1305       *type_change_ok = TRUE;
1306
1307       if ((*sym_hash)->root.type == bfd_link_hash_indirect)
1308         flip = *sym_hash;
1309       else
1310         h->verinfo.vertree = NULL;
1311     }
1312
1313   if (flip != NULL)
1314     {
1315       /* Handle the case where we had a versioned symbol in a dynamic
1316          library and now find a definition in a normal object.  In this
1317          case, we make the versioned symbol point to the normal one.  */
1318       const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1319       flip->root.type = h->root.type;
1320       h->root.type = bfd_link_hash_indirect;
1321       h->root.u.i.link = (struct bfd_link_hash_entry *) flip;
1322       (*bed->elf_backend_copy_indirect_symbol) (info, flip, h);
1323       flip->root.u.undef.abfd = h->root.u.undef.abfd;
1324       if (h->def_dynamic)
1325         {
1326           h->def_dynamic = 0;
1327           flip->ref_dynamic = 1;
1328         }
1329     }
1330
1331   return TRUE;
1332 }
1333
1334 /* This function is called to create an indirect symbol from the
1335    default for the symbol with the default version if needed. The
1336    symbol is described by H, NAME, SYM, PSEC, VALUE, and OVERRIDE.  We
1337    set DYNSYM if the new indirect symbol is dynamic.  */
1338
1339 bfd_boolean
1340 _bfd_elf_add_default_symbol (bfd *abfd,
1341                              struct bfd_link_info *info,
1342                              struct elf_link_hash_entry *h,
1343                              const char *name,
1344                              Elf_Internal_Sym *sym,
1345                              asection **psec,
1346                              bfd_vma *value,
1347                              bfd_boolean *dynsym,
1348                              bfd_boolean override)
1349 {
1350   bfd_boolean type_change_ok;
1351   bfd_boolean size_change_ok;
1352   bfd_boolean skip;
1353   char *shortname;
1354   struct elf_link_hash_entry *hi;
1355   struct bfd_link_hash_entry *bh;
1356   const struct elf_backend_data *bed;
1357   bfd_boolean collect;
1358   bfd_boolean dynamic;
1359   char *p;
1360   size_t len, shortlen;
1361   asection *sec;
1362
1363   /* If this symbol has a version, and it is the default version, we
1364      create an indirect symbol from the default name to the fully
1365      decorated name.  This will cause external references which do not
1366      specify a version to be bound to this version of the symbol.  */
1367   p = strchr (name, ELF_VER_CHR);
1368   if (p == NULL || p[1] != ELF_VER_CHR)
1369     return TRUE;
1370
1371   if (override)
1372     {
1373       /* We are overridden by an old definition. We need to check if we
1374          need to create the indirect symbol from the default name.  */
1375       hi = elf_link_hash_lookup (elf_hash_table (info), name, TRUE,
1376                                  FALSE, FALSE);
1377       BFD_ASSERT (hi != NULL);
1378       if (hi == h)
1379         return TRUE;
1380       while (hi->root.type == bfd_link_hash_indirect
1381              || hi->root.type == bfd_link_hash_warning)
1382         {
1383           hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1384           if (hi == h)
1385             return TRUE;
1386         }
1387     }
1388
1389   bed = get_elf_backend_data (abfd);
1390   collect = bed->collect;
1391   dynamic = (abfd->flags & DYNAMIC) != 0;
1392
1393   shortlen = p - name;
1394   shortname = bfd_hash_allocate (&info->hash->table, shortlen + 1);
1395   if (shortname == NULL)
1396     return FALSE;
1397   memcpy (shortname, name, shortlen);
1398   shortname[shortlen] = '\0';
1399
1400   /* We are going to create a new symbol.  Merge it with any existing
1401      symbol with this name.  For the purposes of the merge, act as
1402      though we were defining the symbol we just defined, although we
1403      actually going to define an indirect symbol.  */
1404   type_change_ok = FALSE;
1405   size_change_ok = FALSE;
1406   sec = *psec;
1407   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value,
1408                               NULL, &hi, &skip, &override,
1409                               &type_change_ok, &size_change_ok))
1410     return FALSE;
1411
1412   if (skip)
1413     goto nondefault;
1414
1415   if (! override)
1416     {
1417       bh = &hi->root;
1418       if (! (_bfd_generic_link_add_one_symbol
1419              (info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr,
1420               0, name, FALSE, collect, &bh)))
1421         return FALSE;
1422       hi = (struct elf_link_hash_entry *) bh;
1423     }
1424   else
1425     {
1426       /* In this case the symbol named SHORTNAME is overriding the
1427          indirect symbol we want to add.  We were planning on making
1428          SHORTNAME an indirect symbol referring to NAME.  SHORTNAME
1429          is the name without a version.  NAME is the fully versioned
1430          name, and it is the default version.
1431
1432          Overriding means that we already saw a definition for the
1433          symbol SHORTNAME in a regular object, and it is overriding
1434          the symbol defined in the dynamic object.
1435
1436          When this happens, we actually want to change NAME, the
1437          symbol we just added, to refer to SHORTNAME.  This will cause
1438          references to NAME in the shared object to become references
1439          to SHORTNAME in the regular object.  This is what we expect
1440          when we override a function in a shared object: that the
1441          references in the shared object will be mapped to the
1442          definition in the regular object.  */
1443
1444       while (hi->root.type == bfd_link_hash_indirect
1445              || hi->root.type == bfd_link_hash_warning)
1446         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1447
1448       h->root.type = bfd_link_hash_indirect;
1449       h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1450       if (h->def_dynamic)
1451         {
1452           h->def_dynamic = 0;
1453           hi->ref_dynamic = 1;
1454           if (hi->ref_regular
1455               || hi->def_regular)
1456             {
1457               if (! bfd_elf_link_record_dynamic_symbol (info, hi))
1458                 return FALSE;
1459             }
1460         }
1461
1462       /* Now set HI to H, so that the following code will set the
1463          other fields correctly.  */
1464       hi = h;
1465     }
1466
1467   /* If there is a duplicate definition somewhere, then HI may not
1468      point to an indirect symbol.  We will have reported an error to
1469      the user in that case.  */
1470
1471   if (hi->root.type == bfd_link_hash_indirect)
1472     {
1473       struct elf_link_hash_entry *ht;
1474
1475       ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
1476       (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi);
1477
1478       /* See if the new flags lead us to realize that the symbol must
1479          be dynamic.  */
1480       if (! *dynsym)
1481         {
1482           if (! dynamic)
1483             {
1484               if (info->shared
1485                   || hi->ref_dynamic)
1486                 *dynsym = TRUE;
1487             }
1488           else
1489             {
1490               if (hi->ref_regular)
1491                 *dynsym = TRUE;
1492             }
1493         }
1494     }
1495
1496   /* We also need to define an indirection from the nondefault version
1497      of the symbol.  */
1498
1499 nondefault:
1500   len = strlen (name);
1501   shortname = bfd_hash_allocate (&info->hash->table, len);
1502   if (shortname == NULL)
1503     return FALSE;
1504   memcpy (shortname, name, shortlen);
1505   memcpy (shortname + shortlen, p + 1, len - shortlen);
1506
1507   /* Once again, merge with any existing symbol.  */
1508   type_change_ok = FALSE;
1509   size_change_ok = FALSE;
1510   sec = *psec;
1511   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value,
1512                               NULL, &hi, &skip, &override,
1513                               &type_change_ok, &size_change_ok))
1514     return FALSE;
1515
1516   if (skip)
1517     return TRUE;
1518
1519   if (override)
1520     {
1521       /* Here SHORTNAME is a versioned name, so we don't expect to see
1522          the type of override we do in the case above unless it is
1523          overridden by a versioned definition.  */
1524       if (hi->root.type != bfd_link_hash_defined
1525           && hi->root.type != bfd_link_hash_defweak)
1526         (*_bfd_error_handler)
1527           (_("%B: unexpected redefinition of indirect versioned symbol `%s'"),
1528            abfd, shortname);
1529     }
1530   else
1531     {
1532       bh = &hi->root;
1533       if (! (_bfd_generic_link_add_one_symbol
1534              (info, abfd, shortname, BSF_INDIRECT,
1535               bfd_ind_section_ptr, 0, name, FALSE, collect, &bh)))
1536         return FALSE;
1537       hi = (struct elf_link_hash_entry *) bh;
1538
1539       /* If there is a duplicate definition somewhere, then HI may not
1540          point to an indirect symbol.  We will have reported an error
1541          to the user in that case.  */
1542
1543       if (hi->root.type == bfd_link_hash_indirect)
1544         {
1545           (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
1546
1547           /* See if the new flags lead us to realize that the symbol
1548              must be dynamic.  */
1549           if (! *dynsym)
1550             {
1551               if (! dynamic)
1552                 {
1553                   if (info->shared
1554                       || hi->ref_dynamic)
1555                     *dynsym = TRUE;
1556                 }
1557               else
1558                 {
1559                   if (hi->ref_regular)
1560                     *dynsym = TRUE;
1561                 }
1562             }
1563         }
1564     }
1565
1566   return TRUE;
1567 }
1568 \f
1569 /* This routine is used to export all defined symbols into the dynamic
1570    symbol table.  It is called via elf_link_hash_traverse.  */
1571
1572 bfd_boolean
1573 _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
1574 {
1575   struct elf_info_failed *eif = data;
1576
1577   /* Ignore indirect symbols.  These are added by the versioning code.  */
1578   if (h->root.type == bfd_link_hash_indirect)
1579     return TRUE;
1580
1581   if (h->root.type == bfd_link_hash_warning)
1582     h = (struct elf_link_hash_entry *) h->root.u.i.link;
1583
1584   if (h->dynindx == -1
1585       && (h->def_regular
1586           || h->ref_regular))
1587     {
1588       struct bfd_elf_version_tree *t;
1589       struct bfd_elf_version_expr *d;
1590
1591       for (t = eif->verdefs; t != NULL; t = t->next)
1592         {
1593           if (t->globals.list != NULL)
1594             {
1595               d = (*t->match) (&t->globals, NULL, h->root.root.string);
1596               if (d != NULL)
1597                 goto doit;
1598             }
1599
1600           if (t->locals.list != NULL)
1601             {
1602               d = (*t->match) (&t->locals, NULL, h->root.root.string);
1603               if (d != NULL)
1604                 return TRUE;
1605             }
1606         }
1607
1608       if (!eif->verdefs)
1609         {
1610         doit:
1611           if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
1612             {
1613               eif->failed = TRUE;
1614               return FALSE;
1615             }
1616         }
1617     }
1618
1619   return TRUE;
1620 }
1621 \f
1622 /* Look through the symbols which are defined in other shared
1623    libraries and referenced here.  Update the list of version
1624    dependencies.  This will be put into the .gnu.version_r section.
1625    This function is called via elf_link_hash_traverse.  */
1626
1627 bfd_boolean
1628 _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h,
1629                                          void *data)
1630 {
1631   struct elf_find_verdep_info *rinfo = data;
1632   Elf_Internal_Verneed *t;
1633   Elf_Internal_Vernaux *a;
1634   bfd_size_type amt;
1635
1636   if (h->root.type == bfd_link_hash_warning)
1637     h = (struct elf_link_hash_entry *) h->root.u.i.link;
1638
1639   /* We only care about symbols defined in shared objects with version
1640      information.  */
1641   if (!h->def_dynamic
1642       || h->def_regular
1643       || h->dynindx == -1
1644       || h->verinfo.verdef == NULL)
1645     return TRUE;
1646
1647   /* See if we already know about this version.  */
1648   for (t = elf_tdata (rinfo->output_bfd)->verref; t != NULL; t = t->vn_nextref)
1649     {
1650       if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
1651         continue;
1652
1653       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1654         if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
1655           return TRUE;
1656
1657       break;
1658     }
1659
1660   /* This is a new version.  Add it to tree we are building.  */
1661
1662   if (t == NULL)
1663     {
1664       amt = sizeof *t;
1665       t = bfd_zalloc (rinfo->output_bfd, amt);
1666       if (t == NULL)
1667         {
1668           rinfo->failed = TRUE;
1669           return FALSE;
1670         }
1671
1672       t->vn_bfd = h->verinfo.verdef->vd_bfd;
1673       t->vn_nextref = elf_tdata (rinfo->output_bfd)->verref;
1674       elf_tdata (rinfo->output_bfd)->verref = t;
1675     }
1676
1677   amt = sizeof *a;
1678   a = bfd_zalloc (rinfo->output_bfd, amt);
1679
1680   /* Note that we are copying a string pointer here, and testing it
1681      above.  If bfd_elf_string_from_elf_section is ever changed to
1682      discard the string data when low in memory, this will have to be
1683      fixed.  */
1684   a->vna_nodename = h->verinfo.verdef->vd_nodename;
1685
1686   a->vna_flags = h->verinfo.verdef->vd_flags;
1687   a->vna_nextptr = t->vn_auxptr;
1688
1689   h->verinfo.verdef->vd_exp_refno = rinfo->vers;
1690   ++rinfo->vers;
1691
1692   a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
1693
1694   t->vn_auxptr = a;
1695
1696   return TRUE;
1697 }
1698
1699 /* Figure out appropriate versions for all the symbols.  We may not
1700    have the version number script until we have read all of the input
1701    files, so until that point we don't know which symbols should be
1702    local.  This function is called via elf_link_hash_traverse.  */
1703
1704 bfd_boolean
1705 _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
1706 {
1707   struct elf_assign_sym_version_info *sinfo;
1708   struct bfd_link_info *info;
1709   const struct elf_backend_data *bed;
1710   struct elf_info_failed eif;
1711   char *p;
1712   bfd_size_type amt;
1713
1714   sinfo = data;
1715   info = sinfo->info;
1716
1717   if (h->root.type == bfd_link_hash_warning)
1718     h = (struct elf_link_hash_entry *) h->root.u.i.link;
1719
1720   /* Fix the symbol flags.  */
1721   eif.failed = FALSE;
1722   eif.info = info;
1723   if (! _bfd_elf_fix_symbol_flags (h, &eif))
1724     {
1725       if (eif.failed)
1726         sinfo->failed = TRUE;
1727       return FALSE;
1728     }
1729
1730   /* We only need version numbers for symbols defined in regular
1731      objects.  */
1732   if (!h->def_regular)
1733     return TRUE;
1734
1735   bed = get_elf_backend_data (sinfo->output_bfd);
1736   p = strchr (h->root.root.string, ELF_VER_CHR);
1737   if (p != NULL && h->verinfo.vertree == NULL)
1738     {
1739       struct bfd_elf_version_tree *t;
1740       bfd_boolean hidden;
1741
1742       hidden = TRUE;
1743
1744       /* There are two consecutive ELF_VER_CHR characters if this is
1745          not a hidden symbol.  */
1746       ++p;
1747       if (*p == ELF_VER_CHR)
1748         {
1749           hidden = FALSE;
1750           ++p;
1751         }
1752
1753       /* If there is no version string, we can just return out.  */
1754       if (*p == '\0')
1755         {
1756           if (hidden)
1757             h->hidden = 1;
1758           return TRUE;
1759         }
1760
1761       /* Look for the version.  If we find it, it is no longer weak.  */
1762       for (t = sinfo->verdefs; t != NULL; t = t->next)
1763         {
1764           if (strcmp (t->name, p) == 0)
1765             {
1766               size_t len;
1767               char *alc;
1768               struct bfd_elf_version_expr *d;
1769
1770               len = p - h->root.root.string;
1771               alc = bfd_malloc (len);
1772               if (alc == NULL)
1773                 return FALSE;
1774               memcpy (alc, h->root.root.string, len - 1);
1775               alc[len - 1] = '\0';
1776               if (alc[len - 2] == ELF_VER_CHR)
1777                 alc[len - 2] = '\0';
1778
1779               h->verinfo.vertree = t;
1780               t->used = TRUE;
1781               d = NULL;
1782
1783               if (t->globals.list != NULL)
1784                 d = (*t->match) (&t->globals, NULL, alc);
1785
1786               /* See if there is anything to force this symbol to
1787                  local scope.  */
1788               if (d == NULL && t->locals.list != NULL)
1789                 {
1790                   d = (*t->match) (&t->locals, NULL, alc);
1791                   if (d != NULL
1792                       && h->dynindx != -1
1793                       && ! info->export_dynamic)
1794                     (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1795                 }
1796
1797               free (alc);
1798               break;
1799             }
1800         }
1801
1802       /* If we are building an application, we need to create a
1803          version node for this version.  */
1804       if (t == NULL && info->executable)
1805         {
1806           struct bfd_elf_version_tree **pp;
1807           int version_index;
1808
1809           /* If we aren't going to export this symbol, we don't need
1810              to worry about it.  */
1811           if (h->dynindx == -1)
1812             return TRUE;
1813
1814           amt = sizeof *t;
1815           t = bfd_zalloc (sinfo->output_bfd, amt);
1816           if (t == NULL)
1817             {
1818               sinfo->failed = TRUE;
1819               return FALSE;
1820             }
1821
1822           t->name = p;
1823           t->name_indx = (unsigned int) -1;
1824           t->used = TRUE;
1825
1826           version_index = 1;
1827           /* Don't count anonymous version tag.  */
1828           if (sinfo->verdefs != NULL && sinfo->verdefs->vernum == 0)
1829             version_index = 0;
1830           for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next)
1831             ++version_index;
1832           t->vernum = version_index;
1833
1834           *pp = t;
1835
1836           h->verinfo.vertree = t;
1837         }
1838       else if (t == NULL)
1839         {
1840           /* We could not find the version for a symbol when
1841              generating a shared archive.  Return an error.  */
1842           (*_bfd_error_handler)
1843             (_("%B: undefined versioned symbol name %s"),
1844              sinfo->output_bfd, h->root.root.string);
1845           bfd_set_error (bfd_error_bad_value);
1846           sinfo->failed = TRUE;
1847           return FALSE;
1848         }
1849
1850       if (hidden)
1851         h->hidden = 1;
1852     }
1853
1854   /* If we don't have a version for this symbol, see if we can find
1855      something.  */
1856   if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL)
1857     {
1858       struct bfd_elf_version_tree *t;
1859       struct bfd_elf_version_tree *local_ver;
1860       struct bfd_elf_version_expr *d;
1861
1862       /* See if can find what version this symbol is in.  If the
1863          symbol is supposed to be local, then don't actually register
1864          it.  */
1865       local_ver = NULL;
1866       for (t = sinfo->verdefs; t != NULL; t = t->next)
1867         {
1868           if (t->globals.list != NULL)
1869             {
1870               bfd_boolean matched;
1871
1872               matched = FALSE;
1873               d = NULL;
1874               while ((d = (*t->match) (&t->globals, d,
1875                                        h->root.root.string)) != NULL)
1876                 if (d->symver)
1877                   matched = TRUE;
1878                 else
1879                   {
1880                     /* There is a version without definition.  Make
1881                        the symbol the default definition for this
1882                        version.  */
1883                     h->verinfo.vertree = t;
1884                     local_ver = NULL;
1885                     d->script = 1;
1886                     break;
1887                   }
1888               if (d != NULL)
1889                 break;
1890               else if (matched)
1891                 /* There is no undefined version for this symbol. Hide the
1892                    default one.  */
1893                 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1894             }
1895
1896           if (t->locals.list != NULL)
1897             {
1898               d = NULL;
1899               while ((d = (*t->match) (&t->locals, d,
1900                                        h->root.root.string)) != NULL)
1901                 {
1902                   local_ver = t;
1903                   /* If the match is "*", keep looking for a more
1904                      explicit, perhaps even global, match.
1905                      XXX: Shouldn't this be !d->wildcard instead?  */
1906                   if (d->pattern[0] != '*' || d->pattern[1] != '\0')
1907                     break;
1908                 }
1909
1910               if (d != NULL)
1911                 break;
1912             }
1913         }
1914
1915       if (local_ver != NULL)
1916         {
1917           h->verinfo.vertree = local_ver;
1918           if (h->dynindx != -1
1919               && ! info->export_dynamic)
1920             {
1921               (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1922             }
1923         }
1924     }
1925
1926   return TRUE;
1927 }
1928 \f
1929 /* Read and swap the relocs from the section indicated by SHDR.  This
1930    may be either a REL or a RELA section.  The relocations are
1931    translated into RELA relocations and stored in INTERNAL_RELOCS,
1932    which should have already been allocated to contain enough space.
1933    The EXTERNAL_RELOCS are a buffer where the external form of the
1934    relocations should be stored.
1935
1936    Returns FALSE if something goes wrong.  */
1937
1938 static bfd_boolean
1939 elf_link_read_relocs_from_section (bfd *abfd,
1940                                    asection *sec,
1941                                    Elf_Internal_Shdr *shdr,
1942                                    void *external_relocs,
1943                                    Elf_Internal_Rela *internal_relocs)
1944 {
1945   const struct elf_backend_data *bed;
1946   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
1947   const bfd_byte *erela;
1948   const bfd_byte *erelaend;
1949   Elf_Internal_Rela *irela;
1950   Elf_Internal_Shdr *symtab_hdr;
1951   size_t nsyms;
1952
1953   /* Position ourselves at the start of the section.  */
1954   if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
1955     return FALSE;
1956
1957   /* Read the relocations.  */
1958   if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
1959     return FALSE;
1960
1961   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1962   nsyms = symtab_hdr->sh_size / symtab_hdr->sh_entsize;
1963
1964   bed = get_elf_backend_data (abfd);
1965
1966   /* Convert the external relocations to the internal format.  */
1967   if (shdr->sh_entsize == bed->s->sizeof_rel)
1968     swap_in = bed->s->swap_reloc_in;
1969   else if (shdr->sh_entsize == bed->s->sizeof_rela)
1970     swap_in = bed->s->swap_reloca_in;
1971   else
1972     {
1973       bfd_set_error (bfd_error_wrong_format);
1974       return FALSE;
1975     }
1976
1977   erela = external_relocs;
1978   erelaend = erela + shdr->sh_size;
1979   irela = internal_relocs;
1980   while (erela < erelaend)
1981     {
1982       bfd_vma r_symndx;
1983
1984       (*swap_in) (abfd, erela, irela);
1985       r_symndx = ELF32_R_SYM (irela->r_info);
1986       if (bed->s->arch_size == 64)
1987         r_symndx >>= 24;
1988       if ((size_t) r_symndx >= nsyms)
1989         {
1990           (*_bfd_error_handler)
1991             (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)"
1992                " for offset 0x%lx in section `%A'"),
1993              abfd, sec,
1994              (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset);
1995           bfd_set_error (bfd_error_bad_value);
1996           return FALSE;
1997         }
1998       irela += bed->s->int_rels_per_ext_rel;
1999       erela += shdr->sh_entsize;
2000     }
2001
2002   return TRUE;
2003 }
2004
2005 /* Read and swap the relocs for a section O.  They may have been
2006    cached.  If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are
2007    not NULL, they are used as buffers to read into.  They are known to
2008    be large enough.  If the INTERNAL_RELOCS relocs argument is NULL,
2009    the return value is allocated using either malloc or bfd_alloc,
2010    according to the KEEP_MEMORY argument.  If O has two relocation
2011    sections (both REL and RELA relocations), then the REL_HDR
2012    relocations will appear first in INTERNAL_RELOCS, followed by the
2013    REL_HDR2 relocations.  */
2014
2015 Elf_Internal_Rela *
2016 _bfd_elf_link_read_relocs (bfd *abfd,
2017                            asection *o,
2018                            void *external_relocs,
2019                            Elf_Internal_Rela *internal_relocs,
2020                            bfd_boolean keep_memory)
2021 {
2022   Elf_Internal_Shdr *rel_hdr;
2023   void *alloc1 = NULL;
2024   Elf_Internal_Rela *alloc2 = NULL;
2025   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2026
2027   if (elf_section_data (o)->relocs != NULL)
2028     return elf_section_data (o)->relocs;
2029
2030   if (o->reloc_count == 0)
2031     return NULL;
2032
2033   rel_hdr = &elf_section_data (o)->rel_hdr;
2034
2035   if (internal_relocs == NULL)
2036     {
2037       bfd_size_type size;
2038
2039       size = o->reloc_count;
2040       size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela);
2041       if (keep_memory)
2042         internal_relocs = bfd_alloc (abfd, size);
2043       else
2044         internal_relocs = alloc2 = bfd_malloc (size);
2045       if (internal_relocs == NULL)
2046         goto error_return;
2047     }
2048
2049   if (external_relocs == NULL)
2050     {
2051       bfd_size_type size = rel_hdr->sh_size;
2052
2053       if (elf_section_data (o)->rel_hdr2)
2054         size += elf_section_data (o)->rel_hdr2->sh_size;
2055       alloc1 = bfd_malloc (size);
2056       if (alloc1 == NULL)
2057         goto error_return;
2058       external_relocs = alloc1;
2059     }
2060
2061   if (!elf_link_read_relocs_from_section (abfd, o, rel_hdr,
2062                                           external_relocs,
2063                                           internal_relocs))
2064     goto error_return;
2065   if (elf_section_data (o)->rel_hdr2
2066       && (!elf_link_read_relocs_from_section
2067           (abfd, o,
2068            elf_section_data (o)->rel_hdr2,
2069            ((bfd_byte *) external_relocs) + rel_hdr->sh_size,
2070            internal_relocs + (NUM_SHDR_ENTRIES (rel_hdr)
2071                               * bed->s->int_rels_per_ext_rel))))
2072     goto error_return;
2073
2074   /* Cache the results for next time, if we can.  */
2075   if (keep_memory)
2076     elf_section_data (o)->relocs = internal_relocs;
2077
2078   if (alloc1 != NULL)
2079     free (alloc1);
2080
2081   /* Don't free alloc2, since if it was allocated we are passing it
2082      back (under the name of internal_relocs).  */
2083
2084   return internal_relocs;
2085
2086  error_return:
2087   if (alloc1 != NULL)
2088     free (alloc1);
2089   if (alloc2 != NULL)
2090     free (alloc2);
2091   return NULL;
2092 }
2093
2094 /* Compute the size of, and allocate space for, REL_HDR which is the
2095    section header for a section containing relocations for O.  */
2096
2097 bfd_boolean
2098 _bfd_elf_link_size_reloc_section (bfd *abfd,
2099                                   Elf_Internal_Shdr *rel_hdr,
2100                                   asection *o)
2101 {
2102   bfd_size_type reloc_count;
2103   bfd_size_type num_rel_hashes;
2104
2105   /* Figure out how many relocations there will be.  */
2106   if (rel_hdr == &elf_section_data (o)->rel_hdr)
2107     reloc_count = elf_section_data (o)->rel_count;
2108   else
2109     reloc_count = elf_section_data (o)->rel_count2;
2110
2111   num_rel_hashes = o->reloc_count;
2112   if (num_rel_hashes < reloc_count)
2113     num_rel_hashes = reloc_count;
2114
2115   /* That allows us to calculate the size of the section.  */
2116   rel_hdr->sh_size = rel_hdr->sh_entsize * reloc_count;
2117
2118   /* The contents field must last into write_object_contents, so we
2119      allocate it with bfd_alloc rather than malloc.  Also since we
2120      cannot be sure that the contents will actually be filled in,
2121      we zero the allocated space.  */
2122   rel_hdr->contents = bfd_zalloc (abfd, rel_hdr->sh_size);
2123   if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
2124     return FALSE;
2125
2126   /* We only allocate one set of hash entries, so we only do it the
2127      first time we are called.  */
2128   if (elf_section_data (o)->rel_hashes == NULL
2129       && num_rel_hashes)
2130     {
2131       struct elf_link_hash_entry **p;
2132
2133       p = bfd_zmalloc (num_rel_hashes * sizeof (struct elf_link_hash_entry *));
2134       if (p == NULL)
2135         return FALSE;
2136
2137       elf_section_data (o)->rel_hashes = p;
2138     }
2139
2140   return TRUE;
2141 }
2142
2143 /* Copy the relocations indicated by the INTERNAL_RELOCS (which
2144    originated from the section given by INPUT_REL_HDR) to the
2145    OUTPUT_BFD.  */
2146
2147 bfd_boolean
2148 _bfd_elf_link_output_relocs (bfd *output_bfd,
2149                              asection *input_section,
2150                              Elf_Internal_Shdr *input_rel_hdr,
2151                              Elf_Internal_Rela *internal_relocs,
2152                              struct elf_link_hash_entry **rel_hash
2153                                ATTRIBUTE_UNUSED)
2154 {
2155   Elf_Internal_Rela *irela;
2156   Elf_Internal_Rela *irelaend;
2157   bfd_byte *erel;
2158   Elf_Internal_Shdr *output_rel_hdr;
2159   asection *output_section;
2160   unsigned int *rel_countp = NULL;
2161   const struct elf_backend_data *bed;
2162   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
2163
2164   output_section = input_section->output_section;
2165   output_rel_hdr = NULL;
2166
2167   if (elf_section_data (output_section)->rel_hdr.sh_entsize
2168       == input_rel_hdr->sh_entsize)
2169     {
2170       output_rel_hdr = &elf_section_data (output_section)->rel_hdr;
2171       rel_countp = &elf_section_data (output_section)->rel_count;
2172     }
2173   else if (elf_section_data (output_section)->rel_hdr2
2174            && (elf_section_data (output_section)->rel_hdr2->sh_entsize
2175                == input_rel_hdr->sh_entsize))
2176     {
2177       output_rel_hdr = elf_section_data (output_section)->rel_hdr2;
2178       rel_countp = &elf_section_data (output_section)->rel_count2;
2179     }
2180   else
2181     {
2182       (*_bfd_error_handler)
2183         (_("%B: relocation size mismatch in %B section %A"),
2184          output_bfd, input_section->owner, input_section);
2185       bfd_set_error (bfd_error_wrong_object_format);
2186       return FALSE;
2187     }
2188
2189   bed = get_elf_backend_data (output_bfd);
2190   if (input_rel_hdr->sh_entsize == bed->s->sizeof_rel)
2191     swap_out = bed->s->swap_reloc_out;
2192   else if (input_rel_hdr->sh_entsize == bed->s->sizeof_rela)
2193     swap_out = bed->s->swap_reloca_out;
2194   else
2195     abort ();
2196
2197   erel = output_rel_hdr->contents;
2198   erel += *rel_countp * input_rel_hdr->sh_entsize;
2199   irela = internal_relocs;
2200   irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr)
2201                       * bed->s->int_rels_per_ext_rel);
2202   while (irela < irelaend)
2203     {
2204       (*swap_out) (output_bfd, irela, erel);
2205       irela += bed->s->int_rels_per_ext_rel;
2206       erel += input_rel_hdr->sh_entsize;
2207     }
2208
2209   /* Bump the counter, so that we know where to add the next set of
2210      relocations.  */
2211   *rel_countp += NUM_SHDR_ENTRIES (input_rel_hdr);
2212
2213   return TRUE;
2214 }
2215 \f
2216 /* Make weak undefined symbols in PIE dynamic.  */
2217
2218 bfd_boolean
2219 _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info,
2220                                  struct elf_link_hash_entry *h)
2221 {
2222   if (info->pie
2223       && h->dynindx == -1
2224       && h->root.type == bfd_link_hash_undefweak)
2225     return bfd_elf_link_record_dynamic_symbol (info, h);
2226
2227   return TRUE;
2228 }
2229
2230 /* Fix up the flags for a symbol.  This handles various cases which
2231    can only be fixed after all the input files are seen.  This is
2232    currently called by both adjust_dynamic_symbol and
2233    assign_sym_version, which is unnecessary but perhaps more robust in
2234    the face of future changes.  */
2235
2236 bfd_boolean
2237 _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
2238                            struct elf_info_failed *eif)
2239 {
2240   const struct elf_backend_data *bed = NULL;
2241
2242   /* If this symbol was mentioned in a non-ELF file, try to set
2243      DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
2244      permit a non-ELF file to correctly refer to a symbol defined in
2245      an ELF dynamic object.  */
2246   if (h->non_elf)
2247     {
2248       while (h->root.type == bfd_link_hash_indirect)
2249         h = (struct elf_link_hash_entry *) h->root.u.i.link;
2250
2251       if (h->root.type != bfd_link_hash_defined
2252           && h->root.type != bfd_link_hash_defweak)
2253         {
2254           h->ref_regular = 1;
2255           h->ref_regular_nonweak = 1;
2256         }
2257       else
2258         {
2259           if (h->root.u.def.section->owner != NULL
2260               && (bfd_get_flavour (h->root.u.def.section->owner)
2261                   == bfd_target_elf_flavour))
2262             {
2263               h->ref_regular = 1;
2264               h->ref_regular_nonweak = 1;
2265             }
2266           else
2267             h->def_regular = 1;
2268         }
2269
2270       if (h->dynindx == -1
2271           && (h->def_dynamic
2272               || h->ref_dynamic))
2273         {
2274           if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2275             {
2276               eif->failed = TRUE;
2277               return FALSE;
2278             }
2279         }
2280     }
2281   else
2282     {
2283       /* Unfortunately, NON_ELF is only correct if the symbol
2284          was first seen in a non-ELF file.  Fortunately, if the symbol
2285          was first seen in an ELF file, we're probably OK unless the
2286          symbol was defined in a non-ELF file.  Catch that case here.
2287          FIXME: We're still in trouble if the symbol was first seen in
2288          a dynamic object, and then later in a non-ELF regular object.  */
2289       if ((h->root.type == bfd_link_hash_defined
2290            || h->root.type == bfd_link_hash_defweak)
2291           && !h->def_regular
2292           && (h->root.u.def.section->owner != NULL
2293               ? (bfd_get_flavour (h->root.u.def.section->owner)
2294                  != bfd_target_elf_flavour)
2295               : (bfd_is_abs_section (h->root.u.def.section)
2296                  && !h->def_dynamic)))
2297         h->def_regular = 1;
2298     }
2299
2300   /* Backend specific symbol fixup.  */
2301   if (elf_hash_table (eif->info)->dynobj)
2302     {
2303       bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
2304       if (bed->elf_backend_fixup_symbol
2305           && !(*bed->elf_backend_fixup_symbol) (eif->info, h))
2306         return FALSE;
2307     }
2308
2309   /* If this is a final link, and the symbol was defined as a common
2310      symbol in a regular object file, and there was no definition in
2311      any dynamic object, then the linker will have allocated space for
2312      the symbol in a common section but the DEF_REGULAR
2313      flag will not have been set.  */
2314   if (h->root.type == bfd_link_hash_defined
2315       && !h->def_regular
2316       && h->ref_regular
2317       && !h->def_dynamic
2318       && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
2319     h->def_regular = 1;
2320
2321   /* If -Bsymbolic was used (which means to bind references to global
2322      symbols to the definition within the shared object), and this
2323      symbol was defined in a regular object, then it actually doesn't
2324      need a PLT entry.  Likewise, if the symbol has non-default
2325      visibility.  If the symbol has hidden or internal visibility, we
2326      will force it local.  */
2327   if (h->needs_plt
2328       && eif->info->shared
2329       && is_elf_hash_table (eif->info->hash)
2330       && (eif->info->symbolic
2331           || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
2332       && h->def_regular)
2333     {
2334       bfd_boolean force_local;
2335
2336       force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
2337                      || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
2338       (*bed->elf_backend_hide_symbol) (eif->info, h, force_local);
2339     }
2340
2341   /* If a weak undefined symbol has non-default visibility, we also
2342      hide it from the dynamic linker.  */
2343   if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2344       && h->root.type == bfd_link_hash_undefweak)
2345     {
2346       const struct elf_backend_data *bed;
2347       bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
2348       (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2349     }
2350
2351   /* If this is a weak defined symbol in a dynamic object, and we know
2352      the real definition in the dynamic object, copy interesting flags
2353      over to the real definition.  */
2354   if (h->u.weakdef != NULL)
2355     {
2356       struct elf_link_hash_entry *weakdef;
2357
2358       weakdef = h->u.weakdef;
2359       if (h->root.type == bfd_link_hash_indirect)
2360         h = (struct elf_link_hash_entry *) h->root.u.i.link;
2361
2362       BFD_ASSERT (h->root.type == bfd_link_hash_defined
2363                   || h->root.type == bfd_link_hash_defweak);
2364       BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
2365                   || weakdef->root.type == bfd_link_hash_defweak);
2366       BFD_ASSERT (weakdef->def_dynamic);
2367
2368       /* If the real definition is defined by a regular object file,
2369          don't do anything special.  See the longer description in
2370          _bfd_elf_adjust_dynamic_symbol, below.  */
2371       if (weakdef->def_regular)
2372         h->u.weakdef = NULL;
2373       else
2374         (*bed->elf_backend_copy_indirect_symbol) (eif->info, weakdef,
2375                                                   h);
2376     }
2377
2378   return TRUE;
2379 }
2380
2381 /* Make the backend pick a good value for a dynamic symbol.  This is
2382    called via elf_link_hash_traverse, and also calls itself
2383    recursively.  */
2384
2385 bfd_boolean
2386 _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
2387 {
2388   struct elf_info_failed *eif = data;
2389   bfd *dynobj;
2390   const struct elf_backend_data *bed;
2391
2392   if (! is_elf_hash_table (eif->info->hash))
2393     return FALSE;
2394
2395   if (h->root.type == bfd_link_hash_warning)
2396     {
2397       h->got = elf_hash_table (eif->info)->init_got_offset;
2398       h->plt = elf_hash_table (eif->info)->init_plt_offset;
2399
2400       /* When warning symbols are created, they **replace** the "real"
2401          entry in the hash table, thus we never get to see the real
2402          symbol in a hash traversal.  So look at it now.  */
2403       h = (struct elf_link_hash_entry *) h->root.u.i.link;
2404     }
2405
2406   /* Ignore indirect symbols.  These are added by the versioning code.  */
2407   if (h->root.type == bfd_link_hash_indirect)
2408     return TRUE;
2409
2410   /* Fix the symbol flags.  */
2411   if (! _bfd_elf_fix_symbol_flags (h, eif))
2412     return FALSE;
2413
2414   /* If this symbol does not require a PLT entry, and it is not
2415      defined by a dynamic object, or is not referenced by a regular
2416      object, ignore it.  We do have to handle a weak defined symbol,
2417      even if no regular object refers to it, if we decided to add it
2418      to the dynamic symbol table.  FIXME: Do we normally need to worry
2419      about symbols which are defined by one dynamic object and
2420      referenced by another one?  */
2421   if (!h->needs_plt
2422       && (h->def_regular
2423           || !h->def_dynamic
2424           || (!h->ref_regular
2425               && (h->u.weakdef == NULL || h->u.weakdef->dynindx == -1))))
2426     {
2427       h->plt = elf_hash_table (eif->info)->init_plt_offset;
2428       return TRUE;
2429     }
2430
2431   /* If we've already adjusted this symbol, don't do it again.  This
2432      can happen via a recursive call.  */
2433   if (h->dynamic_adjusted)
2434     return TRUE;
2435
2436   /* Don't look at this symbol again.  Note that we must set this
2437      after checking the above conditions, because we may look at a
2438      symbol once, decide not to do anything, and then get called
2439      recursively later after REF_REGULAR is set below.  */
2440   h->dynamic_adjusted = 1;
2441
2442   /* If this is a weak definition, and we know a real definition, and
2443      the real symbol is not itself defined by a regular object file,
2444      then get a good value for the real definition.  We handle the
2445      real symbol first, for the convenience of the backend routine.
2446
2447      Note that there is a confusing case here.  If the real definition
2448      is defined by a regular object file, we don't get the real symbol
2449      from the dynamic object, but we do get the weak symbol.  If the
2450      processor backend uses a COPY reloc, then if some routine in the
2451      dynamic object changes the real symbol, we will not see that
2452      change in the corresponding weak symbol.  This is the way other
2453      ELF linkers work as well, and seems to be a result of the shared
2454      library model.
2455
2456      I will clarify this issue.  Most SVR4 shared libraries define the
2457      variable _timezone and define timezone as a weak synonym.  The
2458      tzset call changes _timezone.  If you write
2459        extern int timezone;
2460        int _timezone = 5;
2461        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
2462      you might expect that, since timezone is a synonym for _timezone,
2463      the same number will print both times.  However, if the processor
2464      backend uses a COPY reloc, then actually timezone will be copied
2465      into your process image, and, since you define _timezone
2466      yourself, _timezone will not.  Thus timezone and _timezone will
2467      wind up at different memory locations.  The tzset call will set
2468      _timezone, leaving timezone unchanged.  */
2469
2470   if (h->u.weakdef != NULL)
2471     {
2472       /* If we get to this point, we know there is an implicit
2473          reference by a regular object file via the weak symbol H.
2474          FIXME: Is this really true?  What if the traversal finds
2475          H->U.WEAKDEF before it finds H?  */
2476       h->u.weakdef->ref_regular = 1;
2477
2478       if (! _bfd_elf_adjust_dynamic_symbol (h->u.weakdef, eif))
2479         return FALSE;
2480     }
2481
2482   /* If a symbol has no type and no size and does not require a PLT
2483      entry, then we are probably about to do the wrong thing here: we
2484      are probably going to create a COPY reloc for an empty object.
2485      This case can arise when a shared object is built with assembly
2486      code, and the assembly code fails to set the symbol type.  */
2487   if (h->size == 0
2488       && h->type == STT_NOTYPE
2489       && !h->needs_plt)
2490     (*_bfd_error_handler)
2491       (_("warning: type and size of dynamic symbol `%s' are not defined"),
2492        h->root.root.string);
2493
2494   dynobj = elf_hash_table (eif->info)->dynobj;
2495   bed = get_elf_backend_data (dynobj);
2496   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
2497     {
2498       eif->failed = TRUE;
2499       return FALSE;
2500     }
2501
2502   return TRUE;
2503 }
2504
2505 /* Adjust all external symbols pointing into SEC_MERGE sections
2506    to reflect the object merging within the sections.  */
2507
2508 bfd_boolean
2509 _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
2510 {
2511   asection *sec;
2512
2513   if (h->root.type == bfd_link_hash_warning)
2514     h = (struct elf_link_hash_entry *) h->root.u.i.link;
2515
2516   if ((h->root.type == bfd_link_hash_defined
2517        || h->root.type == bfd_link_hash_defweak)
2518       && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
2519       && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
2520     {
2521       bfd *output_bfd = data;
2522
2523       h->root.u.def.value =
2524         _bfd_merged_section_offset (output_bfd,
2525                                     &h->root.u.def.section,
2526                                     elf_section_data (sec)->sec_info,
2527                                     h->root.u.def.value);
2528     }
2529
2530   return TRUE;
2531 }
2532
2533 /* Returns false if the symbol referred to by H should be considered
2534    to resolve local to the current module, and true if it should be
2535    considered to bind dynamically.  */
2536
2537 bfd_boolean
2538 _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
2539                            struct bfd_link_info *info,
2540                            bfd_boolean ignore_protected)
2541 {
2542   bfd_boolean binding_stays_local_p;
2543
2544   if (h == NULL)
2545     return FALSE;
2546
2547   while (h->root.type == bfd_link_hash_indirect
2548          || h->root.type == bfd_link_hash_warning)
2549     h = (struct elf_link_hash_entry *) h->root.u.i.link;
2550
2551   /* If it was forced local, then clearly it's not dynamic.  */
2552   if (h->dynindx == -1)
2553     return FALSE;
2554   if (h->forced_local)
2555     return FALSE;
2556
2557   /* Identify the cases where name binding rules say that a
2558      visible symbol resolves locally.  */
2559   binding_stays_local_p = info->executable || info->symbolic;
2560
2561   switch (ELF_ST_VISIBILITY (h->other))
2562     {
2563     case STV_INTERNAL:
2564     case STV_HIDDEN:
2565       return FALSE;
2566
2567     case STV_PROTECTED:
2568       /* Proper resolution for function pointer equality may require
2569          that these symbols perhaps be resolved dynamically, even though
2570          we should be resolving them to the current module.  */
2571       if (!ignore_protected || h->type != STT_FUNC)
2572         binding_stays_local_p = TRUE;
2573       break;
2574
2575     default:
2576       break;
2577     }
2578
2579   /* If it isn't defined locally, then clearly it's dynamic.  */
2580   if (!h->def_regular)
2581     return TRUE;
2582
2583   /* Otherwise, the symbol is dynamic if binding rules don't tell
2584      us that it remains local.  */
2585   return !binding_stays_local_p;
2586 }
2587
2588 /* Return true if the symbol referred to by H should be considered
2589    to resolve local to the current module, and false otherwise.  Differs
2590    from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
2591    undefined symbols and weak symbols.  */
2592
2593 bfd_boolean
2594 _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
2595                               struct bfd_link_info *info,
2596                               bfd_boolean local_protected)
2597 {
2598   /* If it's a local sym, of course we resolve locally.  */
2599   if (h == NULL)
2600     return TRUE;
2601
2602   /* Common symbols that become definitions don't get the DEF_REGULAR
2603      flag set, so test it first, and don't bail out.  */
2604   if (ELF_COMMON_DEF_P (h))
2605     /* Do nothing.  */;
2606   /* If we don't have a definition in a regular file, then we can't
2607      resolve locally.  The sym is either undefined or dynamic.  */
2608   else if (!h->def_regular)
2609     return FALSE;
2610
2611   /* Forced local symbols resolve locally.  */
2612   if (h->forced_local)
2613     return TRUE;
2614
2615   /* As do non-dynamic symbols.  */
2616   if (h->dynindx == -1)
2617     return TRUE;
2618
2619   /* At this point, we know the symbol is defined and dynamic.  In an
2620      executable it must resolve locally, likewise when building symbolic
2621      shared libraries.  */
2622   if (info->executable || info->symbolic)
2623     return TRUE;
2624
2625   /* Now deal with defined dynamic symbols in shared libraries.  Ones
2626      with default visibility might not resolve locally.  */
2627   if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
2628     return FALSE;
2629
2630   /* However, STV_HIDDEN or STV_INTERNAL ones must be local.  */
2631   if (ELF_ST_VISIBILITY (h->other) != STV_PROTECTED)
2632     return TRUE;
2633
2634   /* STV_PROTECTED non-function symbols are local.  */
2635   if (h->type != STT_FUNC)
2636     return TRUE;
2637
2638   /* Function pointer equality tests may require that STV_PROTECTED
2639      symbols be treated as dynamic symbols, even when we know that the
2640      dynamic linker will resolve them locally.  */
2641   return local_protected;
2642 }
2643
2644 /* Caches some TLS segment info, and ensures that the TLS segment vma is
2645    aligned.  Returns the first TLS output section.  */
2646
2647 struct bfd_section *
2648 _bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
2649 {
2650   struct bfd_section *sec, *tls;
2651   unsigned int align = 0;
2652
2653   for (sec = obfd->sections; sec != NULL; sec = sec->next)
2654     if ((sec->flags & SEC_THREAD_LOCAL) != 0)
2655       break;
2656   tls = sec;
2657
2658   for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next)
2659     if (sec->alignment_power > align)
2660       align = sec->alignment_power;
2661
2662   elf_hash_table (info)->tls_sec = tls;
2663
2664   /* Ensure the alignment of the first section is the largest alignment,
2665      so that the tls segment starts aligned.  */
2666   if (tls != NULL)
2667     tls->alignment_power = align;
2668
2669   return tls;
2670 }
2671
2672 /* Return TRUE iff this is a non-common, definition of a non-function symbol.  */
2673 static bfd_boolean
2674 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
2675                                   Elf_Internal_Sym *sym)
2676 {
2677   const struct elf_backend_data *bed;
2678
2679   /* Local symbols do not count, but target specific ones might.  */
2680   if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
2681       && ELF_ST_BIND (sym->st_info) < STB_LOOS)
2682     return FALSE;
2683
2684   /* Function symbols do not count.  */
2685   if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
2686     return FALSE;
2687
2688   /* If the section is undefined, then so is the symbol.  */
2689   if (sym->st_shndx == SHN_UNDEF)
2690     return FALSE;
2691
2692   /* If the symbol is defined in the common section, then
2693      it is a common definition and so does not count.  */
2694   bed = get_elf_backend_data (abfd);
2695   if (bed->common_definition (sym))
2696     return FALSE;
2697
2698   /* If the symbol is in a target specific section then we
2699      must rely upon the backend to tell us what it is.  */
2700   if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
2701     /* FIXME - this function is not coded yet:
2702
2703        return _bfd_is_global_symbol_definition (abfd, sym);
2704
2705        Instead for now assume that the definition is not global,
2706        Even if this is wrong, at least the linker will behave
2707        in the same way that it used to do.  */
2708     return FALSE;
2709
2710   return TRUE;
2711 }
2712
2713 /* Search the symbol table of the archive element of the archive ABFD
2714    whose archive map contains a mention of SYMDEF, and determine if
2715    the symbol is defined in this element.  */
2716 static bfd_boolean
2717 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
2718 {
2719   Elf_Internal_Shdr * hdr;
2720   bfd_size_type symcount;
2721   bfd_size_type extsymcount;
2722   bfd_size_type extsymoff;
2723   Elf_Internal_Sym *isymbuf;
2724   Elf_Internal_Sym *isym;
2725   Elf_Internal_Sym *isymend;
2726   bfd_boolean result;
2727
2728   abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
2729   if (abfd == NULL)
2730     return FALSE;
2731
2732   if (! bfd_check_format (abfd, bfd_object))
2733     return FALSE;
2734
2735   /* If we have already included the element containing this symbol in the
2736      link then we do not need to include it again.  Just claim that any symbol
2737      it contains is not a definition, so that our caller will not decide to
2738      (re)include this element.  */
2739   if (abfd->archive_pass)
2740     return FALSE;
2741
2742   /* Select the appropriate symbol table.  */
2743   if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
2744     hdr = &elf_tdata (abfd)->symtab_hdr;
2745   else
2746     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2747
2748   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
2749
2750   /* The sh_info field of the symtab header tells us where the
2751      external symbols start.  We don't care about the local symbols.  */
2752   if (elf_bad_symtab (abfd))
2753     {
2754       extsymcount = symcount;
2755       extsymoff = 0;
2756     }
2757   else
2758     {
2759       extsymcount = symcount - hdr->sh_info;
2760       extsymoff = hdr->sh_info;
2761     }
2762
2763   if (extsymcount == 0)
2764     return FALSE;
2765
2766   /* Read in the symbol table.  */
2767   isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
2768                                   NULL, NULL, NULL);
2769   if (isymbuf == NULL)
2770     return FALSE;
2771
2772   /* Scan the symbol table looking for SYMDEF.  */
2773   result = FALSE;
2774   for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
2775     {
2776       const char *name;
2777
2778       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
2779                                               isym->st_name);
2780       if (name == NULL)
2781         break;
2782
2783       if (strcmp (name, symdef->name) == 0)
2784         {
2785           result = is_global_data_symbol_definition (abfd, isym);
2786           break;
2787         }
2788     }
2789
2790   free (isymbuf);
2791
2792   return result;
2793 }
2794 \f
2795 /* Add an entry to the .dynamic table.  */
2796
2797 bfd_boolean
2798 _bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
2799                             bfd_vma tag,
2800                             bfd_vma val)
2801 {
2802   struct elf_link_hash_table *hash_table;
2803   const struct elf_backend_data *bed;
2804   asection *s;
2805   bfd_size_type newsize;
2806   bfd_byte *newcontents;
2807   Elf_Internal_Dyn dyn;
2808
2809   hash_table = elf_hash_table (info);
2810   if (! is_elf_hash_table (hash_table))
2811     return FALSE;
2812
2813   bed = get_elf_backend_data (hash_table->dynobj);
2814   s = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
2815   BFD_ASSERT (s != NULL);
2816
2817   newsize = s->size + bed->s->sizeof_dyn;
2818   newcontents = bfd_realloc (s->contents, newsize);
2819   if (newcontents == NULL)
2820     return FALSE;
2821
2822   dyn.d_tag = tag;
2823   dyn.d_un.d_val = val;
2824   bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size);
2825
2826   s->size = newsize;
2827   s->contents = newcontents;
2828
2829   return TRUE;
2830 }
2831
2832 /* Add a DT_NEEDED entry for this dynamic object if DO_IT is true,
2833    otherwise just check whether one already exists.  Returns -1 on error,
2834    1 if a DT_NEEDED tag already exists, and 0 on success.  */
2835
2836 static int
2837 elf_add_dt_needed_tag (bfd *abfd,
2838                        struct bfd_link_info *info,
2839                        const char *soname,
2840                        bfd_boolean do_it)
2841 {
2842   struct elf_link_hash_table *hash_table;
2843   bfd_size_type oldsize;
2844   bfd_size_type strindex;
2845
2846   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
2847     return -1;
2848
2849   hash_table = elf_hash_table (info);
2850   oldsize = _bfd_elf_strtab_size (hash_table->dynstr);
2851   strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE);
2852   if (strindex == (bfd_size_type) -1)
2853     return -1;
2854
2855   if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr))
2856     {
2857       asection *sdyn;
2858       const struct elf_backend_data *bed;
2859       bfd_byte *extdyn;
2860
2861       bed = get_elf_backend_data (hash_table->dynobj);
2862       sdyn = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
2863       if (sdyn != NULL)
2864         for (extdyn = sdyn->contents;
2865              extdyn < sdyn->contents + sdyn->size;
2866              extdyn += bed->s->sizeof_dyn)
2867           {
2868             Elf_Internal_Dyn dyn;
2869
2870             bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn);
2871             if (dyn.d_tag == DT_NEEDED
2872                 && dyn.d_un.d_val == strindex)
2873               {
2874                 _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
2875                 return 1;
2876               }
2877           }
2878     }
2879
2880   if (do_it)
2881     {
2882       if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
2883         return -1;
2884
2885       if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
2886         return -1;
2887     }
2888   else
2889     /* We were just checking for existence of the tag.  */
2890     _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
2891
2892   return 0;
2893 }
2894
2895 /* Sort symbol by value and section.  */
2896 static int
2897 elf_sort_symbol (const void *arg1, const void *arg2)
2898 {
2899   const struct elf_link_hash_entry *h1;
2900   const struct elf_link_hash_entry *h2;
2901   bfd_signed_vma vdiff;
2902
2903   h1 = *(const struct elf_link_hash_entry **) arg1;
2904   h2 = *(const struct elf_link_hash_entry **) arg2;
2905   vdiff = h1->root.u.def.value - h2->root.u.def.value;
2906   if (vdiff != 0)
2907     return vdiff > 0 ? 1 : -1;
2908   else
2909     {
2910       long sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id;
2911       if (sdiff != 0)
2912         return sdiff > 0 ? 1 : -1;
2913     }
2914   return 0;
2915 }
2916
2917 /* This function is used to adjust offsets into .dynstr for
2918    dynamic symbols.  This is called via elf_link_hash_traverse.  */
2919
2920 static bfd_boolean
2921 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
2922 {
2923   struct elf_strtab_hash *dynstr = data;
2924
2925   if (h->root.type == bfd_link_hash_warning)
2926     h = (struct elf_link_hash_entry *) h->root.u.i.link;
2927
2928   if (h->dynindx != -1)
2929     h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
2930   return TRUE;
2931 }
2932
2933 /* Assign string offsets in .dynstr, update all structures referencing
2934    them.  */
2935
2936 static bfd_boolean
2937 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
2938 {
2939   struct elf_link_hash_table *hash_table = elf_hash_table (info);
2940   struct elf_link_local_dynamic_entry *entry;
2941   struct elf_strtab_hash *dynstr = hash_table->dynstr;
2942   bfd *dynobj = hash_table->dynobj;
2943   asection *sdyn;
2944   bfd_size_type size;
2945   const struct elf_backend_data *bed;
2946   bfd_byte *extdyn;
2947
2948   _bfd_elf_strtab_finalize (dynstr);
2949   size = _bfd_elf_strtab_size (dynstr);
2950
2951   bed = get_elf_backend_data (dynobj);
2952   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
2953   BFD_ASSERT (sdyn != NULL);
2954
2955   /* Update all .dynamic entries referencing .dynstr strings.  */
2956   for (extdyn = sdyn->contents;
2957        extdyn < sdyn->contents + sdyn->size;
2958        extdyn += bed->s->sizeof_dyn)
2959     {
2960       Elf_Internal_Dyn dyn;
2961
2962       bed->s->swap_dyn_in (dynobj, extdyn, &dyn);
2963       switch (dyn.d_tag)
2964         {
2965         case DT_STRSZ:
2966           dyn.d_un.d_val = size;
2967           break;
2968         case DT_NEEDED:
2969         case DT_SONAME:
2970         case DT_RPATH:
2971         case DT_RUNPATH:
2972         case DT_FILTER:
2973         case DT_AUXILIARY:
2974           dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
2975           break;
2976         default:
2977           continue;
2978         }
2979       bed->s->swap_dyn_out (dynobj, &dyn, extdyn);
2980     }
2981
2982   /* Now update local dynamic symbols.  */
2983   for (entry = hash_table->dynlocal; entry ; entry = entry->next)
2984     entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
2985                                                   entry->isym.st_name);
2986
2987   /* And the rest of dynamic symbols.  */
2988   elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr);
2989
2990   /* Adjust version definitions.  */
2991   if (elf_tdata (output_bfd)->cverdefs)
2992     {
2993       asection *s;
2994       bfd_byte *p;
2995       bfd_size_type i;
2996       Elf_Internal_Verdef def;
2997       Elf_Internal_Verdaux defaux;
2998
2999       s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
3000       p = s->contents;
3001       do
3002         {
3003           _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
3004                                    &def);
3005           p += sizeof (Elf_External_Verdef);
3006           if (def.vd_aux != sizeof (Elf_External_Verdef))
3007             continue;
3008           for (i = 0; i < def.vd_cnt; ++i)
3009             {
3010               _bfd_elf_swap_verdaux_in (output_bfd,
3011                                         (Elf_External_Verdaux *) p, &defaux);
3012               defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
3013                                                         defaux.vda_name);
3014               _bfd_elf_swap_verdaux_out (output_bfd,
3015                                          &defaux, (Elf_External_Verdaux *) p);
3016               p += sizeof (Elf_External_Verdaux);
3017             }
3018         }
3019       while (def.vd_next);
3020     }
3021
3022   /* Adjust version references.  */
3023   if (elf_tdata (output_bfd)->verref)
3024     {
3025       asection *s;
3026       bfd_byte *p;
3027       bfd_size_type i;
3028       Elf_Internal_Verneed need;
3029       Elf_Internal_Vernaux needaux;
3030
3031       s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
3032       p = s->contents;
3033       do
3034         {
3035           _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
3036                                     &need);
3037           need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
3038           _bfd_elf_swap_verneed_out (output_bfd, &need,
3039                                      (Elf_External_Verneed *) p);
3040           p += sizeof (Elf_External_Verneed);
3041           for (i = 0; i < need.vn_cnt; ++i)
3042             {
3043               _bfd_elf_swap_vernaux_in (output_bfd,
3044                                         (Elf_External_Vernaux *) p, &needaux);
3045               needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
3046                                                          needaux.vna_name);
3047               _bfd_elf_swap_vernaux_out (output_bfd,
3048                                          &needaux,
3049                                          (Elf_External_Vernaux *) p);
3050               p += sizeof (Elf_External_Vernaux);
3051             }
3052         }
3053       while (need.vn_next);
3054     }
3055
3056   return TRUE;
3057 }
3058 \f
3059 /* Add symbols from an ELF object file to the linker hash table.  */
3060
3061 static bfd_boolean
3062 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
3063 {
3064   Elf_Internal_Shdr *hdr;
3065   bfd_size_type symcount;
3066   bfd_size_type extsymcount;
3067   bfd_size_type extsymoff;
3068   struct elf_link_hash_entry **sym_hash;
3069   bfd_boolean dynamic;
3070   Elf_External_Versym *extversym = NULL;
3071   Elf_External_Versym *ever;
3072   struct elf_link_hash_entry *weaks;
3073   struct elf_link_hash_entry **nondeflt_vers = NULL;
3074   bfd_size_type nondeflt_vers_cnt = 0;
3075   Elf_Internal_Sym *isymbuf = NULL;
3076   Elf_Internal_Sym *isym;
3077   Elf_Internal_Sym *isymend;
3078   const struct elf_backend_data *bed;
3079   bfd_boolean add_needed;
3080   struct elf_link_hash_table *htab;
3081   bfd_size_type amt;
3082   void *alloc_mark = NULL;
3083   struct bfd_hash_entry **old_table = NULL;
3084   unsigned int old_size = 0;
3085   unsigned int old_count = 0;
3086   void *old_tab = NULL;
3087   void *old_hash;
3088   void *old_ent;
3089   struct bfd_link_hash_entry *old_undefs = NULL;
3090   struct bfd_link_hash_entry *old_undefs_tail = NULL;
3091   long old_dynsymcount = 0;
3092   size_t tabsize = 0;
3093   size_t hashsize = 0;
3094
3095   htab = elf_hash_table (info);
3096   bed = get_elf_backend_data (abfd);
3097
3098   if ((abfd->flags & DYNAMIC) == 0)
3099     dynamic = FALSE;
3100   else
3101     {
3102       dynamic = TRUE;
3103
3104       /* You can't use -r against a dynamic object.  Also, there's no
3105          hope of using a dynamic object which does not exactly match
3106          the format of the output file.  */
3107       if (info->relocatable
3108           || !is_elf_hash_table (htab)
3109           || htab->root.creator != abfd->xvec)
3110         {
3111           if (info->relocatable)
3112             bfd_set_error (bfd_error_invalid_operation);
3113           else
3114             bfd_set_error (bfd_error_wrong_format);
3115           goto error_return;
3116         }
3117     }
3118
3119   /* As a GNU extension, any input sections which are named
3120      .gnu.warning.SYMBOL are treated as warning symbols for the given
3121      symbol.  This differs from .gnu.warning sections, which generate
3122      warnings when they are included in an output file.  */
3123   if (info->executable)
3124     {
3125       asection *s;
3126
3127       for (s = abfd->sections; s != NULL; s = s->next)
3128         {
3129           const char *name;
3130
3131           name = bfd_get_section_name (abfd, s);
3132           if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
3133             {
3134               char *msg;
3135               bfd_size_type sz;
3136
3137               name += sizeof ".gnu.warning." - 1;
3138
3139               /* If this is a shared object, then look up the symbol
3140                  in the hash table.  If it is there, and it is already
3141                  been defined, then we will not be using the entry
3142                  from this shared object, so we don't need to warn.
3143                  FIXME: If we see the definition in a regular object
3144                  later on, we will warn, but we shouldn't.  The only
3145                  fix is to keep track of what warnings we are supposed
3146                  to emit, and then handle them all at the end of the
3147                  link.  */
3148               if (dynamic)
3149                 {
3150                   struct elf_link_hash_entry *h;
3151
3152                   h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
3153
3154                   /* FIXME: What about bfd_link_hash_common?  */
3155                   if (h != NULL
3156                       && (h->root.type == bfd_link_hash_defined
3157                           || h->root.type == bfd_link_hash_defweak))
3158                     {
3159                       /* We don't want to issue this warning.  Clobber
3160                          the section size so that the warning does not
3161                          get copied into the output file.  */
3162                       s->size = 0;
3163                       continue;
3164                     }
3165                 }
3166
3167               sz = s->size;
3168               msg = bfd_alloc (abfd, sz + 1);
3169               if (msg == NULL)
3170                 goto error_return;
3171
3172               if (! bfd_get_section_contents (abfd, s, msg, 0, sz))
3173                 goto error_return;
3174
3175               msg[sz] = '\0';
3176
3177               if (! (_bfd_generic_link_add_one_symbol
3178                      (info, abfd, name, BSF_WARNING, s, 0, msg,
3179                       FALSE, bed->collect, NULL)))
3180                 goto error_return;
3181
3182               if (! info->relocatable)
3183                 {
3184                   /* Clobber the section size so that the warning does
3185                      not get copied into the output file.  */
3186                   s->size = 0;
3187
3188                   /* Also set SEC_EXCLUDE, so that symbols defined in
3189                      the warning section don't get copied to the output.  */
3190                   s->flags |= SEC_EXCLUDE;
3191                 }
3192             }
3193         }
3194     }
3195
3196   add_needed = TRUE;
3197   if (! dynamic)
3198     {
3199       /* If we are creating a shared library, create all the dynamic
3200          sections immediately.  We need to attach them to something,
3201          so we attach them to this BFD, provided it is the right
3202          format.  FIXME: If there are no input BFD's of the same
3203          format as the output, we can't make a shared library.  */
3204       if (info->shared
3205           && is_elf_hash_table (htab)
3206           && htab->root.creator == abfd->xvec
3207           && !htab->dynamic_sections_created)
3208         {
3209           if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
3210             goto error_return;
3211         }
3212     }
3213   else if (!is_elf_hash_table (htab))
3214     goto error_return;
3215   else
3216     {
3217       asection *s;
3218       const char *soname = NULL;
3219       struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
3220       int ret;
3221
3222       /* ld --just-symbols and dynamic objects don't mix very well.
3223          ld shouldn't allow it.  */
3224       if ((s = abfd->sections) != NULL
3225           && s->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
3226         abort ();
3227
3228       /* If this dynamic lib was specified on the command line with
3229          --as-needed in effect, then we don't want to add a DT_NEEDED
3230          tag unless the lib is actually used.  Similary for libs brought
3231          in by another lib's DT_NEEDED.  When --no-add-needed is used
3232          on a dynamic lib, we don't want to add a DT_NEEDED entry for
3233          any dynamic library in DT_NEEDED tags in the dynamic lib at
3234          all.  */
3235       add_needed = (elf_dyn_lib_class (abfd)
3236                     & (DYN_AS_NEEDED | DYN_DT_NEEDED
3237                        | DYN_NO_NEEDED)) == 0;
3238
3239       s = bfd_get_section_by_name (abfd, ".dynamic");
3240       if (s != NULL)
3241         {
3242           bfd_byte *dynbuf;
3243           bfd_byte *extdyn;
3244           int elfsec;
3245           unsigned long shlink;
3246
3247           if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
3248             goto error_free_dyn;
3249
3250           elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
3251           if (elfsec == -1)
3252             goto error_free_dyn;
3253           shlink = elf_elfsections (abfd)[elfsec]->sh_link;
3254
3255           for (extdyn = dynbuf;
3256                extdyn < dynbuf + s->size;
3257                extdyn += bed->s->sizeof_dyn)
3258             {
3259               Elf_Internal_Dyn dyn;
3260
3261               bed->s->swap_dyn_in (abfd, extdyn, &dyn);
3262               if (dyn.d_tag == DT_SONAME)
3263                 {
3264                   unsigned int tagv = dyn.d_un.d_val;
3265                   soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3266                   if (soname == NULL)
3267                     goto error_free_dyn;
3268                 }
3269               if (dyn.d_tag == DT_NEEDED)
3270                 {
3271                   struct bfd_link_needed_list *n, **pn;
3272                   char *fnm, *anm;
3273                   unsigned int tagv = dyn.d_un.d_val;
3274
3275                   amt = sizeof (struct bfd_link_needed_list);
3276                   n = bfd_alloc (abfd, amt);
3277                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3278                   if (n == NULL || fnm == NULL)
3279                     goto error_free_dyn;
3280                   amt = strlen (fnm) + 1;
3281                   anm = bfd_alloc (abfd, amt);
3282                   if (anm == NULL)
3283                     goto error_free_dyn;
3284                   memcpy (anm, fnm, amt);
3285                   n->name = anm;
3286                   n->by = abfd;
3287                   n->next = NULL;
3288                   for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next)
3289                     ;
3290                   *pn = n;
3291                 }
3292               if (dyn.d_tag == DT_RUNPATH)
3293                 {
3294                   struct bfd_link_needed_list *n, **pn;
3295                   char *fnm, *anm;
3296                   unsigned int tagv = dyn.d_un.d_val;
3297
3298                   amt = sizeof (struct bfd_link_needed_list);
3299                   n = bfd_alloc (abfd, amt);
3300                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3301                   if (n == NULL || fnm == NULL)
3302                     goto error_free_dyn;
3303                   amt = strlen (fnm) + 1;
3304                   anm = bfd_alloc (abfd, amt);
3305                   if (anm == NULL)
3306                     goto error_free_dyn;
3307                   memcpy (anm, fnm, amt);
3308                   n->name = anm;
3309                   n->by = abfd;
3310                   n->next = NULL;
3311                   for (pn = & runpath;
3312                        *pn != NULL;
3313                        pn = &(*pn)->next)
3314                     ;
3315                   *pn = n;
3316                 }
3317               /* Ignore DT_RPATH if we have seen DT_RUNPATH.  */
3318               if (!runpath && dyn.d_tag == DT_RPATH)
3319                 {
3320                   struct bfd_link_needed_list *n, **pn;
3321                   char *fnm, *anm;
3322                   unsigned int tagv = dyn.d_un.d_val;
3323
3324                   amt = sizeof (struct bfd_link_needed_list);
3325                   n = bfd_alloc (abfd, amt);
3326                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3327                   if (n == NULL || fnm == NULL)
3328                     goto error_free_dyn;
3329                   amt = strlen (fnm) + 1;
3330                   anm = bfd_alloc (abfd, amt);
3331                   if (anm == NULL)
3332                     {
3333                     error_free_dyn:
3334                       free (dynbuf);
3335                       goto error_return;
3336                     }
3337                   memcpy (anm, fnm, amt);
3338                   n->name = anm;
3339                   n->by = abfd;
3340                   n->next = NULL;
3341                   for (pn = & rpath;
3342                        *pn != NULL;
3343                        pn = &(*pn)->next)
3344                     ;
3345                   *pn = n;
3346                 }
3347             }
3348
3349           free (dynbuf);
3350         }
3351
3352       /* DT_RUNPATH overrides DT_RPATH.  Do _NOT_ bfd_release, as that
3353          frees all more recently bfd_alloc'd blocks as well.  */
3354       if (runpath)
3355         rpath = runpath;
3356
3357       if (rpath)
3358         {
3359           struct bfd_link_needed_list **pn;
3360           for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next)
3361             ;
3362           *pn = rpath;
3363         }
3364
3365       /* We do not want to include any of the sections in a dynamic
3366          object in the output file.  We hack by simply clobbering the
3367          list of sections in the BFD.  This could be handled more
3368          cleanly by, say, a new section flag; the existing
3369          SEC_NEVER_LOAD flag is not the one we want, because that one
3370          still implies that the section takes up space in the output
3371          file.  */
3372       bfd_section_list_clear (abfd);
3373
3374       /* Find the name to use in a DT_NEEDED entry that refers to this
3375          object.  If the object has a DT_SONAME entry, we use it.
3376          Otherwise, if the generic linker stuck something in
3377          elf_dt_name, we use that.  Otherwise, we just use the file
3378          name.  */
3379       if (soname == NULL || *soname == '\0')
3380         {
3381           soname = elf_dt_name (abfd);
3382           if (soname == NULL || *soname == '\0')
3383             soname = bfd_get_filename (abfd);
3384         }
3385
3386       /* Save the SONAME because sometimes the linker emulation code
3387          will need to know it.  */
3388       elf_dt_name (abfd) = soname;
3389
3390       ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
3391       if (ret < 0)
3392         goto error_return;
3393
3394       /* If we have already included this dynamic object in the
3395          link, just ignore it.  There is no reason to include a
3396          particular dynamic object more than once.  */
3397       if (ret > 0)
3398         return TRUE;
3399     }
3400
3401   /* If this is a dynamic object, we always link against the .dynsym
3402      symbol table, not the .symtab symbol table.  The dynamic linker
3403      will only see the .dynsym symbol table, so there is no reason to
3404      look at .symtab for a dynamic object.  */
3405
3406   if (! dynamic || elf_dynsymtab (abfd) == 0)
3407     hdr = &elf_tdata (abfd)->symtab_hdr;
3408   else
3409     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3410
3411   symcount = hdr->sh_size / bed->s->sizeof_sym;
3412
3413   /* The sh_info field of the symtab header tells us where the
3414      external symbols start.  We don't care about the local symbols at
3415      this point.  */
3416   if (elf_bad_symtab (abfd))
3417     {
3418       extsymcount = symcount;
3419       extsymoff = 0;
3420     }
3421   else
3422     {
3423       extsymcount = symcount - hdr->sh_info;
3424       extsymoff = hdr->sh_info;
3425     }
3426
3427   sym_hash = NULL;
3428   if (extsymcount != 0)
3429     {
3430       isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3431                                       NULL, NULL, NULL);
3432       if (isymbuf == NULL)
3433         goto error_return;
3434
3435       /* We store a pointer to the hash table entry for each external
3436          symbol.  */
3437       amt = extsymcount * sizeof (struct elf_link_hash_entry *);
3438       sym_hash = bfd_alloc (abfd, amt);
3439       if (sym_hash == NULL)
3440         goto error_free_sym;
3441       elf_sym_hashes (abfd) = sym_hash;
3442     }
3443
3444   if (dynamic)
3445     {
3446       /* Read in any version definitions.  */
3447       if (!_bfd_elf_slurp_version_tables (abfd,
3448                                           info->default_imported_symver))
3449         goto error_free_sym;
3450
3451       /* Read in the symbol versions, but don't bother to convert them
3452          to internal format.  */
3453       if (elf_dynversym (abfd) != 0)
3454         {
3455           Elf_Internal_Shdr *versymhdr;
3456
3457           versymhdr = &elf_tdata (abfd)->dynversym_hdr;
3458           extversym = bfd_malloc (versymhdr->sh_size);
3459           if (extversym == NULL)
3460             goto error_free_sym;
3461           amt = versymhdr->sh_size;
3462           if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
3463               || bfd_bread (extversym, amt, abfd) != amt)
3464             goto error_free_vers;
3465         }
3466     }
3467
3468   /* If we are loading an as-needed shared lib, save the symbol table
3469      state before we start adding symbols.  If the lib turns out
3470      to be unneeded, restore the state.  */
3471   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
3472     {
3473       unsigned int i;
3474       size_t entsize;
3475
3476       for (entsize = 0, i = 0; i < htab->root.table.size; i++)
3477         {
3478           struct bfd_hash_entry *p;
3479           struct elf_link_hash_entry *h;
3480
3481           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3482             {
3483               h = (struct elf_link_hash_entry *) p;
3484               entsize += htab->root.table.entsize;
3485               if (h->root.type == bfd_link_hash_warning)
3486                 entsize += htab->root.table.entsize;
3487             }
3488         }
3489
3490       tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
3491       hashsize = extsymcount * sizeof (struct elf_link_hash_entry *);
3492       old_tab = bfd_malloc (tabsize + entsize + hashsize);
3493       if (old_tab == NULL)
3494         goto error_free_vers;
3495
3496       /* Remember the current objalloc pointer, so that all mem for
3497          symbols added can later be reclaimed.  */
3498       alloc_mark = bfd_hash_allocate (&htab->root.table, 1);
3499       if (alloc_mark == NULL)
3500         goto error_free_vers;
3501
3502       /* Clone the symbol table and sym hashes.  Remember some
3503          pointers into the symbol table, and dynamic symbol count.  */
3504       old_hash = (char *) old_tab + tabsize;
3505       old_ent = (char *) old_hash + hashsize;
3506       memcpy (old_tab, htab->root.table.table, tabsize);
3507       memcpy (old_hash, sym_hash, hashsize);
3508       old_undefs = htab->root.undefs;
3509       old_undefs_tail = htab->root.undefs_tail;
3510       old_table = htab->root.table.table;
3511       old_size = htab->root.table.size;
3512       old_count = htab->root.table.count;
3513       old_dynsymcount = htab->dynsymcount;
3514
3515       for (i = 0; i < htab->root.table.size; i++)
3516         {
3517           struct bfd_hash_entry *p;
3518           struct elf_link_hash_entry *h;
3519
3520           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3521             {
3522               memcpy (old_ent, p, htab->root.table.entsize);
3523               old_ent = (char *) old_ent + htab->root.table.entsize;
3524               h = (struct elf_link_hash_entry *) p;
3525               if (h->root.type == bfd_link_hash_warning)
3526                 {
3527                   memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
3528                   old_ent = (char *) old_ent + htab->root.table.entsize;
3529                 }
3530             }
3531         }
3532     }
3533
3534   weaks = NULL;
3535   ever = extversym != NULL ? extversym + extsymoff : NULL;
3536   for (isym = isymbuf, isymend = isymbuf + extsymcount;
3537        isym < isymend;
3538        isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
3539     {
3540       int bind;
3541       bfd_vma value;
3542       asection *sec, *new_sec;
3543       flagword flags;
3544       const char *name;
3545       struct elf_link_hash_entry *h;
3546       bfd_boolean definition;
3547       bfd_boolean size_change_ok;
3548       bfd_boolean type_change_ok;
3549       bfd_boolean new_weakdef;
3550       bfd_boolean override;
3551       bfd_boolean common;
3552       unsigned int old_alignment;
3553       bfd *old_bfd;
3554
3555       override = FALSE;
3556
3557       flags = BSF_NO_FLAGS;
3558       sec = NULL;
3559       value = isym->st_value;
3560       *sym_hash = NULL;
3561       common = bed->common_definition (isym);
3562
3563       bind = ELF_ST_BIND (isym->st_info);
3564       if (bind == STB_LOCAL)
3565         {
3566           /* This should be impossible, since ELF requires that all
3567              global symbols follow all local symbols, and that sh_info
3568              point to the first global symbol.  Unfortunately, Irix 5
3569              screws this up.  */
3570           continue;
3571         }
3572       else if (bind == STB_GLOBAL)
3573         {
3574           if (isym->st_shndx != SHN_UNDEF && !common)
3575             flags = BSF_GLOBAL;
3576         }
3577       else if (bind == STB_WEAK)
3578         flags = BSF_WEAK;
3579       else
3580         {
3581           /* Leave it up to the processor backend.  */
3582         }
3583
3584       if (isym->st_shndx == SHN_UNDEF)
3585         sec = bfd_und_section_ptr;
3586       else if (isym->st_shndx < SHN_LORESERVE
3587                || isym->st_shndx > SHN_HIRESERVE)
3588         {
3589           sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
3590           if (sec == NULL)
3591             sec = bfd_abs_section_ptr;
3592           else if (sec->kept_section)
3593             {
3594               /* Symbols from discarded section are undefined, and have
3595                  default visibility.  */
3596               sec = bfd_und_section_ptr;
3597               isym->st_shndx = SHN_UNDEF;
3598               isym->st_other = (STV_DEFAULT
3599                                 | (isym->st_other & ~ ELF_ST_VISIBILITY (-1)));
3600             }
3601           else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
3602             value -= sec->vma;
3603         }
3604       else if (isym->st_shndx == SHN_ABS)
3605         sec = bfd_abs_section_ptr;
3606       else if (isym->st_shndx == SHN_COMMON)
3607         {
3608           sec = bfd_com_section_ptr;
3609           /* What ELF calls the size we call the value.  What ELF
3610              calls the value we call the alignment.  */
3611           value = isym->st_size;
3612         }
3613       else
3614         {
3615           /* Leave it up to the processor backend.  */
3616         }
3617
3618       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3619                                               isym->st_name);
3620       if (name == NULL)
3621         goto error_free_vers;
3622
3623       if (isym->st_shndx == SHN_COMMON
3624           && ELF_ST_TYPE (isym->st_info) == STT_TLS
3625           && !info->relocatable)
3626         {
3627           asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
3628
3629           if (tcomm == NULL)
3630             {
3631               tcomm = bfd_make_section_with_flags (abfd, ".tcommon",
3632                                                    (SEC_ALLOC
3633                                                     | SEC_IS_COMMON
3634                                                     | SEC_LINKER_CREATED
3635                                                     | SEC_THREAD_LOCAL));
3636               if (tcomm == NULL)
3637                 goto error_free_vers;
3638             }
3639           sec = tcomm;
3640         }
3641       else if (bed->elf_add_symbol_hook)
3642         {
3643           if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
3644                                              &sec, &value))
3645             goto error_free_vers;
3646
3647           /* The hook function sets the name to NULL if this symbol
3648              should be skipped for some reason.  */
3649           if (name == NULL)
3650             continue;
3651         }
3652
3653       /* Sanity check that all possibilities were handled.  */
3654       if (sec == NULL)
3655         {
3656           bfd_set_error (bfd_error_bad_value);
3657           goto error_free_vers;
3658         }
3659
3660       if (bfd_is_und_section (sec)
3661           || bfd_is_com_section (sec))
3662         definition = FALSE;
3663       else
3664         definition = TRUE;
3665
3666       size_change_ok = FALSE;
3667       type_change_ok = bed->type_change_ok;
3668       old_alignment = 0;
3669       old_bfd = NULL;
3670       new_sec = sec;
3671
3672       if (is_elf_hash_table (htab))
3673         {
3674           Elf_Internal_Versym iver;
3675           unsigned int vernum = 0;
3676           bfd_boolean skip;
3677
3678           if (ever == NULL)
3679             {
3680               if (info->default_imported_symver)
3681                 /* Use the default symbol version created earlier.  */
3682                 iver.vs_vers = elf_tdata (abfd)->cverdefs;
3683               else
3684                 iver.vs_vers = 0;
3685             }
3686           else
3687             _bfd_elf_swap_versym_in (abfd, ever, &iver);
3688
3689           vernum = iver.vs_vers & VERSYM_VERSION;
3690
3691           /* If this is a hidden symbol, or if it is not version
3692              1, we append the version name to the symbol name.
3693              However, we do not modify a non-hidden absolute symbol
3694              if it is not a function, because it might be the version
3695              symbol itself.  FIXME: What if it isn't?  */
3696           if ((iver.vs_vers & VERSYM_HIDDEN) != 0
3697               || (vernum > 1 && (! bfd_is_abs_section (sec)
3698                                  || ELF_ST_TYPE (isym->st_info) == STT_FUNC)))
3699             {
3700               const char *verstr;
3701               size_t namelen, verlen, newlen;
3702               char *newname, *p;
3703
3704               if (isym->st_shndx != SHN_UNDEF)
3705                 {
3706                   if (vernum > elf_tdata (abfd)->cverdefs)
3707                     verstr = NULL;
3708                   else if (vernum > 1)
3709                     verstr =
3710                       elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
3711                   else
3712                     verstr = "";
3713
3714                   if (verstr == NULL)
3715                     {
3716                       (*_bfd_error_handler)
3717                         (_("%B: %s: invalid version %u (max %d)"),
3718                          abfd, name, vernum,
3719                          elf_tdata (abfd)->cverdefs);
3720                       bfd_set_error (bfd_error_bad_value);
3721                       goto error_free_vers;
3722                     }
3723                 }
3724               else
3725                 {
3726                   /* We cannot simply test for the number of
3727                      entries in the VERNEED section since the
3728                      numbers for the needed versions do not start
3729                      at 0.  */
3730                   Elf_Internal_Verneed *t;
3731
3732                   verstr = NULL;
3733                   for (t = elf_tdata (abfd)->verref;
3734                        t != NULL;
3735                        t = t->vn_nextref)
3736                     {
3737                       Elf_Internal_Vernaux *a;
3738
3739                       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
3740                         {
3741                           if (a->vna_other == vernum)
3742                             {
3743                               verstr = a->vna_nodename;
3744                               break;
3745                             }
3746                         }
3747                       if (a != NULL)
3748                         break;
3749                     }
3750                   if (verstr == NULL)
3751                     {
3752                       (*_bfd_error_handler)
3753                         (_("%B: %s: invalid needed version %d"),
3754                          abfd, name, vernum);
3755                       bfd_set_error (bfd_error_bad_value);
3756                       goto error_free_vers;
3757                     }
3758                 }
3759
3760               namelen = strlen (name);
3761               verlen = strlen (verstr);
3762               newlen = namelen + verlen + 2;
3763               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
3764                   && isym->st_shndx != SHN_UNDEF)
3765                 ++newlen;
3766
3767               newname = bfd_hash_allocate (&htab->root.table, newlen);
3768               if (newname == NULL)
3769                 goto error_free_vers;
3770               memcpy (newname, name, namelen);
3771               p = newname + namelen;
3772               *p++ = ELF_VER_CHR;
3773               /* If this is a defined non-hidden version symbol,
3774                  we add another @ to the name.  This indicates the
3775                  default version of the symbol.  */
3776               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
3777                   && isym->st_shndx != SHN_UNDEF)
3778                 *p++ = ELF_VER_CHR;
3779               memcpy (p, verstr, verlen + 1);
3780
3781               name = newname;
3782             }
3783
3784           if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec,
3785                                       &value, &old_alignment,
3786                                       sym_hash, &skip, &override,
3787                                       &type_change_ok, &size_change_ok))
3788             goto error_free_vers;
3789
3790           if (skip)
3791             continue;
3792
3793           if (override)
3794             definition = FALSE;
3795
3796           h = *sym_hash;
3797           while (h->root.type == bfd_link_hash_indirect
3798                  || h->root.type == bfd_link_hash_warning)
3799             h = (struct elf_link_hash_entry *) h->root.u.i.link;
3800
3801           /* Remember the old alignment if this is a common symbol, so
3802              that we don't reduce the alignment later on.  We can't
3803              check later, because _bfd_generic_link_add_one_symbol
3804              will set a default for the alignment which we want to
3805              override. We also remember the old bfd where the existing
3806              definition comes from.  */
3807           switch (h->root.type)
3808             {
3809             default:
3810               break;
3811
3812             case bfd_link_hash_defined:
3813             case bfd_link_hash_defweak:
3814               old_bfd = h->root.u.def.section->owner;
3815               break;
3816
3817             case bfd_link_hash_common:
3818               old_bfd = h->root.u.c.p->section->owner;
3819               old_alignment = h->root.u.c.p->alignment_power;
3820               break;
3821             }
3822
3823           if (elf_tdata (abfd)->verdef != NULL
3824               && ! override
3825               && vernum > 1
3826               && definition)
3827             h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
3828         }
3829
3830       if (! (_bfd_generic_link_add_one_symbol
3831              (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
3832               (struct bfd_link_hash_entry **) sym_hash)))
3833         goto error_free_vers;
3834
3835       h = *sym_hash;
3836       while (h->root.type == bfd_link_hash_indirect
3837              || h->root.type == bfd_link_hash_warning)
3838         h = (struct elf_link_hash_entry *) h->root.u.i.link;
3839       *sym_hash = h;
3840
3841       new_weakdef = FALSE;
3842       if (dynamic
3843           && definition
3844           && (flags & BSF_WEAK) != 0
3845           && ELF_ST_TYPE (isym->st_info) != STT_FUNC
3846           && is_elf_hash_table (htab)
3847           && h->u.weakdef == NULL)
3848         {
3849           /* Keep a list of all weak defined non function symbols from
3850              a dynamic object, using the weakdef field.  Later in this
3851              function we will set the weakdef field to the correct
3852              value.  We only put non-function symbols from dynamic
3853              objects on this list, because that happens to be the only
3854              time we need to know the normal symbol corresponding to a
3855              weak symbol, and the information is time consuming to
3856              figure out.  If the weakdef field is not already NULL,
3857              then this symbol was already defined by some previous
3858              dynamic object, and we will be using that previous
3859              definition anyhow.  */
3860
3861           h->u.weakdef = weaks;
3862           weaks = h;
3863           new_weakdef = TRUE;
3864         }
3865
3866       /* Set the alignment of a common symbol.  */
3867       if ((common || bfd_is_com_section (sec))
3868           && h->root.type == bfd_link_hash_common)
3869         {
3870           unsigned int align;
3871
3872           if (common)
3873             align = bfd_log2 (isym->st_value);
3874           else
3875             {
3876               /* The new symbol is a common symbol in a shared object.
3877                  We need to get the alignment from the section.  */
3878               align = new_sec->alignment_power;
3879             }
3880           if (align > old_alignment
3881               /* Permit an alignment power of zero if an alignment of one
3882                  is specified and no other alignments have been specified.  */
3883               || (isym->st_value == 1 && old_alignment == 0))
3884             h->root.u.c.p->alignment_power = align;
3885           else
3886             h->root.u.c.p->alignment_power = old_alignment;
3887         }
3888
3889       if (is_elf_hash_table (htab))
3890         {
3891           bfd_boolean dynsym;
3892
3893           /* Check the alignment when a common symbol is involved. This
3894              can change when a common symbol is overridden by a normal
3895              definition or a common symbol is ignored due to the old
3896              normal definition. We need to make sure the maximum
3897              alignment is maintained.  */
3898           if ((old_alignment || common)
3899               && h->root.type != bfd_link_hash_common)
3900             {
3901               unsigned int common_align;
3902               unsigned int normal_align;
3903               unsigned int symbol_align;
3904               bfd *normal_bfd;
3905               bfd *common_bfd;
3906
3907               symbol_align = ffs (h->root.u.def.value) - 1;
3908               if (h->root.u.def.section->owner != NULL
3909                   && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
3910                 {
3911                   normal_align = h->root.u.def.section->alignment_power;
3912                   if (normal_align > symbol_align)
3913                     normal_align = symbol_align;
3914                 }
3915               else
3916                 normal_align = symbol_align;
3917
3918               if (old_alignment)
3919                 {
3920                   common_align = old_alignment;
3921                   common_bfd = old_bfd;
3922                   normal_bfd = abfd;
3923                 }
3924               else
3925                 {
3926                   common_align = bfd_log2 (isym->st_value);
3927                   common_bfd = abfd;
3928                   normal_bfd = old_bfd;
3929                 }
3930
3931               if (normal_align < common_align)
3932                 {
3933                   /* PR binutils/2735 */
3934                   if (normal_bfd == NULL)
3935                     (*_bfd_error_handler)
3936                       (_("Warning: alignment %u of common symbol `%s' in %B"
3937                          " is greater than the alignment (%u) of its section %A"),
3938                        common_bfd, h->root.u.def.section,
3939                        1 << common_align, name, 1 << normal_align);
3940                   else
3941                     (*_bfd_error_handler)
3942                       (_("Warning: alignment %u of symbol `%s' in %B"
3943                          " is smaller than %u in %B"),
3944                        normal_bfd, common_bfd,
3945                        1 << normal_align, name, 1 << common_align);
3946                 }
3947             }
3948
3949           /* Remember the symbol size and type.  */
3950           if (isym->st_size != 0
3951               && (definition || h->size == 0))
3952             {
3953               if (h->size != 0 && h->size != isym->st_size && ! size_change_ok)
3954                 (*_bfd_error_handler)
3955                   (_("Warning: size of symbol `%s' changed"
3956                      " from %lu in %B to %lu in %B"),
3957                    old_bfd, abfd,
3958                    name, (unsigned long) h->size,
3959                    (unsigned long) isym->st_size);
3960
3961               h->size = isym->st_size;
3962             }
3963
3964           /* If this is a common symbol, then we always want H->SIZE
3965              to be the size of the common symbol.  The code just above
3966              won't fix the size if a common symbol becomes larger.  We
3967              don't warn about a size change here, because that is
3968              covered by --warn-common.  */
3969           if (h->root.type == bfd_link_hash_common)
3970             h->size = h->root.u.c.size;
3971
3972           if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
3973               && (definition || h->type == STT_NOTYPE))
3974             {
3975               if (h->type != STT_NOTYPE
3976                   && h->type != ELF_ST_TYPE (isym->st_info)
3977                   && ! type_change_ok)
3978                 (*_bfd_error_handler)
3979                   (_("Warning: type of symbol `%s' changed"
3980                      " from %d to %d in %B"),
3981                    abfd, name, h->type, ELF_ST_TYPE (isym->st_info));
3982
3983               h->type = ELF_ST_TYPE (isym->st_info);
3984             }
3985
3986           /* If st_other has a processor-specific meaning, specific
3987              code might be needed here. We never merge the visibility
3988              attribute with the one from a dynamic object.  */
3989           if (bed->elf_backend_merge_symbol_attribute)
3990             (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
3991                                                         dynamic);
3992
3993           /* If this symbol has default visibility and the user has requested
3994              we not re-export it, then mark it as hidden.  */
3995           if (definition && !dynamic
3996               && (abfd->no_export
3997                   || (abfd->my_archive && abfd->my_archive->no_export))
3998               && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
3999             isym->st_other = (STV_HIDDEN
4000                               | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
4001
4002           if (isym->st_other != 0 && !dynamic)
4003             {
4004               unsigned char hvis, symvis, other, nvis;
4005
4006               /* Take the balance of OTHER from the definition.  */
4007               other = (definition ? isym->st_other : h->other);
4008               other &= ~ ELF_ST_VISIBILITY (-1);
4009
4010               /* Combine visibilities, using the most constraining one.  */
4011               hvis   = ELF_ST_VISIBILITY (h->other);
4012               symvis = ELF_ST_VISIBILITY (isym->st_other);
4013               if (! hvis)
4014                 nvis = symvis;
4015               else if (! symvis)
4016                 nvis = hvis;
4017               else
4018                 nvis = hvis < symvis ? hvis : symvis;
4019
4020               h->other = other | nvis;
4021             }
4022
4023           /* Set a flag in the hash table entry indicating the type of
4024              reference or definition we just found.  Keep a count of
4025              the number of dynamic symbols we find.  A dynamic symbol
4026              is one which is referenced or defined by both a regular
4027              object and a shared object.  */
4028           dynsym = FALSE;
4029           if (! dynamic)
4030             {
4031               if (! definition)
4032                 {
4033                   h->ref_regular = 1;
4034                   if (bind != STB_WEAK)
4035                     h->ref_regular_nonweak = 1;
4036                 }
4037               else
4038                 h->def_regular = 1;
4039               if (! info->executable
4040                   || h->def_dynamic
4041                   || h->ref_dynamic)
4042                 dynsym = TRUE;
4043             }
4044           else
4045             {
4046               if (! definition)
4047                 h->ref_dynamic = 1;
4048               else
4049                 h->def_dynamic = 1;
4050               if (h->def_regular
4051                   || h->ref_regular
4052                   || (h->u.weakdef != NULL
4053                       && ! new_weakdef
4054                       && h->u.weakdef->dynindx != -1))
4055                 dynsym = TRUE;
4056             }
4057
4058           /* Check to see if we need to add an indirect symbol for
4059              the default name.  */
4060           if (definition || h->root.type == bfd_link_hash_common)
4061             if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
4062                                               &sec, &value, &dynsym,
4063                                               override))
4064               goto error_free_vers;
4065
4066           if (definition && !dynamic)
4067             {
4068               char *p = strchr (name, ELF_VER_CHR);
4069               if (p != NULL && p[1] != ELF_VER_CHR)
4070                 {
4071                   /* Queue non-default versions so that .symver x, x@FOO
4072                      aliases can be checked.  */
4073                   if (!nondeflt_vers)
4074                     {
4075                       amt = ((isymend - isym + 1)
4076                              * sizeof (struct elf_link_hash_entry *));
4077                       nondeflt_vers = bfd_malloc (amt);
4078                     }
4079                   nondeflt_vers[nondeflt_vers_cnt++] = h;
4080                 }
4081             }
4082
4083           if (dynsym && h->dynindx == -1)
4084             {
4085               if (! bfd_elf_link_record_dynamic_symbol (info, h))
4086                 goto error_free_vers;
4087               if (h->u.weakdef != NULL
4088                   && ! new_weakdef
4089                   && h->u.weakdef->dynindx == -1)
4090                 {
4091                   if (!bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
4092                     goto error_free_vers;
4093                 }
4094             }
4095           else if (dynsym && h->dynindx != -1)
4096             /* If the symbol already has a dynamic index, but
4097                visibility says it should not be visible, turn it into
4098                a local symbol.  */
4099             switch (ELF_ST_VISIBILITY (h->other))
4100               {
4101               case STV_INTERNAL:
4102               case STV_HIDDEN:
4103                 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
4104                 dynsym = FALSE;
4105                 break;
4106               }
4107
4108           if (!add_needed
4109               && definition
4110               && dynsym
4111               && h->ref_regular)
4112             {
4113               int ret;
4114               const char *soname = elf_dt_name (abfd);
4115
4116               /* A symbol from a library loaded via DT_NEEDED of some
4117                  other library is referenced by a regular object.
4118                  Add a DT_NEEDED entry for it.  Issue an error if
4119                  --no-add-needed is used.  */
4120               if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
4121                 {
4122                   (*_bfd_error_handler)
4123                     (_("%s: invalid DSO for symbol `%s' definition"),
4124                      abfd, name);
4125                   bfd_set_error (bfd_error_bad_value);
4126                   goto error_free_vers;
4127                 }
4128
4129               elf_dyn_lib_class (abfd) &= ~DYN_AS_NEEDED;
4130
4131               add_needed = TRUE;
4132               ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4133               if (ret < 0)
4134                 goto error_free_vers;
4135
4136               BFD_ASSERT (ret == 0);
4137             }
4138         }
4139     }
4140
4141   if (extversym != NULL)
4142     {
4143       free (extversym);
4144       extversym = NULL;
4145     }
4146
4147   if (isymbuf != NULL)
4148     {
4149       free (isymbuf);
4150       isymbuf = NULL;
4151     }
4152
4153   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4154     {
4155       unsigned int i;
4156
4157       /* Restore the symbol table.  */
4158       old_hash = (char *) old_tab + tabsize;
4159       old_ent = (char *) old_hash + hashsize;
4160       sym_hash = elf_sym_hashes (abfd);
4161       htab->root.table.table = old_table;
4162       htab->root.table.size = old_size;
4163       htab->root.table.count = old_count;
4164       memcpy (htab->root.table.table, old_tab, tabsize);
4165       memcpy (sym_hash, old_hash, hashsize);
4166       htab->root.undefs = old_undefs;
4167       htab->root.undefs_tail = old_undefs_tail;
4168       for (i = 0; i < htab->root.table.size; i++)
4169         {
4170           struct bfd_hash_entry *p;
4171           struct elf_link_hash_entry *h;
4172
4173           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4174             {
4175               h = (struct elf_link_hash_entry *) p;
4176               if (h->root.type == bfd_link_hash_warning)
4177                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4178               if (h->dynindx >= old_dynsymcount)
4179                 _bfd_elf_strtab_delref (htab->dynstr, h->dynstr_index);
4180
4181               memcpy (p, old_ent, htab->root.table.entsize);
4182               old_ent = (char *) old_ent + htab->root.table.entsize;
4183               h = (struct elf_link_hash_entry *) p;
4184               if (h->root.type == bfd_link_hash_warning)
4185                 {
4186                   memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
4187                   old_ent = (char *) old_ent + htab->root.table.entsize;
4188                 }
4189             }
4190         }
4191
4192       free (old_tab);
4193       objalloc_free_block ((struct objalloc *) htab->root.table.memory,
4194                            alloc_mark);
4195       if (nondeflt_vers != NULL)
4196         free (nondeflt_vers);
4197       return TRUE;
4198     }
4199
4200   if (old_tab != NULL)
4201     {
4202       free (old_tab);
4203       old_tab = NULL;
4204     }
4205
4206   /* Now that all the symbols from this input file are created, handle
4207      .symver foo, foo@BAR such that any relocs against foo become foo@BAR.  */
4208   if (nondeflt_vers != NULL)
4209     {
4210       bfd_size_type cnt, symidx;
4211
4212       for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
4213         {
4214           struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
4215           char *shortname, *p;
4216
4217           p = strchr (h->root.root.string, ELF_VER_CHR);
4218           if (p == NULL
4219               || (h->root.type != bfd_link_hash_defined
4220                   && h->root.type != bfd_link_hash_defweak))
4221             continue;
4222
4223           amt = p - h->root.root.string;
4224           shortname = bfd_malloc (amt + 1);
4225           memcpy (shortname, h->root.root.string, amt);
4226           shortname[amt] = '\0';
4227
4228           hi = (struct elf_link_hash_entry *)
4229                bfd_link_hash_lookup (&htab->root, shortname,
4230                                      FALSE, FALSE, FALSE);
4231           if (hi != NULL
4232               && hi->root.type == h->root.type
4233               && hi->root.u.def.value == h->root.u.def.value
4234               && hi->root.u.def.section == h->root.u.def.section)
4235             {
4236               (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
4237               hi->root.type = bfd_link_hash_indirect;
4238               hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
4239               (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
4240               sym_hash = elf_sym_hashes (abfd);
4241               if (sym_hash)
4242                 for (symidx = 0; symidx < extsymcount; ++symidx)
4243                   if (sym_hash[symidx] == hi)
4244                     {
4245                       sym_hash[symidx] = h;
4246                       break;
4247                     }
4248             }
4249           free (shortname);
4250         }
4251       free (nondeflt_vers);
4252       nondeflt_vers = NULL;
4253     }
4254
4255   /* Now set the weakdefs field correctly for all the weak defined
4256      symbols we found.  The only way to do this is to search all the
4257      symbols.  Since we only need the information for non functions in
4258      dynamic objects, that's the only time we actually put anything on
4259      the list WEAKS.  We need this information so that if a regular
4260      object refers to a symbol defined weakly in a dynamic object, the
4261      real symbol in the dynamic object is also put in the dynamic
4262      symbols; we also must arrange for both symbols to point to the
4263      same memory location.  We could handle the general case of symbol
4264      aliasing, but a general symbol alias can only be generated in
4265      assembler code, handling it correctly would be very time
4266      consuming, and other ELF linkers don't handle general aliasing
4267      either.  */
4268   if (weaks != NULL)
4269     {
4270       struct elf_link_hash_entry **hpp;
4271       struct elf_link_hash_entry **hppend;
4272       struct elf_link_hash_entry **sorted_sym_hash;
4273       struct elf_link_hash_entry *h;
4274       size_t sym_count;
4275
4276       /* Since we have to search the whole symbol list for each weak
4277          defined symbol, search time for N weak defined symbols will be
4278          O(N^2). Binary search will cut it down to O(NlogN).  */
4279       amt = extsymcount * sizeof (struct elf_link_hash_entry *);
4280       sorted_sym_hash = bfd_malloc (amt);
4281       if (sorted_sym_hash == NULL)
4282         goto error_return;
4283       sym_hash = sorted_sym_hash;
4284       hpp = elf_sym_hashes (abfd);
4285       hppend = hpp + extsymcount;
4286       sym_count = 0;
4287       for (; hpp < hppend; hpp++)
4288         {
4289           h = *hpp;
4290           if (h != NULL
4291               && h->root.type == bfd_link_hash_defined
4292               && h->type != STT_FUNC)
4293             {
4294               *sym_hash = h;
4295               sym_hash++;
4296               sym_count++;
4297             }
4298         }
4299
4300       qsort (sorted_sym_hash, sym_count,
4301              sizeof (struct elf_link_hash_entry *),
4302              elf_sort_symbol);
4303
4304       while (weaks != NULL)
4305         {
4306           struct elf_link_hash_entry *hlook;
4307           asection *slook;
4308           bfd_vma vlook;
4309           long ilook;
4310           size_t i, j, idx;
4311
4312           hlook = weaks;
4313           weaks = hlook->u.weakdef;
4314           hlook->u.weakdef = NULL;
4315
4316           BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
4317                       || hlook->root.type == bfd_link_hash_defweak
4318                       || hlook->root.type == bfd_link_hash_common
4319                       || hlook->root.type == bfd_link_hash_indirect);
4320           slook = hlook->root.u.def.section;
4321           vlook = hlook->root.u.def.value;
4322
4323           ilook = -1;
4324           i = 0;
4325           j = sym_count;
4326           while (i < j)
4327             {
4328               bfd_signed_vma vdiff;
4329               idx = (i + j) / 2;
4330               h = sorted_sym_hash [idx];
4331               vdiff = vlook - h->root.u.def.value;
4332               if (vdiff < 0)
4333                 j = idx;
4334               else if (vdiff > 0)
4335                 i = idx + 1;
4336               else
4337                 {
4338                   long sdiff = slook->id - h->root.u.def.section->id;
4339                   if (sdiff < 0)
4340                     j = idx;
4341                   else if (sdiff > 0)
4342                     i = idx + 1;
4343                   else
4344                     {
4345                       ilook = idx;
4346                       break;
4347                     }
4348                 }
4349             }
4350
4351           /* We didn't find a value/section match.  */
4352           if (ilook == -1)
4353             continue;
4354
4355           for (i = ilook; i < sym_count; i++)
4356             {
4357               h = sorted_sym_hash [i];
4358
4359               /* Stop if value or section doesn't match.  */
4360               if (h->root.u.def.value != vlook
4361                   || h->root.u.def.section != slook)
4362                 break;
4363               else if (h != hlook)
4364                 {
4365                   hlook->u.weakdef = h;
4366
4367                   /* If the weak definition is in the list of dynamic
4368                      symbols, make sure the real definition is put
4369                      there as well.  */
4370                   if (hlook->dynindx != -1 && h->dynindx == -1)
4371                     {
4372                       if (! bfd_elf_link_record_dynamic_symbol (info, h))
4373                         goto error_return;
4374                     }
4375
4376                   /* If the real definition is in the list of dynamic
4377                      symbols, make sure the weak definition is put
4378                      there as well.  If we don't do this, then the
4379                      dynamic loader might not merge the entries for the
4380                      real definition and the weak definition.  */
4381                   if (h->dynindx != -1 && hlook->dynindx == -1)
4382                     {
4383                       if (! bfd_elf_link_record_dynamic_symbol (info, hlook))
4384                         goto error_return;
4385                     }
4386                   break;
4387                 }
4388             }
4389         }
4390
4391       free (sorted_sym_hash);
4392     }
4393
4394   if (bed->check_directives)
4395     (*bed->check_directives) (abfd, info);
4396
4397   /* If this object is the same format as the output object, and it is
4398      not a shared library, then let the backend look through the
4399      relocs.
4400
4401      This is required to build global offset table entries and to
4402      arrange for dynamic relocs.  It is not required for the
4403      particular common case of linking non PIC code, even when linking
4404      against shared libraries, but unfortunately there is no way of
4405      knowing whether an object file has been compiled PIC or not.
4406      Looking through the relocs is not particularly time consuming.
4407      The problem is that we must either (1) keep the relocs in memory,
4408      which causes the linker to require additional runtime memory or
4409      (2) read the relocs twice from the input file, which wastes time.
4410      This would be a good case for using mmap.
4411
4412      I have no idea how to handle linking PIC code into a file of a
4413      different format.  It probably can't be done.  */
4414   if (! dynamic
4415       && is_elf_hash_table (htab)
4416       && htab->root.creator == abfd->xvec
4417       && bed->check_relocs != NULL)
4418     {
4419       asection *o;
4420
4421       for (o = abfd->sections; o != NULL; o = o->next)
4422         {
4423           Elf_Internal_Rela *internal_relocs;
4424           bfd_boolean ok;
4425
4426           if ((o->flags & SEC_RELOC) == 0
4427               || o->reloc_count == 0
4428               || ((info->strip == strip_all || info->strip == strip_debugger)
4429                   && (o->flags & SEC_DEBUGGING) != 0)
4430               || bfd_is_abs_section (o->output_section))
4431             continue;
4432
4433           internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
4434                                                        info->keep_memory);
4435           if (internal_relocs == NULL)
4436             goto error_return;
4437
4438           ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
4439
4440           if (elf_section_data (o)->relocs != internal_relocs)
4441             free (internal_relocs);
4442
4443           if (! ok)
4444             goto error_return;
4445         }
4446     }
4447
4448   /* If this is a non-traditional link, try to optimize the handling
4449      of the .stab/.stabstr sections.  */
4450   if (! dynamic
4451       && ! info->traditional_format
4452       && is_elf_hash_table (htab)
4453       && (info->strip != strip_all && info->strip != strip_debugger))
4454     {
4455       asection *stabstr;
4456
4457       stabstr = bfd_get_section_by_name (abfd, ".stabstr");
4458       if (stabstr != NULL)
4459         {
4460           bfd_size_type string_offset = 0;
4461           asection *stab;
4462
4463           for (stab = abfd->sections; stab; stab = stab->next)
4464             if (strncmp (".stab", stab->name, 5) == 0
4465                 && (!stab->name[5] ||
4466                     (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
4467                 && (stab->flags & SEC_MERGE) == 0
4468                 && !bfd_is_abs_section (stab->output_section))
4469               {
4470                 struct bfd_elf_section_data *secdata;
4471
4472                 secdata = elf_section_data (stab);
4473                 if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab,
4474                                                stabstr, &secdata->sec_info,
4475                                                &string_offset))
4476                   goto error_return;
4477                 if (secdata->sec_info)
4478                   stab->sec_info_type = ELF_INFO_TYPE_STABS;
4479             }
4480         }
4481     }
4482
4483   if (is_elf_hash_table (htab) && add_needed)
4484     {
4485       /* Add this bfd to the loaded list.  */
4486       struct elf_link_loaded_list *n;
4487
4488       n = bfd_alloc (abfd, sizeof (struct elf_link_loaded_list));
4489       if (n == NULL)
4490         goto error_return;
4491       n->abfd = abfd;
4492       n->next = htab->loaded;
4493       htab->loaded = n;
4494     }
4495
4496   return TRUE;
4497
4498  error_free_vers:
4499   if (old_tab != NULL)
4500     free (old_tab);
4501   if (nondeflt_vers != NULL)
4502     free (nondeflt_vers);
4503   if (extversym != NULL)
4504     free (extversym);
4505  error_free_sym:
4506   if (isymbuf != NULL)
4507     free (isymbuf);
4508  error_return:
4509   return FALSE;
4510 }
4511
4512 /* Return the linker hash table entry of a symbol that might be
4513    satisfied by an archive symbol.  Return -1 on error.  */
4514
4515 struct elf_link_hash_entry *
4516 _bfd_elf_archive_symbol_lookup (bfd *abfd,
4517                                 struct bfd_link_info *info,
4518                                 const char *name)
4519 {
4520   struct elf_link_hash_entry *h;
4521   char *p, *copy;
4522   size_t len, first;
4523
4524   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
4525   if (h != NULL)
4526     return h;
4527
4528   /* If this is a default version (the name contains @@), look up the
4529      symbol again with only one `@' as well as without the version.
4530      The effect is that references to the symbol with and without the
4531      version will be matched by the default symbol in the archive.  */
4532
4533   p = strchr (name, ELF_VER_CHR);
4534   if (p == NULL || p[1] != ELF_VER_CHR)
4535     return h;
4536
4537   /* First check with only one `@'.  */
4538   len = strlen (name);
4539   copy = bfd_alloc (abfd, len);
4540   if (copy == NULL)
4541     return (struct elf_link_hash_entry *) 0 - 1;
4542
4543   first = p - name + 1;
4544   memcpy (copy, name, first);
4545   memcpy (copy + first, name + first + 1, len - first);
4546
4547   h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, FALSE);
4548   if (h == NULL)
4549     {
4550       /* We also need to check references to the symbol without the
4551          version.  */
4552       copy[first - 1] = '\0';
4553       h = elf_link_hash_lookup (elf_hash_table (info), copy,
4554                                 FALSE, FALSE, FALSE);
4555     }
4556
4557   bfd_release (abfd, copy);
4558   return h;
4559 }
4560
4561 /* Add symbols from an ELF archive file to the linker hash table.  We
4562    don't use _bfd_generic_link_add_archive_symbols because of a
4563    problem which arises on UnixWare.  The UnixWare libc.so is an
4564    archive which includes an entry libc.so.1 which defines a bunch of
4565    symbols.  The libc.so archive also includes a number of other
4566    object files, which also define symbols, some of which are the same
4567    as those defined in libc.so.1.  Correct linking requires that we
4568    consider each object file in turn, and include it if it defines any
4569    symbols we need.  _bfd_generic_link_add_archive_symbols does not do
4570    this; it looks through the list of undefined symbols, and includes
4571    any object file which defines them.  When this algorithm is used on
4572    UnixWare, it winds up pulling in libc.so.1 early and defining a
4573    bunch of symbols.  This means that some of the other objects in the
4574    archive are not included in the link, which is incorrect since they
4575    precede libc.so.1 in the archive.
4576
4577    Fortunately, ELF archive handling is simpler than that done by
4578    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
4579    oddities.  In ELF, if we find a symbol in the archive map, and the
4580    symbol is currently undefined, we know that we must pull in that
4581    object file.
4582
4583    Unfortunately, we do have to make multiple passes over the symbol
4584    table until nothing further is resolved.  */
4585
4586 static bfd_boolean
4587 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
4588 {
4589   symindex c;
4590   bfd_boolean *defined = NULL;
4591   bfd_boolean *included = NULL;
4592   carsym *symdefs;
4593   bfd_boolean loop;
4594   bfd_size_type amt;
4595   const struct elf_backend_data *bed;
4596   struct elf_link_hash_entry * (*archive_symbol_lookup)
4597     (bfd *, struct bfd_link_info *, const char *);
4598
4599   if (! bfd_has_map (abfd))
4600     {
4601       /* An empty archive is a special case.  */
4602       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
4603         return TRUE;
4604       bfd_set_error (bfd_error_no_armap);
4605       return FALSE;
4606     }
4607
4608   /* Keep track of all symbols we know to be already defined, and all
4609      files we know to be already included.  This is to speed up the
4610      second and subsequent passes.  */
4611   c = bfd_ardata (abfd)->symdef_count;
4612   if (c == 0)
4613     return TRUE;
4614   amt = c;
4615   amt *= sizeof (bfd_boolean);
4616   defined = bfd_zmalloc (amt);
4617   included = bfd_zmalloc (amt);
4618   if (defined == NULL || included == NULL)
4619     goto error_return;
4620
4621   symdefs = bfd_ardata (abfd)->symdefs;
4622   bed = get_elf_backend_data (abfd);
4623   archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup;
4624
4625   do
4626     {
4627       file_ptr last;
4628       symindex i;
4629       carsym *symdef;
4630       carsym *symdefend;
4631
4632       loop = FALSE;
4633       last = -1;
4634
4635       symdef = symdefs;
4636       symdefend = symdef + c;
4637       for (i = 0; symdef < symdefend; symdef++, i++)
4638         {
4639           struct elf_link_hash_entry *h;
4640           bfd *element;
4641           struct bfd_link_hash_entry *undefs_tail;
4642           symindex mark;
4643
4644           if (defined[i] || included[i])
4645             continue;
4646           if (symdef->file_offset == last)
4647             {
4648               included[i] = TRUE;
4649               continue;
4650             }
4651
4652           h = archive_symbol_lookup (abfd, info, symdef->name);
4653           if (h == (struct elf_link_hash_entry *) 0 - 1)
4654             goto error_return;
4655
4656           if (h == NULL)
4657             continue;
4658
4659           if (h->root.type == bfd_link_hash_common)
4660             {
4661               /* We currently have a common symbol.  The archive map contains
4662                  a reference to this symbol, so we may want to include it.  We
4663                  only want to include it however, if this archive element
4664                  contains a definition of the symbol, not just another common
4665                  declaration of it.
4666
4667                  Unfortunately some archivers (including GNU ar) will put
4668                  declarations of common symbols into their archive maps, as
4669                  well as real definitions, so we cannot just go by the archive
4670                  map alone.  Instead we must read in the element's symbol
4671                  table and check that to see what kind of symbol definition
4672                  this is.  */
4673               if (! elf_link_is_defined_archive_symbol (abfd, symdef))
4674                 continue;
4675             }
4676           else if (h->root.type != bfd_link_hash_undefined)
4677             {
4678               if (h->root.type != bfd_link_hash_undefweak)
4679                 defined[i] = TRUE;
4680               continue;
4681             }
4682
4683           /* We need to include this archive member.  */
4684           element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
4685           if (element == NULL)
4686             goto error_return;
4687
4688           if (! bfd_check_format (element, bfd_object))
4689             goto error_return;
4690
4691           /* Doublecheck that we have not included this object
4692              already--it should be impossible, but there may be
4693              something wrong with the archive.  */
4694           if (element->archive_pass != 0)
4695             {
4696               bfd_set_error (bfd_error_bad_value);
4697               goto error_return;
4698             }
4699           element->archive_pass = 1;
4700
4701           undefs_tail = info->hash->undefs_tail;
4702
4703           if (! (*info->callbacks->add_archive_element) (info, element,
4704                                                          symdef->name))
4705             goto error_return;
4706           if (! bfd_link_add_symbols (element, info))
4707             goto error_return;
4708
4709           /* If there are any new undefined symbols, we need to make
4710              another pass through the archive in order to see whether
4711              they can be defined.  FIXME: This isn't perfect, because
4712              common symbols wind up on undefs_tail and because an
4713              undefined symbol which is defined later on in this pass
4714              does not require another pass.  This isn't a bug, but it
4715              does make the code less efficient than it could be.  */
4716           if (undefs_tail != info->hash->undefs_tail)
4717             loop = TRUE;
4718
4719           /* Look backward to mark all symbols from this object file
4720              which we have already seen in this pass.  */
4721           mark = i;
4722           do
4723             {
4724               included[mark] = TRUE;
4725               if (mark == 0)
4726                 break;
4727               --mark;
4728             }
4729           while (symdefs[mark].file_offset == symdef->file_offset);
4730
4731           /* We mark subsequent symbols from this object file as we go
4732              on through the loop.  */
4733           last = symdef->file_offset;
4734         }
4735     }
4736   while (loop);
4737
4738   free (defined);
4739   free (included);
4740
4741   return TRUE;
4742
4743  error_return:
4744   if (defined != NULL)
4745     free (defined);
4746   if (included != NULL)
4747     free (included);
4748   return FALSE;
4749 }
4750
4751 /* Given an ELF BFD, add symbols to the global hash table as
4752    appropriate.  */
4753
4754 bfd_boolean
4755 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
4756 {
4757   switch (bfd_get_format (abfd))
4758     {
4759     case bfd_object:
4760       return elf_link_add_object_symbols (abfd, info);
4761     case bfd_archive:
4762       return elf_link_add_archive_symbols (abfd, info);
4763     default:
4764       bfd_set_error (bfd_error_wrong_format);
4765       return FALSE;
4766     }
4767 }
4768 \f
4769 /* This function will be called though elf_link_hash_traverse to store
4770    all hash value of the exported symbols in an array.  */
4771
4772 static bfd_boolean
4773 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
4774 {
4775   unsigned long **valuep = data;
4776   const char *name;
4777   char *p;
4778   unsigned long ha;
4779   char *alc = NULL;
4780
4781   if (h->root.type == bfd_link_hash_warning)
4782     h = (struct elf_link_hash_entry *) h->root.u.i.link;
4783
4784   /* Ignore indirect symbols.  These are added by the versioning code.  */
4785   if (h->dynindx == -1)
4786     return TRUE;
4787
4788   name = h->root.root.string;
4789   p = strchr (name, ELF_VER_CHR);
4790   if (p != NULL)
4791     {
4792       alc = bfd_malloc (p - name + 1);
4793       memcpy (alc, name, p - name);
4794       alc[p - name] = '\0';
4795       name = alc;
4796     }
4797
4798   /* Compute the hash value.  */
4799   ha = bfd_elf_hash (name);
4800
4801   /* Store the found hash value in the array given as the argument.  */
4802   *(*valuep)++ = ha;
4803
4804   /* And store it in the struct so that we can put it in the hash table
4805      later.  */
4806   h->u.elf_hash_value = ha;
4807
4808   if (alc != NULL)
4809     free (alc);
4810
4811   return TRUE;
4812 }
4813
4814 /* Array used to determine the number of hash table buckets to use
4815    based on the number of symbols there are.  If there are fewer than
4816    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
4817    fewer than 37 we use 17 buckets, and so forth.  We never use more
4818    than 32771 buckets.  */
4819
4820 static const size_t elf_buckets[] =
4821 {
4822   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
4823   16411, 32771, 0
4824 };
4825
4826 /* Compute bucket count for hashing table.  We do not use a static set
4827    of possible tables sizes anymore.  Instead we determine for all
4828    possible reasonable sizes of the table the outcome (i.e., the
4829    number of collisions etc) and choose the best solution.  The
4830    weighting functions are not too simple to allow the table to grow
4831    without bounds.  Instead one of the weighting factors is the size.
4832    Therefore the result is always a good payoff between few collisions
4833    (= short chain lengths) and table size.  */
4834 static size_t
4835 compute_bucket_count (struct bfd_link_info *info)
4836 {
4837   size_t dynsymcount = elf_hash_table (info)->dynsymcount;
4838   size_t best_size = 0;
4839   unsigned long int *hashcodes;
4840   unsigned long int *hashcodesp;
4841   unsigned long int i;
4842   bfd_size_type amt;
4843
4844   /* Compute the hash values for all exported symbols.  At the same
4845      time store the values in an array so that we could use them for
4846      optimizations.  */
4847   amt = dynsymcount;
4848   amt *= sizeof (unsigned long int);
4849   hashcodes = bfd_malloc (amt);
4850   if (hashcodes == NULL)
4851     return 0;
4852   hashcodesp = hashcodes;
4853
4854   /* Put all hash values in HASHCODES.  */
4855   elf_link_hash_traverse (elf_hash_table (info),
4856                           elf_collect_hash_codes, &hashcodesp);
4857
4858   /* We have a problem here.  The following code to optimize the table
4859      size requires an integer type with more the 32 bits.  If
4860      BFD_HOST_U_64_BIT is set we know about such a type.  */
4861 #ifdef BFD_HOST_U_64_BIT
4862   if (info->optimize)
4863     {
4864       unsigned long int nsyms = hashcodesp - hashcodes;
4865       size_t minsize;
4866       size_t maxsize;
4867       BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
4868       unsigned long int *counts ;
4869       bfd *dynobj = elf_hash_table (info)->dynobj;
4870       const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
4871
4872       /* Possible optimization parameters: if we have NSYMS symbols we say
4873          that the hashing table must at least have NSYMS/4 and at most
4874          2*NSYMS buckets.  */
4875       minsize = nsyms / 4;
4876       if (minsize == 0)
4877         minsize = 1;
4878       best_size = maxsize = nsyms * 2;
4879
4880       /* Create array where we count the collisions in.  We must use bfd_malloc
4881          since the size could be large.  */
4882       amt = maxsize;
4883       amt *= sizeof (unsigned long int);
4884       counts = bfd_malloc (amt);
4885       if (counts == NULL)
4886         {
4887           free (hashcodes);
4888           return 0;
4889         }
4890
4891       /* Compute the "optimal" size for the hash table.  The criteria is a
4892          minimal chain length.  The minor criteria is (of course) the size
4893          of the table.  */
4894       for (i = minsize; i < maxsize; ++i)
4895         {
4896           /* Walk through the array of hashcodes and count the collisions.  */
4897           BFD_HOST_U_64_BIT max;
4898           unsigned long int j;
4899           unsigned long int fact;
4900
4901           memset (counts, '\0', i * sizeof (unsigned long int));
4902
4903           /* Determine how often each hash bucket is used.  */
4904           for (j = 0; j < nsyms; ++j)
4905             ++counts[hashcodes[j] % i];
4906
4907           /* For the weight function we need some information about the
4908              pagesize on the target.  This is information need not be 100%
4909              accurate.  Since this information is not available (so far) we
4910              define it here to a reasonable default value.  If it is crucial
4911              to have a better value some day simply define this value.  */
4912 # ifndef BFD_TARGET_PAGESIZE
4913 #  define BFD_TARGET_PAGESIZE   (4096)
4914 # endif
4915
4916           /* We in any case need 2 + NSYMS entries for the size values and
4917              the chains.  */
4918           max = (2 + nsyms) * (bed->s->arch_size / 8);
4919
4920 # if 1
4921           /* Variant 1: optimize for short chains.  We add the squares
4922              of all the chain lengths (which favors many small chain
4923              over a few long chains).  */
4924           for (j = 0; j < i; ++j)
4925             max += counts[j] * counts[j];
4926
4927           /* This adds penalties for the overall size of the table.  */
4928           fact = i / (BFD_TARGET_PAGESIZE / (bed->s->arch_size / 8)) + 1;
4929           max *= fact * fact;
4930 # else
4931           /* Variant 2: Optimize a lot more for small table.  Here we
4932              also add squares of the size but we also add penalties for
4933              empty slots (the +1 term).  */
4934           for (j = 0; j < i; ++j)
4935             max += (1 + counts[j]) * (1 + counts[j]);
4936
4937           /* The overall size of the table is considered, but not as
4938              strong as in variant 1, where it is squared.  */
4939           fact = i / (BFD_TARGET_PAGESIZE / (bed->s->arch_size / 8)) + 1;
4940           max *= fact;
4941 # endif
4942
4943           /* Compare with current best results.  */
4944           if (max < best_chlen)
4945             {
4946               best_chlen = max;
4947               best_size = i;
4948             }
4949         }
4950
4951       free (counts);
4952     }
4953   else
4954 #endif /* defined (BFD_HOST_U_64_BIT) */
4955     {
4956       /* This is the fallback solution if no 64bit type is available or if we
4957          are not supposed to spend much time on optimizations.  We select the
4958          bucket count using a fixed set of numbers.  */
4959       for (i = 0; elf_buckets[i] != 0; i++)
4960         {
4961           best_size = elf_buckets[i];
4962           if (dynsymcount < elf_buckets[i + 1])
4963             break;
4964         }
4965     }
4966
4967   /* Free the arrays we needed.  */
4968   free (hashcodes);
4969
4970   return best_size;
4971 }
4972
4973 /* Set up the sizes and contents of the ELF dynamic sections.  This is
4974    called by the ELF linker emulation before_allocation routine.  We
4975    must set the sizes of the sections before the linker sets the
4976    addresses of the various sections.  */
4977
4978 bfd_boolean
4979 bfd_elf_size_dynamic_sections (bfd *output_bfd,
4980                                const char *soname,
4981                                const char *rpath,
4982                                const char *filter_shlib,
4983                                const char * const *auxiliary_filters,
4984                                struct bfd_link_info *info,
4985                                asection **sinterpptr,
4986                                struct bfd_elf_version_tree *verdefs)
4987 {
4988   bfd_size_type soname_indx;
4989   bfd *dynobj;
4990   const struct elf_backend_data *bed;
4991   struct elf_assign_sym_version_info asvinfo;
4992
4993   *sinterpptr = NULL;
4994
4995   soname_indx = (bfd_size_type) -1;
4996
4997   if (!is_elf_hash_table (info->hash))
4998     return TRUE;
4999
5000   elf_tdata (output_bfd)->relro = info->relro;
5001   if (info->execstack)
5002     elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
5003   else if (info->noexecstack)
5004     elf_tdata (output_bfd)->stack_flags = PF_R | PF_W;
5005   else
5006     {
5007       bfd *inputobj;
5008       asection *notesec = NULL;
5009       int exec = 0;
5010
5011       for (inputobj = info->input_bfds;
5012            inputobj;
5013            inputobj = inputobj->link_next)
5014         {
5015           asection *s;
5016
5017           if (inputobj->flags & (DYNAMIC | BFD_LINKER_CREATED))
5018             continue;
5019           s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
5020           if (s)
5021             {
5022               if (s->flags & SEC_CODE)
5023                 exec = PF_X;
5024               notesec = s;
5025             }
5026           else
5027             exec = PF_X;
5028         }
5029       if (notesec)
5030         {
5031           elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | exec;
5032           if (exec && info->relocatable
5033               && notesec->output_section != bfd_abs_section_ptr)
5034             notesec->output_section->flags |= SEC_CODE;
5035         }
5036     }
5037
5038   /* Any syms created from now on start with -1 in
5039      got.refcount/offset and plt.refcount/offset.  */
5040   elf_hash_table (info)->init_got_refcount
5041     = elf_hash_table (info)->init_got_offset;
5042   elf_hash_table (info)->init_plt_refcount
5043     = elf_hash_table (info)->init_plt_offset;
5044
5045   /* The backend may have to create some sections regardless of whether
5046      we're dynamic or not.  */
5047   bed = get_elf_backend_data (output_bfd);
5048   if (bed->elf_backend_always_size_sections
5049       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
5050     return FALSE;
5051
5052   dynobj = elf_hash_table (info)->dynobj;
5053
5054   /* If there were no dynamic objects in the link, there is nothing to
5055      do here.  */
5056   if (dynobj == NULL)
5057     return TRUE;
5058
5059   if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
5060     return FALSE;
5061
5062   if (elf_hash_table (info)->dynamic_sections_created)
5063     {
5064       struct elf_info_failed eif;
5065       struct elf_link_hash_entry *h;
5066       asection *dynstr;
5067       struct bfd_elf_version_tree *t;
5068       struct bfd_elf_version_expr *d;
5069       asection *s;
5070       bfd_boolean all_defined;
5071
5072       *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
5073       BFD_ASSERT (*sinterpptr != NULL || !info->executable);
5074
5075       if (soname != NULL)
5076         {
5077           soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5078                                              soname, TRUE);
5079           if (soname_indx == (bfd_size_type) -1
5080               || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
5081             return FALSE;
5082         }
5083
5084       if (info->symbolic)
5085         {
5086           if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
5087             return FALSE;
5088           info->flags |= DF_SYMBOLIC;
5089         }
5090
5091       if (rpath != NULL)
5092         {
5093           bfd_size_type indx;
5094
5095           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
5096                                       TRUE);
5097           if (indx == (bfd_size_type) -1
5098               || !_bfd_elf_add_dynamic_entry (info, DT_RPATH, indx))
5099             return FALSE;
5100
5101           if  (info->new_dtags)
5102             {
5103               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx);
5104               if (!_bfd_elf_add_dynamic_entry (info, DT_RUNPATH, indx))
5105                 return FALSE;
5106             }
5107         }
5108
5109       if (filter_shlib != NULL)
5110         {
5111           bfd_size_type indx;
5112
5113           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5114                                       filter_shlib, TRUE);
5115           if (indx == (bfd_size_type) -1
5116               || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
5117             return FALSE;
5118         }
5119
5120       if (auxiliary_filters != NULL)
5121         {
5122           const char * const *p;
5123
5124           for (p = auxiliary_filters; *p != NULL; p++)
5125             {
5126               bfd_size_type indx;
5127
5128               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5129                                           *p, TRUE);
5130               if (indx == (bfd_size_type) -1
5131                   || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
5132                 return FALSE;
5133             }
5134         }
5135
5136       eif.info = info;
5137       eif.verdefs = verdefs;
5138       eif.failed = FALSE;
5139
5140       /* If we are supposed to export all symbols into the dynamic symbol
5141          table (this is not the normal case), then do so.  */
5142       if (info->export_dynamic)
5143         {
5144           elf_link_hash_traverse (elf_hash_table (info),
5145                                   _bfd_elf_export_symbol,
5146                                   &eif);
5147           if (eif.failed)
5148             return FALSE;
5149         }
5150
5151       /* Make all global versions with definition.  */
5152       for (t = verdefs; t != NULL; t = t->next)
5153         for (d = t->globals.list; d != NULL; d = d->next)
5154           if (!d->symver && d->symbol)
5155             {
5156               const char *verstr, *name;
5157               size_t namelen, verlen, newlen;
5158               char *newname, *p;
5159               struct elf_link_hash_entry *newh;
5160
5161               name = d->symbol;
5162               namelen = strlen (name);
5163               verstr = t->name;
5164               verlen = strlen (verstr);
5165               newlen = namelen + verlen + 3;
5166
5167               newname = bfd_malloc (newlen);
5168               if (newname == NULL)
5169                 return FALSE;
5170               memcpy (newname, name, namelen);
5171
5172               /* Check the hidden versioned definition.  */
5173               p = newname + namelen;
5174               *p++ = ELF_VER_CHR;
5175               memcpy (p, verstr, verlen + 1);
5176               newh = elf_link_hash_lookup (elf_hash_table (info),
5177                                            newname, FALSE, FALSE,
5178                                            FALSE);
5179               if (newh == NULL
5180                   || (newh->root.type != bfd_link_hash_defined
5181                       && newh->root.type != bfd_link_hash_defweak))
5182                 {
5183                   /* Check the default versioned definition.  */
5184                   *p++ = ELF_VER_CHR;
5185                   memcpy (p, verstr, verlen + 1);
5186                   newh = elf_link_hash_lookup (elf_hash_table (info),
5187                                                newname, FALSE, FALSE,
5188                                                FALSE);
5189                 }
5190               free (newname);
5191
5192               /* Mark this version if there is a definition and it is
5193                  not defined in a shared object.  */
5194               if (newh != NULL
5195                   && !newh->def_dynamic
5196                   && (newh->root.type == bfd_link_hash_defined
5197                       || newh->root.type == bfd_link_hash_defweak))
5198                 d->symver = 1;
5199             }
5200
5201       /* Attach all the symbols to their version information.  */
5202       asvinfo.output_bfd = output_bfd;
5203       asvinfo.info = info;
5204       asvinfo.verdefs = verdefs;
5205       asvinfo.failed = FALSE;
5206
5207       elf_link_hash_traverse (elf_hash_table (info),
5208                               _bfd_elf_link_assign_sym_version,
5209                               &asvinfo);
5210       if (asvinfo.failed)
5211         return FALSE;
5212
5213       if (!info->allow_undefined_version)
5214         {
5215           /* Check if all global versions have a definition.  */
5216           all_defined = TRUE;
5217           for (t = verdefs; t != NULL; t = t->next)
5218             for (d = t->globals.list; d != NULL; d = d->next)
5219               if (!d->symver && !d->script)
5220                 {
5221                   (*_bfd_error_handler)
5222                     (_("%s: undefined version: %s"),
5223                      d->pattern, t->name);
5224                   all_defined = FALSE;
5225                 }
5226
5227           if (!all_defined)
5228             {
5229               bfd_set_error (bfd_error_bad_value);
5230               return FALSE;
5231             }
5232         }
5233
5234       /* Find all symbols which were defined in a dynamic object and make
5235          the backend pick a reasonable value for them.  */
5236       elf_link_hash_traverse (elf_hash_table (info),
5237                               _bfd_elf_adjust_dynamic_symbol,
5238                               &eif);
5239       if (eif.failed)
5240         return FALSE;
5241
5242       /* Add some entries to the .dynamic section.  We fill in some of the
5243          values later, in bfd_elf_final_link, but we must add the entries
5244          now so that we know the final size of the .dynamic section.  */
5245
5246       /* If there are initialization and/or finalization functions to
5247          call then add the corresponding DT_INIT/DT_FINI entries.  */
5248       h = (info->init_function
5249            ? elf_link_hash_lookup (elf_hash_table (info),
5250                                    info->init_function, FALSE,
5251                                    FALSE, FALSE)
5252            : NULL);
5253       if (h != NULL
5254           && (h->ref_regular
5255               || h->def_regular))
5256         {
5257           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
5258             return FALSE;
5259         }
5260       h = (info->fini_function
5261            ? elf_link_hash_lookup (elf_hash_table (info),
5262                                    info->fini_function, FALSE,
5263                                    FALSE, FALSE)
5264            : NULL);
5265       if (h != NULL
5266           && (h->ref_regular
5267               || h->def_regular))
5268         {
5269           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
5270             return FALSE;
5271         }
5272
5273       s = bfd_get_section_by_name (output_bfd, ".preinit_array");
5274       if (s != NULL && s->linker_has_input)
5275         {
5276           /* DT_PREINIT_ARRAY is not allowed in shared library.  */
5277           if (! info->executable)
5278             {
5279               bfd *sub;
5280               asection *o;
5281
5282               for (sub = info->input_bfds; sub != NULL;
5283                    sub = sub->link_next)
5284                 for (o = sub->sections; o != NULL; o = o->next)
5285                   if (elf_section_data (o)->this_hdr.sh_type
5286                       == SHT_PREINIT_ARRAY)
5287                     {
5288                       (*_bfd_error_handler)
5289                         (_("%B: .preinit_array section is not allowed in DSO"),
5290                          sub);
5291                       break;
5292                     }
5293
5294               bfd_set_error (bfd_error_nonrepresentable_section);
5295               return FALSE;
5296             }
5297
5298           if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
5299               || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
5300             return FALSE;
5301         }
5302       s = bfd_get_section_by_name (output_bfd, ".init_array");
5303       if (s != NULL && s->linker_has_input)
5304         {
5305           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
5306               || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
5307             return FALSE;
5308         }
5309       s = bfd_get_section_by_name (output_bfd, ".fini_array");
5310       if (s != NULL && s->linker_has_input)
5311         {
5312           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
5313               || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
5314             return FALSE;
5315         }
5316
5317       dynstr = bfd_get_section_by_name (dynobj, ".dynstr");
5318       /* If .dynstr is excluded from the link, we don't want any of
5319          these tags.  Strictly, we should be checking each section
5320          individually;  This quick check covers for the case where
5321          someone does a /DISCARD/ : { *(*) }.  */
5322       if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
5323         {
5324           bfd_size_type strsize;
5325
5326           strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
5327           if (!_bfd_elf_add_dynamic_entry (info, DT_HASH, 0)
5328               || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
5329               || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
5330               || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
5331               || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
5332                                               bed->s->sizeof_sym))
5333             return FALSE;
5334         }
5335     }
5336
5337   /* The backend must work out the sizes of all the other dynamic
5338      sections.  */
5339   if (bed->elf_backend_size_dynamic_sections
5340       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
5341     return FALSE;
5342
5343   if (elf_hash_table (info)->dynamic_sections_created)
5344     {
5345       unsigned long section_sym_count;
5346       asection *s;
5347
5348       /* Set up the version definition section.  */
5349       s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
5350       BFD_ASSERT (s != NULL);
5351
5352       /* We may have created additional version definitions if we are
5353          just linking a regular application.  */
5354       verdefs = asvinfo.verdefs;
5355
5356       /* Skip anonymous version tag.  */
5357       if (verdefs != NULL && verdefs->vernum == 0)
5358         verdefs = verdefs->next;
5359
5360       if (verdefs == NULL && !info->create_default_symver)
5361         s->flags |= SEC_EXCLUDE;
5362       else
5363         {
5364           unsigned int cdefs;
5365           bfd_size_type size;
5366           struct bfd_elf_version_tree *t;
5367           bfd_byte *p;
5368           Elf_Internal_Verdef def;
5369           Elf_Internal_Verdaux defaux;
5370           struct bfd_link_hash_entry *bh;
5371           struct elf_link_hash_entry *h;
5372           const char *name;
5373
5374           cdefs = 0;
5375           size = 0;
5376
5377           /* Make space for the base version.  */
5378           size += sizeof (Elf_External_Verdef);
5379           size += sizeof (Elf_External_Verdaux);
5380           ++cdefs;
5381
5382           /* Make space for the default version.  */
5383           if (info->create_default_symver)
5384             {
5385               size += sizeof (Elf_External_Verdef);
5386               ++cdefs;
5387             }
5388
5389           for (t = verdefs; t != NULL; t = t->next)
5390             {
5391               struct bfd_elf_version_deps *n;
5392
5393               size += sizeof (Elf_External_Verdef);
5394               size += sizeof (Elf_External_Verdaux);
5395               ++cdefs;
5396
5397               for (n = t->deps; n != NULL; n = n->next)
5398                 size += sizeof (Elf_External_Verdaux);
5399             }
5400
5401           s->size = size;
5402           s->contents = bfd_alloc (output_bfd, s->size);
5403           if (s->contents == NULL && s->size != 0)
5404             return FALSE;
5405
5406           /* Fill in the version definition section.  */
5407
5408           p = s->contents;
5409
5410           def.vd_version = VER_DEF_CURRENT;
5411           def.vd_flags = VER_FLG_BASE;
5412           def.vd_ndx = 1;
5413           def.vd_cnt = 1;
5414           if (info->create_default_symver)
5415             {
5416               def.vd_aux = 2 * sizeof (Elf_External_Verdef);
5417               def.vd_next = sizeof (Elf_External_Verdef);
5418             }
5419           else
5420             {
5421               def.vd_aux = sizeof (Elf_External_Verdef);
5422               def.vd_next = (sizeof (Elf_External_Verdef)
5423                              + sizeof (Elf_External_Verdaux));
5424             }
5425
5426           if (soname_indx != (bfd_size_type) -1)
5427             {
5428               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
5429                                       soname_indx);
5430               def.vd_hash = bfd_elf_hash (soname);
5431               defaux.vda_name = soname_indx;
5432               name = soname;
5433             }
5434           else
5435             {
5436               bfd_size_type indx;
5437
5438               name = lbasename (output_bfd->filename);
5439               def.vd_hash = bfd_elf_hash (name);
5440               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5441                                           name, FALSE);
5442               if (indx == (bfd_size_type) -1)
5443                 return FALSE;
5444               defaux.vda_name = indx;
5445             }
5446           defaux.vda_next = 0;
5447
5448           _bfd_elf_swap_verdef_out (output_bfd, &def,
5449                                     (Elf_External_Verdef *) p);
5450           p += sizeof (Elf_External_Verdef);
5451           if (info->create_default_symver)
5452             {
5453               /* Add a symbol representing this version.  */
5454               bh = NULL;
5455               if (! (_bfd_generic_link_add_one_symbol
5456                      (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
5457                       0, NULL, FALSE,
5458                       get_elf_backend_data (dynobj)->collect, &bh)))
5459                 return FALSE;
5460               h = (struct elf_link_hash_entry *) bh;
5461               h->non_elf = 0;
5462               h->def_regular = 1;
5463               h->type = STT_OBJECT;
5464               h->verinfo.vertree = NULL;
5465
5466               if (! bfd_elf_link_record_dynamic_symbol (info, h))
5467                 return FALSE;
5468
5469               /* Create a duplicate of the base version with the same
5470                  aux block, but different flags.  */
5471               def.vd_flags = 0;
5472               def.vd_ndx = 2;
5473               def.vd_aux = sizeof (Elf_External_Verdef);
5474               if (verdefs)
5475                 def.vd_next = (sizeof (Elf_External_Verdef)
5476                                + sizeof (Elf_External_Verdaux));
5477               else
5478                 def.vd_next = 0;
5479               _bfd_elf_swap_verdef_out (output_bfd, &def,
5480                                         (Elf_External_Verdef *) p);
5481               p += sizeof (Elf_External_Verdef);
5482             }
5483           _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
5484                                      (Elf_External_Verdaux *) p);
5485           p += sizeof (Elf_External_Verdaux);
5486
5487           for (t = verdefs; t != NULL; t = t->next)
5488             {
5489               unsigned int cdeps;
5490               struct bfd_elf_version_deps *n;
5491
5492               cdeps = 0;
5493               for (n = t->deps; n != NULL; n = n->next)
5494                 ++cdeps;
5495
5496               /* Add a symbol representing this version.  */
5497               bh = NULL;
5498               if (! (_bfd_generic_link_add_one_symbol
5499                      (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
5500                       0, NULL, FALSE,
5501                       get_elf_backend_data (dynobj)->collect, &bh)))
5502                 return FALSE;
5503               h = (struct elf_link_hash_entry *) bh;
5504               h->non_elf = 0;
5505               h->def_regular = 1;
5506               h->type = STT_OBJECT;
5507               h->verinfo.vertree = t;
5508
5509               if (! bfd_elf_link_record_dynamic_symbol (info, h))
5510                 return FALSE;
5511
5512               def.vd_version = VER_DEF_CURRENT;
5513               def.vd_flags = 0;
5514               if (t->globals.list == NULL
5515                   && t->locals.list == NULL
5516                   && ! t->used)
5517                 def.vd_flags |= VER_FLG_WEAK;
5518               def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1);
5519               def.vd_cnt = cdeps + 1;
5520               def.vd_hash = bfd_elf_hash (t->name);
5521               def.vd_aux = sizeof (Elf_External_Verdef);
5522               def.vd_next = 0;
5523               if (t->next != NULL)
5524                 def.vd_next = (sizeof (Elf_External_Verdef)
5525                                + (cdeps + 1) * sizeof (Elf_External_Verdaux));
5526
5527               _bfd_elf_swap_verdef_out (output_bfd, &def,
5528                                         (Elf_External_Verdef *) p);
5529               p += sizeof (Elf_External_Verdef);
5530
5531               defaux.vda_name = h->dynstr_index;
5532               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
5533                                       h->dynstr_index);
5534               defaux.vda_next = 0;
5535               if (t->deps != NULL)
5536                 defaux.vda_next = sizeof (Elf_External_Verdaux);
5537               t->name_indx = defaux.vda_name;
5538
5539               _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
5540                                          (Elf_External_Verdaux *) p);
5541               p += sizeof (Elf_External_Verdaux);
5542
5543               for (n = t->deps; n != NULL; n = n->next)
5544                 {
5545                   if (n->version_needed == NULL)
5546                     {
5547                       /* This can happen if there was an error in the
5548                          version script.  */
5549                       defaux.vda_name = 0;
5550                     }
5551                   else
5552                     {
5553                       defaux.vda_name = n->version_needed->name_indx;
5554                       _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
5555                                               defaux.vda_name);
5556                     }
5557                   if (n->next == NULL)
5558                     defaux.vda_next = 0;
5559                   else
5560                     defaux.vda_next = sizeof (Elf_External_Verdaux);
5561
5562                   _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
5563                                              (Elf_External_Verdaux *) p);
5564                   p += sizeof (Elf_External_Verdaux);
5565                 }
5566             }
5567
5568           if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
5569               || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
5570             return FALSE;
5571
5572           elf_tdata (output_bfd)->cverdefs = cdefs;
5573         }
5574
5575       if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
5576         {
5577           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
5578             return FALSE;
5579         }
5580       else if (info->flags & DF_BIND_NOW)
5581         {
5582           if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
5583             return FALSE;
5584         }
5585
5586       if (info->flags_1)
5587         {
5588           if (info->executable)
5589             info->flags_1 &= ~ (DF_1_INITFIRST
5590                                 | DF_1_NODELETE
5591                                 | DF_1_NOOPEN);
5592           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
5593             return FALSE;
5594         }
5595
5596       /* Work out the size of the version reference section.  */
5597
5598       s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
5599       BFD_ASSERT (s != NULL);
5600       {
5601         struct elf_find_verdep_info sinfo;
5602
5603         sinfo.output_bfd = output_bfd;
5604         sinfo.info = info;
5605         sinfo.vers = elf_tdata (output_bfd)->cverdefs;
5606         if (sinfo.vers == 0)
5607           sinfo.vers = 1;
5608         sinfo.failed = FALSE;
5609
5610         elf_link_hash_traverse (elf_hash_table (info),
5611                                 _bfd_elf_link_find_version_dependencies,
5612                                 &sinfo);
5613
5614         if (elf_tdata (output_bfd)->verref == NULL)
5615           s->flags |= SEC_EXCLUDE;
5616         else
5617           {
5618             Elf_Internal_Verneed *t;
5619             unsigned int size;
5620             unsigned int crefs;
5621             bfd_byte *p;
5622
5623             /* Build the version definition section.  */
5624             size = 0;
5625             crefs = 0;
5626             for (t = elf_tdata (output_bfd)->verref;
5627                  t != NULL;
5628                  t = t->vn_nextref)
5629               {
5630                 Elf_Internal_Vernaux *a;
5631
5632                 size += sizeof (Elf_External_Verneed);
5633                 ++crefs;
5634                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
5635                   size += sizeof (Elf_External_Vernaux);
5636               }
5637
5638             s->size = size;
5639             s->contents = bfd_alloc (output_bfd, s->size);
5640             if (s->contents == NULL)
5641               return FALSE;
5642
5643             p = s->contents;
5644             for (t = elf_tdata (output_bfd)->verref;
5645                  t != NULL;
5646                  t = t->vn_nextref)
5647               {
5648                 unsigned int caux;
5649                 Elf_Internal_Vernaux *a;
5650                 bfd_size_type indx;
5651
5652                 caux = 0;
5653                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
5654                   ++caux;
5655
5656                 t->vn_version = VER_NEED_CURRENT;
5657                 t->vn_cnt = caux;
5658                 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5659                                             elf_dt_name (t->vn_bfd) != NULL
5660                                             ? elf_dt_name (t->vn_bfd)
5661                                             : lbasename (t->vn_bfd->filename),
5662                                             FALSE);
5663                 if (indx == (bfd_size_type) -1)
5664                   return FALSE;
5665                 t->vn_file = indx;
5666                 t->vn_aux = sizeof (Elf_External_Verneed);
5667                 if (t->vn_nextref == NULL)
5668                   t->vn_next = 0;
5669                 else
5670                   t->vn_next = (sizeof (Elf_External_Verneed)
5671                                 + caux * sizeof (Elf_External_Vernaux));
5672
5673                 _bfd_elf_swap_verneed_out (output_bfd, t,
5674                                            (Elf_External_Verneed *) p);
5675                 p += sizeof (Elf_External_Verneed);
5676
5677                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
5678                   {
5679                     a->vna_hash = bfd_elf_hash (a->vna_nodename);
5680                     indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5681                                                 a->vna_nodename, FALSE);
5682                     if (indx == (bfd_size_type) -1)
5683                       return FALSE;
5684                     a->vna_name = indx;
5685                     if (a->vna_nextptr == NULL)
5686                       a->vna_next = 0;
5687                     else
5688                       a->vna_next = sizeof (Elf_External_Vernaux);
5689
5690                     _bfd_elf_swap_vernaux_out (output_bfd, a,
5691                                                (Elf_External_Vernaux *) p);
5692                     p += sizeof (Elf_External_Vernaux);
5693                   }
5694               }
5695
5696             if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
5697                 || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
5698               return FALSE;
5699
5700             elf_tdata (output_bfd)->cverrefs = crefs;
5701           }
5702       }
5703
5704       if ((elf_tdata (output_bfd)->cverrefs == 0
5705            && elf_tdata (output_bfd)->cverdefs == 0)
5706           || _bfd_elf_link_renumber_dynsyms (output_bfd, info,
5707                                              &section_sym_count) == 0)
5708         {
5709           s = bfd_get_section_by_name (dynobj, ".gnu.version");
5710           s->flags |= SEC_EXCLUDE;
5711         }
5712     }
5713   return TRUE;
5714 }
5715
5716 bfd_boolean
5717 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
5718 {
5719   if (!is_elf_hash_table (info->hash))
5720     return TRUE;
5721
5722   if (elf_hash_table (info)->dynamic_sections_created)
5723     {
5724       bfd *dynobj;
5725       const struct elf_backend_data *bed;
5726       asection *s;
5727       bfd_size_type dynsymcount;
5728       unsigned long section_sym_count;
5729       size_t bucketcount = 0;
5730       size_t hash_entry_size;
5731       unsigned int dtagcount;
5732
5733       dynobj = elf_hash_table (info)->dynobj;
5734
5735       /* Assign dynsym indicies.  In a shared library we generate a
5736          section symbol for each output section, which come first.
5737          Next come all of the back-end allocated local dynamic syms,
5738          followed by the rest of the global symbols.  */
5739
5740       dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info,
5741                                                     &section_sym_count);
5742
5743       /* Work out the size of the symbol version section.  */
5744       s = bfd_get_section_by_name (dynobj, ".gnu.version");
5745       BFD_ASSERT (s != NULL);
5746       if (dynsymcount != 0
5747           && (s->flags & SEC_EXCLUDE) == 0)
5748         {
5749           s->size = dynsymcount * sizeof (Elf_External_Versym);
5750           s->contents = bfd_zalloc (output_bfd, s->size);
5751           if (s->contents == NULL)
5752             return FALSE;
5753
5754           if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
5755             return FALSE;
5756         }
5757
5758       /* Set the size of the .dynsym and .hash sections.  We counted
5759          the number of dynamic symbols in elf_link_add_object_symbols.
5760          We will build the contents of .dynsym and .hash when we build
5761          the final symbol table, because until then we do not know the
5762          correct value to give the symbols.  We built the .dynstr
5763          section as we went along in elf_link_add_object_symbols.  */
5764       s = bfd_get_section_by_name (dynobj, ".dynsym");
5765       BFD_ASSERT (s != NULL);
5766       bed = get_elf_backend_data (output_bfd);
5767       s->size = dynsymcount * bed->s->sizeof_sym;
5768
5769       if (dynsymcount != 0)
5770         {
5771           s->contents = bfd_alloc (output_bfd, s->size);
5772           if (s->contents == NULL)
5773             return FALSE;
5774
5775           /* The first entry in .dynsym is a dummy symbol.
5776              Clear all the section syms, in case we don't output them all.  */
5777           ++section_sym_count;
5778           memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
5779         }
5780
5781       /* Compute the size of the hashing table.  As a side effect this
5782          computes the hash values for all the names we export.  */
5783       bucketcount = compute_bucket_count (info);
5784
5785       s = bfd_get_section_by_name (dynobj, ".hash");
5786       BFD_ASSERT (s != NULL);
5787       hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
5788       s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
5789       s->contents = bfd_zalloc (output_bfd, s->size);
5790       if (s->contents == NULL)
5791         return FALSE;
5792
5793       bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
5794       bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
5795                s->contents + hash_entry_size);
5796
5797       elf_hash_table (info)->bucketcount = bucketcount;
5798
5799       s = bfd_get_section_by_name (dynobj, ".dynstr");
5800       BFD_ASSERT (s != NULL);
5801
5802       elf_finalize_dynstr (output_bfd, info);
5803
5804       s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
5805
5806       for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
5807         if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
5808           return FALSE;
5809     }
5810
5811   return TRUE;
5812 }
5813
5814 /* Final phase of ELF linker.  */
5815
5816 /* A structure we use to avoid passing large numbers of arguments.  */
5817
5818 struct elf_final_link_info
5819 {
5820   /* General link information.  */
5821   struct bfd_link_info *info;
5822   /* Output BFD.  */
5823   bfd *output_bfd;
5824   /* Symbol string table.  */
5825   struct bfd_strtab_hash *symstrtab;
5826   /* .dynsym section.  */
5827   asection *dynsym_sec;
5828   /* .hash section.  */
5829   asection *hash_sec;
5830   /* symbol version section (.gnu.version).  */
5831   asection *symver_sec;
5832   /* Buffer large enough to hold contents of any section.  */
5833   bfd_byte *contents;
5834   /* Buffer large enough to hold external relocs of any section.  */
5835   void *external_relocs;
5836   /* Buffer large enough to hold internal relocs of any section.  */
5837   Elf_Internal_Rela *internal_relocs;
5838   /* Buffer large enough to hold external local symbols of any input
5839      BFD.  */
5840   bfd_byte *external_syms;
5841   /* And a buffer for symbol section indices.  */
5842   Elf_External_Sym_Shndx *locsym_shndx;
5843   /* Buffer large enough to hold internal local symbols of any input
5844      BFD.  */
5845   Elf_Internal_Sym *internal_syms;
5846   /* Array large enough to hold a symbol index for each local symbol
5847      of any input BFD.  */
5848   long *indices;
5849   /* Array large enough to hold a section pointer for each local
5850      symbol of any input BFD.  */
5851   asection **sections;
5852   /* Buffer to hold swapped out symbols.  */
5853   bfd_byte *symbuf;
5854   /* And one for symbol section indices.  */
5855   Elf_External_Sym_Shndx *symshndxbuf;
5856   /* Number of swapped out symbols in buffer.  */
5857   size_t symbuf_count;
5858   /* Number of symbols which fit in symbuf.  */
5859   size_t symbuf_size;
5860   /* And same for symshndxbuf.  */
5861   size_t shndxbuf_size;
5862 };
5863
5864 /* This struct is used to pass information to elf_link_output_extsym.  */
5865
5866 struct elf_outext_info
5867 {
5868   bfd_boolean failed;
5869   bfd_boolean localsyms;
5870   struct elf_final_link_info *finfo;
5871 };
5872
5873 /* When performing a relocatable link, the input relocations are
5874    preserved.  But, if they reference global symbols, the indices
5875    referenced must be updated.  Update all the relocations in
5876    REL_HDR (there are COUNT of them), using the data in REL_HASH.  */
5877
5878 static void
5879 elf_link_adjust_relocs (bfd *abfd,
5880                         Elf_Internal_Shdr *rel_hdr,
5881                         unsigned int count,
5882                         struct elf_link_hash_entry **rel_hash)
5883 {
5884   unsigned int i;
5885   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5886   bfd_byte *erela;
5887   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
5888   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
5889   bfd_vma r_type_mask;
5890   int r_sym_shift;
5891
5892   if (rel_hdr->sh_entsize == bed->s->sizeof_rel)
5893     {
5894       swap_in = bed->s->swap_reloc_in;
5895       swap_out = bed->s->swap_reloc_out;
5896     }
5897   else if (rel_hdr->sh_entsize == bed->s->sizeof_rela)
5898     {
5899       swap_in = bed->s->swap_reloca_in;
5900       swap_out = bed->s->swap_reloca_out;
5901     }
5902   else
5903     abort ();
5904
5905   if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
5906     abort ();
5907
5908   if (bed->s->arch_size == 32)
5909     {
5910       r_type_mask = 0xff;
5911       r_sym_shift = 8;
5912     }
5913   else
5914     {
5915       r_type_mask = 0xffffffff;
5916       r_sym_shift = 32;
5917     }
5918
5919   erela = rel_hdr->contents;
5920   for (i = 0; i < count; i++, rel_hash++, erela += rel_hdr->sh_entsize)
5921     {
5922       Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
5923       unsigned int j;
5924
5925       if (*rel_hash == NULL)
5926         continue;
5927
5928       BFD_ASSERT ((*rel_hash)->indx >= 0);
5929
5930       (*swap_in) (abfd, erela, irela);
5931       for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
5932         irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
5933                            | (irela[j].r_info & r_type_mask));
5934       (*swap_out) (abfd, irela, erela);
5935     }
5936 }
5937
5938 struct elf_link_sort_rela
5939 {
5940   union {
5941     bfd_vma offset;
5942     bfd_vma sym_mask;
5943   } u;
5944   enum elf_reloc_type_class type;
5945   /* We use this as an array of size int_rels_per_ext_rel.  */
5946   Elf_Internal_Rela rela[1];
5947 };
5948
5949 static int
5950 elf_link_sort_cmp1 (const void *A, const void *B)
5951 {
5952   const struct elf_link_sort_rela *a = A;
5953   const struct elf_link_sort_rela *b = B;
5954   int relativea, relativeb;
5955
5956   relativea = a->type == reloc_class_relative;
5957   relativeb = b->type == reloc_class_relative;
5958
5959   if (relativea < relativeb)
5960     return 1;
5961   if (relativea > relativeb)
5962     return -1;
5963   if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
5964     return -1;
5965   if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
5966     return 1;
5967   if (a->rela->r_offset < b->rela->r_offset)
5968     return -1;
5969   if (a->rela->r_offset > b->rela->r_offset)
5970     return 1;
5971   return 0;
5972 }
5973
5974 static int
5975 elf_link_sort_cmp2 (const void *A, const void *B)
5976 {
5977   const struct elf_link_sort_rela *a = A;
5978   const struct elf_link_sort_rela *b = B;
5979   int copya, copyb;
5980
5981   if (a->u.offset < b->u.offset)
5982     return -1;
5983   if (a->u.offset > b->u.offset)
5984     return 1;
5985   copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt);
5986   copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt);
5987   if (copya < copyb)
5988     return -1;
5989   if (copya > copyb)
5990     return 1;
5991   if (a->rela->r_offset < b->rela->r_offset)
5992     return -1;
5993   if (a->rela->r_offset > b->rela->r_offset)
5994     return 1;
5995   return 0;
5996 }
5997
5998 static size_t
5999 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
6000 {
6001   asection *reldyn;
6002   bfd_size_type count, size;
6003   size_t i, ret, sort_elt, ext_size;
6004   bfd_byte *sort, *s_non_relative, *p;
6005   struct elf_link_sort_rela *sq;
6006   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6007   int i2e = bed->s->int_rels_per_ext_rel;
6008   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
6009   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
6010   struct bfd_link_order *lo;
6011   bfd_vma r_sym_mask;
6012
6013   reldyn = bfd_get_section_by_name (abfd, ".rela.dyn");
6014   if (reldyn == NULL || reldyn->size == 0)
6015     {
6016       reldyn = bfd_get_section_by_name (abfd, ".rel.dyn");
6017       if (reldyn == NULL || reldyn->size == 0)
6018         return 0;
6019       ext_size = bed->s->sizeof_rel;
6020       swap_in = bed->s->swap_reloc_in;
6021       swap_out = bed->s->swap_reloc_out;
6022     }
6023   else
6024     {
6025       ext_size = bed->s->sizeof_rela;
6026       swap_in = bed->s->swap_reloca_in;
6027       swap_out = bed->s->swap_reloca_out;
6028     }
6029   count = reldyn->size / ext_size;
6030
6031   size = 0;
6032   for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next)
6033     if (lo->type == bfd_indirect_link_order)
6034       {
6035         asection *o = lo->u.indirect.section;
6036         size += o->size;
6037       }
6038
6039   if (size != reldyn->size)
6040     return 0;
6041
6042   sort_elt = (sizeof (struct elf_link_sort_rela)
6043               + (i2e - 1) * sizeof (Elf_Internal_Rela));
6044   sort = bfd_zmalloc (sort_elt * count);
6045   if (sort == NULL)
6046     {
6047       (*info->callbacks->warning)
6048         (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
6049       return 0;
6050     }
6051
6052   if (bed->s->arch_size == 32)
6053     r_sym_mask = ~(bfd_vma) 0xff;
6054   else
6055     r_sym_mask = ~(bfd_vma) 0xffffffff;
6056
6057   for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next)
6058     if (lo->type == bfd_indirect_link_order)
6059       {
6060         bfd_byte *erel, *erelend;
6061         asection *o = lo->u.indirect.section;
6062
6063         if (o->contents == NULL && o->size != 0)
6064           {
6065             /* This is a reloc section that is being handled as a normal
6066                section.  See bfd_section_from_shdr.  We can't combine
6067                relocs in this case.  */
6068             free (sort);
6069             return 0;
6070           }
6071         erel = o->contents;
6072         erelend = o->contents + o->size;
6073         p = sort + o->output_offset / ext_size * sort_elt;
6074         while (erel < erelend)
6075           {
6076             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
6077             (*swap_in) (abfd, erel, s->rela);
6078             s->type = (*bed->elf_backend_reloc_type_class) (s->rela);
6079             s->u.sym_mask = r_sym_mask;
6080             p += sort_elt;
6081             erel += ext_size;
6082           }
6083       }
6084
6085   qsort (sort, count, sort_elt, elf_link_sort_cmp1);
6086
6087   for (i = 0, p = sort; i < count; i++, p += sort_elt)
6088     {
6089       struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
6090       if (s->type != reloc_class_relative)
6091         break;
6092     }
6093   ret = i;
6094   s_non_relative = p;
6095
6096   sq = (struct elf_link_sort_rela *) s_non_relative;
6097   for (; i < count; i++, p += sort_elt)
6098     {
6099       struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
6100       if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
6101         sq = sp;
6102       sp->u.offset = sq->rela->r_offset;
6103     }
6104
6105   qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
6106
6107   for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next)
6108     if (lo->type == bfd_indirect_link_order)
6109       {
6110         bfd_byte *erel, *erelend;
6111         asection *o = lo->u.indirect.section;
6112
6113         erel = o->contents;
6114         erelend = o->contents + o->size;
6115         p = sort + o->output_offset / ext_size * sort_elt;
6116         while (erel < erelend)
6117           {
6118             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
6119             (*swap_out) (abfd, s->rela, erel);
6120             p += sort_elt;
6121             erel += ext_size;
6122           }
6123       }
6124
6125   free (sort);
6126   *psec = reldyn;
6127   return ret;
6128 }
6129
6130 /* Flush the output symbols to the file.  */
6131
6132 static bfd_boolean
6133 elf_link_flush_output_syms (struct elf_final_link_info *finfo,
6134                             const struct elf_backend_data *bed)
6135 {
6136   if (finfo->symbuf_count > 0)
6137     {
6138       Elf_Internal_Shdr *hdr;
6139       file_ptr pos;
6140       bfd_size_type amt;
6141
6142       hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr;
6143       pos = hdr->sh_offset + hdr->sh_size;
6144       amt = finfo->symbuf_count * bed->s->sizeof_sym;
6145       if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0
6146           || bfd_bwrite (finfo->symbuf, amt, finfo->output_bfd) != amt)
6147         return FALSE;
6148
6149       hdr->sh_size += amt;
6150       finfo->symbuf_count = 0;
6151     }
6152
6153   return TRUE;
6154 }
6155
6156 /* Add a symbol to the output symbol table.  */
6157
6158 static bfd_boolean
6159 elf_link_output_sym (struct elf_final_link_info *finfo,
6160                      const char *name,
6161                      Elf_Internal_Sym *elfsym,
6162                      asection *input_sec,
6163                      struct elf_link_hash_entry *h)
6164 {
6165   bfd_byte *dest;
6166   Elf_External_Sym_Shndx *destshndx;
6167   bfd_boolean (*output_symbol_hook)
6168     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
6169      struct elf_link_hash_entry *);
6170   const struct elf_backend_data *bed;
6171
6172   bed = get_elf_backend_data (finfo->output_bfd);
6173   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
6174   if (output_symbol_hook != NULL)
6175     {
6176       if (! (*output_symbol_hook) (finfo->info, name, elfsym, input_sec, h))
6177         return FALSE;
6178     }
6179
6180   if (name == NULL || *name == '\0')
6181     elfsym->st_name = 0;
6182   else if (input_sec->flags & SEC_EXCLUDE)
6183     elfsym->st_name = 0;
6184   else
6185     {
6186       elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
6187                                                             name, TRUE, FALSE);
6188       if (elfsym->st_name == (unsigned long) -1)
6189         return FALSE;
6190     }
6191
6192   if (finfo->symbuf_count >= finfo->symbuf_size)
6193     {
6194       if (! elf_link_flush_output_syms (finfo, bed))
6195         return FALSE;
6196     }
6197
6198   dest = finfo->symbuf + finfo->symbuf_count * bed->s->sizeof_sym;
6199   destshndx = finfo->symshndxbuf;
6200   if (destshndx != NULL)
6201     {
6202       if (bfd_get_symcount (finfo->output_bfd) >= finfo->shndxbuf_size)
6203         {
6204           bfd_size_type amt;
6205
6206           amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
6207           finfo->symshndxbuf = destshndx = bfd_realloc (destshndx, amt * 2);
6208           if (destshndx == NULL)
6209             return FALSE;
6210           memset ((char *) destshndx + amt, 0, amt);
6211           finfo->shndxbuf_size *= 2;
6212         }
6213       destshndx += bfd_get_symcount (finfo->output_bfd);
6214     }
6215
6216   bed->s->swap_symbol_out (finfo->output_bfd, elfsym, dest, destshndx);
6217   finfo->symbuf_count += 1;
6218   bfd_get_symcount (finfo->output_bfd) += 1;
6219
6220   return TRUE;
6221 }
6222
6223 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
6224
6225 static bfd_boolean
6226 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
6227 {
6228   if (sym->st_shndx > SHN_HIRESERVE)
6229     {
6230       /* The gABI doesn't support dynamic symbols in output sections
6231          beyond 64k.  */
6232       (*_bfd_error_handler)
6233         (_("%B: Too many sections: %d (>= %d)"),
6234          abfd, bfd_count_sections (abfd), SHN_LORESERVE);
6235       bfd_set_error (bfd_error_nonrepresentable_section);
6236       return FALSE;
6237     }
6238   return TRUE;
6239 }
6240
6241 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
6242    allowing an unsatisfied unversioned symbol in the DSO to match a
6243    versioned symbol that would normally require an explicit version.
6244    We also handle the case that a DSO references a hidden symbol
6245    which may be satisfied by a versioned symbol in another DSO.  */
6246
6247 static bfd_boolean
6248 elf_link_check_versioned_symbol (struct bfd_link_info *info,
6249                                  const struct elf_backend_data *bed,
6250                                  struct elf_link_hash_entry *h)
6251 {
6252   bfd *abfd;
6253   struct elf_link_loaded_list *loaded;
6254
6255   if (!is_elf_hash_table (info->hash))
6256     return FALSE;
6257
6258   switch (h->root.type)
6259     {
6260     default:
6261       abfd = NULL;
6262       break;
6263
6264     case bfd_link_hash_undefined:
6265     case bfd_link_hash_undefweak:
6266       abfd = h->root.u.undef.abfd;
6267       if ((abfd->flags & DYNAMIC) == 0
6268           || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
6269         return FALSE;
6270       break;
6271
6272     case bfd_link_hash_defined:
6273     case bfd_link_hash_defweak:
6274       abfd = h->root.u.def.section->owner;
6275       break;
6276
6277     case bfd_link_hash_common:
6278       abfd = h->root.u.c.p->section->owner;
6279       break;
6280     }
6281   BFD_ASSERT (abfd != NULL);
6282
6283   for (loaded = elf_hash_table (info)->loaded;
6284        loaded != NULL;
6285        loaded = loaded->next)
6286     {
6287       bfd *input;
6288       Elf_Internal_Shdr *hdr;
6289       bfd_size_type symcount;
6290       bfd_size_type extsymcount;
6291       bfd_size_type extsymoff;
6292       Elf_Internal_Shdr *versymhdr;
6293       Elf_Internal_Sym *isym;
6294       Elf_Internal_Sym *isymend;
6295       Elf_Internal_Sym *isymbuf;
6296       Elf_External_Versym *ever;
6297       Elf_External_Versym *extversym;
6298
6299       input = loaded->abfd;
6300
6301       /* We check each DSO for a possible hidden versioned definition.  */
6302       if (input == abfd
6303           || (input->flags & DYNAMIC) == 0
6304           || elf_dynversym (input) == 0)
6305         continue;
6306
6307       hdr = &elf_tdata (input)->dynsymtab_hdr;
6308
6309       symcount = hdr->sh_size / bed->s->sizeof_sym;
6310       if (elf_bad_symtab (input))
6311         {
6312           extsymcount = symcount;
6313           extsymoff = 0;
6314         }
6315       else
6316         {
6317           extsymcount = symcount - hdr->sh_info;
6318           extsymoff = hdr->sh_info;
6319         }
6320
6321       if (extsymcount == 0)
6322         continue;
6323
6324       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
6325                                       NULL, NULL, NULL);
6326       if (isymbuf == NULL)
6327         return FALSE;
6328
6329       /* Read in any version definitions.  */
6330       versymhdr = &elf_tdata (input)->dynversym_hdr;
6331       extversym = bfd_malloc (versymhdr->sh_size);
6332       if (extversym == NULL)
6333         goto error_ret;
6334
6335       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
6336           || (bfd_bread (extversym, versymhdr->sh_size, input)
6337               != versymhdr->sh_size))
6338         {
6339           free (extversym);
6340         error_ret:
6341           free (isymbuf);
6342           return FALSE;
6343         }
6344
6345       ever = extversym + extsymoff;
6346       isymend = isymbuf + extsymcount;
6347       for (isym = isymbuf; isym < isymend; isym++, ever++)
6348         {
6349           const char *name;
6350           Elf_Internal_Versym iver;
6351           unsigned short version_index;
6352
6353           if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
6354               || isym->st_shndx == SHN_UNDEF)
6355             continue;
6356
6357           name = bfd_elf_string_from_elf_section (input,
6358                                                   hdr->sh_link,
6359                                                   isym->st_name);
6360           if (strcmp (name, h->root.root.string) != 0)
6361             continue;
6362
6363           _bfd_elf_swap_versym_in (input, ever, &iver);
6364
6365           if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
6366             {
6367               /* If we have a non-hidden versioned sym, then it should
6368                  have provided a definition for the undefined sym.  */
6369               abort ();
6370             }
6371
6372           version_index = iver.vs_vers & VERSYM_VERSION;
6373           if (version_index == 1 || version_index == 2)
6374             {
6375               /* This is the base or first version.  We can use it.  */
6376               free (extversym);
6377               free (isymbuf);
6378               return TRUE;
6379             }
6380         }
6381
6382       free (extversym);
6383       free (isymbuf);
6384     }
6385
6386   return FALSE;
6387 }
6388
6389 /* Add an external symbol to the symbol table.  This is called from
6390    the hash table traversal routine.  When generating a shared object,
6391    we go through the symbol table twice.  The first time we output
6392    anything that might have been forced to local scope in a version
6393    script.  The second time we output the symbols that are still
6394    global symbols.  */
6395
6396 static bfd_boolean
6397 elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
6398 {
6399   struct elf_outext_info *eoinfo = data;
6400   struct elf_final_link_info *finfo = eoinfo->finfo;
6401   bfd_boolean strip;
6402   Elf_Internal_Sym sym;
6403   asection *input_sec;
6404   const struct elf_backend_data *bed;
6405
6406   if (h->root.type == bfd_link_hash_warning)
6407     {
6408       h = (struct elf_link_hash_entry *) h->root.u.i.link;
6409       if (h->root.type == bfd_link_hash_new)
6410         return TRUE;
6411     }
6412
6413   /* Decide whether to output this symbol in this pass.  */
6414   if (eoinfo->localsyms)
6415     {
6416       if (!h->forced_local)
6417         return TRUE;
6418     }
6419   else
6420     {
6421       if (h->forced_local)
6422         return TRUE;
6423     }
6424
6425   bed = get_elf_backend_data (finfo->output_bfd);
6426
6427   if (h->root.type == bfd_link_hash_undefined)
6428     {
6429       /* If we have an undefined symbol reference here then it must have
6430          come from a shared library that is being linked in.  (Undefined
6431          references in regular files have already been handled).  */
6432       bfd_boolean ignore_undef = FALSE;
6433
6434       /* Some symbols may be special in that the fact that they're
6435          undefined can be safely ignored - let backend determine that.  */
6436       if (bed->elf_backend_ignore_undef_symbol)
6437         ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
6438
6439       /* If we are reporting errors for this situation then do so now.  */
6440       if (ignore_undef == FALSE
6441           && h->ref_dynamic
6442           && ! h->ref_regular
6443           && ! elf_link_check_versioned_symbol (finfo->info, bed, h)
6444           && finfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
6445         {
6446           if (! (finfo->info->callbacks->undefined_symbol
6447                  (finfo->info, h->root.root.string, h->root.u.undef.abfd,
6448                   NULL, 0, finfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)))
6449             {
6450               eoinfo->failed = TRUE;
6451               return FALSE;
6452             }
6453         }
6454     }
6455
6456   /* We should also warn if a forced local symbol is referenced from
6457      shared libraries.  */
6458   if (! finfo->info->relocatable
6459       && (! finfo->info->shared)
6460       && h->forced_local
6461       && h->ref_dynamic
6462       && !h->dynamic_def
6463       && !h->dynamic_weak
6464       && ! elf_link_check_versioned_symbol (finfo->info, bed, h))
6465     {
6466       (*_bfd_error_handler)
6467         (_("%B: %s symbol `%s' in %B is referenced by DSO"),
6468          finfo->output_bfd,
6469          h->root.u.def.section == bfd_abs_section_ptr
6470          ? finfo->output_bfd : h->root.u.def.section->owner,
6471          ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
6472          ? "internal"
6473          : ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
6474          ? "hidden" : "local",
6475          h->root.root.string);
6476       eoinfo->failed = TRUE;
6477       return FALSE;
6478     }
6479
6480   /* We don't want to output symbols that have never been mentioned by
6481      a regular file, or that we have been told to strip.  However, if
6482      h->indx is set to -2, the symbol is used by a reloc and we must
6483      output it.  */
6484   if (h->indx == -2)
6485     strip = FALSE;
6486   else if ((h->def_dynamic
6487             || h->ref_dynamic
6488             || h->root.type == bfd_link_hash_new)
6489            && !h->def_regular
6490            && !h->ref_regular)
6491     strip = TRUE;
6492   else if (finfo->info->strip == strip_all)
6493     strip = TRUE;
6494   else if (finfo->info->strip == strip_some
6495            && bfd_hash_lookup (finfo->info->keep_hash,
6496                                h->root.root.string, FALSE, FALSE) == NULL)
6497     strip = TRUE;
6498   else if (finfo->info->strip_discarded
6499            && (h->root.type == bfd_link_hash_defined
6500                || h->root.type == bfd_link_hash_defweak)
6501            && elf_discarded_section (h->root.u.def.section))
6502     strip = TRUE;
6503   else
6504     strip = FALSE;
6505
6506   /* If we're stripping it, and it's not a dynamic symbol, there's
6507      nothing else to do unless it is a forced local symbol.  */
6508   if (strip
6509       && h->dynindx == -1
6510       && !h->forced_local)
6511     return TRUE;
6512
6513   sym.st_value = 0;
6514   sym.st_size = h->size;
6515   sym.st_other = h->other;
6516   if (h->forced_local)
6517     sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
6518   else if (h->root.type == bfd_link_hash_undefweak
6519            || h->root.type == bfd_link_hash_defweak)
6520     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
6521   else
6522     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
6523
6524   switch (h->root.type)
6525     {
6526     default:
6527     case bfd_link_hash_new:
6528     case bfd_link_hash_warning:
6529       abort ();
6530       return FALSE;
6531
6532     case bfd_link_hash_undefined:
6533     case bfd_link_hash_undefweak:
6534       input_sec = bfd_und_section_ptr;
6535       sym.st_shndx = SHN_UNDEF;
6536       break;
6537
6538     case bfd_link_hash_defined:
6539     case bfd_link_hash_defweak:
6540       {
6541         input_sec = h->root.u.def.section;
6542         if (input_sec->output_section != NULL)
6543           {
6544             sym.st_shndx =
6545               _bfd_elf_section_from_bfd_section (finfo->output_bfd,
6546                                                  input_sec->output_section);
6547             if (sym.st_shndx == SHN_BAD)
6548               {
6549                 (*_bfd_error_handler)
6550                   (_("%B: could not find output section %A for input section %A"),
6551                    finfo->output_bfd, input_sec->output_section, input_sec);
6552                 eoinfo->failed = TRUE;
6553                 return FALSE;
6554               }
6555
6556             /* ELF symbols in relocatable files are section relative,
6557                but in nonrelocatable files they are virtual
6558                addresses.  */
6559             sym.st_value = h->root.u.def.value + input_sec->output_offset;
6560             if (! finfo->info->relocatable)
6561               {
6562                 sym.st_value += input_sec->output_section->vma;
6563                 if (h->type == STT_TLS)
6564                   {
6565                     /* STT_TLS symbols are relative to PT_TLS segment
6566                        base.  */
6567                     BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL);
6568                     sym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma;
6569                   }
6570               }
6571           }
6572         else
6573           {
6574             BFD_ASSERT (input_sec->owner == NULL
6575                         || (input_sec->owner->flags & DYNAMIC) != 0);
6576             sym.st_shndx = SHN_UNDEF;
6577             input_sec = bfd_und_section_ptr;
6578           }
6579       }
6580       break;
6581
6582     case bfd_link_hash_common:
6583       input_sec = h->root.u.c.p->section;
6584       sym.st_shndx = bed->common_section_index (input_sec);
6585       sym.st_value = 1 << h->root.u.c.p->alignment_power;
6586       break;
6587
6588     case bfd_link_hash_indirect:
6589       /* These symbols are created by symbol versioning.  They point
6590          to the decorated version of the name.  For example, if the
6591          symbol foo@@GNU_1.2 is the default, which should be used when
6592          foo is used with no version, then we add an indirect symbol
6593          foo which points to foo@@GNU_1.2.  We ignore these symbols,
6594          since the indirected symbol is already in the hash table.  */
6595       return TRUE;
6596     }
6597
6598   /* Give the processor backend a chance to tweak the symbol value,
6599      and also to finish up anything that needs to be done for this
6600      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
6601      forced local syms when non-shared is due to a historical quirk.  */
6602   if ((h->dynindx != -1
6603        || h->forced_local)
6604       && ((finfo->info->shared
6605            && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
6606                || h->root.type != bfd_link_hash_undefweak))
6607           || !h->forced_local)
6608       && elf_hash_table (finfo->info)->dynamic_sections_created)
6609     {
6610       if (! ((*bed->elf_backend_finish_dynamic_symbol)
6611              (finfo->output_bfd, finfo->info, h, &sym)))
6612         {
6613           eoinfo->failed = TRUE;
6614           return FALSE;
6615         }
6616     }
6617
6618   /* If we are marking the symbol as undefined, and there are no
6619      non-weak references to this symbol from a regular object, then
6620      mark the symbol as weak undefined; if there are non-weak
6621      references, mark the symbol as strong.  We can't do this earlier,
6622      because it might not be marked as undefined until the
6623      finish_dynamic_symbol routine gets through with it.  */
6624   if (sym.st_shndx == SHN_UNDEF
6625       && h->ref_regular
6626       && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
6627           || ELF_ST_BIND (sym.st_info) == STB_WEAK))
6628     {
6629       int bindtype;
6630
6631       if (h->ref_regular_nonweak)
6632         bindtype = STB_GLOBAL;
6633       else
6634         bindtype = STB_WEAK;
6635       sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info));
6636     }
6637
6638   /* If a non-weak symbol with non-default visibility is not defined
6639      locally, it is a fatal error.  */
6640   if (! finfo->info->relocatable
6641       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
6642       && ELF_ST_BIND (sym.st_info) != STB_WEAK
6643       && h->root.type == bfd_link_hash_undefined
6644       && !h->def_regular)
6645     {
6646       (*_bfd_error_handler)
6647         (_("%B: %s symbol `%s' isn't defined"),
6648          finfo->output_bfd,
6649          ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED
6650          ? "protected"
6651          : ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL
6652          ? "internal" : "hidden",
6653          h->root.root.string);
6654       eoinfo->failed = TRUE;
6655       return FALSE;
6656     }
6657
6658   /* If this symbol should be put in the .dynsym section, then put it
6659      there now.  We already know the symbol index.  We also fill in
6660      the entry in the .hash section.  */
6661   if (h->dynindx != -1
6662       && elf_hash_table (finfo->info)->dynamic_sections_created)
6663     {
6664       size_t bucketcount;
6665       size_t bucket;
6666       size_t hash_entry_size;
6667       bfd_byte *bucketpos;
6668       bfd_vma chain;
6669       bfd_byte *esym;
6670
6671       sym.st_name = h->dynstr_index;
6672       esym = finfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym;
6673       if (! check_dynsym (finfo->output_bfd, &sym))
6674         {
6675           eoinfo->failed = TRUE;
6676           return FALSE;
6677         }
6678       bed->s->swap_symbol_out (finfo->output_bfd, &sym, esym, 0);
6679
6680       bucketcount = elf_hash_table (finfo->info)->bucketcount;
6681       bucket = h->u.elf_hash_value % bucketcount;
6682       hash_entry_size
6683         = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
6684       bucketpos = ((bfd_byte *) finfo->hash_sec->contents
6685                    + (bucket + 2) * hash_entry_size);
6686       chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
6687       bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
6688       bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
6689                ((bfd_byte *) finfo->hash_sec->contents
6690                 + (bucketcount + 2 + h->dynindx) * hash_entry_size));
6691
6692       if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
6693         {
6694           Elf_Internal_Versym iversym;
6695           Elf_External_Versym *eversym;
6696
6697           if (!h->def_regular)
6698             {
6699               if (h->verinfo.verdef == NULL)
6700                 iversym.vs_vers = 0;
6701               else
6702                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
6703             }
6704           else
6705             {
6706               if (h->verinfo.vertree == NULL)
6707                 iversym.vs_vers = 1;
6708               else
6709                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
6710               if (finfo->info->create_default_symver)
6711                 iversym.vs_vers++;
6712             }
6713
6714           if (h->hidden)
6715             iversym.vs_vers |= VERSYM_HIDDEN;
6716
6717           eversym = (Elf_External_Versym *) finfo->symver_sec->contents;
6718           eversym += h->dynindx;
6719           _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym);
6720         }
6721     }
6722
6723   /* If we're stripping it, then it was just a dynamic symbol, and
6724      there's nothing else to do.  */
6725   if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
6726     return TRUE;
6727
6728   h->indx = bfd_get_symcount (finfo->output_bfd);
6729
6730   if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec, h))
6731     {
6732       eoinfo->failed = TRUE;
6733       return FALSE;
6734     }
6735
6736   return TRUE;
6737 }
6738
6739 /* Return TRUE if special handling is done for relocs in SEC against
6740    symbols defined in discarded sections.  */
6741
6742 static bfd_boolean
6743 elf_section_ignore_discarded_relocs (asection *sec)
6744 {
6745   const struct elf_backend_data *bed;
6746
6747   switch (sec->sec_info_type)
6748     {
6749     case ELF_INFO_TYPE_STABS:
6750     case ELF_INFO_TYPE_EH_FRAME:
6751       return TRUE;
6752     default:
6753       break;
6754     }
6755
6756   bed = get_elf_backend_data (sec->owner);
6757   if (bed->elf_backend_ignore_discarded_relocs != NULL
6758       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
6759     return TRUE;
6760
6761   return FALSE;
6762 }
6763
6764 /* Return a mask saying how ld should treat relocations in SEC against
6765    symbols defined in discarded sections.  If this function returns
6766    COMPLAIN set, ld will issue a warning message.  If this function
6767    returns PRETEND set, and the discarded section was link-once and the
6768    same size as the kept link-once section, ld will pretend that the
6769    symbol was actually defined in the kept section.  Otherwise ld will
6770    zero the reloc (at least that is the intent, but some cooperation by
6771    the target dependent code is needed, particularly for REL targets).  */
6772
6773 unsigned int
6774 _bfd_elf_default_action_discarded (asection *sec)
6775 {
6776   if (sec->flags & SEC_DEBUGGING)
6777     return PRETEND;
6778
6779   if (strcmp (".eh_frame", sec->name) == 0)
6780     return 0;
6781
6782   if (strcmp (".gcc_except_table", sec->name) == 0)
6783     return 0;
6784
6785   return COMPLAIN | PRETEND;
6786 }
6787
6788 /* Find a match between a section and a member of a section group.  */
6789
6790 static asection *
6791 match_group_member (asection *sec, asection *group)
6792 {
6793   asection *first = elf_next_in_group (group);
6794   asection *s = first;
6795
6796   while (s != NULL)
6797     {
6798       if (bfd_elf_match_symbols_in_sections (s, sec))
6799         return s;
6800
6801       s = elf_next_in_group (s);
6802       if (s == first)
6803         break;
6804     }
6805
6806   return NULL;
6807 }
6808
6809 /* Check if the kept section of a discarded section SEC can be used
6810    to replace it. Return the replacement if it is OK. Otherwise return
6811    NULL. */
6812
6813 asection *
6814 _bfd_elf_check_kept_section (asection *sec)
6815 {
6816   asection *kept;
6817
6818   kept = sec->kept_section;
6819   if (kept != NULL)
6820     {
6821       if (elf_sec_group (sec) != NULL)
6822         kept = match_group_member (sec, kept);
6823       if (kept != NULL && sec->size != kept->size)
6824         kept = NULL;
6825     }
6826   return kept;
6827 }
6828
6829 /* Link an input file into the linker output file.  This function
6830    handles all the sections and relocations of the input file at once.
6831    This is so that we only have to read the local symbols once, and
6832    don't have to keep them in memory.  */
6833
6834 static bfd_boolean
6835 elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
6836 {
6837   bfd_boolean (*relocate_section)
6838     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
6839      Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
6840   bfd *output_bfd;
6841   Elf_Internal_Shdr *symtab_hdr;
6842   size_t locsymcount;
6843   size_t extsymoff;
6844   Elf_Internal_Sym *isymbuf;
6845   Elf_Internal_Sym *isym;
6846   Elf_Internal_Sym *isymend;
6847   long *pindex;
6848   asection **ppsection;
6849   asection *o;
6850   const struct elf_backend_data *bed;
6851   bfd_boolean emit_relocs;
6852   struct elf_link_hash_entry **sym_hashes;
6853
6854   output_bfd = finfo->output_bfd;
6855   bed = get_elf_backend_data (output_bfd);
6856   relocate_section = bed->elf_backend_relocate_section;
6857
6858   /* If this is a dynamic object, we don't want to do anything here:
6859      we don't want the local symbols, and we don't want the section
6860      contents.  */
6861   if ((input_bfd->flags & DYNAMIC) != 0)
6862     return TRUE;
6863
6864   emit_relocs = (finfo->info->relocatable
6865                  || finfo->info->emitrelocations);
6866
6867   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
6868   if (elf_bad_symtab (input_bfd))
6869     {
6870       locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
6871       extsymoff = 0;
6872     }
6873   else
6874     {
6875       locsymcount = symtab_hdr->sh_info;
6876       extsymoff = symtab_hdr->sh_info;
6877     }
6878
6879   /* Read the local symbols.  */
6880   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
6881   if (isymbuf == NULL && locsymcount != 0)
6882     {
6883       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
6884                                       finfo->internal_syms,
6885                                       finfo->external_syms,
6886                                       finfo->locsym_shndx);
6887       if (isymbuf == NULL)
6888         return FALSE;
6889     }
6890
6891   /* Find local symbol sections and adjust values of symbols in
6892      SEC_MERGE sections.  Write out those local symbols we know are
6893      going into the output file.  */
6894   isymend = isymbuf + locsymcount;
6895   for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections;
6896        isym < isymend;
6897        isym++, pindex++, ppsection++)
6898     {
6899       asection *isec;
6900       const char *name;
6901       Elf_Internal_Sym osym;
6902
6903       *pindex = -1;
6904
6905       if (elf_bad_symtab (input_bfd))
6906         {
6907           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
6908             {
6909               *ppsection = NULL;
6910               continue;
6911             }
6912         }
6913
6914       if (isym->st_shndx == SHN_UNDEF)
6915         isec = bfd_und_section_ptr;
6916       else if (isym->st_shndx < SHN_LORESERVE
6917                || isym->st_shndx > SHN_HIRESERVE)
6918         {
6919           isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
6920           if (isec
6921               && isec->sec_info_type == ELF_INFO_TYPE_MERGE
6922               && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
6923             isym->st_value =
6924               _bfd_merged_section_offset (output_bfd, &isec,
6925                                           elf_section_data (isec)->sec_info,
6926                                           isym->st_value);
6927         }
6928       else if (isym->st_shndx == SHN_ABS)
6929         isec = bfd_abs_section_ptr;
6930       else if (isym->st_shndx == SHN_COMMON)
6931         isec = bfd_com_section_ptr;
6932       else
6933         {
6934           /* Don't attempt to output symbols with st_shnx in the
6935              reserved range other than SHN_ABS and SHN_COMMON.  */
6936           *ppsection = NULL;
6937           continue;
6938         }
6939
6940       *ppsection = isec;
6941
6942       /* Don't output the first, undefined, symbol.  */
6943       if (ppsection == finfo->sections)
6944         continue;
6945
6946       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
6947         {
6948           /* We never output section symbols.  Instead, we use the
6949              section symbol of the corresponding section in the output
6950              file.  */
6951           continue;
6952         }
6953
6954       /* If we are stripping all symbols, we don't want to output this
6955          one.  */
6956       if (finfo->info->strip == strip_all)
6957         continue;
6958
6959       /* If we are discarding all local symbols, we don't want to
6960          output this one.  If we are generating a relocatable output
6961          file, then some of the local symbols may be required by
6962          relocs; we output them below as we discover that they are
6963          needed.  */
6964       if (finfo->info->discard == discard_all)
6965         continue;
6966
6967       /* If this symbol is defined in a section which we are
6968          discarding, we don't need to keep it.  */
6969       if (isym->st_shndx != SHN_UNDEF
6970           && (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
6971           && (isec == NULL
6972               || bfd_section_removed_from_list (output_bfd,
6973                                                 isec->output_section)))
6974         continue;
6975
6976       /* Get the name of the symbol.  */
6977       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
6978                                               isym->st_name);
6979       if (name == NULL)
6980         return FALSE;
6981
6982       /* See if we are discarding symbols with this name.  */
6983       if ((finfo->info->strip == strip_some
6984            && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
6985                == NULL))
6986           || (((finfo->info->discard == discard_sec_merge
6987                 && (isec->flags & SEC_MERGE) && ! finfo->info->relocatable)
6988                || finfo->info->discard == discard_l)
6989               && bfd_is_local_label_name (input_bfd, name)))
6990         continue;
6991
6992       /* If we get here, we are going to output this symbol.  */
6993
6994       osym = *isym;
6995
6996       /* Adjust the section index for the output file.  */
6997       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
6998                                                          isec->output_section);
6999       if (osym.st_shndx == SHN_BAD)
7000         return FALSE;
7001
7002       *pindex = bfd_get_symcount (output_bfd);
7003
7004       /* ELF symbols in relocatable files are section relative, but
7005          in executable files they are virtual addresses.  Note that
7006          this code assumes that all ELF sections have an associated
7007          BFD section with a reasonable value for output_offset; below
7008          we assume that they also have a reasonable value for
7009          output_section.  Any special sections must be set up to meet
7010          these requirements.  */
7011       osym.st_value += isec->output_offset;
7012       if (! finfo->info->relocatable)
7013         {
7014           osym.st_value += isec->output_section->vma;
7015           if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
7016             {
7017               /* STT_TLS symbols are relative to PT_TLS segment base.  */
7018               BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL);
7019               osym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma;
7020             }
7021         }
7022
7023       if (! elf_link_output_sym (finfo, name, &osym, isec, NULL))
7024         return FALSE;
7025     }
7026
7027   /* Relocate the contents of each section.  */
7028   sym_hashes = elf_sym_hashes (input_bfd);
7029   for (o = input_bfd->sections; o != NULL; o = o->next)
7030     {
7031       bfd_byte *contents;
7032
7033       if (! o->linker_mark)
7034         {
7035           /* This section was omitted from the link.  */
7036           continue;
7037         }
7038
7039       if ((o->flags & SEC_HAS_CONTENTS) == 0
7040           || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
7041         continue;
7042
7043       if ((o->flags & SEC_LINKER_CREATED) != 0)
7044         {
7045           /* Section was created by _bfd_elf_link_create_dynamic_sections
7046              or somesuch.  */
7047           continue;
7048         }
7049
7050       /* Get the contents of the section.  They have been cached by a
7051          relaxation routine.  Note that o is a section in an input
7052          file, so the contents field will not have been set by any of
7053          the routines which work on output files.  */
7054       if (elf_section_data (o)->this_hdr.contents != NULL)
7055         contents = elf_section_data (o)->this_hdr.contents;
7056       else
7057         {
7058           bfd_size_type amt = o->rawsize ? o->rawsize : o->size;
7059
7060           contents = finfo->contents;
7061           if (! bfd_get_section_contents (input_bfd, o, contents, 0, amt))
7062             return FALSE;
7063         }
7064
7065       if ((o->flags & SEC_RELOC) != 0)
7066         {
7067           Elf_Internal_Rela *internal_relocs;
7068           bfd_vma r_type_mask;
7069           int r_sym_shift;
7070
7071           /* Get the swapped relocs.  */
7072           internal_relocs
7073             = _bfd_elf_link_read_relocs (input_bfd, o, finfo->external_relocs,
7074                                          finfo->internal_relocs, FALSE);
7075           if (internal_relocs == NULL
7076               && o->reloc_count > 0)
7077             return FALSE;
7078
7079           if (bed->s->arch_size == 32)
7080             {
7081               r_type_mask = 0xff;
7082               r_sym_shift = 8;
7083             }
7084           else
7085             {
7086               r_type_mask = 0xffffffff;
7087               r_sym_shift = 32;
7088             }
7089
7090           /* Run through the relocs looking for any against symbols
7091              from discarded sections and section symbols from
7092              removed link-once sections.  Complain about relocs
7093              against discarded sections.  Zero relocs against removed
7094              link-once sections.  */
7095           if (!elf_section_ignore_discarded_relocs (o))
7096             {
7097               Elf_Internal_Rela *rel, *relend;
7098               unsigned int action = (*bed->action_discarded) (o);
7099
7100               rel = internal_relocs;
7101               relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
7102               for ( ; rel < relend; rel++)
7103                 {
7104                   unsigned long r_symndx = rel->r_info >> r_sym_shift;
7105                   asection **ps, *sec;
7106                   struct elf_link_hash_entry *h = NULL;
7107                   const char *sym_name;
7108
7109                   if (r_symndx == STN_UNDEF)
7110                     continue;
7111
7112                   if (r_symndx >= locsymcount
7113                       || (elf_bad_symtab (input_bfd)
7114                           && finfo->sections[r_symndx] == NULL))
7115                     {
7116                       h = sym_hashes[r_symndx - extsymoff];
7117
7118                       /* Badly formatted input files can contain relocs that
7119                          reference non-existant symbols.  Check here so that
7120                          we do not seg fault.  */
7121                       if (h == NULL)
7122                         {
7123                           char buffer [32];
7124
7125                           sprintf_vma (buffer, rel->r_info);
7126                           (*_bfd_error_handler)
7127                             (_("error: %B contains a reloc (0x%s) for section %A "
7128                                "that references a non-existent global symbol"),
7129                              input_bfd, o, buffer);
7130                           bfd_set_error (bfd_error_bad_value);
7131                           return FALSE;
7132                         }
7133
7134                       while (h->root.type == bfd_link_hash_indirect
7135                              || h->root.type == bfd_link_hash_warning)
7136                         h = (struct elf_link_hash_entry *) h->root.u.i.link;
7137
7138                       if (h->root.type != bfd_link_hash_defined
7139                           && h->root.type != bfd_link_hash_defweak)
7140                         continue;
7141
7142                       ps = &h->root.u.def.section;
7143                       sym_name = h->root.root.string;
7144                     }
7145                   else
7146                     {
7147                       Elf_Internal_Sym *sym = isymbuf + r_symndx;
7148                       ps = &finfo->sections[r_symndx];
7149                       sym_name = bfd_elf_sym_name (input_bfd,
7150                                                    symtab_hdr,
7151                                                    sym, *ps);
7152                     }
7153
7154                   /* Complain if the definition comes from a
7155                      discarded section.  */
7156                   if ((sec = *ps) != NULL && elf_discarded_section (sec))
7157                     {
7158                       BFD_ASSERT (r_symndx != 0);
7159                       if (action & COMPLAIN)
7160                         (*finfo->info->callbacks->einfo)
7161                           (_("%X`%s' referenced in section `%A' of %B: "
7162                              "defined in discarded section `%A' of %B\n"),
7163                            sym_name, o, input_bfd, sec, sec->owner);
7164
7165                       /* Try to do the best we can to support buggy old
7166                          versions of gcc.  Pretend that the symbol is
7167                          really defined in the kept linkonce section.
7168                          FIXME: This is quite broken.  Modifying the
7169                          symbol here means we will be changing all later
7170                          uses of the symbol, not just in this section.  */
7171                       if (action & PRETEND)
7172                         {
7173                           asection *kept;
7174
7175                           kept = _bfd_elf_check_kept_section (sec);
7176                           if (kept != NULL)
7177                             {
7178                               *ps = kept;
7179                               continue;
7180                             }
7181                         }
7182
7183                       /* Remove the symbol reference from the reloc, but
7184                          don't kill the reloc completely.  This is so that
7185                          a zero value will be written into the section,
7186                          which may have non-zero contents put there by the
7187                          assembler.  Zero in things like an eh_frame fde
7188                          pc_begin allows stack unwinders to recognize the
7189                          fde as bogus.  */
7190                       rel->r_info &= r_type_mask;
7191                       rel->r_addend = 0;
7192                     }
7193                 }
7194             }
7195
7196           /* Relocate the section by invoking a back end routine.
7197
7198              The back end routine is responsible for adjusting the
7199              section contents as necessary, and (if using Rela relocs
7200              and generating a relocatable output file) adjusting the
7201              reloc addend as necessary.
7202
7203              The back end routine does not have to worry about setting
7204              the reloc address or the reloc symbol index.
7205
7206              The back end routine is given a pointer to the swapped in
7207              internal symbols, and can access the hash table entries
7208              for the external symbols via elf_sym_hashes (input_bfd).
7209
7210              When generating relocatable output, the back end routine
7211              must handle STB_LOCAL/STT_SECTION symbols specially.  The
7212              output symbol is going to be a section symbol
7213              corresponding to the output section, which will require
7214              the addend to be adjusted.  */
7215
7216           if (! (*relocate_section) (output_bfd, finfo->info,
7217                                      input_bfd, o, contents,
7218                                      internal_relocs,
7219                                      isymbuf,
7220                                      finfo->sections))
7221             return FALSE;
7222
7223           if (emit_relocs)
7224             {
7225               Elf_Internal_Rela *irela;
7226               Elf_Internal_Rela *irelaend;
7227               bfd_vma last_offset;
7228               struct elf_link_hash_entry **rel_hash;
7229               struct elf_link_hash_entry **rel_hash_list;
7230               Elf_Internal_Shdr *input_rel_hdr, *input_rel_hdr2;
7231               unsigned int next_erel;
7232               bfd_boolean rela_normal;
7233
7234               input_rel_hdr = &elf_section_data (o)->rel_hdr;
7235               rela_normal = (bed->rela_normal
7236                              && (input_rel_hdr->sh_entsize
7237                                  == bed->s->sizeof_rela));
7238
7239               /* Adjust the reloc addresses and symbol indices.  */
7240
7241               irela = internal_relocs;
7242               irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
7243               rel_hash = (elf_section_data (o->output_section)->rel_hashes
7244                           + elf_section_data (o->output_section)->rel_count
7245                           + elf_section_data (o->output_section)->rel_count2);
7246               rel_hash_list = rel_hash;
7247               last_offset = o->output_offset;
7248               if (!finfo->info->relocatable)
7249                 last_offset += o->output_section->vma;
7250               for (next_erel = 0; irela < irelaend; irela++, next_erel++)
7251                 {
7252                   unsigned long r_symndx;
7253                   asection *sec;
7254                   Elf_Internal_Sym sym;
7255
7256                   if (next_erel == bed->s->int_rels_per_ext_rel)
7257                     {
7258                       rel_hash++;
7259                       next_erel = 0;
7260                     }
7261
7262                   irela->r_offset = _bfd_elf_section_offset (output_bfd,
7263                                                              finfo->info, o,
7264                                                              irela->r_offset);
7265                   if (irela->r_offset >= (bfd_vma) -2)
7266                     {
7267                       /* This is a reloc for a deleted entry or somesuch.
7268                          Turn it into an R_*_NONE reloc, at the same
7269                          offset as the last reloc.  elf_eh_frame.c and
7270                          bfd_elf_discard_info rely on reloc offsets
7271                          being ordered.  */
7272                       irela->r_offset = last_offset;
7273                       irela->r_info = 0;
7274                       irela->r_addend = 0;
7275                       continue;
7276                     }
7277
7278                   irela->r_offset += o->output_offset;
7279
7280                   /* Relocs in an executable have to be virtual addresses.  */
7281                   if (!finfo->info->relocatable)
7282                     irela->r_offset += o->output_section->vma;
7283
7284                   last_offset = irela->r_offset;
7285
7286                   r_symndx = irela->r_info >> r_sym_shift;
7287                   if (r_symndx == STN_UNDEF)
7288                     continue;
7289
7290                   if (r_symndx >= locsymcount
7291                       || (elf_bad_symtab (input_bfd)
7292                           && finfo->sections[r_symndx] == NULL))
7293                     {
7294                       struct elf_link_hash_entry *rh;
7295                       unsigned long indx;
7296
7297                       /* This is a reloc against a global symbol.  We
7298                          have not yet output all the local symbols, so
7299                          we do not know the symbol index of any global
7300                          symbol.  We set the rel_hash entry for this
7301                          reloc to point to the global hash table entry
7302                          for this symbol.  The symbol index is then
7303                          set at the end of bfd_elf_final_link.  */
7304                       indx = r_symndx - extsymoff;
7305                       rh = elf_sym_hashes (input_bfd)[indx];
7306                       while (rh->root.type == bfd_link_hash_indirect
7307                              || rh->root.type == bfd_link_hash_warning)
7308                         rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
7309
7310                       /* Setting the index to -2 tells
7311                          elf_link_output_extsym that this symbol is
7312                          used by a reloc.  */
7313                       BFD_ASSERT (rh->indx < 0);
7314                       rh->indx = -2;
7315
7316                       *rel_hash = rh;
7317
7318                       continue;
7319                     }
7320
7321                   /* This is a reloc against a local symbol.  */
7322
7323                   *rel_hash = NULL;
7324                   sym = isymbuf[r_symndx];
7325                   sec = finfo->sections[r_symndx];
7326                   if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
7327                     {
7328                       /* I suppose the backend ought to fill in the
7329                          section of any STT_SECTION symbol against a
7330                          processor specific section.  */
7331                       r_symndx = 0;
7332                       if (bfd_is_abs_section (sec))
7333                         ;
7334                       else if (sec == NULL || sec->owner == NULL)
7335                         {
7336                           bfd_set_error (bfd_error_bad_value);
7337                           return FALSE;
7338                         }
7339                       else
7340                         {
7341                           asection *osec = sec->output_section;
7342
7343                           /* If we have discarded a section, the output
7344                              section will be the absolute section.  In
7345                              case of discarded link-once and discarded
7346                              SEC_MERGE sections, use the kept section.  */
7347                           if (bfd_is_abs_section (osec)
7348                               && sec->kept_section != NULL
7349                               && sec->kept_section->output_section != NULL)
7350                             {
7351                               osec = sec->kept_section->output_section;
7352                               irela->r_addend -= osec->vma;
7353                             }
7354
7355                           if (!bfd_is_abs_section (osec))
7356                             {
7357                               r_symndx = osec->target_index;
7358                               BFD_ASSERT (r_symndx != 0);
7359                             }
7360                         }
7361
7362                       /* Adjust the addend according to where the
7363                          section winds up in the output section.  */
7364                       if (rela_normal)
7365                         irela->r_addend += sec->output_offset;
7366                     }
7367                   else
7368                     {
7369                       if (finfo->indices[r_symndx] == -1)
7370                         {
7371                           unsigned long shlink;
7372                           const char *name;
7373                           asection *osec;
7374
7375                           if (finfo->info->strip == strip_all)
7376                             {
7377                               /* You can't do ld -r -s.  */
7378                               bfd_set_error (bfd_error_invalid_operation);
7379                               return FALSE;
7380                             }
7381
7382                           /* This symbol was skipped earlier, but
7383                              since it is needed by a reloc, we
7384                              must output it now.  */
7385                           shlink = symtab_hdr->sh_link;
7386                           name = (bfd_elf_string_from_elf_section
7387                                   (input_bfd, shlink, sym.st_name));
7388                           if (name == NULL)
7389                             return FALSE;
7390
7391                           osec = sec->output_section;
7392                           sym.st_shndx =
7393                             _bfd_elf_section_from_bfd_section (output_bfd,
7394                                                                osec);
7395                           if (sym.st_shndx == SHN_BAD)
7396                             return FALSE;
7397
7398                           sym.st_value += sec->output_offset;
7399                           if (! finfo->info->relocatable)
7400                             {
7401                               sym.st_value += osec->vma;
7402                               if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
7403                                 {
7404                                   /* STT_TLS symbols are relative to PT_TLS
7405                                      segment base.  */
7406                                   BFD_ASSERT (elf_hash_table (finfo->info)
7407                                               ->tls_sec != NULL);
7408                                   sym.st_value -= (elf_hash_table (finfo->info)
7409                                                    ->tls_sec->vma);
7410                                 }
7411                             }
7412
7413                           finfo->indices[r_symndx]
7414                             = bfd_get_symcount (output_bfd);
7415
7416                           if (! elf_link_output_sym (finfo, name, &sym, sec,
7417                                                      NULL))
7418                             return FALSE;
7419                         }
7420
7421                       r_symndx = finfo->indices[r_symndx];
7422                     }
7423
7424                   irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
7425                                    | (irela->r_info & r_type_mask));
7426                 }
7427
7428               /* Swap out the relocs.  */
7429               if (input_rel_hdr->sh_size != 0
7430                   && !bed->elf_backend_emit_relocs (output_bfd, o,
7431                                                     input_rel_hdr,
7432                                                     internal_relocs,
7433                                                     rel_hash_list))
7434                 return FALSE;
7435
7436               input_rel_hdr2 = elf_section_data (o)->rel_hdr2;
7437               if (input_rel_hdr2 && input_rel_hdr2->sh_size != 0)
7438                 {
7439                   internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
7440                                       * bed->s->int_rels_per_ext_rel);
7441                   rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
7442                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
7443                                                      input_rel_hdr2,
7444                                                      internal_relocs,
7445                                                      rel_hash_list))
7446                     return FALSE;
7447                 }
7448             }
7449         }
7450
7451       /* Write out the modified section contents.  */
7452       if (bed->elf_backend_write_section
7453           && (*bed->elf_backend_write_section) (output_bfd, o, contents))
7454         {
7455           /* Section written out.  */
7456         }
7457       else switch (o->sec_info_type)
7458         {
7459         case ELF_INFO_TYPE_STABS:
7460           if (! (_bfd_write_section_stabs
7461                  (output_bfd,
7462                   &elf_hash_table (finfo->info)->stab_info,
7463                   o, &elf_section_data (o)->sec_info, contents)))
7464             return FALSE;
7465           break;
7466         case ELF_INFO_TYPE_MERGE:
7467           if (! _bfd_write_merged_section (output_bfd, o,
7468                                            elf_section_data (o)->sec_info))
7469             return FALSE;
7470           break;
7471         case ELF_INFO_TYPE_EH_FRAME:
7472           {
7473             if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info,
7474                                                    o, contents))
7475               return FALSE;
7476           }
7477           break;
7478         default:
7479           {
7480             if (! (o->flags & SEC_EXCLUDE)
7481                 && ! bfd_set_section_contents (output_bfd, o->output_section,
7482                                                contents,
7483                                                (file_ptr) o->output_offset,
7484                                                o->size))
7485               return FALSE;
7486           }
7487           break;
7488         }
7489     }
7490
7491   return TRUE;
7492 }
7493
7494 /* Generate a reloc when linking an ELF file.  This is a reloc
7495    requested by the linker, and does not come from any input file.  This
7496    is used to build constructor and destructor tables when linking
7497    with -Ur.  */
7498
7499 static bfd_boolean
7500 elf_reloc_link_order (bfd *output_bfd,
7501                       struct bfd_link_info *info,
7502                       asection *output_section,
7503                       struct bfd_link_order *link_order)
7504 {
7505   reloc_howto_type *howto;
7506   long indx;
7507   bfd_vma offset;
7508   bfd_vma addend;
7509   struct elf_link_hash_entry **rel_hash_ptr;
7510   Elf_Internal_Shdr *rel_hdr;
7511   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
7512   Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
7513   bfd_byte *erel;
7514   unsigned int i;
7515
7516   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
7517   if (howto == NULL)
7518     {
7519       bfd_set_error (bfd_error_bad_value);
7520       return FALSE;
7521     }
7522
7523   addend = link_order->u.reloc.p->addend;
7524
7525   /* Figure out the symbol index.  */
7526   rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
7527                   + elf_section_data (output_section)->rel_count
7528                   + elf_section_data (output_section)->rel_count2);
7529   if (link_order->type == bfd_section_reloc_link_order)
7530     {
7531       indx = link_order->u.reloc.p->u.section->target_index;
7532       BFD_ASSERT (indx != 0);
7533       *rel_hash_ptr = NULL;
7534     }
7535   else
7536     {
7537       struct elf_link_hash_entry *h;
7538
7539       /* Treat a reloc against a defined symbol as though it were
7540          actually against the section.  */
7541       h = ((struct elf_link_hash_entry *)
7542            bfd_wrapped_link_hash_lookup (output_bfd, info,
7543                                          link_order->u.reloc.p->u.name,
7544                                          FALSE, FALSE, TRUE));
7545       if (h != NULL
7546           && (h->root.type == bfd_link_hash_defined
7547               || h->root.type == bfd_link_hash_defweak))
7548         {
7549           asection *section;
7550
7551           section = h->root.u.def.section;
7552           indx = section->output_section->target_index;
7553           *rel_hash_ptr = NULL;
7554           /* It seems that we ought to add the symbol value to the
7555              addend here, but in practice it has already been added
7556              because it was passed to constructor_callback.  */
7557           addend += section->output_section->vma + section->output_offset;
7558         }
7559       else if (h != NULL)
7560         {
7561           /* Setting the index to -2 tells elf_link_output_extsym that
7562              this symbol is used by a reloc.  */
7563           h->indx = -2;
7564           *rel_hash_ptr = h;
7565           indx = 0;
7566         }
7567       else
7568         {
7569           if (! ((*info->callbacks->unattached_reloc)
7570                  (info, link_order->u.reloc.p->u.name, NULL, NULL, 0)))
7571             return FALSE;
7572           indx = 0;
7573         }
7574     }
7575
7576   /* If this is an inplace reloc, we must write the addend into the
7577      object file.  */
7578   if (howto->partial_inplace && addend != 0)
7579     {
7580       bfd_size_type size;
7581       bfd_reloc_status_type rstat;
7582       bfd_byte *buf;
7583       bfd_boolean ok;
7584       const char *sym_name;
7585
7586       size = bfd_get_reloc_size (howto);
7587       buf = bfd_zmalloc (size);
7588       if (buf == NULL)
7589         return FALSE;
7590       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
7591       switch (rstat)
7592         {
7593         case bfd_reloc_ok:
7594           break;
7595
7596         default:
7597         case bfd_reloc_outofrange:
7598           abort ();
7599
7600         case bfd_reloc_overflow:
7601           if (link_order->type == bfd_section_reloc_link_order)
7602             sym_name = bfd_section_name (output_bfd,
7603                                          link_order->u.reloc.p->u.section);
7604           else
7605             sym_name = link_order->u.reloc.p->u.name;
7606           if (! ((*info->callbacks->reloc_overflow)
7607                  (info, NULL, sym_name, howto->name, addend, NULL,
7608                   NULL, (bfd_vma) 0)))
7609             {
7610               free (buf);
7611               return FALSE;
7612             }
7613           break;
7614         }
7615       ok = bfd_set_section_contents (output_bfd, output_section, buf,
7616                                      link_order->offset, size);
7617       free (buf);
7618       if (! ok)
7619         return FALSE;
7620     }
7621
7622   /* The address of a reloc is relative to the section in a
7623      relocatable file, and is a virtual address in an executable
7624      file.  */
7625   offset = link_order->offset;
7626   if (! info->relocatable)
7627     offset += output_section->vma;
7628
7629   for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
7630     {
7631       irel[i].r_offset = offset;
7632       irel[i].r_info = 0;
7633       irel[i].r_addend = 0;
7634     }
7635   if (bed->s->arch_size == 32)
7636     irel[0].r_info = ELF32_R_INFO (indx, howto->type);
7637   else
7638     irel[0].r_info = ELF64_R_INFO (indx, howto->type);
7639
7640   rel_hdr = &elf_section_data (output_section)->rel_hdr;
7641   erel = rel_hdr->contents;
7642   if (rel_hdr->sh_type == SHT_REL)
7643     {
7644       erel += (elf_section_data (output_section)->rel_count
7645                * bed->s->sizeof_rel);
7646       (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
7647     }
7648   else
7649     {
7650       irel[0].r_addend = addend;
7651       erel += (elf_section_data (output_section)->rel_count
7652                * bed->s->sizeof_rela);
7653       (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
7654     }
7655
7656   ++elf_section_data (output_section)->rel_count;
7657
7658   return TRUE;
7659 }
7660
7661
7662 /* Get the output vma of the section pointed to by the sh_link field.  */
7663
7664 static bfd_vma
7665 elf_get_linked_section_vma (struct bfd_link_order *p)
7666 {
7667   Elf_Internal_Shdr **elf_shdrp;
7668   asection *s;
7669   int elfsec;
7670
7671   s = p->u.indirect.section;
7672   elf_shdrp = elf_elfsections (s->owner);
7673   elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
7674   elfsec = elf_shdrp[elfsec]->sh_link;
7675   /* PR 290:
7676      The Intel C compiler generates SHT_IA_64_UNWIND with
7677      SHF_LINK_ORDER.  But it doesn't set the sh_link or
7678      sh_info fields.  Hence we could get the situation
7679      where elfsec is 0.  */
7680   if (elfsec == 0)
7681     {
7682       const struct elf_backend_data *bed
7683         = get_elf_backend_data (s->owner);
7684       if (bed->link_order_error_handler)
7685         bed->link_order_error_handler
7686           (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
7687       return 0;
7688     }
7689   else
7690     {
7691       s = elf_shdrp[elfsec]->bfd_section;
7692       return s->output_section->vma + s->output_offset;
7693     }
7694 }
7695
7696
7697 /* Compare two sections based on the locations of the sections they are
7698    linked to.  Used by elf_fixup_link_order.  */
7699
7700 static int
7701 compare_link_order (const void * a, const void * b)
7702 {
7703   bfd_vma apos;
7704   bfd_vma bpos;
7705
7706   apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
7707   bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
7708   if (apos < bpos)
7709     return -1;
7710   return apos > bpos;
7711 }
7712
7713
7714 /* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
7715    order as their linked sections.  Returns false if this could not be done
7716    because an output section includes both ordered and unordered
7717    sections.  Ideally we'd do this in the linker proper.  */
7718
7719 static bfd_boolean
7720 elf_fixup_link_order (bfd *abfd, asection *o)
7721 {
7722   int seen_linkorder;
7723   int seen_other;
7724   int n;
7725   struct bfd_link_order *p;
7726   bfd *sub;
7727   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7728   unsigned elfsec;
7729   struct bfd_link_order **sections;
7730   asection *s, *other_sec, *linkorder_sec;
7731   bfd_vma offset;
7732
7733   other_sec = NULL;
7734   linkorder_sec = NULL;
7735   seen_other = 0;
7736   seen_linkorder = 0;
7737   for (p = o->map_head.link_order; p != NULL; p = p->next)
7738     {
7739       if (p->type == bfd_indirect_link_order)
7740         {
7741           s = p->u.indirect.section;
7742           sub = s->owner;
7743           if (bfd_get_flavour (sub) == bfd_target_elf_flavour
7744               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
7745               && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
7746               && elfsec < elf_numsections (sub)
7747               && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER)
7748             {
7749               seen_linkorder++;
7750               linkorder_sec = s;
7751             }
7752           else
7753             {
7754               seen_other++;
7755               other_sec = s;
7756             }
7757         }
7758       else
7759         seen_other++;
7760
7761       if (seen_other && seen_linkorder)
7762         {
7763           if (other_sec && linkorder_sec)
7764             (*_bfd_error_handler) (_("%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"),
7765                                    o, linkorder_sec,
7766                                    linkorder_sec->owner, other_sec,
7767                                    other_sec->owner);
7768           else
7769             (*_bfd_error_handler) (_("%A has both ordered and unordered sections"),
7770                                    o);
7771           bfd_set_error (bfd_error_bad_value);
7772           return FALSE;
7773         }
7774     }
7775
7776   if (!seen_linkorder)
7777     return TRUE;
7778
7779   sections = (struct bfd_link_order **)
7780     xmalloc (seen_linkorder * sizeof (struct bfd_link_order *));
7781   seen_linkorder = 0;
7782
7783   for (p = o->map_head.link_order; p != NULL; p = p->next)
7784     {
7785       sections[seen_linkorder++] = p;
7786     }
7787   /* Sort the input sections in the order of their linked section.  */
7788   qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
7789          compare_link_order);
7790
7791   /* Change the offsets of the sections.  */
7792   offset = 0;
7793   for (n = 0; n < seen_linkorder; n++)
7794     {
7795       s = sections[n]->u.indirect.section;
7796       offset &= ~(bfd_vma)((1 << s->alignment_power) - 1);
7797       s->output_offset = offset;
7798       sections[n]->offset = offset;
7799       offset += sections[n]->size;
7800     }
7801
7802   return TRUE;
7803 }
7804
7805
7806 /* Do the final step of an ELF link.  */
7807
7808 bfd_boolean
7809 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
7810 {
7811   bfd_boolean dynamic;
7812   bfd_boolean emit_relocs;
7813   bfd *dynobj;
7814   struct elf_final_link_info finfo;
7815   register asection *o;
7816   register struct bfd_link_order *p;
7817   register bfd *sub;
7818   bfd_size_type max_contents_size;
7819   bfd_size_type max_external_reloc_size;
7820   bfd_size_type max_internal_reloc_count;
7821   bfd_size_type max_sym_count;
7822   bfd_size_type max_sym_shndx_count;
7823   file_ptr off;
7824   Elf_Internal_Sym elfsym;
7825   unsigned int i;
7826   Elf_Internal_Shdr *symtab_hdr;
7827   Elf_Internal_Shdr *symtab_shndx_hdr;
7828   Elf_Internal_Shdr *symstrtab_hdr;
7829   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7830   struct elf_outext_info eoinfo;
7831   bfd_boolean merged;
7832   size_t relativecount = 0;
7833   asection *reldyn = 0;
7834   bfd_size_type amt;
7835
7836   if (! is_elf_hash_table (info->hash))
7837     return FALSE;
7838
7839   if (info->shared)
7840     abfd->flags |= DYNAMIC;
7841
7842   dynamic = elf_hash_table (info)->dynamic_sections_created;
7843   dynobj = elf_hash_table (info)->dynobj;
7844
7845   emit_relocs = (info->relocatable
7846                  || info->emitrelocations);
7847
7848   finfo.info = info;
7849   finfo.output_bfd = abfd;
7850   finfo.symstrtab = _bfd_elf_stringtab_init ();
7851   if (finfo.symstrtab == NULL)
7852     return FALSE;
7853
7854   if (! dynamic)
7855     {
7856       finfo.dynsym_sec = NULL;
7857       finfo.hash_sec = NULL;
7858       finfo.symver_sec = NULL;
7859     }
7860   else
7861     {
7862       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
7863       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
7864       BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
7865       finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
7866       /* Note that it is OK if symver_sec is NULL.  */
7867     }
7868
7869   finfo.contents = NULL;
7870   finfo.external_relocs = NULL;
7871   finfo.internal_relocs = NULL;
7872   finfo.external_syms = NULL;
7873   finfo.locsym_shndx = NULL;
7874   finfo.internal_syms = NULL;
7875   finfo.indices = NULL;
7876   finfo.sections = NULL;
7877   finfo.symbuf = NULL;
7878   finfo.symshndxbuf = NULL;
7879   finfo.symbuf_count = 0;
7880   finfo.shndxbuf_size = 0;
7881
7882   /* Count up the number of relocations we will output for each output
7883      section, so that we know the sizes of the reloc sections.  We
7884      also figure out some maximum sizes.  */
7885   max_contents_size = 0;
7886   max_external_reloc_size = 0;
7887   max_internal_reloc_count = 0;
7888   max_sym_count = 0;
7889   max_sym_shndx_count = 0;
7890   merged = FALSE;
7891   for (o = abfd->sections; o != NULL; o = o->next)
7892     {
7893       struct bfd_elf_section_data *esdo = elf_section_data (o);
7894       o->reloc_count = 0;
7895
7896       for (p = o->map_head.link_order; p != NULL; p = p->next)
7897         {
7898           unsigned int reloc_count = 0;
7899           struct bfd_elf_section_data *esdi = NULL;
7900           unsigned int *rel_count1;
7901
7902           if (p->type == bfd_section_reloc_link_order
7903               || p->type == bfd_symbol_reloc_link_order)
7904             reloc_count = 1;
7905           else if (p->type == bfd_indirect_link_order)
7906             {
7907               asection *sec;
7908
7909               sec = p->u.indirect.section;
7910               esdi = elf_section_data (sec);
7911
7912               /* Mark all sections which are to be included in the
7913                  link.  This will normally be every section.  We need
7914                  to do this so that we can identify any sections which
7915                  the linker has decided to not include.  */
7916               sec->linker_mark = TRUE;
7917
7918               if (sec->flags & SEC_MERGE)
7919                 merged = TRUE;
7920
7921               if (info->relocatable || info->emitrelocations)
7922                 reloc_count = sec->reloc_count;
7923               else if (bed->elf_backend_count_relocs)
7924                 {
7925                   Elf_Internal_Rela * relocs;
7926
7927                   relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
7928                                                       info->keep_memory);
7929
7930                   reloc_count = (*bed->elf_backend_count_relocs) (sec, relocs);
7931
7932                   if (elf_section_data (o)->relocs != relocs)
7933                     free (relocs);
7934                 }
7935
7936               if (sec->rawsize > max_contents_size)
7937                 max_contents_size = sec->rawsize;
7938               if (sec->size > max_contents_size)
7939                 max_contents_size = sec->size;
7940
7941               /* We are interested in just local symbols, not all
7942                  symbols.  */
7943               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
7944                   && (sec->owner->flags & DYNAMIC) == 0)
7945                 {
7946                   size_t sym_count;
7947
7948                   if (elf_bad_symtab (sec->owner))
7949                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
7950                                  / bed->s->sizeof_sym);
7951                   else
7952                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
7953
7954                   if (sym_count > max_sym_count)
7955                     max_sym_count = sym_count;
7956
7957                   if (sym_count > max_sym_shndx_count
7958                       && elf_symtab_shndx (sec->owner) != 0)
7959                     max_sym_shndx_count = sym_count;
7960
7961                   if ((sec->flags & SEC_RELOC) != 0)
7962                     {
7963                       size_t ext_size;
7964
7965                       ext_size = elf_section_data (sec)->rel_hdr.sh_size;
7966                       if (ext_size > max_external_reloc_size)
7967                         max_external_reloc_size = ext_size;
7968                       if (sec->reloc_count > max_internal_reloc_count)
7969                         max_internal_reloc_count = sec->reloc_count;
7970                     }
7971                 }
7972             }
7973
7974           if (reloc_count == 0)
7975             continue;
7976
7977           o->reloc_count += reloc_count;
7978
7979           /* MIPS may have a mix of REL and RELA relocs on sections.
7980              To support this curious ABI we keep reloc counts in
7981              elf_section_data too.  We must be careful to add the
7982              relocations from the input section to the right output
7983              count.  FIXME: Get rid of one count.  We have
7984              o->reloc_count == esdo->rel_count + esdo->rel_count2.  */
7985           rel_count1 = &esdo->rel_count;
7986           if (esdi != NULL)
7987             {
7988               bfd_boolean same_size;
7989               bfd_size_type entsize1;
7990
7991               entsize1 = esdi->rel_hdr.sh_entsize;
7992               BFD_ASSERT (entsize1 == bed->s->sizeof_rel
7993                           || entsize1 == bed->s->sizeof_rela);
7994               same_size = !o->use_rela_p == (entsize1 == bed->s->sizeof_rel);
7995
7996               if (!same_size)
7997                 rel_count1 = &esdo->rel_count2;
7998
7999               if (esdi->rel_hdr2 != NULL)
8000                 {
8001                   bfd_size_type entsize2 = esdi->rel_hdr2->sh_entsize;
8002                   unsigned int alt_count;
8003                   unsigned int *rel_count2;
8004
8005                   BFD_ASSERT (entsize2 != entsize1
8006                               && (entsize2 == bed->s->sizeof_rel
8007                                   || entsize2 == bed->s->sizeof_rela));
8008
8009                   rel_count2 = &esdo->rel_count2;
8010                   if (!same_size)
8011                     rel_count2 = &esdo->rel_count;
8012
8013                   /* The following is probably too simplistic if the
8014                      backend counts output relocs unusually.  */
8015                   BFD_ASSERT (bed->elf_backend_count_relocs == NULL);
8016                   alt_count = NUM_SHDR_ENTRIES (esdi->rel_hdr2);
8017                   *rel_count2 += alt_count;
8018                   reloc_count -= alt_count;
8019                 }
8020             }
8021           *rel_count1 += reloc_count;
8022         }
8023
8024       if (o->reloc_count > 0)
8025         o->flags |= SEC_RELOC;
8026       else
8027         {
8028           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
8029              set it (this is probably a bug) and if it is set
8030              assign_section_numbers will create a reloc section.  */
8031           o->flags &=~ SEC_RELOC;
8032         }
8033
8034       /* If the SEC_ALLOC flag is not set, force the section VMA to
8035          zero.  This is done in elf_fake_sections as well, but forcing
8036          the VMA to 0 here will ensure that relocs against these
8037          sections are handled correctly.  */
8038       if ((o->flags & SEC_ALLOC) == 0
8039           && ! o->user_set_vma)
8040         o->vma = 0;
8041     }
8042
8043   if (! info->relocatable && merged)
8044     elf_link_hash_traverse (elf_hash_table (info),
8045                             _bfd_elf_link_sec_merge_syms, abfd);
8046
8047   /* Figure out the file positions for everything but the symbol table
8048      and the relocs.  We set symcount to force assign_section_numbers
8049      to create a symbol table.  */
8050   bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1;
8051   BFD_ASSERT (! abfd->output_has_begun);
8052   if (! _bfd_elf_compute_section_file_positions (abfd, info))
8053     goto error_return;
8054
8055   /* Set sizes, and assign file positions for reloc sections.  */
8056   for (o = abfd->sections; o != NULL; o = o->next)
8057     {
8058       if ((o->flags & SEC_RELOC) != 0)
8059         {
8060           if (!(_bfd_elf_link_size_reloc_section
8061                 (abfd, &elf_section_data (o)->rel_hdr, o)))
8062             goto error_return;
8063
8064           if (elf_section_data (o)->rel_hdr2
8065               && !(_bfd_elf_link_size_reloc_section
8066                    (abfd, elf_section_data (o)->rel_hdr2, o)))
8067             goto error_return;
8068         }
8069
8070       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
8071          to count upwards while actually outputting the relocations.  */
8072       elf_section_data (o)->rel_count = 0;
8073       elf_section_data (o)->rel_count2 = 0;
8074     }
8075
8076   _bfd_elf_assign_file_positions_for_relocs (abfd);
8077
8078   /* We have now assigned file positions for all the sections except
8079      .symtab and .strtab.  We start the .symtab section at the current
8080      file position, and write directly to it.  We build the .strtab
8081      section in memory.  */
8082   bfd_get_symcount (abfd) = 0;
8083   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8084   /* sh_name is set in prep_headers.  */
8085   symtab_hdr->sh_type = SHT_SYMTAB;
8086   /* sh_flags, sh_addr and sh_size all start off zero.  */
8087   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
8088   /* sh_link is set in assign_section_numbers.  */
8089   /* sh_info is set below.  */
8090   /* sh_offset is set just below.  */
8091   symtab_hdr->sh_addralign = 1 << bed->s->log_file_align;
8092
8093   off = elf_tdata (abfd)->next_file_pos;
8094   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
8095
8096   /* Note that at this point elf_tdata (abfd)->next_file_pos is
8097      incorrect.  We do not yet know the size of the .symtab section.
8098      We correct next_file_pos below, after we do know the size.  */
8099
8100   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
8101      continuously seeking to the right position in the file.  */
8102   if (! info->keep_memory || max_sym_count < 20)
8103     finfo.symbuf_size = 20;
8104   else
8105     finfo.symbuf_size = max_sym_count;
8106   amt = finfo.symbuf_size;
8107   amt *= bed->s->sizeof_sym;
8108   finfo.symbuf = bfd_malloc (amt);
8109   if (finfo.symbuf == NULL)
8110     goto error_return;
8111   if (elf_numsections (abfd) > SHN_LORESERVE)
8112     {
8113       /* Wild guess at number of output symbols.  realloc'd as needed.  */
8114       amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
8115       finfo.shndxbuf_size = amt;
8116       amt *= sizeof (Elf_External_Sym_Shndx);
8117       finfo.symshndxbuf = bfd_zmalloc (amt);
8118       if (finfo.symshndxbuf == NULL)
8119         goto error_return;
8120     }
8121
8122   /* Start writing out the symbol table.  The first symbol is always a
8123      dummy symbol.  */
8124   if (info->strip != strip_all
8125       || emit_relocs)
8126     {
8127       elfsym.st_value = 0;
8128       elfsym.st_size = 0;
8129       elfsym.st_info = 0;
8130       elfsym.st_other = 0;
8131       elfsym.st_shndx = SHN_UNDEF;
8132       if (! elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr,
8133                                  NULL))
8134         goto error_return;
8135     }
8136
8137   /* Output a symbol for each section.  We output these even if we are
8138      discarding local symbols, since they are used for relocs.  These
8139      symbols have no names.  We store the index of each one in the
8140      index field of the section, so that we can find it again when
8141      outputting relocs.  */
8142   if (info->strip != strip_all
8143       || emit_relocs)
8144     {
8145       elfsym.st_size = 0;
8146       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
8147       elfsym.st_other = 0;
8148       elfsym.st_value = 0;
8149       for (i = 1; i < elf_numsections (abfd); i++)
8150         {
8151           o = bfd_section_from_elf_index (abfd, i);
8152           if (o != NULL)
8153             {
8154               o->target_index = bfd_get_symcount (abfd);
8155               elfsym.st_shndx = i;
8156               if (!info->relocatable)
8157                 elfsym.st_value = o->vma;
8158               if (!elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL))
8159                 goto error_return;
8160             }
8161           if (i == SHN_LORESERVE - 1)
8162             i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
8163         }
8164     }
8165
8166   /* Allocate some memory to hold information read in from the input
8167      files.  */
8168   if (max_contents_size != 0)
8169     {
8170       finfo.contents = bfd_malloc (max_contents_size);
8171       if (finfo.contents == NULL)
8172         goto error_return;
8173     }
8174
8175   if (max_external_reloc_size != 0)
8176     {
8177       finfo.external_relocs = bfd_malloc (max_external_reloc_size);
8178       if (finfo.external_relocs == NULL)
8179         goto error_return;
8180     }
8181
8182   if (max_internal_reloc_count != 0)
8183     {
8184       amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
8185       amt *= sizeof (Elf_Internal_Rela);
8186       finfo.internal_relocs = bfd_malloc (amt);
8187       if (finfo.internal_relocs == NULL)
8188         goto error_return;
8189     }
8190
8191   if (max_sym_count != 0)
8192     {
8193       amt = max_sym_count * bed->s->sizeof_sym;
8194       finfo.external_syms = bfd_malloc (amt);
8195       if (finfo.external_syms == NULL)
8196         goto error_return;
8197
8198       amt = max_sym_count * sizeof (Elf_Internal_Sym);
8199       finfo.internal_syms = bfd_malloc (amt);
8200       if (finfo.internal_syms == NULL)
8201         goto error_return;
8202
8203       amt = max_sym_count * sizeof (long);
8204       finfo.indices = bfd_malloc (amt);
8205       if (finfo.indices == NULL)
8206         goto error_return;
8207
8208       amt = max_sym_count * sizeof (asection *);
8209       finfo.sections = bfd_malloc (amt);
8210       if (finfo.sections == NULL)
8211         goto error_return;
8212     }
8213
8214   if (max_sym_shndx_count != 0)
8215     {
8216       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
8217       finfo.locsym_shndx = bfd_malloc (amt);
8218       if (finfo.locsym_shndx == NULL)
8219         goto error_return;
8220     }
8221
8222   if (elf_hash_table (info)->tls_sec)
8223     {
8224       bfd_vma base, end = 0;
8225       asection *sec;
8226
8227       for (sec = elf_hash_table (info)->tls_sec;
8228            sec && (sec->flags & SEC_THREAD_LOCAL);
8229            sec = sec->next)
8230         {
8231           bfd_size_type size = sec->size;
8232
8233           if (size == 0
8234               && (sec->flags & SEC_HAS_CONTENTS) == 0)
8235             {
8236               struct bfd_link_order *o = sec->map_tail.link_order;
8237               if (o != NULL)
8238                 size = o->offset + o->size;
8239             }
8240           end = sec->vma + size;
8241         }
8242       base = elf_hash_table (info)->tls_sec->vma;
8243       end = align_power (end, elf_hash_table (info)->tls_sec->alignment_power);
8244       elf_hash_table (info)->tls_size = end - base;
8245     }
8246
8247   /* Reorder SHF_LINK_ORDER sections.  */
8248   for (o = abfd->sections; o != NULL; o = o->next)
8249     {
8250       if (!elf_fixup_link_order (abfd, o))
8251         return FALSE;
8252     }
8253
8254   /* Since ELF permits relocations to be against local symbols, we
8255      must have the local symbols available when we do the relocations.
8256      Since we would rather only read the local symbols once, and we
8257      would rather not keep them in memory, we handle all the
8258      relocations for a single input file at the same time.
8259
8260      Unfortunately, there is no way to know the total number of local
8261      symbols until we have seen all of them, and the local symbol
8262      indices precede the global symbol indices.  This means that when
8263      we are generating relocatable output, and we see a reloc against
8264      a global symbol, we can not know the symbol index until we have
8265      finished examining all the local symbols to see which ones we are
8266      going to output.  To deal with this, we keep the relocations in
8267      memory, and don't output them until the end of the link.  This is
8268      an unfortunate waste of memory, but I don't see a good way around
8269      it.  Fortunately, it only happens when performing a relocatable
8270      link, which is not the common case.  FIXME: If keep_memory is set
8271      we could write the relocs out and then read them again; I don't
8272      know how bad the memory loss will be.  */
8273
8274   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
8275     sub->output_has_begun = FALSE;
8276   for (o = abfd->sections; o != NULL; o = o->next)
8277     {
8278       for (p = o->map_head.link_order; p != NULL; p = p->next)
8279         {
8280           if (p->type == bfd_indirect_link_order
8281               && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
8282                   == bfd_target_elf_flavour)
8283               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
8284             {
8285               if (! sub->output_has_begun)
8286                 {
8287                   if (! elf_link_input_bfd (&finfo, sub))
8288                     goto error_return;
8289                   sub->output_has_begun = TRUE;
8290                 }
8291             }
8292           else if (p->type == bfd_section_reloc_link_order
8293                    || p->type == bfd_symbol_reloc_link_order)
8294             {
8295               if (! elf_reloc_link_order (abfd, info, o, p))
8296                 goto error_return;
8297             }
8298           else
8299             {
8300               if (! _bfd_default_link_order (abfd, info, o, p))
8301                 goto error_return;
8302             }
8303         }
8304     }
8305
8306   /* Output any global symbols that got converted to local in a
8307      version script or due to symbol visibility.  We do this in a
8308      separate step since ELF requires all local symbols to appear
8309      prior to any global symbols.  FIXME: We should only do this if
8310      some global symbols were, in fact, converted to become local.
8311      FIXME: Will this work correctly with the Irix 5 linker?  */
8312   eoinfo.failed = FALSE;
8313   eoinfo.finfo = &finfo;
8314   eoinfo.localsyms = TRUE;
8315   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
8316                           &eoinfo);
8317   if (eoinfo.failed)
8318     return FALSE;
8319
8320   /* If backend needs to output some local symbols not present in the hash
8321      table, do it now.  */
8322   if (bed->elf_backend_output_arch_local_syms)
8323     {
8324       typedef bfd_boolean (*out_sym_func)
8325         (void *, const char *, Elf_Internal_Sym *, asection *,
8326          struct elf_link_hash_entry *);
8327
8328       if (! ((*bed->elf_backend_output_arch_local_syms)
8329              (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
8330         return FALSE;
8331     }
8332
8333   /* That wrote out all the local symbols.  Finish up the symbol table
8334      with the global symbols. Even if we want to strip everything we
8335      can, we still need to deal with those global symbols that got
8336      converted to local in a version script.  */
8337
8338   /* The sh_info field records the index of the first non local symbol.  */
8339   symtab_hdr->sh_info = bfd_get_symcount (abfd);
8340
8341   if (dynamic
8342       && finfo.dynsym_sec->output_section != bfd_abs_section_ptr)
8343     {
8344       Elf_Internal_Sym sym;
8345       bfd_byte *dynsym = finfo.dynsym_sec->contents;
8346       long last_local = 0;
8347
8348       /* Write out the section symbols for the output sections.  */
8349       if (info->shared || elf_hash_table (info)->is_relocatable_executable)
8350         {
8351           asection *s;
8352
8353           sym.st_size = 0;
8354           sym.st_name = 0;
8355           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
8356           sym.st_other = 0;
8357
8358           for (s = abfd->sections; s != NULL; s = s->next)
8359             {
8360               int indx;
8361               bfd_byte *dest;
8362               long dynindx;
8363
8364               dynindx = elf_section_data (s)->dynindx;
8365               if (dynindx <= 0)
8366                 continue;
8367               indx = elf_section_data (s)->this_idx;
8368               BFD_ASSERT (indx > 0);
8369               sym.st_shndx = indx;
8370               if (! check_dynsym (abfd, &sym))
8371                 return FALSE;
8372               sym.st_value = s->vma;
8373               dest = dynsym + dynindx * bed->s->sizeof_sym;
8374               if (last_local < dynindx)
8375                 last_local = dynindx;
8376               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
8377             }
8378         }
8379
8380       /* Write out the local dynsyms.  */
8381       if (elf_hash_table (info)->dynlocal)
8382         {
8383           struct elf_link_local_dynamic_entry *e;
8384           for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
8385             {
8386               asection *s;
8387               bfd_byte *dest;
8388
8389               sym.st_size = e->isym.st_size;
8390               sym.st_other = e->isym.st_other;
8391
8392               /* Copy the internal symbol as is.
8393                  Note that we saved a word of storage and overwrote
8394                  the original st_name with the dynstr_index.  */
8395               sym = e->isym;
8396
8397               if (e->isym.st_shndx != SHN_UNDEF
8398                   && (e->isym.st_shndx < SHN_LORESERVE
8399                       || e->isym.st_shndx > SHN_HIRESERVE))
8400                 {
8401                   s = bfd_section_from_elf_index (e->input_bfd,
8402                                                   e->isym.st_shndx);
8403
8404                   sym.st_shndx =
8405                     elf_section_data (s->output_section)->this_idx;
8406                   if (! check_dynsym (abfd, &sym))
8407                     return FALSE;
8408                   sym.st_value = (s->output_section->vma
8409                                   + s->output_offset
8410                                   + e->isym.st_value);
8411                 }
8412
8413               if (last_local < e->dynindx)
8414                 last_local = e->dynindx;
8415
8416               dest = dynsym + e->dynindx * bed->s->sizeof_sym;
8417               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
8418             }
8419         }
8420
8421       elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info =
8422         last_local + 1;
8423     }
8424
8425   /* We get the global symbols from the hash table.  */
8426   eoinfo.failed = FALSE;
8427   eoinfo.localsyms = FALSE;
8428   eoinfo.finfo = &finfo;
8429   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
8430                           &eoinfo);
8431   if (eoinfo.failed)
8432     return FALSE;
8433
8434   /* If backend needs to output some symbols not present in the hash
8435      table, do it now.  */
8436   if (bed->elf_backend_output_arch_syms)
8437     {
8438       typedef bfd_boolean (*out_sym_func)
8439         (void *, const char *, Elf_Internal_Sym *, asection *,
8440          struct elf_link_hash_entry *);
8441
8442       if (! ((*bed->elf_backend_output_arch_syms)
8443              (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
8444         return FALSE;
8445     }
8446
8447   /* Flush all symbols to the file.  */
8448   if (! elf_link_flush_output_syms (&finfo, bed))
8449     return FALSE;
8450
8451   /* Now we know the size of the symtab section.  */
8452   off += symtab_hdr->sh_size;
8453
8454   symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
8455   if (symtab_shndx_hdr->sh_name != 0)
8456     {
8457       symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
8458       symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
8459       symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
8460       amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
8461       symtab_shndx_hdr->sh_size = amt;
8462
8463       off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
8464                                                        off, TRUE);
8465
8466       if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
8467           || (bfd_bwrite (finfo.symshndxbuf, amt, abfd) != amt))
8468         return FALSE;
8469     }
8470
8471
8472   /* Finish up and write out the symbol string table (.strtab)
8473      section.  */
8474   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
8475   /* sh_name was set in prep_headers.  */
8476   symstrtab_hdr->sh_type = SHT_STRTAB;
8477   symstrtab_hdr->sh_flags = 0;
8478   symstrtab_hdr->sh_addr = 0;
8479   symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
8480   symstrtab_hdr->sh_entsize = 0;
8481   symstrtab_hdr->sh_link = 0;
8482   symstrtab_hdr->sh_info = 0;
8483   /* sh_offset is set just below.  */
8484   symstrtab_hdr->sh_addralign = 1;
8485
8486   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE);
8487   elf_tdata (abfd)->next_file_pos = off;
8488
8489   if (bfd_get_symcount (abfd) > 0)
8490     {
8491       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
8492           || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
8493         return FALSE;
8494     }
8495
8496   /* Adjust the relocs to have the correct symbol indices.  */
8497   for (o = abfd->sections; o != NULL; o = o->next)
8498     {
8499       if ((o->flags & SEC_RELOC) == 0)
8500         continue;
8501
8502       elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr,
8503                               elf_section_data (o)->rel_count,
8504                               elf_section_data (o)->rel_hashes);
8505       if (elf_section_data (o)->rel_hdr2 != NULL)
8506         elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2,
8507                                 elf_section_data (o)->rel_count2,
8508                                 (elf_section_data (o)->rel_hashes
8509                                  + elf_section_data (o)->rel_count));
8510
8511       /* Set the reloc_count field to 0 to prevent write_relocs from
8512          trying to swap the relocs out itself.  */
8513       o->reloc_count = 0;
8514     }
8515
8516   if (dynamic && info->combreloc && dynobj != NULL)
8517     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
8518
8519   /* If we are linking against a dynamic object, or generating a
8520      shared library, finish up the dynamic linking information.  */
8521   if (dynamic)
8522     {
8523       bfd_byte *dyncon, *dynconend;
8524
8525       /* Fix up .dynamic entries.  */
8526       o = bfd_get_section_by_name (dynobj, ".dynamic");
8527       BFD_ASSERT (o != NULL);
8528
8529       dyncon = o->contents;
8530       dynconend = o->contents + o->size;
8531       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
8532         {
8533           Elf_Internal_Dyn dyn;
8534           const char *name;
8535           unsigned int type;
8536
8537           bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
8538
8539           switch (dyn.d_tag)
8540             {
8541             default:
8542               continue;
8543             case DT_NULL:
8544               if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
8545                 {
8546                   switch (elf_section_data (reldyn)->this_hdr.sh_type)
8547                     {
8548                     case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
8549                     case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
8550                     default: continue;
8551                     }
8552                   dyn.d_un.d_val = relativecount;
8553                   relativecount = 0;
8554                   break;
8555                 }
8556               continue;
8557
8558             case DT_INIT:
8559               name = info->init_function;
8560               goto get_sym;
8561             case DT_FINI:
8562               name = info->fini_function;
8563             get_sym:
8564               {
8565                 struct elf_link_hash_entry *h;
8566
8567                 h = elf_link_hash_lookup (elf_hash_table (info), name,
8568                                           FALSE, FALSE, TRUE);
8569                 if (h != NULL
8570                     && (h->root.type == bfd_link_hash_defined
8571                         || h->root.type == bfd_link_hash_defweak))
8572                   {
8573                     dyn.d_un.d_val = h->root.u.def.value;
8574                     o = h->root.u.def.section;
8575                     if (o->output_section != NULL)
8576                       dyn.d_un.d_val += (o->output_section->vma
8577                                          + o->output_offset);
8578                     else
8579                       {
8580                         /* The symbol is imported from another shared
8581                            library and does not apply to this one.  */
8582                         dyn.d_un.d_val = 0;
8583                       }
8584                     break;
8585                   }
8586               }
8587               continue;
8588
8589             case DT_PREINIT_ARRAYSZ:
8590               name = ".preinit_array";
8591               goto get_size;
8592             case DT_INIT_ARRAYSZ:
8593               name = ".init_array";
8594               goto get_size;
8595             case DT_FINI_ARRAYSZ:
8596               name = ".fini_array";
8597             get_size:
8598               o = bfd_get_section_by_name (abfd, name);
8599               if (o == NULL)
8600                 {
8601                   (*_bfd_error_handler)
8602                     (_("%B: could not find output section %s"), abfd, name);
8603                   goto error_return;
8604                 }
8605               if (o->size == 0)
8606                 (*_bfd_error_handler)
8607                   (_("warning: %s section has zero size"), name);
8608               dyn.d_un.d_val = o->size;
8609               break;
8610
8611             case DT_PREINIT_ARRAY:
8612               name = ".preinit_array";
8613               goto get_vma;
8614             case DT_INIT_ARRAY:
8615               name = ".init_array";
8616               goto get_vma;
8617             case DT_FINI_ARRAY:
8618               name = ".fini_array";
8619               goto get_vma;
8620
8621             case DT_HASH:
8622               name = ".hash";
8623               goto get_vma;
8624             case DT_STRTAB:
8625               name = ".dynstr";
8626               goto get_vma;
8627             case DT_SYMTAB:
8628               name = ".dynsym";
8629               goto get_vma;
8630             case DT_VERDEF:
8631               name = ".gnu.version_d";
8632               goto get_vma;
8633             case DT_VERNEED:
8634               name = ".gnu.version_r";
8635               goto get_vma;
8636             case DT_VERSYM:
8637               name = ".gnu.version";
8638             get_vma:
8639               o = bfd_get_section_by_name (abfd, name);
8640               if (o == NULL)
8641                 {
8642                   (*_bfd_error_handler)
8643                     (_("%B: could not find output section %s"), abfd, name);
8644                   goto error_return;
8645                 }
8646               dyn.d_un.d_ptr = o->vma;
8647               break;
8648
8649             case DT_REL:
8650             case DT_RELA:
8651             case DT_RELSZ:
8652             case DT_RELASZ:
8653               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
8654                 type = SHT_REL;
8655               else
8656                 type = SHT_RELA;
8657               dyn.d_un.d_val = 0;
8658               for (i = 1; i < elf_numsections (abfd); i++)
8659                 {
8660                   Elf_Internal_Shdr *hdr;
8661
8662                   hdr = elf_elfsections (abfd)[i];
8663                   if (hdr->sh_type == type
8664                       && (hdr->sh_flags & SHF_ALLOC) != 0)
8665                     {
8666                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
8667                         dyn.d_un.d_val += hdr->sh_size;
8668                       else
8669                         {
8670                           if (dyn.d_un.d_val == 0
8671                               || hdr->sh_addr < dyn.d_un.d_val)
8672                             dyn.d_un.d_val = hdr->sh_addr;
8673                         }
8674                     }
8675                 }
8676               break;
8677             }
8678           bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
8679         }
8680     }
8681
8682   /* If we have created any dynamic sections, then output them.  */
8683   if (dynobj != NULL)
8684     {
8685       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
8686         goto error_return;
8687
8688       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
8689       if (info->warn_shared_textrel && info->shared)
8690         {
8691           bfd_byte *dyncon, *dynconend;
8692
8693           /* Fix up .dynamic entries.  */
8694           o = bfd_get_section_by_name (dynobj, ".dynamic");
8695           BFD_ASSERT (o != NULL);
8696
8697           dyncon = o->contents;
8698           dynconend = o->contents + o->size;
8699           for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
8700             {
8701               Elf_Internal_Dyn dyn;
8702
8703               bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
8704
8705               if (dyn.d_tag == DT_TEXTREL)
8706                 {
8707                   _bfd_error_handler
8708                     (_("warning: creating a DT_TEXTREL in a shared object."));
8709                   break;
8710                 }
8711             }
8712         }
8713
8714       for (o = dynobj->sections; o != NULL; o = o->next)
8715         {
8716           if ((o->flags & SEC_HAS_CONTENTS) == 0
8717               || o->size == 0
8718               || o->output_section == bfd_abs_section_ptr)
8719             continue;
8720           if ((o->flags & SEC_LINKER_CREATED) == 0)
8721             {
8722               /* At this point, we are only interested in sections
8723                  created by _bfd_elf_link_create_dynamic_sections.  */
8724               continue;
8725             }
8726           if (elf_hash_table (info)->stab_info.stabstr == o)
8727             continue;
8728           if (elf_hash_table (info)->eh_info.hdr_sec == o)
8729             continue;
8730           if ((elf_section_data (o->output_section)->this_hdr.sh_type
8731                != SHT_STRTAB)
8732               || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
8733             {
8734               if (! bfd_set_section_contents (abfd, o->output_section,
8735                                               o->contents,
8736                                               (file_ptr) o->output_offset,
8737                                               o->size))
8738                 goto error_return;
8739             }
8740           else
8741             {
8742               /* The contents of the .dynstr section are actually in a
8743                  stringtab.  */
8744               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
8745               if (bfd_seek (abfd, off, SEEK_SET) != 0
8746                   || ! _bfd_elf_strtab_emit (abfd,
8747                                              elf_hash_table (info)->dynstr))
8748                 goto error_return;
8749             }
8750         }
8751     }
8752
8753   if (info->relocatable)
8754     {
8755       bfd_boolean failed = FALSE;
8756
8757       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
8758       if (failed)
8759         goto error_return;
8760     }
8761
8762   /* If we have optimized stabs strings, output them.  */
8763   if (elf_hash_table (info)->stab_info.stabstr != NULL)
8764     {
8765       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
8766         goto error_return;
8767     }
8768
8769   if (info->eh_frame_hdr)
8770     {
8771       if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
8772         goto error_return;
8773     }
8774
8775   if (finfo.symstrtab != NULL)
8776     _bfd_stringtab_free (finfo.symstrtab);
8777   if (finfo.contents != NULL)
8778     free (finfo.contents);
8779   if (finfo.external_relocs != NULL)
8780     free (finfo.external_relocs);
8781   if (finfo.internal_relocs != NULL)
8782     free (finfo.internal_relocs);
8783   if (finfo.external_syms != NULL)
8784     free (finfo.external_syms);
8785   if (finfo.locsym_shndx != NULL)
8786     free (finfo.locsym_shndx);
8787   if (finfo.internal_syms != NULL)
8788     free (finfo.internal_syms);
8789   if (finfo.indices != NULL)
8790     free (finfo.indices);
8791   if (finfo.sections != NULL)
8792     free (finfo.sections);
8793   if (finfo.symbuf != NULL)
8794     free (finfo.symbuf);
8795   if (finfo.symshndxbuf != NULL)
8796     free (finfo.symshndxbuf);
8797   for (o = abfd->sections; o != NULL; o = o->next)
8798     {
8799       if ((o->flags & SEC_RELOC) != 0
8800           && elf_section_data (o)->rel_hashes != NULL)
8801         free (elf_section_data (o)->rel_hashes);
8802     }
8803
8804   elf_tdata (abfd)->linker = TRUE;
8805
8806   return TRUE;
8807
8808  error_return:
8809   if (finfo.symstrtab != NULL)
8810     _bfd_stringtab_free (finfo.symstrtab);
8811   if (finfo.contents != NULL)
8812     free (finfo.contents);
8813   if (finfo.external_relocs != NULL)
8814     free (finfo.external_relocs);
8815   if (finfo.internal_relocs != NULL)
8816     free (finfo.internal_relocs);
8817   if (finfo.external_syms != NULL)
8818     free (finfo.external_syms);
8819   if (finfo.locsym_shndx != NULL)
8820     free (finfo.locsym_shndx);
8821   if (finfo.internal_syms != NULL)
8822     free (finfo.internal_syms);
8823   if (finfo.indices != NULL)
8824     free (finfo.indices);
8825   if (finfo.sections != NULL)
8826     free (finfo.sections);
8827   if (finfo.symbuf != NULL)
8828     free (finfo.symbuf);
8829   if (finfo.symshndxbuf != NULL)
8830     free (finfo.symshndxbuf);
8831   for (o = abfd->sections; o != NULL; o = o->next)
8832     {
8833       if ((o->flags & SEC_RELOC) != 0
8834           && elf_section_data (o)->rel_hashes != NULL)
8835         free (elf_section_data (o)->rel_hashes);
8836     }
8837
8838   return FALSE;
8839 }
8840 \f
8841 /* Garbage collect unused sections.  */
8842
8843 /* The mark phase of garbage collection.  For a given section, mark
8844    it and any sections in this section's group, and all the sections
8845    which define symbols to which it refers.  */
8846
8847 typedef asection * (*gc_mark_hook_fn)
8848   (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
8849    struct elf_link_hash_entry *, Elf_Internal_Sym *);
8850
8851 bfd_boolean
8852 _bfd_elf_gc_mark (struct bfd_link_info *info,
8853                   asection *sec,
8854                   gc_mark_hook_fn gc_mark_hook)
8855 {
8856   bfd_boolean ret;
8857   bfd_boolean is_eh;
8858   asection *group_sec;
8859
8860   sec->gc_mark = 1;
8861
8862   /* Mark all the sections in the group.  */
8863   group_sec = elf_section_data (sec)->next_in_group;
8864   if (group_sec && !group_sec->gc_mark)
8865     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
8866       return FALSE;
8867
8868   /* Look through the section relocs.  */
8869   ret = TRUE;
8870   is_eh = strcmp (sec->name, ".eh_frame") == 0;
8871   if ((sec->flags & SEC_RELOC) != 0 && sec->reloc_count > 0)
8872     {
8873       Elf_Internal_Rela *relstart, *rel, *relend;
8874       Elf_Internal_Shdr *symtab_hdr;
8875       struct elf_link_hash_entry **sym_hashes;
8876       size_t nlocsyms;
8877       size_t extsymoff;
8878       bfd *input_bfd = sec->owner;
8879       const struct elf_backend_data *bed = get_elf_backend_data (input_bfd);
8880       Elf_Internal_Sym *isym = NULL;
8881       int r_sym_shift;
8882
8883       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
8884       sym_hashes = elf_sym_hashes (input_bfd);
8885
8886       /* Read the local symbols.  */
8887       if (elf_bad_symtab (input_bfd))
8888         {
8889           nlocsyms = symtab_hdr->sh_size / bed->s->sizeof_sym;
8890           extsymoff = 0;
8891         }
8892       else
8893         extsymoff = nlocsyms = symtab_hdr->sh_info;
8894
8895       isym = (Elf_Internal_Sym *) symtab_hdr->contents;
8896       if (isym == NULL && nlocsyms != 0)
8897         {
8898           isym = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, nlocsyms, 0,
8899                                        NULL, NULL, NULL);
8900           if (isym == NULL)
8901             return FALSE;
8902         }
8903
8904       /* Read the relocations.  */
8905       relstart = _bfd_elf_link_read_relocs (input_bfd, sec, NULL, NULL,
8906                                             info->keep_memory);
8907       if (relstart == NULL)
8908         {
8909           ret = FALSE;
8910           goto out1;
8911         }
8912       relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
8913
8914       if (bed->s->arch_size == 32)
8915         r_sym_shift = 8;
8916       else
8917         r_sym_shift = 32;
8918
8919       for (rel = relstart; rel < relend; rel++)
8920         {
8921           unsigned long r_symndx;
8922           asection *rsec;
8923           struct elf_link_hash_entry *h;
8924
8925           r_symndx = rel->r_info >> r_sym_shift;
8926           if (r_symndx == 0)
8927             continue;
8928
8929           if (r_symndx >= nlocsyms
8930               || ELF_ST_BIND (isym[r_symndx].st_info) != STB_LOCAL)
8931             {
8932               h = sym_hashes[r_symndx - extsymoff];
8933               while (h->root.type == bfd_link_hash_indirect
8934                      || h->root.type == bfd_link_hash_warning)
8935                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8936               rsec = (*gc_mark_hook) (sec, info, rel, h, NULL);
8937             }
8938           else
8939             {
8940               rsec = (*gc_mark_hook) (sec, info, rel, NULL, &isym[r_symndx]);
8941             }
8942
8943           if (rsec && !rsec->gc_mark)
8944             {
8945               if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour)
8946                 rsec->gc_mark = 1;
8947               else if (is_eh)
8948                 rsec->gc_mark_from_eh = 1;
8949               else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
8950                 {
8951                   ret = FALSE;
8952                   goto out2;
8953                 }
8954             }
8955         }
8956
8957     out2:
8958       if (elf_section_data (sec)->relocs != relstart)
8959         free (relstart);
8960     out1:
8961       if (isym != NULL && symtab_hdr->contents != (unsigned char *) isym)
8962         {
8963           if (! info->keep_memory)
8964             free (isym);
8965           else
8966             symtab_hdr->contents = (unsigned char *) isym;
8967         }
8968     }
8969
8970   return ret;
8971 }
8972
8973 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
8974
8975 struct elf_gc_sweep_symbol_info {
8976   struct bfd_link_info *info;
8977   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
8978                        bfd_boolean);
8979 };
8980
8981 static bfd_boolean
8982 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
8983 {
8984   if (h->root.type == bfd_link_hash_warning)
8985     h = (struct elf_link_hash_entry *) h->root.u.i.link;
8986
8987   if ((h->root.type == bfd_link_hash_defined
8988        || h->root.type == bfd_link_hash_defweak)
8989       && !h->root.u.def.section->gc_mark
8990       && !(h->root.u.def.section->owner->flags & DYNAMIC))
8991     {
8992       struct elf_gc_sweep_symbol_info *inf = data;
8993       (*inf->hide_symbol) (inf->info, h, TRUE);
8994     }
8995
8996   return TRUE;
8997 }
8998
8999 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
9000
9001 typedef bfd_boolean (*gc_sweep_hook_fn)
9002   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
9003
9004 static bfd_boolean
9005 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
9006 {
9007   bfd *sub;
9008   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9009   gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook;
9010   unsigned long section_sym_count;
9011   struct elf_gc_sweep_symbol_info sweep_info;
9012
9013   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
9014     {
9015       asection *o;
9016
9017       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
9018         continue;
9019
9020       for (o = sub->sections; o != NULL; o = o->next)
9021         {
9022           /* Keep debug and special sections.  */
9023           if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0
9024               || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
9025             o->gc_mark = 1;
9026
9027           if (o->gc_mark)
9028             continue;
9029
9030           /* Skip sweeping sections already excluded.  */
9031           if (o->flags & SEC_EXCLUDE)
9032             continue;
9033
9034           /* Since this is early in the link process, it is simple
9035              to remove a section from the output.  */
9036           o->flags |= SEC_EXCLUDE;
9037
9038           /* But we also have to update some of the relocation
9039              info we collected before.  */
9040           if (gc_sweep_hook
9041               && (o->flags & SEC_RELOC) != 0
9042               && o->reloc_count > 0
9043               && !bfd_is_abs_section (o->output_section))
9044             {
9045               Elf_Internal_Rela *internal_relocs;
9046               bfd_boolean r;
9047
9048               internal_relocs
9049                 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
9050                                              info->keep_memory);
9051               if (internal_relocs == NULL)
9052                 return FALSE;
9053
9054               r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
9055
9056               if (elf_section_data (o)->relocs != internal_relocs)
9057                 free (internal_relocs);
9058
9059               if (!r)
9060                 return FALSE;
9061             }
9062         }
9063     }
9064
9065   /* Remove the symbols that were in the swept sections from the dynamic
9066      symbol table.  GCFIXME: Anyone know how to get them out of the
9067      static symbol table as well?  */
9068   sweep_info.info = info;
9069   sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
9070   elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
9071                           &sweep_info);
9072
9073   _bfd_elf_link_renumber_dynsyms (abfd, info, &section_sym_count);
9074   return TRUE;
9075 }
9076
9077 /* Propagate collected vtable information.  This is called through
9078    elf_link_hash_traverse.  */
9079
9080 static bfd_boolean
9081 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
9082 {
9083   if (h->root.type == bfd_link_hash_warning)
9084     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9085
9086   /* Those that are not vtables.  */
9087   if (h->vtable == NULL || h->vtable->parent == NULL)
9088     return TRUE;
9089
9090   /* Those vtables that do not have parents, we cannot merge.  */
9091   if (h->vtable->parent == (struct elf_link_hash_entry *) -1)
9092     return TRUE;
9093
9094   /* If we've already been done, exit.  */
9095   if (h->vtable->used && h->vtable->used[-1])
9096     return TRUE;
9097
9098   /* Make sure the parent's table is up to date.  */
9099   elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp);
9100
9101   if (h->vtable->used == NULL)
9102     {
9103       /* None of this table's entries were referenced.  Re-use the
9104          parent's table.  */
9105       h->vtable->used = h->vtable->parent->vtable->used;
9106       h->vtable->size = h->vtable->parent->vtable->size;
9107     }
9108   else
9109     {
9110       size_t n;
9111       bfd_boolean *cu, *pu;
9112
9113       /* Or the parent's entries into ours.  */
9114       cu = h->vtable->used;
9115       cu[-1] = TRUE;
9116       pu = h->vtable->parent->vtable->used;
9117       if (pu != NULL)
9118         {
9119           const struct elf_backend_data *bed;
9120           unsigned int log_file_align;
9121
9122           bed = get_elf_backend_data (h->root.u.def.section->owner);
9123           log_file_align = bed->s->log_file_align;
9124           n = h->vtable->parent->vtable->size >> log_file_align;
9125           while (n--)
9126             {
9127               if (*pu)
9128                 *cu = TRUE;
9129               pu++;
9130               cu++;
9131             }
9132         }
9133     }
9134
9135   return TRUE;
9136 }
9137
9138 static bfd_boolean
9139 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
9140 {
9141   asection *sec;
9142   bfd_vma hstart, hend;
9143   Elf_Internal_Rela *relstart, *relend, *rel;
9144   const struct elf_backend_data *bed;
9145   unsigned int log_file_align;
9146
9147   if (h->root.type == bfd_link_hash_warning)
9148     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9149
9150   /* Take care of both those symbols that do not describe vtables as
9151      well as those that are not loaded.  */
9152   if (h->vtable == NULL || h->vtable->parent == NULL)
9153     return TRUE;
9154
9155   BFD_ASSERT (h->root.type == bfd_link_hash_defined
9156               || h->root.type == bfd_link_hash_defweak);
9157
9158   sec = h->root.u.def.section;
9159   hstart = h->root.u.def.value;
9160   hend = hstart + h->size;
9161
9162   relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
9163   if (!relstart)
9164     return *(bfd_boolean *) okp = FALSE;
9165   bed = get_elf_backend_data (sec->owner);
9166   log_file_align = bed->s->log_file_align;
9167
9168   relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
9169
9170   for (rel = relstart; rel < relend; ++rel)
9171     if (rel->r_offset >= hstart && rel->r_offset < hend)
9172       {
9173         /* If the entry is in use, do nothing.  */
9174         if (h->vtable->used
9175             && (rel->r_offset - hstart) < h->vtable->size)
9176           {
9177             bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
9178             if (h->vtable->used[entry])
9179               continue;
9180           }
9181         /* Otherwise, kill it.  */
9182         rel->r_offset = rel->r_info = rel->r_addend = 0;
9183       }
9184
9185   return TRUE;
9186 }
9187
9188 /* Mark sections containing dynamically referenced symbols.  When
9189    building shared libraries, we must assume that any visible symbol is
9190    referenced.  */
9191
9192 bfd_boolean
9193 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
9194 {
9195   struct bfd_link_info *info = (struct bfd_link_info *) inf;
9196
9197   if (h->root.type == bfd_link_hash_warning)
9198     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9199
9200   if ((h->root.type == bfd_link_hash_defined
9201        || h->root.type == bfd_link_hash_defweak)
9202       && (h->ref_dynamic
9203           || (!info->executable
9204               && h->def_regular
9205               && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
9206               && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN)))
9207     h->root.u.def.section->flags |= SEC_KEEP;
9208
9209   return TRUE;
9210 }
9211
9212 /* Do mark and sweep of unused sections.  */
9213
9214 bfd_boolean
9215 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
9216 {
9217   bfd_boolean ok = TRUE;
9218   bfd *sub;
9219   asection * (*gc_mark_hook)
9220     (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
9221      struct elf_link_hash_entry *h, Elf_Internal_Sym *);
9222   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9223
9224   if (!bed->can_gc_sections
9225       || info->relocatable
9226       || info->emitrelocations
9227       || !is_elf_hash_table (info->hash))
9228     {
9229       (*_bfd_error_handler)(_("Warning: gc-sections option ignored"));
9230       return TRUE;
9231     }
9232
9233   /* Apply transitive closure to the vtable entry usage info.  */
9234   elf_link_hash_traverse (elf_hash_table (info),
9235                           elf_gc_propagate_vtable_entries_used,
9236                           &ok);
9237   if (!ok)
9238     return FALSE;
9239
9240   /* Kill the vtable relocations that were not used.  */
9241   elf_link_hash_traverse (elf_hash_table (info),
9242                           elf_gc_smash_unused_vtentry_relocs,
9243                           &ok);
9244   if (!ok)
9245     return FALSE;
9246
9247   /* Mark dynamically referenced symbols.  */
9248   if (elf_hash_table (info)->dynamic_sections_created)
9249     elf_link_hash_traverse (elf_hash_table (info),
9250                             bed->gc_mark_dynamic_ref,
9251                             info);
9252
9253   /* Grovel through relocs to find out who stays ...  */
9254   gc_mark_hook = bed->gc_mark_hook;
9255   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
9256     {
9257       asection *o;
9258
9259       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
9260         continue;
9261
9262       for (o = sub->sections; o != NULL; o = o->next)
9263         if ((o->flags & SEC_KEEP) != 0 && !o->gc_mark)
9264           if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
9265             return FALSE;
9266     }
9267
9268   /* ... again for sections marked from eh_frame.  */
9269   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
9270     {
9271       asection *o;
9272
9273       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
9274         continue;
9275
9276       /* Keep .gcc_except_table.* if the associated .text.* is
9277          marked.  This isn't very nice, but the proper solution,
9278          splitting .eh_frame up and using comdat doesn't pan out
9279          easily due to needing special relocs to handle the
9280          difference of two symbols in separate sections.
9281          Don't keep code sections referenced by .eh_frame.  */
9282       for (o = sub->sections; o != NULL; o = o->next)
9283         if (!o->gc_mark && o->gc_mark_from_eh && (o->flags & SEC_CODE) == 0)
9284           {
9285             if (strncmp (o->name, ".gcc_except_table.", 18) == 0)
9286               {
9287                 unsigned long len;
9288                 char *fn_name;
9289                 asection *fn_text;
9290
9291                 len = strlen (o->name + 18) + 1;
9292                 fn_name = bfd_malloc (len + 6);
9293                 if (fn_name == NULL)
9294                   return FALSE;
9295                 memcpy (fn_name, ".text.", 6);
9296                 memcpy (fn_name + 6, o->name + 18, len);
9297                 fn_text = bfd_get_section_by_name (sub, fn_name);
9298                 free (fn_name);
9299                 if (fn_text == NULL || !fn_text->gc_mark)
9300                   continue;
9301               }
9302
9303             /* If not using specially named exception table section,
9304                then keep whatever we are using.  */
9305             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
9306               return FALSE;
9307           }
9308     }
9309
9310   /* ... and mark SEC_EXCLUDE for those that go.  */
9311   return elf_gc_sweep (abfd, info);
9312 }
9313 \f
9314 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
9315
9316 bfd_boolean
9317 bfd_elf_gc_record_vtinherit (bfd *abfd,
9318                              asection *sec,
9319                              struct elf_link_hash_entry *h,
9320                              bfd_vma offset)
9321 {
9322   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
9323   struct elf_link_hash_entry **search, *child;
9324   bfd_size_type extsymcount;
9325   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9326
9327   /* The sh_info field of the symtab header tells us where the
9328      external symbols start.  We don't care about the local symbols at
9329      this point.  */
9330   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
9331   if (!elf_bad_symtab (abfd))
9332     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
9333
9334   sym_hashes = elf_sym_hashes (abfd);
9335   sym_hashes_end = sym_hashes + extsymcount;
9336
9337   /* Hunt down the child symbol, which is in this section at the same
9338      offset as the relocation.  */
9339   for (search = sym_hashes; search != sym_hashes_end; ++search)
9340     {
9341       if ((child = *search) != NULL
9342           && (child->root.type == bfd_link_hash_defined
9343               || child->root.type == bfd_link_hash_defweak)
9344           && child->root.u.def.section == sec
9345           && child->root.u.def.value == offset)
9346         goto win;
9347     }
9348
9349   (*_bfd_error_handler) ("%B: %A+%lu: No symbol found for INHERIT",
9350                          abfd, sec, (unsigned long) offset);
9351   bfd_set_error (bfd_error_invalid_operation);
9352   return FALSE;
9353
9354  win:
9355   if (!child->vtable)
9356     {
9357       child->vtable = bfd_zalloc (abfd, sizeof (*child->vtable));
9358       if (!child->vtable)
9359         return FALSE;
9360     }
9361   if (!h)
9362     {
9363       /* This *should* only be the absolute section.  It could potentially
9364          be that someone has defined a non-global vtable though, which
9365          would be bad.  It isn't worth paging in the local symbols to be
9366          sure though; that case should simply be handled by the assembler.  */
9367
9368       child->vtable->parent = (struct elf_link_hash_entry *) -1;
9369     }
9370   else
9371     child->vtable->parent = h;
9372
9373   return TRUE;
9374 }
9375
9376 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
9377
9378 bfd_boolean
9379 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
9380                            asection *sec ATTRIBUTE_UNUSED,
9381                            struct elf_link_hash_entry *h,
9382                            bfd_vma addend)
9383 {
9384   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9385   unsigned int log_file_align = bed->s->log_file_align;
9386
9387   if (!h->vtable)
9388     {
9389       h->vtable = bfd_zalloc (abfd, sizeof (*h->vtable));
9390       if (!h->vtable)
9391         return FALSE;
9392     }
9393
9394   if (addend >= h->vtable->size)
9395     {
9396       size_t size, bytes, file_align;
9397       bfd_boolean *ptr = h->vtable->used;
9398
9399       /* While the symbol is undefined, we have to be prepared to handle
9400          a zero size.  */
9401       file_align = 1 << log_file_align;
9402       if (h->root.type == bfd_link_hash_undefined)
9403         size = addend + file_align;
9404       else
9405         {
9406           size = h->size;
9407           if (addend >= size)
9408             {
9409               /* Oops!  We've got a reference past the defined end of
9410                  the table.  This is probably a bug -- shall we warn?  */
9411               size = addend + file_align;
9412             }
9413         }
9414       size = (size + file_align - 1) & -file_align;
9415
9416       /* Allocate one extra entry for use as a "done" flag for the
9417          consolidation pass.  */
9418       bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
9419
9420       if (ptr)
9421         {
9422           ptr = bfd_realloc (ptr - 1, bytes);
9423
9424           if (ptr != NULL)
9425             {
9426               size_t oldbytes;
9427
9428               oldbytes = (((h->vtable->size >> log_file_align) + 1)
9429                           * sizeof (bfd_boolean));
9430               memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
9431             }
9432         }
9433       else
9434         ptr = bfd_zmalloc (bytes);
9435
9436       if (ptr == NULL)
9437         return FALSE;
9438
9439       /* And arrange for that done flag to be at index -1.  */
9440       h->vtable->used = ptr + 1;
9441       h->vtable->size = size;
9442     }
9443
9444   h->vtable->used[addend >> log_file_align] = TRUE;
9445
9446   return TRUE;
9447 }
9448
9449 struct alloc_got_off_arg {
9450   bfd_vma gotoff;
9451   unsigned int got_elt_size;
9452 };
9453
9454 /* We need a special top-level link routine to convert got reference counts
9455    to real got offsets.  */
9456
9457 static bfd_boolean
9458 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
9459 {
9460   struct alloc_got_off_arg *gofarg = arg;
9461
9462   if (h->root.type == bfd_link_hash_warning)
9463     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9464
9465   if (h->got.refcount > 0)
9466     {
9467       h->got.offset = gofarg->gotoff;
9468       gofarg->gotoff += gofarg->got_elt_size;
9469     }
9470   else
9471     h->got.offset = (bfd_vma) -1;
9472
9473   return TRUE;
9474 }
9475
9476 /* And an accompanying bit to work out final got entry offsets once
9477    we're done.  Should be called from final_link.  */
9478
9479 bfd_boolean
9480 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
9481                                         struct bfd_link_info *info)
9482 {
9483   bfd *i;
9484   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9485   bfd_vma gotoff;
9486   unsigned int got_elt_size = bed->s->arch_size / 8;
9487   struct alloc_got_off_arg gofarg;
9488
9489   if (! is_elf_hash_table (info->hash))
9490     return FALSE;
9491
9492   /* The GOT offset is relative to the .got section, but the GOT header is
9493      put into the .got.plt section, if the backend uses it.  */
9494   if (bed->want_got_plt)
9495     gotoff = 0;
9496   else
9497     gotoff = bed->got_header_size;
9498
9499   /* Do the local .got entries first.  */
9500   for (i = info->input_bfds; i; i = i->link_next)
9501     {
9502       bfd_signed_vma *local_got;
9503       bfd_size_type j, locsymcount;
9504       Elf_Internal_Shdr *symtab_hdr;
9505
9506       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
9507         continue;
9508
9509       local_got = elf_local_got_refcounts (i);
9510       if (!local_got)
9511         continue;
9512
9513       symtab_hdr = &elf_tdata (i)->symtab_hdr;
9514       if (elf_bad_symtab (i))
9515         locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9516       else
9517         locsymcount = symtab_hdr->sh_info;
9518
9519       for (j = 0; j < locsymcount; ++j)
9520         {
9521           if (local_got[j] > 0)
9522             {
9523               local_got[j] = gotoff;
9524               gotoff += got_elt_size;
9525             }
9526           else
9527             local_got[j] = (bfd_vma) -1;
9528         }
9529     }
9530
9531   /* Then the global .got entries.  .plt refcounts are handled by
9532      adjust_dynamic_symbol  */
9533   gofarg.gotoff = gotoff;
9534   gofarg.got_elt_size = got_elt_size;
9535   elf_link_hash_traverse (elf_hash_table (info),
9536                           elf_gc_allocate_got_offsets,
9537                           &gofarg);
9538   return TRUE;
9539 }
9540
9541 /* Many folk need no more in the way of final link than this, once
9542    got entry reference counting is enabled.  */
9543
9544 bfd_boolean
9545 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
9546 {
9547   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
9548     return FALSE;
9549
9550   /* Invoke the regular ELF backend linker to do all the work.  */
9551   return bfd_elf_final_link (abfd, info);
9552 }
9553
9554 bfd_boolean
9555 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
9556 {
9557   struct elf_reloc_cookie *rcookie = cookie;
9558
9559   if (rcookie->bad_symtab)
9560     rcookie->rel = rcookie->rels;
9561
9562   for (; rcookie->rel < rcookie->relend; rcookie->rel++)
9563     {
9564       unsigned long r_symndx;
9565
9566       if (! rcookie->bad_symtab)
9567         if (rcookie->rel->r_offset > offset)
9568           return FALSE;
9569       if (rcookie->rel->r_offset != offset)
9570         continue;
9571
9572       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
9573       if (r_symndx == SHN_UNDEF)
9574         return TRUE;
9575
9576       if (r_symndx >= rcookie->locsymcount
9577           || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
9578         {
9579           struct elf_link_hash_entry *h;
9580
9581           h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
9582
9583           while (h->root.type == bfd_link_hash_indirect
9584                  || h->root.type == bfd_link_hash_warning)
9585             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9586
9587           if ((h->root.type == bfd_link_hash_defined
9588                || h->root.type == bfd_link_hash_defweak)
9589               && elf_discarded_section (h->root.u.def.section))
9590             return TRUE;
9591           else
9592             return FALSE;
9593         }
9594       else
9595         {
9596           /* It's not a relocation against a global symbol,
9597              but it could be a relocation against a local
9598              symbol for a discarded section.  */
9599           asection *isec;
9600           Elf_Internal_Sym *isym;
9601
9602           /* Need to: get the symbol; get the section.  */
9603           isym = &rcookie->locsyms[r_symndx];
9604           if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
9605             {
9606               isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
9607               if (isec != NULL && elf_discarded_section (isec))
9608                 return TRUE;
9609             }
9610         }
9611       return FALSE;
9612     }
9613   return FALSE;
9614 }
9615
9616 /* Discard unneeded references to discarded sections.
9617    Returns TRUE if any section's size was changed.  */
9618 /* This function assumes that the relocations are in sorted order,
9619    which is true for all known assemblers.  */
9620
9621 bfd_boolean
9622 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
9623 {
9624   struct elf_reloc_cookie cookie;
9625   asection *stab, *eh;
9626   Elf_Internal_Shdr *symtab_hdr;
9627   const struct elf_backend_data *bed;
9628   bfd *abfd;
9629   unsigned int count;
9630   bfd_boolean ret = FALSE;
9631
9632   if (info->traditional_format
9633       || !is_elf_hash_table (info->hash))
9634     return FALSE;
9635
9636   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
9637     {
9638       if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
9639         continue;
9640
9641       bed = get_elf_backend_data (abfd);
9642
9643       if ((abfd->flags & DYNAMIC) != 0)
9644         continue;
9645
9646       eh = bfd_get_section_by_name (abfd, ".eh_frame");
9647       if (info->relocatable
9648           || (eh != NULL
9649               && (eh->size == 0
9650                   || bfd_is_abs_section (eh->output_section))))
9651         eh = NULL;
9652
9653       stab = bfd_get_section_by_name (abfd, ".stab");
9654       if (stab != NULL
9655           && (stab->size == 0
9656               || bfd_is_abs_section (stab->output_section)
9657               || stab->sec_info_type != ELF_INFO_TYPE_STABS))
9658         stab = NULL;
9659
9660       if (stab == NULL
9661           && eh == NULL
9662           && bed->elf_backend_discard_info == NULL)
9663         continue;
9664
9665       symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
9666       cookie.abfd = abfd;
9667       cookie.sym_hashes = elf_sym_hashes (abfd);
9668       cookie.bad_symtab = elf_bad_symtab (abfd);
9669       if (cookie.bad_symtab)
9670         {
9671           cookie.locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9672           cookie.extsymoff = 0;
9673         }
9674       else
9675         {
9676           cookie.locsymcount = symtab_hdr->sh_info;
9677           cookie.extsymoff = symtab_hdr->sh_info;
9678         }
9679
9680       if (bed->s->arch_size == 32)
9681         cookie.r_sym_shift = 8;
9682       else
9683         cookie.r_sym_shift = 32;
9684
9685       cookie.locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
9686       if (cookie.locsyms == NULL && cookie.locsymcount != 0)
9687         {
9688           cookie.locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
9689                                                  cookie.locsymcount, 0,
9690                                                  NULL, NULL, NULL);
9691           if (cookie.locsyms == NULL)
9692             return FALSE;
9693         }
9694
9695       if (stab != NULL)
9696         {
9697           cookie.rels = NULL;
9698           count = stab->reloc_count;
9699           if (count != 0)
9700             cookie.rels = _bfd_elf_link_read_relocs (abfd, stab, NULL, NULL,
9701                                                      info->keep_memory);
9702           if (cookie.rels != NULL)
9703             {
9704               cookie.rel = cookie.rels;
9705               cookie.relend = cookie.rels;
9706               cookie.relend += count * bed->s->int_rels_per_ext_rel;
9707               if (_bfd_discard_section_stabs (abfd, stab,
9708                                               elf_section_data (stab)->sec_info,
9709                                               bfd_elf_reloc_symbol_deleted_p,
9710                                               &cookie))
9711                 ret = TRUE;
9712               if (elf_section_data (stab)->relocs != cookie.rels)
9713                 free (cookie.rels);
9714             }
9715         }
9716
9717       if (eh != NULL)
9718         {
9719           cookie.rels = NULL;
9720           count = eh->reloc_count;
9721           if (count != 0)
9722             cookie.rels = _bfd_elf_link_read_relocs (abfd, eh, NULL, NULL,
9723                                                      info->keep_memory);
9724           cookie.rel = cookie.rels;
9725           cookie.relend = cookie.rels;
9726           if (cookie.rels != NULL)
9727             cookie.relend += count * bed->s->int_rels_per_ext_rel;
9728
9729           if (_bfd_elf_discard_section_eh_frame (abfd, info, eh,
9730                                                  bfd_elf_reloc_symbol_deleted_p,
9731                                                  &cookie))
9732             ret = TRUE;
9733
9734           if (cookie.rels != NULL
9735               && elf_section_data (eh)->relocs != cookie.rels)
9736             free (cookie.rels);
9737         }
9738
9739       if (bed->elf_backend_discard_info != NULL
9740           && (*bed->elf_backend_discard_info) (abfd, &cookie, info))
9741         ret = TRUE;
9742
9743       if (cookie.locsyms != NULL
9744           && symtab_hdr->contents != (unsigned char *) cookie.locsyms)
9745         {
9746           if (! info->keep_memory)
9747             free (cookie.locsyms);
9748           else
9749             symtab_hdr->contents = (unsigned char *) cookie.locsyms;
9750         }
9751     }
9752
9753   if (info->eh_frame_hdr
9754       && !info->relocatable
9755       && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
9756     ret = TRUE;
9757
9758   return ret;
9759 }
9760
9761 void
9762 _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section * sec)
9763 {
9764   flagword flags;
9765   const char *name, *p;
9766   struct bfd_section_already_linked *l;
9767   struct bfd_section_already_linked_hash_entry *already_linked_list;
9768   asection *group;
9769
9770   /* A single member comdat group section may be discarded by a
9771      linkonce section. See below.  */
9772   if (sec->output_section == bfd_abs_section_ptr)
9773     return;
9774
9775   flags = sec->flags;
9776
9777   /* Check if it belongs to a section group.  */
9778   group = elf_sec_group (sec);
9779
9780   /* Return if it isn't a linkonce section nor a member of a group.  A
9781      comdat group section also has SEC_LINK_ONCE set.  */
9782   if ((flags & SEC_LINK_ONCE) == 0 && group == NULL)
9783     return;
9784
9785   if (group)
9786     {
9787       /* If this is the member of a single member comdat group, check if
9788          the group should be discarded.  */
9789       if (elf_next_in_group (sec) == sec
9790           && (group->flags & SEC_LINK_ONCE) != 0)
9791         sec = group;
9792       else
9793         return;
9794     }
9795
9796   /* FIXME: When doing a relocatable link, we may have trouble
9797      copying relocations in other sections that refer to local symbols
9798      in the section being discarded.  Those relocations will have to
9799      be converted somehow; as of this writing I'm not sure that any of
9800      the backends handle that correctly.
9801
9802      It is tempting to instead not discard link once sections when
9803      doing a relocatable link (technically, they should be discarded
9804      whenever we are building constructors).  However, that fails,
9805      because the linker winds up combining all the link once sections
9806      into a single large link once section, which defeats the purpose
9807      of having link once sections in the first place.
9808
9809      Also, not merging link once sections in a relocatable link
9810      causes trouble for MIPS ELF, which relies on link once semantics
9811      to handle the .reginfo section correctly.  */
9812
9813   name = bfd_get_section_name (abfd, sec);
9814
9815   if (strncmp (name, ".gnu.linkonce.", sizeof (".gnu.linkonce.") - 1) == 0
9816       && (p = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
9817     p++;
9818   else
9819     p = name;
9820
9821   already_linked_list = bfd_section_already_linked_table_lookup (p);
9822
9823   for (l = already_linked_list->entry; l != NULL; l = l->next)
9824     {
9825       /* We may have 3 different sections on the list: group section,
9826          comdat section and linkonce section. SEC may be a linkonce or
9827          group section. We match a group section with a group section,
9828          a linkonce section with a linkonce section, and ignore comdat
9829          section.  */
9830       if ((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
9831           && strcmp (name, l->sec->name) == 0
9832           && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL)
9833         {
9834           /* The section has already been linked.  See if we should
9835              issue a warning.  */
9836           switch (flags & SEC_LINK_DUPLICATES)
9837             {
9838             default:
9839               abort ();
9840
9841             case SEC_LINK_DUPLICATES_DISCARD:
9842               break;
9843
9844             case SEC_LINK_DUPLICATES_ONE_ONLY:
9845               (*_bfd_error_handler)
9846                 (_("%B: ignoring duplicate section `%A'"),
9847                  abfd, sec);
9848               break;
9849
9850             case SEC_LINK_DUPLICATES_SAME_SIZE:
9851               if (sec->size != l->sec->size)
9852                 (*_bfd_error_handler)
9853                   (_("%B: duplicate section `%A' has different size"),
9854                    abfd, sec);
9855               break;
9856
9857             case SEC_LINK_DUPLICATES_SAME_CONTENTS:
9858               if (sec->size != l->sec->size)
9859                 (*_bfd_error_handler)
9860                   (_("%B: duplicate section `%A' has different size"),
9861                    abfd, sec);
9862               else if (sec->size != 0)
9863                 {
9864                   bfd_byte *sec_contents, *l_sec_contents;
9865
9866                   if (!bfd_malloc_and_get_section (abfd, sec, &sec_contents))
9867                     (*_bfd_error_handler)
9868                       (_("%B: warning: could not read contents of section `%A'"),
9869                        abfd, sec);
9870                   else if (!bfd_malloc_and_get_section (l->sec->owner, l->sec,
9871                                                         &l_sec_contents))
9872                     (*_bfd_error_handler)
9873                       (_("%B: warning: could not read contents of section `%A'"),
9874                        l->sec->owner, l->sec);
9875                   else if (memcmp (sec_contents, l_sec_contents, sec->size) != 0)
9876                     (*_bfd_error_handler)
9877                       (_("%B: warning: duplicate section `%A' has different contents"),
9878                        abfd, sec);
9879
9880                   if (sec_contents)
9881                     free (sec_contents);
9882                   if (l_sec_contents)
9883                     free (l_sec_contents);
9884                 }
9885               break;
9886             }
9887
9888           /* Set the output_section field so that lang_add_section
9889              does not create a lang_input_section structure for this
9890              section.  Since there might be a symbol in the section
9891              being discarded, we must retain a pointer to the section
9892              which we are really going to use.  */
9893           sec->output_section = bfd_abs_section_ptr;
9894           sec->kept_section = l->sec;
9895
9896           if (flags & SEC_GROUP)
9897             {
9898               asection *first = elf_next_in_group (sec);
9899               asection *s = first;
9900
9901               while (s != NULL)
9902                 {
9903                   s->output_section = bfd_abs_section_ptr;
9904                   /* Record which group discards it.  */
9905                   s->kept_section = l->sec;
9906                   s = elf_next_in_group (s);
9907                   /* These lists are circular.  */
9908                   if (s == first)
9909                     break;
9910                 }
9911             }
9912
9913           return;
9914         }
9915     }
9916
9917   if (group)
9918     {
9919       /* If this is the member of a single member comdat group and the
9920          group hasn't be discarded, we check if it matches a linkonce
9921          section. We only record the discarded comdat group. Otherwise
9922          the undiscarded group will be discarded incorrectly later since
9923          itself has been recorded.  */
9924       for (l = already_linked_list->entry; l != NULL; l = l->next)
9925         if ((l->sec->flags & SEC_GROUP) == 0
9926             && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL
9927             && bfd_elf_match_symbols_in_sections (l->sec,
9928                                                   elf_next_in_group (sec)))
9929           {
9930             elf_next_in_group (sec)->output_section = bfd_abs_section_ptr;
9931             elf_next_in_group (sec)->kept_section = l->sec;
9932             group->output_section = bfd_abs_section_ptr;
9933             break;
9934           }
9935       if (l == NULL)
9936         return;
9937     }
9938   else
9939     /* There is no direct match. But for linkonce section, we should
9940        check if there is a match with comdat group member. We always
9941        record the linkonce section, discarded or not.  */
9942     for (l = already_linked_list->entry; l != NULL; l = l->next)
9943       if (l->sec->flags & SEC_GROUP)
9944         {
9945           asection *first = elf_next_in_group (l->sec);
9946
9947           if (first != NULL
9948               && elf_next_in_group (first) == first
9949               && bfd_elf_match_symbols_in_sections (first, sec))
9950             {
9951               sec->output_section = bfd_abs_section_ptr;
9952               sec->kept_section = l->sec;
9953               break;
9954             }
9955         }
9956
9957   /* This is the first section with this name.  Record it.  */
9958   bfd_section_already_linked_table_insert (already_linked_list, sec);
9959 }
9960
9961 bfd_boolean
9962 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
9963 {
9964   return sym->st_shndx == SHN_COMMON;
9965 }
9966
9967 unsigned int
9968 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
9969 {
9970   return SHN_COMMON;
9971 }
9972
9973 asection *
9974 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
9975 {
9976   return bfd_com_section_ptr;
9977 }