Merge from vendor branch FILE:
[games.git] / contrib / binutils-2.17 / 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   void *old_tab = NULL;
3084   void *old_hash;
3085   void *old_ent;
3086   struct bfd_link_hash_entry *old_undefs = NULL;
3087   struct bfd_link_hash_entry *old_undefs_tail = NULL;
3088   long old_dynsymcount = 0;
3089   size_t tabsize = 0;
3090   size_t hashsize = 0;
3091
3092   htab = elf_hash_table (info);
3093   bed = get_elf_backend_data (abfd);
3094
3095   if ((abfd->flags & DYNAMIC) == 0)
3096     dynamic = FALSE;
3097   else
3098     {
3099       dynamic = TRUE;
3100
3101       /* You can't use -r against a dynamic object.  Also, there's no
3102          hope of using a dynamic object which does not exactly match
3103          the format of the output file.  */
3104       if (info->relocatable
3105           || !is_elf_hash_table (htab)
3106           || htab->root.creator != abfd->xvec)
3107         {
3108           if (info->relocatable)
3109             bfd_set_error (bfd_error_invalid_operation);
3110           else
3111             bfd_set_error (bfd_error_wrong_format);
3112           goto error_return;
3113         }
3114     }
3115
3116   /* As a GNU extension, any input sections which are named
3117      .gnu.warning.SYMBOL are treated as warning symbols for the given
3118      symbol.  This differs from .gnu.warning sections, which generate
3119      warnings when they are included in an output file.  */
3120   if (info->executable)
3121     {
3122       asection *s;
3123
3124       for (s = abfd->sections; s != NULL; s = s->next)
3125         {
3126           const char *name;
3127
3128           name = bfd_get_section_name (abfd, s);
3129           if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
3130             {
3131               char *msg;
3132               bfd_size_type sz;
3133
3134               name += sizeof ".gnu.warning." - 1;
3135
3136               /* If this is a shared object, then look up the symbol
3137                  in the hash table.  If it is there, and it is already
3138                  been defined, then we will not be using the entry
3139                  from this shared object, so we don't need to warn.
3140                  FIXME: If we see the definition in a regular object
3141                  later on, we will warn, but we shouldn't.  The only
3142                  fix is to keep track of what warnings we are supposed
3143                  to emit, and then handle them all at the end of the
3144                  link.  */
3145               if (dynamic)
3146                 {
3147                   struct elf_link_hash_entry *h;
3148
3149                   h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
3150
3151                   /* FIXME: What about bfd_link_hash_common?  */
3152                   if (h != NULL
3153                       && (h->root.type == bfd_link_hash_defined
3154                           || h->root.type == bfd_link_hash_defweak))
3155                     {
3156                       /* We don't want to issue this warning.  Clobber
3157                          the section size so that the warning does not
3158                          get copied into the output file.  */
3159                       s->size = 0;
3160                       continue;
3161                     }
3162                 }
3163
3164               sz = s->size;
3165               msg = bfd_alloc (abfd, sz + 1);
3166               if (msg == NULL)
3167                 goto error_return;
3168
3169               if (! bfd_get_section_contents (abfd, s, msg, 0, sz))
3170                 goto error_return;
3171
3172               msg[sz] = '\0';
3173
3174               if (! (_bfd_generic_link_add_one_symbol
3175                      (info, abfd, name, BSF_WARNING, s, 0, msg,
3176                       FALSE, bed->collect, NULL)))
3177                 goto error_return;
3178
3179               if (! info->relocatable)
3180                 {
3181                   /* Clobber the section size so that the warning does
3182                      not get copied into the output file.  */
3183                   s->size = 0;
3184
3185                   /* Also set SEC_EXCLUDE, so that symbols defined in
3186                      the warning section don't get copied to the output.  */
3187                   s->flags |= SEC_EXCLUDE;
3188                 }
3189             }
3190         }
3191     }
3192
3193   add_needed = TRUE;
3194   if (! dynamic)
3195     {
3196       /* If we are creating a shared library, create all the dynamic
3197          sections immediately.  We need to attach them to something,
3198          so we attach them to this BFD, provided it is the right
3199          format.  FIXME: If there are no input BFD's of the same
3200          format as the output, we can't make a shared library.  */
3201       if (info->shared
3202           && is_elf_hash_table (htab)
3203           && htab->root.creator == abfd->xvec
3204           && !htab->dynamic_sections_created)
3205         {
3206           if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
3207             goto error_return;
3208         }
3209     }
3210   else if (!is_elf_hash_table (htab))
3211     goto error_return;
3212   else
3213     {
3214       asection *s;
3215       const char *soname = NULL;
3216       struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
3217       int ret;
3218
3219       /* ld --just-symbols and dynamic objects don't mix very well.
3220          ld shouldn't allow it.  */
3221       if ((s = abfd->sections) != NULL
3222           && s->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
3223         abort ();
3224
3225       /* If this dynamic lib was specified on the command line with
3226          --as-needed in effect, then we don't want to add a DT_NEEDED
3227          tag unless the lib is actually used.  Similary for libs brought
3228          in by another lib's DT_NEEDED.  When --no-add-needed is used
3229          on a dynamic lib, we don't want to add a DT_NEEDED entry for
3230          any dynamic library in DT_NEEDED tags in the dynamic lib at
3231          all.  */
3232       add_needed = (elf_dyn_lib_class (abfd)
3233                     & (DYN_AS_NEEDED | DYN_DT_NEEDED
3234                        | DYN_NO_NEEDED)) == 0;
3235
3236       s = bfd_get_section_by_name (abfd, ".dynamic");
3237       if (s != NULL)
3238         {
3239           bfd_byte *dynbuf;
3240           bfd_byte *extdyn;
3241           int elfsec;
3242           unsigned long shlink;
3243
3244           if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
3245             goto error_free_dyn;
3246
3247           elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
3248           if (elfsec == -1)
3249             goto error_free_dyn;
3250           shlink = elf_elfsections (abfd)[elfsec]->sh_link;
3251
3252           for (extdyn = dynbuf;
3253                extdyn < dynbuf + s->size;
3254                extdyn += bed->s->sizeof_dyn)
3255             {
3256               Elf_Internal_Dyn dyn;
3257
3258               bed->s->swap_dyn_in (abfd, extdyn, &dyn);
3259               if (dyn.d_tag == DT_SONAME)
3260                 {
3261                   unsigned int tagv = dyn.d_un.d_val;
3262                   soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3263                   if (soname == NULL)
3264                     goto error_free_dyn;
3265                 }
3266               if (dyn.d_tag == DT_NEEDED)
3267                 {
3268                   struct bfd_link_needed_list *n, **pn;
3269                   char *fnm, *anm;
3270                   unsigned int tagv = dyn.d_un.d_val;
3271
3272                   amt = sizeof (struct bfd_link_needed_list);
3273                   n = bfd_alloc (abfd, amt);
3274                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3275                   if (n == NULL || fnm == NULL)
3276                     goto error_free_dyn;
3277                   amt = strlen (fnm) + 1;
3278                   anm = bfd_alloc (abfd, amt);
3279                   if (anm == NULL)
3280                     goto error_free_dyn;
3281                   memcpy (anm, fnm, amt);
3282                   n->name = anm;
3283                   n->by = abfd;
3284                   n->next = NULL;
3285                   for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next)
3286                     ;
3287                   *pn = n;
3288                 }
3289               if (dyn.d_tag == DT_RUNPATH)
3290                 {
3291                   struct bfd_link_needed_list *n, **pn;
3292                   char *fnm, *anm;
3293                   unsigned int tagv = dyn.d_un.d_val;
3294
3295                   amt = sizeof (struct bfd_link_needed_list);
3296                   n = bfd_alloc (abfd, amt);
3297                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3298                   if (n == NULL || fnm == NULL)
3299                     goto error_free_dyn;
3300                   amt = strlen (fnm) + 1;
3301                   anm = bfd_alloc (abfd, amt);
3302                   if (anm == NULL)
3303                     goto error_free_dyn;
3304                   memcpy (anm, fnm, amt);
3305                   n->name = anm;
3306                   n->by = abfd;
3307                   n->next = NULL;
3308                   for (pn = & runpath;
3309                        *pn != NULL;
3310                        pn = &(*pn)->next)
3311                     ;
3312                   *pn = n;
3313                 }
3314               /* Ignore DT_RPATH if we have seen DT_RUNPATH.  */
3315               if (!runpath && dyn.d_tag == DT_RPATH)
3316                 {
3317                   struct bfd_link_needed_list *n, **pn;
3318                   char *fnm, *anm;
3319                   unsigned int tagv = dyn.d_un.d_val;
3320
3321                   amt = sizeof (struct bfd_link_needed_list);
3322                   n = bfd_alloc (abfd, amt);
3323                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3324                   if (n == NULL || fnm == NULL)
3325                     goto error_free_dyn;
3326                   amt = strlen (fnm) + 1;
3327                   anm = bfd_alloc (abfd, amt);
3328                   if (anm == NULL)
3329                     {
3330                     error_free_dyn:
3331                       free (dynbuf);
3332                       goto error_return;
3333                     }
3334                   memcpy (anm, fnm, amt);
3335                   n->name = anm;
3336                   n->by = abfd;
3337                   n->next = NULL;
3338                   for (pn = & rpath;
3339                        *pn != NULL;
3340                        pn = &(*pn)->next)
3341                     ;
3342                   *pn = n;
3343                 }
3344             }
3345
3346           free (dynbuf);
3347         }
3348
3349       /* DT_RUNPATH overrides DT_RPATH.  Do _NOT_ bfd_release, as that
3350          frees all more recently bfd_alloc'd blocks as well.  */
3351       if (runpath)
3352         rpath = runpath;
3353
3354       if (rpath)
3355         {
3356           struct bfd_link_needed_list **pn;
3357           for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next)
3358             ;
3359           *pn = rpath;
3360         }
3361
3362       /* We do not want to include any of the sections in a dynamic
3363          object in the output file.  We hack by simply clobbering the
3364          list of sections in the BFD.  This could be handled more
3365          cleanly by, say, a new section flag; the existing
3366          SEC_NEVER_LOAD flag is not the one we want, because that one
3367          still implies that the section takes up space in the output
3368          file.  */
3369       bfd_section_list_clear (abfd);
3370
3371       /* Find the name to use in a DT_NEEDED entry that refers to this
3372          object.  If the object has a DT_SONAME entry, we use it.
3373          Otherwise, if the generic linker stuck something in
3374          elf_dt_name, we use that.  Otherwise, we just use the file
3375          name.  */
3376       if (soname == NULL || *soname == '\0')
3377         {
3378           soname = elf_dt_name (abfd);
3379           if (soname == NULL || *soname == '\0')
3380             soname = bfd_get_filename (abfd);
3381         }
3382
3383       /* Save the SONAME because sometimes the linker emulation code
3384          will need to know it.  */
3385       elf_dt_name (abfd) = soname;
3386
3387       ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
3388       if (ret < 0)
3389         goto error_return;
3390
3391       /* If we have already included this dynamic object in the
3392          link, just ignore it.  There is no reason to include a
3393          particular dynamic object more than once.  */
3394       if (ret > 0)
3395         return TRUE;
3396     }
3397
3398   /* If this is a dynamic object, we always link against the .dynsym
3399      symbol table, not the .symtab symbol table.  The dynamic linker
3400      will only see the .dynsym symbol table, so there is no reason to
3401      look at .symtab for a dynamic object.  */
3402
3403   if (! dynamic || elf_dynsymtab (abfd) == 0)
3404     hdr = &elf_tdata (abfd)->symtab_hdr;
3405   else
3406     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3407
3408   symcount = hdr->sh_size / bed->s->sizeof_sym;
3409
3410   /* The sh_info field of the symtab header tells us where the
3411      external symbols start.  We don't care about the local symbols at
3412      this point.  */
3413   if (elf_bad_symtab (abfd))
3414     {
3415       extsymcount = symcount;
3416       extsymoff = 0;
3417     }
3418   else
3419     {
3420       extsymcount = symcount - hdr->sh_info;
3421       extsymoff = hdr->sh_info;
3422     }
3423
3424   sym_hash = NULL;
3425   if (extsymcount != 0)
3426     {
3427       isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3428                                       NULL, NULL, NULL);
3429       if (isymbuf == NULL)
3430         goto error_return;
3431
3432       /* We store a pointer to the hash table entry for each external
3433          symbol.  */
3434       amt = extsymcount * sizeof (struct elf_link_hash_entry *);
3435       sym_hash = bfd_alloc (abfd, amt);
3436       if (sym_hash == NULL)
3437         goto error_free_sym;
3438       elf_sym_hashes (abfd) = sym_hash;
3439     }
3440
3441   if (dynamic)
3442     {
3443       /* Read in any version definitions.  */
3444       if (!_bfd_elf_slurp_version_tables (abfd,
3445                                           info->default_imported_symver))
3446         goto error_free_sym;
3447
3448       /* Read in the symbol versions, but don't bother to convert them
3449          to internal format.  */
3450       if (elf_dynversym (abfd) != 0)
3451         {
3452           Elf_Internal_Shdr *versymhdr;
3453
3454           versymhdr = &elf_tdata (abfd)->dynversym_hdr;
3455           extversym = bfd_malloc (versymhdr->sh_size);
3456           if (extversym == NULL)
3457             goto error_free_sym;
3458           amt = versymhdr->sh_size;
3459           if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
3460               || bfd_bread (extversym, amt, abfd) != amt)
3461             goto error_free_vers;
3462         }
3463     }
3464
3465   /* If we are loading an as-needed shared lib, save the symbol table
3466      state before we start adding symbols.  If the lib turns out
3467      to be unneeded, restore the state.  */
3468   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
3469     {
3470       unsigned int i;
3471       size_t entsize;
3472
3473       for (entsize = 0, i = 0; i < htab->root.table.size; i++)
3474         {
3475           struct bfd_hash_entry *p;
3476           struct elf_link_hash_entry *h;
3477
3478           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3479             {
3480               h = (struct elf_link_hash_entry *) p;
3481               entsize += htab->root.table.entsize;
3482               if (h->root.type == bfd_link_hash_warning)
3483                 entsize += htab->root.table.entsize;
3484             }
3485         }
3486
3487       tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
3488       hashsize = extsymcount * sizeof (struct elf_link_hash_entry *);
3489       old_tab = bfd_malloc (tabsize + entsize + hashsize);
3490       if (old_tab == NULL)
3491         goto error_free_vers;
3492
3493       /* Remember the current objalloc pointer, so that all mem for
3494          symbols added can later be reclaimed.  */
3495       alloc_mark = bfd_hash_allocate (&htab->root.table, 1);
3496       if (alloc_mark == NULL)
3497         goto error_free_vers;
3498
3499       /* Clone the symbol table and sym hashes.  Remember some
3500          pointers into the symbol table, and dynamic symbol count.  */
3501       old_hash = (char *) old_tab + tabsize;
3502       old_ent = (char *) old_hash + hashsize;
3503       memcpy (old_tab, htab->root.table.table, tabsize);
3504       memcpy (old_hash, sym_hash, hashsize);
3505       old_undefs = htab->root.undefs;
3506       old_undefs_tail = htab->root.undefs_tail;
3507       old_dynsymcount = htab->dynsymcount;
3508
3509       for (i = 0; i < htab->root.table.size; i++)
3510         {
3511           struct bfd_hash_entry *p;
3512           struct elf_link_hash_entry *h;
3513
3514           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3515             {
3516               memcpy (old_ent, p, htab->root.table.entsize);
3517               old_ent = (char *) old_ent + htab->root.table.entsize;
3518               h = (struct elf_link_hash_entry *) p;
3519               if (h->root.type == bfd_link_hash_warning)
3520                 {
3521                   memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
3522                   old_ent = (char *) old_ent + htab->root.table.entsize;
3523                 }
3524             }
3525         }
3526     }
3527
3528   weaks = NULL;
3529   ever = extversym != NULL ? extversym + extsymoff : NULL;
3530   for (isym = isymbuf, isymend = isymbuf + extsymcount;
3531        isym < isymend;
3532        isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
3533     {
3534       int bind;
3535       bfd_vma value;
3536       asection *sec, *new_sec;
3537       flagword flags;
3538       const char *name;
3539       struct elf_link_hash_entry *h;
3540       bfd_boolean definition;
3541       bfd_boolean size_change_ok;
3542       bfd_boolean type_change_ok;
3543       bfd_boolean new_weakdef;
3544       bfd_boolean override;
3545       bfd_boolean common;
3546       unsigned int old_alignment;
3547       bfd *old_bfd;
3548
3549       override = FALSE;
3550
3551       flags = BSF_NO_FLAGS;
3552       sec = NULL;
3553       value = isym->st_value;
3554       *sym_hash = NULL;
3555       common = bed->common_definition (isym);
3556
3557       bind = ELF_ST_BIND (isym->st_info);
3558       if (bind == STB_LOCAL)
3559         {
3560           /* This should be impossible, since ELF requires that all
3561              global symbols follow all local symbols, and that sh_info
3562              point to the first global symbol.  Unfortunately, Irix 5
3563              screws this up.  */
3564           continue;
3565         }
3566       else if (bind == STB_GLOBAL)
3567         {
3568           if (isym->st_shndx != SHN_UNDEF && !common)
3569             flags = BSF_GLOBAL;
3570         }
3571       else if (bind == STB_WEAK)
3572         flags = BSF_WEAK;
3573       else
3574         {
3575           /* Leave it up to the processor backend.  */
3576         }
3577
3578       if (isym->st_shndx == SHN_UNDEF)
3579         sec = bfd_und_section_ptr;
3580       else if (isym->st_shndx < SHN_LORESERVE
3581                || isym->st_shndx > SHN_HIRESERVE)
3582         {
3583           sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
3584           if (sec == NULL)
3585             sec = bfd_abs_section_ptr;
3586           else if (sec->kept_section)
3587             {
3588               /* Symbols from discarded section are undefined, and have
3589                  default visibility.  */
3590               sec = bfd_und_section_ptr;
3591               isym->st_shndx = SHN_UNDEF;
3592               isym->st_other = (STV_DEFAULT
3593                                 | (isym->st_other & ~ ELF_ST_VISIBILITY (-1)));
3594             }
3595           else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
3596             value -= sec->vma;
3597         }
3598       else if (isym->st_shndx == SHN_ABS)
3599         sec = bfd_abs_section_ptr;
3600       else if (isym->st_shndx == SHN_COMMON)
3601         {
3602           sec = bfd_com_section_ptr;
3603           /* What ELF calls the size we call the value.  What ELF
3604              calls the value we call the alignment.  */
3605           value = isym->st_size;
3606         }
3607       else
3608         {
3609           /* Leave it up to the processor backend.  */
3610         }
3611
3612       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3613                                               isym->st_name);
3614       if (name == NULL)
3615         goto error_free_vers;
3616
3617       if (isym->st_shndx == SHN_COMMON
3618           && ELF_ST_TYPE (isym->st_info) == STT_TLS)
3619         {
3620           asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
3621
3622           if (tcomm == NULL)
3623             {
3624               tcomm = bfd_make_section_with_flags (abfd, ".tcommon",
3625                                                    (SEC_ALLOC
3626                                                     | SEC_IS_COMMON
3627                                                     | SEC_LINKER_CREATED
3628                                                     | SEC_THREAD_LOCAL));
3629               if (tcomm == NULL)
3630                 goto error_free_vers;
3631             }
3632           sec = tcomm;
3633         }
3634       else if (bed->elf_add_symbol_hook)
3635         {
3636           if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
3637                                              &sec, &value))
3638             goto error_free_vers;
3639
3640           /* The hook function sets the name to NULL if this symbol
3641              should be skipped for some reason.  */
3642           if (name == NULL)
3643             continue;
3644         }
3645
3646       /* Sanity check that all possibilities were handled.  */
3647       if (sec == NULL)
3648         {
3649           bfd_set_error (bfd_error_bad_value);
3650           goto error_free_vers;
3651         }
3652
3653       if (bfd_is_und_section (sec)
3654           || bfd_is_com_section (sec))
3655         definition = FALSE;
3656       else
3657         definition = TRUE;
3658
3659       size_change_ok = FALSE;
3660       type_change_ok = bed->type_change_ok;
3661       old_alignment = 0;
3662       old_bfd = NULL;
3663       new_sec = sec;
3664
3665       if (is_elf_hash_table (htab))
3666         {
3667           Elf_Internal_Versym iver;
3668           unsigned int vernum = 0;
3669           bfd_boolean skip;
3670
3671           if (ever == NULL)
3672             {
3673               if (info->default_imported_symver)
3674                 /* Use the default symbol version created earlier.  */
3675                 iver.vs_vers = elf_tdata (abfd)->cverdefs;
3676               else
3677                 iver.vs_vers = 0;
3678             }
3679           else
3680             _bfd_elf_swap_versym_in (abfd, ever, &iver);
3681
3682           vernum = iver.vs_vers & VERSYM_VERSION;
3683
3684           /* If this is a hidden symbol, or if it is not version
3685              1, we append the version name to the symbol name.
3686              However, we do not modify a non-hidden absolute symbol
3687              if it is not a function, because it might be the version
3688              symbol itself.  FIXME: What if it isn't?  */
3689           if ((iver.vs_vers & VERSYM_HIDDEN) != 0
3690               || (vernum > 1 && (! bfd_is_abs_section (sec)
3691                                  || ELF_ST_TYPE (isym->st_info) == STT_FUNC)))
3692             {
3693               const char *verstr;
3694               size_t namelen, verlen, newlen;
3695               char *newname, *p;
3696
3697               if (isym->st_shndx != SHN_UNDEF)
3698                 {
3699                   if (vernum > elf_tdata (abfd)->cverdefs)
3700                     verstr = NULL;
3701                   else if (vernum > 1)
3702                     verstr =
3703                       elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
3704                   else
3705                     verstr = "";
3706
3707                   if (verstr == NULL)
3708                     {
3709                       (*_bfd_error_handler)
3710                         (_("%B: %s: invalid version %u (max %d)"),
3711                          abfd, name, vernum,
3712                          elf_tdata (abfd)->cverdefs);
3713                       bfd_set_error (bfd_error_bad_value);
3714                       goto error_free_vers;
3715                     }
3716                 }
3717               else
3718                 {
3719                   /* We cannot simply test for the number of
3720                      entries in the VERNEED section since the
3721                      numbers for the needed versions do not start
3722                      at 0.  */
3723                   Elf_Internal_Verneed *t;
3724
3725                   verstr = NULL;
3726                   for (t = elf_tdata (abfd)->verref;
3727                        t != NULL;
3728                        t = t->vn_nextref)
3729                     {
3730                       Elf_Internal_Vernaux *a;
3731
3732                       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
3733                         {
3734                           if (a->vna_other == vernum)
3735                             {
3736                               verstr = a->vna_nodename;
3737                               break;
3738                             }
3739                         }
3740                       if (a != NULL)
3741                         break;
3742                     }
3743                   if (verstr == NULL)
3744                     {
3745                       (*_bfd_error_handler)
3746                         (_("%B: %s: invalid needed version %d"),
3747                          abfd, name, vernum);
3748                       bfd_set_error (bfd_error_bad_value);
3749                       goto error_free_vers;
3750                     }
3751                 }
3752
3753               namelen = strlen (name);
3754               verlen = strlen (verstr);
3755               newlen = namelen + verlen + 2;
3756               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
3757                   && isym->st_shndx != SHN_UNDEF)
3758                 ++newlen;
3759
3760               newname = bfd_hash_allocate (&htab->root.table, newlen);
3761               if (newname == NULL)
3762                 goto error_free_vers;
3763               memcpy (newname, name, namelen);
3764               p = newname + namelen;
3765               *p++ = ELF_VER_CHR;
3766               /* If this is a defined non-hidden version symbol,
3767                  we add another @ to the name.  This indicates the
3768                  default version of the symbol.  */
3769               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
3770                   && isym->st_shndx != SHN_UNDEF)
3771                 *p++ = ELF_VER_CHR;
3772               memcpy (p, verstr, verlen + 1);
3773
3774               name = newname;
3775             }
3776
3777           if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec,
3778                                       &value, &old_alignment,
3779                                       sym_hash, &skip, &override,
3780                                       &type_change_ok, &size_change_ok))
3781             goto error_free_vers;
3782
3783           if (skip)
3784             continue;
3785
3786           if (override)
3787             definition = FALSE;
3788
3789           h = *sym_hash;
3790           while (h->root.type == bfd_link_hash_indirect
3791                  || h->root.type == bfd_link_hash_warning)
3792             h = (struct elf_link_hash_entry *) h->root.u.i.link;
3793
3794           /* Remember the old alignment if this is a common symbol, so
3795              that we don't reduce the alignment later on.  We can't
3796              check later, because _bfd_generic_link_add_one_symbol
3797              will set a default for the alignment which we want to
3798              override. We also remember the old bfd where the existing
3799              definition comes from.  */
3800           switch (h->root.type)
3801             {
3802             default:
3803               break;
3804
3805             case bfd_link_hash_defined:
3806             case bfd_link_hash_defweak:
3807               old_bfd = h->root.u.def.section->owner;
3808               break;
3809
3810             case bfd_link_hash_common:
3811               old_bfd = h->root.u.c.p->section->owner;
3812               old_alignment = h->root.u.c.p->alignment_power;
3813               break;
3814             }
3815
3816           if (elf_tdata (abfd)->verdef != NULL
3817               && ! override
3818               && vernum > 1
3819               && definition)
3820             h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
3821         }
3822
3823       if (! (_bfd_generic_link_add_one_symbol
3824              (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
3825               (struct bfd_link_hash_entry **) sym_hash)))
3826         goto error_free_vers;
3827
3828       h = *sym_hash;
3829       while (h->root.type == bfd_link_hash_indirect
3830              || h->root.type == bfd_link_hash_warning)
3831         h = (struct elf_link_hash_entry *) h->root.u.i.link;
3832       *sym_hash = h;
3833
3834       new_weakdef = FALSE;
3835       if (dynamic
3836           && definition
3837           && (flags & BSF_WEAK) != 0
3838           && ELF_ST_TYPE (isym->st_info) != STT_FUNC
3839           && is_elf_hash_table (htab)
3840           && h->u.weakdef == NULL)
3841         {
3842           /* Keep a list of all weak defined non function symbols from
3843              a dynamic object, using the weakdef field.  Later in this
3844              function we will set the weakdef field to the correct
3845              value.  We only put non-function symbols from dynamic
3846              objects on this list, because that happens to be the only
3847              time we need to know the normal symbol corresponding to a
3848              weak symbol, and the information is time consuming to
3849              figure out.  If the weakdef field is not already NULL,
3850              then this symbol was already defined by some previous
3851              dynamic object, and we will be using that previous
3852              definition anyhow.  */
3853
3854           h->u.weakdef = weaks;
3855           weaks = h;
3856           new_weakdef = TRUE;
3857         }
3858
3859       /* Set the alignment of a common symbol.  */
3860       if ((common || bfd_is_com_section (sec))
3861           && h->root.type == bfd_link_hash_common)
3862         {
3863           unsigned int align;
3864
3865           if (common)
3866             align = bfd_log2 (isym->st_value);
3867           else
3868             {
3869               /* The new symbol is a common symbol in a shared object.
3870                  We need to get the alignment from the section.  */
3871               align = new_sec->alignment_power;
3872             }
3873           if (align > old_alignment
3874               /* Permit an alignment power of zero if an alignment of one
3875                  is specified and no other alignments have been specified.  */
3876               || (isym->st_value == 1 && old_alignment == 0))
3877             h->root.u.c.p->alignment_power = align;
3878           else
3879             h->root.u.c.p->alignment_power = old_alignment;
3880         }
3881
3882       if (is_elf_hash_table (htab))
3883         {
3884           bfd_boolean dynsym;
3885
3886           /* Check the alignment when a common symbol is involved. This
3887              can change when a common symbol is overridden by a normal
3888              definition or a common symbol is ignored due to the old
3889              normal definition. We need to make sure the maximum
3890              alignment is maintained.  */
3891           if ((old_alignment || common)
3892               && h->root.type != bfd_link_hash_common)
3893             {
3894               unsigned int common_align;
3895               unsigned int normal_align;
3896               unsigned int symbol_align;
3897               bfd *normal_bfd;
3898               bfd *common_bfd;
3899
3900               symbol_align = ffs (h->root.u.def.value) - 1;
3901               if (h->root.u.def.section->owner != NULL
3902                   && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
3903                 {
3904                   normal_align = h->root.u.def.section->alignment_power;
3905                   if (normal_align > symbol_align)
3906                     normal_align = symbol_align;
3907                 }
3908               else
3909                 normal_align = symbol_align;
3910
3911               if (old_alignment)
3912                 {
3913                   common_align = old_alignment;
3914                   common_bfd = old_bfd;
3915                   normal_bfd = abfd;
3916                 }
3917               else
3918                 {
3919                   common_align = bfd_log2 (isym->st_value);
3920                   common_bfd = abfd;
3921                   normal_bfd = old_bfd;
3922                 }
3923
3924               if (normal_align < common_align)
3925                 (*_bfd_error_handler)
3926                   (_("Warning: alignment %u of symbol `%s' in %B"
3927                      " is smaller than %u in %B"),
3928                    normal_bfd, common_bfd,
3929                    1 << normal_align, name, 1 << common_align);
3930             }
3931
3932           /* Remember the symbol size and type.  */
3933           if (isym->st_size != 0
3934               && (definition || h->size == 0))
3935             {
3936               if (h->size != 0 && h->size != isym->st_size && ! size_change_ok)
3937                 (*_bfd_error_handler)
3938                   (_("Warning: size of symbol `%s' changed"
3939                      " from %lu in %B to %lu in %B"),
3940                    old_bfd, abfd,
3941                    name, (unsigned long) h->size,
3942                    (unsigned long) isym->st_size);
3943
3944               h->size = isym->st_size;
3945             }
3946
3947           /* If this is a common symbol, then we always want H->SIZE
3948              to be the size of the common symbol.  The code just above
3949              won't fix the size if a common symbol becomes larger.  We
3950              don't warn about a size change here, because that is
3951              covered by --warn-common.  */
3952           if (h->root.type == bfd_link_hash_common)
3953             h->size = h->root.u.c.size;
3954
3955           if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
3956               && (definition || h->type == STT_NOTYPE))
3957             {
3958               if (h->type != STT_NOTYPE
3959                   && h->type != ELF_ST_TYPE (isym->st_info)
3960                   && ! type_change_ok)
3961                 (*_bfd_error_handler)
3962                   (_("Warning: type of symbol `%s' changed"
3963                      " from %d to %d in %B"),
3964                    abfd, name, h->type, ELF_ST_TYPE (isym->st_info));
3965
3966               h->type = ELF_ST_TYPE (isym->st_info);
3967             }
3968
3969           /* If st_other has a processor-specific meaning, specific
3970              code might be needed here. We never merge the visibility
3971              attribute with the one from a dynamic object.  */
3972           if (bed->elf_backend_merge_symbol_attribute)
3973             (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
3974                                                         dynamic);
3975
3976           /* If this symbol has default visibility and the user has requested
3977              we not re-export it, then mark it as hidden.  */
3978           if (definition && !dynamic
3979               && (abfd->no_export
3980                   || (abfd->my_archive && abfd->my_archive->no_export))
3981               && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
3982             isym->st_other = (STV_HIDDEN
3983                               | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
3984
3985           if (isym->st_other != 0 && !dynamic)
3986             {
3987               unsigned char hvis, symvis, other, nvis;
3988
3989               /* Take the balance of OTHER from the definition.  */
3990               other = (definition ? isym->st_other : h->other);
3991               other &= ~ ELF_ST_VISIBILITY (-1);
3992
3993               /* Combine visibilities, using the most constraining one.  */
3994               hvis   = ELF_ST_VISIBILITY (h->other);
3995               symvis = ELF_ST_VISIBILITY (isym->st_other);
3996               if (! hvis)
3997                 nvis = symvis;
3998               else if (! symvis)
3999                 nvis = hvis;
4000               else
4001                 nvis = hvis < symvis ? hvis : symvis;
4002
4003               h->other = other | nvis;
4004             }
4005
4006           /* Set a flag in the hash table entry indicating the type of
4007              reference or definition we just found.  Keep a count of
4008              the number of dynamic symbols we find.  A dynamic symbol
4009              is one which is referenced or defined by both a regular
4010              object and a shared object.  */
4011           dynsym = FALSE;
4012           if (! dynamic)
4013             {
4014               if (! definition)
4015                 {
4016                   h->ref_regular = 1;
4017                   if (bind != STB_WEAK)
4018                     h->ref_regular_nonweak = 1;
4019                 }
4020               else
4021                 h->def_regular = 1;
4022               if (! info->executable
4023                   || h->def_dynamic
4024                   || h->ref_dynamic)
4025                 dynsym = TRUE;
4026             }
4027           else
4028             {
4029               if (! definition)
4030                 h->ref_dynamic = 1;
4031               else
4032                 h->def_dynamic = 1;
4033               if (h->def_regular
4034                   || h->ref_regular
4035                   || (h->u.weakdef != NULL
4036                       && ! new_weakdef
4037                       && h->u.weakdef->dynindx != -1))
4038                 dynsym = TRUE;
4039             }
4040
4041           /* Check to see if we need to add an indirect symbol for
4042              the default name.  */
4043           if (definition || h->root.type == bfd_link_hash_common)
4044             if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
4045                                               &sec, &value, &dynsym,
4046                                               override))
4047               goto error_free_vers;
4048
4049           if (definition && !dynamic)
4050             {
4051               char *p = strchr (name, ELF_VER_CHR);
4052               if (p != NULL && p[1] != ELF_VER_CHR)
4053                 {
4054                   /* Queue non-default versions so that .symver x, x@FOO
4055                      aliases can be checked.  */
4056                   if (!nondeflt_vers)
4057                     {
4058                       amt = ((isymend - isym + 1)
4059                              * sizeof (struct elf_link_hash_entry *));
4060                       nondeflt_vers = bfd_malloc (amt);
4061                     }
4062                   nondeflt_vers[nondeflt_vers_cnt++] = h;
4063                 }
4064             }
4065
4066           if (dynsym && h->dynindx == -1)
4067             {
4068               if (! bfd_elf_link_record_dynamic_symbol (info, h))
4069                 goto error_free_vers;
4070               if (h->u.weakdef != NULL
4071                   && ! new_weakdef
4072                   && h->u.weakdef->dynindx == -1)
4073                 {
4074                   if (!bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
4075                     goto error_free_vers;
4076                 }
4077             }
4078           else if (dynsym && h->dynindx != -1)
4079             /* If the symbol already has a dynamic index, but
4080                visibility says it should not be visible, turn it into
4081                a local symbol.  */
4082             switch (ELF_ST_VISIBILITY (h->other))
4083               {
4084               case STV_INTERNAL:
4085               case STV_HIDDEN:
4086                 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
4087                 dynsym = FALSE;
4088                 break;
4089               }
4090
4091           if (!add_needed
4092               && definition
4093               && dynsym
4094               && h->ref_regular)
4095             {
4096               int ret;
4097               const char *soname = elf_dt_name (abfd);
4098
4099               /* A symbol from a library loaded via DT_NEEDED of some
4100                  other library is referenced by a regular object.
4101                  Add a DT_NEEDED entry for it.  Issue an error if
4102                  --no-add-needed is used.  */
4103               if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
4104                 {
4105                   (*_bfd_error_handler)
4106                     (_("%s: invalid DSO for symbol `%s' definition"),
4107                      abfd, name);
4108                   bfd_set_error (bfd_error_bad_value);
4109                   goto error_free_vers;
4110                 }
4111
4112               elf_dyn_lib_class (abfd) &= ~DYN_AS_NEEDED;
4113
4114               add_needed = TRUE;
4115               ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4116               if (ret < 0)
4117                 goto error_free_vers;
4118
4119               BFD_ASSERT (ret == 0);
4120             }
4121         }
4122     }
4123
4124   if (extversym != NULL)
4125     {
4126       free (extversym);
4127       extversym = NULL;
4128     }
4129
4130   if (isymbuf != NULL)
4131     {
4132       free (isymbuf);
4133       isymbuf = NULL;
4134     }
4135
4136   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4137     {
4138       unsigned int i;
4139
4140       /* Restore the symbol table.  */
4141       old_hash = (char *) old_tab + tabsize;
4142       old_ent = (char *) old_hash + hashsize;
4143       sym_hash = elf_sym_hashes (abfd);
4144       memcpy (htab->root.table.table, old_tab, tabsize);
4145       memcpy (sym_hash, old_hash, hashsize);
4146       htab->root.undefs = old_undefs;
4147       htab->root.undefs_tail = old_undefs_tail;
4148       for (i = 0; i < htab->root.table.size; i++)
4149         {
4150           struct bfd_hash_entry *p;
4151           struct elf_link_hash_entry *h;
4152
4153           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4154             {
4155               h = (struct elf_link_hash_entry *) p;
4156               if (h->root.type == bfd_link_hash_warning)
4157                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4158               if (h->dynindx >= old_dynsymcount)
4159                 _bfd_elf_strtab_delref (htab->dynstr, h->dynstr_index);
4160
4161               memcpy (p, old_ent, htab->root.table.entsize);
4162               old_ent = (char *) old_ent + htab->root.table.entsize;
4163               h = (struct elf_link_hash_entry *) p;
4164               if (h->root.type == bfd_link_hash_warning)
4165                 {
4166                   memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
4167                   old_ent = (char *) old_ent + htab->root.table.entsize;
4168                 }
4169             }
4170         }
4171
4172       free (old_tab);
4173       objalloc_free_block ((struct objalloc *) htab->root.table.memory,
4174                            alloc_mark);
4175       if (nondeflt_vers != NULL)
4176         free (nondeflt_vers);
4177       return TRUE;
4178     }
4179
4180   if (old_tab != NULL)
4181     {
4182       free (old_tab);
4183       old_tab = NULL;
4184     }
4185
4186   /* Now that all the symbols from this input file are created, handle
4187      .symver foo, foo@BAR such that any relocs against foo become foo@BAR.  */
4188   if (nondeflt_vers != NULL)
4189     {
4190       bfd_size_type cnt, symidx;
4191
4192       for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
4193         {
4194           struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
4195           char *shortname, *p;
4196
4197           p = strchr (h->root.root.string, ELF_VER_CHR);
4198           if (p == NULL
4199               || (h->root.type != bfd_link_hash_defined
4200                   && h->root.type != bfd_link_hash_defweak))
4201             continue;
4202
4203           amt = p - h->root.root.string;
4204           shortname = bfd_malloc (amt + 1);
4205           memcpy (shortname, h->root.root.string, amt);
4206           shortname[amt] = '\0';
4207
4208           hi = (struct elf_link_hash_entry *)
4209                bfd_link_hash_lookup (&htab->root, shortname,
4210                                      FALSE, FALSE, FALSE);
4211           if (hi != NULL
4212               && hi->root.type == h->root.type
4213               && hi->root.u.def.value == h->root.u.def.value
4214               && hi->root.u.def.section == h->root.u.def.section)
4215             {
4216               (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
4217               hi->root.type = bfd_link_hash_indirect;
4218               hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
4219               (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
4220               sym_hash = elf_sym_hashes (abfd);
4221               if (sym_hash)
4222                 for (symidx = 0; symidx < extsymcount; ++symidx)
4223                   if (sym_hash[symidx] == hi)
4224                     {
4225                       sym_hash[symidx] = h;
4226                       break;
4227                     }
4228             }
4229           free (shortname);
4230         }
4231       free (nondeflt_vers);
4232       nondeflt_vers = NULL;
4233     }
4234
4235   /* Now set the weakdefs field correctly for all the weak defined
4236      symbols we found.  The only way to do this is to search all the
4237      symbols.  Since we only need the information for non functions in
4238      dynamic objects, that's the only time we actually put anything on
4239      the list WEAKS.  We need this information so that if a regular
4240      object refers to a symbol defined weakly in a dynamic object, the
4241      real symbol in the dynamic object is also put in the dynamic
4242      symbols; we also must arrange for both symbols to point to the
4243      same memory location.  We could handle the general case of symbol
4244      aliasing, but a general symbol alias can only be generated in
4245      assembler code, handling it correctly would be very time
4246      consuming, and other ELF linkers don't handle general aliasing
4247      either.  */
4248   if (weaks != NULL)
4249     {
4250       struct elf_link_hash_entry **hpp;
4251       struct elf_link_hash_entry **hppend;
4252       struct elf_link_hash_entry **sorted_sym_hash;
4253       struct elf_link_hash_entry *h;
4254       size_t sym_count;
4255
4256       /* Since we have to search the whole symbol list for each weak
4257          defined symbol, search time for N weak defined symbols will be
4258          O(N^2). Binary search will cut it down to O(NlogN).  */
4259       amt = extsymcount * sizeof (struct elf_link_hash_entry *);
4260       sorted_sym_hash = bfd_malloc (amt);
4261       if (sorted_sym_hash == NULL)
4262         goto error_return;
4263       sym_hash = sorted_sym_hash;
4264       hpp = elf_sym_hashes (abfd);
4265       hppend = hpp + extsymcount;
4266       sym_count = 0;
4267       for (; hpp < hppend; hpp++)
4268         {
4269           h = *hpp;
4270           if (h != NULL
4271               && h->root.type == bfd_link_hash_defined
4272               && h->type != STT_FUNC)
4273             {
4274               *sym_hash = h;
4275               sym_hash++;
4276               sym_count++;
4277             }
4278         }
4279
4280       qsort (sorted_sym_hash, sym_count,
4281              sizeof (struct elf_link_hash_entry *),
4282              elf_sort_symbol);
4283
4284       while (weaks != NULL)
4285         {
4286           struct elf_link_hash_entry *hlook;
4287           asection *slook;
4288           bfd_vma vlook;
4289           long ilook;
4290           size_t i, j, idx;
4291
4292           hlook = weaks;
4293           weaks = hlook->u.weakdef;
4294           hlook->u.weakdef = NULL;
4295
4296           BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
4297                       || hlook->root.type == bfd_link_hash_defweak
4298                       || hlook->root.type == bfd_link_hash_common
4299                       || hlook->root.type == bfd_link_hash_indirect);
4300           slook = hlook->root.u.def.section;
4301           vlook = hlook->root.u.def.value;
4302
4303           ilook = -1;
4304           i = 0;
4305           j = sym_count;
4306           while (i < j)
4307             {
4308               bfd_signed_vma vdiff;
4309               idx = (i + j) / 2;
4310               h = sorted_sym_hash [idx];
4311               vdiff = vlook - h->root.u.def.value;
4312               if (vdiff < 0)
4313                 j = idx;
4314               else if (vdiff > 0)
4315                 i = idx + 1;
4316               else
4317                 {
4318                   long sdiff = slook->id - h->root.u.def.section->id;
4319                   if (sdiff < 0)
4320                     j = idx;
4321                   else if (sdiff > 0)
4322                     i = idx + 1;
4323                   else
4324                     {
4325                       ilook = idx;
4326                       break;
4327                     }
4328                 }
4329             }
4330
4331           /* We didn't find a value/section match.  */
4332           if (ilook == -1)
4333             continue;
4334
4335           for (i = ilook; i < sym_count; i++)
4336             {
4337               h = sorted_sym_hash [i];
4338
4339               /* Stop if value or section doesn't match.  */
4340               if (h->root.u.def.value != vlook
4341                   || h->root.u.def.section != slook)
4342                 break;
4343               else if (h != hlook)
4344                 {
4345                   hlook->u.weakdef = h;
4346
4347                   /* If the weak definition is in the list of dynamic
4348                      symbols, make sure the real definition is put
4349                      there as well.  */
4350                   if (hlook->dynindx != -1 && h->dynindx == -1)
4351                     {
4352                       if (! bfd_elf_link_record_dynamic_symbol (info, h))
4353                         goto error_return;
4354                     }
4355
4356                   /* If the real definition is in the list of dynamic
4357                      symbols, make sure the weak definition is put
4358                      there as well.  If we don't do this, then the
4359                      dynamic loader might not merge the entries for the
4360                      real definition and the weak definition.  */
4361                   if (h->dynindx != -1 && hlook->dynindx == -1)
4362                     {
4363                       if (! bfd_elf_link_record_dynamic_symbol (info, hlook))
4364                         goto error_return;
4365                     }
4366                   break;
4367                 }
4368             }
4369         }
4370
4371       free (sorted_sym_hash);
4372     }
4373
4374   if (bed->check_directives)
4375     (*bed->check_directives) (abfd, info);
4376
4377   /* If this object is the same format as the output object, and it is
4378      not a shared library, then let the backend look through the
4379      relocs.
4380
4381      This is required to build global offset table entries and to
4382      arrange for dynamic relocs.  It is not required for the
4383      particular common case of linking non PIC code, even when linking
4384      against shared libraries, but unfortunately there is no way of
4385      knowing whether an object file has been compiled PIC or not.
4386      Looking through the relocs is not particularly time consuming.
4387      The problem is that we must either (1) keep the relocs in memory,
4388      which causes the linker to require additional runtime memory or
4389      (2) read the relocs twice from the input file, which wastes time.
4390      This would be a good case for using mmap.
4391
4392      I have no idea how to handle linking PIC code into a file of a
4393      different format.  It probably can't be done.  */
4394   if (! dynamic
4395       && is_elf_hash_table (htab)
4396       && htab->root.creator == abfd->xvec
4397       && bed->check_relocs != NULL)
4398     {
4399       asection *o;
4400
4401       for (o = abfd->sections; o != NULL; o = o->next)
4402         {
4403           Elf_Internal_Rela *internal_relocs;
4404           bfd_boolean ok;
4405
4406           if ((o->flags & SEC_RELOC) == 0
4407               || o->reloc_count == 0
4408               || ((info->strip == strip_all || info->strip == strip_debugger)
4409                   && (o->flags & SEC_DEBUGGING) != 0)
4410               || bfd_is_abs_section (o->output_section))
4411             continue;
4412
4413           internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
4414                                                        info->keep_memory);
4415           if (internal_relocs == NULL)
4416             goto error_return;
4417
4418           ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
4419
4420           if (elf_section_data (o)->relocs != internal_relocs)
4421             free (internal_relocs);
4422
4423           if (! ok)
4424             goto error_return;
4425         }
4426     }
4427
4428   /* If this is a non-traditional link, try to optimize the handling
4429      of the .stab/.stabstr sections.  */
4430   if (! dynamic
4431       && ! info->traditional_format
4432       && is_elf_hash_table (htab)
4433       && (info->strip != strip_all && info->strip != strip_debugger))
4434     {
4435       asection *stabstr;
4436
4437       stabstr = bfd_get_section_by_name (abfd, ".stabstr");
4438       if (stabstr != NULL)
4439         {
4440           bfd_size_type string_offset = 0;
4441           asection *stab;
4442
4443           for (stab = abfd->sections; stab; stab = stab->next)
4444             if (strncmp (".stab", stab->name, 5) == 0
4445                 && (!stab->name[5] ||
4446                     (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
4447                 && (stab->flags & SEC_MERGE) == 0
4448                 && !bfd_is_abs_section (stab->output_section))
4449               {
4450                 struct bfd_elf_section_data *secdata;
4451
4452                 secdata = elf_section_data (stab);
4453                 if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab,
4454                                                stabstr, &secdata->sec_info,
4455                                                &string_offset))
4456                   goto error_return;
4457                 if (secdata->sec_info)
4458                   stab->sec_info_type = ELF_INFO_TYPE_STABS;
4459             }
4460         }
4461     }
4462
4463   if (is_elf_hash_table (htab) && add_needed)
4464     {
4465       /* Add this bfd to the loaded list.  */
4466       struct elf_link_loaded_list *n;
4467
4468       n = bfd_alloc (abfd, sizeof (struct elf_link_loaded_list));
4469       if (n == NULL)
4470         goto error_return;
4471       n->abfd = abfd;
4472       n->next = htab->loaded;
4473       htab->loaded = n;
4474     }
4475
4476   return TRUE;
4477
4478  error_free_vers:
4479   if (old_tab != NULL)
4480     free (old_tab);
4481   if (nondeflt_vers != NULL)
4482     free (nondeflt_vers);
4483   if (extversym != NULL)
4484     free (extversym);
4485  error_free_sym:
4486   if (isymbuf != NULL)
4487     free (isymbuf);
4488  error_return:
4489   return FALSE;
4490 }
4491
4492 /* Return the linker hash table entry of a symbol that might be
4493    satisfied by an archive symbol.  Return -1 on error.  */
4494
4495 struct elf_link_hash_entry *
4496 _bfd_elf_archive_symbol_lookup (bfd *abfd,
4497                                 struct bfd_link_info *info,
4498                                 const char *name)
4499 {
4500   struct elf_link_hash_entry *h;
4501   char *p, *copy;
4502   size_t len, first;
4503
4504   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
4505   if (h != NULL)
4506     return h;
4507
4508   /* If this is a default version (the name contains @@), look up the
4509      symbol again with only one `@' as well as without the version.
4510      The effect is that references to the symbol with and without the
4511      version will be matched by the default symbol in the archive.  */
4512
4513   p = strchr (name, ELF_VER_CHR);
4514   if (p == NULL || p[1] != ELF_VER_CHR)
4515     return h;
4516
4517   /* First check with only one `@'.  */
4518   len = strlen (name);
4519   copy = bfd_alloc (abfd, len);
4520   if (copy == NULL)
4521     return (struct elf_link_hash_entry *) 0 - 1;
4522
4523   first = p - name + 1;
4524   memcpy (copy, name, first);
4525   memcpy (copy + first, name + first + 1, len - first);
4526
4527   h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, FALSE);
4528   if (h == NULL)
4529     {
4530       /* We also need to check references to the symbol without the
4531          version.  */
4532       copy[first - 1] = '\0';
4533       h = elf_link_hash_lookup (elf_hash_table (info), copy,
4534                                 FALSE, FALSE, FALSE);
4535     }
4536
4537   bfd_release (abfd, copy);
4538   return h;
4539 }
4540
4541 /* Add symbols from an ELF archive file to the linker hash table.  We
4542    don't use _bfd_generic_link_add_archive_symbols because of a
4543    problem which arises on UnixWare.  The UnixWare libc.so is an
4544    archive which includes an entry libc.so.1 which defines a bunch of
4545    symbols.  The libc.so archive also includes a number of other
4546    object files, which also define symbols, some of which are the same
4547    as those defined in libc.so.1.  Correct linking requires that we
4548    consider each object file in turn, and include it if it defines any
4549    symbols we need.  _bfd_generic_link_add_archive_symbols does not do
4550    this; it looks through the list of undefined symbols, and includes
4551    any object file which defines them.  When this algorithm is used on
4552    UnixWare, it winds up pulling in libc.so.1 early and defining a
4553    bunch of symbols.  This means that some of the other objects in the
4554    archive are not included in the link, which is incorrect since they
4555    precede libc.so.1 in the archive.
4556
4557    Fortunately, ELF archive handling is simpler than that done by
4558    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
4559    oddities.  In ELF, if we find a symbol in the archive map, and the
4560    symbol is currently undefined, we know that we must pull in that
4561    object file.
4562
4563    Unfortunately, we do have to make multiple passes over the symbol
4564    table until nothing further is resolved.  */
4565
4566 static bfd_boolean
4567 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
4568 {
4569   symindex c;
4570   bfd_boolean *defined = NULL;
4571   bfd_boolean *included = NULL;
4572   carsym *symdefs;
4573   bfd_boolean loop;
4574   bfd_size_type amt;
4575   const struct elf_backend_data *bed;
4576   struct elf_link_hash_entry * (*archive_symbol_lookup)
4577     (bfd *, struct bfd_link_info *, const char *);
4578
4579   if (! bfd_has_map (abfd))
4580     {
4581       /* An empty archive is a special case.  */
4582       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
4583         return TRUE;
4584       bfd_set_error (bfd_error_no_armap);
4585       return FALSE;
4586     }
4587
4588   /* Keep track of all symbols we know to be already defined, and all
4589      files we know to be already included.  This is to speed up the
4590      second and subsequent passes.  */
4591   c = bfd_ardata (abfd)->symdef_count;
4592   if (c == 0)
4593     return TRUE;
4594   amt = c;
4595   amt *= sizeof (bfd_boolean);
4596   defined = bfd_zmalloc (amt);
4597   included = bfd_zmalloc (amt);
4598   if (defined == NULL || included == NULL)
4599     goto error_return;
4600
4601   symdefs = bfd_ardata (abfd)->symdefs;
4602   bed = get_elf_backend_data (abfd);
4603   archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup;
4604
4605   do
4606     {
4607       file_ptr last;
4608       symindex i;
4609       carsym *symdef;
4610       carsym *symdefend;
4611
4612       loop = FALSE;
4613       last = -1;
4614
4615       symdef = symdefs;
4616       symdefend = symdef + c;
4617       for (i = 0; symdef < symdefend; symdef++, i++)
4618         {
4619           struct elf_link_hash_entry *h;
4620           bfd *element;
4621           struct bfd_link_hash_entry *undefs_tail;
4622           symindex mark;
4623
4624           if (defined[i] || included[i])
4625             continue;
4626           if (symdef->file_offset == last)
4627             {
4628               included[i] = TRUE;
4629               continue;
4630             }
4631
4632           h = archive_symbol_lookup (abfd, info, symdef->name);
4633           if (h == (struct elf_link_hash_entry *) 0 - 1)
4634             goto error_return;
4635
4636           if (h == NULL)
4637             continue;
4638
4639           if (h->root.type == bfd_link_hash_common)
4640             {
4641               /* We currently have a common symbol.  The archive map contains
4642                  a reference to this symbol, so we may want to include it.  We
4643                  only want to include it however, if this archive element
4644                  contains a definition of the symbol, not just another common
4645                  declaration of it.
4646
4647                  Unfortunately some archivers (including GNU ar) will put
4648                  declarations of common symbols into their archive maps, as
4649                  well as real definitions, so we cannot just go by the archive
4650                  map alone.  Instead we must read in the element's symbol
4651                  table and check that to see what kind of symbol definition
4652                  this is.  */
4653               if (! elf_link_is_defined_archive_symbol (abfd, symdef))
4654                 continue;
4655             }
4656           else if (h->root.type != bfd_link_hash_undefined)
4657             {
4658               if (h->root.type != bfd_link_hash_undefweak)
4659                 defined[i] = TRUE;
4660               continue;
4661             }
4662
4663           /* We need to include this archive member.  */
4664           element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
4665           if (element == NULL)
4666             goto error_return;
4667
4668           if (! bfd_check_format (element, bfd_object))
4669             goto error_return;
4670
4671           /* Doublecheck that we have not included this object
4672              already--it should be impossible, but there may be
4673              something wrong with the archive.  */
4674           if (element->archive_pass != 0)
4675             {
4676               bfd_set_error (bfd_error_bad_value);
4677               goto error_return;
4678             }
4679           element->archive_pass = 1;
4680
4681           undefs_tail = info->hash->undefs_tail;
4682
4683           if (! (*info->callbacks->add_archive_element) (info, element,
4684                                                          symdef->name))
4685             goto error_return;
4686           if (! bfd_link_add_symbols (element, info))
4687             goto error_return;
4688
4689           /* If there are any new undefined symbols, we need to make
4690              another pass through the archive in order to see whether
4691              they can be defined.  FIXME: This isn't perfect, because
4692              common symbols wind up on undefs_tail and because an
4693              undefined symbol which is defined later on in this pass
4694              does not require another pass.  This isn't a bug, but it
4695              does make the code less efficient than it could be.  */
4696           if (undefs_tail != info->hash->undefs_tail)
4697             loop = TRUE;
4698
4699           /* Look backward to mark all symbols from this object file
4700              which we have already seen in this pass.  */
4701           mark = i;
4702           do
4703             {
4704               included[mark] = TRUE;
4705               if (mark == 0)
4706                 break;
4707               --mark;
4708             }
4709           while (symdefs[mark].file_offset == symdef->file_offset);
4710
4711           /* We mark subsequent symbols from this object file as we go
4712              on through the loop.  */
4713           last = symdef->file_offset;
4714         }
4715     }
4716   while (loop);
4717
4718   free (defined);
4719   free (included);
4720
4721   return TRUE;
4722
4723  error_return:
4724   if (defined != NULL)
4725     free (defined);
4726   if (included != NULL)
4727     free (included);
4728   return FALSE;
4729 }
4730
4731 /* Given an ELF BFD, add symbols to the global hash table as
4732    appropriate.  */
4733
4734 bfd_boolean
4735 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
4736 {
4737   switch (bfd_get_format (abfd))
4738     {
4739     case bfd_object:
4740       return elf_link_add_object_symbols (abfd, info);
4741     case bfd_archive:
4742       return elf_link_add_archive_symbols (abfd, info);
4743     default:
4744       bfd_set_error (bfd_error_wrong_format);
4745       return FALSE;
4746     }
4747 }
4748 \f
4749 /* This function will be called though elf_link_hash_traverse to store
4750    all hash value of the exported symbols in an array.  */
4751
4752 static bfd_boolean
4753 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
4754 {
4755   unsigned long **valuep = data;
4756   const char *name;
4757   char *p;
4758   unsigned long ha;
4759   char *alc = NULL;
4760
4761   if (h->root.type == bfd_link_hash_warning)
4762     h = (struct elf_link_hash_entry *) h->root.u.i.link;
4763
4764   /* Ignore indirect symbols.  These are added by the versioning code.  */
4765   if (h->dynindx == -1)
4766     return TRUE;
4767
4768   name = h->root.root.string;
4769   p = strchr (name, ELF_VER_CHR);
4770   if (p != NULL)
4771     {
4772       alc = bfd_malloc (p - name + 1);
4773       memcpy (alc, name, p - name);
4774       alc[p - name] = '\0';
4775       name = alc;
4776     }
4777
4778   /* Compute the hash value.  */
4779   ha = bfd_elf_hash (name);
4780
4781   /* Store the found hash value in the array given as the argument.  */
4782   *(*valuep)++ = ha;
4783
4784   /* And store it in the struct so that we can put it in the hash table
4785      later.  */
4786   h->u.elf_hash_value = ha;
4787
4788   if (alc != NULL)
4789     free (alc);
4790
4791   return TRUE;
4792 }
4793
4794 /* Array used to determine the number of hash table buckets to use
4795    based on the number of symbols there are.  If there are fewer than
4796    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
4797    fewer than 37 we use 17 buckets, and so forth.  We never use more
4798    than 32771 buckets.  */
4799
4800 static const size_t elf_buckets[] =
4801 {
4802   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
4803   16411, 32771, 0
4804 };
4805
4806 /* Compute bucket count for hashing table.  We do not use a static set
4807    of possible tables sizes anymore.  Instead we determine for all
4808    possible reasonable sizes of the table the outcome (i.e., the
4809    number of collisions etc) and choose the best solution.  The
4810    weighting functions are not too simple to allow the table to grow
4811    without bounds.  Instead one of the weighting factors is the size.
4812    Therefore the result is always a good payoff between few collisions
4813    (= short chain lengths) and table size.  */
4814 static size_t
4815 compute_bucket_count (struct bfd_link_info *info)
4816 {
4817   size_t dynsymcount = elf_hash_table (info)->dynsymcount;
4818   size_t best_size = 0;
4819   unsigned long int *hashcodes;
4820   unsigned long int *hashcodesp;
4821   unsigned long int i;
4822   bfd_size_type amt;
4823
4824   /* Compute the hash values for all exported symbols.  At the same
4825      time store the values in an array so that we could use them for
4826      optimizations.  */
4827   amt = dynsymcount;
4828   amt *= sizeof (unsigned long int);
4829   hashcodes = bfd_malloc (amt);
4830   if (hashcodes == NULL)
4831     return 0;
4832   hashcodesp = hashcodes;
4833
4834   /* Put all hash values in HASHCODES.  */
4835   elf_link_hash_traverse (elf_hash_table (info),
4836                           elf_collect_hash_codes, &hashcodesp);
4837
4838   /* We have a problem here.  The following code to optimize the table
4839      size requires an integer type with more the 32 bits.  If
4840      BFD_HOST_U_64_BIT is set we know about such a type.  */
4841 #ifdef BFD_HOST_U_64_BIT
4842   if (info->optimize)
4843     {
4844       unsigned long int nsyms = hashcodesp - hashcodes;
4845       size_t minsize;
4846       size_t maxsize;
4847       BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
4848       unsigned long int *counts ;
4849       bfd *dynobj = elf_hash_table (info)->dynobj;
4850       const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
4851
4852       /* Possible optimization parameters: if we have NSYMS symbols we say
4853          that the hashing table must at least have NSYMS/4 and at most
4854          2*NSYMS buckets.  */
4855       minsize = nsyms / 4;
4856       if (minsize == 0)
4857         minsize = 1;
4858       best_size = maxsize = nsyms * 2;
4859
4860       /* Create array where we count the collisions in.  We must use bfd_malloc
4861          since the size could be large.  */
4862       amt = maxsize;
4863       amt *= sizeof (unsigned long int);
4864       counts = bfd_malloc (amt);
4865       if (counts == NULL)
4866         {
4867           free (hashcodes);
4868           return 0;
4869         }
4870
4871       /* Compute the "optimal" size for the hash table.  The criteria is a
4872          minimal chain length.  The minor criteria is (of course) the size
4873          of the table.  */
4874       for (i = minsize; i < maxsize; ++i)
4875         {
4876           /* Walk through the array of hashcodes and count the collisions.  */
4877           BFD_HOST_U_64_BIT max;
4878           unsigned long int j;
4879           unsigned long int fact;
4880
4881           memset (counts, '\0', i * sizeof (unsigned long int));
4882
4883           /* Determine how often each hash bucket is used.  */
4884           for (j = 0; j < nsyms; ++j)
4885             ++counts[hashcodes[j] % i];
4886
4887           /* For the weight function we need some information about the
4888              pagesize on the target.  This is information need not be 100%
4889              accurate.  Since this information is not available (so far) we
4890              define it here to a reasonable default value.  If it is crucial
4891              to have a better value some day simply define this value.  */
4892 # ifndef BFD_TARGET_PAGESIZE
4893 #  define BFD_TARGET_PAGESIZE   (4096)
4894 # endif
4895
4896           /* We in any case need 2 + NSYMS entries for the size values and
4897              the chains.  */
4898           max = (2 + nsyms) * (bed->s->arch_size / 8);
4899
4900 # if 1
4901           /* Variant 1: optimize for short chains.  We add the squares
4902              of all the chain lengths (which favors many small chain
4903              over a few long chains).  */
4904           for (j = 0; j < i; ++j)
4905             max += counts[j] * counts[j];
4906
4907           /* This adds penalties for the overall size of the table.  */
4908           fact = i / (BFD_TARGET_PAGESIZE / (bed->s->arch_size / 8)) + 1;
4909           max *= fact * fact;
4910 # else
4911           /* Variant 2: Optimize a lot more for small table.  Here we
4912              also add squares of the size but we also add penalties for
4913              empty slots (the +1 term).  */
4914           for (j = 0; j < i; ++j)
4915             max += (1 + counts[j]) * (1 + counts[j]);
4916
4917           /* The overall size of the table is considered, but not as
4918              strong as in variant 1, where it is squared.  */
4919           fact = i / (BFD_TARGET_PAGESIZE / (bed->s->arch_size / 8)) + 1;
4920           max *= fact;
4921 # endif
4922
4923           /* Compare with current best results.  */
4924           if (max < best_chlen)
4925             {
4926               best_chlen = max;
4927               best_size = i;
4928             }
4929         }
4930
4931       free (counts);
4932     }
4933   else
4934 #endif /* defined (BFD_HOST_U_64_BIT) */
4935     {
4936       /* This is the fallback solution if no 64bit type is available or if we
4937          are not supposed to spend much time on optimizations.  We select the
4938          bucket count using a fixed set of numbers.  */
4939       for (i = 0; elf_buckets[i] != 0; i++)
4940         {
4941           best_size = elf_buckets[i];
4942           if (dynsymcount < elf_buckets[i + 1])
4943             break;
4944         }
4945     }
4946
4947   /* Free the arrays we needed.  */
4948   free (hashcodes);
4949
4950   return best_size;
4951 }
4952
4953 /* Set up the sizes and contents of the ELF dynamic sections.  This is
4954    called by the ELF linker emulation before_allocation routine.  We
4955    must set the sizes of the sections before the linker sets the
4956    addresses of the various sections.  */
4957
4958 bfd_boolean
4959 bfd_elf_size_dynamic_sections (bfd *output_bfd,
4960                                const char *soname,
4961                                const char *rpath,
4962                                const char *filter_shlib,
4963                                const char * const *auxiliary_filters,
4964                                struct bfd_link_info *info,
4965                                asection **sinterpptr,
4966                                struct bfd_elf_version_tree *verdefs)
4967 {
4968   bfd_size_type soname_indx;
4969   bfd *dynobj;
4970   const struct elf_backend_data *bed;
4971   struct elf_assign_sym_version_info asvinfo;
4972
4973   *sinterpptr = NULL;
4974
4975   soname_indx = (bfd_size_type) -1;
4976
4977   if (!is_elf_hash_table (info->hash))
4978     return TRUE;
4979
4980   elf_tdata (output_bfd)->relro = info->relro;
4981   if (info->execstack)
4982     elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
4983   else if (info->noexecstack)
4984     elf_tdata (output_bfd)->stack_flags = PF_R | PF_W;
4985   else
4986     {
4987       bfd *inputobj;
4988       asection *notesec = NULL;
4989       int exec = 0;
4990
4991       for (inputobj = info->input_bfds;
4992            inputobj;
4993            inputobj = inputobj->link_next)
4994         {
4995           asection *s;
4996
4997           if (inputobj->flags & (DYNAMIC | BFD_LINKER_CREATED))
4998             continue;
4999           s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
5000           if (s)
5001             {
5002               if (s->flags & SEC_CODE)
5003                 exec = PF_X;
5004               notesec = s;
5005             }
5006           else
5007             exec = PF_X;
5008         }
5009       if (notesec)
5010         {
5011           elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | exec;
5012           if (exec && info->relocatable
5013               && notesec->output_section != bfd_abs_section_ptr)
5014             notesec->output_section->flags |= SEC_CODE;
5015         }
5016     }
5017
5018   /* Any syms created from now on start with -1 in
5019      got.refcount/offset and plt.refcount/offset.  */
5020   elf_hash_table (info)->init_got_refcount
5021     = elf_hash_table (info)->init_got_offset;
5022   elf_hash_table (info)->init_plt_refcount
5023     = elf_hash_table (info)->init_plt_offset;
5024
5025   /* The backend may have to create some sections regardless of whether
5026      we're dynamic or not.  */
5027   bed = get_elf_backend_data (output_bfd);
5028   if (bed->elf_backend_always_size_sections
5029       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
5030     return FALSE;
5031
5032   dynobj = elf_hash_table (info)->dynobj;
5033
5034   /* If there were no dynamic objects in the link, there is nothing to
5035      do here.  */
5036   if (dynobj == NULL)
5037     return TRUE;
5038
5039   if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
5040     return FALSE;
5041
5042   if (elf_hash_table (info)->dynamic_sections_created)
5043     {
5044       struct elf_info_failed eif;
5045       struct elf_link_hash_entry *h;
5046       asection *dynstr;
5047       struct bfd_elf_version_tree *t;
5048       struct bfd_elf_version_expr *d;
5049       asection *s;
5050       bfd_boolean all_defined;
5051
5052       *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
5053       BFD_ASSERT (*sinterpptr != NULL || !info->executable);
5054
5055       if (soname != NULL)
5056         {
5057           soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5058                                              soname, TRUE);
5059           if (soname_indx == (bfd_size_type) -1
5060               || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
5061             return FALSE;
5062         }
5063
5064       if (info->symbolic)
5065         {
5066           if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
5067             return FALSE;
5068           info->flags |= DF_SYMBOLIC;
5069         }
5070
5071       if (rpath != NULL)
5072         {
5073           bfd_size_type indx;
5074
5075           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
5076                                       TRUE);
5077           if (indx == (bfd_size_type) -1
5078               || !_bfd_elf_add_dynamic_entry (info, DT_RPATH, indx))
5079             return FALSE;
5080
5081           if  (info->new_dtags)
5082             {
5083               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx);
5084               if (!_bfd_elf_add_dynamic_entry (info, DT_RUNPATH, indx))
5085                 return FALSE;
5086             }
5087         }
5088
5089       if (filter_shlib != NULL)
5090         {
5091           bfd_size_type indx;
5092
5093           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5094                                       filter_shlib, TRUE);
5095           if (indx == (bfd_size_type) -1
5096               || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
5097             return FALSE;
5098         }
5099
5100       if (auxiliary_filters != NULL)
5101         {
5102           const char * const *p;
5103
5104           for (p = auxiliary_filters; *p != NULL; p++)
5105             {
5106               bfd_size_type indx;
5107
5108               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5109                                           *p, TRUE);
5110               if (indx == (bfd_size_type) -1
5111                   || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
5112                 return FALSE;
5113             }
5114         }
5115
5116       eif.info = info;
5117       eif.verdefs = verdefs;
5118       eif.failed = FALSE;
5119
5120       /* If we are supposed to export all symbols into the dynamic symbol
5121          table (this is not the normal case), then do so.  */
5122       if (info->export_dynamic)
5123         {
5124           elf_link_hash_traverse (elf_hash_table (info),
5125                                   _bfd_elf_export_symbol,
5126                                   &eif);
5127           if (eif.failed)
5128             return FALSE;
5129         }
5130
5131       /* Make all global versions with definition.  */
5132       for (t = verdefs; t != NULL; t = t->next)
5133         for (d = t->globals.list; d != NULL; d = d->next)
5134           if (!d->symver && d->symbol)
5135             {
5136               const char *verstr, *name;
5137               size_t namelen, verlen, newlen;
5138               char *newname, *p;
5139               struct elf_link_hash_entry *newh;
5140
5141               name = d->symbol;
5142               namelen = strlen (name);
5143               verstr = t->name;
5144               verlen = strlen (verstr);
5145               newlen = namelen + verlen + 3;
5146
5147               newname = bfd_malloc (newlen);
5148               if (newname == NULL)
5149                 return FALSE;
5150               memcpy (newname, name, namelen);
5151
5152               /* Check the hidden versioned definition.  */
5153               p = newname + namelen;
5154               *p++ = ELF_VER_CHR;
5155               memcpy (p, verstr, verlen + 1);
5156               newh = elf_link_hash_lookup (elf_hash_table (info),
5157                                            newname, FALSE, FALSE,
5158                                            FALSE);
5159               if (newh == NULL
5160                   || (newh->root.type != bfd_link_hash_defined
5161                       && newh->root.type != bfd_link_hash_defweak))
5162                 {
5163                   /* Check the default versioned definition.  */
5164                   *p++ = ELF_VER_CHR;
5165                   memcpy (p, verstr, verlen + 1);
5166                   newh = elf_link_hash_lookup (elf_hash_table (info),
5167                                                newname, FALSE, FALSE,
5168                                                FALSE);
5169                 }
5170               free (newname);
5171
5172               /* Mark this version if there is a definition and it is
5173                  not defined in a shared object.  */
5174               if (newh != NULL
5175                   && !newh->def_dynamic
5176                   && (newh->root.type == bfd_link_hash_defined
5177                       || newh->root.type == bfd_link_hash_defweak))
5178                 d->symver = 1;
5179             }
5180
5181       /* Attach all the symbols to their version information.  */
5182       asvinfo.output_bfd = output_bfd;
5183       asvinfo.info = info;
5184       asvinfo.verdefs = verdefs;
5185       asvinfo.failed = FALSE;
5186
5187       elf_link_hash_traverse (elf_hash_table (info),
5188                               _bfd_elf_link_assign_sym_version,
5189                               &asvinfo);
5190       if (asvinfo.failed)
5191         return FALSE;
5192
5193       if (!info->allow_undefined_version)
5194         {
5195           /* Check if all global versions have a definition.  */
5196           all_defined = TRUE;
5197           for (t = verdefs; t != NULL; t = t->next)
5198             for (d = t->globals.list; d != NULL; d = d->next)
5199               if (!d->symver && !d->script)
5200                 {
5201                   (*_bfd_error_handler)
5202                     (_("%s: undefined version: %s"),
5203                      d->pattern, t->name);
5204                   all_defined = FALSE;
5205                 }
5206
5207           if (!all_defined)
5208             {
5209               bfd_set_error (bfd_error_bad_value);
5210               return FALSE;
5211             }
5212         }
5213
5214       /* Find all symbols which were defined in a dynamic object and make
5215          the backend pick a reasonable value for them.  */
5216       elf_link_hash_traverse (elf_hash_table (info),
5217                               _bfd_elf_adjust_dynamic_symbol,
5218                               &eif);
5219       if (eif.failed)
5220         return FALSE;
5221
5222       /* Add some entries to the .dynamic section.  We fill in some of the
5223          values later, in bfd_elf_final_link, but we must add the entries
5224          now so that we know the final size of the .dynamic section.  */
5225
5226       /* If there are initialization and/or finalization functions to
5227          call then add the corresponding DT_INIT/DT_FINI entries.  */
5228       h = (info->init_function
5229            ? elf_link_hash_lookup (elf_hash_table (info),
5230                                    info->init_function, FALSE,
5231                                    FALSE, FALSE)
5232            : NULL);
5233       if (h != NULL
5234           && (h->ref_regular
5235               || h->def_regular))
5236         {
5237           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
5238             return FALSE;
5239         }
5240       h = (info->fini_function
5241            ? elf_link_hash_lookup (elf_hash_table (info),
5242                                    info->fini_function, FALSE,
5243                                    FALSE, FALSE)
5244            : NULL);
5245       if (h != NULL
5246           && (h->ref_regular
5247               || h->def_regular))
5248         {
5249           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
5250             return FALSE;
5251         }
5252
5253       s = bfd_get_section_by_name (output_bfd, ".preinit_array");
5254       if (s != NULL && s->linker_has_input)
5255         {
5256           /* DT_PREINIT_ARRAY is not allowed in shared library.  */
5257           if (! info->executable)
5258             {
5259               bfd *sub;
5260               asection *o;
5261
5262               for (sub = info->input_bfds; sub != NULL;
5263                    sub = sub->link_next)
5264                 for (o = sub->sections; o != NULL; o = o->next)
5265                   if (elf_section_data (o)->this_hdr.sh_type
5266                       == SHT_PREINIT_ARRAY)
5267                     {
5268                       (*_bfd_error_handler)
5269                         (_("%B: .preinit_array section is not allowed in DSO"),
5270                          sub);
5271                       break;
5272                     }
5273
5274               bfd_set_error (bfd_error_nonrepresentable_section);
5275               return FALSE;
5276             }
5277
5278           if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
5279               || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
5280             return FALSE;
5281         }
5282       s = bfd_get_section_by_name (output_bfd, ".init_array");
5283       if (s != NULL && s->linker_has_input)
5284         {
5285           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
5286               || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
5287             return FALSE;
5288         }
5289       s = bfd_get_section_by_name (output_bfd, ".fini_array");
5290       if (s != NULL && s->linker_has_input)
5291         {
5292           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
5293               || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
5294             return FALSE;
5295         }
5296
5297       dynstr = bfd_get_section_by_name (dynobj, ".dynstr");
5298       /* If .dynstr is excluded from the link, we don't want any of
5299          these tags.  Strictly, we should be checking each section
5300          individually;  This quick check covers for the case where
5301          someone does a /DISCARD/ : { *(*) }.  */
5302       if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
5303         {
5304           bfd_size_type strsize;
5305
5306           strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
5307           if (!_bfd_elf_add_dynamic_entry (info, DT_HASH, 0)
5308               || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
5309               || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
5310               || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
5311               || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
5312                                               bed->s->sizeof_sym))
5313             return FALSE;
5314         }
5315     }
5316
5317   /* The backend must work out the sizes of all the other dynamic
5318      sections.  */
5319   if (bed->elf_backend_size_dynamic_sections
5320       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
5321     return FALSE;
5322
5323   if (elf_hash_table (info)->dynamic_sections_created)
5324     {
5325       unsigned long section_sym_count;
5326       asection *s;
5327
5328       /* Set up the version definition section.  */
5329       s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
5330       BFD_ASSERT (s != NULL);
5331
5332       /* We may have created additional version definitions if we are
5333          just linking a regular application.  */
5334       verdefs = asvinfo.verdefs;
5335
5336       /* Skip anonymous version tag.  */
5337       if (verdefs != NULL && verdefs->vernum == 0)
5338         verdefs = verdefs->next;
5339
5340       if (verdefs == NULL && !info->create_default_symver)
5341         s->flags |= SEC_EXCLUDE;
5342       else
5343         {
5344           unsigned int cdefs;
5345           bfd_size_type size;
5346           struct bfd_elf_version_tree *t;
5347           bfd_byte *p;
5348           Elf_Internal_Verdef def;
5349           Elf_Internal_Verdaux defaux;
5350           struct bfd_link_hash_entry *bh;
5351           struct elf_link_hash_entry *h;
5352           const char *name;
5353
5354           cdefs = 0;
5355           size = 0;
5356
5357           /* Make space for the base version.  */
5358           size += sizeof (Elf_External_Verdef);
5359           size += sizeof (Elf_External_Verdaux);
5360           ++cdefs;
5361
5362           /* Make space for the default version.  */
5363           if (info->create_default_symver)
5364             {
5365               size += sizeof (Elf_External_Verdef);
5366               ++cdefs;
5367             }
5368
5369           for (t = verdefs; t != NULL; t = t->next)
5370             {
5371               struct bfd_elf_version_deps *n;
5372
5373               size += sizeof (Elf_External_Verdef);
5374               size += sizeof (Elf_External_Verdaux);
5375               ++cdefs;
5376
5377               for (n = t->deps; n != NULL; n = n->next)
5378                 size += sizeof (Elf_External_Verdaux);
5379             }
5380
5381           s->size = size;
5382           s->contents = bfd_alloc (output_bfd, s->size);
5383           if (s->contents == NULL && s->size != 0)
5384             return FALSE;
5385
5386           /* Fill in the version definition section.  */
5387
5388           p = s->contents;
5389
5390           def.vd_version = VER_DEF_CURRENT;
5391           def.vd_flags = VER_FLG_BASE;
5392           def.vd_ndx = 1;
5393           def.vd_cnt = 1;
5394           if (info->create_default_symver)
5395             {
5396               def.vd_aux = 2 * sizeof (Elf_External_Verdef);
5397               def.vd_next = sizeof (Elf_External_Verdef);
5398             }
5399           else
5400             {
5401               def.vd_aux = sizeof (Elf_External_Verdef);
5402               def.vd_next = (sizeof (Elf_External_Verdef)
5403                              + sizeof (Elf_External_Verdaux));
5404             }
5405
5406           if (soname_indx != (bfd_size_type) -1)
5407             {
5408               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
5409                                       soname_indx);
5410               def.vd_hash = bfd_elf_hash (soname);
5411               defaux.vda_name = soname_indx;
5412               name = soname;
5413             }
5414           else
5415             {
5416               bfd_size_type indx;
5417
5418               name = lbasename (output_bfd->filename);
5419               def.vd_hash = bfd_elf_hash (name);
5420               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5421                                           name, FALSE);
5422               if (indx == (bfd_size_type) -1)
5423                 return FALSE;
5424               defaux.vda_name = indx;
5425             }
5426           defaux.vda_next = 0;
5427
5428           _bfd_elf_swap_verdef_out (output_bfd, &def,
5429                                     (Elf_External_Verdef *) p);
5430           p += sizeof (Elf_External_Verdef);
5431           if (info->create_default_symver)
5432             {
5433               /* Add a symbol representing this version.  */
5434               bh = NULL;
5435               if (! (_bfd_generic_link_add_one_symbol
5436                      (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
5437                       0, NULL, FALSE,
5438                       get_elf_backend_data (dynobj)->collect, &bh)))
5439                 return FALSE;
5440               h = (struct elf_link_hash_entry *) bh;
5441               h->non_elf = 0;
5442               h->def_regular = 1;
5443               h->type = STT_OBJECT;
5444               h->verinfo.vertree = NULL;
5445
5446               if (! bfd_elf_link_record_dynamic_symbol (info, h))
5447                 return FALSE;
5448
5449               /* Create a duplicate of the base version with the same
5450                  aux block, but different flags.  */
5451               def.vd_flags = 0;
5452               def.vd_ndx = 2;
5453               def.vd_aux = sizeof (Elf_External_Verdef);
5454               if (verdefs)
5455                 def.vd_next = (sizeof (Elf_External_Verdef)
5456                                + sizeof (Elf_External_Verdaux));
5457               else
5458                 def.vd_next = 0;
5459               _bfd_elf_swap_verdef_out (output_bfd, &def,
5460                                         (Elf_External_Verdef *) p);
5461               p += sizeof (Elf_External_Verdef);
5462             }
5463           _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
5464                                      (Elf_External_Verdaux *) p);
5465           p += sizeof (Elf_External_Verdaux);
5466
5467           for (t = verdefs; t != NULL; t = t->next)
5468             {
5469               unsigned int cdeps;
5470               struct bfd_elf_version_deps *n;
5471
5472               cdeps = 0;
5473               for (n = t->deps; n != NULL; n = n->next)
5474                 ++cdeps;
5475
5476               /* Add a symbol representing this version.  */
5477               bh = NULL;
5478               if (! (_bfd_generic_link_add_one_symbol
5479                      (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
5480                       0, NULL, FALSE,
5481                       get_elf_backend_data (dynobj)->collect, &bh)))
5482                 return FALSE;
5483               h = (struct elf_link_hash_entry *) bh;
5484               h->non_elf = 0;
5485               h->def_regular = 1;
5486               h->type = STT_OBJECT;
5487               h->verinfo.vertree = t;
5488
5489               if (! bfd_elf_link_record_dynamic_symbol (info, h))
5490                 return FALSE;
5491
5492               def.vd_version = VER_DEF_CURRENT;
5493               def.vd_flags = 0;
5494               if (t->globals.list == NULL
5495                   && t->locals.list == NULL
5496                   && ! t->used)
5497                 def.vd_flags |= VER_FLG_WEAK;
5498               def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1);
5499               def.vd_cnt = cdeps + 1;
5500               def.vd_hash = bfd_elf_hash (t->name);
5501               def.vd_aux = sizeof (Elf_External_Verdef);
5502               def.vd_next = 0;
5503               if (t->next != NULL)
5504                 def.vd_next = (sizeof (Elf_External_Verdef)
5505                                + (cdeps + 1) * sizeof (Elf_External_Verdaux));
5506
5507               _bfd_elf_swap_verdef_out (output_bfd, &def,
5508                                         (Elf_External_Verdef *) p);
5509               p += sizeof (Elf_External_Verdef);
5510
5511               defaux.vda_name = h->dynstr_index;
5512               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
5513                                       h->dynstr_index);
5514               defaux.vda_next = 0;
5515               if (t->deps != NULL)
5516                 defaux.vda_next = sizeof (Elf_External_Verdaux);
5517               t->name_indx = defaux.vda_name;
5518
5519               _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
5520                                          (Elf_External_Verdaux *) p);
5521               p += sizeof (Elf_External_Verdaux);
5522
5523               for (n = t->deps; n != NULL; n = n->next)
5524                 {
5525                   if (n->version_needed == NULL)
5526                     {
5527                       /* This can happen if there was an error in the
5528                          version script.  */
5529                       defaux.vda_name = 0;
5530                     }
5531                   else
5532                     {
5533                       defaux.vda_name = n->version_needed->name_indx;
5534                       _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
5535                                               defaux.vda_name);
5536                     }
5537                   if (n->next == NULL)
5538                     defaux.vda_next = 0;
5539                   else
5540                     defaux.vda_next = sizeof (Elf_External_Verdaux);
5541
5542                   _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
5543                                              (Elf_External_Verdaux *) p);
5544                   p += sizeof (Elf_External_Verdaux);
5545                 }
5546             }
5547
5548           if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
5549               || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
5550             return FALSE;
5551
5552           elf_tdata (output_bfd)->cverdefs = cdefs;
5553         }
5554
5555       if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
5556         {
5557           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
5558             return FALSE;
5559         }
5560       else if (info->flags & DF_BIND_NOW)
5561         {
5562           if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
5563             return FALSE;
5564         }
5565
5566       if (info->flags_1)
5567         {
5568           if (info->executable)
5569             info->flags_1 &= ~ (DF_1_INITFIRST
5570                                 | DF_1_NODELETE
5571                                 | DF_1_NOOPEN);
5572           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
5573             return FALSE;
5574         }
5575
5576       /* Work out the size of the version reference section.  */
5577
5578       s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
5579       BFD_ASSERT (s != NULL);
5580       {
5581         struct elf_find_verdep_info sinfo;
5582
5583         sinfo.output_bfd = output_bfd;
5584         sinfo.info = info;
5585         sinfo.vers = elf_tdata (output_bfd)->cverdefs;
5586         if (sinfo.vers == 0)
5587           sinfo.vers = 1;
5588         sinfo.failed = FALSE;
5589
5590         elf_link_hash_traverse (elf_hash_table (info),
5591                                 _bfd_elf_link_find_version_dependencies,
5592                                 &sinfo);
5593
5594         if (elf_tdata (output_bfd)->verref == NULL)
5595           s->flags |= SEC_EXCLUDE;
5596         else
5597           {
5598             Elf_Internal_Verneed *t;
5599             unsigned int size;
5600             unsigned int crefs;
5601             bfd_byte *p;
5602
5603             /* Build the version definition section.  */
5604             size = 0;
5605             crefs = 0;
5606             for (t = elf_tdata (output_bfd)->verref;
5607                  t != NULL;
5608                  t = t->vn_nextref)
5609               {
5610                 Elf_Internal_Vernaux *a;
5611
5612                 size += sizeof (Elf_External_Verneed);
5613                 ++crefs;
5614                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
5615                   size += sizeof (Elf_External_Vernaux);
5616               }
5617
5618             s->size = size;
5619             s->contents = bfd_alloc (output_bfd, s->size);
5620             if (s->contents == NULL)
5621               return FALSE;
5622
5623             p = s->contents;
5624             for (t = elf_tdata (output_bfd)->verref;
5625                  t != NULL;
5626                  t = t->vn_nextref)
5627               {
5628                 unsigned int caux;
5629                 Elf_Internal_Vernaux *a;
5630                 bfd_size_type indx;
5631
5632                 caux = 0;
5633                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
5634                   ++caux;
5635
5636                 t->vn_version = VER_NEED_CURRENT;
5637                 t->vn_cnt = caux;
5638                 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5639                                             elf_dt_name (t->vn_bfd) != NULL
5640                                             ? elf_dt_name (t->vn_bfd)
5641                                             : lbasename (t->vn_bfd->filename),
5642                                             FALSE);
5643                 if (indx == (bfd_size_type) -1)
5644                   return FALSE;
5645                 t->vn_file = indx;
5646                 t->vn_aux = sizeof (Elf_External_Verneed);
5647                 if (t->vn_nextref == NULL)
5648                   t->vn_next = 0;
5649                 else
5650                   t->vn_next = (sizeof (Elf_External_Verneed)
5651                                 + caux * sizeof (Elf_External_Vernaux));
5652
5653                 _bfd_elf_swap_verneed_out (output_bfd, t,
5654                                            (Elf_External_Verneed *) p);
5655                 p += sizeof (Elf_External_Verneed);
5656
5657                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
5658                   {
5659                     a->vna_hash = bfd_elf_hash (a->vna_nodename);
5660                     indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5661                                                 a->vna_nodename, FALSE);
5662                     if (indx == (bfd_size_type) -1)
5663                       return FALSE;
5664                     a->vna_name = indx;
5665                     if (a->vna_nextptr == NULL)
5666                       a->vna_next = 0;
5667                     else
5668                       a->vna_next = sizeof (Elf_External_Vernaux);
5669
5670                     _bfd_elf_swap_vernaux_out (output_bfd, a,
5671                                                (Elf_External_Vernaux *) p);
5672                     p += sizeof (Elf_External_Vernaux);
5673                   }
5674               }
5675
5676             if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
5677                 || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
5678               return FALSE;
5679
5680             elf_tdata (output_bfd)->cverrefs = crefs;
5681           }
5682       }
5683
5684       if ((elf_tdata (output_bfd)->cverrefs == 0
5685            && elf_tdata (output_bfd)->cverdefs == 0)
5686           || _bfd_elf_link_renumber_dynsyms (output_bfd, info,
5687                                              &section_sym_count) == 0)
5688         {
5689           s = bfd_get_section_by_name (dynobj, ".gnu.version");
5690           s->flags |= SEC_EXCLUDE;
5691         }
5692     }
5693   return TRUE;
5694 }
5695
5696 bfd_boolean
5697 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
5698 {
5699   if (!is_elf_hash_table (info->hash))
5700     return TRUE;
5701
5702   if (elf_hash_table (info)->dynamic_sections_created)
5703     {
5704       bfd *dynobj;
5705       const struct elf_backend_data *bed;
5706       asection *s;
5707       bfd_size_type dynsymcount;
5708       unsigned long section_sym_count;
5709       size_t bucketcount = 0;
5710       size_t hash_entry_size;
5711       unsigned int dtagcount;
5712
5713       dynobj = elf_hash_table (info)->dynobj;
5714
5715       /* Assign dynsym indicies.  In a shared library we generate a
5716          section symbol for each output section, which come first.
5717          Next come all of the back-end allocated local dynamic syms,
5718          followed by the rest of the global symbols.  */
5719
5720       dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info,
5721                                                     &section_sym_count);
5722
5723       /* Work out the size of the symbol version section.  */
5724       s = bfd_get_section_by_name (dynobj, ".gnu.version");
5725       BFD_ASSERT (s != NULL);
5726       if (dynsymcount != 0
5727           && (s->flags & SEC_EXCLUDE) == 0)
5728         {
5729           s->size = dynsymcount * sizeof (Elf_External_Versym);
5730           s->contents = bfd_zalloc (output_bfd, s->size);
5731           if (s->contents == NULL)
5732             return FALSE;
5733
5734           if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
5735             return FALSE;
5736         }
5737
5738       /* Set the size of the .dynsym and .hash sections.  We counted
5739          the number of dynamic symbols in elf_link_add_object_symbols.
5740          We will build the contents of .dynsym and .hash when we build
5741          the final symbol table, because until then we do not know the
5742          correct value to give the symbols.  We built the .dynstr
5743          section as we went along in elf_link_add_object_symbols.  */
5744       s = bfd_get_section_by_name (dynobj, ".dynsym");
5745       BFD_ASSERT (s != NULL);
5746       bed = get_elf_backend_data (output_bfd);
5747       s->size = dynsymcount * bed->s->sizeof_sym;
5748
5749       if (dynsymcount != 0)
5750         {
5751           s->contents = bfd_alloc (output_bfd, s->size);
5752           if (s->contents == NULL)
5753             return FALSE;
5754
5755           /* The first entry in .dynsym is a dummy symbol.
5756              Clear all the section syms, in case we don't output them all.  */
5757           ++section_sym_count;
5758           memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
5759         }
5760
5761       /* Compute the size of the hashing table.  As a side effect this
5762          computes the hash values for all the names we export.  */
5763       bucketcount = compute_bucket_count (info);
5764
5765       s = bfd_get_section_by_name (dynobj, ".hash");
5766       BFD_ASSERT (s != NULL);
5767       hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
5768       s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
5769       s->contents = bfd_zalloc (output_bfd, s->size);
5770       if (s->contents == NULL)
5771         return FALSE;
5772
5773       bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
5774       bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
5775                s->contents + hash_entry_size);
5776
5777       elf_hash_table (info)->bucketcount = bucketcount;
5778
5779       s = bfd_get_section_by_name (dynobj, ".dynstr");
5780       BFD_ASSERT (s != NULL);
5781
5782       elf_finalize_dynstr (output_bfd, info);
5783
5784       s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
5785
5786       for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
5787         if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
5788           return FALSE;
5789     }
5790
5791   return TRUE;
5792 }
5793
5794 /* Final phase of ELF linker.  */
5795
5796 /* A structure we use to avoid passing large numbers of arguments.  */
5797
5798 struct elf_final_link_info
5799 {
5800   /* General link information.  */
5801   struct bfd_link_info *info;
5802   /* Output BFD.  */
5803   bfd *output_bfd;
5804   /* Symbol string table.  */
5805   struct bfd_strtab_hash *symstrtab;
5806   /* .dynsym section.  */
5807   asection *dynsym_sec;
5808   /* .hash section.  */
5809   asection *hash_sec;
5810   /* symbol version section (.gnu.version).  */
5811   asection *symver_sec;
5812   /* Buffer large enough to hold contents of any section.  */
5813   bfd_byte *contents;
5814   /* Buffer large enough to hold external relocs of any section.  */
5815   void *external_relocs;
5816   /* Buffer large enough to hold internal relocs of any section.  */
5817   Elf_Internal_Rela *internal_relocs;
5818   /* Buffer large enough to hold external local symbols of any input
5819      BFD.  */
5820   bfd_byte *external_syms;
5821   /* And a buffer for symbol section indices.  */
5822   Elf_External_Sym_Shndx *locsym_shndx;
5823   /* Buffer large enough to hold internal local symbols of any input
5824      BFD.  */
5825   Elf_Internal_Sym *internal_syms;
5826   /* Array large enough to hold a symbol index for each local symbol
5827      of any input BFD.  */
5828   long *indices;
5829   /* Array large enough to hold a section pointer for each local
5830      symbol of any input BFD.  */
5831   asection **sections;
5832   /* Buffer to hold swapped out symbols.  */
5833   bfd_byte *symbuf;
5834   /* And one for symbol section indices.  */
5835   Elf_External_Sym_Shndx *symshndxbuf;
5836   /* Number of swapped out symbols in buffer.  */
5837   size_t symbuf_count;
5838   /* Number of symbols which fit in symbuf.  */
5839   size_t symbuf_size;
5840   /* And same for symshndxbuf.  */
5841   size_t shndxbuf_size;
5842 };
5843
5844 /* This struct is used to pass information to elf_link_output_extsym.  */
5845
5846 struct elf_outext_info
5847 {
5848   bfd_boolean failed;
5849   bfd_boolean localsyms;
5850   struct elf_final_link_info *finfo;
5851 };
5852
5853 /* When performing a relocatable link, the input relocations are
5854    preserved.  But, if they reference global symbols, the indices
5855    referenced must be updated.  Update all the relocations in
5856    REL_HDR (there are COUNT of them), using the data in REL_HASH.  */
5857
5858 static void
5859 elf_link_adjust_relocs (bfd *abfd,
5860                         Elf_Internal_Shdr *rel_hdr,
5861                         unsigned int count,
5862                         struct elf_link_hash_entry **rel_hash)
5863 {
5864   unsigned int i;
5865   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5866   bfd_byte *erela;
5867   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
5868   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
5869   bfd_vma r_type_mask;
5870   int r_sym_shift;
5871
5872   if (rel_hdr->sh_entsize == bed->s->sizeof_rel)
5873     {
5874       swap_in = bed->s->swap_reloc_in;
5875       swap_out = bed->s->swap_reloc_out;
5876     }
5877   else if (rel_hdr->sh_entsize == bed->s->sizeof_rela)
5878     {
5879       swap_in = bed->s->swap_reloca_in;
5880       swap_out = bed->s->swap_reloca_out;
5881     }
5882   else
5883     abort ();
5884
5885   if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
5886     abort ();
5887
5888   if (bed->s->arch_size == 32)
5889     {
5890       r_type_mask = 0xff;
5891       r_sym_shift = 8;
5892     }
5893   else
5894     {
5895       r_type_mask = 0xffffffff;
5896       r_sym_shift = 32;
5897     }
5898
5899   erela = rel_hdr->contents;
5900   for (i = 0; i < count; i++, rel_hash++, erela += rel_hdr->sh_entsize)
5901     {
5902       Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
5903       unsigned int j;
5904
5905       if (*rel_hash == NULL)
5906         continue;
5907
5908       BFD_ASSERT ((*rel_hash)->indx >= 0);
5909
5910       (*swap_in) (abfd, erela, irela);
5911       for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
5912         irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
5913                            | (irela[j].r_info & r_type_mask));
5914       (*swap_out) (abfd, irela, erela);
5915     }
5916 }
5917
5918 struct elf_link_sort_rela
5919 {
5920   union {
5921     bfd_vma offset;
5922     bfd_vma sym_mask;
5923   } u;
5924   enum elf_reloc_type_class type;
5925   /* We use this as an array of size int_rels_per_ext_rel.  */
5926   Elf_Internal_Rela rela[1];
5927 };
5928
5929 static int
5930 elf_link_sort_cmp1 (const void *A, const void *B)
5931 {
5932   const struct elf_link_sort_rela *a = A;
5933   const struct elf_link_sort_rela *b = B;
5934   int relativea, relativeb;
5935
5936   relativea = a->type == reloc_class_relative;
5937   relativeb = b->type == reloc_class_relative;
5938
5939   if (relativea < relativeb)
5940     return 1;
5941   if (relativea > relativeb)
5942     return -1;
5943   if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
5944     return -1;
5945   if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
5946     return 1;
5947   if (a->rela->r_offset < b->rela->r_offset)
5948     return -1;
5949   if (a->rela->r_offset > b->rela->r_offset)
5950     return 1;
5951   return 0;
5952 }
5953
5954 static int
5955 elf_link_sort_cmp2 (const void *A, const void *B)
5956 {
5957   const struct elf_link_sort_rela *a = A;
5958   const struct elf_link_sort_rela *b = B;
5959   int copya, copyb;
5960
5961   if (a->u.offset < b->u.offset)
5962     return -1;
5963   if (a->u.offset > b->u.offset)
5964     return 1;
5965   copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt);
5966   copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt);
5967   if (copya < copyb)
5968     return -1;
5969   if (copya > copyb)
5970     return 1;
5971   if (a->rela->r_offset < b->rela->r_offset)
5972     return -1;
5973   if (a->rela->r_offset > b->rela->r_offset)
5974     return 1;
5975   return 0;
5976 }
5977
5978 static size_t
5979 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
5980 {
5981   asection *reldyn;
5982   bfd_size_type count, size;
5983   size_t i, ret, sort_elt, ext_size;
5984   bfd_byte *sort, *s_non_relative, *p;
5985   struct elf_link_sort_rela *sq;
5986   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5987   int i2e = bed->s->int_rels_per_ext_rel;
5988   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
5989   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
5990   struct bfd_link_order *lo;
5991   bfd_vma r_sym_mask;
5992
5993   reldyn = bfd_get_section_by_name (abfd, ".rela.dyn");
5994   if (reldyn == NULL || reldyn->size == 0)
5995     {
5996       reldyn = bfd_get_section_by_name (abfd, ".rel.dyn");
5997       if (reldyn == NULL || reldyn->size == 0)
5998         return 0;
5999       ext_size = bed->s->sizeof_rel;
6000       swap_in = bed->s->swap_reloc_in;
6001       swap_out = bed->s->swap_reloc_out;
6002     }
6003   else
6004     {
6005       ext_size = bed->s->sizeof_rela;
6006       swap_in = bed->s->swap_reloca_in;
6007       swap_out = bed->s->swap_reloca_out;
6008     }
6009   count = reldyn->size / ext_size;
6010
6011   size = 0;
6012   for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next)
6013     if (lo->type == bfd_indirect_link_order)
6014       {
6015         asection *o = lo->u.indirect.section;
6016         size += o->size;
6017       }
6018
6019   if (size != reldyn->size)
6020     return 0;
6021
6022   sort_elt = (sizeof (struct elf_link_sort_rela)
6023               + (i2e - 1) * sizeof (Elf_Internal_Rela));
6024   sort = bfd_zmalloc (sort_elt * count);
6025   if (sort == NULL)
6026     {
6027       (*info->callbacks->warning)
6028         (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
6029       return 0;
6030     }
6031
6032   if (bed->s->arch_size == 32)
6033     r_sym_mask = ~(bfd_vma) 0xff;
6034   else
6035     r_sym_mask = ~(bfd_vma) 0xffffffff;
6036
6037   for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next)
6038     if (lo->type == bfd_indirect_link_order)
6039       {
6040         bfd_byte *erel, *erelend;
6041         asection *o = lo->u.indirect.section;
6042
6043         if (o->contents == NULL && o->size != 0)
6044           {
6045             /* This is a reloc section that is being handled as a normal
6046                section.  See bfd_section_from_shdr.  We can't combine
6047                relocs in this case.  */
6048             free (sort);
6049             return 0;
6050           }
6051         erel = o->contents;
6052         erelend = o->contents + o->size;
6053         p = sort + o->output_offset / ext_size * sort_elt;
6054         while (erel < erelend)
6055           {
6056             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
6057             (*swap_in) (abfd, erel, s->rela);
6058             s->type = (*bed->elf_backend_reloc_type_class) (s->rela);
6059             s->u.sym_mask = r_sym_mask;
6060             p += sort_elt;
6061             erel += ext_size;
6062           }
6063       }
6064
6065   qsort (sort, count, sort_elt, elf_link_sort_cmp1);
6066
6067   for (i = 0, p = sort; i < count; i++, p += sort_elt)
6068     {
6069       struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
6070       if (s->type != reloc_class_relative)
6071         break;
6072     }
6073   ret = i;
6074   s_non_relative = p;
6075
6076   sq = (struct elf_link_sort_rela *) s_non_relative;
6077   for (; i < count; i++, p += sort_elt)
6078     {
6079       struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
6080       if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
6081         sq = sp;
6082       sp->u.offset = sq->rela->r_offset;
6083     }
6084
6085   qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
6086
6087   for (lo = reldyn->map_head.link_order; lo != NULL; lo = lo->next)
6088     if (lo->type == bfd_indirect_link_order)
6089       {
6090         bfd_byte *erel, *erelend;
6091         asection *o = lo->u.indirect.section;
6092
6093         erel = o->contents;
6094         erelend = o->contents + o->size;
6095         p = sort + o->output_offset / ext_size * sort_elt;
6096         while (erel < erelend)
6097           {
6098             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
6099             (*swap_out) (abfd, s->rela, erel);
6100             p += sort_elt;
6101             erel += ext_size;
6102           }
6103       }
6104
6105   free (sort);
6106   *psec = reldyn;
6107   return ret;
6108 }
6109
6110 /* Flush the output symbols to the file.  */
6111
6112 static bfd_boolean
6113 elf_link_flush_output_syms (struct elf_final_link_info *finfo,
6114                             const struct elf_backend_data *bed)
6115 {
6116   if (finfo->symbuf_count > 0)
6117     {
6118       Elf_Internal_Shdr *hdr;
6119       file_ptr pos;
6120       bfd_size_type amt;
6121
6122       hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr;
6123       pos = hdr->sh_offset + hdr->sh_size;
6124       amt = finfo->symbuf_count * bed->s->sizeof_sym;
6125       if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0
6126           || bfd_bwrite (finfo->symbuf, amt, finfo->output_bfd) != amt)
6127         return FALSE;
6128
6129       hdr->sh_size += amt;
6130       finfo->symbuf_count = 0;
6131     }
6132
6133   return TRUE;
6134 }
6135
6136 /* Add a symbol to the output symbol table.  */
6137
6138 static bfd_boolean
6139 elf_link_output_sym (struct elf_final_link_info *finfo,
6140                      const char *name,
6141                      Elf_Internal_Sym *elfsym,
6142                      asection *input_sec,
6143                      struct elf_link_hash_entry *h)
6144 {
6145   bfd_byte *dest;
6146   Elf_External_Sym_Shndx *destshndx;
6147   bfd_boolean (*output_symbol_hook)
6148     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
6149      struct elf_link_hash_entry *);
6150   const struct elf_backend_data *bed;
6151
6152   bed = get_elf_backend_data (finfo->output_bfd);
6153   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
6154   if (output_symbol_hook != NULL)
6155     {
6156       if (! (*output_symbol_hook) (finfo->info, name, elfsym, input_sec, h))
6157         return FALSE;
6158     }
6159
6160   if (name == NULL || *name == '\0')
6161     elfsym->st_name = 0;
6162   else if (input_sec->flags & SEC_EXCLUDE)
6163     elfsym->st_name = 0;
6164   else
6165     {
6166       elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
6167                                                             name, TRUE, FALSE);
6168       if (elfsym->st_name == (unsigned long) -1)
6169         return FALSE;
6170     }
6171
6172   if (finfo->symbuf_count >= finfo->symbuf_size)
6173     {
6174       if (! elf_link_flush_output_syms (finfo, bed))
6175         return FALSE;
6176     }
6177
6178   dest = finfo->symbuf + finfo->symbuf_count * bed->s->sizeof_sym;
6179   destshndx = finfo->symshndxbuf;
6180   if (destshndx != NULL)
6181     {
6182       if (bfd_get_symcount (finfo->output_bfd) >= finfo->shndxbuf_size)
6183         {
6184           bfd_size_type amt;
6185
6186           amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
6187           finfo->symshndxbuf = destshndx = bfd_realloc (destshndx, amt * 2);
6188           if (destshndx == NULL)
6189             return FALSE;
6190           memset ((char *) destshndx + amt, 0, amt);
6191           finfo->shndxbuf_size *= 2;
6192         }
6193       destshndx += bfd_get_symcount (finfo->output_bfd);
6194     }
6195
6196   bed->s->swap_symbol_out (finfo->output_bfd, elfsym, dest, destshndx);
6197   finfo->symbuf_count += 1;
6198   bfd_get_symcount (finfo->output_bfd) += 1;
6199
6200   return TRUE;
6201 }
6202
6203 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
6204
6205 static bfd_boolean
6206 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
6207 {
6208   if (sym->st_shndx > SHN_HIRESERVE)
6209     {
6210       /* The gABI doesn't support dynamic symbols in output sections
6211          beyond 64k.  */
6212       (*_bfd_error_handler)
6213         (_("%B: Too many sections: %d (>= %d)"),
6214          abfd, bfd_count_sections (abfd), SHN_LORESERVE);
6215       bfd_set_error (bfd_error_nonrepresentable_section);
6216       return FALSE;
6217     }
6218   return TRUE;
6219 }
6220
6221 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
6222    allowing an unsatisfied unversioned symbol in the DSO to match a
6223    versioned symbol that would normally require an explicit version.
6224    We also handle the case that a DSO references a hidden symbol
6225    which may be satisfied by a versioned symbol in another DSO.  */
6226
6227 static bfd_boolean
6228 elf_link_check_versioned_symbol (struct bfd_link_info *info,
6229                                  const struct elf_backend_data *bed,
6230                                  struct elf_link_hash_entry *h)
6231 {
6232   bfd *abfd;
6233   struct elf_link_loaded_list *loaded;
6234
6235   if (!is_elf_hash_table (info->hash))
6236     return FALSE;
6237
6238   switch (h->root.type)
6239     {
6240     default:
6241       abfd = NULL;
6242       break;
6243
6244     case bfd_link_hash_undefined:
6245     case bfd_link_hash_undefweak:
6246       abfd = h->root.u.undef.abfd;
6247       if ((abfd->flags & DYNAMIC) == 0
6248           || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
6249         return FALSE;
6250       break;
6251
6252     case bfd_link_hash_defined:
6253     case bfd_link_hash_defweak:
6254       abfd = h->root.u.def.section->owner;
6255       break;
6256
6257     case bfd_link_hash_common:
6258       abfd = h->root.u.c.p->section->owner;
6259       break;
6260     }
6261   BFD_ASSERT (abfd != NULL);
6262
6263   for (loaded = elf_hash_table (info)->loaded;
6264        loaded != NULL;
6265        loaded = loaded->next)
6266     {
6267       bfd *input;
6268       Elf_Internal_Shdr *hdr;
6269       bfd_size_type symcount;
6270       bfd_size_type extsymcount;
6271       bfd_size_type extsymoff;
6272       Elf_Internal_Shdr *versymhdr;
6273       Elf_Internal_Sym *isym;
6274       Elf_Internal_Sym *isymend;
6275       Elf_Internal_Sym *isymbuf;
6276       Elf_External_Versym *ever;
6277       Elf_External_Versym *extversym;
6278
6279       input = loaded->abfd;
6280
6281       /* We check each DSO for a possible hidden versioned definition.  */
6282       if (input == abfd
6283           || (input->flags & DYNAMIC) == 0
6284           || elf_dynversym (input) == 0)
6285         continue;
6286
6287       hdr = &elf_tdata (input)->dynsymtab_hdr;
6288
6289       symcount = hdr->sh_size / bed->s->sizeof_sym;
6290       if (elf_bad_symtab (input))
6291         {
6292           extsymcount = symcount;
6293           extsymoff = 0;
6294         }
6295       else
6296         {
6297           extsymcount = symcount - hdr->sh_info;
6298           extsymoff = hdr->sh_info;
6299         }
6300
6301       if (extsymcount == 0)
6302         continue;
6303
6304       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
6305                                       NULL, NULL, NULL);
6306       if (isymbuf == NULL)
6307         return FALSE;
6308
6309       /* Read in any version definitions.  */
6310       versymhdr = &elf_tdata (input)->dynversym_hdr;
6311       extversym = bfd_malloc (versymhdr->sh_size);
6312       if (extversym == NULL)
6313         goto error_ret;
6314
6315       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
6316           || (bfd_bread (extversym, versymhdr->sh_size, input)
6317               != versymhdr->sh_size))
6318         {
6319           free (extversym);
6320         error_ret:
6321           free (isymbuf);
6322           return FALSE;
6323         }
6324
6325       ever = extversym + extsymoff;
6326       isymend = isymbuf + extsymcount;
6327       for (isym = isymbuf; isym < isymend; isym++, ever++)
6328         {
6329           const char *name;
6330           Elf_Internal_Versym iver;
6331           unsigned short version_index;
6332
6333           if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
6334               || isym->st_shndx == SHN_UNDEF)
6335             continue;
6336
6337           name = bfd_elf_string_from_elf_section (input,
6338                                                   hdr->sh_link,
6339                                                   isym->st_name);
6340           if (strcmp (name, h->root.root.string) != 0)
6341             continue;
6342
6343           _bfd_elf_swap_versym_in (input, ever, &iver);
6344
6345           if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
6346             {
6347               /* If we have a non-hidden versioned sym, then it should
6348                  have provided a definition for the undefined sym.  */
6349               abort ();
6350             }
6351
6352           version_index = iver.vs_vers & VERSYM_VERSION;
6353           if (version_index == 1 || version_index == 2)
6354             {
6355               /* This is the base or first version.  We can use it.  */
6356               free (extversym);
6357               free (isymbuf);
6358               return TRUE;
6359             }
6360         }
6361
6362       free (extversym);
6363       free (isymbuf);
6364     }
6365
6366   return FALSE;
6367 }
6368
6369 /* Add an external symbol to the symbol table.  This is called from
6370    the hash table traversal routine.  When generating a shared object,
6371    we go through the symbol table twice.  The first time we output
6372    anything that might have been forced to local scope in a version
6373    script.  The second time we output the symbols that are still
6374    global symbols.  */
6375
6376 static bfd_boolean
6377 elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
6378 {
6379   struct elf_outext_info *eoinfo = data;
6380   struct elf_final_link_info *finfo = eoinfo->finfo;
6381   bfd_boolean strip;
6382   Elf_Internal_Sym sym;
6383   asection *input_sec;
6384   const struct elf_backend_data *bed;
6385
6386   if (h->root.type == bfd_link_hash_warning)
6387     {
6388       h = (struct elf_link_hash_entry *) h->root.u.i.link;
6389       if (h->root.type == bfd_link_hash_new)
6390         return TRUE;
6391     }
6392
6393   /* Decide whether to output this symbol in this pass.  */
6394   if (eoinfo->localsyms)
6395     {
6396       if (!h->forced_local)
6397         return TRUE;
6398     }
6399   else
6400     {
6401       if (h->forced_local)
6402         return TRUE;
6403     }
6404
6405   bed = get_elf_backend_data (finfo->output_bfd);
6406
6407   if (h->root.type == bfd_link_hash_undefined)
6408     {
6409       /* If we have an undefined symbol reference here then it must have
6410          come from a shared library that is being linked in.  (Undefined
6411          references in regular files have already been handled).  */
6412       bfd_boolean ignore_undef = FALSE;
6413
6414       /* Some symbols may be special in that the fact that they're
6415          undefined can be safely ignored - let backend determine that.  */
6416       if (bed->elf_backend_ignore_undef_symbol)
6417         ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
6418
6419       /* If we are reporting errors for this situation then do so now.  */
6420       if (ignore_undef == FALSE
6421           && h->ref_dynamic
6422           && ! h->ref_regular
6423           && ! elf_link_check_versioned_symbol (finfo->info, bed, h)
6424           && finfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
6425         {
6426           if (! (finfo->info->callbacks->undefined_symbol
6427                  (finfo->info, h->root.root.string, h->root.u.undef.abfd,
6428                   NULL, 0, finfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)))
6429             {
6430               eoinfo->failed = TRUE;
6431               return FALSE;
6432             }
6433         }
6434     }
6435
6436   /* We should also warn if a forced local symbol is referenced from
6437      shared libraries.  */
6438   if (! finfo->info->relocatable
6439       && (! finfo->info->shared)
6440       && h->forced_local
6441       && h->ref_dynamic
6442       && !h->dynamic_def
6443       && !h->dynamic_weak
6444       && ! elf_link_check_versioned_symbol (finfo->info, bed, h))
6445     {
6446       (*_bfd_error_handler)
6447         (_("%B: %s symbol `%s' in %B is referenced by DSO"),
6448          finfo->output_bfd,
6449          h->root.u.def.section == bfd_abs_section_ptr
6450          ? finfo->output_bfd : h->root.u.def.section->owner,
6451          ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
6452          ? "internal"
6453          : ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
6454          ? "hidden" : "local",
6455          h->root.root.string);
6456       eoinfo->failed = TRUE;
6457       return FALSE;
6458     }
6459
6460   /* We don't want to output symbols that have never been mentioned by
6461      a regular file, or that we have been told to strip.  However, if
6462      h->indx is set to -2, the symbol is used by a reloc and we must
6463      output it.  */
6464   if (h->indx == -2)
6465     strip = FALSE;
6466   else if ((h->def_dynamic
6467             || h->ref_dynamic
6468             || h->root.type == bfd_link_hash_new)
6469            && !h->def_regular
6470            && !h->ref_regular)
6471     strip = TRUE;
6472   else if (finfo->info->strip == strip_all)
6473     strip = TRUE;
6474   else if (finfo->info->strip == strip_some
6475            && bfd_hash_lookup (finfo->info->keep_hash,
6476                                h->root.root.string, FALSE, FALSE) == NULL)
6477     strip = TRUE;
6478   else if (finfo->info->strip_discarded
6479            && (h->root.type == bfd_link_hash_defined
6480                || h->root.type == bfd_link_hash_defweak)
6481            && elf_discarded_section (h->root.u.def.section))
6482     strip = TRUE;
6483   else
6484     strip = FALSE;
6485
6486   /* If we're stripping it, and it's not a dynamic symbol, there's
6487      nothing else to do unless it is a forced local symbol.  */
6488   if (strip
6489       && h->dynindx == -1
6490       && !h->forced_local)
6491     return TRUE;
6492
6493   sym.st_value = 0;
6494   sym.st_size = h->size;
6495   sym.st_other = h->other;
6496   if (h->forced_local)
6497     sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
6498   else if (h->root.type == bfd_link_hash_undefweak
6499            || h->root.type == bfd_link_hash_defweak)
6500     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
6501   else
6502     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
6503
6504   switch (h->root.type)
6505     {
6506     default:
6507     case bfd_link_hash_new:
6508     case bfd_link_hash_warning:
6509       abort ();
6510       return FALSE;
6511
6512     case bfd_link_hash_undefined:
6513     case bfd_link_hash_undefweak:
6514       input_sec = bfd_und_section_ptr;
6515       sym.st_shndx = SHN_UNDEF;
6516       break;
6517
6518     case bfd_link_hash_defined:
6519     case bfd_link_hash_defweak:
6520       {
6521         input_sec = h->root.u.def.section;
6522         if (input_sec->output_section != NULL)
6523           {
6524             sym.st_shndx =
6525               _bfd_elf_section_from_bfd_section (finfo->output_bfd,
6526                                                  input_sec->output_section);
6527             if (sym.st_shndx == SHN_BAD)
6528               {
6529                 (*_bfd_error_handler)
6530                   (_("%B: could not find output section %A for input section %A"),
6531                    finfo->output_bfd, input_sec->output_section, input_sec);
6532                 eoinfo->failed = TRUE;
6533                 return FALSE;
6534               }
6535
6536             /* ELF symbols in relocatable files are section relative,
6537                but in nonrelocatable files they are virtual
6538                addresses.  */
6539             sym.st_value = h->root.u.def.value + input_sec->output_offset;
6540             if (! finfo->info->relocatable)
6541               {
6542                 sym.st_value += input_sec->output_section->vma;
6543                 if (h->type == STT_TLS)
6544                   {
6545                     /* STT_TLS symbols are relative to PT_TLS segment
6546                        base.  */
6547                     BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL);
6548                     sym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma;
6549                   }
6550               }
6551           }
6552         else
6553           {
6554             BFD_ASSERT (input_sec->owner == NULL
6555                         || (input_sec->owner->flags & DYNAMIC) != 0);
6556             sym.st_shndx = SHN_UNDEF;
6557             input_sec = bfd_und_section_ptr;
6558           }
6559       }
6560       break;
6561
6562     case bfd_link_hash_common:
6563       input_sec = h->root.u.c.p->section;
6564       sym.st_shndx = bed->common_section_index (input_sec);
6565       sym.st_value = 1 << h->root.u.c.p->alignment_power;
6566       break;
6567
6568     case bfd_link_hash_indirect:
6569       /* These symbols are created by symbol versioning.  They point
6570          to the decorated version of the name.  For example, if the
6571          symbol foo@@GNU_1.2 is the default, which should be used when
6572          foo is used with no version, then we add an indirect symbol
6573          foo which points to foo@@GNU_1.2.  We ignore these symbols,
6574          since the indirected symbol is already in the hash table.  */
6575       return TRUE;
6576     }
6577
6578   /* Give the processor backend a chance to tweak the symbol value,
6579      and also to finish up anything that needs to be done for this
6580      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
6581      forced local syms when non-shared is due to a historical quirk.  */
6582   if ((h->dynindx != -1
6583        || h->forced_local)
6584       && ((finfo->info->shared
6585            && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
6586                || h->root.type != bfd_link_hash_undefweak))
6587           || !h->forced_local)
6588       && elf_hash_table (finfo->info)->dynamic_sections_created)
6589     {
6590       if (! ((*bed->elf_backend_finish_dynamic_symbol)
6591              (finfo->output_bfd, finfo->info, h, &sym)))
6592         {
6593           eoinfo->failed = TRUE;
6594           return FALSE;
6595         }
6596     }
6597
6598   /* If we are marking the symbol as undefined, and there are no
6599      non-weak references to this symbol from a regular object, then
6600      mark the symbol as weak undefined; if there are non-weak
6601      references, mark the symbol as strong.  We can't do this earlier,
6602      because it might not be marked as undefined until the
6603      finish_dynamic_symbol routine gets through with it.  */
6604   if (sym.st_shndx == SHN_UNDEF
6605       && h->ref_regular
6606       && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
6607           || ELF_ST_BIND (sym.st_info) == STB_WEAK))
6608     {
6609       int bindtype;
6610
6611       if (h->ref_regular_nonweak)
6612         bindtype = STB_GLOBAL;
6613       else
6614         bindtype = STB_WEAK;
6615       sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info));
6616     }
6617
6618   /* If a non-weak symbol with non-default visibility is not defined
6619      locally, it is a fatal error.  */
6620   if (! finfo->info->relocatable
6621       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
6622       && ELF_ST_BIND (sym.st_info) != STB_WEAK
6623       && h->root.type == bfd_link_hash_undefined
6624       && !h->def_regular)
6625     {
6626       (*_bfd_error_handler)
6627         (_("%B: %s symbol `%s' isn't defined"),
6628          finfo->output_bfd,
6629          ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED
6630          ? "protected"
6631          : ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL
6632          ? "internal" : "hidden",
6633          h->root.root.string);
6634       eoinfo->failed = TRUE;
6635       return FALSE;
6636     }
6637
6638   /* If this symbol should be put in the .dynsym section, then put it
6639      there now.  We already know the symbol index.  We also fill in
6640      the entry in the .hash section.  */
6641   if (h->dynindx != -1
6642       && elf_hash_table (finfo->info)->dynamic_sections_created)
6643     {
6644       size_t bucketcount;
6645       size_t bucket;
6646       size_t hash_entry_size;
6647       bfd_byte *bucketpos;
6648       bfd_vma chain;
6649       bfd_byte *esym;
6650
6651       sym.st_name = h->dynstr_index;
6652       esym = finfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym;
6653       if (! check_dynsym (finfo->output_bfd, &sym))
6654         {
6655           eoinfo->failed = TRUE;
6656           return FALSE;
6657         }
6658       bed->s->swap_symbol_out (finfo->output_bfd, &sym, esym, 0);
6659
6660       bucketcount = elf_hash_table (finfo->info)->bucketcount;
6661       bucket = h->u.elf_hash_value % bucketcount;
6662       hash_entry_size
6663         = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
6664       bucketpos = ((bfd_byte *) finfo->hash_sec->contents
6665                    + (bucket + 2) * hash_entry_size);
6666       chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
6667       bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
6668       bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
6669                ((bfd_byte *) finfo->hash_sec->contents
6670                 + (bucketcount + 2 + h->dynindx) * hash_entry_size));
6671
6672       if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
6673         {
6674           Elf_Internal_Versym iversym;
6675           Elf_External_Versym *eversym;
6676
6677           if (!h->def_regular)
6678             {
6679               if (h->verinfo.verdef == NULL)
6680                 iversym.vs_vers = 0;
6681               else
6682                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
6683             }
6684           else
6685             {
6686               if (h->verinfo.vertree == NULL)
6687                 iversym.vs_vers = 1;
6688               else
6689                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
6690               if (finfo->info->create_default_symver)
6691                 iversym.vs_vers++;
6692             }
6693
6694           if (h->hidden)
6695             iversym.vs_vers |= VERSYM_HIDDEN;
6696
6697           eversym = (Elf_External_Versym *) finfo->symver_sec->contents;
6698           eversym += h->dynindx;
6699           _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym);
6700         }
6701     }
6702
6703   /* If we're stripping it, then it was just a dynamic symbol, and
6704      there's nothing else to do.  */
6705   if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
6706     return TRUE;
6707
6708   h->indx = bfd_get_symcount (finfo->output_bfd);
6709
6710   if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec, h))
6711     {
6712       eoinfo->failed = TRUE;
6713       return FALSE;
6714     }
6715
6716   return TRUE;
6717 }
6718
6719 /* Return TRUE if special handling is done for relocs in SEC against
6720    symbols defined in discarded sections.  */
6721
6722 static bfd_boolean
6723 elf_section_ignore_discarded_relocs (asection *sec)
6724 {
6725   const struct elf_backend_data *bed;
6726
6727   switch (sec->sec_info_type)
6728     {
6729     case ELF_INFO_TYPE_STABS:
6730     case ELF_INFO_TYPE_EH_FRAME:
6731       return TRUE;
6732     default:
6733       break;
6734     }
6735
6736   bed = get_elf_backend_data (sec->owner);
6737   if (bed->elf_backend_ignore_discarded_relocs != NULL
6738       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
6739     return TRUE;
6740
6741   return FALSE;
6742 }
6743
6744 /* Return a mask saying how ld should treat relocations in SEC against
6745    symbols defined in discarded sections.  If this function returns
6746    COMPLAIN set, ld will issue a warning message.  If this function
6747    returns PRETEND set, and the discarded section was link-once and the
6748    same size as the kept link-once section, ld will pretend that the
6749    symbol was actually defined in the kept section.  Otherwise ld will
6750    zero the reloc (at least that is the intent, but some cooperation by
6751    the target dependent code is needed, particularly for REL targets).  */
6752
6753 unsigned int
6754 _bfd_elf_default_action_discarded (asection *sec)
6755 {
6756   if (sec->flags & SEC_DEBUGGING)
6757     return PRETEND;
6758
6759   if (strcmp (".eh_frame", sec->name) == 0)
6760     return 0;
6761
6762   if (strcmp (".gcc_except_table", sec->name) == 0)
6763     return 0;
6764
6765   return COMPLAIN | PRETEND;
6766 }
6767
6768 /* Find a match between a section and a member of a section group.  */
6769
6770 static asection *
6771 match_group_member (asection *sec, asection *group)
6772 {
6773   asection *first = elf_next_in_group (group);
6774   asection *s = first;
6775
6776   while (s != NULL)
6777     {
6778       if (bfd_elf_match_symbols_in_sections (s, sec))
6779         return s;
6780
6781       s = elf_next_in_group (s);
6782       if (s == first)
6783         break;
6784     }
6785
6786   return NULL;
6787 }
6788
6789 /* Check if the kept section of a discarded section SEC can be used
6790    to replace it. Return the replacement if it is OK. Otherwise return
6791    NULL. */
6792
6793 asection *
6794 _bfd_elf_check_kept_section (asection *sec)
6795 {
6796   asection *kept;
6797
6798   kept = sec->kept_section;
6799   if (kept != NULL)
6800     {
6801       if (elf_sec_group (sec) != NULL)
6802         kept = match_group_member (sec, kept);
6803       if (kept != NULL && sec->size != kept->size)
6804         kept = NULL;
6805     }
6806   return kept;
6807 }
6808
6809 /* Link an input file into the linker output file.  This function
6810    handles all the sections and relocations of the input file at once.
6811    This is so that we only have to read the local symbols once, and
6812    don't have to keep them in memory.  */
6813
6814 static bfd_boolean
6815 elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
6816 {
6817   bfd_boolean (*relocate_section)
6818     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
6819      Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
6820   bfd *output_bfd;
6821   Elf_Internal_Shdr *symtab_hdr;
6822   size_t locsymcount;
6823   size_t extsymoff;
6824   Elf_Internal_Sym *isymbuf;
6825   Elf_Internal_Sym *isym;
6826   Elf_Internal_Sym *isymend;
6827   long *pindex;
6828   asection **ppsection;
6829   asection *o;
6830   const struct elf_backend_data *bed;
6831   bfd_boolean emit_relocs;
6832   struct elf_link_hash_entry **sym_hashes;
6833
6834   output_bfd = finfo->output_bfd;
6835   bed = get_elf_backend_data (output_bfd);
6836   relocate_section = bed->elf_backend_relocate_section;
6837
6838   /* If this is a dynamic object, we don't want to do anything here:
6839      we don't want the local symbols, and we don't want the section
6840      contents.  */
6841   if ((input_bfd->flags & DYNAMIC) != 0)
6842     return TRUE;
6843
6844   emit_relocs = (finfo->info->relocatable
6845                  || finfo->info->emitrelocations);
6846
6847   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
6848   if (elf_bad_symtab (input_bfd))
6849     {
6850       locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
6851       extsymoff = 0;
6852     }
6853   else
6854     {
6855       locsymcount = symtab_hdr->sh_info;
6856       extsymoff = symtab_hdr->sh_info;
6857     }
6858
6859   /* Read the local symbols.  */
6860   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
6861   if (isymbuf == NULL && locsymcount != 0)
6862     {
6863       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
6864                                       finfo->internal_syms,
6865                                       finfo->external_syms,
6866                                       finfo->locsym_shndx);
6867       if (isymbuf == NULL)
6868         return FALSE;
6869     }
6870
6871   /* Find local symbol sections and adjust values of symbols in
6872      SEC_MERGE sections.  Write out those local symbols we know are
6873      going into the output file.  */
6874   isymend = isymbuf + locsymcount;
6875   for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections;
6876        isym < isymend;
6877        isym++, pindex++, ppsection++)
6878     {
6879       asection *isec;
6880       const char *name;
6881       Elf_Internal_Sym osym;
6882
6883       *pindex = -1;
6884
6885       if (elf_bad_symtab (input_bfd))
6886         {
6887           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
6888             {
6889               *ppsection = NULL;
6890               continue;
6891             }
6892         }
6893
6894       if (isym->st_shndx == SHN_UNDEF)
6895         isec = bfd_und_section_ptr;
6896       else if (isym->st_shndx < SHN_LORESERVE
6897                || isym->st_shndx > SHN_HIRESERVE)
6898         {
6899           isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
6900           if (isec
6901               && isec->sec_info_type == ELF_INFO_TYPE_MERGE
6902               && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
6903             isym->st_value =
6904               _bfd_merged_section_offset (output_bfd, &isec,
6905                                           elf_section_data (isec)->sec_info,
6906                                           isym->st_value);
6907         }
6908       else if (isym->st_shndx == SHN_ABS)
6909         isec = bfd_abs_section_ptr;
6910       else if (isym->st_shndx == SHN_COMMON)
6911         isec = bfd_com_section_ptr;
6912       else
6913         {
6914           /* Don't attempt to output symbols with st_shnx in the
6915              reserved range other than SHN_ABS and SHN_COMMON.  */
6916           *ppsection = NULL;
6917           continue;
6918         }
6919
6920       *ppsection = isec;
6921
6922       /* Don't output the first, undefined, symbol.  */
6923       if (ppsection == finfo->sections)
6924         continue;
6925
6926       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
6927         {
6928           /* We never output section symbols.  Instead, we use the
6929              section symbol of the corresponding section in the output
6930              file.  */
6931           continue;
6932         }
6933
6934       /* If we are stripping all symbols, we don't want to output this
6935          one.  */
6936       if (finfo->info->strip == strip_all)
6937         continue;
6938
6939       /* If we are discarding all local symbols, we don't want to
6940          output this one.  If we are generating a relocatable output
6941          file, then some of the local symbols may be required by
6942          relocs; we output them below as we discover that they are
6943          needed.  */
6944       if (finfo->info->discard == discard_all)
6945         continue;
6946
6947       /* If this symbol is defined in a section which we are
6948          discarding, we don't need to keep it.  */
6949       if (isym->st_shndx != SHN_UNDEF
6950           && (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
6951           && (isec == NULL
6952               || bfd_section_removed_from_list (output_bfd,
6953                                                 isec->output_section)))
6954         continue;
6955
6956       /* Get the name of the symbol.  */
6957       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
6958                                               isym->st_name);
6959       if (name == NULL)
6960         return FALSE;
6961
6962       /* See if we are discarding symbols with this name.  */
6963       if ((finfo->info->strip == strip_some
6964            && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
6965                == NULL))
6966           || (((finfo->info->discard == discard_sec_merge
6967                 && (isec->flags & SEC_MERGE) && ! finfo->info->relocatable)
6968                || finfo->info->discard == discard_l)
6969               && bfd_is_local_label_name (input_bfd, name)))
6970         continue;
6971
6972       /* If we get here, we are going to output this symbol.  */
6973
6974       osym = *isym;
6975
6976       /* Adjust the section index for the output file.  */
6977       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
6978                                                          isec->output_section);
6979       if (osym.st_shndx == SHN_BAD)
6980         return FALSE;
6981
6982       *pindex = bfd_get_symcount (output_bfd);
6983
6984       /* ELF symbols in relocatable files are section relative, but
6985          in executable files they are virtual addresses.  Note that
6986          this code assumes that all ELF sections have an associated
6987          BFD section with a reasonable value for output_offset; below
6988          we assume that they also have a reasonable value for
6989          output_section.  Any special sections must be set up to meet
6990          these requirements.  */
6991       osym.st_value += isec->output_offset;
6992       if (! finfo->info->relocatable)
6993         {
6994           osym.st_value += isec->output_section->vma;
6995           if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
6996             {
6997               /* STT_TLS symbols are relative to PT_TLS segment base.  */
6998               BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL);
6999               osym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma;
7000             }
7001         }
7002
7003       if (! elf_link_output_sym (finfo, name, &osym, isec, NULL))
7004         return FALSE;
7005     }
7006
7007   /* Relocate the contents of each section.  */
7008   sym_hashes = elf_sym_hashes (input_bfd);
7009   for (o = input_bfd->sections; o != NULL; o = o->next)
7010     {
7011       bfd_byte *contents;
7012
7013       if (! o->linker_mark)
7014         {
7015           /* This section was omitted from the link.  */
7016           continue;
7017         }
7018
7019       if ((o->flags & SEC_HAS_CONTENTS) == 0
7020           || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
7021         continue;
7022
7023       if ((o->flags & SEC_LINKER_CREATED) != 0)
7024         {
7025           /* Section was created by _bfd_elf_link_create_dynamic_sections
7026              or somesuch.  */
7027           continue;
7028         }
7029
7030       /* Get the contents of the section.  They have been cached by a
7031          relaxation routine.  Note that o is a section in an input
7032          file, so the contents field will not have been set by any of
7033          the routines which work on output files.  */
7034       if (elf_section_data (o)->this_hdr.contents != NULL)
7035         contents = elf_section_data (o)->this_hdr.contents;
7036       else
7037         {
7038           bfd_size_type amt = o->rawsize ? o->rawsize : o->size;
7039
7040           contents = finfo->contents;
7041           if (! bfd_get_section_contents (input_bfd, o, contents, 0, amt))
7042             return FALSE;
7043         }
7044
7045       if ((o->flags & SEC_RELOC) != 0)
7046         {
7047           Elf_Internal_Rela *internal_relocs;
7048           bfd_vma r_type_mask;
7049           int r_sym_shift;
7050
7051           /* Get the swapped relocs.  */
7052           internal_relocs
7053             = _bfd_elf_link_read_relocs (input_bfd, o, finfo->external_relocs,
7054                                          finfo->internal_relocs, FALSE);
7055           if (internal_relocs == NULL
7056               && o->reloc_count > 0)
7057             return FALSE;
7058
7059           if (bed->s->arch_size == 32)
7060             {
7061               r_type_mask = 0xff;
7062               r_sym_shift = 8;
7063             }
7064           else
7065             {
7066               r_type_mask = 0xffffffff;
7067               r_sym_shift = 32;
7068             }
7069
7070           /* Run through the relocs looking for any against symbols
7071              from discarded sections and section symbols from
7072              removed link-once sections.  Complain about relocs
7073              against discarded sections.  Zero relocs against removed
7074              link-once sections.  */
7075           if (!elf_section_ignore_discarded_relocs (o))
7076             {
7077               Elf_Internal_Rela *rel, *relend;
7078               unsigned int action = (*bed->action_discarded) (o);
7079
7080               rel = internal_relocs;
7081               relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
7082               for ( ; rel < relend; rel++)
7083                 {
7084                   unsigned long r_symndx = rel->r_info >> r_sym_shift;
7085                   asection **ps, *sec;
7086                   struct elf_link_hash_entry *h = NULL;
7087                   const char *sym_name;
7088
7089                   if (r_symndx == STN_UNDEF)
7090                     continue;
7091
7092                   if (r_symndx >= locsymcount
7093                       || (elf_bad_symtab (input_bfd)
7094                           && finfo->sections[r_symndx] == NULL))
7095                     {
7096                       h = sym_hashes[r_symndx - extsymoff];
7097
7098                       /* Badly formatted input files can contain relocs that
7099                          reference non-existant symbols.  Check here so that
7100                          we do not seg fault.  */
7101                       if (h == NULL)
7102                         {
7103                           char buffer [32];
7104
7105                           sprintf_vma (buffer, rel->r_info);
7106                           (*_bfd_error_handler)
7107                             (_("error: %B contains a reloc (0x%s) for section %A "
7108                                "that references a non-existent global symbol"),
7109                              input_bfd, o, buffer);
7110                           bfd_set_error (bfd_error_bad_value);
7111                           return FALSE;
7112                         }
7113
7114                       while (h->root.type == bfd_link_hash_indirect
7115                              || h->root.type == bfd_link_hash_warning)
7116                         h = (struct elf_link_hash_entry *) h->root.u.i.link;
7117
7118                       if (h->root.type != bfd_link_hash_defined
7119                           && h->root.type != bfd_link_hash_defweak)
7120                         continue;
7121
7122                       ps = &h->root.u.def.section;
7123                       sym_name = h->root.root.string;
7124                     }
7125                   else
7126                     {
7127                       Elf_Internal_Sym *sym = isymbuf + r_symndx;
7128                       ps = &finfo->sections[r_symndx];
7129                       sym_name = bfd_elf_sym_name (input_bfd,
7130                                                    symtab_hdr,
7131                                                    sym, *ps);
7132                     }
7133
7134                   /* Complain if the definition comes from a
7135                      discarded section.  */
7136                   if ((sec = *ps) != NULL && elf_discarded_section (sec))
7137                     {
7138                       BFD_ASSERT (r_symndx != 0);
7139                       if (action & COMPLAIN)
7140                         (*finfo->info->callbacks->einfo)
7141                           (_("%X`%s' referenced in section `%A' of %B: "
7142                              "defined in discarded section `%A' of %B\n"),
7143                            sym_name, o, input_bfd, sec, sec->owner);
7144
7145                       /* Try to do the best we can to support buggy old
7146                          versions of gcc.  Pretend that the symbol is
7147                          really defined in the kept linkonce section.
7148                          FIXME: This is quite broken.  Modifying the
7149                          symbol here means we will be changing all later
7150                          uses of the symbol, not just in this section.  */
7151                       if (action & PRETEND)
7152                         {
7153                           asection *kept;
7154
7155                           kept = _bfd_elf_check_kept_section (sec);
7156                           if (kept != NULL)
7157                             {
7158                               *ps = kept;
7159                               continue;
7160                             }
7161                         }
7162
7163                       /* Remove the symbol reference from the reloc, but
7164                          don't kill the reloc completely.  This is so that
7165                          a zero value will be written into the section,
7166                          which may have non-zero contents put there by the
7167                          assembler.  Zero in things like an eh_frame fde
7168                          pc_begin allows stack unwinders to recognize the
7169                          fde as bogus.  */
7170                       rel->r_info &= r_type_mask;
7171                       rel->r_addend = 0;
7172                     }
7173                 }
7174             }
7175
7176           /* Relocate the section by invoking a back end routine.
7177
7178              The back end routine is responsible for adjusting the
7179              section contents as necessary, and (if using Rela relocs
7180              and generating a relocatable output file) adjusting the
7181              reloc addend as necessary.
7182
7183              The back end routine does not have to worry about setting
7184              the reloc address or the reloc symbol index.
7185
7186              The back end routine is given a pointer to the swapped in
7187              internal symbols, and can access the hash table entries
7188              for the external symbols via elf_sym_hashes (input_bfd).
7189
7190              When generating relocatable output, the back end routine
7191              must handle STB_LOCAL/STT_SECTION symbols specially.  The
7192              output symbol is going to be a section symbol
7193              corresponding to the output section, which will require
7194              the addend to be adjusted.  */
7195
7196           if (! (*relocate_section) (output_bfd, finfo->info,
7197                                      input_bfd, o, contents,
7198                                      internal_relocs,
7199                                      isymbuf,
7200                                      finfo->sections))
7201             return FALSE;
7202
7203           if (emit_relocs)
7204             {
7205               Elf_Internal_Rela *irela;
7206               Elf_Internal_Rela *irelaend;
7207               bfd_vma last_offset;
7208               struct elf_link_hash_entry **rel_hash;
7209               struct elf_link_hash_entry **rel_hash_list;
7210               Elf_Internal_Shdr *input_rel_hdr, *input_rel_hdr2;
7211               unsigned int next_erel;
7212               bfd_boolean rela_normal;
7213
7214               input_rel_hdr = &elf_section_data (o)->rel_hdr;
7215               rela_normal = (bed->rela_normal
7216                              && (input_rel_hdr->sh_entsize
7217                                  == bed->s->sizeof_rela));
7218
7219               /* Adjust the reloc addresses and symbol indices.  */
7220
7221               irela = internal_relocs;
7222               irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
7223               rel_hash = (elf_section_data (o->output_section)->rel_hashes
7224                           + elf_section_data (o->output_section)->rel_count
7225                           + elf_section_data (o->output_section)->rel_count2);
7226               rel_hash_list = rel_hash;
7227               last_offset = o->output_offset;
7228               if (!finfo->info->relocatable)
7229                 last_offset += o->output_section->vma;
7230               for (next_erel = 0; irela < irelaend; irela++, next_erel++)
7231                 {
7232                   unsigned long r_symndx;
7233                   asection *sec;
7234                   Elf_Internal_Sym sym;
7235
7236                   if (next_erel == bed->s->int_rels_per_ext_rel)
7237                     {
7238                       rel_hash++;
7239                       next_erel = 0;
7240                     }
7241
7242                   irela->r_offset = _bfd_elf_section_offset (output_bfd,
7243                                                              finfo->info, o,
7244                                                              irela->r_offset);
7245                   if (irela->r_offset >= (bfd_vma) -2)
7246                     {
7247                       /* This is a reloc for a deleted entry or somesuch.
7248                          Turn it into an R_*_NONE reloc, at the same
7249                          offset as the last reloc.  elf_eh_frame.c and
7250                          elf_bfd_discard_info rely on reloc offsets
7251                          being ordered.  */
7252                       irela->r_offset = last_offset;
7253                       irela->r_info = 0;
7254                       irela->r_addend = 0;
7255                       continue;
7256                     }
7257
7258                   irela->r_offset += o->output_offset;
7259
7260                   /* Relocs in an executable have to be virtual addresses.  */
7261                   if (!finfo->info->relocatable)
7262                     irela->r_offset += o->output_section->vma;
7263
7264                   last_offset = irela->r_offset;
7265
7266                   r_symndx = irela->r_info >> r_sym_shift;
7267                   if (r_symndx == STN_UNDEF)
7268                     continue;
7269
7270                   if (r_symndx >= locsymcount
7271                       || (elf_bad_symtab (input_bfd)
7272                           && finfo->sections[r_symndx] == NULL))
7273                     {
7274                       struct elf_link_hash_entry *rh;
7275                       unsigned long indx;
7276
7277                       /* This is a reloc against a global symbol.  We
7278                          have not yet output all the local symbols, so
7279                          we do not know the symbol index of any global
7280                          symbol.  We set the rel_hash entry for this
7281                          reloc to point to the global hash table entry
7282                          for this symbol.  The symbol index is then
7283                          set at the end of bfd_elf_final_link.  */
7284                       indx = r_symndx - extsymoff;
7285                       rh = elf_sym_hashes (input_bfd)[indx];
7286                       while (rh->root.type == bfd_link_hash_indirect
7287                              || rh->root.type == bfd_link_hash_warning)
7288                         rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
7289
7290                       /* Setting the index to -2 tells
7291                          elf_link_output_extsym that this symbol is
7292                          used by a reloc.  */
7293                       BFD_ASSERT (rh->indx < 0);
7294                       rh->indx = -2;
7295
7296                       *rel_hash = rh;
7297
7298                       continue;
7299                     }
7300
7301                   /* This is a reloc against a local symbol.  */
7302
7303                   *rel_hash = NULL;
7304                   sym = isymbuf[r_symndx];
7305                   sec = finfo->sections[r_symndx];
7306                   if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
7307                     {
7308                       /* I suppose the backend ought to fill in the
7309                          section of any STT_SECTION symbol against a
7310                          processor specific section.  */
7311                       r_symndx = 0;
7312                       if (bfd_is_abs_section (sec))
7313                         ;
7314                       else if (sec == NULL || sec->owner == NULL)
7315                         {
7316                           bfd_set_error (bfd_error_bad_value);
7317                           return FALSE;
7318                         }
7319                       else
7320                         {
7321                           asection *osec = sec->output_section;
7322
7323                           /* If we have discarded a section, the output
7324                              section will be the absolute section.  In
7325                              case of discarded link-once and discarded
7326                              SEC_MERGE sections, use the kept section.  */
7327                           if (bfd_is_abs_section (osec)
7328                               && sec->kept_section != NULL
7329                               && sec->kept_section->output_section != NULL)
7330                             {
7331                               osec = sec->kept_section->output_section;
7332                               irela->r_addend -= osec->vma;
7333                             }
7334
7335                           if (!bfd_is_abs_section (osec))
7336                             {
7337                               r_symndx = osec->target_index;
7338                               BFD_ASSERT (r_symndx != 0);
7339                             }
7340                         }
7341
7342                       /* Adjust the addend according to where the
7343                          section winds up in the output section.  */
7344                       if (rela_normal)
7345                         irela->r_addend += sec->output_offset;
7346                     }
7347                   else
7348                     {
7349                       if (finfo->indices[r_symndx] == -1)
7350                         {
7351                           unsigned long shlink;
7352                           const char *name;
7353                           asection *osec;
7354
7355                           if (finfo->info->strip == strip_all)
7356                             {
7357                               /* You can't do ld -r -s.  */
7358                               bfd_set_error (bfd_error_invalid_operation);
7359                               return FALSE;
7360                             }
7361
7362                           /* This symbol was skipped earlier, but
7363                              since it is needed by a reloc, we
7364                              must output it now.  */
7365                           shlink = symtab_hdr->sh_link;
7366                           name = (bfd_elf_string_from_elf_section
7367                                   (input_bfd, shlink, sym.st_name));
7368                           if (name == NULL)
7369                             return FALSE;
7370
7371                           osec = sec->output_section;
7372                           sym.st_shndx =
7373                             _bfd_elf_section_from_bfd_section (output_bfd,
7374                                                                osec);
7375                           if (sym.st_shndx == SHN_BAD)
7376                             return FALSE;
7377
7378                           sym.st_value += sec->output_offset;
7379                           if (! finfo->info->relocatable)
7380                             {
7381                               sym.st_value += osec->vma;
7382                               if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
7383                                 {
7384                                   /* STT_TLS symbols are relative to PT_TLS
7385                                      segment base.  */
7386                                   BFD_ASSERT (elf_hash_table (finfo->info)
7387                                               ->tls_sec != NULL);
7388                                   sym.st_value -= (elf_hash_table (finfo->info)
7389                                                    ->tls_sec->vma);
7390                                 }
7391                             }
7392
7393                           finfo->indices[r_symndx]
7394                             = bfd_get_symcount (output_bfd);
7395
7396                           if (! elf_link_output_sym (finfo, name, &sym, sec,
7397                                                      NULL))
7398                             return FALSE;
7399                         }
7400
7401                       r_symndx = finfo->indices[r_symndx];
7402                     }
7403
7404                   irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
7405                                    | (irela->r_info & r_type_mask));
7406                 }
7407
7408               /* Swap out the relocs.  */
7409               if (input_rel_hdr->sh_size != 0
7410                   && !bed->elf_backend_emit_relocs (output_bfd, o,
7411                                                     input_rel_hdr,
7412                                                     internal_relocs,
7413                                                     rel_hash_list))
7414                 return FALSE;
7415
7416               input_rel_hdr2 = elf_section_data (o)->rel_hdr2;
7417               if (input_rel_hdr2 && input_rel_hdr2->sh_size != 0)
7418                 {
7419                   internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
7420                                       * bed->s->int_rels_per_ext_rel);
7421                   rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
7422                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
7423                                                      input_rel_hdr2,
7424                                                      internal_relocs,
7425                                                      rel_hash_list))
7426                     return FALSE;
7427                 }
7428             }
7429         }
7430
7431       /* Write out the modified section contents.  */
7432       if (bed->elf_backend_write_section
7433           && (*bed->elf_backend_write_section) (output_bfd, o, contents))
7434         {
7435           /* Section written out.  */
7436         }
7437       else switch (o->sec_info_type)
7438         {
7439         case ELF_INFO_TYPE_STABS:
7440           if (! (_bfd_write_section_stabs
7441                  (output_bfd,
7442                   &elf_hash_table (finfo->info)->stab_info,
7443                   o, &elf_section_data (o)->sec_info, contents)))
7444             return FALSE;
7445           break;
7446         case ELF_INFO_TYPE_MERGE:
7447           if (! _bfd_write_merged_section (output_bfd, o,
7448                                            elf_section_data (o)->sec_info))
7449             return FALSE;
7450           break;
7451         case ELF_INFO_TYPE_EH_FRAME:
7452           {
7453             if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info,
7454                                                    o, contents))
7455               return FALSE;
7456           }
7457           break;
7458         default:
7459           {
7460             if (! (o->flags & SEC_EXCLUDE)
7461                 && ! bfd_set_section_contents (output_bfd, o->output_section,
7462                                                contents,
7463                                                (file_ptr) o->output_offset,
7464                                                o->size))
7465               return FALSE;
7466           }
7467           break;
7468         }
7469     }
7470
7471   return TRUE;
7472 }
7473
7474 /* Generate a reloc when linking an ELF file.  This is a reloc
7475    requested by the linker, and does not come from any input file.  This
7476    is used to build constructor and destructor tables when linking
7477    with -Ur.  */
7478
7479 static bfd_boolean
7480 elf_reloc_link_order (bfd *output_bfd,
7481                       struct bfd_link_info *info,
7482                       asection *output_section,
7483                       struct bfd_link_order *link_order)
7484 {
7485   reloc_howto_type *howto;
7486   long indx;
7487   bfd_vma offset;
7488   bfd_vma addend;
7489   struct elf_link_hash_entry **rel_hash_ptr;
7490   Elf_Internal_Shdr *rel_hdr;
7491   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
7492   Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
7493   bfd_byte *erel;
7494   unsigned int i;
7495
7496   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
7497   if (howto == NULL)
7498     {
7499       bfd_set_error (bfd_error_bad_value);
7500       return FALSE;
7501     }
7502
7503   addend = link_order->u.reloc.p->addend;
7504
7505   /* Figure out the symbol index.  */
7506   rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
7507                   + elf_section_data (output_section)->rel_count
7508                   + elf_section_data (output_section)->rel_count2);
7509   if (link_order->type == bfd_section_reloc_link_order)
7510     {
7511       indx = link_order->u.reloc.p->u.section->target_index;
7512       BFD_ASSERT (indx != 0);
7513       *rel_hash_ptr = NULL;
7514     }
7515   else
7516     {
7517       struct elf_link_hash_entry *h;
7518
7519       /* Treat a reloc against a defined symbol as though it were
7520          actually against the section.  */
7521       h = ((struct elf_link_hash_entry *)
7522            bfd_wrapped_link_hash_lookup (output_bfd, info,
7523                                          link_order->u.reloc.p->u.name,
7524                                          FALSE, FALSE, TRUE));
7525       if (h != NULL
7526           && (h->root.type == bfd_link_hash_defined
7527               || h->root.type == bfd_link_hash_defweak))
7528         {
7529           asection *section;
7530
7531           section = h->root.u.def.section;
7532           indx = section->output_section->target_index;
7533           *rel_hash_ptr = NULL;
7534           /* It seems that we ought to add the symbol value to the
7535              addend here, but in practice it has already been added
7536              because it was passed to constructor_callback.  */
7537           addend += section->output_section->vma + section->output_offset;
7538         }
7539       else if (h != NULL)
7540         {
7541           /* Setting the index to -2 tells elf_link_output_extsym that
7542              this symbol is used by a reloc.  */
7543           h->indx = -2;
7544           *rel_hash_ptr = h;
7545           indx = 0;
7546         }
7547       else
7548         {
7549           if (! ((*info->callbacks->unattached_reloc)
7550                  (info, link_order->u.reloc.p->u.name, NULL, NULL, 0)))
7551             return FALSE;
7552           indx = 0;
7553         }
7554     }
7555
7556   /* If this is an inplace reloc, we must write the addend into the
7557      object file.  */
7558   if (howto->partial_inplace && addend != 0)
7559     {
7560       bfd_size_type size;
7561       bfd_reloc_status_type rstat;
7562       bfd_byte *buf;
7563       bfd_boolean ok;
7564       const char *sym_name;
7565
7566       size = bfd_get_reloc_size (howto);
7567       buf = bfd_zmalloc (size);
7568       if (buf == NULL)
7569         return FALSE;
7570       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
7571       switch (rstat)
7572         {
7573         case bfd_reloc_ok:
7574           break;
7575
7576         default:
7577         case bfd_reloc_outofrange:
7578           abort ();
7579
7580         case bfd_reloc_overflow:
7581           if (link_order->type == bfd_section_reloc_link_order)
7582             sym_name = bfd_section_name (output_bfd,
7583                                          link_order->u.reloc.p->u.section);
7584           else
7585             sym_name = link_order->u.reloc.p->u.name;
7586           if (! ((*info->callbacks->reloc_overflow)
7587                  (info, NULL, sym_name, howto->name, addend, NULL,
7588                   NULL, (bfd_vma) 0)))
7589             {
7590               free (buf);
7591               return FALSE;
7592             }
7593           break;
7594         }
7595       ok = bfd_set_section_contents (output_bfd, output_section, buf,
7596                                      link_order->offset, size);
7597       free (buf);
7598       if (! ok)
7599         return FALSE;
7600     }
7601
7602   /* The address of a reloc is relative to the section in a
7603      relocatable file, and is a virtual address in an executable
7604      file.  */
7605   offset = link_order->offset;
7606   if (! info->relocatable)
7607     offset += output_section->vma;
7608
7609   for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
7610     {
7611       irel[i].r_offset = offset;
7612       irel[i].r_info = 0;
7613       irel[i].r_addend = 0;
7614     }
7615   if (bed->s->arch_size == 32)
7616     irel[0].r_info = ELF32_R_INFO (indx, howto->type);
7617   else
7618     irel[0].r_info = ELF64_R_INFO (indx, howto->type);
7619
7620   rel_hdr = &elf_section_data (output_section)->rel_hdr;
7621   erel = rel_hdr->contents;
7622   if (rel_hdr->sh_type == SHT_REL)
7623     {
7624       erel += (elf_section_data (output_section)->rel_count
7625                * bed->s->sizeof_rel);
7626       (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
7627     }
7628   else
7629     {
7630       irel[0].r_addend = addend;
7631       erel += (elf_section_data (output_section)->rel_count
7632                * bed->s->sizeof_rela);
7633       (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
7634     }
7635
7636   ++elf_section_data (output_section)->rel_count;
7637
7638   return TRUE;
7639 }
7640
7641
7642 /* Get the output vma of the section pointed to by the sh_link field.  */
7643
7644 static bfd_vma
7645 elf_get_linked_section_vma (struct bfd_link_order *p)
7646 {
7647   Elf_Internal_Shdr **elf_shdrp;
7648   asection *s;
7649   int elfsec;
7650
7651   s = p->u.indirect.section;
7652   elf_shdrp = elf_elfsections (s->owner);
7653   elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
7654   elfsec = elf_shdrp[elfsec]->sh_link;
7655   /* PR 290:
7656      The Intel C compiler generates SHT_IA_64_UNWIND with
7657      SHF_LINK_ORDER.  But it doesn't set the sh_link or
7658      sh_info fields.  Hence we could get the situation
7659      where elfsec is 0.  */
7660   if (elfsec == 0)
7661     {
7662       const struct elf_backend_data *bed
7663         = get_elf_backend_data (s->owner);
7664       if (bed->link_order_error_handler)
7665         bed->link_order_error_handler
7666           (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
7667       return 0;
7668     }
7669   else
7670     {
7671       s = elf_shdrp[elfsec]->bfd_section;
7672       return s->output_section->vma + s->output_offset;
7673     }
7674 }
7675
7676
7677 /* Compare two sections based on the locations of the sections they are
7678    linked to.  Used by elf_fixup_link_order.  */
7679
7680 static int
7681 compare_link_order (const void * a, const void * b)
7682 {
7683   bfd_vma apos;
7684   bfd_vma bpos;
7685
7686   apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
7687   bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
7688   if (apos < bpos)
7689     return -1;
7690   return apos > bpos;
7691 }
7692
7693
7694 /* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
7695    order as their linked sections.  Returns false if this could not be done
7696    because an output section includes both ordered and unordered
7697    sections.  Ideally we'd do this in the linker proper.  */
7698
7699 static bfd_boolean
7700 elf_fixup_link_order (bfd *abfd, asection *o)
7701 {
7702   int seen_linkorder;
7703   int seen_other;
7704   int n;
7705   struct bfd_link_order *p;
7706   bfd *sub;
7707   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7708   unsigned elfsec;
7709   struct bfd_link_order **sections;
7710   asection *s, *other_sec, *linkorder_sec;
7711   bfd_vma offset;
7712
7713   other_sec = NULL;
7714   linkorder_sec = NULL;
7715   seen_other = 0;
7716   seen_linkorder = 0;
7717   for (p = o->map_head.link_order; p != NULL; p = p->next)
7718     {
7719       if (p->type == bfd_indirect_link_order)
7720         {
7721           s = p->u.indirect.section;
7722           sub = s->owner;
7723           if (bfd_get_flavour (sub) == bfd_target_elf_flavour
7724               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
7725               && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
7726               && elfsec < elf_numsections (sub)
7727               && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER)
7728             {
7729               seen_linkorder++;
7730               linkorder_sec = s;
7731             }
7732           else
7733             {
7734               seen_other++;
7735               other_sec = s;
7736             }
7737         }
7738       else
7739         seen_other++;
7740
7741       if (seen_other && seen_linkorder)
7742         {
7743           if (other_sec && linkorder_sec)
7744             (*_bfd_error_handler) (_("%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"),
7745                                    o, linkorder_sec,
7746                                    linkorder_sec->owner, other_sec,
7747                                    other_sec->owner);
7748           else
7749             (*_bfd_error_handler) (_("%A has both ordered and unordered sections"),
7750                                    o);
7751           bfd_set_error (bfd_error_bad_value);
7752           return FALSE;
7753         }
7754     }
7755
7756   if (!seen_linkorder)
7757     return TRUE;
7758
7759   sections = (struct bfd_link_order **)
7760     xmalloc (seen_linkorder * sizeof (struct bfd_link_order *));
7761   seen_linkorder = 0;
7762
7763   for (p = o->map_head.link_order; p != NULL; p = p->next)
7764     {
7765       sections[seen_linkorder++] = p;
7766     }
7767   /* Sort the input sections in the order of their linked section.  */
7768   qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
7769          compare_link_order);
7770
7771   /* Change the offsets of the sections.  */
7772   offset = 0;
7773   for (n = 0; n < seen_linkorder; n++)
7774     {
7775       s = sections[n]->u.indirect.section;
7776       offset &= ~(bfd_vma)((1 << s->alignment_power) - 1);
7777       s->output_offset = offset;
7778       sections[n]->offset = offset;
7779       offset += sections[n]->size;
7780     }
7781
7782   return TRUE;
7783 }
7784
7785
7786 /* Do the final step of an ELF link.  */
7787
7788 bfd_boolean
7789 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
7790 {
7791   bfd_boolean dynamic;
7792   bfd_boolean emit_relocs;
7793   bfd *dynobj;
7794   struct elf_final_link_info finfo;
7795   register asection *o;
7796   register struct bfd_link_order *p;
7797   register bfd *sub;
7798   bfd_size_type max_contents_size;
7799   bfd_size_type max_external_reloc_size;
7800   bfd_size_type max_internal_reloc_count;
7801   bfd_size_type max_sym_count;
7802   bfd_size_type max_sym_shndx_count;
7803   file_ptr off;
7804   Elf_Internal_Sym elfsym;
7805   unsigned int i;
7806   Elf_Internal_Shdr *symtab_hdr;
7807   Elf_Internal_Shdr *symtab_shndx_hdr;
7808   Elf_Internal_Shdr *symstrtab_hdr;
7809   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7810   struct elf_outext_info eoinfo;
7811   bfd_boolean merged;
7812   size_t relativecount = 0;
7813   asection *reldyn = 0;
7814   bfd_size_type amt;
7815
7816   if (! is_elf_hash_table (info->hash))
7817     return FALSE;
7818
7819   if (info->shared)
7820     abfd->flags |= DYNAMIC;
7821
7822   dynamic = elf_hash_table (info)->dynamic_sections_created;
7823   dynobj = elf_hash_table (info)->dynobj;
7824
7825   emit_relocs = (info->relocatable
7826                  || info->emitrelocations);
7827
7828   finfo.info = info;
7829   finfo.output_bfd = abfd;
7830   finfo.symstrtab = _bfd_elf_stringtab_init ();
7831   if (finfo.symstrtab == NULL)
7832     return FALSE;
7833
7834   if (! dynamic)
7835     {
7836       finfo.dynsym_sec = NULL;
7837       finfo.hash_sec = NULL;
7838       finfo.symver_sec = NULL;
7839     }
7840   else
7841     {
7842       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
7843       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
7844       BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
7845       finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
7846       /* Note that it is OK if symver_sec is NULL.  */
7847     }
7848
7849   finfo.contents = NULL;
7850   finfo.external_relocs = NULL;
7851   finfo.internal_relocs = NULL;
7852   finfo.external_syms = NULL;
7853   finfo.locsym_shndx = NULL;
7854   finfo.internal_syms = NULL;
7855   finfo.indices = NULL;
7856   finfo.sections = NULL;
7857   finfo.symbuf = NULL;
7858   finfo.symshndxbuf = NULL;
7859   finfo.symbuf_count = 0;
7860   finfo.shndxbuf_size = 0;
7861
7862   /* Count up the number of relocations we will output for each output
7863      section, so that we know the sizes of the reloc sections.  We
7864      also figure out some maximum sizes.  */
7865   max_contents_size = 0;
7866   max_external_reloc_size = 0;
7867   max_internal_reloc_count = 0;
7868   max_sym_count = 0;
7869   max_sym_shndx_count = 0;
7870   merged = FALSE;
7871   for (o = abfd->sections; o != NULL; o = o->next)
7872     {
7873       struct bfd_elf_section_data *esdo = elf_section_data (o);
7874       o->reloc_count = 0;
7875
7876       for (p = o->map_head.link_order; p != NULL; p = p->next)
7877         {
7878           unsigned int reloc_count = 0;
7879           struct bfd_elf_section_data *esdi = NULL;
7880           unsigned int *rel_count1;
7881
7882           if (p->type == bfd_section_reloc_link_order
7883               || p->type == bfd_symbol_reloc_link_order)
7884             reloc_count = 1;
7885           else if (p->type == bfd_indirect_link_order)
7886             {
7887               asection *sec;
7888
7889               sec = p->u.indirect.section;
7890               esdi = elf_section_data (sec);
7891
7892               /* Mark all sections which are to be included in the
7893                  link.  This will normally be every section.  We need
7894                  to do this so that we can identify any sections which
7895                  the linker has decided to not include.  */
7896               sec->linker_mark = TRUE;
7897
7898               if (sec->flags & SEC_MERGE)
7899                 merged = TRUE;
7900
7901               if (info->relocatable || info->emitrelocations)
7902                 reloc_count = sec->reloc_count;
7903               else if (bed->elf_backend_count_relocs)
7904                 {
7905                   Elf_Internal_Rela * relocs;
7906
7907                   relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
7908                                                       info->keep_memory);
7909
7910                   reloc_count = (*bed->elf_backend_count_relocs) (sec, relocs);
7911
7912                   if (elf_section_data (o)->relocs != relocs)
7913                     free (relocs);
7914                 }
7915
7916               if (sec->rawsize > max_contents_size)
7917                 max_contents_size = sec->rawsize;
7918               if (sec->size > max_contents_size)
7919                 max_contents_size = sec->size;
7920
7921               /* We are interested in just local symbols, not all
7922                  symbols.  */
7923               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
7924                   && (sec->owner->flags & DYNAMIC) == 0)
7925                 {
7926                   size_t sym_count;
7927
7928                   if (elf_bad_symtab (sec->owner))
7929                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
7930                                  / bed->s->sizeof_sym);
7931                   else
7932                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
7933
7934                   if (sym_count > max_sym_count)
7935                     max_sym_count = sym_count;
7936
7937                   if (sym_count > max_sym_shndx_count
7938                       && elf_symtab_shndx (sec->owner) != 0)
7939                     max_sym_shndx_count = sym_count;
7940
7941                   if ((sec->flags & SEC_RELOC) != 0)
7942                     {
7943                       size_t ext_size;
7944
7945                       ext_size = elf_section_data (sec)->rel_hdr.sh_size;
7946                       if (ext_size > max_external_reloc_size)
7947                         max_external_reloc_size = ext_size;
7948                       if (sec->reloc_count > max_internal_reloc_count)
7949                         max_internal_reloc_count = sec->reloc_count;
7950                     }
7951                 }
7952             }
7953
7954           if (reloc_count == 0)
7955             continue;
7956
7957           o->reloc_count += reloc_count;
7958
7959           /* MIPS may have a mix of REL and RELA relocs on sections.
7960              To support this curious ABI we keep reloc counts in
7961              elf_section_data too.  We must be careful to add the
7962              relocations from the input section to the right output
7963              count.  FIXME: Get rid of one count.  We have
7964              o->reloc_count == esdo->rel_count + esdo->rel_count2.  */
7965           rel_count1 = &esdo->rel_count;
7966           if (esdi != NULL)
7967             {
7968               bfd_boolean same_size;
7969               bfd_size_type entsize1;
7970
7971               entsize1 = esdi->rel_hdr.sh_entsize;
7972               BFD_ASSERT (entsize1 == bed->s->sizeof_rel
7973                           || entsize1 == bed->s->sizeof_rela);
7974               same_size = !o->use_rela_p == (entsize1 == bed->s->sizeof_rel);
7975
7976               if (!same_size)
7977                 rel_count1 = &esdo->rel_count2;
7978
7979               if (esdi->rel_hdr2 != NULL)
7980                 {
7981                   bfd_size_type entsize2 = esdi->rel_hdr2->sh_entsize;
7982                   unsigned int alt_count;
7983                   unsigned int *rel_count2;
7984
7985                   BFD_ASSERT (entsize2 != entsize1
7986                               && (entsize2 == bed->s->sizeof_rel
7987                                   || entsize2 == bed->s->sizeof_rela));
7988
7989                   rel_count2 = &esdo->rel_count2;
7990                   if (!same_size)
7991                     rel_count2 = &esdo->rel_count;
7992
7993                   /* The following is probably too simplistic if the
7994                      backend counts output relocs unusually.  */
7995                   BFD_ASSERT (bed->elf_backend_count_relocs == NULL);
7996                   alt_count = NUM_SHDR_ENTRIES (esdi->rel_hdr2);
7997                   *rel_count2 += alt_count;
7998                   reloc_count -= alt_count;
7999                 }
8000             }
8001           *rel_count1 += reloc_count;
8002         }
8003
8004       if (o->reloc_count > 0)
8005         o->flags |= SEC_RELOC;
8006       else
8007         {
8008           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
8009              set it (this is probably a bug) and if it is set
8010              assign_section_numbers will create a reloc section.  */
8011           o->flags &=~ SEC_RELOC;
8012         }
8013
8014       /* If the SEC_ALLOC flag is not set, force the section VMA to
8015          zero.  This is done in elf_fake_sections as well, but forcing
8016          the VMA to 0 here will ensure that relocs against these
8017          sections are handled correctly.  */
8018       if ((o->flags & SEC_ALLOC) == 0
8019           && ! o->user_set_vma)
8020         o->vma = 0;
8021     }
8022
8023   if (! info->relocatable && merged)
8024     elf_link_hash_traverse (elf_hash_table (info),
8025                             _bfd_elf_link_sec_merge_syms, abfd);
8026
8027   /* Figure out the file positions for everything but the symbol table
8028      and the relocs.  We set symcount to force assign_section_numbers
8029      to create a symbol table.  */
8030   bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1;
8031   BFD_ASSERT (! abfd->output_has_begun);
8032   if (! _bfd_elf_compute_section_file_positions (abfd, info))
8033     goto error_return;
8034
8035   /* Set sizes, and assign file positions for reloc sections.  */
8036   for (o = abfd->sections; o != NULL; o = o->next)
8037     {
8038       if ((o->flags & SEC_RELOC) != 0)
8039         {
8040           if (!(_bfd_elf_link_size_reloc_section
8041                 (abfd, &elf_section_data (o)->rel_hdr, o)))
8042             goto error_return;
8043
8044           if (elf_section_data (o)->rel_hdr2
8045               && !(_bfd_elf_link_size_reloc_section
8046                    (abfd, elf_section_data (o)->rel_hdr2, o)))
8047             goto error_return;
8048         }
8049
8050       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
8051          to count upwards while actually outputting the relocations.  */
8052       elf_section_data (o)->rel_count = 0;
8053       elf_section_data (o)->rel_count2 = 0;
8054     }
8055
8056   _bfd_elf_assign_file_positions_for_relocs (abfd);
8057
8058   /* We have now assigned file positions for all the sections except
8059      .symtab and .strtab.  We start the .symtab section at the current
8060      file position, and write directly to it.  We build the .strtab
8061      section in memory.  */
8062   bfd_get_symcount (abfd) = 0;
8063   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8064   /* sh_name is set in prep_headers.  */
8065   symtab_hdr->sh_type = SHT_SYMTAB;
8066   /* sh_flags, sh_addr and sh_size all start off zero.  */
8067   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
8068   /* sh_link is set in assign_section_numbers.  */
8069   /* sh_info is set below.  */
8070   /* sh_offset is set just below.  */
8071   symtab_hdr->sh_addralign = 1 << bed->s->log_file_align;
8072
8073   off = elf_tdata (abfd)->next_file_pos;
8074   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
8075
8076   /* Note that at this point elf_tdata (abfd)->next_file_pos is
8077      incorrect.  We do not yet know the size of the .symtab section.
8078      We correct next_file_pos below, after we do know the size.  */
8079
8080   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
8081      continuously seeking to the right position in the file.  */
8082   if (! info->keep_memory || max_sym_count < 20)
8083     finfo.symbuf_size = 20;
8084   else
8085     finfo.symbuf_size = max_sym_count;
8086   amt = finfo.symbuf_size;
8087   amt *= bed->s->sizeof_sym;
8088   finfo.symbuf = bfd_malloc (amt);
8089   if (finfo.symbuf == NULL)
8090     goto error_return;
8091   if (elf_numsections (abfd) > SHN_LORESERVE)
8092     {
8093       /* Wild guess at number of output symbols.  realloc'd as needed.  */
8094       amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
8095       finfo.shndxbuf_size = amt;
8096       amt *= sizeof (Elf_External_Sym_Shndx);
8097       finfo.symshndxbuf = bfd_zmalloc (amt);
8098       if (finfo.symshndxbuf == NULL)
8099         goto error_return;
8100     }
8101
8102   /* Start writing out the symbol table.  The first symbol is always a
8103      dummy symbol.  */
8104   if (info->strip != strip_all
8105       || emit_relocs)
8106     {
8107       elfsym.st_value = 0;
8108       elfsym.st_size = 0;
8109       elfsym.st_info = 0;
8110       elfsym.st_other = 0;
8111       elfsym.st_shndx = SHN_UNDEF;
8112       if (! elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr,
8113                                  NULL))
8114         goto error_return;
8115     }
8116
8117   /* Output a symbol for each section.  We output these even if we are
8118      discarding local symbols, since they are used for relocs.  These
8119      symbols have no names.  We store the index of each one in the
8120      index field of the section, so that we can find it again when
8121      outputting relocs.  */
8122   if (info->strip != strip_all
8123       || emit_relocs)
8124     {
8125       elfsym.st_size = 0;
8126       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
8127       elfsym.st_other = 0;
8128       for (i = 1; i < elf_numsections (abfd); i++)
8129         {
8130           o = bfd_section_from_elf_index (abfd, i);
8131           if (o != NULL)
8132             o->target_index = bfd_get_symcount (abfd);
8133           elfsym.st_shndx = i;
8134           if (info->relocatable || o == NULL)
8135             elfsym.st_value = 0;
8136           else
8137             elfsym.st_value = o->vma;
8138           if (! elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL))
8139             goto error_return;
8140           if (i == SHN_LORESERVE - 1)
8141             i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
8142         }
8143     }
8144
8145   /* Allocate some memory to hold information read in from the input
8146      files.  */
8147   if (max_contents_size != 0)
8148     {
8149       finfo.contents = bfd_malloc (max_contents_size);
8150       if (finfo.contents == NULL)
8151         goto error_return;
8152     }
8153
8154   if (max_external_reloc_size != 0)
8155     {
8156       finfo.external_relocs = bfd_malloc (max_external_reloc_size);
8157       if (finfo.external_relocs == NULL)
8158         goto error_return;
8159     }
8160
8161   if (max_internal_reloc_count != 0)
8162     {
8163       amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
8164       amt *= sizeof (Elf_Internal_Rela);
8165       finfo.internal_relocs = bfd_malloc (amt);
8166       if (finfo.internal_relocs == NULL)
8167         goto error_return;
8168     }
8169
8170   if (max_sym_count != 0)
8171     {
8172       amt = max_sym_count * bed->s->sizeof_sym;
8173       finfo.external_syms = bfd_malloc (amt);
8174       if (finfo.external_syms == NULL)
8175         goto error_return;
8176
8177       amt = max_sym_count * sizeof (Elf_Internal_Sym);
8178       finfo.internal_syms = bfd_malloc (amt);
8179       if (finfo.internal_syms == NULL)
8180         goto error_return;
8181
8182       amt = max_sym_count * sizeof (long);
8183       finfo.indices = bfd_malloc (amt);
8184       if (finfo.indices == NULL)
8185         goto error_return;
8186
8187       amt = max_sym_count * sizeof (asection *);
8188       finfo.sections = bfd_malloc (amt);
8189       if (finfo.sections == NULL)
8190         goto error_return;
8191     }
8192
8193   if (max_sym_shndx_count != 0)
8194     {
8195       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
8196       finfo.locsym_shndx = bfd_malloc (amt);
8197       if (finfo.locsym_shndx == NULL)
8198         goto error_return;
8199     }
8200
8201   if (elf_hash_table (info)->tls_sec)
8202     {
8203       bfd_vma base, end = 0;
8204       asection *sec;
8205
8206       for (sec = elf_hash_table (info)->tls_sec;
8207            sec && (sec->flags & SEC_THREAD_LOCAL);
8208            sec = sec->next)
8209         {
8210           bfd_size_type size = sec->size;
8211
8212           if (size == 0
8213               && (sec->flags & SEC_HAS_CONTENTS) == 0)
8214             {
8215               struct bfd_link_order *o = sec->map_tail.link_order;
8216               if (o != NULL)
8217                 size = o->offset + o->size;
8218             }
8219           end = sec->vma + size;
8220         }
8221       base = elf_hash_table (info)->tls_sec->vma;
8222       end = align_power (end, elf_hash_table (info)->tls_sec->alignment_power);
8223       elf_hash_table (info)->tls_size = end - base;
8224     }
8225
8226   /* Reorder SHF_LINK_ORDER sections.  */
8227   for (o = abfd->sections; o != NULL; o = o->next)
8228     {
8229       if (!elf_fixup_link_order (abfd, o))
8230         return FALSE;
8231     }
8232
8233   /* Since ELF permits relocations to be against local symbols, we
8234      must have the local symbols available when we do the relocations.
8235      Since we would rather only read the local symbols once, and we
8236      would rather not keep them in memory, we handle all the
8237      relocations for a single input file at the same time.
8238
8239      Unfortunately, there is no way to know the total number of local
8240      symbols until we have seen all of them, and the local symbol
8241      indices precede the global symbol indices.  This means that when
8242      we are generating relocatable output, and we see a reloc against
8243      a global symbol, we can not know the symbol index until we have
8244      finished examining all the local symbols to see which ones we are
8245      going to output.  To deal with this, we keep the relocations in
8246      memory, and don't output them until the end of the link.  This is
8247      an unfortunate waste of memory, but I don't see a good way around
8248      it.  Fortunately, it only happens when performing a relocatable
8249      link, which is not the common case.  FIXME: If keep_memory is set
8250      we could write the relocs out and then read them again; I don't
8251      know how bad the memory loss will be.  */
8252
8253   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
8254     sub->output_has_begun = FALSE;
8255   for (o = abfd->sections; o != NULL; o = o->next)
8256     {
8257       for (p = o->map_head.link_order; p != NULL; p = p->next)
8258         {
8259           if (p->type == bfd_indirect_link_order
8260               && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
8261                   == bfd_target_elf_flavour)
8262               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
8263             {
8264               if (! sub->output_has_begun)
8265                 {
8266                   if (! elf_link_input_bfd (&finfo, sub))
8267                     goto error_return;
8268                   sub->output_has_begun = TRUE;
8269                 }
8270             }
8271           else if (p->type == bfd_section_reloc_link_order
8272                    || p->type == bfd_symbol_reloc_link_order)
8273             {
8274               if (! elf_reloc_link_order (abfd, info, o, p))
8275                 goto error_return;
8276             }
8277           else
8278             {
8279               if (! _bfd_default_link_order (abfd, info, o, p))
8280                 goto error_return;
8281             }
8282         }
8283     }
8284
8285   /* Output any global symbols that got converted to local in a
8286      version script or due to symbol visibility.  We do this in a
8287      separate step since ELF requires all local symbols to appear
8288      prior to any global symbols.  FIXME: We should only do this if
8289      some global symbols were, in fact, converted to become local.
8290      FIXME: Will this work correctly with the Irix 5 linker?  */
8291   eoinfo.failed = FALSE;
8292   eoinfo.finfo = &finfo;
8293   eoinfo.localsyms = TRUE;
8294   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
8295                           &eoinfo);
8296   if (eoinfo.failed)
8297     return FALSE;
8298
8299   /* That wrote out all the local symbols.  Finish up the symbol table
8300      with the global symbols. Even if we want to strip everything we
8301      can, we still need to deal with those global symbols that got
8302      converted to local in a version script.  */
8303
8304   /* The sh_info field records the index of the first non local symbol.  */
8305   symtab_hdr->sh_info = bfd_get_symcount (abfd);
8306
8307   if (dynamic
8308       && finfo.dynsym_sec->output_section != bfd_abs_section_ptr)
8309     {
8310       Elf_Internal_Sym sym;
8311       bfd_byte *dynsym = finfo.dynsym_sec->contents;
8312       long last_local = 0;
8313
8314       /* Write out the section symbols for the output sections.  */
8315       if (info->shared || elf_hash_table (info)->is_relocatable_executable)
8316         {
8317           asection *s;
8318
8319           sym.st_size = 0;
8320           sym.st_name = 0;
8321           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
8322           sym.st_other = 0;
8323
8324           for (s = abfd->sections; s != NULL; s = s->next)
8325             {
8326               int indx;
8327               bfd_byte *dest;
8328               long dynindx;
8329
8330               dynindx = elf_section_data (s)->dynindx;
8331               if (dynindx <= 0)
8332                 continue;
8333               indx = elf_section_data (s)->this_idx;
8334               BFD_ASSERT (indx > 0);
8335               sym.st_shndx = indx;
8336               if (! check_dynsym (abfd, &sym))
8337                 return FALSE;
8338               sym.st_value = s->vma;
8339               dest = dynsym + dynindx * bed->s->sizeof_sym;
8340               if (last_local < dynindx)
8341                 last_local = dynindx;
8342               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
8343             }
8344         }
8345
8346       /* Write out the local dynsyms.  */
8347       if (elf_hash_table (info)->dynlocal)
8348         {
8349           struct elf_link_local_dynamic_entry *e;
8350           for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
8351             {
8352               asection *s;
8353               bfd_byte *dest;
8354
8355               sym.st_size = e->isym.st_size;
8356               sym.st_other = e->isym.st_other;
8357
8358               /* Copy the internal symbol as is.
8359                  Note that we saved a word of storage and overwrote
8360                  the original st_name with the dynstr_index.  */
8361               sym = e->isym;
8362
8363               if (e->isym.st_shndx != SHN_UNDEF
8364                   && (e->isym.st_shndx < SHN_LORESERVE
8365                       || e->isym.st_shndx > SHN_HIRESERVE))
8366                 {
8367                   s = bfd_section_from_elf_index (e->input_bfd,
8368                                                   e->isym.st_shndx);
8369
8370                   sym.st_shndx =
8371                     elf_section_data (s->output_section)->this_idx;
8372                   if (! check_dynsym (abfd, &sym))
8373                     return FALSE;
8374                   sym.st_value = (s->output_section->vma
8375                                   + s->output_offset
8376                                   + e->isym.st_value);
8377                 }
8378
8379               if (last_local < e->dynindx)
8380                 last_local = e->dynindx;
8381
8382               dest = dynsym + e->dynindx * bed->s->sizeof_sym;
8383               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
8384             }
8385         }
8386
8387       elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info =
8388         last_local + 1;
8389     }
8390
8391   /* We get the global symbols from the hash table.  */
8392   eoinfo.failed = FALSE;
8393   eoinfo.localsyms = FALSE;
8394   eoinfo.finfo = &finfo;
8395   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
8396                           &eoinfo);
8397   if (eoinfo.failed)
8398     return FALSE;
8399
8400   /* If backend needs to output some symbols not present in the hash
8401      table, do it now.  */
8402   if (bed->elf_backend_output_arch_syms)
8403     {
8404       typedef bfd_boolean (*out_sym_func)
8405         (void *, const char *, Elf_Internal_Sym *, asection *,
8406          struct elf_link_hash_entry *);
8407
8408       if (! ((*bed->elf_backend_output_arch_syms)
8409              (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
8410         return FALSE;
8411     }
8412
8413   /* Flush all symbols to the file.  */
8414   if (! elf_link_flush_output_syms (&finfo, bed))
8415     return FALSE;
8416
8417   /* Now we know the size of the symtab section.  */
8418   off += symtab_hdr->sh_size;
8419
8420   symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
8421   if (symtab_shndx_hdr->sh_name != 0)
8422     {
8423       symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
8424       symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
8425       symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
8426       amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
8427       symtab_shndx_hdr->sh_size = amt;
8428
8429       off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
8430                                                        off, TRUE);
8431
8432       if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
8433           || (bfd_bwrite (finfo.symshndxbuf, amt, abfd) != amt))
8434         return FALSE;
8435     }
8436
8437
8438   /* Finish up and write out the symbol string table (.strtab)
8439      section.  */
8440   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
8441   /* sh_name was set in prep_headers.  */
8442   symstrtab_hdr->sh_type = SHT_STRTAB;
8443   symstrtab_hdr->sh_flags = 0;
8444   symstrtab_hdr->sh_addr = 0;
8445   symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
8446   symstrtab_hdr->sh_entsize = 0;
8447   symstrtab_hdr->sh_link = 0;
8448   symstrtab_hdr->sh_info = 0;
8449   /* sh_offset is set just below.  */
8450   symstrtab_hdr->sh_addralign = 1;
8451
8452   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE);
8453   elf_tdata (abfd)->next_file_pos = off;
8454
8455   if (bfd_get_symcount (abfd) > 0)
8456     {
8457       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
8458           || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
8459         return FALSE;
8460     }
8461
8462   /* Adjust the relocs to have the correct symbol indices.  */
8463   for (o = abfd->sections; o != NULL; o = o->next)
8464     {
8465       if ((o->flags & SEC_RELOC) == 0)
8466         continue;
8467
8468       elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr,
8469                               elf_section_data (o)->rel_count,
8470                               elf_section_data (o)->rel_hashes);
8471       if (elf_section_data (o)->rel_hdr2 != NULL)
8472         elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2,
8473                                 elf_section_data (o)->rel_count2,
8474                                 (elf_section_data (o)->rel_hashes
8475                                  + elf_section_data (o)->rel_count));
8476
8477       /* Set the reloc_count field to 0 to prevent write_relocs from
8478          trying to swap the relocs out itself.  */
8479       o->reloc_count = 0;
8480     }
8481
8482   if (dynamic && info->combreloc && dynobj != NULL)
8483     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
8484
8485   /* If we are linking against a dynamic object, or generating a
8486      shared library, finish up the dynamic linking information.  */
8487   if (dynamic)
8488     {
8489       bfd_byte *dyncon, *dynconend;
8490
8491       /* Fix up .dynamic entries.  */
8492       o = bfd_get_section_by_name (dynobj, ".dynamic");
8493       BFD_ASSERT (o != NULL);
8494
8495       dyncon = o->contents;
8496       dynconend = o->contents + o->size;
8497       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
8498         {
8499           Elf_Internal_Dyn dyn;
8500           const char *name;
8501           unsigned int type;
8502
8503           bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
8504
8505           switch (dyn.d_tag)
8506             {
8507             default:
8508               continue;
8509             case DT_NULL:
8510               if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
8511                 {
8512                   switch (elf_section_data (reldyn)->this_hdr.sh_type)
8513                     {
8514                     case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
8515                     case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
8516                     default: continue;
8517                     }
8518                   dyn.d_un.d_val = relativecount;
8519                   relativecount = 0;
8520                   break;
8521                 }
8522               continue;
8523
8524             case DT_INIT:
8525               name = info->init_function;
8526               goto get_sym;
8527             case DT_FINI:
8528               name = info->fini_function;
8529             get_sym:
8530               {
8531                 struct elf_link_hash_entry *h;
8532
8533                 h = elf_link_hash_lookup (elf_hash_table (info), name,
8534                                           FALSE, FALSE, TRUE);
8535                 if (h != NULL
8536                     && (h->root.type == bfd_link_hash_defined
8537                         || h->root.type == bfd_link_hash_defweak))
8538                   {
8539                     dyn.d_un.d_val = h->root.u.def.value;
8540                     o = h->root.u.def.section;
8541                     if (o->output_section != NULL)
8542                       dyn.d_un.d_val += (o->output_section->vma
8543                                          + o->output_offset);
8544                     else
8545                       {
8546                         /* The symbol is imported from another shared
8547                            library and does not apply to this one.  */
8548                         dyn.d_un.d_val = 0;
8549                       }
8550                     break;
8551                   }
8552               }
8553               continue;
8554
8555             case DT_PREINIT_ARRAYSZ:
8556               name = ".preinit_array";
8557               goto get_size;
8558             case DT_INIT_ARRAYSZ:
8559               name = ".init_array";
8560               goto get_size;
8561             case DT_FINI_ARRAYSZ:
8562               name = ".fini_array";
8563             get_size:
8564               o = bfd_get_section_by_name (abfd, name);
8565               if (o == NULL)
8566                 {
8567                   (*_bfd_error_handler)
8568                     (_("%B: could not find output section %s"), abfd, name);
8569                   goto error_return;
8570                 }
8571               if (o->size == 0)
8572                 (*_bfd_error_handler)
8573                   (_("warning: %s section has zero size"), name);
8574               dyn.d_un.d_val = o->size;
8575               break;
8576
8577             case DT_PREINIT_ARRAY:
8578               name = ".preinit_array";
8579               goto get_vma;
8580             case DT_INIT_ARRAY:
8581               name = ".init_array";
8582               goto get_vma;
8583             case DT_FINI_ARRAY:
8584               name = ".fini_array";
8585               goto get_vma;
8586
8587             case DT_HASH:
8588               name = ".hash";
8589               goto get_vma;
8590             case DT_STRTAB:
8591               name = ".dynstr";
8592               goto get_vma;
8593             case DT_SYMTAB:
8594               name = ".dynsym";
8595               goto get_vma;
8596             case DT_VERDEF:
8597               name = ".gnu.version_d";
8598               goto get_vma;
8599             case DT_VERNEED:
8600               name = ".gnu.version_r";
8601               goto get_vma;
8602             case DT_VERSYM:
8603               name = ".gnu.version";
8604             get_vma:
8605               o = bfd_get_section_by_name (abfd, name);
8606               if (o == NULL)
8607                 {
8608                   (*_bfd_error_handler)
8609                     (_("%B: could not find output section %s"), abfd, name);
8610                   goto error_return;
8611                 }
8612               dyn.d_un.d_ptr = o->vma;
8613               break;
8614
8615             case DT_REL:
8616             case DT_RELA:
8617             case DT_RELSZ:
8618             case DT_RELASZ:
8619               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
8620                 type = SHT_REL;
8621               else
8622                 type = SHT_RELA;
8623               dyn.d_un.d_val = 0;
8624               for (i = 1; i < elf_numsections (abfd); i++)
8625                 {
8626                   Elf_Internal_Shdr *hdr;
8627
8628                   hdr = elf_elfsections (abfd)[i];
8629                   if (hdr->sh_type == type
8630                       && (hdr->sh_flags & SHF_ALLOC) != 0)
8631                     {
8632                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
8633                         dyn.d_un.d_val += hdr->sh_size;
8634                       else
8635                         {
8636                           if (dyn.d_un.d_val == 0
8637                               || hdr->sh_addr < dyn.d_un.d_val)
8638                             dyn.d_un.d_val = hdr->sh_addr;
8639                         }
8640                     }
8641                 }
8642               break;
8643             }
8644           bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
8645         }
8646     }
8647
8648   /* If we have created any dynamic sections, then output them.  */
8649   if (dynobj != NULL)
8650     {
8651       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
8652         goto error_return;
8653
8654       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
8655       if (info->warn_shared_textrel && info->shared)
8656         {
8657           bfd_byte *dyncon, *dynconend;
8658
8659           /* Fix up .dynamic entries.  */
8660           o = bfd_get_section_by_name (dynobj, ".dynamic");
8661           BFD_ASSERT (o != NULL);
8662
8663           dyncon = o->contents;
8664           dynconend = o->contents + o->size;
8665           for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
8666             {
8667               Elf_Internal_Dyn dyn;
8668
8669               bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
8670
8671               if (dyn.d_tag == DT_TEXTREL)
8672                 {
8673                   _bfd_error_handler
8674                     (_("warning: creating a DT_TEXTREL in a shared object."));
8675                   break;
8676                 }
8677             }
8678         }
8679
8680       for (o = dynobj->sections; o != NULL; o = o->next)
8681         {
8682           if ((o->flags & SEC_HAS_CONTENTS) == 0
8683               || o->size == 0
8684               || o->output_section == bfd_abs_section_ptr)
8685             continue;
8686           if ((o->flags & SEC_LINKER_CREATED) == 0)
8687             {
8688               /* At this point, we are only interested in sections
8689                  created by _bfd_elf_link_create_dynamic_sections.  */
8690               continue;
8691             }
8692           if (elf_hash_table (info)->stab_info.stabstr == o)
8693             continue;
8694           if (elf_hash_table (info)->eh_info.hdr_sec == o)
8695             continue;
8696           if ((elf_section_data (o->output_section)->this_hdr.sh_type
8697                != SHT_STRTAB)
8698               || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
8699             {
8700               if (! bfd_set_section_contents (abfd, o->output_section,
8701                                               o->contents,
8702                                               (file_ptr) o->output_offset,
8703                                               o->size))
8704                 goto error_return;
8705             }
8706           else
8707             {
8708               /* The contents of the .dynstr section are actually in a
8709                  stringtab.  */
8710               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
8711               if (bfd_seek (abfd, off, SEEK_SET) != 0
8712                   || ! _bfd_elf_strtab_emit (abfd,
8713                                              elf_hash_table (info)->dynstr))
8714                 goto error_return;
8715             }
8716         }
8717     }
8718
8719   if (info->relocatable)
8720     {
8721       bfd_boolean failed = FALSE;
8722
8723       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
8724       if (failed)
8725         goto error_return;
8726     }
8727
8728   /* If we have optimized stabs strings, output them.  */
8729   if (elf_hash_table (info)->stab_info.stabstr != NULL)
8730     {
8731       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
8732         goto error_return;
8733     }
8734
8735   if (info->eh_frame_hdr)
8736     {
8737       if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
8738         goto error_return;
8739     }
8740
8741   if (finfo.symstrtab != NULL)
8742     _bfd_stringtab_free (finfo.symstrtab);
8743   if (finfo.contents != NULL)
8744     free (finfo.contents);
8745   if (finfo.external_relocs != NULL)
8746     free (finfo.external_relocs);
8747   if (finfo.internal_relocs != NULL)
8748     free (finfo.internal_relocs);
8749   if (finfo.external_syms != NULL)
8750     free (finfo.external_syms);
8751   if (finfo.locsym_shndx != NULL)
8752     free (finfo.locsym_shndx);
8753   if (finfo.internal_syms != NULL)
8754     free (finfo.internal_syms);
8755   if (finfo.indices != NULL)
8756     free (finfo.indices);
8757   if (finfo.sections != NULL)
8758     free (finfo.sections);
8759   if (finfo.symbuf != NULL)
8760     free (finfo.symbuf);
8761   if (finfo.symshndxbuf != NULL)
8762     free (finfo.symshndxbuf);
8763   for (o = abfd->sections; o != NULL; o = o->next)
8764     {
8765       if ((o->flags & SEC_RELOC) != 0
8766           && elf_section_data (o)->rel_hashes != NULL)
8767         free (elf_section_data (o)->rel_hashes);
8768     }
8769
8770   elf_tdata (abfd)->linker = TRUE;
8771
8772   return TRUE;
8773
8774  error_return:
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   return FALSE;
8805 }
8806 \f
8807 /* Garbage collect unused sections.  */
8808
8809 /* The mark phase of garbage collection.  For a given section, mark
8810    it and any sections in this section's group, and all the sections
8811    which define symbols to which it refers.  */
8812
8813 typedef asection * (*gc_mark_hook_fn)
8814   (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
8815    struct elf_link_hash_entry *, Elf_Internal_Sym *);
8816
8817 bfd_boolean
8818 _bfd_elf_gc_mark (struct bfd_link_info *info,
8819                   asection *sec,
8820                   gc_mark_hook_fn gc_mark_hook)
8821 {
8822   bfd_boolean ret;
8823   bfd_boolean is_eh;
8824   asection *group_sec;
8825
8826   sec->gc_mark = 1;
8827
8828   /* Mark all the sections in the group.  */
8829   group_sec = elf_section_data (sec)->next_in_group;
8830   if (group_sec && !group_sec->gc_mark)
8831     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
8832       return FALSE;
8833
8834   /* Look through the section relocs.  */
8835   ret = TRUE;
8836   is_eh = strcmp (sec->name, ".eh_frame") == 0;
8837   if ((sec->flags & SEC_RELOC) != 0 && sec->reloc_count > 0)
8838     {
8839       Elf_Internal_Rela *relstart, *rel, *relend;
8840       Elf_Internal_Shdr *symtab_hdr;
8841       struct elf_link_hash_entry **sym_hashes;
8842       size_t nlocsyms;
8843       size_t extsymoff;
8844       bfd *input_bfd = sec->owner;
8845       const struct elf_backend_data *bed = get_elf_backend_data (input_bfd);
8846       Elf_Internal_Sym *isym = NULL;
8847       int r_sym_shift;
8848
8849       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
8850       sym_hashes = elf_sym_hashes (input_bfd);
8851
8852       /* Read the local symbols.  */
8853       if (elf_bad_symtab (input_bfd))
8854         {
8855           nlocsyms = symtab_hdr->sh_size / bed->s->sizeof_sym;
8856           extsymoff = 0;
8857         }
8858       else
8859         extsymoff = nlocsyms = symtab_hdr->sh_info;
8860
8861       isym = (Elf_Internal_Sym *) symtab_hdr->contents;
8862       if (isym == NULL && nlocsyms != 0)
8863         {
8864           isym = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, nlocsyms, 0,
8865                                        NULL, NULL, NULL);
8866           if (isym == NULL)
8867             return FALSE;
8868         }
8869
8870       /* Read the relocations.  */
8871       relstart = _bfd_elf_link_read_relocs (input_bfd, sec, NULL, NULL,
8872                                             info->keep_memory);
8873       if (relstart == NULL)
8874         {
8875           ret = FALSE;
8876           goto out1;
8877         }
8878       relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
8879
8880       if (bed->s->arch_size == 32)
8881         r_sym_shift = 8;
8882       else
8883         r_sym_shift = 32;
8884
8885       for (rel = relstart; rel < relend; rel++)
8886         {
8887           unsigned long r_symndx;
8888           asection *rsec;
8889           struct elf_link_hash_entry *h;
8890
8891           r_symndx = rel->r_info >> r_sym_shift;
8892           if (r_symndx == 0)
8893             continue;
8894
8895           if (r_symndx >= nlocsyms
8896               || ELF_ST_BIND (isym[r_symndx].st_info) != STB_LOCAL)
8897             {
8898               h = sym_hashes[r_symndx - extsymoff];
8899               while (h->root.type == bfd_link_hash_indirect
8900                      || h->root.type == bfd_link_hash_warning)
8901                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8902               rsec = (*gc_mark_hook) (sec, info, rel, h, NULL);
8903             }
8904           else
8905             {
8906               rsec = (*gc_mark_hook) (sec, info, rel, NULL, &isym[r_symndx]);
8907             }
8908
8909           if (rsec && !rsec->gc_mark)
8910             {
8911               if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour)
8912                 rsec->gc_mark = 1;
8913               else if (is_eh)
8914                 rsec->gc_mark_from_eh = 1;
8915               else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
8916                 {
8917                   ret = FALSE;
8918                   goto out2;
8919                 }
8920             }
8921         }
8922
8923     out2:
8924       if (elf_section_data (sec)->relocs != relstart)
8925         free (relstart);
8926     out1:
8927       if (isym != NULL && symtab_hdr->contents != (unsigned char *) isym)
8928         {
8929           if (! info->keep_memory)
8930             free (isym);
8931           else
8932             symtab_hdr->contents = (unsigned char *) isym;
8933         }
8934     }
8935
8936   return ret;
8937 }
8938
8939 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
8940
8941 struct elf_gc_sweep_symbol_info {
8942   struct bfd_link_info *info;
8943   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
8944                        bfd_boolean);
8945 };
8946
8947 static bfd_boolean
8948 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
8949 {
8950   if (h->root.type == bfd_link_hash_warning)
8951     h = (struct elf_link_hash_entry *) h->root.u.i.link;
8952
8953   if ((h->root.type == bfd_link_hash_defined
8954        || h->root.type == bfd_link_hash_defweak)
8955       && !h->root.u.def.section->gc_mark
8956       && !(h->root.u.def.section->owner->flags & DYNAMIC))
8957     {
8958       struct elf_gc_sweep_symbol_info *inf = data;
8959       (*inf->hide_symbol) (inf->info, h, TRUE);
8960     }
8961
8962   return TRUE;
8963 }
8964
8965 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
8966
8967 typedef bfd_boolean (*gc_sweep_hook_fn)
8968   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
8969
8970 static bfd_boolean
8971 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
8972 {
8973   bfd *sub;
8974   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8975   gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook;
8976   unsigned long section_sym_count;
8977   struct elf_gc_sweep_symbol_info sweep_info;
8978
8979   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
8980     {
8981       asection *o;
8982
8983       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
8984         continue;
8985
8986       for (o = sub->sections; o != NULL; o = o->next)
8987         {
8988           /* Keep debug and special sections.  */
8989           if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0
8990               || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
8991             o->gc_mark = 1;
8992
8993           if (o->gc_mark)
8994             continue;
8995
8996           /* Skip sweeping sections already excluded.  */
8997           if (o->flags & SEC_EXCLUDE)
8998             continue;
8999
9000           /* Since this is early in the link process, it is simple
9001              to remove a section from the output.  */
9002           o->flags |= SEC_EXCLUDE;
9003
9004           /* But we also have to update some of the relocation
9005              info we collected before.  */
9006           if (gc_sweep_hook
9007               && (o->flags & SEC_RELOC) != 0
9008               && o->reloc_count > 0
9009               && !bfd_is_abs_section (o->output_section))
9010             {
9011               Elf_Internal_Rela *internal_relocs;
9012               bfd_boolean r;
9013
9014               internal_relocs
9015                 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
9016                                              info->keep_memory);
9017               if (internal_relocs == NULL)
9018                 return FALSE;
9019
9020               r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
9021
9022               if (elf_section_data (o)->relocs != internal_relocs)
9023                 free (internal_relocs);
9024
9025               if (!r)
9026                 return FALSE;
9027             }
9028         }
9029     }
9030
9031   /* Remove the symbols that were in the swept sections from the dynamic
9032      symbol table.  GCFIXME: Anyone know how to get them out of the
9033      static symbol table as well?  */
9034   sweep_info.info = info;
9035   sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
9036   elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
9037                           &sweep_info);
9038
9039   _bfd_elf_link_renumber_dynsyms (abfd, info, &section_sym_count);
9040   return TRUE;
9041 }
9042
9043 /* Propagate collected vtable information.  This is called through
9044    elf_link_hash_traverse.  */
9045
9046 static bfd_boolean
9047 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
9048 {
9049   if (h->root.type == bfd_link_hash_warning)
9050     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9051
9052   /* Those that are not vtables.  */
9053   if (h->vtable == NULL || h->vtable->parent == NULL)
9054     return TRUE;
9055
9056   /* Those vtables that do not have parents, we cannot merge.  */
9057   if (h->vtable->parent == (struct elf_link_hash_entry *) -1)
9058     return TRUE;
9059
9060   /* If we've already been done, exit.  */
9061   if (h->vtable->used && h->vtable->used[-1])
9062     return TRUE;
9063
9064   /* Make sure the parent's table is up to date.  */
9065   elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp);
9066
9067   if (h->vtable->used == NULL)
9068     {
9069       /* None of this table's entries were referenced.  Re-use the
9070          parent's table.  */
9071       h->vtable->used = h->vtable->parent->vtable->used;
9072       h->vtable->size = h->vtable->parent->vtable->size;
9073     }
9074   else
9075     {
9076       size_t n;
9077       bfd_boolean *cu, *pu;
9078
9079       /* Or the parent's entries into ours.  */
9080       cu = h->vtable->used;
9081       cu[-1] = TRUE;
9082       pu = h->vtable->parent->vtable->used;
9083       if (pu != NULL)
9084         {
9085           const struct elf_backend_data *bed;
9086           unsigned int log_file_align;
9087
9088           bed = get_elf_backend_data (h->root.u.def.section->owner);
9089           log_file_align = bed->s->log_file_align;
9090           n = h->vtable->parent->vtable->size >> log_file_align;
9091           while (n--)
9092             {
9093               if (*pu)
9094                 *cu = TRUE;
9095               pu++;
9096               cu++;
9097             }
9098         }
9099     }
9100
9101   return TRUE;
9102 }
9103
9104 static bfd_boolean
9105 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
9106 {
9107   asection *sec;
9108   bfd_vma hstart, hend;
9109   Elf_Internal_Rela *relstart, *relend, *rel;
9110   const struct elf_backend_data *bed;
9111   unsigned int log_file_align;
9112
9113   if (h->root.type == bfd_link_hash_warning)
9114     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9115
9116   /* Take care of both those symbols that do not describe vtables as
9117      well as those that are not loaded.  */
9118   if (h->vtable == NULL || h->vtable->parent == NULL)
9119     return TRUE;
9120
9121   BFD_ASSERT (h->root.type == bfd_link_hash_defined
9122               || h->root.type == bfd_link_hash_defweak);
9123
9124   sec = h->root.u.def.section;
9125   hstart = h->root.u.def.value;
9126   hend = hstart + h->size;
9127
9128   relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
9129   if (!relstart)
9130     return *(bfd_boolean *) okp = FALSE;
9131   bed = get_elf_backend_data (sec->owner);
9132   log_file_align = bed->s->log_file_align;
9133
9134   relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
9135
9136   for (rel = relstart; rel < relend; ++rel)
9137     if (rel->r_offset >= hstart && rel->r_offset < hend)
9138       {
9139         /* If the entry is in use, do nothing.  */
9140         if (h->vtable->used
9141             && (rel->r_offset - hstart) < h->vtable->size)
9142           {
9143             bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
9144             if (h->vtable->used[entry])
9145               continue;
9146           }
9147         /* Otherwise, kill it.  */
9148         rel->r_offset = rel->r_info = rel->r_addend = 0;
9149       }
9150
9151   return TRUE;
9152 }
9153
9154 /* Mark sections containing dynamically referenced symbols.  When
9155    building shared libraries, we must assume that any visible symbol is
9156    referenced.  */
9157
9158 bfd_boolean
9159 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
9160 {
9161   struct bfd_link_info *info = (struct bfd_link_info *) inf;
9162
9163   if (h->root.type == bfd_link_hash_warning)
9164     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9165
9166   if ((h->root.type == bfd_link_hash_defined
9167        || h->root.type == bfd_link_hash_defweak)
9168       && (h->ref_dynamic
9169           || (!info->executable
9170               && h->def_regular
9171               && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
9172               && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN)))
9173     h->root.u.def.section->flags |= SEC_KEEP;
9174
9175   return TRUE;
9176 }
9177
9178 /* Do mark and sweep of unused sections.  */
9179
9180 bfd_boolean
9181 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
9182 {
9183   bfd_boolean ok = TRUE;
9184   bfd *sub;
9185   asection * (*gc_mark_hook)
9186     (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
9187      struct elf_link_hash_entry *h, Elf_Internal_Sym *);
9188   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9189
9190   if (!bed->can_gc_sections
9191       || info->relocatable
9192       || info->emitrelocations
9193       || !is_elf_hash_table (info->hash))
9194     {
9195       (*_bfd_error_handler)(_("Warning: gc-sections option ignored"));
9196       return TRUE;
9197     }
9198
9199   /* Apply transitive closure to the vtable entry usage info.  */
9200   elf_link_hash_traverse (elf_hash_table (info),
9201                           elf_gc_propagate_vtable_entries_used,
9202                           &ok);
9203   if (!ok)
9204     return FALSE;
9205
9206   /* Kill the vtable relocations that were not used.  */
9207   elf_link_hash_traverse (elf_hash_table (info),
9208                           elf_gc_smash_unused_vtentry_relocs,
9209                           &ok);
9210   if (!ok)
9211     return FALSE;
9212
9213   /* Mark dynamically referenced symbols.  */
9214   if (elf_hash_table (info)->dynamic_sections_created)
9215     elf_link_hash_traverse (elf_hash_table (info),
9216                             bed->gc_mark_dynamic_ref,
9217                             info);
9218
9219   /* Grovel through relocs to find out who stays ...  */
9220   gc_mark_hook = bed->gc_mark_hook;
9221   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
9222     {
9223       asection *o;
9224
9225       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
9226         continue;
9227
9228       for (o = sub->sections; o != NULL; o = o->next)
9229         if ((o->flags & SEC_KEEP) != 0 && !o->gc_mark)
9230           if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
9231             return FALSE;
9232     }
9233
9234   /* ... again for sections marked from eh_frame.  */
9235   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
9236     {
9237       asection *o;
9238
9239       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
9240         continue;
9241
9242       /* Keep .gcc_except_table.* if the associated .text.* is
9243          marked.  This isn't very nice, but the proper solution,
9244          splitting .eh_frame up and using comdat doesn't pan out
9245          easily due to needing special relocs to handle the
9246          difference of two symbols in separate sections.
9247          Don't keep code sections referenced by .eh_frame.  */
9248       for (o = sub->sections; o != NULL; o = o->next)
9249         if (!o->gc_mark && o->gc_mark_from_eh && (o->flags & SEC_CODE) == 0)
9250           {
9251             if (strncmp (o->name, ".gcc_except_table.", 18) == 0)
9252               {
9253                 unsigned long len;
9254                 char *fn_name;
9255                 asection *fn_text;
9256
9257                 len = strlen (o->name + 18) + 1;
9258                 fn_name = bfd_malloc (len + 6);
9259                 if (fn_name == NULL)
9260                   return FALSE;
9261                 memcpy (fn_name, ".text.", 6);
9262                 memcpy (fn_name + 6, o->name + 18, len);
9263                 fn_text = bfd_get_section_by_name (sub, fn_name);
9264                 free (fn_name);
9265                 if (fn_text == NULL || !fn_text->gc_mark)
9266                   continue;
9267               }
9268
9269             /* If not using specially named exception table section,
9270                then keep whatever we are using.  */
9271             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
9272               return FALSE;
9273           }
9274     }
9275
9276   /* ... and mark SEC_EXCLUDE for those that go.  */
9277   return elf_gc_sweep (abfd, info);
9278 }
9279 \f
9280 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
9281
9282 bfd_boolean
9283 bfd_elf_gc_record_vtinherit (bfd *abfd,
9284                              asection *sec,
9285                              struct elf_link_hash_entry *h,
9286                              bfd_vma offset)
9287 {
9288   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
9289   struct elf_link_hash_entry **search, *child;
9290   bfd_size_type extsymcount;
9291   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9292
9293   /* The sh_info field of the symtab header tells us where the
9294      external symbols start.  We don't care about the local symbols at
9295      this point.  */
9296   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
9297   if (!elf_bad_symtab (abfd))
9298     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
9299
9300   sym_hashes = elf_sym_hashes (abfd);
9301   sym_hashes_end = sym_hashes + extsymcount;
9302
9303   /* Hunt down the child symbol, which is in this section at the same
9304      offset as the relocation.  */
9305   for (search = sym_hashes; search != sym_hashes_end; ++search)
9306     {
9307       if ((child = *search) != NULL
9308           && (child->root.type == bfd_link_hash_defined
9309               || child->root.type == bfd_link_hash_defweak)
9310           && child->root.u.def.section == sec
9311           && child->root.u.def.value == offset)
9312         goto win;
9313     }
9314
9315   (*_bfd_error_handler) ("%B: %A+%lu: No symbol found for INHERIT",
9316                          abfd, sec, (unsigned long) offset);
9317   bfd_set_error (bfd_error_invalid_operation);
9318   return FALSE;
9319
9320  win:
9321   if (!child->vtable)
9322     {
9323       child->vtable = bfd_zalloc (abfd, sizeof (*child->vtable));
9324       if (!child->vtable)
9325         return FALSE;
9326     }
9327   if (!h)
9328     {
9329       /* This *should* only be the absolute section.  It could potentially
9330          be that someone has defined a non-global vtable though, which
9331          would be bad.  It isn't worth paging in the local symbols to be
9332          sure though; that case should simply be handled by the assembler.  */
9333
9334       child->vtable->parent = (struct elf_link_hash_entry *) -1;
9335     }
9336   else
9337     child->vtable->parent = h;
9338
9339   return TRUE;
9340 }
9341
9342 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
9343
9344 bfd_boolean
9345 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
9346                            asection *sec ATTRIBUTE_UNUSED,
9347                            struct elf_link_hash_entry *h,
9348                            bfd_vma addend)
9349 {
9350   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9351   unsigned int log_file_align = bed->s->log_file_align;
9352
9353   if (!h->vtable)
9354     {
9355       h->vtable = bfd_zalloc (abfd, sizeof (*h->vtable));
9356       if (!h->vtable)
9357         return FALSE;
9358     }
9359
9360   if (addend >= h->vtable->size)
9361     {
9362       size_t size, bytes, file_align;
9363       bfd_boolean *ptr = h->vtable->used;
9364
9365       /* While the symbol is undefined, we have to be prepared to handle
9366          a zero size.  */
9367       file_align = 1 << log_file_align;
9368       if (h->root.type == bfd_link_hash_undefined)
9369         size = addend + file_align;
9370       else
9371         {
9372           size = h->size;
9373           if (addend >= size)
9374             {
9375               /* Oops!  We've got a reference past the defined end of
9376                  the table.  This is probably a bug -- shall we warn?  */
9377               size = addend + file_align;
9378             }
9379         }
9380       size = (size + file_align - 1) & -file_align;
9381
9382       /* Allocate one extra entry for use as a "done" flag for the
9383          consolidation pass.  */
9384       bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
9385
9386       if (ptr)
9387         {
9388           ptr = bfd_realloc (ptr - 1, bytes);
9389
9390           if (ptr != NULL)
9391             {
9392               size_t oldbytes;
9393
9394               oldbytes = (((h->vtable->size >> log_file_align) + 1)
9395                           * sizeof (bfd_boolean));
9396               memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
9397             }
9398         }
9399       else
9400         ptr = bfd_zmalloc (bytes);
9401
9402       if (ptr == NULL)
9403         return FALSE;
9404
9405       /* And arrange for that done flag to be at index -1.  */
9406       h->vtable->used = ptr + 1;
9407       h->vtable->size = size;
9408     }
9409
9410   h->vtable->used[addend >> log_file_align] = TRUE;
9411
9412   return TRUE;
9413 }
9414
9415 struct alloc_got_off_arg {
9416   bfd_vma gotoff;
9417   unsigned int got_elt_size;
9418 };
9419
9420 /* We need a special top-level link routine to convert got reference counts
9421    to real got offsets.  */
9422
9423 static bfd_boolean
9424 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
9425 {
9426   struct alloc_got_off_arg *gofarg = arg;
9427
9428   if (h->root.type == bfd_link_hash_warning)
9429     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9430
9431   if (h->got.refcount > 0)
9432     {
9433       h->got.offset = gofarg->gotoff;
9434       gofarg->gotoff += gofarg->got_elt_size;
9435     }
9436   else
9437     h->got.offset = (bfd_vma) -1;
9438
9439   return TRUE;
9440 }
9441
9442 /* And an accompanying bit to work out final got entry offsets once
9443    we're done.  Should be called from final_link.  */
9444
9445 bfd_boolean
9446 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
9447                                         struct bfd_link_info *info)
9448 {
9449   bfd *i;
9450   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9451   bfd_vma gotoff;
9452   unsigned int got_elt_size = bed->s->arch_size / 8;
9453   struct alloc_got_off_arg gofarg;
9454
9455   if (! is_elf_hash_table (info->hash))
9456     return FALSE;
9457
9458   /* The GOT offset is relative to the .got section, but the GOT header is
9459      put into the .got.plt section, if the backend uses it.  */
9460   if (bed->want_got_plt)
9461     gotoff = 0;
9462   else
9463     gotoff = bed->got_header_size;
9464
9465   /* Do the local .got entries first.  */
9466   for (i = info->input_bfds; i; i = i->link_next)
9467     {
9468       bfd_signed_vma *local_got;
9469       bfd_size_type j, locsymcount;
9470       Elf_Internal_Shdr *symtab_hdr;
9471
9472       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
9473         continue;
9474
9475       local_got = elf_local_got_refcounts (i);
9476       if (!local_got)
9477         continue;
9478
9479       symtab_hdr = &elf_tdata (i)->symtab_hdr;
9480       if (elf_bad_symtab (i))
9481         locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9482       else
9483         locsymcount = symtab_hdr->sh_info;
9484
9485       for (j = 0; j < locsymcount; ++j)
9486         {
9487           if (local_got[j] > 0)
9488             {
9489               local_got[j] = gotoff;
9490               gotoff += got_elt_size;
9491             }
9492           else
9493             local_got[j] = (bfd_vma) -1;
9494         }
9495     }
9496
9497   /* Then the global .got entries.  .plt refcounts are handled by
9498      adjust_dynamic_symbol  */
9499   gofarg.gotoff = gotoff;
9500   gofarg.got_elt_size = got_elt_size;
9501   elf_link_hash_traverse (elf_hash_table (info),
9502                           elf_gc_allocate_got_offsets,
9503                           &gofarg);
9504   return TRUE;
9505 }
9506
9507 /* Many folk need no more in the way of final link than this, once
9508    got entry reference counting is enabled.  */
9509
9510 bfd_boolean
9511 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
9512 {
9513   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
9514     return FALSE;
9515
9516   /* Invoke the regular ELF backend linker to do all the work.  */
9517   return bfd_elf_final_link (abfd, info);
9518 }
9519
9520 bfd_boolean
9521 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
9522 {
9523   struct elf_reloc_cookie *rcookie = cookie;
9524
9525   if (rcookie->bad_symtab)
9526     rcookie->rel = rcookie->rels;
9527
9528   for (; rcookie->rel < rcookie->relend; rcookie->rel++)
9529     {
9530       unsigned long r_symndx;
9531
9532       if (! rcookie->bad_symtab)
9533         if (rcookie->rel->r_offset > offset)
9534           return FALSE;
9535       if (rcookie->rel->r_offset != offset)
9536         continue;
9537
9538       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
9539       if (r_symndx == SHN_UNDEF)
9540         return TRUE;
9541
9542       if (r_symndx >= rcookie->locsymcount
9543           || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
9544         {
9545           struct elf_link_hash_entry *h;
9546
9547           h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
9548
9549           while (h->root.type == bfd_link_hash_indirect
9550                  || h->root.type == bfd_link_hash_warning)
9551             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9552
9553           if ((h->root.type == bfd_link_hash_defined
9554                || h->root.type == bfd_link_hash_defweak)
9555               && elf_discarded_section (h->root.u.def.section))
9556             return TRUE;
9557           else
9558             return FALSE;
9559         }
9560       else
9561         {
9562           /* It's not a relocation against a global symbol,
9563              but it could be a relocation against a local
9564              symbol for a discarded section.  */
9565           asection *isec;
9566           Elf_Internal_Sym *isym;
9567
9568           /* Need to: get the symbol; get the section.  */
9569           isym = &rcookie->locsyms[r_symndx];
9570           if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE)
9571             {
9572               isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
9573               if (isec != NULL && elf_discarded_section (isec))
9574                 return TRUE;
9575             }
9576         }
9577       return FALSE;
9578     }
9579   return FALSE;
9580 }
9581
9582 /* Discard unneeded references to discarded sections.
9583    Returns TRUE if any section's size was changed.  */
9584 /* This function assumes that the relocations are in sorted order,
9585    which is true for all known assemblers.  */
9586
9587 bfd_boolean
9588 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
9589 {
9590   struct elf_reloc_cookie cookie;
9591   asection *stab, *eh;
9592   Elf_Internal_Shdr *symtab_hdr;
9593   const struct elf_backend_data *bed;
9594   bfd *abfd;
9595   unsigned int count;
9596   bfd_boolean ret = FALSE;
9597
9598   if (info->traditional_format
9599       || !is_elf_hash_table (info->hash))
9600     return FALSE;
9601
9602   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
9603     {
9604       if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
9605         continue;
9606
9607       bed = get_elf_backend_data (abfd);
9608
9609       if ((abfd->flags & DYNAMIC) != 0)
9610         continue;
9611
9612       eh = bfd_get_section_by_name (abfd, ".eh_frame");
9613       if (info->relocatable
9614           || (eh != NULL
9615               && (eh->size == 0
9616                   || bfd_is_abs_section (eh->output_section))))
9617         eh = NULL;
9618
9619       stab = bfd_get_section_by_name (abfd, ".stab");
9620       if (stab != NULL
9621           && (stab->size == 0
9622               || bfd_is_abs_section (stab->output_section)
9623               || stab->sec_info_type != ELF_INFO_TYPE_STABS))
9624         stab = NULL;
9625
9626       if (stab == NULL
9627           && eh == NULL
9628           && bed->elf_backend_discard_info == NULL)
9629         continue;
9630
9631       symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
9632       cookie.abfd = abfd;
9633       cookie.sym_hashes = elf_sym_hashes (abfd);
9634       cookie.bad_symtab = elf_bad_symtab (abfd);
9635       if (cookie.bad_symtab)
9636         {
9637           cookie.locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9638           cookie.extsymoff = 0;
9639         }
9640       else
9641         {
9642           cookie.locsymcount = symtab_hdr->sh_info;
9643           cookie.extsymoff = symtab_hdr->sh_info;
9644         }
9645
9646       if (bed->s->arch_size == 32)
9647         cookie.r_sym_shift = 8;
9648       else
9649         cookie.r_sym_shift = 32;
9650
9651       cookie.locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
9652       if (cookie.locsyms == NULL && cookie.locsymcount != 0)
9653         {
9654           cookie.locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
9655                                                  cookie.locsymcount, 0,
9656                                                  NULL, NULL, NULL);
9657           if (cookie.locsyms == NULL)
9658             return FALSE;
9659         }
9660
9661       if (stab != NULL)
9662         {
9663           cookie.rels = NULL;
9664           count = stab->reloc_count;
9665           if (count != 0)
9666             cookie.rels = _bfd_elf_link_read_relocs (abfd, stab, NULL, NULL,
9667                                                      info->keep_memory);
9668           if (cookie.rels != NULL)
9669             {
9670               cookie.rel = cookie.rels;
9671               cookie.relend = cookie.rels;
9672               cookie.relend += count * bed->s->int_rels_per_ext_rel;
9673               if (_bfd_discard_section_stabs (abfd, stab,
9674                                               elf_section_data (stab)->sec_info,
9675                                               bfd_elf_reloc_symbol_deleted_p,
9676                                               &cookie))
9677                 ret = TRUE;
9678               if (elf_section_data (stab)->relocs != cookie.rels)
9679                 free (cookie.rels);
9680             }
9681         }
9682
9683       if (eh != NULL)
9684         {
9685           cookie.rels = NULL;
9686           count = eh->reloc_count;
9687           if (count != 0)
9688             cookie.rels = _bfd_elf_link_read_relocs (abfd, eh, NULL, NULL,
9689                                                      info->keep_memory);
9690           cookie.rel = cookie.rels;
9691           cookie.relend = cookie.rels;
9692           if (cookie.rels != NULL)
9693             cookie.relend += count * bed->s->int_rels_per_ext_rel;
9694
9695           if (_bfd_elf_discard_section_eh_frame (abfd, info, eh,
9696                                                  bfd_elf_reloc_symbol_deleted_p,
9697                                                  &cookie))
9698             ret = TRUE;
9699
9700           if (cookie.rels != NULL
9701               && elf_section_data (eh)->relocs != cookie.rels)
9702             free (cookie.rels);
9703         }
9704
9705       if (bed->elf_backend_discard_info != NULL
9706           && (*bed->elf_backend_discard_info) (abfd, &cookie, info))
9707         ret = TRUE;
9708
9709       if (cookie.locsyms != NULL
9710           && symtab_hdr->contents != (unsigned char *) cookie.locsyms)
9711         {
9712           if (! info->keep_memory)
9713             free (cookie.locsyms);
9714           else
9715             symtab_hdr->contents = (unsigned char *) cookie.locsyms;
9716         }
9717     }
9718
9719   if (info->eh_frame_hdr
9720       && !info->relocatable
9721       && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
9722     ret = TRUE;
9723
9724   return ret;
9725 }
9726
9727 void
9728 _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section * sec)
9729 {
9730   flagword flags;
9731   const char *name, *p;
9732   struct bfd_section_already_linked *l;
9733   struct bfd_section_already_linked_hash_entry *already_linked_list;
9734   asection *group;
9735
9736   /* A single member comdat group section may be discarded by a
9737      linkonce section. See below.  */
9738   if (sec->output_section == bfd_abs_section_ptr)
9739     return;
9740
9741   flags = sec->flags;
9742
9743   /* Check if it belongs to a section group.  */
9744   group = elf_sec_group (sec);
9745
9746   /* Return if it isn't a linkonce section nor a member of a group.  A
9747      comdat group section also has SEC_LINK_ONCE set.  */
9748   if ((flags & SEC_LINK_ONCE) == 0 && group == NULL)
9749     return;
9750
9751   if (group)
9752     {
9753       /* If this is the member of a single member comdat group, check if
9754          the group should be discarded.  */
9755       if (elf_next_in_group (sec) == sec
9756           && (group->flags & SEC_LINK_ONCE) != 0)
9757         sec = group;
9758       else
9759         return;
9760     }
9761
9762   /* FIXME: When doing a relocatable link, we may have trouble
9763      copying relocations in other sections that refer to local symbols
9764      in the section being discarded.  Those relocations will have to
9765      be converted somehow; as of this writing I'm not sure that any of
9766      the backends handle that correctly.
9767
9768      It is tempting to instead not discard link once sections when
9769      doing a relocatable link (technically, they should be discarded
9770      whenever we are building constructors).  However, that fails,
9771      because the linker winds up combining all the link once sections
9772      into a single large link once section, which defeats the purpose
9773      of having link once sections in the first place.
9774
9775      Also, not merging link once sections in a relocatable link
9776      causes trouble for MIPS ELF, which relies on link once semantics
9777      to handle the .reginfo section correctly.  */
9778
9779   name = bfd_get_section_name (abfd, sec);
9780
9781   if (strncmp (name, ".gnu.linkonce.", sizeof (".gnu.linkonce.") - 1) == 0
9782       && (p = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
9783     p++;
9784   else
9785     p = name;
9786
9787   already_linked_list = bfd_section_already_linked_table_lookup (p);
9788
9789   for (l = already_linked_list->entry; l != NULL; l = l->next)
9790     {
9791       /* We may have 3 different sections on the list: group section,
9792          comdat section and linkonce section. SEC may be a linkonce or
9793          group section. We match a group section with a group section,
9794          a linkonce section with a linkonce section, and ignore comdat
9795          section.  */
9796       if ((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
9797           && strcmp (name, l->sec->name) == 0
9798           && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL)
9799         {
9800           /* The section has already been linked.  See if we should
9801              issue a warning.  */
9802           switch (flags & SEC_LINK_DUPLICATES)
9803             {
9804             default:
9805               abort ();
9806
9807             case SEC_LINK_DUPLICATES_DISCARD:
9808               break;
9809
9810             case SEC_LINK_DUPLICATES_ONE_ONLY:
9811               (*_bfd_error_handler)
9812                 (_("%B: ignoring duplicate section `%A'"),
9813                  abfd, sec);
9814               break;
9815
9816             case SEC_LINK_DUPLICATES_SAME_SIZE:
9817               if (sec->size != l->sec->size)
9818                 (*_bfd_error_handler)
9819                   (_("%B: duplicate section `%A' has different size"),
9820                    abfd, sec);
9821               break;
9822
9823             case SEC_LINK_DUPLICATES_SAME_CONTENTS:
9824               if (sec->size != l->sec->size)
9825                 (*_bfd_error_handler)
9826                   (_("%B: duplicate section `%A' has different size"),
9827                    abfd, sec);
9828               else if (sec->size != 0)
9829                 {
9830                   bfd_byte *sec_contents, *l_sec_contents;
9831
9832                   if (!bfd_malloc_and_get_section (abfd, sec, &sec_contents))
9833                     (*_bfd_error_handler)
9834                       (_("%B: warning: could not read contents of section `%A'"),
9835                        abfd, sec);
9836                   else if (!bfd_malloc_and_get_section (l->sec->owner, l->sec,
9837                                                         &l_sec_contents))
9838                     (*_bfd_error_handler)
9839                       (_("%B: warning: could not read contents of section `%A'"),
9840                        l->sec->owner, l->sec);
9841                   else if (memcmp (sec_contents, l_sec_contents, sec->size) != 0)
9842                     (*_bfd_error_handler)
9843                       (_("%B: warning: duplicate section `%A' has different contents"),
9844                        abfd, sec);
9845
9846                   if (sec_contents)
9847                     free (sec_contents);
9848                   if (l_sec_contents)
9849                     free (l_sec_contents);
9850                 }
9851               break;
9852             }
9853
9854           /* Set the output_section field so that lang_add_section
9855              does not create a lang_input_section structure for this
9856              section.  Since there might be a symbol in the section
9857              being discarded, we must retain a pointer to the section
9858              which we are really going to use.  */
9859           sec->output_section = bfd_abs_section_ptr;
9860           sec->kept_section = l->sec;
9861
9862           if (flags & SEC_GROUP)
9863             {
9864               asection *first = elf_next_in_group (sec);
9865               asection *s = first;
9866
9867               while (s != NULL)
9868                 {
9869                   s->output_section = bfd_abs_section_ptr;
9870                   /* Record which group discards it.  */
9871                   s->kept_section = l->sec;
9872                   s = elf_next_in_group (s);
9873                   /* These lists are circular.  */
9874                   if (s == first)
9875                     break;
9876                 }
9877             }
9878
9879           return;
9880         }
9881     }
9882
9883   if (group)
9884     {
9885       /* If this is the member of a single member comdat group and the
9886          group hasn't be discarded, we check if it matches a linkonce
9887          section. We only record the discarded comdat group. Otherwise
9888          the undiscarded group will be discarded incorrectly later since
9889          itself has been recorded.  */
9890       for (l = already_linked_list->entry; l != NULL; l = l->next)
9891         if ((l->sec->flags & SEC_GROUP) == 0
9892             && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL
9893             && bfd_elf_match_symbols_in_sections (l->sec,
9894                                                   elf_next_in_group (sec)))
9895           {
9896             elf_next_in_group (sec)->output_section = bfd_abs_section_ptr;
9897             elf_next_in_group (sec)->kept_section = l->sec;
9898             group->output_section = bfd_abs_section_ptr;
9899             break;
9900           }
9901       if (l == NULL)
9902         return;
9903     }
9904   else
9905     /* There is no direct match. But for linkonce section, we should
9906        check if there is a match with comdat group member. We always
9907        record the linkonce section, discarded or not.  */
9908     for (l = already_linked_list->entry; l != NULL; l = l->next)
9909       if (l->sec->flags & SEC_GROUP)
9910         {
9911           asection *first = elf_next_in_group (l->sec);
9912
9913           if (first != NULL
9914               && elf_next_in_group (first) == first
9915               && bfd_elf_match_symbols_in_sections (first, sec))
9916             {
9917               sec->output_section = bfd_abs_section_ptr;
9918               sec->kept_section = l->sec;
9919               break;
9920             }
9921         }
9922
9923   /* This is the first section with this name.  Record it.  */
9924   bfd_section_already_linked_table_insert (already_linked_list, sec);
9925 }
9926
9927 bfd_boolean
9928 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
9929 {
9930   return sym->st_shndx == SHN_COMMON;
9931 }
9932
9933 unsigned int
9934 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
9935 {
9936   return SHN_COMMON;
9937 }
9938
9939 asection *
9940 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
9941 {
9942   return bfd_com_section_ptr;
9943 }