xref: /dragonfly/contrib/gdb-7/bfd/elflink.c (revision 783d47c4)
1 /* ELF linking support for BFD.
2    Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
3    2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5 
6    This file is part of BFD, the Binary File Descriptor library.
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12 
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21    MA 02110-1301, USA.  */
22 
23 #include "sysdep.h"
24 #include "bfd.h"
25 #include "bfdlink.h"
26 #include "libbfd.h"
27 #define ARCH_SIZE 0
28 #include "elf-bfd.h"
29 #include "safe-ctype.h"
30 #include "libiberty.h"
31 #include "objalloc.h"
32 
33 /* This struct is used to pass information to routines called via
34    elf_link_hash_traverse which must return failure.  */
35 
36 struct elf_info_failed
37 {
38   struct bfd_link_info *info;
39   struct bfd_elf_version_tree *verdefs;
40   bfd_boolean failed;
41 };
42 
43 /* This structure is used to pass information to
44    _bfd_elf_link_find_version_dependencies.  */
45 
46 struct elf_find_verdep_info
47 {
48   /* General link information.  */
49   struct bfd_link_info *info;
50   /* The number of dependencies.  */
51   unsigned int vers;
52   /* Whether we had a failure.  */
53   bfd_boolean failed;
54 };
55 
56 static bfd_boolean _bfd_elf_fix_symbol_flags
57   (struct elf_link_hash_entry *, struct elf_info_failed *);
58 
59 /* Define a symbol in a dynamic linkage section.  */
60 
61 struct elf_link_hash_entry *
62 _bfd_elf_define_linkage_sym (bfd *abfd,
63 			     struct bfd_link_info *info,
64 			     asection *sec,
65 			     const char *name)
66 {
67   struct elf_link_hash_entry *h;
68   struct bfd_link_hash_entry *bh;
69   const struct elf_backend_data *bed;
70 
71   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
72   if (h != NULL)
73     {
74       /* Zap symbol defined in an as-needed lib that wasn't linked.
75 	 This is a symptom of a larger problem:  Absolute symbols
76 	 defined in shared libraries can't be overridden, because we
77 	 lose the link to the bfd which is via the symbol section.  */
78       h->root.type = bfd_link_hash_new;
79     }
80 
81   bh = &h->root;
82   if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL,
83 					 sec, 0, NULL, FALSE,
84 					 get_elf_backend_data (abfd)->collect,
85 					 &bh))
86     return NULL;
87   h = (struct elf_link_hash_entry *) bh;
88   h->def_regular = 1;
89   h->non_elf = 0;
90   h->type = STT_OBJECT;
91   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
92 
93   bed = get_elf_backend_data (abfd);
94   (*bed->elf_backend_hide_symbol) (info, h, TRUE);
95   return h;
96 }
97 
98 bfd_boolean
99 _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
100 {
101   flagword flags;
102   asection *s;
103   struct elf_link_hash_entry *h;
104   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
105   struct elf_link_hash_table *htab = elf_hash_table (info);
106 
107   /* This function may be called more than once.  */
108   s = bfd_get_section_by_name (abfd, ".got");
109   if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
110     return TRUE;
111 
112   flags = bed->dynamic_sec_flags;
113 
114   s = bfd_make_section_with_flags (abfd,
115 				   (bed->rela_plts_and_copies_p
116 				    ? ".rela.got" : ".rel.got"),
117 				   (bed->dynamic_sec_flags
118 				    | SEC_READONLY));
119   if (s == NULL
120       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
121     return FALSE;
122   htab->srelgot = s;
123 
124   s = bfd_make_section_with_flags (abfd, ".got", flags);
125   if (s == NULL
126       || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
127     return FALSE;
128   htab->sgot = s;
129 
130   if (bed->want_got_plt)
131     {
132       s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
133       if (s == NULL
134 	  || !bfd_set_section_alignment (abfd, s,
135 					 bed->s->log_file_align))
136 	return FALSE;
137       htab->sgotplt = s;
138     }
139 
140   /* The first bit of the global offset table is the header.  */
141   s->size += bed->got_header_size;
142 
143   if (bed->want_got_sym)
144     {
145       /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
146 	 (or .got.plt) section.  We don't do this in the linker script
147 	 because we don't want to define the symbol if we are not creating
148 	 a global offset table.  */
149       h = _bfd_elf_define_linkage_sym (abfd, info, s,
150 				       "_GLOBAL_OFFSET_TABLE_");
151       elf_hash_table (info)->hgot = h;
152       if (h == NULL)
153 	return FALSE;
154     }
155 
156   return TRUE;
157 }
158 
159 /* Create a strtab to hold the dynamic symbol names.  */
160 static bfd_boolean
161 _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info)
162 {
163   struct elf_link_hash_table *hash_table;
164 
165   hash_table = elf_hash_table (info);
166   if (hash_table->dynobj == NULL)
167     hash_table->dynobj = abfd;
168 
169   if (hash_table->dynstr == NULL)
170     {
171       hash_table->dynstr = _bfd_elf_strtab_init ();
172       if (hash_table->dynstr == NULL)
173 	return FALSE;
174     }
175   return TRUE;
176 }
177 
178 /* Create some sections which will be filled in with dynamic linking
179    information.  ABFD is an input file which requires dynamic sections
180    to be created.  The dynamic sections take up virtual memory space
181    when the final executable is run, so we need to create them before
182    addresses are assigned to the output sections.  We work out the
183    actual contents and size of these sections later.  */
184 
185 bfd_boolean
186 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
187 {
188   flagword flags;
189   asection *s;
190   const struct elf_backend_data *bed;
191 
192   if (! is_elf_hash_table (info->hash))
193     return FALSE;
194 
195   if (elf_hash_table (info)->dynamic_sections_created)
196     return TRUE;
197 
198   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
199     return FALSE;
200 
201   abfd = elf_hash_table (info)->dynobj;
202   bed = get_elf_backend_data (abfd);
203 
204   flags = bed->dynamic_sec_flags;
205 
206   /* A dynamically linked executable has a .interp section, but a
207      shared library does not.  */
208   if (info->executable)
209     {
210       s = bfd_make_section_with_flags (abfd, ".interp",
211 				       flags | SEC_READONLY);
212       if (s == NULL)
213 	return FALSE;
214     }
215 
216   /* Create sections to hold version informations.  These are removed
217      if they are not needed.  */
218   s = bfd_make_section_with_flags (abfd, ".gnu.version_d",
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, ".gnu.version",
225 				   flags | SEC_READONLY);
226   if (s == NULL
227       || ! bfd_set_section_alignment (abfd, s, 1))
228     return FALSE;
229 
230   s = bfd_make_section_with_flags (abfd, ".gnu.version_r",
231 				   flags | SEC_READONLY);
232   if (s == NULL
233       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
234     return FALSE;
235 
236   s = bfd_make_section_with_flags (abfd, ".dynsym",
237 				   flags | SEC_READONLY);
238   if (s == NULL
239       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
240     return FALSE;
241 
242   s = bfd_make_section_with_flags (abfd, ".dynstr",
243 				   flags | SEC_READONLY);
244   if (s == NULL)
245     return FALSE;
246 
247   s = bfd_make_section_with_flags (abfd, ".dynamic", flags);
248   if (s == NULL
249       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
250     return FALSE;
251 
252   /* The special symbol _DYNAMIC is always set to the start of the
253      .dynamic section.  We could set _DYNAMIC in a linker script, but we
254      only want to define it if we are, in fact, creating a .dynamic
255      section.  We don't want to define it if there is no .dynamic
256      section, since on some ELF platforms the start up code examines it
257      to decide how to initialize the process.  */
258   if (!_bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC"))
259     return FALSE;
260 
261   if (info->emit_hash)
262     {
263       s = bfd_make_section_with_flags (abfd, ".hash", flags | SEC_READONLY);
264       if (s == NULL
265 	  || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
266 	return FALSE;
267       elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
268     }
269 
270   if (info->emit_gnu_hash)
271     {
272       s = bfd_make_section_with_flags (abfd, ".gnu.hash",
273 				       flags | SEC_READONLY);
274       if (s == NULL
275 	  || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
276 	return FALSE;
277       /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section:
278 	 4 32-bit words followed by variable count of 64-bit words, then
279 	 variable count of 32-bit words.  */
280       if (bed->s->arch_size == 64)
281 	elf_section_data (s)->this_hdr.sh_entsize = 0;
282       else
283 	elf_section_data (s)->this_hdr.sh_entsize = 4;
284     }
285 
286   /* Let the backend create the rest of the sections.  This lets the
287      backend set the right flags.  The backend will normally create
288      the .got and .plt sections.  */
289   if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
290     return FALSE;
291 
292   elf_hash_table (info)->dynamic_sections_created = TRUE;
293 
294   return TRUE;
295 }
296 
297 /* Create dynamic sections when linking against a dynamic object.  */
298 
299 bfd_boolean
300 _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
301 {
302   flagword flags, pltflags;
303   struct elf_link_hash_entry *h;
304   asection *s;
305   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
306   struct elf_link_hash_table *htab = elf_hash_table (info);
307 
308   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
309      .rel[a].bss sections.  */
310   flags = bed->dynamic_sec_flags;
311 
312   pltflags = flags;
313   if (bed->plt_not_loaded)
314     /* We do not clear SEC_ALLOC here because we still want the OS to
315        allocate space for the section; it's just that there's nothing
316        to read in from the object file.  */
317     pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS);
318   else
319     pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD;
320   if (bed->plt_readonly)
321     pltflags |= SEC_READONLY;
322 
323   s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
324   if (s == NULL
325       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
326     return FALSE;
327   htab->splt = s;
328 
329   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
330      .plt section.  */
331   if (bed->want_plt_sym)
332     {
333       h = _bfd_elf_define_linkage_sym (abfd, info, s,
334 				       "_PROCEDURE_LINKAGE_TABLE_");
335       elf_hash_table (info)->hplt = h;
336       if (h == NULL)
337 	return FALSE;
338     }
339 
340   s = bfd_make_section_with_flags (abfd,
341 				   (bed->rela_plts_and_copies_p
342 				    ? ".rela.plt" : ".rel.plt"),
343 				   flags | SEC_READONLY);
344   if (s == NULL
345       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
346     return FALSE;
347   htab->srelplt = s;
348 
349   if (! _bfd_elf_create_got_section (abfd, info))
350     return FALSE;
351 
352   if (bed->want_dynbss)
353     {
354       /* The .dynbss section is a place to put symbols which are defined
355 	 by dynamic objects, are referenced by regular objects, and are
356 	 not functions.  We must allocate space for them in the process
357 	 image and use a R_*_COPY reloc to tell the dynamic linker to
358 	 initialize them at run time.  The linker script puts the .dynbss
359 	 section into the .bss section of the final image.  */
360       s = bfd_make_section_with_flags (abfd, ".dynbss",
361 				       (SEC_ALLOC
362 					| SEC_LINKER_CREATED));
363       if (s == NULL)
364 	return FALSE;
365 
366       /* The .rel[a].bss section holds copy relocs.  This section is not
367 	 normally needed.  We need to create it here, though, so that the
368 	 linker will map it to an output section.  We can't just create it
369 	 only if we need it, because we will not know whether we need it
370 	 until we have seen all the input files, and the first time the
371 	 main linker code calls BFD after examining all the input files
372 	 (size_dynamic_sections) the input sections have already been
373 	 mapped to the output sections.  If the section turns out not to
374 	 be needed, we can discard it later.  We will never need this
375 	 section when generating a shared object, since they do not use
376 	 copy relocs.  */
377       if (! info->shared)
378 	{
379 	  s = bfd_make_section_with_flags (abfd,
380 					   (bed->rela_plts_and_copies_p
381 					    ? ".rela.bss" : ".rel.bss"),
382 					   flags | SEC_READONLY);
383 	  if (s == NULL
384 	      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
385 	    return FALSE;
386 	}
387     }
388 
389   return TRUE;
390 }
391 
392 /* Record a new dynamic symbol.  We record the dynamic symbols as we
393    read the input files, since we need to have a list of all of them
394    before we can determine the final sizes of the output sections.
395    Note that we may actually call this function even though we are not
396    going to output any dynamic symbols; in some cases we know that a
397    symbol should be in the dynamic symbol table, but only if there is
398    one.  */
399 
400 bfd_boolean
401 bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
402 				    struct elf_link_hash_entry *h)
403 {
404   if (h->dynindx == -1)
405     {
406       struct elf_strtab_hash *dynstr;
407       char *p;
408       const char *name;
409       bfd_size_type indx;
410 
411       /* XXX: The ABI draft says the linker must turn hidden and
412 	 internal symbols into STB_LOCAL symbols when producing the
413 	 DSO. However, if ld.so honors st_other in the dynamic table,
414 	 this would not be necessary.  */
415       switch (ELF_ST_VISIBILITY (h->other))
416 	{
417 	case STV_INTERNAL:
418 	case STV_HIDDEN:
419 	  if (h->root.type != bfd_link_hash_undefined
420 	      && h->root.type != bfd_link_hash_undefweak)
421 	    {
422 	      h->forced_local = 1;
423 	      if (!elf_hash_table (info)->is_relocatable_executable)
424 		return TRUE;
425 	    }
426 
427 	default:
428 	  break;
429 	}
430 
431       h->dynindx = elf_hash_table (info)->dynsymcount;
432       ++elf_hash_table (info)->dynsymcount;
433 
434       dynstr = elf_hash_table (info)->dynstr;
435       if (dynstr == NULL)
436 	{
437 	  /* Create a strtab to hold the dynamic symbol names.  */
438 	  elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
439 	  if (dynstr == NULL)
440 	    return FALSE;
441 	}
442 
443       /* We don't put any version information in the dynamic string
444 	 table.  */
445       name = h->root.root.string;
446       p = strchr (name, ELF_VER_CHR);
447       if (p != NULL)
448 	/* We know that the p points into writable memory.  In fact,
449 	   there are only a few symbols that have read-only names, being
450 	   those like _GLOBAL_OFFSET_TABLE_ that are created specially
451 	   by the backends.  Most symbols will have names pointing into
452 	   an ELF string table read from a file, or to objalloc memory.  */
453 	*p = 0;
454 
455       indx = _bfd_elf_strtab_add (dynstr, name, p != NULL);
456 
457       if (p != NULL)
458 	*p = ELF_VER_CHR;
459 
460       if (indx == (bfd_size_type) -1)
461 	return FALSE;
462       h->dynstr_index = indx;
463     }
464 
465   return TRUE;
466 }
467 
468 /* Mark a symbol dynamic.  */
469 
470 static void
471 bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info,
472 				  struct elf_link_hash_entry *h,
473 				  Elf_Internal_Sym *sym)
474 {
475   struct bfd_elf_dynamic_list *d = info->dynamic_list;
476 
477   /* It may be called more than once on the same H.  */
478   if(h->dynamic || info->relocatable)
479     return;
480 
481   if ((info->dynamic_data
482        && (h->type == STT_OBJECT
483 	   || (sym != NULL
484 	       && ELF_ST_TYPE (sym->st_info) == STT_OBJECT)))
485       || (d != NULL
486 	  && h->root.type == bfd_link_hash_new
487 	  && (*d->match) (&d->head, NULL, h->root.root.string)))
488     h->dynamic = 1;
489 }
490 
491 /* Record an assignment to a symbol made by a linker script.  We need
492    this in case some dynamic object refers to this symbol.  */
493 
494 bfd_boolean
495 bfd_elf_record_link_assignment (bfd *output_bfd,
496 				struct bfd_link_info *info,
497 				const char *name,
498 				bfd_boolean provide,
499 				bfd_boolean hidden)
500 {
501   struct elf_link_hash_entry *h, *hv;
502   struct elf_link_hash_table *htab;
503   const struct elf_backend_data *bed;
504 
505   if (!is_elf_hash_table (info->hash))
506     return TRUE;
507 
508   htab = elf_hash_table (info);
509   h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE);
510   if (h == NULL)
511     return provide;
512 
513   switch (h->root.type)
514     {
515     case bfd_link_hash_defined:
516     case bfd_link_hash_defweak:
517     case bfd_link_hash_common:
518       break;
519     case bfd_link_hash_undefweak:
520     case bfd_link_hash_undefined:
521       /* Since we're defining the symbol, don't let it seem to have not
522 	 been defined.  record_dynamic_symbol and size_dynamic_sections
523 	 may depend on this.  */
524       h->root.type = bfd_link_hash_new;
525       if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root)
526 	bfd_link_repair_undef_list (&htab->root);
527       break;
528     case bfd_link_hash_new:
529       bfd_elf_link_mark_dynamic_symbol (info, h, NULL);
530       h->non_elf = 0;
531       break;
532     case bfd_link_hash_indirect:
533       /* We had a versioned symbol in a dynamic library.  We make the
534 	 the versioned symbol point to this one.  */
535       bed = get_elf_backend_data (output_bfd);
536       hv = h;
537       while (hv->root.type == bfd_link_hash_indirect
538 	     || hv->root.type == bfd_link_hash_warning)
539 	hv = (struct elf_link_hash_entry *) hv->root.u.i.link;
540       /* We don't need to update h->root.u since linker will set them
541 	 later.  */
542       h->root.type = bfd_link_hash_undefined;
543       hv->root.type = bfd_link_hash_indirect;
544       hv->root.u.i.link = (struct bfd_link_hash_entry *) h;
545       (*bed->elf_backend_copy_indirect_symbol) (info, h, hv);
546       break;
547     case bfd_link_hash_warning:
548       abort ();
549       break;
550     }
551 
552   /* If this symbol is being provided by the linker script, and it is
553      currently defined by a dynamic object, but not by a regular
554      object, then mark it as undefined so that the generic linker will
555      force the correct value.  */
556   if (provide
557       && h->def_dynamic
558       && !h->def_regular)
559     h->root.type = bfd_link_hash_undefined;
560 
561   /* If this symbol is not being provided by the linker script, and it is
562      currently defined by a dynamic object, but not by a regular object,
563      then clear out any version information because the symbol will not be
564      associated with the dynamic object any more.  */
565   if (!provide
566       && h->def_dynamic
567       && !h->def_regular)
568     h->verinfo.verdef = NULL;
569 
570   h->def_regular = 1;
571 
572   if (provide && hidden)
573     {
574       bed = get_elf_backend_data (output_bfd);
575       h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
576       (*bed->elf_backend_hide_symbol) (info, h, TRUE);
577     }
578 
579   /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects
580      and executables.  */
581   if (!info->relocatable
582       && h->dynindx != -1
583       && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
584 	  || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL))
585     h->forced_local = 1;
586 
587   if ((h->def_dynamic
588        || h->ref_dynamic
589        || info->shared
590        || (info->executable && elf_hash_table (info)->is_relocatable_executable))
591       && h->dynindx == -1)
592     {
593       if (! bfd_elf_link_record_dynamic_symbol (info, h))
594 	return FALSE;
595 
596       /* If this is a weak defined symbol, and we know a corresponding
597 	 real symbol from the same dynamic object, make sure the real
598 	 symbol is also made into a dynamic symbol.  */
599       if (h->u.weakdef != NULL
600 	  && h->u.weakdef->dynindx == -1)
601 	{
602 	  if (! bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
603 	    return FALSE;
604 	}
605     }
606 
607   return TRUE;
608 }
609 
610 /* Record a new local dynamic symbol.  Returns 0 on failure, 1 on
611    success, and 2 on a failure caused by attempting to record a symbol
612    in a discarded section, eg. a discarded link-once section symbol.  */
613 
614 int
615 bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info,
616 					  bfd *input_bfd,
617 					  long input_indx)
618 {
619   bfd_size_type amt;
620   struct elf_link_local_dynamic_entry *entry;
621   struct elf_link_hash_table *eht;
622   struct elf_strtab_hash *dynstr;
623   unsigned long dynstr_index;
624   char *name;
625   Elf_External_Sym_Shndx eshndx;
626   char esym[sizeof (Elf64_External_Sym)];
627 
628   if (! is_elf_hash_table (info->hash))
629     return 0;
630 
631   /* See if the entry exists already.  */
632   for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
633     if (entry->input_bfd == input_bfd && entry->input_indx == input_indx)
634       return 1;
635 
636   amt = sizeof (*entry);
637   entry = (struct elf_link_local_dynamic_entry *) bfd_alloc (input_bfd, amt);
638   if (entry == NULL)
639     return 0;
640 
641   /* Go find the symbol, so that we can find it's name.  */
642   if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr,
643 			     1, input_indx, &entry->isym, esym, &eshndx))
644     {
645       bfd_release (input_bfd, entry);
646       return 0;
647     }
648 
649   if (entry->isym.st_shndx != SHN_UNDEF
650       && entry->isym.st_shndx < SHN_LORESERVE)
651     {
652       asection *s;
653 
654       s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx);
655       if (s == NULL || bfd_is_abs_section (s->output_section))
656 	{
657 	  /* We can still bfd_release here as nothing has done another
658 	     bfd_alloc.  We can't do this later in this function.  */
659 	  bfd_release (input_bfd, entry);
660 	  return 2;
661 	}
662     }
663 
664   name = (bfd_elf_string_from_elf_section
665 	  (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link,
666 	   entry->isym.st_name));
667 
668   dynstr = elf_hash_table (info)->dynstr;
669   if (dynstr == NULL)
670     {
671       /* Create a strtab to hold the dynamic symbol names.  */
672       elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
673       if (dynstr == NULL)
674 	return 0;
675     }
676 
677   dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE);
678   if (dynstr_index == (unsigned long) -1)
679     return 0;
680   entry->isym.st_name = dynstr_index;
681 
682   eht = elf_hash_table (info);
683 
684   entry->next = eht->dynlocal;
685   eht->dynlocal = entry;
686   entry->input_bfd = input_bfd;
687   entry->input_indx = input_indx;
688   eht->dynsymcount++;
689 
690   /* Whatever binding the symbol had before, it's now local.  */
691   entry->isym.st_info
692     = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info));
693 
694   /* The dynindx will be set at the end of size_dynamic_sections.  */
695 
696   return 1;
697 }
698 
699 /* Return the dynindex of a local dynamic symbol.  */
700 
701 long
702 _bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info,
703 				    bfd *input_bfd,
704 				    long input_indx)
705 {
706   struct elf_link_local_dynamic_entry *e;
707 
708   for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
709     if (e->input_bfd == input_bfd && e->input_indx == input_indx)
710       return e->dynindx;
711   return -1;
712 }
713 
714 /* This function is used to renumber the dynamic symbols, if some of
715    them are removed because they are marked as local.  This is called
716    via elf_link_hash_traverse.  */
717 
718 static bfd_boolean
719 elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h,
720 				      void *data)
721 {
722   size_t *count = (size_t *) data;
723 
724   if (h->root.type == bfd_link_hash_warning)
725     h = (struct elf_link_hash_entry *) h->root.u.i.link;
726 
727   if (h->forced_local)
728     return TRUE;
729 
730   if (h->dynindx != -1)
731     h->dynindx = ++(*count);
732 
733   return TRUE;
734 }
735 
736 
737 /* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with
738    STB_LOCAL binding.  */
739 
740 static bfd_boolean
741 elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h,
742 					    void *data)
743 {
744   size_t *count = (size_t *) data;
745 
746   if (h->root.type == bfd_link_hash_warning)
747     h = (struct elf_link_hash_entry *) h->root.u.i.link;
748 
749   if (!h->forced_local)
750     return TRUE;
751 
752   if (h->dynindx != -1)
753     h->dynindx = ++(*count);
754 
755   return TRUE;
756 }
757 
758 /* Return true if the dynamic symbol for a given section should be
759    omitted when creating a shared library.  */
760 bfd_boolean
761 _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
762 				   struct bfd_link_info *info,
763 				   asection *p)
764 {
765   struct elf_link_hash_table *htab;
766 
767   switch (elf_section_data (p)->this_hdr.sh_type)
768     {
769     case SHT_PROGBITS:
770     case SHT_NOBITS:
771       /* If sh_type is yet undecided, assume it could be
772 	 SHT_PROGBITS/SHT_NOBITS.  */
773     case SHT_NULL:
774       htab = elf_hash_table (info);
775       if (p == htab->tls_sec)
776 	return FALSE;
777 
778       if (htab->text_index_section != NULL)
779 	return p != htab->text_index_section && p != htab->data_index_section;
780 
781       if (strcmp (p->name, ".got") == 0
782 	  || strcmp (p->name, ".got.plt") == 0
783 	  || strcmp (p->name, ".plt") == 0)
784 	{
785 	  asection *ip;
786 
787 	  if (htab->dynobj != NULL
788 	      && (ip = bfd_get_section_by_name (htab->dynobj, p->name)) != NULL
789 	      && (ip->flags & SEC_LINKER_CREATED)
790 	      && ip->output_section == p)
791 	    return TRUE;
792 	}
793       return FALSE;
794 
795       /* There shouldn't be section relative relocations
796 	 against any other section.  */
797     default:
798       return TRUE;
799     }
800 }
801 
802 /* Assign dynsym indices.  In a shared library we generate a section
803    symbol for each output section, which come first.  Next come symbols
804    which have been forced to local binding.  Then all of the back-end
805    allocated local dynamic syms, followed by the rest of the global
806    symbols.  */
807 
808 static unsigned long
809 _bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
810 				struct bfd_link_info *info,
811 				unsigned long *section_sym_count)
812 {
813   unsigned long dynsymcount = 0;
814 
815   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
816     {
817       const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
818       asection *p;
819       for (p = output_bfd->sections; p ; p = p->next)
820 	if ((p->flags & SEC_EXCLUDE) == 0
821 	    && (p->flags & SEC_ALLOC) != 0
822 	    && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
823 	  elf_section_data (p)->dynindx = ++dynsymcount;
824 	else
825 	  elf_section_data (p)->dynindx = 0;
826     }
827   *section_sym_count = dynsymcount;
828 
829   elf_link_hash_traverse (elf_hash_table (info),
830 			  elf_link_renumber_local_hash_table_dynsyms,
831 			  &dynsymcount);
832 
833   if (elf_hash_table (info)->dynlocal)
834     {
835       struct elf_link_local_dynamic_entry *p;
836       for (p = elf_hash_table (info)->dynlocal; p ; p = p->next)
837 	p->dynindx = ++dynsymcount;
838     }
839 
840   elf_link_hash_traverse (elf_hash_table (info),
841 			  elf_link_renumber_hash_table_dynsyms,
842 			  &dynsymcount);
843 
844   /* There is an unused NULL entry at the head of the table which
845      we must account for in our count.  Unless there weren't any
846      symbols, which means we'll have no table at all.  */
847   if (dynsymcount != 0)
848     ++dynsymcount;
849 
850   elf_hash_table (info)->dynsymcount = dynsymcount;
851   return dynsymcount;
852 }
853 
854 /* Merge st_other field.  */
855 
856 static void
857 elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h,
858 		    Elf_Internal_Sym *isym, bfd_boolean definition,
859 		    bfd_boolean dynamic)
860 {
861   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
862 
863   /* If st_other has a processor-specific meaning, specific
864      code might be needed here. We never merge the visibility
865      attribute with the one from a dynamic object.  */
866   if (bed->elf_backend_merge_symbol_attribute)
867     (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
868 						dynamic);
869 
870   /* If this symbol has default visibility and the user has requested
871      we not re-export it, then mark it as hidden.  */
872   if (definition
873       && !dynamic
874       && (abfd->no_export
875 	  || (abfd->my_archive && abfd->my_archive->no_export))
876       && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
877     isym->st_other = (STV_HIDDEN
878 		      | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
879 
880   if (!dynamic && ELF_ST_VISIBILITY (isym->st_other) != 0)
881     {
882       unsigned char hvis, symvis, other, nvis;
883 
884       /* Only merge the visibility. Leave the remainder of the
885 	 st_other field to elf_backend_merge_symbol_attribute.  */
886       other = h->other & ~ELF_ST_VISIBILITY (-1);
887 
888       /* Combine visibilities, using the most constraining one.  */
889       hvis = ELF_ST_VISIBILITY (h->other);
890       symvis = ELF_ST_VISIBILITY (isym->st_other);
891       if (! hvis)
892 	nvis = symvis;
893       else if (! symvis)
894 	nvis = hvis;
895       else
896 	nvis = hvis < symvis ? hvis : symvis;
897 
898       h->other = other | nvis;
899     }
900 }
901 
902 /* This function is called when we want to define a new symbol.  It
903    handles the various cases which arise when we find a definition in
904    a dynamic object, or when there is already a definition in a
905    dynamic object.  The new symbol is described by NAME, SYM, PSEC,
906    and PVALUE.  We set SYM_HASH to the hash table entry.  We set
907    OVERRIDE if the old symbol is overriding a new definition.  We set
908    TYPE_CHANGE_OK if it is OK for the type to change.  We set
909    SIZE_CHANGE_OK if it is OK for the size to change.  By OK to
910    change, we mean that we shouldn't warn if the type or size does
911    change.  We set POLD_ALIGNMENT if an old common symbol in a dynamic
912    object is overridden by a regular object.  */
913 
914 bfd_boolean
915 _bfd_elf_merge_symbol (bfd *abfd,
916 		       struct bfd_link_info *info,
917 		       const char *name,
918 		       Elf_Internal_Sym *sym,
919 		       asection **psec,
920 		       bfd_vma *pvalue,
921 		       unsigned int *pold_alignment,
922 		       struct elf_link_hash_entry **sym_hash,
923 		       bfd_boolean *skip,
924 		       bfd_boolean *override,
925 		       bfd_boolean *type_change_ok,
926 		       bfd_boolean *size_change_ok)
927 {
928   asection *sec, *oldsec;
929   struct elf_link_hash_entry *h;
930   struct elf_link_hash_entry *flip;
931   int bind;
932   bfd *oldbfd;
933   bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
934   bfd_boolean newweak, oldweak, newfunc, oldfunc;
935   const struct elf_backend_data *bed;
936 
937   *skip = FALSE;
938   *override = FALSE;
939 
940   sec = *psec;
941   bind = ELF_ST_BIND (sym->st_info);
942 
943   /* Silently discard TLS symbols from --just-syms.  There's no way to
944      combine a static TLS block with a new TLS block for this executable.  */
945   if (ELF_ST_TYPE (sym->st_info) == STT_TLS
946       && sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
947     {
948       *skip = TRUE;
949       return TRUE;
950     }
951 
952   if (! bfd_is_und_section (sec))
953     h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
954   else
955     h = ((struct elf_link_hash_entry *)
956 	 bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
957   if (h == NULL)
958     return FALSE;
959   *sym_hash = h;
960 
961   bed = get_elf_backend_data (abfd);
962 
963   /* This code is for coping with dynamic objects, and is only useful
964      if we are doing an ELF link.  */
965   if (!(*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
966     return TRUE;
967 
968   /* For merging, we only care about real symbols.  */
969 
970   while (h->root.type == bfd_link_hash_indirect
971 	 || h->root.type == bfd_link_hash_warning)
972     h = (struct elf_link_hash_entry *) h->root.u.i.link;
973 
974   /* We have to check it for every instance since the first few may be
975      refereences and not all compilers emit symbol type for undefined
976      symbols.  */
977   bfd_elf_link_mark_dynamic_symbol (info, h, sym);
978 
979   /* If we just created the symbol, mark it as being an ELF symbol.
980      Other than that, there is nothing to do--there is no merge issue
981      with a newly defined symbol--so we just return.  */
982 
983   if (h->root.type == bfd_link_hash_new)
984     {
985       h->non_elf = 0;
986       return TRUE;
987     }
988 
989   /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the
990      existing symbol.  */
991 
992   switch (h->root.type)
993     {
994     default:
995       oldbfd = NULL;
996       oldsec = NULL;
997       break;
998 
999     case bfd_link_hash_undefined:
1000     case bfd_link_hash_undefweak:
1001       oldbfd = h->root.u.undef.abfd;
1002       oldsec = NULL;
1003       break;
1004 
1005     case bfd_link_hash_defined:
1006     case bfd_link_hash_defweak:
1007       oldbfd = h->root.u.def.section->owner;
1008       oldsec = h->root.u.def.section;
1009       break;
1010 
1011     case bfd_link_hash_common:
1012       oldbfd = h->root.u.c.p->section->owner;
1013       oldsec = h->root.u.c.p->section;
1014       break;
1015     }
1016 
1017   /* Differentiate strong and weak symbols.  */
1018   newweak = bind == STB_WEAK;
1019   oldweak = (h->root.type == bfd_link_hash_defweak
1020 	     || h->root.type == bfd_link_hash_undefweak);
1021 
1022   /* In cases involving weak versioned symbols, we may wind up trying
1023      to merge a symbol with itself.  Catch that here, to avoid the
1024      confusion that results if we try to override a symbol with
1025      itself.  The additional tests catch cases like
1026      _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a
1027      dynamic object, which we do want to handle here.  */
1028   if (abfd == oldbfd
1029       && (newweak || oldweak)
1030       && ((abfd->flags & DYNAMIC) == 0
1031 	  || !h->def_regular))
1032     return TRUE;
1033 
1034   /* NEWDYN and OLDDYN indicate whether the new or old symbol,
1035      respectively, is from a dynamic object.  */
1036 
1037   newdyn = (abfd->flags & DYNAMIC) != 0;
1038 
1039   olddyn = FALSE;
1040   if (oldbfd != NULL)
1041     olddyn = (oldbfd->flags & DYNAMIC) != 0;
1042   else if (oldsec != NULL)
1043     {
1044       /* This handles the special SHN_MIPS_{TEXT,DATA} section
1045 	 indices used by MIPS ELF.  */
1046       olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
1047     }
1048 
1049   /* NEWDEF and OLDDEF indicate whether the new or old symbol,
1050      respectively, appear to be a definition rather than reference.  */
1051 
1052   newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec);
1053 
1054   olddef = (h->root.type != bfd_link_hash_undefined
1055 	    && h->root.type != bfd_link_hash_undefweak
1056 	    && h->root.type != bfd_link_hash_common);
1057 
1058   /* NEWFUNC and OLDFUNC indicate whether the new or old symbol,
1059      respectively, appear to be a function.  */
1060 
1061   newfunc = (ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1062 	     && bed->is_function_type (ELF_ST_TYPE (sym->st_info)));
1063 
1064   oldfunc = (h->type != STT_NOTYPE
1065 	     && bed->is_function_type (h->type));
1066 
1067   /* When we try to create a default indirect symbol from the dynamic
1068      definition with the default version, we skip it if its type and
1069      the type of existing regular definition mismatch.  We only do it
1070      if the existing regular definition won't be dynamic.  */
1071   if (pold_alignment == NULL
1072       && !info->shared
1073       && !info->export_dynamic
1074       && !h->ref_dynamic
1075       && newdyn
1076       && newdef
1077       && !olddyn
1078       && (olddef || h->root.type == bfd_link_hash_common)
1079       && ELF_ST_TYPE (sym->st_info) != h->type
1080       && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1081       && h->type != STT_NOTYPE
1082       && !(newfunc && oldfunc))
1083     {
1084       *skip = TRUE;
1085       return TRUE;
1086     }
1087 
1088   /* Check TLS symbol.  We don't check undefined symbol introduced by
1089      "ld -u".  */
1090   if ((ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS)
1091       && ELF_ST_TYPE (sym->st_info) != h->type
1092       && oldbfd != NULL)
1093     {
1094       bfd *ntbfd, *tbfd;
1095       bfd_boolean ntdef, tdef;
1096       asection *ntsec, *tsec;
1097 
1098       if (h->type == STT_TLS)
1099 	{
1100 	  ntbfd = abfd;
1101 	  ntsec = sec;
1102 	  ntdef = newdef;
1103 	  tbfd = oldbfd;
1104 	  tsec = oldsec;
1105 	  tdef = olddef;
1106 	}
1107       else
1108 	{
1109 	  ntbfd = oldbfd;
1110 	  ntsec = oldsec;
1111 	  ntdef = olddef;
1112 	  tbfd = abfd;
1113 	  tsec = sec;
1114 	  tdef = newdef;
1115 	}
1116 
1117       if (tdef && ntdef)
1118 	(*_bfd_error_handler)
1119 	  (_("%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A"),
1120 	   tbfd, tsec, ntbfd, ntsec, h->root.root.string);
1121       else if (!tdef && !ntdef)
1122 	(*_bfd_error_handler)
1123 	  (_("%s: TLS reference in %B mismatches non-TLS reference in %B"),
1124 	   tbfd, ntbfd, h->root.root.string);
1125       else if (tdef)
1126 	(*_bfd_error_handler)
1127 	  (_("%s: TLS definition in %B section %A mismatches non-TLS reference in %B"),
1128 	   tbfd, tsec, ntbfd, h->root.root.string);
1129       else
1130 	(*_bfd_error_handler)
1131 	  (_("%s: TLS reference in %B mismatches non-TLS definition in %B section %A"),
1132 	   tbfd, ntbfd, ntsec, h->root.root.string);
1133 
1134       bfd_set_error (bfd_error_bad_value);
1135       return FALSE;
1136     }
1137 
1138   /* We need to remember if a symbol has a definition in a dynamic
1139      object or is weak in all dynamic objects. Internal and hidden
1140      visibility will make it unavailable to dynamic objects.  */
1141   if (newdyn && !h->dynamic_def)
1142     {
1143       if (!bfd_is_und_section (sec))
1144 	h->dynamic_def = 1;
1145       else
1146 	{
1147 	  /* Check if this symbol is weak in all dynamic objects. If it
1148 	     is the first time we see it in a dynamic object, we mark
1149 	     if it is weak. Otherwise, we clear it.  */
1150 	  if (!h->ref_dynamic)
1151 	    {
1152 	      if (bind == STB_WEAK)
1153 		h->dynamic_weak = 1;
1154 	    }
1155 	  else if (bind != STB_WEAK)
1156 	    h->dynamic_weak = 0;
1157 	}
1158     }
1159 
1160   /* If the old symbol has non-default visibility, we ignore the new
1161      definition from a dynamic object.  */
1162   if (newdyn
1163       && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1164       && !bfd_is_und_section (sec))
1165     {
1166       *skip = TRUE;
1167       /* Make sure this symbol is dynamic.  */
1168       h->ref_dynamic = 1;
1169       /* A protected symbol has external availability. Make sure it is
1170 	 recorded as dynamic.
1171 
1172 	 FIXME: Should we check type and size for protected symbol?  */
1173       if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
1174 	return bfd_elf_link_record_dynamic_symbol (info, h);
1175       else
1176 	return TRUE;
1177     }
1178   else if (!newdyn
1179 	   && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
1180 	   && h->def_dynamic)
1181     {
1182       /* If the new symbol with non-default visibility comes from a
1183 	 relocatable file and the old definition comes from a dynamic
1184 	 object, we remove the old definition.  */
1185       if ((*sym_hash)->root.type == bfd_link_hash_indirect)
1186 	{
1187 	  /* Handle the case where the old dynamic definition is
1188 	     default versioned.  We need to copy the symbol info from
1189 	     the symbol with default version to the normal one if it
1190 	     was referenced before.  */
1191 	  if (h->ref_regular)
1192 	    {
1193 	      struct elf_link_hash_entry *vh = *sym_hash;
1194 
1195 	      vh->root.type = h->root.type;
1196 	      h->root.type = bfd_link_hash_indirect;
1197 	      (*bed->elf_backend_copy_indirect_symbol) (info, vh, h);
1198 	      /* Protected symbols will override the dynamic definition
1199 		 with default version.  */
1200 	      if (ELF_ST_VISIBILITY (sym->st_other) == STV_PROTECTED)
1201 		{
1202 		  h->root.u.i.link = (struct bfd_link_hash_entry *) vh;
1203 		  vh->dynamic_def = 1;
1204 		  vh->ref_dynamic = 1;
1205 		}
1206 	      else
1207 		{
1208 		  h->root.type = vh->root.type;
1209 		  vh->ref_dynamic = 0;
1210 		  /* We have to hide it here since it was made dynamic
1211 		     global with extra bits when the symbol info was
1212 		     copied from the old dynamic definition.  */
1213 		  (*bed->elf_backend_hide_symbol) (info, vh, TRUE);
1214 		}
1215 	      h = vh;
1216 	    }
1217 	  else
1218 	    h = *sym_hash;
1219 	}
1220 
1221       if ((h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1222 	  && bfd_is_und_section (sec))
1223 	{
1224 	  /* If the new symbol is undefined and the old symbol was
1225 	     also undefined before, we need to make sure
1226 	     _bfd_generic_link_add_one_symbol doesn't mess
1227 	     up the linker hash table undefs list.  Since the old
1228 	     definition came from a dynamic object, it is still on the
1229 	     undefs list.  */
1230 	  h->root.type = bfd_link_hash_undefined;
1231 	  h->root.u.undef.abfd = abfd;
1232 	}
1233       else
1234 	{
1235 	  h->root.type = bfd_link_hash_new;
1236 	  h->root.u.undef.abfd = NULL;
1237 	}
1238 
1239       if (h->def_dynamic)
1240 	{
1241 	  h->def_dynamic = 0;
1242 	  h->ref_dynamic = 1;
1243 	  h->dynamic_def = 1;
1244 	}
1245       /* FIXME: Should we check type and size for protected symbol?  */
1246       h->size = 0;
1247       h->type = 0;
1248       return TRUE;
1249     }
1250 
1251   if (bind == STB_GNU_UNIQUE)
1252     h->unique_global = 1;
1253 
1254   /* If a new weak symbol definition comes from a regular file and the
1255      old symbol comes from a dynamic library, we treat the new one as
1256      strong.  Similarly, an old weak symbol definition from a regular
1257      file is treated as strong when the new symbol comes from a dynamic
1258      library.  Further, an old weak symbol from a dynamic library is
1259      treated as strong if the new symbol is from a dynamic library.
1260      This reflects the way glibc's ld.so works.
1261 
1262      Do this before setting *type_change_ok or *size_change_ok so that
1263      we warn properly when dynamic library symbols are overridden.  */
1264 
1265   if (newdef && !newdyn && olddyn)
1266     newweak = FALSE;
1267   if (olddef && newdyn)
1268     oldweak = FALSE;
1269 
1270   /* Allow changes between different types of function symbol.  */
1271   if (newfunc && oldfunc)
1272     *type_change_ok = TRUE;
1273 
1274   /* It's OK to change the type if either the existing symbol or the
1275      new symbol is weak.  A type change is also OK if the old symbol
1276      is undefined and the new symbol is defined.  */
1277 
1278   if (oldweak
1279       || newweak
1280       || (newdef
1281 	  && h->root.type == bfd_link_hash_undefined))
1282     *type_change_ok = TRUE;
1283 
1284   /* It's OK to change the size if either the existing symbol or the
1285      new symbol is weak, or if the old symbol is undefined.  */
1286 
1287   if (*type_change_ok
1288       || h->root.type == bfd_link_hash_undefined)
1289     *size_change_ok = TRUE;
1290 
1291   /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
1292      symbol, respectively, appears to be a common symbol in a dynamic
1293      object.  If a symbol appears in an uninitialized section, and is
1294      not weak, and is not a function, then it may be a common symbol
1295      which was resolved when the dynamic object was created.  We want
1296      to treat such symbols specially, because they raise special
1297      considerations when setting the symbol size: if the symbol
1298      appears as a common symbol in a regular object, and the size in
1299      the regular object is larger, we must make sure that we use the
1300      larger size.  This problematic case can always be avoided in C,
1301      but it must be handled correctly when using Fortran shared
1302      libraries.
1303 
1304      Note that if NEWDYNCOMMON is set, NEWDEF will be set, and
1305      likewise for OLDDYNCOMMON and OLDDEF.
1306 
1307      Note that this test is just a heuristic, and that it is quite
1308      possible to have an uninitialized symbol in a shared object which
1309      is really a definition, rather than a common symbol.  This could
1310      lead to some minor confusion when the symbol really is a common
1311      symbol in some regular object.  However, I think it will be
1312      harmless.  */
1313 
1314   if (newdyn
1315       && newdef
1316       && !newweak
1317       && (sec->flags & SEC_ALLOC) != 0
1318       && (sec->flags & SEC_LOAD) == 0
1319       && sym->st_size > 0
1320       && !newfunc)
1321     newdyncommon = TRUE;
1322   else
1323     newdyncommon = FALSE;
1324 
1325   if (olddyn
1326       && olddef
1327       && h->root.type == bfd_link_hash_defined
1328       && h->def_dynamic
1329       && (h->root.u.def.section->flags & SEC_ALLOC) != 0
1330       && (h->root.u.def.section->flags & SEC_LOAD) == 0
1331       && h->size > 0
1332       && !oldfunc)
1333     olddyncommon = TRUE;
1334   else
1335     olddyncommon = FALSE;
1336 
1337   /* We now know everything about the old and new symbols.  We ask the
1338      backend to check if we can merge them.  */
1339   if (bed->merge_symbol
1340       && !bed->merge_symbol (info, sym_hash, h, sym, psec, pvalue,
1341 			     pold_alignment, skip, override,
1342 			     type_change_ok, size_change_ok,
1343 			     &newdyn, &newdef, &newdyncommon, &newweak,
1344 			     abfd, &sec,
1345 			     &olddyn, &olddef, &olddyncommon, &oldweak,
1346 			     oldbfd, &oldsec))
1347     return FALSE;
1348 
1349   /* If both the old and the new symbols look like common symbols in a
1350      dynamic object, set the size of the symbol to the larger of the
1351      two.  */
1352 
1353   if (olddyncommon
1354       && newdyncommon
1355       && sym->st_size != h->size)
1356     {
1357       /* Since we think we have two common symbols, issue a multiple
1358 	 common warning if desired.  Note that we only warn if the
1359 	 size is different.  If the size is the same, we simply let
1360 	 the old symbol override the new one as normally happens with
1361 	 symbols defined in dynamic objects.  */
1362 
1363       if (! ((*info->callbacks->multiple_common)
1364 	     (info, h->root.root.string, oldbfd, bfd_link_hash_common,
1365 	      h->size, abfd, bfd_link_hash_common, sym->st_size)))
1366 	return FALSE;
1367 
1368       if (sym->st_size > h->size)
1369 	h->size = sym->st_size;
1370 
1371       *size_change_ok = TRUE;
1372     }
1373 
1374   /* If we are looking at a dynamic object, and we have found a
1375      definition, we need to see if the symbol was already defined by
1376      some other object.  If so, we want to use the existing
1377      definition, and we do not want to report a multiple symbol
1378      definition error; we do this by clobbering *PSEC to be
1379      bfd_und_section_ptr.
1380 
1381      We treat a common symbol as a definition if the symbol in the
1382      shared library is a function, since common symbols always
1383      represent variables; this can cause confusion in principle, but
1384      any such confusion would seem to indicate an erroneous program or
1385      shared library.  We also permit a common symbol in a regular
1386      object to override a weak symbol in a shared object.  */
1387 
1388   if (newdyn
1389       && newdef
1390       && (olddef
1391 	  || (h->root.type == bfd_link_hash_common
1392 	      && (newweak || newfunc))))
1393     {
1394       *override = TRUE;
1395       newdef = FALSE;
1396       newdyncommon = FALSE;
1397 
1398       *psec = sec = bfd_und_section_ptr;
1399       *size_change_ok = TRUE;
1400 
1401       /* If we get here when the old symbol is a common symbol, then
1402 	 we are explicitly letting it override a weak symbol or
1403 	 function in a dynamic object, and we don't want to warn about
1404 	 a type change.  If the old symbol is a defined symbol, a type
1405 	 change warning may still be appropriate.  */
1406 
1407       if (h->root.type == bfd_link_hash_common)
1408 	*type_change_ok = TRUE;
1409     }
1410 
1411   /* Handle the special case of an old common symbol merging with a
1412      new symbol which looks like a common symbol in a shared object.
1413      We change *PSEC and *PVALUE to make the new symbol look like a
1414      common symbol, and let _bfd_generic_link_add_one_symbol do the
1415      right thing.  */
1416 
1417   if (newdyncommon
1418       && h->root.type == bfd_link_hash_common)
1419     {
1420       *override = TRUE;
1421       newdef = FALSE;
1422       newdyncommon = FALSE;
1423       *pvalue = sym->st_size;
1424       *psec = sec = bed->common_section (oldsec);
1425       *size_change_ok = TRUE;
1426     }
1427 
1428   /* Skip weak definitions of symbols that are already defined.  */
1429   if (newdef && olddef && newweak)
1430     {
1431       *skip = TRUE;
1432 
1433       /* Merge st_other.  If the symbol already has a dynamic index,
1434 	 but visibility says it should not be visible, turn it into a
1435 	 local symbol.  */
1436       elf_merge_st_other (abfd, h, sym, newdef, newdyn);
1437       if (h->dynindx != -1)
1438 	switch (ELF_ST_VISIBILITY (h->other))
1439 	  {
1440 	  case STV_INTERNAL:
1441 	  case STV_HIDDEN:
1442 	    (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1443 	    break;
1444 	  }
1445     }
1446 
1447   /* If the old symbol is from a dynamic object, and the new symbol is
1448      a definition which is not from a dynamic object, then the new
1449      symbol overrides the old symbol.  Symbols from regular files
1450      always take precedence over symbols from dynamic objects, even if
1451      they are defined after the dynamic object in the link.
1452 
1453      As above, we again permit a common symbol in a regular object to
1454      override a definition in a shared object if the shared object
1455      symbol is a function or is weak.  */
1456 
1457   flip = NULL;
1458   if (!newdyn
1459       && (newdef
1460 	  || (bfd_is_com_section (sec)
1461 	      && (oldweak || oldfunc)))
1462       && olddyn
1463       && olddef
1464       && h->def_dynamic)
1465     {
1466       /* Change the hash table entry to undefined, and let
1467 	 _bfd_generic_link_add_one_symbol do the right thing with the
1468 	 new definition.  */
1469 
1470       h->root.type = bfd_link_hash_undefined;
1471       h->root.u.undef.abfd = h->root.u.def.section->owner;
1472       *size_change_ok = TRUE;
1473 
1474       olddef = FALSE;
1475       olddyncommon = FALSE;
1476 
1477       /* We again permit a type change when a common symbol may be
1478 	 overriding a function.  */
1479 
1480       if (bfd_is_com_section (sec))
1481 	{
1482 	  if (oldfunc)
1483 	    {
1484 	      /* If a common symbol overrides a function, make sure
1485 		 that it isn't defined dynamically nor has type
1486 		 function.  */
1487 	      h->def_dynamic = 0;
1488 	      h->type = STT_NOTYPE;
1489 	    }
1490 	  *type_change_ok = TRUE;
1491 	}
1492 
1493       if ((*sym_hash)->root.type == bfd_link_hash_indirect)
1494 	flip = *sym_hash;
1495       else
1496 	/* This union may have been set to be non-NULL when this symbol
1497 	   was seen in a dynamic object.  We must force the union to be
1498 	   NULL, so that it is correct for a regular symbol.  */
1499 	h->verinfo.vertree = NULL;
1500     }
1501 
1502   /* Handle the special case of a new common symbol merging with an
1503      old symbol that looks like it might be a common symbol defined in
1504      a shared object.  Note that we have already handled the case in
1505      which a new common symbol should simply override the definition
1506      in the shared library.  */
1507 
1508   if (! newdyn
1509       && bfd_is_com_section (sec)
1510       && olddyncommon)
1511     {
1512       /* It would be best if we could set the hash table entry to a
1513 	 common symbol, but we don't know what to use for the section
1514 	 or the alignment.  */
1515       if (! ((*info->callbacks->multiple_common)
1516 	     (info, h->root.root.string, oldbfd, bfd_link_hash_common,
1517 	      h->size, abfd, bfd_link_hash_common, sym->st_size)))
1518 	return FALSE;
1519 
1520       /* If the presumed common symbol in the dynamic object is
1521 	 larger, pretend that the new symbol has its size.  */
1522 
1523       if (h->size > *pvalue)
1524 	*pvalue = h->size;
1525 
1526       /* We need to remember the alignment required by the symbol
1527 	 in the dynamic object.  */
1528       BFD_ASSERT (pold_alignment);
1529       *pold_alignment = h->root.u.def.section->alignment_power;
1530 
1531       olddef = FALSE;
1532       olddyncommon = FALSE;
1533 
1534       h->root.type = bfd_link_hash_undefined;
1535       h->root.u.undef.abfd = h->root.u.def.section->owner;
1536 
1537       *size_change_ok = TRUE;
1538       *type_change_ok = TRUE;
1539 
1540       if ((*sym_hash)->root.type == bfd_link_hash_indirect)
1541 	flip = *sym_hash;
1542       else
1543 	h->verinfo.vertree = NULL;
1544     }
1545 
1546   if (flip != NULL)
1547     {
1548       /* Handle the case where we had a versioned symbol in a dynamic
1549 	 library and now find a definition in a normal object.  In this
1550 	 case, we make the versioned symbol point to the normal one.  */
1551       flip->root.type = h->root.type;
1552       flip->root.u.undef.abfd = h->root.u.undef.abfd;
1553       h->root.type = bfd_link_hash_indirect;
1554       h->root.u.i.link = (struct bfd_link_hash_entry *) flip;
1555       (*bed->elf_backend_copy_indirect_symbol) (info, flip, h);
1556       if (h->def_dynamic)
1557 	{
1558 	  h->def_dynamic = 0;
1559 	  flip->ref_dynamic = 1;
1560 	}
1561     }
1562 
1563   return TRUE;
1564 }
1565 
1566 /* This function is called to create an indirect symbol from the
1567    default for the symbol with the default version if needed. The
1568    symbol is described by H, NAME, SYM, PSEC, VALUE, and OVERRIDE.  We
1569    set DYNSYM if the new indirect symbol is dynamic.  */
1570 
1571 static bfd_boolean
1572 _bfd_elf_add_default_symbol (bfd *abfd,
1573 			     struct bfd_link_info *info,
1574 			     struct elf_link_hash_entry *h,
1575 			     const char *name,
1576 			     Elf_Internal_Sym *sym,
1577 			     asection **psec,
1578 			     bfd_vma *value,
1579 			     bfd_boolean *dynsym,
1580 			     bfd_boolean override)
1581 {
1582   bfd_boolean type_change_ok;
1583   bfd_boolean size_change_ok;
1584   bfd_boolean skip;
1585   char *shortname;
1586   struct elf_link_hash_entry *hi;
1587   struct bfd_link_hash_entry *bh;
1588   const struct elf_backend_data *bed;
1589   bfd_boolean collect;
1590   bfd_boolean dynamic;
1591   char *p;
1592   size_t len, shortlen;
1593   asection *sec;
1594 
1595   /* If this symbol has a version, and it is the default version, we
1596      create an indirect symbol from the default name to the fully
1597      decorated name.  This will cause external references which do not
1598      specify a version to be bound to this version of the symbol.  */
1599   p = strchr (name, ELF_VER_CHR);
1600   if (p == NULL || p[1] != ELF_VER_CHR)
1601     return TRUE;
1602 
1603   if (override)
1604     {
1605       /* We are overridden by an old definition. We need to check if we
1606 	 need to create the indirect symbol from the default name.  */
1607       hi = elf_link_hash_lookup (elf_hash_table (info), name, TRUE,
1608 				 FALSE, FALSE);
1609       BFD_ASSERT (hi != NULL);
1610       if (hi == h)
1611 	return TRUE;
1612       while (hi->root.type == bfd_link_hash_indirect
1613 	     || hi->root.type == bfd_link_hash_warning)
1614 	{
1615 	  hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1616 	  if (hi == h)
1617 	    return TRUE;
1618 	}
1619     }
1620 
1621   bed = get_elf_backend_data (abfd);
1622   collect = bed->collect;
1623   dynamic = (abfd->flags & DYNAMIC) != 0;
1624 
1625   shortlen = p - name;
1626   shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1);
1627   if (shortname == NULL)
1628     return FALSE;
1629   memcpy (shortname, name, shortlen);
1630   shortname[shortlen] = '\0';
1631 
1632   /* We are going to create a new symbol.  Merge it with any existing
1633      symbol with this name.  For the purposes of the merge, act as
1634      though we were defining the symbol we just defined, although we
1635      actually going to define an indirect symbol.  */
1636   type_change_ok = FALSE;
1637   size_change_ok = FALSE;
1638   sec = *psec;
1639   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value,
1640 			      NULL, &hi, &skip, &override,
1641 			      &type_change_ok, &size_change_ok))
1642     return FALSE;
1643 
1644   if (skip)
1645     goto nondefault;
1646 
1647   if (! override)
1648     {
1649       bh = &hi->root;
1650       if (! (_bfd_generic_link_add_one_symbol
1651 	     (info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr,
1652 	      0, name, FALSE, collect, &bh)))
1653 	return FALSE;
1654       hi = (struct elf_link_hash_entry *) bh;
1655     }
1656   else
1657     {
1658       /* In this case the symbol named SHORTNAME is overriding the
1659 	 indirect symbol we want to add.  We were planning on making
1660 	 SHORTNAME an indirect symbol referring to NAME.  SHORTNAME
1661 	 is the name without a version.  NAME is the fully versioned
1662 	 name, and it is the default version.
1663 
1664 	 Overriding means that we already saw a definition for the
1665 	 symbol SHORTNAME in a regular object, and it is overriding
1666 	 the symbol defined in the dynamic object.
1667 
1668 	 When this happens, we actually want to change NAME, the
1669 	 symbol we just added, to refer to SHORTNAME.  This will cause
1670 	 references to NAME in the shared object to become references
1671 	 to SHORTNAME in the regular object.  This is what we expect
1672 	 when we override a function in a shared object: that the
1673 	 references in the shared object will be mapped to the
1674 	 definition in the regular object.  */
1675 
1676       while (hi->root.type == bfd_link_hash_indirect
1677 	     || hi->root.type == bfd_link_hash_warning)
1678 	hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1679 
1680       h->root.type = bfd_link_hash_indirect;
1681       h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1682       if (h->def_dynamic)
1683 	{
1684 	  h->def_dynamic = 0;
1685 	  hi->ref_dynamic = 1;
1686 	  if (hi->ref_regular
1687 	      || hi->def_regular)
1688 	    {
1689 	      if (! bfd_elf_link_record_dynamic_symbol (info, hi))
1690 		return FALSE;
1691 	    }
1692 	}
1693 
1694       /* Now set HI to H, so that the following code will set the
1695 	 other fields correctly.  */
1696       hi = h;
1697     }
1698 
1699   /* Check if HI is a warning symbol.  */
1700   if (hi->root.type == bfd_link_hash_warning)
1701     hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1702 
1703   /* If there is a duplicate definition somewhere, then HI may not
1704      point to an indirect symbol.  We will have reported an error to
1705      the user in that case.  */
1706 
1707   if (hi->root.type == bfd_link_hash_indirect)
1708     {
1709       struct elf_link_hash_entry *ht;
1710 
1711       ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
1712       (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi);
1713 
1714       /* See if the new flags lead us to realize that the symbol must
1715 	 be dynamic.  */
1716       if (! *dynsym)
1717 	{
1718 	  if (! dynamic)
1719 	    {
1720 	      if (! info->executable
1721 		  || hi->ref_dynamic)
1722 		*dynsym = TRUE;
1723 	    }
1724 	  else
1725 	    {
1726 	      if (hi->ref_regular)
1727 		*dynsym = TRUE;
1728 	    }
1729 	}
1730     }
1731 
1732   /* We also need to define an indirection from the nondefault version
1733      of the symbol.  */
1734 
1735 nondefault:
1736   len = strlen (name);
1737   shortname = (char *) bfd_hash_allocate (&info->hash->table, len);
1738   if (shortname == NULL)
1739     return FALSE;
1740   memcpy (shortname, name, shortlen);
1741   memcpy (shortname + shortlen, p + 1, len - shortlen);
1742 
1743   /* Once again, merge with any existing symbol.  */
1744   type_change_ok = FALSE;
1745   size_change_ok = FALSE;
1746   sec = *psec;
1747   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value,
1748 			      NULL, &hi, &skip, &override,
1749 			      &type_change_ok, &size_change_ok))
1750     return FALSE;
1751 
1752   if (skip)
1753     return TRUE;
1754 
1755   if (override)
1756     {
1757       /* Here SHORTNAME is a versioned name, so we don't expect to see
1758 	 the type of override we do in the case above unless it is
1759 	 overridden by a versioned definition.  */
1760       if (hi->root.type != bfd_link_hash_defined
1761 	  && hi->root.type != bfd_link_hash_defweak)
1762 	(*_bfd_error_handler)
1763 	  (_("%B: unexpected redefinition of indirect versioned symbol `%s'"),
1764 	   abfd, shortname);
1765     }
1766   else
1767     {
1768       bh = &hi->root;
1769       if (! (_bfd_generic_link_add_one_symbol
1770 	     (info, abfd, shortname, BSF_INDIRECT,
1771 	      bfd_ind_section_ptr, 0, name, FALSE, collect, &bh)))
1772 	return FALSE;
1773       hi = (struct elf_link_hash_entry *) bh;
1774 
1775       /* If there is a duplicate definition somewhere, then HI may not
1776 	 point to an indirect symbol.  We will have reported an error
1777 	 to the user in that case.  */
1778 
1779       if (hi->root.type == bfd_link_hash_indirect)
1780 	{
1781 	  (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
1782 
1783 	  /* See if the new flags lead us to realize that the symbol
1784 	     must be dynamic.  */
1785 	  if (! *dynsym)
1786 	    {
1787 	      if (! dynamic)
1788 		{
1789 		  if (! info->executable
1790 		      || hi->ref_dynamic)
1791 		    *dynsym = TRUE;
1792 		}
1793 	      else
1794 		{
1795 		  if (hi->ref_regular)
1796 		    *dynsym = TRUE;
1797 		}
1798 	    }
1799 	}
1800     }
1801 
1802   return TRUE;
1803 }
1804 
1805 /* This routine is used to export all defined symbols into the dynamic
1806    symbol table.  It is called via elf_link_hash_traverse.  */
1807 
1808 static bfd_boolean
1809 _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
1810 {
1811   struct elf_info_failed *eif = (struct elf_info_failed *) data;
1812 
1813   /* Ignore this if we won't export it.  */
1814   if (!eif->info->export_dynamic && !h->dynamic)
1815     return TRUE;
1816 
1817   /* Ignore indirect symbols.  These are added by the versioning code.  */
1818   if (h->root.type == bfd_link_hash_indirect)
1819     return TRUE;
1820 
1821   if (h->root.type == bfd_link_hash_warning)
1822     h = (struct elf_link_hash_entry *) h->root.u.i.link;
1823 
1824   if (h->dynindx == -1
1825       && (h->def_regular
1826 	  || h->ref_regular))
1827     {
1828       bfd_boolean hide;
1829 
1830       if (eif->verdefs == NULL
1831 	  || (bfd_find_version_for_sym (eif->verdefs, h->root.root.string, &hide)
1832 	      && !hide))
1833 	{
1834 	  if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
1835 	    {
1836 	      eif->failed = TRUE;
1837 	      return FALSE;
1838 	    }
1839 	}
1840     }
1841 
1842   return TRUE;
1843 }
1844 
1845 /* Look through the symbols which are defined in other shared
1846    libraries and referenced here.  Update the list of version
1847    dependencies.  This will be put into the .gnu.version_r section.
1848    This function is called via elf_link_hash_traverse.  */
1849 
1850 static bfd_boolean
1851 _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h,
1852 					 void *data)
1853 {
1854   struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
1855   Elf_Internal_Verneed *t;
1856   Elf_Internal_Vernaux *a;
1857   bfd_size_type amt;
1858 
1859   if (h->root.type == bfd_link_hash_warning)
1860     h = (struct elf_link_hash_entry *) h->root.u.i.link;
1861 
1862   /* We only care about symbols defined in shared objects with version
1863      information.  */
1864   if (!h->def_dynamic
1865       || h->def_regular
1866       || h->dynindx == -1
1867       || h->verinfo.verdef == NULL)
1868     return TRUE;
1869 
1870   /* See if we already know about this version.  */
1871   for (t = elf_tdata (rinfo->info->output_bfd)->verref;
1872        t != NULL;
1873        t = t->vn_nextref)
1874     {
1875       if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
1876 	continue;
1877 
1878       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1879 	if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
1880 	  return TRUE;
1881 
1882       break;
1883     }
1884 
1885   /* This is a new version.  Add it to tree we are building.  */
1886 
1887   if (t == NULL)
1888     {
1889       amt = sizeof *t;
1890       t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt);
1891       if (t == NULL)
1892 	{
1893 	  rinfo->failed = TRUE;
1894 	  return FALSE;
1895 	}
1896 
1897       t->vn_bfd = h->verinfo.verdef->vd_bfd;
1898       t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref;
1899       elf_tdata (rinfo->info->output_bfd)->verref = t;
1900     }
1901 
1902   amt = sizeof *a;
1903   a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
1904   if (a == NULL)
1905     {
1906       rinfo->failed = TRUE;
1907       return FALSE;
1908     }
1909 
1910   /* Note that we are copying a string pointer here, and testing it
1911      above.  If bfd_elf_string_from_elf_section is ever changed to
1912      discard the string data when low in memory, this will have to be
1913      fixed.  */
1914   a->vna_nodename = h->verinfo.verdef->vd_nodename;
1915 
1916   a->vna_flags = h->verinfo.verdef->vd_flags;
1917   a->vna_nextptr = t->vn_auxptr;
1918 
1919   h->verinfo.verdef->vd_exp_refno = rinfo->vers;
1920   ++rinfo->vers;
1921 
1922   a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
1923 
1924   t->vn_auxptr = a;
1925 
1926   return TRUE;
1927 }
1928 
1929 /* Figure out appropriate versions for all the symbols.  We may not
1930    have the version number script until we have read all of the input
1931    files, so until that point we don't know which symbols should be
1932    local.  This function is called via elf_link_hash_traverse.  */
1933 
1934 static bfd_boolean
1935 _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
1936 {
1937   struct elf_info_failed *sinfo;
1938   struct bfd_link_info *info;
1939   const struct elf_backend_data *bed;
1940   struct elf_info_failed eif;
1941   char *p;
1942   bfd_size_type amt;
1943 
1944   sinfo = (struct elf_info_failed *) data;
1945   info = sinfo->info;
1946 
1947   if (h->root.type == bfd_link_hash_warning)
1948     h = (struct elf_link_hash_entry *) h->root.u.i.link;
1949 
1950   /* Fix the symbol flags.  */
1951   eif.failed = FALSE;
1952   eif.info = info;
1953   if (! _bfd_elf_fix_symbol_flags (h, &eif))
1954     {
1955       if (eif.failed)
1956 	sinfo->failed = TRUE;
1957       return FALSE;
1958     }
1959 
1960   /* We only need version numbers for symbols defined in regular
1961      objects.  */
1962   if (!h->def_regular)
1963     return TRUE;
1964 
1965   bed = get_elf_backend_data (info->output_bfd);
1966   p = strchr (h->root.root.string, ELF_VER_CHR);
1967   if (p != NULL && h->verinfo.vertree == NULL)
1968     {
1969       struct bfd_elf_version_tree *t;
1970       bfd_boolean hidden;
1971 
1972       hidden = TRUE;
1973 
1974       /* There are two consecutive ELF_VER_CHR characters if this is
1975 	 not a hidden symbol.  */
1976       ++p;
1977       if (*p == ELF_VER_CHR)
1978 	{
1979 	  hidden = FALSE;
1980 	  ++p;
1981 	}
1982 
1983       /* If there is no version string, we can just return out.  */
1984       if (*p == '\0')
1985 	{
1986 	  if (hidden)
1987 	    h->hidden = 1;
1988 	  return TRUE;
1989 	}
1990 
1991       /* Look for the version.  If we find it, it is no longer weak.  */
1992       for (t = sinfo->verdefs; t != NULL; t = t->next)
1993 	{
1994 	  if (strcmp (t->name, p) == 0)
1995 	    {
1996 	      size_t len;
1997 	      char *alc;
1998 	      struct bfd_elf_version_expr *d;
1999 
2000 	      len = p - h->root.root.string;
2001 	      alc = (char *) bfd_malloc (len);
2002 	      if (alc == NULL)
2003 		{
2004 		  sinfo->failed = TRUE;
2005 		  return FALSE;
2006 		}
2007 	      memcpy (alc, h->root.root.string, len - 1);
2008 	      alc[len - 1] = '\0';
2009 	      if (alc[len - 2] == ELF_VER_CHR)
2010 		alc[len - 2] = '\0';
2011 
2012 	      h->verinfo.vertree = t;
2013 	      t->used = TRUE;
2014 	      d = NULL;
2015 
2016 	      if (t->globals.list != NULL)
2017 		d = (*t->match) (&t->globals, NULL, alc);
2018 
2019 	      /* See if there is anything to force this symbol to
2020 		 local scope.  */
2021 	      if (d == NULL && t->locals.list != NULL)
2022 		{
2023 		  d = (*t->match) (&t->locals, NULL, alc);
2024 		  if (d != NULL
2025 		      && h->dynindx != -1
2026 		      && ! info->export_dynamic)
2027 		    (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2028 		}
2029 
2030 	      free (alc);
2031 	      break;
2032 	    }
2033 	}
2034 
2035       /* If we are building an application, we need to create a
2036 	 version node for this version.  */
2037       if (t == NULL && info->executable)
2038 	{
2039 	  struct bfd_elf_version_tree **pp;
2040 	  int version_index;
2041 
2042 	  /* If we aren't going to export this symbol, we don't need
2043 	     to worry about it.  */
2044 	  if (h->dynindx == -1)
2045 	    return TRUE;
2046 
2047 	  amt = sizeof *t;
2048 	  t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd, amt);
2049 	  if (t == NULL)
2050 	    {
2051 	      sinfo->failed = TRUE;
2052 	      return FALSE;
2053 	    }
2054 
2055 	  t->name = p;
2056 	  t->name_indx = (unsigned int) -1;
2057 	  t->used = TRUE;
2058 
2059 	  version_index = 1;
2060 	  /* Don't count anonymous version tag.  */
2061 	  if (sinfo->verdefs != NULL && sinfo->verdefs->vernum == 0)
2062 	    version_index = 0;
2063 	  for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next)
2064 	    ++version_index;
2065 	  t->vernum = version_index;
2066 
2067 	  *pp = t;
2068 
2069 	  h->verinfo.vertree = t;
2070 	}
2071       else if (t == NULL)
2072 	{
2073 	  /* We could not find the version for a symbol when
2074 	     generating a shared archive.  Return an error.  */
2075 	  (*_bfd_error_handler)
2076 	    (_("%B: version node not found for symbol %s"),
2077 	     info->output_bfd, h->root.root.string);
2078 	  bfd_set_error (bfd_error_bad_value);
2079 	  sinfo->failed = TRUE;
2080 	  return FALSE;
2081 	}
2082 
2083       if (hidden)
2084 	h->hidden = 1;
2085     }
2086 
2087   /* If we don't have a version for this symbol, see if we can find
2088      something.  */
2089   if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL)
2090     {
2091       bfd_boolean hide;
2092 
2093       h->verinfo.vertree = bfd_find_version_for_sym (sinfo->verdefs,
2094 						 h->root.root.string, &hide);
2095       if (h->verinfo.vertree != NULL && hide)
2096 	(*bed->elf_backend_hide_symbol) (info, h, TRUE);
2097     }
2098 
2099   return TRUE;
2100 }
2101 
2102 /* Read and swap the relocs from the section indicated by SHDR.  This
2103    may be either a REL or a RELA section.  The relocations are
2104    translated into RELA relocations and stored in INTERNAL_RELOCS,
2105    which should have already been allocated to contain enough space.
2106    The EXTERNAL_RELOCS are a buffer where the external form of the
2107    relocations should be stored.
2108 
2109    Returns FALSE if something goes wrong.  */
2110 
2111 static bfd_boolean
2112 elf_link_read_relocs_from_section (bfd *abfd,
2113 				   asection *sec,
2114 				   Elf_Internal_Shdr *shdr,
2115 				   void *external_relocs,
2116 				   Elf_Internal_Rela *internal_relocs)
2117 {
2118   const struct elf_backend_data *bed;
2119   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
2120   const bfd_byte *erela;
2121   const bfd_byte *erelaend;
2122   Elf_Internal_Rela *irela;
2123   Elf_Internal_Shdr *symtab_hdr;
2124   size_t nsyms;
2125 
2126   /* Position ourselves at the start of the section.  */
2127   if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
2128     return FALSE;
2129 
2130   /* Read the relocations.  */
2131   if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
2132     return FALSE;
2133 
2134   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2135   nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
2136 
2137   bed = get_elf_backend_data (abfd);
2138 
2139   /* Convert the external relocations to the internal format.  */
2140   if (shdr->sh_entsize == bed->s->sizeof_rel)
2141     swap_in = bed->s->swap_reloc_in;
2142   else if (shdr->sh_entsize == bed->s->sizeof_rela)
2143     swap_in = bed->s->swap_reloca_in;
2144   else
2145     {
2146       bfd_set_error (bfd_error_wrong_format);
2147       return FALSE;
2148     }
2149 
2150   erela = (const bfd_byte *) external_relocs;
2151   erelaend = erela + shdr->sh_size;
2152   irela = internal_relocs;
2153   while (erela < erelaend)
2154     {
2155       bfd_vma r_symndx;
2156 
2157       (*swap_in) (abfd, erela, irela);
2158       r_symndx = ELF32_R_SYM (irela->r_info);
2159       if (bed->s->arch_size == 64)
2160 	r_symndx >>= 24;
2161       if (nsyms > 0)
2162 	{
2163 	  if ((size_t) r_symndx >= nsyms)
2164 	    {
2165 	      (*_bfd_error_handler)
2166 		(_("%B: bad reloc symbol index (0x%lx >= 0x%lx)"
2167 		   " for offset 0x%lx in section `%A'"),
2168 		 abfd, sec,
2169 		 (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset);
2170 	      bfd_set_error (bfd_error_bad_value);
2171 	      return FALSE;
2172 	    }
2173 	}
2174       else if (r_symndx != STN_UNDEF)
2175 	{
2176 	  (*_bfd_error_handler)
2177 	    (_("%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A'"
2178 	       " when the object file has no symbol table"),
2179 	     abfd, sec,
2180 	     (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset);
2181 	  bfd_set_error (bfd_error_bad_value);
2182 	  return FALSE;
2183 	}
2184       irela += bed->s->int_rels_per_ext_rel;
2185       erela += shdr->sh_entsize;
2186     }
2187 
2188   return TRUE;
2189 }
2190 
2191 /* Read and swap the relocs for a section O.  They may have been
2192    cached.  If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are
2193    not NULL, they are used as buffers to read into.  They are known to
2194    be large enough.  If the INTERNAL_RELOCS relocs argument is NULL,
2195    the return value is allocated using either malloc or bfd_alloc,
2196    according to the KEEP_MEMORY argument.  If O has two relocation
2197    sections (both REL and RELA relocations), then the REL_HDR
2198    relocations will appear first in INTERNAL_RELOCS, followed by the
2199    RELA_HDR relocations.  */
2200 
2201 Elf_Internal_Rela *
2202 _bfd_elf_link_read_relocs (bfd *abfd,
2203 			   asection *o,
2204 			   void *external_relocs,
2205 			   Elf_Internal_Rela *internal_relocs,
2206 			   bfd_boolean keep_memory)
2207 {
2208   void *alloc1 = NULL;
2209   Elf_Internal_Rela *alloc2 = NULL;
2210   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2211   struct bfd_elf_section_data *esdo = elf_section_data (o);
2212   Elf_Internal_Rela *internal_rela_relocs;
2213 
2214   if (esdo->relocs != NULL)
2215     return esdo->relocs;
2216 
2217   if (o->reloc_count == 0)
2218     return NULL;
2219 
2220   if (internal_relocs == NULL)
2221     {
2222       bfd_size_type size;
2223 
2224       size = o->reloc_count;
2225       size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela);
2226       if (keep_memory)
2227 	internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
2228       else
2229 	internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
2230       if (internal_relocs == NULL)
2231 	goto error_return;
2232     }
2233 
2234   if (external_relocs == NULL)
2235     {
2236       bfd_size_type size = 0;
2237 
2238       if (esdo->rel.hdr)
2239 	size += esdo->rel.hdr->sh_size;
2240       if (esdo->rela.hdr)
2241 	size += esdo->rela.hdr->sh_size;
2242 
2243       alloc1 = bfd_malloc (size);
2244       if (alloc1 == NULL)
2245 	goto error_return;
2246       external_relocs = alloc1;
2247     }
2248 
2249   internal_rela_relocs = internal_relocs;
2250   if (esdo->rel.hdr)
2251     {
2252       if (!elf_link_read_relocs_from_section (abfd, o, esdo->rel.hdr,
2253 					      external_relocs,
2254 					      internal_relocs))
2255 	goto error_return;
2256       external_relocs = (((bfd_byte *) external_relocs)
2257 			 + esdo->rel.hdr->sh_size);
2258       internal_rela_relocs += (NUM_SHDR_ENTRIES (esdo->rel.hdr)
2259 			       * bed->s->int_rels_per_ext_rel);
2260     }
2261 
2262   if (esdo->rela.hdr
2263       && (!elf_link_read_relocs_from_section (abfd, o, esdo->rela.hdr,
2264 					      external_relocs,
2265 					      internal_rela_relocs)))
2266     goto error_return;
2267 
2268   /* Cache the results for next time, if we can.  */
2269   if (keep_memory)
2270     esdo->relocs = internal_relocs;
2271 
2272   if (alloc1 != NULL)
2273     free (alloc1);
2274 
2275   /* Don't free alloc2, since if it was allocated we are passing it
2276      back (under the name of internal_relocs).  */
2277 
2278   return internal_relocs;
2279 
2280  error_return:
2281   if (alloc1 != NULL)
2282     free (alloc1);
2283   if (alloc2 != NULL)
2284     {
2285       if (keep_memory)
2286 	bfd_release (abfd, alloc2);
2287       else
2288 	free (alloc2);
2289     }
2290   return NULL;
2291 }
2292 
2293 /* Compute the size of, and allocate space for, REL_HDR which is the
2294    section header for a section containing relocations for O.  */
2295 
2296 static bfd_boolean
2297 _bfd_elf_link_size_reloc_section (bfd *abfd,
2298 				  struct bfd_elf_section_reloc_data *reldata)
2299 {
2300   Elf_Internal_Shdr *rel_hdr = reldata->hdr;
2301 
2302   /* That allows us to calculate the size of the section.  */
2303   rel_hdr->sh_size = rel_hdr->sh_entsize * reldata->count;
2304 
2305   /* The contents field must last into write_object_contents, so we
2306      allocate it with bfd_alloc rather than malloc.  Also since we
2307      cannot be sure that the contents will actually be filled in,
2308      we zero the allocated space.  */
2309   rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size);
2310   if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
2311     return FALSE;
2312 
2313   if (reldata->hashes == NULL && reldata->count)
2314     {
2315       struct elf_link_hash_entry **p;
2316 
2317       p = (struct elf_link_hash_entry **)
2318           bfd_zmalloc (reldata->count * sizeof (struct elf_link_hash_entry *));
2319       if (p == NULL)
2320 	return FALSE;
2321 
2322       reldata->hashes = p;
2323     }
2324 
2325   return TRUE;
2326 }
2327 
2328 /* Copy the relocations indicated by the INTERNAL_RELOCS (which
2329    originated from the section given by INPUT_REL_HDR) to the
2330    OUTPUT_BFD.  */
2331 
2332 bfd_boolean
2333 _bfd_elf_link_output_relocs (bfd *output_bfd,
2334 			     asection *input_section,
2335 			     Elf_Internal_Shdr *input_rel_hdr,
2336 			     Elf_Internal_Rela *internal_relocs,
2337 			     struct elf_link_hash_entry **rel_hash
2338 			       ATTRIBUTE_UNUSED)
2339 {
2340   Elf_Internal_Rela *irela;
2341   Elf_Internal_Rela *irelaend;
2342   bfd_byte *erel;
2343   struct bfd_elf_section_reloc_data *output_reldata;
2344   asection *output_section;
2345   const struct elf_backend_data *bed;
2346   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
2347   struct bfd_elf_section_data *esdo;
2348 
2349   output_section = input_section->output_section;
2350 
2351   bed = get_elf_backend_data (output_bfd);
2352   esdo = elf_section_data (output_section);
2353   if (esdo->rel.hdr && esdo->rel.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2354     {
2355       output_reldata = &esdo->rel;
2356       swap_out = bed->s->swap_reloc_out;
2357     }
2358   else if (esdo->rela.hdr
2359 	   && esdo->rela.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2360     {
2361       output_reldata = &esdo->rela;
2362       swap_out = bed->s->swap_reloca_out;
2363     }
2364   else
2365     {
2366       (*_bfd_error_handler)
2367 	(_("%B: relocation size mismatch in %B section %A"),
2368 	 output_bfd, input_section->owner, input_section);
2369       bfd_set_error (bfd_error_wrong_format);
2370       return FALSE;
2371     }
2372 
2373   erel = output_reldata->hdr->contents;
2374   erel += output_reldata->count * input_rel_hdr->sh_entsize;
2375   irela = internal_relocs;
2376   irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr)
2377 		      * bed->s->int_rels_per_ext_rel);
2378   while (irela < irelaend)
2379     {
2380       (*swap_out) (output_bfd, irela, erel);
2381       irela += bed->s->int_rels_per_ext_rel;
2382       erel += input_rel_hdr->sh_entsize;
2383     }
2384 
2385   /* Bump the counter, so that we know where to add the next set of
2386      relocations.  */
2387   output_reldata->count += NUM_SHDR_ENTRIES (input_rel_hdr);
2388 
2389   return TRUE;
2390 }
2391 
2392 /* Make weak undefined symbols in PIE dynamic.  */
2393 
2394 bfd_boolean
2395 _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info,
2396 				 struct elf_link_hash_entry *h)
2397 {
2398   if (info->pie
2399       && h->dynindx == -1
2400       && h->root.type == bfd_link_hash_undefweak)
2401     return bfd_elf_link_record_dynamic_symbol (info, h);
2402 
2403   return TRUE;
2404 }
2405 
2406 /* Fix up the flags for a symbol.  This handles various cases which
2407    can only be fixed after all the input files are seen.  This is
2408    currently called by both adjust_dynamic_symbol and
2409    assign_sym_version, which is unnecessary but perhaps more robust in
2410    the face of future changes.  */
2411 
2412 static bfd_boolean
2413 _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
2414 			   struct elf_info_failed *eif)
2415 {
2416   const struct elf_backend_data *bed;
2417 
2418   /* If this symbol was mentioned in a non-ELF file, try to set
2419      DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
2420      permit a non-ELF file to correctly refer to a symbol defined in
2421      an ELF dynamic object.  */
2422   if (h->non_elf)
2423     {
2424       while (h->root.type == bfd_link_hash_indirect)
2425 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
2426 
2427       if (h->root.type != bfd_link_hash_defined
2428 	  && h->root.type != bfd_link_hash_defweak)
2429 	{
2430 	  h->ref_regular = 1;
2431 	  h->ref_regular_nonweak = 1;
2432 	}
2433       else
2434 	{
2435 	  if (h->root.u.def.section->owner != NULL
2436 	      && (bfd_get_flavour (h->root.u.def.section->owner)
2437 		  == bfd_target_elf_flavour))
2438 	    {
2439 	      h->ref_regular = 1;
2440 	      h->ref_regular_nonweak = 1;
2441 	    }
2442 	  else
2443 	    h->def_regular = 1;
2444 	}
2445 
2446       if (h->dynindx == -1
2447 	  && (h->def_dynamic
2448 	      || h->ref_dynamic))
2449 	{
2450 	  if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2451 	    {
2452 	      eif->failed = TRUE;
2453 	      return FALSE;
2454 	    }
2455 	}
2456     }
2457   else
2458     {
2459       /* Unfortunately, NON_ELF is only correct if the symbol
2460 	 was first seen in a non-ELF file.  Fortunately, if the symbol
2461 	 was first seen in an ELF file, we're probably OK unless the
2462 	 symbol was defined in a non-ELF file.  Catch that case here.
2463 	 FIXME: We're still in trouble if the symbol was first seen in
2464 	 a dynamic object, and then later in a non-ELF regular object.  */
2465       if ((h->root.type == bfd_link_hash_defined
2466 	   || h->root.type == bfd_link_hash_defweak)
2467 	  && !h->def_regular
2468 	  && (h->root.u.def.section->owner != NULL
2469 	      ? (bfd_get_flavour (h->root.u.def.section->owner)
2470 		 != bfd_target_elf_flavour)
2471 	      : (bfd_is_abs_section (h->root.u.def.section)
2472 		 && !h->def_dynamic)))
2473 	h->def_regular = 1;
2474     }
2475 
2476   /* Backend specific symbol fixup.  */
2477   bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
2478   if (bed->elf_backend_fixup_symbol
2479       && !(*bed->elf_backend_fixup_symbol) (eif->info, h))
2480     return FALSE;
2481 
2482   /* If this is a final link, and the symbol was defined as a common
2483      symbol in a regular object file, and there was no definition in
2484      any dynamic object, then the linker will have allocated space for
2485      the symbol in a common section but the DEF_REGULAR
2486      flag will not have been set.  */
2487   if (h->root.type == bfd_link_hash_defined
2488       && !h->def_regular
2489       && h->ref_regular
2490       && !h->def_dynamic
2491       && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
2492     h->def_regular = 1;
2493 
2494   /* If -Bsymbolic was used (which means to bind references to global
2495      symbols to the definition within the shared object), and this
2496      symbol was defined in a regular object, then it actually doesn't
2497      need a PLT entry.  Likewise, if the symbol has non-default
2498      visibility.  If the symbol has hidden or internal visibility, we
2499      will force it local.  */
2500   if (h->needs_plt
2501       && eif->info->shared
2502       && is_elf_hash_table (eif->info->hash)
2503       && (SYMBOLIC_BIND (eif->info, h)
2504 	  || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
2505       && h->def_regular)
2506     {
2507       bfd_boolean force_local;
2508 
2509       force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
2510 		     || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
2511       (*bed->elf_backend_hide_symbol) (eif->info, h, force_local);
2512     }
2513 
2514   /* If a weak undefined symbol has non-default visibility, we also
2515      hide it from the dynamic linker.  */
2516   if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2517       && h->root.type == bfd_link_hash_undefweak)
2518     (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2519 
2520   /* If this is a weak defined symbol in a dynamic object, and we know
2521      the real definition in the dynamic object, copy interesting flags
2522      over to the real definition.  */
2523   if (h->u.weakdef != NULL)
2524     {
2525       struct elf_link_hash_entry *weakdef;
2526 
2527       weakdef = h->u.weakdef;
2528       if (h->root.type == bfd_link_hash_indirect)
2529 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
2530 
2531       BFD_ASSERT (h->root.type == bfd_link_hash_defined
2532 		  || h->root.type == bfd_link_hash_defweak);
2533       BFD_ASSERT (weakdef->def_dynamic);
2534 
2535       /* If the real definition is defined by a regular object file,
2536 	 don't do anything special.  See the longer description in
2537 	 _bfd_elf_adjust_dynamic_symbol, below.  */
2538       if (weakdef->def_regular)
2539 	h->u.weakdef = NULL;
2540       else
2541 	{
2542 	  BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
2543 		      || weakdef->root.type == bfd_link_hash_defweak);
2544 	  (*bed->elf_backend_copy_indirect_symbol) (eif->info, weakdef, h);
2545 	}
2546     }
2547 
2548   return TRUE;
2549 }
2550 
2551 /* Make the backend pick a good value for a dynamic symbol.  This is
2552    called via elf_link_hash_traverse, and also calls itself
2553    recursively.  */
2554 
2555 static bfd_boolean
2556 _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
2557 {
2558   struct elf_info_failed *eif = (struct elf_info_failed *) data;
2559   bfd *dynobj;
2560   const struct elf_backend_data *bed;
2561 
2562   if (! is_elf_hash_table (eif->info->hash))
2563     return FALSE;
2564 
2565   if (h->root.type == bfd_link_hash_warning)
2566     {
2567       h->got = elf_hash_table (eif->info)->init_got_offset;
2568       h->plt = elf_hash_table (eif->info)->init_plt_offset;
2569 
2570       /* When warning symbols are created, they **replace** the "real"
2571 	 entry in the hash table, thus we never get to see the real
2572 	 symbol in a hash traversal.  So look at it now.  */
2573       h = (struct elf_link_hash_entry *) h->root.u.i.link;
2574     }
2575 
2576   /* Ignore indirect symbols.  These are added by the versioning code.  */
2577   if (h->root.type == bfd_link_hash_indirect)
2578     return TRUE;
2579 
2580   /* Fix the symbol flags.  */
2581   if (! _bfd_elf_fix_symbol_flags (h, eif))
2582     return FALSE;
2583 
2584   /* If this symbol does not require a PLT entry, and it is not
2585      defined by a dynamic object, or is not referenced by a regular
2586      object, ignore it.  We do have to handle a weak defined symbol,
2587      even if no regular object refers to it, if we decided to add it
2588      to the dynamic symbol table.  FIXME: Do we normally need to worry
2589      about symbols which are defined by one dynamic object and
2590      referenced by another one?  */
2591   if (!h->needs_plt
2592       && h->type != STT_GNU_IFUNC
2593       && (h->def_regular
2594 	  || !h->def_dynamic
2595 	  || (!h->ref_regular
2596 	      && (h->u.weakdef == NULL || h->u.weakdef->dynindx == -1))))
2597     {
2598       h->plt = elf_hash_table (eif->info)->init_plt_offset;
2599       return TRUE;
2600     }
2601 
2602   /* If we've already adjusted this symbol, don't do it again.  This
2603      can happen via a recursive call.  */
2604   if (h->dynamic_adjusted)
2605     return TRUE;
2606 
2607   /* Don't look at this symbol again.  Note that we must set this
2608      after checking the above conditions, because we may look at a
2609      symbol once, decide not to do anything, and then get called
2610      recursively later after REF_REGULAR is set below.  */
2611   h->dynamic_adjusted = 1;
2612 
2613   /* If this is a weak definition, and we know a real definition, and
2614      the real symbol is not itself defined by a regular object file,
2615      then get a good value for the real definition.  We handle the
2616      real symbol first, for the convenience of the backend routine.
2617 
2618      Note that there is a confusing case here.  If the real definition
2619      is defined by a regular object file, we don't get the real symbol
2620      from the dynamic object, but we do get the weak symbol.  If the
2621      processor backend uses a COPY reloc, then if some routine in the
2622      dynamic object changes the real symbol, we will not see that
2623      change in the corresponding weak symbol.  This is the way other
2624      ELF linkers work as well, and seems to be a result of the shared
2625      library model.
2626 
2627      I will clarify this issue.  Most SVR4 shared libraries define the
2628      variable _timezone and define timezone as a weak synonym.  The
2629      tzset call changes _timezone.  If you write
2630        extern int timezone;
2631        int _timezone = 5;
2632        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
2633      you might expect that, since timezone is a synonym for _timezone,
2634      the same number will print both times.  However, if the processor
2635      backend uses a COPY reloc, then actually timezone will be copied
2636      into your process image, and, since you define _timezone
2637      yourself, _timezone will not.  Thus timezone and _timezone will
2638      wind up at different memory locations.  The tzset call will set
2639      _timezone, leaving timezone unchanged.  */
2640 
2641   if (h->u.weakdef != NULL)
2642     {
2643       /* If we get to this point, we know there is an implicit
2644 	 reference by a regular object file via the weak symbol H.
2645 	 FIXME: Is this really true?  What if the traversal finds
2646 	 H->U.WEAKDEF before it finds H?  */
2647       h->u.weakdef->ref_regular = 1;
2648 
2649       if (! _bfd_elf_adjust_dynamic_symbol (h->u.weakdef, eif))
2650 	return FALSE;
2651     }
2652 
2653   /* If a symbol has no type and no size and does not require a PLT
2654      entry, then we are probably about to do the wrong thing here: we
2655      are probably going to create a COPY reloc for an empty object.
2656      This case can arise when a shared object is built with assembly
2657      code, and the assembly code fails to set the symbol type.  */
2658   if (h->size == 0
2659       && h->type == STT_NOTYPE
2660       && !h->needs_plt)
2661     (*_bfd_error_handler)
2662       (_("warning: type and size of dynamic symbol `%s' are not defined"),
2663        h->root.root.string);
2664 
2665   dynobj = elf_hash_table (eif->info)->dynobj;
2666   bed = get_elf_backend_data (dynobj);
2667 
2668   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
2669     {
2670       eif->failed = TRUE;
2671       return FALSE;
2672     }
2673 
2674   return TRUE;
2675 }
2676 
2677 /* Adjust the dynamic symbol, H, for copy in the dynamic bss section,
2678    DYNBSS.  */
2679 
2680 bfd_boolean
2681 _bfd_elf_adjust_dynamic_copy (struct elf_link_hash_entry *h,
2682 			      asection *dynbss)
2683 {
2684   unsigned int power_of_two;
2685   bfd_vma mask;
2686   asection *sec = h->root.u.def.section;
2687 
2688   /* The section aligment of definition is the maximum alignment
2689      requirement of symbols defined in the section.  Since we don't
2690      know the symbol alignment requirement, we start with the
2691      maximum alignment and check low bits of the symbol address
2692      for the minimum alignment.  */
2693   power_of_two = bfd_get_section_alignment (sec->owner, sec);
2694   mask = ((bfd_vma) 1 << power_of_two) - 1;
2695   while ((h->root.u.def.value & mask) != 0)
2696     {
2697        mask >>= 1;
2698        --power_of_two;
2699     }
2700 
2701   if (power_of_two > bfd_get_section_alignment (dynbss->owner,
2702 						dynbss))
2703     {
2704       /* Adjust the section alignment if needed.  */
2705       if (! bfd_set_section_alignment (dynbss->owner, dynbss,
2706 				       power_of_two))
2707 	return FALSE;
2708     }
2709 
2710   /* We make sure that the symbol will be aligned properly.  */
2711   dynbss->size = BFD_ALIGN (dynbss->size, mask + 1);
2712 
2713   /* Define the symbol as being at this point in DYNBSS.  */
2714   h->root.u.def.section = dynbss;
2715   h->root.u.def.value = dynbss->size;
2716 
2717   /* Increment the size of DYNBSS to make room for the symbol.  */
2718   dynbss->size += h->size;
2719 
2720   return TRUE;
2721 }
2722 
2723 /* Adjust all external symbols pointing into SEC_MERGE sections
2724    to reflect the object merging within the sections.  */
2725 
2726 static bfd_boolean
2727 _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
2728 {
2729   asection *sec;
2730 
2731   if (h->root.type == bfd_link_hash_warning)
2732     h = (struct elf_link_hash_entry *) h->root.u.i.link;
2733 
2734   if ((h->root.type == bfd_link_hash_defined
2735        || h->root.type == bfd_link_hash_defweak)
2736       && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
2737       && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
2738     {
2739       bfd *output_bfd = (bfd *) data;
2740 
2741       h->root.u.def.value =
2742 	_bfd_merged_section_offset (output_bfd,
2743 				    &h->root.u.def.section,
2744 				    elf_section_data (sec)->sec_info,
2745 				    h->root.u.def.value);
2746     }
2747 
2748   return TRUE;
2749 }
2750 
2751 /* Returns false if the symbol referred to by H should be considered
2752    to resolve local to the current module, and true if it should be
2753    considered to bind dynamically.  */
2754 
2755 bfd_boolean
2756 _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
2757 			   struct bfd_link_info *info,
2758 			   bfd_boolean not_local_protected)
2759 {
2760   bfd_boolean binding_stays_local_p;
2761   const struct elf_backend_data *bed;
2762   struct elf_link_hash_table *hash_table;
2763 
2764   if (h == NULL)
2765     return FALSE;
2766 
2767   while (h->root.type == bfd_link_hash_indirect
2768 	 || h->root.type == bfd_link_hash_warning)
2769     h = (struct elf_link_hash_entry *) h->root.u.i.link;
2770 
2771   /* If it was forced local, then clearly it's not dynamic.  */
2772   if (h->dynindx == -1)
2773     return FALSE;
2774   if (h->forced_local)
2775     return FALSE;
2776 
2777   /* Identify the cases where name binding rules say that a
2778      visible symbol resolves locally.  */
2779   binding_stays_local_p = info->executable || SYMBOLIC_BIND (info, h);
2780 
2781   switch (ELF_ST_VISIBILITY (h->other))
2782     {
2783     case STV_INTERNAL:
2784     case STV_HIDDEN:
2785       return FALSE;
2786 
2787     case STV_PROTECTED:
2788       hash_table = elf_hash_table (info);
2789       if (!is_elf_hash_table (hash_table))
2790 	return FALSE;
2791 
2792       bed = get_elf_backend_data (hash_table->dynobj);
2793 
2794       /* Proper resolution for function pointer equality may require
2795 	 that these symbols perhaps be resolved dynamically, even though
2796 	 we should be resolving them to the current module.  */
2797       if (!not_local_protected || !bed->is_function_type (h->type))
2798 	binding_stays_local_p = TRUE;
2799       break;
2800 
2801     default:
2802       break;
2803     }
2804 
2805   /* If it isn't defined locally, then clearly it's dynamic.  */
2806   if (!h->def_regular && !ELF_COMMON_DEF_P (h))
2807     return TRUE;
2808 
2809   /* Otherwise, the symbol is dynamic if binding rules don't tell
2810      us that it remains local.  */
2811   return !binding_stays_local_p;
2812 }
2813 
2814 /* Return true if the symbol referred to by H should be considered
2815    to resolve local to the current module, and false otherwise.  Differs
2816    from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
2817    undefined symbols.  The two functions are virtually identical except
2818    for the place where forced_local and dynindx == -1 are tested.  If
2819    either of those tests are true, _bfd_elf_dynamic_symbol_p will say
2820    the symbol is local, while _bfd_elf_symbol_refs_local_p will say
2821    the symbol is local only for defined symbols.
2822    It might seem that _bfd_elf_dynamic_symbol_p could be rewritten as
2823    !_bfd_elf_symbol_refs_local_p, except that targets differ in their
2824    treatment of undefined weak symbols.  For those that do not make
2825    undefined weak symbols dynamic, both functions may return false.  */
2826 
2827 bfd_boolean
2828 _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
2829 			      struct bfd_link_info *info,
2830 			      bfd_boolean local_protected)
2831 {
2832   const struct elf_backend_data *bed;
2833   struct elf_link_hash_table *hash_table;
2834 
2835   /* If it's a local sym, of course we resolve locally.  */
2836   if (h == NULL)
2837     return TRUE;
2838 
2839   /* STV_HIDDEN or STV_INTERNAL ones must be local.  */
2840   if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
2841       || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
2842     return TRUE;
2843 
2844   /* Common symbols that become definitions don't get the DEF_REGULAR
2845      flag set, so test it first, and don't bail out.  */
2846   if (ELF_COMMON_DEF_P (h))
2847     /* Do nothing.  */;
2848   /* If we don't have a definition in a regular file, then we can't
2849      resolve locally.  The sym is either undefined or dynamic.  */
2850   else if (!h->def_regular)
2851     return FALSE;
2852 
2853   /* Forced local symbols resolve locally.  */
2854   if (h->forced_local)
2855     return TRUE;
2856 
2857   /* As do non-dynamic symbols.  */
2858   if (h->dynindx == -1)
2859     return TRUE;
2860 
2861   /* At this point, we know the symbol is defined and dynamic.  In an
2862      executable it must resolve locally, likewise when building symbolic
2863      shared libraries.  */
2864   if (info->executable || SYMBOLIC_BIND (info, h))
2865     return TRUE;
2866 
2867   /* Now deal with defined dynamic symbols in shared libraries.  Ones
2868      with default visibility might not resolve locally.  */
2869   if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
2870     return FALSE;
2871 
2872   hash_table = elf_hash_table (info);
2873   if (!is_elf_hash_table (hash_table))
2874     return TRUE;
2875 
2876   bed = get_elf_backend_data (hash_table->dynobj);
2877 
2878   /* STV_PROTECTED non-function symbols are local.  */
2879   if (!bed->is_function_type (h->type))
2880     return TRUE;
2881 
2882   /* Function pointer equality tests may require that STV_PROTECTED
2883      symbols be treated as dynamic symbols, even when we know that the
2884      dynamic linker will resolve them locally.  */
2885   return local_protected;
2886 }
2887 
2888 /* Caches some TLS segment info, and ensures that the TLS segment vma is
2889    aligned.  Returns the first TLS output section.  */
2890 
2891 struct bfd_section *
2892 _bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
2893 {
2894   struct bfd_section *sec, *tls;
2895   unsigned int align = 0;
2896 
2897   for (sec = obfd->sections; sec != NULL; sec = sec->next)
2898     if ((sec->flags & SEC_THREAD_LOCAL) != 0)
2899       break;
2900   tls = sec;
2901 
2902   for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next)
2903     if (sec->alignment_power > align)
2904       align = sec->alignment_power;
2905 
2906   elf_hash_table (info)->tls_sec = tls;
2907 
2908   /* Ensure the alignment of the first section is the largest alignment,
2909      so that the tls segment starts aligned.  */
2910   if (tls != NULL)
2911     tls->alignment_power = align;
2912 
2913   return tls;
2914 }
2915 
2916 /* Return TRUE iff this is a non-common, definition of a non-function symbol.  */
2917 static bfd_boolean
2918 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
2919 				  Elf_Internal_Sym *sym)
2920 {
2921   const struct elf_backend_data *bed;
2922 
2923   /* Local symbols do not count, but target specific ones might.  */
2924   if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
2925       && ELF_ST_BIND (sym->st_info) < STB_LOOS)
2926     return FALSE;
2927 
2928   bed = get_elf_backend_data (abfd);
2929   /* Function symbols do not count.  */
2930   if (bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
2931     return FALSE;
2932 
2933   /* If the section is undefined, then so is the symbol.  */
2934   if (sym->st_shndx == SHN_UNDEF)
2935     return FALSE;
2936 
2937   /* If the symbol is defined in the common section, then
2938      it is a common definition and so does not count.  */
2939   if (bed->common_definition (sym))
2940     return FALSE;
2941 
2942   /* If the symbol is in a target specific section then we
2943      must rely upon the backend to tell us what it is.  */
2944   if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
2945     /* FIXME - this function is not coded yet:
2946 
2947        return _bfd_is_global_symbol_definition (abfd, sym);
2948 
2949        Instead for now assume that the definition is not global,
2950        Even if this is wrong, at least the linker will behave
2951        in the same way that it used to do.  */
2952     return FALSE;
2953 
2954   return TRUE;
2955 }
2956 
2957 /* Search the symbol table of the archive element of the archive ABFD
2958    whose archive map contains a mention of SYMDEF, and determine if
2959    the symbol is defined in this element.  */
2960 static bfd_boolean
2961 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
2962 {
2963   Elf_Internal_Shdr * hdr;
2964   bfd_size_type symcount;
2965   bfd_size_type extsymcount;
2966   bfd_size_type extsymoff;
2967   Elf_Internal_Sym *isymbuf;
2968   Elf_Internal_Sym *isym;
2969   Elf_Internal_Sym *isymend;
2970   bfd_boolean result;
2971 
2972   abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
2973   if (abfd == NULL)
2974     return FALSE;
2975 
2976   if (! bfd_check_format (abfd, bfd_object))
2977     return FALSE;
2978 
2979   /* If we have already included the element containing this symbol in the
2980      link then we do not need to include it again.  Just claim that any symbol
2981      it contains is not a definition, so that our caller will not decide to
2982      (re)include this element.  */
2983   if (abfd->archive_pass)
2984     return FALSE;
2985 
2986   /* Select the appropriate symbol table.  */
2987   if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
2988     hdr = &elf_tdata (abfd)->symtab_hdr;
2989   else
2990     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2991 
2992   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
2993 
2994   /* The sh_info field of the symtab header tells us where the
2995      external symbols start.  We don't care about the local symbols.  */
2996   if (elf_bad_symtab (abfd))
2997     {
2998       extsymcount = symcount;
2999       extsymoff = 0;
3000     }
3001   else
3002     {
3003       extsymcount = symcount - hdr->sh_info;
3004       extsymoff = hdr->sh_info;
3005     }
3006 
3007   if (extsymcount == 0)
3008     return FALSE;
3009 
3010   /* Read in the symbol table.  */
3011   isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3012 				  NULL, NULL, NULL);
3013   if (isymbuf == NULL)
3014     return FALSE;
3015 
3016   /* Scan the symbol table looking for SYMDEF.  */
3017   result = FALSE;
3018   for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
3019     {
3020       const char *name;
3021 
3022       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3023 					      isym->st_name);
3024       if (name == NULL)
3025 	break;
3026 
3027       if (strcmp (name, symdef->name) == 0)
3028 	{
3029 	  result = is_global_data_symbol_definition (abfd, isym);
3030 	  break;
3031 	}
3032     }
3033 
3034   free (isymbuf);
3035 
3036   return result;
3037 }
3038 
3039 /* Add an entry to the .dynamic table.  */
3040 
3041 bfd_boolean
3042 _bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
3043 			    bfd_vma tag,
3044 			    bfd_vma val)
3045 {
3046   struct elf_link_hash_table *hash_table;
3047   const struct elf_backend_data *bed;
3048   asection *s;
3049   bfd_size_type newsize;
3050   bfd_byte *newcontents;
3051   Elf_Internal_Dyn dyn;
3052 
3053   hash_table = elf_hash_table (info);
3054   if (! is_elf_hash_table (hash_table))
3055     return FALSE;
3056 
3057   bed = get_elf_backend_data (hash_table->dynobj);
3058   s = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
3059   BFD_ASSERT (s != NULL);
3060 
3061   newsize = s->size + bed->s->sizeof_dyn;
3062   newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
3063   if (newcontents == NULL)
3064     return FALSE;
3065 
3066   dyn.d_tag = tag;
3067   dyn.d_un.d_val = val;
3068   bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size);
3069 
3070   s->size = newsize;
3071   s->contents = newcontents;
3072 
3073   return TRUE;
3074 }
3075 
3076 /* Add a DT_NEEDED entry for this dynamic object if DO_IT is true,
3077    otherwise just check whether one already exists.  Returns -1 on error,
3078    1 if a DT_NEEDED tag already exists, and 0 on success.  */
3079 
3080 static int
3081 elf_add_dt_needed_tag (bfd *abfd,
3082 		       struct bfd_link_info *info,
3083 		       const char *soname,
3084 		       bfd_boolean do_it)
3085 {
3086   struct elf_link_hash_table *hash_table;
3087   bfd_size_type oldsize;
3088   bfd_size_type strindex;
3089 
3090   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
3091     return -1;
3092 
3093   hash_table = elf_hash_table (info);
3094   oldsize = _bfd_elf_strtab_size (hash_table->dynstr);
3095   strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE);
3096   if (strindex == (bfd_size_type) -1)
3097     return -1;
3098 
3099   if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr))
3100     {
3101       asection *sdyn;
3102       const struct elf_backend_data *bed;
3103       bfd_byte *extdyn;
3104 
3105       bed = get_elf_backend_data (hash_table->dynobj);
3106       sdyn = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
3107       if (sdyn != NULL)
3108 	for (extdyn = sdyn->contents;
3109 	     extdyn < sdyn->contents + sdyn->size;
3110 	     extdyn += bed->s->sizeof_dyn)
3111 	  {
3112 	    Elf_Internal_Dyn dyn;
3113 
3114 	    bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn);
3115 	    if (dyn.d_tag == DT_NEEDED
3116 		&& dyn.d_un.d_val == strindex)
3117 	      {
3118 		_bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3119 		return 1;
3120 	      }
3121 	  }
3122     }
3123 
3124   if (do_it)
3125     {
3126       if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
3127 	return -1;
3128 
3129       if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
3130 	return -1;
3131     }
3132   else
3133     /* We were just checking for existence of the tag.  */
3134     _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3135 
3136   return 0;
3137 }
3138 
3139 static bfd_boolean
3140 on_needed_list (const char *soname, struct bfd_link_needed_list *needed)
3141 {
3142   for (; needed != NULL; needed = needed->next)
3143     if (strcmp (soname, needed->name) == 0)
3144       return TRUE;
3145 
3146   return FALSE;
3147 }
3148 
3149 /* Sort symbol by value and section.  */
3150 static int
3151 elf_sort_symbol (const void *arg1, const void *arg2)
3152 {
3153   const struct elf_link_hash_entry *h1;
3154   const struct elf_link_hash_entry *h2;
3155   bfd_signed_vma vdiff;
3156 
3157   h1 = *(const struct elf_link_hash_entry **) arg1;
3158   h2 = *(const struct elf_link_hash_entry **) arg2;
3159   vdiff = h1->root.u.def.value - h2->root.u.def.value;
3160   if (vdiff != 0)
3161     return vdiff > 0 ? 1 : -1;
3162   else
3163     {
3164       long sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id;
3165       if (sdiff != 0)
3166 	return sdiff > 0 ? 1 : -1;
3167     }
3168   return 0;
3169 }
3170 
3171 /* This function is used to adjust offsets into .dynstr for
3172    dynamic symbols.  This is called via elf_link_hash_traverse.  */
3173 
3174 static bfd_boolean
3175 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
3176 {
3177   struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;
3178 
3179   if (h->root.type == bfd_link_hash_warning)
3180     h = (struct elf_link_hash_entry *) h->root.u.i.link;
3181 
3182   if (h->dynindx != -1)
3183     h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
3184   return TRUE;
3185 }
3186 
3187 /* Assign string offsets in .dynstr, update all structures referencing
3188    them.  */
3189 
3190 static bfd_boolean
3191 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
3192 {
3193   struct elf_link_hash_table *hash_table = elf_hash_table (info);
3194   struct elf_link_local_dynamic_entry *entry;
3195   struct elf_strtab_hash *dynstr = hash_table->dynstr;
3196   bfd *dynobj = hash_table->dynobj;
3197   asection *sdyn;
3198   bfd_size_type size;
3199   const struct elf_backend_data *bed;
3200   bfd_byte *extdyn;
3201 
3202   _bfd_elf_strtab_finalize (dynstr);
3203   size = _bfd_elf_strtab_size (dynstr);
3204 
3205   bed = get_elf_backend_data (dynobj);
3206   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
3207   BFD_ASSERT (sdyn != NULL);
3208 
3209   /* Update all .dynamic entries referencing .dynstr strings.  */
3210   for (extdyn = sdyn->contents;
3211        extdyn < sdyn->contents + sdyn->size;
3212        extdyn += bed->s->sizeof_dyn)
3213     {
3214       Elf_Internal_Dyn dyn;
3215 
3216       bed->s->swap_dyn_in (dynobj, extdyn, &dyn);
3217       switch (dyn.d_tag)
3218 	{
3219 	case DT_STRSZ:
3220 	  dyn.d_un.d_val = size;
3221 	  break;
3222 	case DT_NEEDED:
3223 	case DT_SONAME:
3224 	case DT_RPATH:
3225 	case DT_RUNPATH:
3226 	case DT_FILTER:
3227 	case DT_AUXILIARY:
3228 	case DT_AUDIT:
3229 	case DT_DEPAUDIT:
3230 	  dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
3231 	  break;
3232 	default:
3233 	  continue;
3234 	}
3235       bed->s->swap_dyn_out (dynobj, &dyn, extdyn);
3236     }
3237 
3238   /* Now update local dynamic symbols.  */
3239   for (entry = hash_table->dynlocal; entry ; entry = entry->next)
3240     entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
3241 						  entry->isym.st_name);
3242 
3243   /* And the rest of dynamic symbols.  */
3244   elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr);
3245 
3246   /* Adjust version definitions.  */
3247   if (elf_tdata (output_bfd)->cverdefs)
3248     {
3249       asection *s;
3250       bfd_byte *p;
3251       bfd_size_type i;
3252       Elf_Internal_Verdef def;
3253       Elf_Internal_Verdaux defaux;
3254 
3255       s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
3256       p = s->contents;
3257       do
3258 	{
3259 	  _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
3260 				   &def);
3261 	  p += sizeof (Elf_External_Verdef);
3262 	  if (def.vd_aux != sizeof (Elf_External_Verdef))
3263 	    continue;
3264 	  for (i = 0; i < def.vd_cnt; ++i)
3265 	    {
3266 	      _bfd_elf_swap_verdaux_in (output_bfd,
3267 					(Elf_External_Verdaux *) p, &defaux);
3268 	      defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
3269 							defaux.vda_name);
3270 	      _bfd_elf_swap_verdaux_out (output_bfd,
3271 					 &defaux, (Elf_External_Verdaux *) p);
3272 	      p += sizeof (Elf_External_Verdaux);
3273 	    }
3274 	}
3275       while (def.vd_next);
3276     }
3277 
3278   /* Adjust version references.  */
3279   if (elf_tdata (output_bfd)->verref)
3280     {
3281       asection *s;
3282       bfd_byte *p;
3283       bfd_size_type i;
3284       Elf_Internal_Verneed need;
3285       Elf_Internal_Vernaux needaux;
3286 
3287       s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
3288       p = s->contents;
3289       do
3290 	{
3291 	  _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
3292 				    &need);
3293 	  need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
3294 	  _bfd_elf_swap_verneed_out (output_bfd, &need,
3295 				     (Elf_External_Verneed *) p);
3296 	  p += sizeof (Elf_External_Verneed);
3297 	  for (i = 0; i < need.vn_cnt; ++i)
3298 	    {
3299 	      _bfd_elf_swap_vernaux_in (output_bfd,
3300 					(Elf_External_Vernaux *) p, &needaux);
3301 	      needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
3302 							 needaux.vna_name);
3303 	      _bfd_elf_swap_vernaux_out (output_bfd,
3304 					 &needaux,
3305 					 (Elf_External_Vernaux *) p);
3306 	      p += sizeof (Elf_External_Vernaux);
3307 	    }
3308 	}
3309       while (need.vn_next);
3310     }
3311 
3312   return TRUE;
3313 }
3314 
3315 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3316    The default is to only match when the INPUT and OUTPUT are exactly
3317    the same target.  */
3318 
3319 bfd_boolean
3320 _bfd_elf_default_relocs_compatible (const bfd_target *input,
3321 				    const bfd_target *output)
3322 {
3323   return input == output;
3324 }
3325 
3326 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3327    This version is used when different targets for the same architecture
3328    are virtually identical.  */
3329 
3330 bfd_boolean
3331 _bfd_elf_relocs_compatible (const bfd_target *input,
3332 			    const bfd_target *output)
3333 {
3334   const struct elf_backend_data *obed, *ibed;
3335 
3336   if (input == output)
3337     return TRUE;
3338 
3339   ibed = xvec_get_elf_backend_data (input);
3340   obed = xvec_get_elf_backend_data (output);
3341 
3342   if (ibed->arch != obed->arch)
3343     return FALSE;
3344 
3345   /* If both backends are using this function, deem them compatible.  */
3346   return ibed->relocs_compatible == obed->relocs_compatible;
3347 }
3348 
3349 /* Add symbols from an ELF object file to the linker hash table.  */
3350 
3351 static bfd_boolean
3352 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
3353 {
3354   Elf_Internal_Ehdr *ehdr;
3355   Elf_Internal_Shdr *hdr;
3356   bfd_size_type symcount;
3357   bfd_size_type extsymcount;
3358   bfd_size_type extsymoff;
3359   struct elf_link_hash_entry **sym_hash;
3360   bfd_boolean dynamic;
3361   Elf_External_Versym *extversym = NULL;
3362   Elf_External_Versym *ever;
3363   struct elf_link_hash_entry *weaks;
3364   struct elf_link_hash_entry **nondeflt_vers = NULL;
3365   bfd_size_type nondeflt_vers_cnt = 0;
3366   Elf_Internal_Sym *isymbuf = NULL;
3367   Elf_Internal_Sym *isym;
3368   Elf_Internal_Sym *isymend;
3369   const struct elf_backend_data *bed;
3370   bfd_boolean add_needed;
3371   struct elf_link_hash_table *htab;
3372   bfd_size_type amt;
3373   void *alloc_mark = NULL;
3374   struct bfd_hash_entry **old_table = NULL;
3375   unsigned int old_size = 0;
3376   unsigned int old_count = 0;
3377   void *old_tab = NULL;
3378   void *old_hash;
3379   void *old_ent;
3380   struct bfd_link_hash_entry *old_undefs = NULL;
3381   struct bfd_link_hash_entry *old_undefs_tail = NULL;
3382   long old_dynsymcount = 0;
3383   size_t tabsize = 0;
3384   size_t hashsize = 0;
3385 
3386   htab = elf_hash_table (info);
3387   bed = get_elf_backend_data (abfd);
3388 
3389   if ((abfd->flags & DYNAMIC) == 0)
3390     dynamic = FALSE;
3391   else
3392     {
3393       dynamic = TRUE;
3394 
3395       /* You can't use -r against a dynamic object.  Also, there's no
3396 	 hope of using a dynamic object which does not exactly match
3397 	 the format of the output file.  */
3398       if (info->relocatable
3399 	  || !is_elf_hash_table (htab)
3400 	  || info->output_bfd->xvec != abfd->xvec)
3401 	{
3402 	  if (info->relocatable)
3403 	    bfd_set_error (bfd_error_invalid_operation);
3404 	  else
3405 	    bfd_set_error (bfd_error_wrong_format);
3406 	  goto error_return;
3407 	}
3408     }
3409 
3410   ehdr = elf_elfheader (abfd);
3411   if (info->warn_alternate_em
3412       && bed->elf_machine_code != ehdr->e_machine
3413       && ((bed->elf_machine_alt1 != 0
3414 	   && ehdr->e_machine == bed->elf_machine_alt1)
3415 	  || (bed->elf_machine_alt2 != 0
3416 	      && ehdr->e_machine == bed->elf_machine_alt2)))
3417     info->callbacks->einfo
3418       (_("%P: alternate ELF machine code found (%d) in %B, expecting %d\n"),
3419        ehdr->e_machine, abfd, bed->elf_machine_code);
3420 
3421   /* As a GNU extension, any input sections which are named
3422      .gnu.warning.SYMBOL are treated as warning symbols for the given
3423      symbol.  This differs from .gnu.warning sections, which generate
3424      warnings when they are included in an output file.  */
3425   if (info->executable)
3426     {
3427       asection *s;
3428 
3429       for (s = abfd->sections; s != NULL; s = s->next)
3430 	{
3431 	  const char *name;
3432 
3433 	  name = bfd_get_section_name (abfd, s);
3434 	  if (CONST_STRNEQ (name, ".gnu.warning."))
3435 	    {
3436 	      char *msg;
3437 	      bfd_size_type sz;
3438 
3439 	      name += sizeof ".gnu.warning." - 1;
3440 
3441 	      /* If this is a shared object, then look up the symbol
3442 		 in the hash table.  If it is there, and it is already
3443 		 been defined, then we will not be using the entry
3444 		 from this shared object, so we don't need to warn.
3445 		 FIXME: If we see the definition in a regular object
3446 		 later on, we will warn, but we shouldn't.  The only
3447 		 fix is to keep track of what warnings we are supposed
3448 		 to emit, and then handle them all at the end of the
3449 		 link.  */
3450 	      if (dynamic)
3451 		{
3452 		  struct elf_link_hash_entry *h;
3453 
3454 		  h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
3455 
3456 		  /* FIXME: What about bfd_link_hash_common?  */
3457 		  if (h != NULL
3458 		      && (h->root.type == bfd_link_hash_defined
3459 			  || h->root.type == bfd_link_hash_defweak))
3460 		    {
3461 		      /* We don't want to issue this warning.  Clobber
3462 			 the section size so that the warning does not
3463 			 get copied into the output file.  */
3464 		      s->size = 0;
3465 		      continue;
3466 		    }
3467 		}
3468 
3469 	      sz = s->size;
3470 	      msg = (char *) bfd_alloc (abfd, sz + 1);
3471 	      if (msg == NULL)
3472 		goto error_return;
3473 
3474 	      if (! bfd_get_section_contents (abfd, s, msg, 0, sz))
3475 		goto error_return;
3476 
3477 	      msg[sz] = '\0';
3478 
3479 	      if (! (_bfd_generic_link_add_one_symbol
3480 		     (info, abfd, name, BSF_WARNING, s, 0, msg,
3481 		      FALSE, bed->collect, NULL)))
3482 		goto error_return;
3483 
3484 	      if (! info->relocatable)
3485 		{
3486 		  /* Clobber the section size so that the warning does
3487 		     not get copied into the output file.  */
3488 		  s->size = 0;
3489 
3490 		  /* Also set SEC_EXCLUDE, so that symbols defined in
3491 		     the warning section don't get copied to the output.  */
3492 		  s->flags |= SEC_EXCLUDE;
3493 		}
3494 	    }
3495 	}
3496     }
3497 
3498   add_needed = TRUE;
3499   if (! dynamic)
3500     {
3501       /* If we are creating a shared library, create all the dynamic
3502 	 sections immediately.  We need to attach them to something,
3503 	 so we attach them to this BFD, provided it is the right
3504 	 format.  FIXME: If there are no input BFD's of the same
3505 	 format as the output, we can't make a shared library.  */
3506       if (info->shared
3507 	  && is_elf_hash_table (htab)
3508 	  && info->output_bfd->xvec == abfd->xvec
3509 	  && !htab->dynamic_sections_created)
3510 	{
3511 	  if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
3512 	    goto error_return;
3513 	}
3514     }
3515   else if (!is_elf_hash_table (htab))
3516     goto error_return;
3517   else
3518     {
3519       asection *s;
3520       const char *soname = NULL;
3521       char *audit = NULL;
3522       struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
3523       int ret;
3524 
3525       /* ld --just-symbols and dynamic objects don't mix very well.
3526 	 ld shouldn't allow it.  */
3527       if ((s = abfd->sections) != NULL
3528 	  && s->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
3529 	abort ();
3530 
3531       /* If this dynamic lib was specified on the command line with
3532 	 --as-needed in effect, then we don't want to add a DT_NEEDED
3533 	 tag unless the lib is actually used.  Similary for libs brought
3534 	 in by another lib's DT_NEEDED.  When --no-add-needed is used
3535 	 on a dynamic lib, we don't want to add a DT_NEEDED entry for
3536 	 any dynamic library in DT_NEEDED tags in the dynamic lib at
3537 	 all.  */
3538       add_needed = (elf_dyn_lib_class (abfd)
3539 		    & (DYN_AS_NEEDED | DYN_DT_NEEDED
3540 		       | DYN_NO_NEEDED)) == 0;
3541 
3542       s = bfd_get_section_by_name (abfd, ".dynamic");
3543       if (s != NULL)
3544 	{
3545 	  bfd_byte *dynbuf;
3546 	  bfd_byte *extdyn;
3547 	  unsigned int elfsec;
3548 	  unsigned long shlink;
3549 
3550 	  if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
3551 	    {
3552 error_free_dyn:
3553 	      free (dynbuf);
3554 	      goto error_return;
3555 	    }
3556 
3557 	  elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
3558 	  if (elfsec == SHN_BAD)
3559 	    goto error_free_dyn;
3560 	  shlink = elf_elfsections (abfd)[elfsec]->sh_link;
3561 
3562 	  for (extdyn = dynbuf;
3563 	       extdyn < dynbuf + s->size;
3564 	       extdyn += bed->s->sizeof_dyn)
3565 	    {
3566 	      Elf_Internal_Dyn dyn;
3567 
3568 	      bed->s->swap_dyn_in (abfd, extdyn, &dyn);
3569 	      if (dyn.d_tag == DT_SONAME)
3570 		{
3571 		  unsigned int tagv = dyn.d_un.d_val;
3572 		  soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3573 		  if (soname == NULL)
3574 		    goto error_free_dyn;
3575 		}
3576 	      if (dyn.d_tag == DT_NEEDED)
3577 		{
3578 		  struct bfd_link_needed_list *n, **pn;
3579 		  char *fnm, *anm;
3580 		  unsigned int tagv = dyn.d_un.d_val;
3581 
3582 		  amt = sizeof (struct bfd_link_needed_list);
3583 		  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3584 		  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3585 		  if (n == NULL || fnm == NULL)
3586 		    goto error_free_dyn;
3587 		  amt = strlen (fnm) + 1;
3588 		  anm = (char *) bfd_alloc (abfd, amt);
3589 		  if (anm == NULL)
3590 		    goto error_free_dyn;
3591 		  memcpy (anm, fnm, amt);
3592 		  n->name = anm;
3593 		  n->by = abfd;
3594 		  n->next = NULL;
3595 		  for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next)
3596 		    ;
3597 		  *pn = n;
3598 		}
3599 	      if (dyn.d_tag == DT_RUNPATH)
3600 		{
3601 		  struct bfd_link_needed_list *n, **pn;
3602 		  char *fnm, *anm;
3603 		  unsigned int tagv = dyn.d_un.d_val;
3604 
3605 		  amt = sizeof (struct bfd_link_needed_list);
3606 		  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3607 		  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3608 		  if (n == NULL || fnm == NULL)
3609 		    goto error_free_dyn;
3610 		  amt = strlen (fnm) + 1;
3611 		  anm = (char *) bfd_alloc (abfd, amt);
3612 		  if (anm == NULL)
3613 		    goto error_free_dyn;
3614 		  memcpy (anm, fnm, amt);
3615 		  n->name = anm;
3616 		  n->by = abfd;
3617 		  n->next = NULL;
3618 		  for (pn = & runpath;
3619 		       *pn != NULL;
3620 		       pn = &(*pn)->next)
3621 		    ;
3622 		  *pn = n;
3623 		}
3624 	      /* Ignore DT_RPATH if we have seen DT_RUNPATH.  */
3625 	      if (!runpath && dyn.d_tag == DT_RPATH)
3626 		{
3627 		  struct bfd_link_needed_list *n, **pn;
3628 		  char *fnm, *anm;
3629 		  unsigned int tagv = dyn.d_un.d_val;
3630 
3631 		  amt = sizeof (struct bfd_link_needed_list);
3632 		  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3633 		  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3634 		  if (n == NULL || fnm == NULL)
3635 		    goto error_free_dyn;
3636 		  amt = strlen (fnm) + 1;
3637 		  anm = (char *) bfd_alloc (abfd, amt);
3638 		  if (anm == NULL)
3639 		    goto error_free_dyn;
3640 		  memcpy (anm, fnm, amt);
3641 		  n->name = anm;
3642 		  n->by = abfd;
3643 		  n->next = NULL;
3644 		  for (pn = & rpath;
3645 		       *pn != NULL;
3646 		       pn = &(*pn)->next)
3647 		    ;
3648 		  *pn = n;
3649 		}
3650 	      if (dyn.d_tag == DT_AUDIT)
3651 		{
3652 		  unsigned int tagv = dyn.d_un.d_val;
3653 		  audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3654 		}
3655 	    }
3656 
3657 	  free (dynbuf);
3658 	}
3659 
3660       /* DT_RUNPATH overrides DT_RPATH.  Do _NOT_ bfd_release, as that
3661 	 frees all more recently bfd_alloc'd blocks as well.  */
3662       if (runpath)
3663 	rpath = runpath;
3664 
3665       if (rpath)
3666 	{
3667 	  struct bfd_link_needed_list **pn;
3668 	  for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next)
3669 	    ;
3670 	  *pn = rpath;
3671 	}
3672 
3673       /* We do not want to include any of the sections in a dynamic
3674 	 object in the output file.  We hack by simply clobbering the
3675 	 list of sections in the BFD.  This could be handled more
3676 	 cleanly by, say, a new section flag; the existing
3677 	 SEC_NEVER_LOAD flag is not the one we want, because that one
3678 	 still implies that the section takes up space in the output
3679 	 file.  */
3680       bfd_section_list_clear (abfd);
3681 
3682       /* Find the name to use in a DT_NEEDED entry that refers to this
3683 	 object.  If the object has a DT_SONAME entry, we use it.
3684 	 Otherwise, if the generic linker stuck something in
3685 	 elf_dt_name, we use that.  Otherwise, we just use the file
3686 	 name.  */
3687       if (soname == NULL || *soname == '\0')
3688 	{
3689 	  soname = elf_dt_name (abfd);
3690 	  if (soname == NULL || *soname == '\0')
3691 	    soname = bfd_get_filename (abfd);
3692 	}
3693 
3694       /* Save the SONAME because sometimes the linker emulation code
3695 	 will need to know it.  */
3696       elf_dt_name (abfd) = soname;
3697 
3698       ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
3699       if (ret < 0)
3700 	goto error_return;
3701 
3702       /* If we have already included this dynamic object in the
3703 	 link, just ignore it.  There is no reason to include a
3704 	 particular dynamic object more than once.  */
3705       if (ret > 0)
3706 	return TRUE;
3707 
3708       /* Save the DT_AUDIT entry for the linker emulation code. */
3709       elf_dt_audit (abfd) = audit;
3710     }
3711 
3712   /* If this is a dynamic object, we always link against the .dynsym
3713      symbol table, not the .symtab symbol table.  The dynamic linker
3714      will only see the .dynsym symbol table, so there is no reason to
3715      look at .symtab for a dynamic object.  */
3716 
3717   if (! dynamic || elf_dynsymtab (abfd) == 0)
3718     hdr = &elf_tdata (abfd)->symtab_hdr;
3719   else
3720     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3721 
3722   symcount = hdr->sh_size / bed->s->sizeof_sym;
3723 
3724   /* The sh_info field of the symtab header tells us where the
3725      external symbols start.  We don't care about the local symbols at
3726      this point.  */
3727   if (elf_bad_symtab (abfd))
3728     {
3729       extsymcount = symcount;
3730       extsymoff = 0;
3731     }
3732   else
3733     {
3734       extsymcount = symcount - hdr->sh_info;
3735       extsymoff = hdr->sh_info;
3736     }
3737 
3738   sym_hash = NULL;
3739   if (extsymcount != 0)
3740     {
3741       isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3742 				      NULL, NULL, NULL);
3743       if (isymbuf == NULL)
3744 	goto error_return;
3745 
3746       /* We store a pointer to the hash table entry for each external
3747 	 symbol.  */
3748       amt = extsymcount * sizeof (struct elf_link_hash_entry *);
3749       sym_hash = (struct elf_link_hash_entry **) bfd_alloc (abfd, amt);
3750       if (sym_hash == NULL)
3751 	goto error_free_sym;
3752       elf_sym_hashes (abfd) = sym_hash;
3753     }
3754 
3755   if (dynamic)
3756     {
3757       /* Read in any version definitions.  */
3758       if (!_bfd_elf_slurp_version_tables (abfd,
3759 					  info->default_imported_symver))
3760 	goto error_free_sym;
3761 
3762       /* Read in the symbol versions, but don't bother to convert them
3763 	 to internal format.  */
3764       if (elf_dynversym (abfd) != 0)
3765 	{
3766 	  Elf_Internal_Shdr *versymhdr;
3767 
3768 	  versymhdr = &elf_tdata (abfd)->dynversym_hdr;
3769 	  extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
3770 	  if (extversym == NULL)
3771 	    goto error_free_sym;
3772 	  amt = versymhdr->sh_size;
3773 	  if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
3774 	      || bfd_bread (extversym, amt, abfd) != amt)
3775 	    goto error_free_vers;
3776 	}
3777     }
3778 
3779   /* If we are loading an as-needed shared lib, save the symbol table
3780      state before we start adding symbols.  If the lib turns out
3781      to be unneeded, restore the state.  */
3782   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
3783     {
3784       unsigned int i;
3785       size_t entsize;
3786 
3787       for (entsize = 0, i = 0; i < htab->root.table.size; i++)
3788 	{
3789 	  struct bfd_hash_entry *p;
3790 	  struct elf_link_hash_entry *h;
3791 
3792 	  for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3793 	    {
3794 	      h = (struct elf_link_hash_entry *) p;
3795 	      entsize += htab->root.table.entsize;
3796 	      if (h->root.type == bfd_link_hash_warning)
3797 		entsize += htab->root.table.entsize;
3798 	    }
3799 	}
3800 
3801       tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
3802       hashsize = extsymcount * sizeof (struct elf_link_hash_entry *);
3803       old_tab = bfd_malloc (tabsize + entsize + hashsize);
3804       if (old_tab == NULL)
3805 	goto error_free_vers;
3806 
3807       /* Remember the current objalloc pointer, so that all mem for
3808 	 symbols added can later be reclaimed.  */
3809       alloc_mark = bfd_hash_allocate (&htab->root.table, 1);
3810       if (alloc_mark == NULL)
3811 	goto error_free_vers;
3812 
3813       /* Make a special call to the linker "notice" function to
3814 	 tell it that we are about to handle an as-needed lib.  */
3815       if (!(*info->callbacks->notice) (info, NULL, abfd, NULL,
3816 				       notice_as_needed))
3817 	goto error_free_vers;
3818 
3819       /* Clone the symbol table and sym hashes.  Remember some
3820 	 pointers into the symbol table, and dynamic symbol count.  */
3821       old_hash = (char *) old_tab + tabsize;
3822       old_ent = (char *) old_hash + hashsize;
3823       memcpy (old_tab, htab->root.table.table, tabsize);
3824       memcpy (old_hash, sym_hash, hashsize);
3825       old_undefs = htab->root.undefs;
3826       old_undefs_tail = htab->root.undefs_tail;
3827       old_table = htab->root.table.table;
3828       old_size = htab->root.table.size;
3829       old_count = htab->root.table.count;
3830       old_dynsymcount = htab->dynsymcount;
3831 
3832       for (i = 0; i < htab->root.table.size; i++)
3833 	{
3834 	  struct bfd_hash_entry *p;
3835 	  struct elf_link_hash_entry *h;
3836 
3837 	  for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3838 	    {
3839 	      memcpy (old_ent, p, htab->root.table.entsize);
3840 	      old_ent = (char *) old_ent + htab->root.table.entsize;
3841 	      h = (struct elf_link_hash_entry *) p;
3842 	      if (h->root.type == bfd_link_hash_warning)
3843 		{
3844 		  memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
3845 		  old_ent = (char *) old_ent + htab->root.table.entsize;
3846 		}
3847 	    }
3848 	}
3849     }
3850 
3851   weaks = NULL;
3852   ever = extversym != NULL ? extversym + extsymoff : NULL;
3853   for (isym = isymbuf, isymend = isymbuf + extsymcount;
3854        isym < isymend;
3855        isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
3856     {
3857       int bind;
3858       bfd_vma value;
3859       asection *sec, *new_sec;
3860       flagword flags;
3861       const char *name;
3862       struct elf_link_hash_entry *h;
3863       bfd_boolean definition;
3864       bfd_boolean size_change_ok;
3865       bfd_boolean type_change_ok;
3866       bfd_boolean new_weakdef;
3867       bfd_boolean override;
3868       bfd_boolean common;
3869       unsigned int old_alignment;
3870       bfd *old_bfd;
3871       bfd * undef_bfd = NULL;
3872 
3873       override = FALSE;
3874 
3875       flags = BSF_NO_FLAGS;
3876       sec = NULL;
3877       value = isym->st_value;
3878       *sym_hash = NULL;
3879       common = bed->common_definition (isym);
3880 
3881       bind = ELF_ST_BIND (isym->st_info);
3882       switch (bind)
3883 	{
3884 	case STB_LOCAL:
3885 	  /* This should be impossible, since ELF requires that all
3886 	     global symbols follow all local symbols, and that sh_info
3887 	     point to the first global symbol.  Unfortunately, Irix 5
3888 	     screws this up.  */
3889 	  continue;
3890 
3891 	case STB_GLOBAL:
3892 	  if (isym->st_shndx != SHN_UNDEF && !common)
3893 	    flags = BSF_GLOBAL;
3894 	  break;
3895 
3896 	case STB_WEAK:
3897 	  flags = BSF_WEAK;
3898 	  break;
3899 
3900 	case STB_GNU_UNIQUE:
3901 	  flags = BSF_GNU_UNIQUE;
3902 	  break;
3903 
3904 	default:
3905 	  /* Leave it up to the processor backend.  */
3906 	  break;
3907 	}
3908 
3909       if (isym->st_shndx == SHN_UNDEF)
3910 	sec = bfd_und_section_ptr;
3911       else if (isym->st_shndx == SHN_ABS)
3912 	sec = bfd_abs_section_ptr;
3913       else if (isym->st_shndx == SHN_COMMON)
3914 	{
3915 	  sec = bfd_com_section_ptr;
3916 	  /* What ELF calls the size we call the value.  What ELF
3917 	     calls the value we call the alignment.  */
3918 	  value = isym->st_size;
3919 	}
3920       else
3921 	{
3922 	  sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
3923 	  if (sec == NULL)
3924 	    sec = bfd_abs_section_ptr;
3925 	  else if (sec->kept_section)
3926 	    {
3927 	      /* Symbols from discarded section are undefined.  We keep
3928 		 its visibility.  */
3929 	      sec = bfd_und_section_ptr;
3930 	      isym->st_shndx = SHN_UNDEF;
3931 	    }
3932 	  else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
3933 	    value -= sec->vma;
3934 	}
3935 
3936       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3937 					      isym->st_name);
3938       if (name == NULL)
3939 	goto error_free_vers;
3940 
3941       if (isym->st_shndx == SHN_COMMON
3942 	  && ELF_ST_TYPE (isym->st_info) == STT_TLS
3943 	  && !info->relocatable)
3944 	{
3945 	  asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
3946 
3947 	  if (tcomm == NULL)
3948 	    {
3949 	      tcomm = bfd_make_section_with_flags (abfd, ".tcommon",
3950 						   (SEC_ALLOC
3951 						    | SEC_IS_COMMON
3952 						    | SEC_LINKER_CREATED
3953 						    | SEC_THREAD_LOCAL));
3954 	      if (tcomm == NULL)
3955 		goto error_free_vers;
3956 	    }
3957 	  sec = tcomm;
3958 	}
3959       else if (bed->elf_add_symbol_hook)
3960 	{
3961 	  if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
3962 					     &sec, &value))
3963 	    goto error_free_vers;
3964 
3965 	  /* The hook function sets the name to NULL if this symbol
3966 	     should be skipped for some reason.  */
3967 	  if (name == NULL)
3968 	    continue;
3969 	}
3970 
3971       /* Sanity check that all possibilities were handled.  */
3972       if (sec == NULL)
3973 	{
3974 	  bfd_set_error (bfd_error_bad_value);
3975 	  goto error_free_vers;
3976 	}
3977 
3978       if (bfd_is_und_section (sec)
3979 	  || bfd_is_com_section (sec))
3980 	definition = FALSE;
3981       else
3982 	definition = TRUE;
3983 
3984       size_change_ok = FALSE;
3985       type_change_ok = bed->type_change_ok;
3986       old_alignment = 0;
3987       old_bfd = NULL;
3988       new_sec = sec;
3989 
3990       if (is_elf_hash_table (htab))
3991 	{
3992 	  Elf_Internal_Versym iver;
3993 	  unsigned int vernum = 0;
3994 	  bfd_boolean skip;
3995 
3996 	  /* If this is a definition of a symbol which was previously
3997 	     referenced in a non-weak manner then make a note of the bfd
3998 	     that contained the reference.  This is used if we need to
3999 	     refer to the source of the reference later on.  */
4000 	  if (! bfd_is_und_section (sec))
4001 	    {
4002 	      h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
4003 
4004 	      if (h != NULL
4005 		  && h->root.type == bfd_link_hash_undefined
4006 		  && h->root.u.undef.abfd)
4007 		undef_bfd = h->root.u.undef.abfd;
4008 	    }
4009 
4010 	  if (ever == NULL)
4011 	    {
4012 	      if (info->default_imported_symver)
4013 		/* Use the default symbol version created earlier.  */
4014 		iver.vs_vers = elf_tdata (abfd)->cverdefs;
4015 	      else
4016 		iver.vs_vers = 0;
4017 	    }
4018 	  else
4019 	    _bfd_elf_swap_versym_in (abfd, ever, &iver);
4020 
4021 	  vernum = iver.vs_vers & VERSYM_VERSION;
4022 
4023 	  /* If this is a hidden symbol, or if it is not version
4024 	     1, we append the version name to the symbol name.
4025 	     However, we do not modify a non-hidden absolute symbol
4026 	     if it is not a function, because it might be the version
4027 	     symbol itself.  FIXME: What if it isn't?  */
4028 	  if ((iver.vs_vers & VERSYM_HIDDEN) != 0
4029 	      || (vernum > 1
4030 		  && (!bfd_is_abs_section (sec)
4031 		      || bed->is_function_type (ELF_ST_TYPE (isym->st_info)))))
4032 	    {
4033 	      const char *verstr;
4034 	      size_t namelen, verlen, newlen;
4035 	      char *newname, *p;
4036 
4037 	      if (isym->st_shndx != SHN_UNDEF)
4038 		{
4039 		  if (vernum > elf_tdata (abfd)->cverdefs)
4040 		    verstr = NULL;
4041 		  else if (vernum > 1)
4042 		    verstr =
4043 		      elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
4044 		  else
4045 		    verstr = "";
4046 
4047 		  if (verstr == NULL)
4048 		    {
4049 		      (*_bfd_error_handler)
4050 			(_("%B: %s: invalid version %u (max %d)"),
4051 			 abfd, name, vernum,
4052 			 elf_tdata (abfd)->cverdefs);
4053 		      bfd_set_error (bfd_error_bad_value);
4054 		      goto error_free_vers;
4055 		    }
4056 		}
4057 	      else
4058 		{
4059 		  /* We cannot simply test for the number of
4060 		     entries in the VERNEED section since the
4061 		     numbers for the needed versions do not start
4062 		     at 0.  */
4063 		  Elf_Internal_Verneed *t;
4064 
4065 		  verstr = NULL;
4066 		  for (t = elf_tdata (abfd)->verref;
4067 		       t != NULL;
4068 		       t = t->vn_nextref)
4069 		    {
4070 		      Elf_Internal_Vernaux *a;
4071 
4072 		      for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
4073 			{
4074 			  if (a->vna_other == vernum)
4075 			    {
4076 			      verstr = a->vna_nodename;
4077 			      break;
4078 			    }
4079 			}
4080 		      if (a != NULL)
4081 			break;
4082 		    }
4083 		  if (verstr == NULL)
4084 		    {
4085 		      (*_bfd_error_handler)
4086 			(_("%B: %s: invalid needed version %d"),
4087 			 abfd, name, vernum);
4088 		      bfd_set_error (bfd_error_bad_value);
4089 		      goto error_free_vers;
4090 		    }
4091 		}
4092 
4093 	      namelen = strlen (name);
4094 	      verlen = strlen (verstr);
4095 	      newlen = namelen + verlen + 2;
4096 	      if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4097 		  && isym->st_shndx != SHN_UNDEF)
4098 		++newlen;
4099 
4100 	      newname = (char *) bfd_hash_allocate (&htab->root.table, newlen);
4101 	      if (newname == NULL)
4102 		goto error_free_vers;
4103 	      memcpy (newname, name, namelen);
4104 	      p = newname + namelen;
4105 	      *p++ = ELF_VER_CHR;
4106 	      /* If this is a defined non-hidden version symbol,
4107 		 we add another @ to the name.  This indicates the
4108 		 default version of the symbol.  */
4109 	      if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4110 		  && isym->st_shndx != SHN_UNDEF)
4111 		*p++ = ELF_VER_CHR;
4112 	      memcpy (p, verstr, verlen + 1);
4113 
4114 	      name = newname;
4115 	    }
4116 
4117 	  /* If necessary, make a second attempt to locate the bfd
4118 	     containing an unresolved, non-weak reference to the
4119 	     current symbol.  */
4120 	  if (! bfd_is_und_section (sec) && undef_bfd == NULL)
4121 	    {
4122 	      h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
4123 
4124 	      if (h != NULL
4125 		  && h->root.type == bfd_link_hash_undefined
4126 		  && h->root.u.undef.abfd)
4127 		undef_bfd = h->root.u.undef.abfd;
4128 	    }
4129 
4130 	  if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec,
4131 				      &value, &old_alignment,
4132 				      sym_hash, &skip, &override,
4133 				      &type_change_ok, &size_change_ok))
4134 	    goto error_free_vers;
4135 
4136 	  if (skip)
4137 	    continue;
4138 
4139 	  if (override)
4140 	    definition = FALSE;
4141 
4142 	  h = *sym_hash;
4143 	  while (h->root.type == bfd_link_hash_indirect
4144 		 || h->root.type == bfd_link_hash_warning)
4145 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
4146 
4147 	  /* Remember the old alignment if this is a common symbol, so
4148 	     that we don't reduce the alignment later on.  We can't
4149 	     check later, because _bfd_generic_link_add_one_symbol
4150 	     will set a default for the alignment which we want to
4151 	     override. We also remember the old bfd where the existing
4152 	     definition comes from.  */
4153 	  switch (h->root.type)
4154 	    {
4155 	    default:
4156 	      break;
4157 
4158 	    case bfd_link_hash_defined:
4159 	    case bfd_link_hash_defweak:
4160 	      old_bfd = h->root.u.def.section->owner;
4161 	      break;
4162 
4163 	    case bfd_link_hash_common:
4164 	      old_bfd = h->root.u.c.p->section->owner;
4165 	      old_alignment = h->root.u.c.p->alignment_power;
4166 	      break;
4167 	    }
4168 
4169 	  if (elf_tdata (abfd)->verdef != NULL
4170 	      && ! override
4171 	      && vernum > 1
4172 	      && definition)
4173 	    h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
4174 	}
4175 
4176       if (! (_bfd_generic_link_add_one_symbol
4177 	     (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
4178 	      (struct bfd_link_hash_entry **) sym_hash)))
4179 	goto error_free_vers;
4180 
4181       h = *sym_hash;
4182       while (h->root.type == bfd_link_hash_indirect
4183 	     || h->root.type == bfd_link_hash_warning)
4184 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
4185 
4186       *sym_hash = h;
4187       if (is_elf_hash_table (htab))
4188 	h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
4189 
4190       new_weakdef = FALSE;
4191       if (dynamic
4192 	  && definition
4193 	  && (flags & BSF_WEAK) != 0
4194 	  && !bed->is_function_type (ELF_ST_TYPE (isym->st_info))
4195 	  && is_elf_hash_table (htab)
4196 	  && h->u.weakdef == NULL)
4197 	{
4198 	  /* Keep a list of all weak defined non function symbols from
4199 	     a dynamic object, using the weakdef field.  Later in this
4200 	     function we will set the weakdef field to the correct
4201 	     value.  We only put non-function symbols from dynamic
4202 	     objects on this list, because that happens to be the only
4203 	     time we need to know the normal symbol corresponding to a
4204 	     weak symbol, and the information is time consuming to
4205 	     figure out.  If the weakdef field is not already NULL,
4206 	     then this symbol was already defined by some previous
4207 	     dynamic object, and we will be using that previous
4208 	     definition anyhow.  */
4209 
4210 	  h->u.weakdef = weaks;
4211 	  weaks = h;
4212 	  new_weakdef = TRUE;
4213 	}
4214 
4215       /* Set the alignment of a common symbol.  */
4216       if ((common || bfd_is_com_section (sec))
4217 	  && h->root.type == bfd_link_hash_common)
4218 	{
4219 	  unsigned int align;
4220 
4221 	  if (common)
4222 	    align = bfd_log2 (isym->st_value);
4223 	  else
4224 	    {
4225 	      /* The new symbol is a common symbol in a shared object.
4226 		 We need to get the alignment from the section.  */
4227 	      align = new_sec->alignment_power;
4228 	    }
4229 	  if (align > old_alignment
4230 	      /* Permit an alignment power of zero if an alignment of one
4231 		 is specified and no other alignments have been specified.  */
4232 	      || (isym->st_value == 1 && old_alignment == 0))
4233 	    h->root.u.c.p->alignment_power = align;
4234 	  else
4235 	    h->root.u.c.p->alignment_power = old_alignment;
4236 	}
4237 
4238       if (is_elf_hash_table (htab))
4239 	{
4240 	  bfd_boolean dynsym;
4241 
4242 	  /* Check the alignment when a common symbol is involved. This
4243 	     can change when a common symbol is overridden by a normal
4244 	     definition or a common symbol is ignored due to the old
4245 	     normal definition. We need to make sure the maximum
4246 	     alignment is maintained.  */
4247 	  if ((old_alignment || common)
4248 	      && h->root.type != bfd_link_hash_common)
4249 	    {
4250 	      unsigned int common_align;
4251 	      unsigned int normal_align;
4252 	      unsigned int symbol_align;
4253 	      bfd *normal_bfd;
4254 	      bfd *common_bfd;
4255 
4256 	      symbol_align = ffs (h->root.u.def.value) - 1;
4257 	      if (h->root.u.def.section->owner != NULL
4258 		  && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
4259 		{
4260 		  normal_align = h->root.u.def.section->alignment_power;
4261 		  if (normal_align > symbol_align)
4262 		    normal_align = symbol_align;
4263 		}
4264 	      else
4265 		normal_align = symbol_align;
4266 
4267 	      if (old_alignment)
4268 		{
4269 		  common_align = old_alignment;
4270 		  common_bfd = old_bfd;
4271 		  normal_bfd = abfd;
4272 		}
4273 	      else
4274 		{
4275 		  common_align = bfd_log2 (isym->st_value);
4276 		  common_bfd = abfd;
4277 		  normal_bfd = old_bfd;
4278 		}
4279 
4280 	      if (normal_align < common_align)
4281 		{
4282 		  /* PR binutils/2735 */
4283 		  if (normal_bfd == NULL)
4284 		    (*_bfd_error_handler)
4285 		      (_("Warning: alignment %u of common symbol `%s' in %B"
4286 			 " is greater than the alignment (%u) of its section %A"),
4287 		       common_bfd, h->root.u.def.section,
4288 		       1 << common_align, name, 1 << normal_align);
4289 		  else
4290 		    (*_bfd_error_handler)
4291 		      (_("Warning: alignment %u of symbol `%s' in %B"
4292 			 " is smaller than %u in %B"),
4293 		       normal_bfd, common_bfd,
4294 		       1 << normal_align, name, 1 << common_align);
4295 		}
4296 	    }
4297 
4298 	  /* Remember the symbol size if it isn't undefined.  */
4299 	  if ((isym->st_size != 0 && isym->st_shndx != SHN_UNDEF)
4300 	      && (definition || h->size == 0))
4301 	    {
4302 	      if (h->size != 0
4303 		  && h->size != isym->st_size
4304 		  && ! size_change_ok)
4305 		(*_bfd_error_handler)
4306 		  (_("Warning: size of symbol `%s' changed"
4307 		     " from %lu in %B to %lu in %B"),
4308 		   old_bfd, abfd,
4309 		   name, (unsigned long) h->size,
4310 		   (unsigned long) isym->st_size);
4311 
4312 	      h->size = isym->st_size;
4313 	    }
4314 
4315 	  /* If this is a common symbol, then we always want H->SIZE
4316 	     to be the size of the common symbol.  The code just above
4317 	     won't fix the size if a common symbol becomes larger.  We
4318 	     don't warn about a size change here, because that is
4319 	     covered by --warn-common.  Allow changed between different
4320 	     function types.  */
4321 	  if (h->root.type == bfd_link_hash_common)
4322 	    h->size = h->root.u.c.size;
4323 
4324 	  if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
4325 	      && (definition || h->type == STT_NOTYPE))
4326 	    {
4327 	      unsigned int type = ELF_ST_TYPE (isym->st_info);
4328 
4329 	      /* Turn an IFUNC symbol from a DSO into a normal FUNC
4330 		 symbol.  */
4331 	      if (type == STT_GNU_IFUNC
4332 		  && (abfd->flags & DYNAMIC) != 0)
4333 		type = STT_FUNC;
4334 
4335 	      if (h->type != type)
4336 		{
4337 		  if (h->type != STT_NOTYPE && ! type_change_ok)
4338 		    (*_bfd_error_handler)
4339 		      (_("Warning: type of symbol `%s' changed"
4340 			 " from %d to %d in %B"),
4341 		       abfd, name, h->type, type);
4342 
4343 		  h->type = type;
4344 		}
4345 	    }
4346 
4347 	  /* Merge st_other field.  */
4348 	  elf_merge_st_other (abfd, h, isym, definition, dynamic);
4349 
4350 	  /* Set a flag in the hash table entry indicating the type of
4351 	     reference or definition we just found.  Keep a count of
4352 	     the number of dynamic symbols we find.  A dynamic symbol
4353 	     is one which is referenced or defined by both a regular
4354 	     object and a shared object.  */
4355 	  dynsym = FALSE;
4356 	  if (! dynamic)
4357 	    {
4358 	      if (! definition)
4359 		{
4360 		  h->ref_regular = 1;
4361 		  if (bind != STB_WEAK)
4362 		    h->ref_regular_nonweak = 1;
4363 		}
4364 	      else
4365 		{
4366 		  h->def_regular = 1;
4367 		  if (h->def_dynamic)
4368 		    {
4369 		      h->def_dynamic = 0;
4370 		      h->ref_dynamic = 1;
4371 		      h->dynamic_def = 1;
4372 		    }
4373 		}
4374 	      if (! info->executable
4375 		  || h->def_dynamic
4376 		  || h->ref_dynamic)
4377 		dynsym = TRUE;
4378 	    }
4379 	  else
4380 	    {
4381 	      if (! definition)
4382 		h->ref_dynamic = 1;
4383 	      else
4384 		h->def_dynamic = 1;
4385 	      if (h->def_regular
4386 		  || h->ref_regular
4387 		  || (h->u.weakdef != NULL
4388 		      && ! new_weakdef
4389 		      && h->u.weakdef->dynindx != -1))
4390 		dynsym = TRUE;
4391 	    }
4392 
4393 	  if (definition && (sec->flags & SEC_DEBUGGING) && !info->relocatable)
4394 	    {
4395 	      /* We don't want to make debug symbol dynamic.  */
4396 	      dynsym = FALSE;
4397 	    }
4398 
4399 	  if (definition)
4400 	    h->target_internal = isym->st_target_internal;
4401 
4402 	  /* Check to see if we need to add an indirect symbol for
4403 	     the default name.  */
4404 	  if (definition || h->root.type == bfd_link_hash_common)
4405 	    if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
4406 					      &sec, &value, &dynsym,
4407 					      override))
4408 	      goto error_free_vers;
4409 
4410 	  if (definition && !dynamic)
4411 	    {
4412 	      char *p = strchr (name, ELF_VER_CHR);
4413 	      if (p != NULL && p[1] != ELF_VER_CHR)
4414 		{
4415 		  /* Queue non-default versions so that .symver x, x@FOO
4416 		     aliases can be checked.  */
4417 		  if (!nondeflt_vers)
4418 		    {
4419 		      amt = ((isymend - isym + 1)
4420 			     * sizeof (struct elf_link_hash_entry *));
4421 		      nondeflt_vers =
4422                           (struct elf_link_hash_entry **) bfd_malloc (amt);
4423 		      if (!nondeflt_vers)
4424 			goto error_free_vers;
4425 		    }
4426 		  nondeflt_vers[nondeflt_vers_cnt++] = h;
4427 		}
4428 	    }
4429 
4430 	  if (dynsym && h->dynindx == -1)
4431 	    {
4432 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
4433 		goto error_free_vers;
4434 	      if (h->u.weakdef != NULL
4435 		  && ! new_weakdef
4436 		  && h->u.weakdef->dynindx == -1)
4437 		{
4438 		  if (!bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
4439 		    goto error_free_vers;
4440 		}
4441 	    }
4442 	  else if (dynsym && h->dynindx != -1)
4443 	    /* If the symbol already has a dynamic index, but
4444 	       visibility says it should not be visible, turn it into
4445 	       a local symbol.  */
4446 	    switch (ELF_ST_VISIBILITY (h->other))
4447 	      {
4448 	      case STV_INTERNAL:
4449 	      case STV_HIDDEN:
4450 		(*bed->elf_backend_hide_symbol) (info, h, TRUE);
4451 		dynsym = FALSE;
4452 		break;
4453 	      }
4454 
4455 	  if (!add_needed
4456 	      && definition
4457 	      && ((dynsym
4458 		   && h->ref_regular)
4459 		  || (h->ref_dynamic
4460 		      && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
4461 		      && !on_needed_list (elf_dt_name (abfd), htab->needed))))
4462 	    {
4463 	      int ret;
4464 	      const char *soname = elf_dt_name (abfd);
4465 
4466 	      /* A symbol from a library loaded via DT_NEEDED of some
4467 		 other library is referenced by a regular object.
4468 		 Add a DT_NEEDED entry for it.  Issue an error if
4469 		 --no-add-needed is used and the reference was not
4470 		 a weak one.  */
4471 	      if (undef_bfd != NULL
4472 		  && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
4473 		{
4474 		  (*_bfd_error_handler)
4475 		    (_("%B: undefined reference to symbol '%s'"),
4476 		     undef_bfd, name);
4477 		  (*_bfd_error_handler)
4478 		    (_("note: '%s' is defined in DSO %B so try adding it to the linker command line"),
4479 		     abfd, name);
4480 		  bfd_set_error (bfd_error_invalid_operation);
4481 		  goto error_free_vers;
4482 		}
4483 
4484 	      elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class)
4485                   (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED);
4486 
4487 	      add_needed = TRUE;
4488 	      ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4489 	      if (ret < 0)
4490 		goto error_free_vers;
4491 
4492 	      BFD_ASSERT (ret == 0);
4493 	    }
4494 	}
4495     }
4496 
4497   if (extversym != NULL)
4498     {
4499       free (extversym);
4500       extversym = NULL;
4501     }
4502 
4503   if (isymbuf != NULL)
4504     {
4505       free (isymbuf);
4506       isymbuf = NULL;
4507     }
4508 
4509   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4510     {
4511       unsigned int i;
4512 
4513       /* Restore the symbol table.  */
4514       if (bed->as_needed_cleanup)
4515 	(*bed->as_needed_cleanup) (abfd, info);
4516       old_hash = (char *) old_tab + tabsize;
4517       old_ent = (char *) old_hash + hashsize;
4518       sym_hash = elf_sym_hashes (abfd);
4519       htab->root.table.table = old_table;
4520       htab->root.table.size = old_size;
4521       htab->root.table.count = old_count;
4522       memcpy (htab->root.table.table, old_tab, tabsize);
4523       memcpy (sym_hash, old_hash, hashsize);
4524       htab->root.undefs = old_undefs;
4525       htab->root.undefs_tail = old_undefs_tail;
4526       for (i = 0; i < htab->root.table.size; i++)
4527 	{
4528 	  struct bfd_hash_entry *p;
4529 	  struct elf_link_hash_entry *h;
4530 
4531 	  for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4532 	    {
4533 	      h = (struct elf_link_hash_entry *) p;
4534 	      if (h->root.type == bfd_link_hash_warning)
4535 		h = (struct elf_link_hash_entry *) h->root.u.i.link;
4536 	      if (h->dynindx >= old_dynsymcount)
4537 		_bfd_elf_strtab_delref (htab->dynstr, h->dynstr_index);
4538 
4539 	      memcpy (p, old_ent, htab->root.table.entsize);
4540 	      old_ent = (char *) old_ent + htab->root.table.entsize;
4541 	      h = (struct elf_link_hash_entry *) p;
4542 	      if (h->root.type == bfd_link_hash_warning)
4543 		{
4544 		  memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
4545 		  old_ent = (char *) old_ent + htab->root.table.entsize;
4546 		}
4547 	    }
4548 	}
4549 
4550       /* Make a special call to the linker "notice" function to
4551 	 tell it that symbols added for crefs may need to be removed.  */
4552       if (!(*info->callbacks->notice) (info, NULL, abfd, NULL,
4553 				       notice_not_needed))
4554 	goto error_free_vers;
4555 
4556       free (old_tab);
4557       objalloc_free_block ((struct objalloc *) htab->root.table.memory,
4558 			   alloc_mark);
4559       if (nondeflt_vers != NULL)
4560 	free (nondeflt_vers);
4561       return TRUE;
4562     }
4563 
4564   if (old_tab != NULL)
4565     {
4566       if (!(*info->callbacks->notice) (info, NULL, abfd, NULL,
4567 				       notice_needed))
4568 	goto error_free_vers;
4569       free (old_tab);
4570       old_tab = NULL;
4571     }
4572 
4573   /* Now that all the symbols from this input file are created, handle
4574      .symver foo, foo@BAR such that any relocs against foo become foo@BAR.  */
4575   if (nondeflt_vers != NULL)
4576     {
4577       bfd_size_type cnt, symidx;
4578 
4579       for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
4580 	{
4581 	  struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
4582 	  char *shortname, *p;
4583 
4584 	  p = strchr (h->root.root.string, ELF_VER_CHR);
4585 	  if (p == NULL
4586 	      || (h->root.type != bfd_link_hash_defined
4587 		  && h->root.type != bfd_link_hash_defweak))
4588 	    continue;
4589 
4590 	  amt = p - h->root.root.string;
4591 	  shortname = (char *) bfd_malloc (amt + 1);
4592 	  if (!shortname)
4593 	    goto error_free_vers;
4594 	  memcpy (shortname, h->root.root.string, amt);
4595 	  shortname[amt] = '\0';
4596 
4597 	  hi = (struct elf_link_hash_entry *)
4598 	       bfd_link_hash_lookup (&htab->root, shortname,
4599 				     FALSE, FALSE, FALSE);
4600 	  if (hi != NULL
4601 	      && hi->root.type == h->root.type
4602 	      && hi->root.u.def.value == h->root.u.def.value
4603 	      && hi->root.u.def.section == h->root.u.def.section)
4604 	    {
4605 	      (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
4606 	      hi->root.type = bfd_link_hash_indirect;
4607 	      hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
4608 	      (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
4609 	      sym_hash = elf_sym_hashes (abfd);
4610 	      if (sym_hash)
4611 		for (symidx = 0; symidx < extsymcount; ++symidx)
4612 		  if (sym_hash[symidx] == hi)
4613 		    {
4614 		      sym_hash[symidx] = h;
4615 		      break;
4616 		    }
4617 	    }
4618 	  free (shortname);
4619 	}
4620       free (nondeflt_vers);
4621       nondeflt_vers = NULL;
4622     }
4623 
4624   /* Now set the weakdefs field correctly for all the weak defined
4625      symbols we found.  The only way to do this is to search all the
4626      symbols.  Since we only need the information for non functions in
4627      dynamic objects, that's the only time we actually put anything on
4628      the list WEAKS.  We need this information so that if a regular
4629      object refers to a symbol defined weakly in a dynamic object, the
4630      real symbol in the dynamic object is also put in the dynamic
4631      symbols; we also must arrange for both symbols to point to the
4632      same memory location.  We could handle the general case of symbol
4633      aliasing, but a general symbol alias can only be generated in
4634      assembler code, handling it correctly would be very time
4635      consuming, and other ELF linkers don't handle general aliasing
4636      either.  */
4637   if (weaks != NULL)
4638     {
4639       struct elf_link_hash_entry **hpp;
4640       struct elf_link_hash_entry **hppend;
4641       struct elf_link_hash_entry **sorted_sym_hash;
4642       struct elf_link_hash_entry *h;
4643       size_t sym_count;
4644 
4645       /* Since we have to search the whole symbol list for each weak
4646 	 defined symbol, search time for N weak defined symbols will be
4647 	 O(N^2). Binary search will cut it down to O(NlogN).  */
4648       amt = extsymcount * sizeof (struct elf_link_hash_entry *);
4649       sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt);
4650       if (sorted_sym_hash == NULL)
4651 	goto error_return;
4652       sym_hash = sorted_sym_hash;
4653       hpp = elf_sym_hashes (abfd);
4654       hppend = hpp + extsymcount;
4655       sym_count = 0;
4656       for (; hpp < hppend; hpp++)
4657 	{
4658 	  h = *hpp;
4659 	  if (h != NULL
4660 	      && h->root.type == bfd_link_hash_defined
4661 	      && !bed->is_function_type (h->type))
4662 	    {
4663 	      *sym_hash = h;
4664 	      sym_hash++;
4665 	      sym_count++;
4666 	    }
4667 	}
4668 
4669       qsort (sorted_sym_hash, sym_count,
4670 	     sizeof (struct elf_link_hash_entry *),
4671 	     elf_sort_symbol);
4672 
4673       while (weaks != NULL)
4674 	{
4675 	  struct elf_link_hash_entry *hlook;
4676 	  asection *slook;
4677 	  bfd_vma vlook;
4678 	  long ilook;
4679 	  size_t i, j, idx;
4680 
4681 	  hlook = weaks;
4682 	  weaks = hlook->u.weakdef;
4683 	  hlook->u.weakdef = NULL;
4684 
4685 	  BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
4686 		      || hlook->root.type == bfd_link_hash_defweak
4687 		      || hlook->root.type == bfd_link_hash_common
4688 		      || hlook->root.type == bfd_link_hash_indirect);
4689 	  slook = hlook->root.u.def.section;
4690 	  vlook = hlook->root.u.def.value;
4691 
4692 	  ilook = -1;
4693 	  i = 0;
4694 	  j = sym_count;
4695 	  while (i < j)
4696 	    {
4697 	      bfd_signed_vma vdiff;
4698 	      idx = (i + j) / 2;
4699 	      h = sorted_sym_hash [idx];
4700 	      vdiff = vlook - h->root.u.def.value;
4701 	      if (vdiff < 0)
4702 		j = idx;
4703 	      else if (vdiff > 0)
4704 		i = idx + 1;
4705 	      else
4706 		{
4707 		  long sdiff = slook->id - h->root.u.def.section->id;
4708 		  if (sdiff < 0)
4709 		    j = idx;
4710 		  else if (sdiff > 0)
4711 		    i = idx + 1;
4712 		  else
4713 		    {
4714 		      ilook = idx;
4715 		      break;
4716 		    }
4717 		}
4718 	    }
4719 
4720 	  /* We didn't find a value/section match.  */
4721 	  if (ilook == -1)
4722 	    continue;
4723 
4724 	  for (i = ilook; i < sym_count; i++)
4725 	    {
4726 	      h = sorted_sym_hash [i];
4727 
4728 	      /* Stop if value or section doesn't match.  */
4729 	      if (h->root.u.def.value != vlook
4730 		  || h->root.u.def.section != slook)
4731 		break;
4732 	      else if (h != hlook)
4733 		{
4734 		  hlook->u.weakdef = h;
4735 
4736 		  /* If the weak definition is in the list of dynamic
4737 		     symbols, make sure the real definition is put
4738 		     there as well.  */
4739 		  if (hlook->dynindx != -1 && h->dynindx == -1)
4740 		    {
4741 		      if (! bfd_elf_link_record_dynamic_symbol (info, h))
4742 			{
4743 			err_free_sym_hash:
4744 			  free (sorted_sym_hash);
4745 			  goto error_return;
4746 			}
4747 		    }
4748 
4749 		  /* If the real definition is in the list of dynamic
4750 		     symbols, make sure the weak definition is put
4751 		     there as well.  If we don't do this, then the
4752 		     dynamic loader might not merge the entries for the
4753 		     real definition and the weak definition.  */
4754 		  if (h->dynindx != -1 && hlook->dynindx == -1)
4755 		    {
4756 		      if (! bfd_elf_link_record_dynamic_symbol (info, hlook))
4757 			goto err_free_sym_hash;
4758 		    }
4759 		  break;
4760 		}
4761 	    }
4762 	}
4763 
4764       free (sorted_sym_hash);
4765     }
4766 
4767   if (bed->check_directives
4768       && !(*bed->check_directives) (abfd, info))
4769     return FALSE;
4770 
4771   /* If this object is the same format as the output object, and it is
4772      not a shared library, then let the backend look through the
4773      relocs.
4774 
4775      This is required to build global offset table entries and to
4776      arrange for dynamic relocs.  It is not required for the
4777      particular common case of linking non PIC code, even when linking
4778      against shared libraries, but unfortunately there is no way of
4779      knowing whether an object file has been compiled PIC or not.
4780      Looking through the relocs is not particularly time consuming.
4781      The problem is that we must either (1) keep the relocs in memory,
4782      which causes the linker to require additional runtime memory or
4783      (2) read the relocs twice from the input file, which wastes time.
4784      This would be a good case for using mmap.
4785 
4786      I have no idea how to handle linking PIC code into a file of a
4787      different format.  It probably can't be done.  */
4788   if (! dynamic
4789       && is_elf_hash_table (htab)
4790       && bed->check_relocs != NULL
4791       && elf_object_id (abfd) == elf_hash_table_id (htab)
4792       && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
4793     {
4794       asection *o;
4795 
4796       for (o = abfd->sections; o != NULL; o = o->next)
4797 	{
4798 	  Elf_Internal_Rela *internal_relocs;
4799 	  bfd_boolean ok;
4800 
4801 	  if ((o->flags & SEC_RELOC) == 0
4802 	      || o->reloc_count == 0
4803 	      || ((info->strip == strip_all || info->strip == strip_debugger)
4804 		  && (o->flags & SEC_DEBUGGING) != 0)
4805 	      || bfd_is_abs_section (o->output_section))
4806 	    continue;
4807 
4808 	  internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
4809 						       info->keep_memory);
4810 	  if (internal_relocs == NULL)
4811 	    goto error_return;
4812 
4813 	  ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
4814 
4815 	  if (elf_section_data (o)->relocs != internal_relocs)
4816 	    free (internal_relocs);
4817 
4818 	  if (! ok)
4819 	    goto error_return;
4820 	}
4821     }
4822 
4823   /* If this is a non-traditional link, try to optimize the handling
4824      of the .stab/.stabstr sections.  */
4825   if (! dynamic
4826       && ! info->traditional_format
4827       && is_elf_hash_table (htab)
4828       && (info->strip != strip_all && info->strip != strip_debugger))
4829     {
4830       asection *stabstr;
4831 
4832       stabstr = bfd_get_section_by_name (abfd, ".stabstr");
4833       if (stabstr != NULL)
4834 	{
4835 	  bfd_size_type string_offset = 0;
4836 	  asection *stab;
4837 
4838 	  for (stab = abfd->sections; stab; stab = stab->next)
4839 	    if (CONST_STRNEQ (stab->name, ".stab")
4840 		&& (!stab->name[5] ||
4841 		    (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
4842 		&& (stab->flags & SEC_MERGE) == 0
4843 		&& !bfd_is_abs_section (stab->output_section))
4844 	      {
4845 		struct bfd_elf_section_data *secdata;
4846 
4847 		secdata = elf_section_data (stab);
4848 		if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab,
4849 					       stabstr, &secdata->sec_info,
4850 					       &string_offset))
4851 		  goto error_return;
4852 		if (secdata->sec_info)
4853 		  stab->sec_info_type = ELF_INFO_TYPE_STABS;
4854 	    }
4855 	}
4856     }
4857 
4858   if (is_elf_hash_table (htab) && add_needed)
4859     {
4860       /* Add this bfd to the loaded list.  */
4861       struct elf_link_loaded_list *n;
4862 
4863       n = (struct elf_link_loaded_list *)
4864           bfd_alloc (abfd, sizeof (struct elf_link_loaded_list));
4865       if (n == NULL)
4866 	goto error_return;
4867       n->abfd = abfd;
4868       n->next = htab->loaded;
4869       htab->loaded = n;
4870     }
4871 
4872   return TRUE;
4873 
4874  error_free_vers:
4875   if (old_tab != NULL)
4876     free (old_tab);
4877   if (nondeflt_vers != NULL)
4878     free (nondeflt_vers);
4879   if (extversym != NULL)
4880     free (extversym);
4881  error_free_sym:
4882   if (isymbuf != NULL)
4883     free (isymbuf);
4884  error_return:
4885   return FALSE;
4886 }
4887 
4888 /* Return the linker hash table entry of a symbol that might be
4889    satisfied by an archive symbol.  Return -1 on error.  */
4890 
4891 struct elf_link_hash_entry *
4892 _bfd_elf_archive_symbol_lookup (bfd *abfd,
4893 				struct bfd_link_info *info,
4894 				const char *name)
4895 {
4896   struct elf_link_hash_entry *h;
4897   char *p, *copy;
4898   size_t len, first;
4899 
4900   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
4901   if (h != NULL)
4902     return h;
4903 
4904   /* If this is a default version (the name contains @@), look up the
4905      symbol again with only one `@' as well as without the version.
4906      The effect is that references to the symbol with and without the
4907      version will be matched by the default symbol in the archive.  */
4908 
4909   p = strchr (name, ELF_VER_CHR);
4910   if (p == NULL || p[1] != ELF_VER_CHR)
4911     return h;
4912 
4913   /* First check with only one `@'.  */
4914   len = strlen (name);
4915   copy = (char *) bfd_alloc (abfd, len);
4916   if (copy == NULL)
4917     return (struct elf_link_hash_entry *) 0 - 1;
4918 
4919   first = p - name + 1;
4920   memcpy (copy, name, first);
4921   memcpy (copy + first, name + first + 1, len - first);
4922 
4923   h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, FALSE);
4924   if (h == NULL)
4925     {
4926       /* We also need to check references to the symbol without the
4927 	 version.  */
4928       copy[first - 1] = '\0';
4929       h = elf_link_hash_lookup (elf_hash_table (info), copy,
4930 				FALSE, FALSE, FALSE);
4931     }
4932 
4933   bfd_release (abfd, copy);
4934   return h;
4935 }
4936 
4937 /* Add symbols from an ELF archive file to the linker hash table.  We
4938    don't use _bfd_generic_link_add_archive_symbols because of a
4939    problem which arises on UnixWare.  The UnixWare libc.so is an
4940    archive which includes an entry libc.so.1 which defines a bunch of
4941    symbols.  The libc.so archive also includes a number of other
4942    object files, which also define symbols, some of which are the same
4943    as those defined in libc.so.1.  Correct linking requires that we
4944    consider each object file in turn, and include it if it defines any
4945    symbols we need.  _bfd_generic_link_add_archive_symbols does not do
4946    this; it looks through the list of undefined symbols, and includes
4947    any object file which defines them.  When this algorithm is used on
4948    UnixWare, it winds up pulling in libc.so.1 early and defining a
4949    bunch of symbols.  This means that some of the other objects in the
4950    archive are not included in the link, which is incorrect since they
4951    precede libc.so.1 in the archive.
4952 
4953    Fortunately, ELF archive handling is simpler than that done by
4954    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
4955    oddities.  In ELF, if we find a symbol in the archive map, and the
4956    symbol is currently undefined, we know that we must pull in that
4957    object file.
4958 
4959    Unfortunately, we do have to make multiple passes over the symbol
4960    table until nothing further is resolved.  */
4961 
4962 static bfd_boolean
4963 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
4964 {
4965   symindex c;
4966   bfd_boolean *defined = NULL;
4967   bfd_boolean *included = NULL;
4968   carsym *symdefs;
4969   bfd_boolean loop;
4970   bfd_size_type amt;
4971   const struct elf_backend_data *bed;
4972   struct elf_link_hash_entry * (*archive_symbol_lookup)
4973     (bfd *, struct bfd_link_info *, const char *);
4974 
4975   if (! bfd_has_map (abfd))
4976     {
4977       /* An empty archive is a special case.  */
4978       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
4979 	return TRUE;
4980       bfd_set_error (bfd_error_no_armap);
4981       return FALSE;
4982     }
4983 
4984   /* Keep track of all symbols we know to be already defined, and all
4985      files we know to be already included.  This is to speed up the
4986      second and subsequent passes.  */
4987   c = bfd_ardata (abfd)->symdef_count;
4988   if (c == 0)
4989     return TRUE;
4990   amt = c;
4991   amt *= sizeof (bfd_boolean);
4992   defined = (bfd_boolean *) bfd_zmalloc (amt);
4993   included = (bfd_boolean *) bfd_zmalloc (amt);
4994   if (defined == NULL || included == NULL)
4995     goto error_return;
4996 
4997   symdefs = bfd_ardata (abfd)->symdefs;
4998   bed = get_elf_backend_data (abfd);
4999   archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup;
5000 
5001   do
5002     {
5003       file_ptr last;
5004       symindex i;
5005       carsym *symdef;
5006       carsym *symdefend;
5007 
5008       loop = FALSE;
5009       last = -1;
5010 
5011       symdef = symdefs;
5012       symdefend = symdef + c;
5013       for (i = 0; symdef < symdefend; symdef++, i++)
5014 	{
5015 	  struct elf_link_hash_entry *h;
5016 	  bfd *element;
5017 	  struct bfd_link_hash_entry *undefs_tail;
5018 	  symindex mark;
5019 
5020 	  if (defined[i] || included[i])
5021 	    continue;
5022 	  if (symdef->file_offset == last)
5023 	    {
5024 	      included[i] = TRUE;
5025 	      continue;
5026 	    }
5027 
5028 	  h = archive_symbol_lookup (abfd, info, symdef->name);
5029 	  if (h == (struct elf_link_hash_entry *) 0 - 1)
5030 	    goto error_return;
5031 
5032 	  if (h == NULL)
5033 	    continue;
5034 
5035 	  if (h->root.type == bfd_link_hash_common)
5036 	    {
5037 	      /* We currently have a common symbol.  The archive map contains
5038 		 a reference to this symbol, so we may want to include it.  We
5039 		 only want to include it however, if this archive element
5040 		 contains a definition of the symbol, not just another common
5041 		 declaration of it.
5042 
5043 		 Unfortunately some archivers (including GNU ar) will put
5044 		 declarations of common symbols into their archive maps, as
5045 		 well as real definitions, so we cannot just go by the archive
5046 		 map alone.  Instead we must read in the element's symbol
5047 		 table and check that to see what kind of symbol definition
5048 		 this is.  */
5049 	      if (! elf_link_is_defined_archive_symbol (abfd, symdef))
5050 		continue;
5051 	    }
5052 	  else if (h->root.type != bfd_link_hash_undefined)
5053 	    {
5054 	      if (h->root.type != bfd_link_hash_undefweak)
5055 		defined[i] = TRUE;
5056 	      continue;
5057 	    }
5058 
5059 	  /* We need to include this archive member.  */
5060 	  element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
5061 	  if (element == NULL)
5062 	    goto error_return;
5063 
5064 	  if (! bfd_check_format (element, bfd_object))
5065 	    goto error_return;
5066 
5067 	  /* Doublecheck that we have not included this object
5068 	     already--it should be impossible, but there may be
5069 	     something wrong with the archive.  */
5070 	  if (element->archive_pass != 0)
5071 	    {
5072 	      bfd_set_error (bfd_error_bad_value);
5073 	      goto error_return;
5074 	    }
5075 	  element->archive_pass = 1;
5076 
5077 	  undefs_tail = info->hash->undefs_tail;
5078 
5079 	  if (!(*info->callbacks
5080 		->add_archive_element) (info, element, symdef->name, &element))
5081 	    goto error_return;
5082 	  if (!bfd_link_add_symbols (element, info))
5083 	    goto error_return;
5084 
5085 	  /* If there are any new undefined symbols, we need to make
5086 	     another pass through the archive in order to see whether
5087 	     they can be defined.  FIXME: This isn't perfect, because
5088 	     common symbols wind up on undefs_tail and because an
5089 	     undefined symbol which is defined later on in this pass
5090 	     does not require another pass.  This isn't a bug, but it
5091 	     does make the code less efficient than it could be.  */
5092 	  if (undefs_tail != info->hash->undefs_tail)
5093 	    loop = TRUE;
5094 
5095 	  /* Look backward to mark all symbols from this object file
5096 	     which we have already seen in this pass.  */
5097 	  mark = i;
5098 	  do
5099 	    {
5100 	      included[mark] = TRUE;
5101 	      if (mark == 0)
5102 		break;
5103 	      --mark;
5104 	    }
5105 	  while (symdefs[mark].file_offset == symdef->file_offset);
5106 
5107 	  /* We mark subsequent symbols from this object file as we go
5108 	     on through the loop.  */
5109 	  last = symdef->file_offset;
5110 	}
5111     }
5112   while (loop);
5113 
5114   free (defined);
5115   free (included);
5116 
5117   return TRUE;
5118 
5119  error_return:
5120   if (defined != NULL)
5121     free (defined);
5122   if (included != NULL)
5123     free (included);
5124   return FALSE;
5125 }
5126 
5127 /* Given an ELF BFD, add symbols to the global hash table as
5128    appropriate.  */
5129 
5130 bfd_boolean
5131 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
5132 {
5133   switch (bfd_get_format (abfd))
5134     {
5135     case bfd_object:
5136       return elf_link_add_object_symbols (abfd, info);
5137     case bfd_archive:
5138       return elf_link_add_archive_symbols (abfd, info);
5139     default:
5140       bfd_set_error (bfd_error_wrong_format);
5141       return FALSE;
5142     }
5143 }
5144 
5145 struct hash_codes_info
5146 {
5147   unsigned long *hashcodes;
5148   bfd_boolean error;
5149 };
5150 
5151 /* This function will be called though elf_link_hash_traverse to store
5152    all hash value of the exported symbols in an array.  */
5153 
5154 static bfd_boolean
5155 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
5156 {
5157   struct hash_codes_info *inf = (struct hash_codes_info *) data;
5158   const char *name;
5159   char *p;
5160   unsigned long ha;
5161   char *alc = NULL;
5162 
5163   if (h->root.type == bfd_link_hash_warning)
5164     h = (struct elf_link_hash_entry *) h->root.u.i.link;
5165 
5166   /* Ignore indirect symbols.  These are added by the versioning code.  */
5167   if (h->dynindx == -1)
5168     return TRUE;
5169 
5170   name = h->root.root.string;
5171   p = strchr (name, ELF_VER_CHR);
5172   if (p != NULL)
5173     {
5174       alc = (char *) bfd_malloc (p - name + 1);
5175       if (alc == NULL)
5176 	{
5177 	  inf->error = TRUE;
5178 	  return FALSE;
5179 	}
5180       memcpy (alc, name, p - name);
5181       alc[p - name] = '\0';
5182       name = alc;
5183     }
5184 
5185   /* Compute the hash value.  */
5186   ha = bfd_elf_hash (name);
5187 
5188   /* Store the found hash value in the array given as the argument.  */
5189   *(inf->hashcodes)++ = ha;
5190 
5191   /* And store it in the struct so that we can put it in the hash table
5192      later.  */
5193   h->u.elf_hash_value = ha;
5194 
5195   if (alc != NULL)
5196     free (alc);
5197 
5198   return TRUE;
5199 }
5200 
5201 struct collect_gnu_hash_codes
5202 {
5203   bfd *output_bfd;
5204   const struct elf_backend_data *bed;
5205   unsigned long int nsyms;
5206   unsigned long int maskbits;
5207   unsigned long int *hashcodes;
5208   unsigned long int *hashval;
5209   unsigned long int *indx;
5210   unsigned long int *counts;
5211   bfd_vma *bitmask;
5212   bfd_byte *contents;
5213   long int min_dynindx;
5214   unsigned long int bucketcount;
5215   unsigned long int symindx;
5216   long int local_indx;
5217   long int shift1, shift2;
5218   unsigned long int mask;
5219   bfd_boolean error;
5220 };
5221 
5222 /* This function will be called though elf_link_hash_traverse to store
5223    all hash value of the exported symbols in an array.  */
5224 
5225 static bfd_boolean
5226 elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data)
5227 {
5228   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5229   const char *name;
5230   char *p;
5231   unsigned long ha;
5232   char *alc = NULL;
5233 
5234   if (h->root.type == bfd_link_hash_warning)
5235     h = (struct elf_link_hash_entry *) h->root.u.i.link;
5236 
5237   /* Ignore indirect symbols.  These are added by the versioning code.  */
5238   if (h->dynindx == -1)
5239     return TRUE;
5240 
5241   /* Ignore also local symbols and undefined symbols.  */
5242   if (! (*s->bed->elf_hash_symbol) (h))
5243     return TRUE;
5244 
5245   name = h->root.root.string;
5246   p = strchr (name, ELF_VER_CHR);
5247   if (p != NULL)
5248     {
5249       alc = (char *) bfd_malloc (p - name + 1);
5250       if (alc == NULL)
5251 	{
5252 	  s->error = TRUE;
5253 	  return FALSE;
5254 	}
5255       memcpy (alc, name, p - name);
5256       alc[p - name] = '\0';
5257       name = alc;
5258     }
5259 
5260   /* Compute the hash value.  */
5261   ha = bfd_elf_gnu_hash (name);
5262 
5263   /* Store the found hash value in the array for compute_bucket_count,
5264      and also for .dynsym reordering purposes.  */
5265   s->hashcodes[s->nsyms] = ha;
5266   s->hashval[h->dynindx] = ha;
5267   ++s->nsyms;
5268   if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx)
5269     s->min_dynindx = h->dynindx;
5270 
5271   if (alc != NULL)
5272     free (alc);
5273 
5274   return TRUE;
5275 }
5276 
5277 /* This function will be called though elf_link_hash_traverse to do
5278    final dynaminc symbol renumbering.  */
5279 
5280 static bfd_boolean
5281 elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data)
5282 {
5283   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5284   unsigned long int bucket;
5285   unsigned long int val;
5286 
5287   if (h->root.type == bfd_link_hash_warning)
5288     h = (struct elf_link_hash_entry *) h->root.u.i.link;
5289 
5290   /* Ignore indirect symbols.  */
5291   if (h->dynindx == -1)
5292     return TRUE;
5293 
5294   /* Ignore also local symbols and undefined symbols.  */
5295   if (! (*s->bed->elf_hash_symbol) (h))
5296     {
5297       if (h->dynindx >= s->min_dynindx)
5298 	h->dynindx = s->local_indx++;
5299       return TRUE;
5300     }
5301 
5302   bucket = s->hashval[h->dynindx] % s->bucketcount;
5303   val = (s->hashval[h->dynindx] >> s->shift1)
5304 	& ((s->maskbits >> s->shift1) - 1);
5305   s->bitmask[val] |= ((bfd_vma) 1) << (s->hashval[h->dynindx] & s->mask);
5306   s->bitmask[val]
5307     |= ((bfd_vma) 1) << ((s->hashval[h->dynindx] >> s->shift2) & s->mask);
5308   val = s->hashval[h->dynindx] & ~(unsigned long int) 1;
5309   if (s->counts[bucket] == 1)
5310     /* Last element terminates the chain.  */
5311     val |= 1;
5312   bfd_put_32 (s->output_bfd, val,
5313 	      s->contents + (s->indx[bucket] - s->symindx) * 4);
5314   --s->counts[bucket];
5315   h->dynindx = s->indx[bucket]++;
5316   return TRUE;
5317 }
5318 
5319 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
5320 
5321 bfd_boolean
5322 _bfd_elf_hash_symbol (struct elf_link_hash_entry *h)
5323 {
5324   return !(h->forced_local
5325 	   || h->root.type == bfd_link_hash_undefined
5326 	   || h->root.type == bfd_link_hash_undefweak
5327 	   || ((h->root.type == bfd_link_hash_defined
5328 		|| h->root.type == bfd_link_hash_defweak)
5329 	       && h->root.u.def.section->output_section == NULL));
5330 }
5331 
5332 /* Array used to determine the number of hash table buckets to use
5333    based on the number of symbols there are.  If there are fewer than
5334    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
5335    fewer than 37 we use 17 buckets, and so forth.  We never use more
5336    than 32771 buckets.  */
5337 
5338 static const size_t elf_buckets[] =
5339 {
5340   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
5341   16411, 32771, 0
5342 };
5343 
5344 /* Compute bucket count for hashing table.  We do not use a static set
5345    of possible tables sizes anymore.  Instead we determine for all
5346    possible reasonable sizes of the table the outcome (i.e., the
5347    number of collisions etc) and choose the best solution.  The
5348    weighting functions are not too simple to allow the table to grow
5349    without bounds.  Instead one of the weighting factors is the size.
5350    Therefore the result is always a good payoff between few collisions
5351    (= short chain lengths) and table size.  */
5352 static size_t
5353 compute_bucket_count (struct bfd_link_info *info ATTRIBUTE_UNUSED,
5354 		      unsigned long int *hashcodes ATTRIBUTE_UNUSED,
5355 		      unsigned long int nsyms,
5356 		      int gnu_hash)
5357 {
5358   size_t best_size = 0;
5359   unsigned long int i;
5360 
5361   /* We have a problem here.  The following code to optimize the table
5362      size requires an integer type with more the 32 bits.  If
5363      BFD_HOST_U_64_BIT is set we know about such a type.  */
5364 #ifdef BFD_HOST_U_64_BIT
5365   if (info->optimize)
5366     {
5367       size_t minsize;
5368       size_t maxsize;
5369       BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
5370       bfd *dynobj = elf_hash_table (info)->dynobj;
5371       size_t dynsymcount = elf_hash_table (info)->dynsymcount;
5372       const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
5373       unsigned long int *counts;
5374       bfd_size_type amt;
5375       unsigned int no_improvement_count = 0;
5376 
5377       /* Possible optimization parameters: if we have NSYMS symbols we say
5378 	 that the hashing table must at least have NSYMS/4 and at most
5379 	 2*NSYMS buckets.  */
5380       minsize = nsyms / 4;
5381       if (minsize == 0)
5382 	minsize = 1;
5383       best_size = maxsize = nsyms * 2;
5384       if (gnu_hash)
5385 	{
5386 	  if (minsize < 2)
5387 	    minsize = 2;
5388 	  if ((best_size & 31) == 0)
5389 	    ++best_size;
5390 	}
5391 
5392       /* Create array where we count the collisions in.  We must use bfd_malloc
5393 	 since the size could be large.  */
5394       amt = maxsize;
5395       amt *= sizeof (unsigned long int);
5396       counts = (unsigned long int *) bfd_malloc (amt);
5397       if (counts == NULL)
5398 	return 0;
5399 
5400       /* Compute the "optimal" size for the hash table.  The criteria is a
5401 	 minimal chain length.  The minor criteria is (of course) the size
5402 	 of the table.  */
5403       for (i = minsize; i < maxsize; ++i)
5404 	{
5405 	  /* Walk through the array of hashcodes and count the collisions.  */
5406 	  BFD_HOST_U_64_BIT max;
5407 	  unsigned long int j;
5408 	  unsigned long int fact;
5409 
5410 	  if (gnu_hash && (i & 31) == 0)
5411 	    continue;
5412 
5413 	  memset (counts, '\0', i * sizeof (unsigned long int));
5414 
5415 	  /* Determine how often each hash bucket is used.  */
5416 	  for (j = 0; j < nsyms; ++j)
5417 	    ++counts[hashcodes[j] % i];
5418 
5419 	  /* For the weight function we need some information about the
5420 	     pagesize on the target.  This is information need not be 100%
5421 	     accurate.  Since this information is not available (so far) we
5422 	     define it here to a reasonable default value.  If it is crucial
5423 	     to have a better value some day simply define this value.  */
5424 # ifndef BFD_TARGET_PAGESIZE
5425 #  define BFD_TARGET_PAGESIZE	(4096)
5426 # endif
5427 
5428 	  /* We in any case need 2 + DYNSYMCOUNT entries for the size values
5429 	     and the chains.  */
5430 	  max = (2 + dynsymcount) * bed->s->sizeof_hash_entry;
5431 
5432 # if 1
5433 	  /* Variant 1: optimize for short chains.  We add the squares
5434 	     of all the chain lengths (which favors many small chain
5435 	     over a few long chains).  */
5436 	  for (j = 0; j < i; ++j)
5437 	    max += counts[j] * counts[j];
5438 
5439 	  /* This adds penalties for the overall size of the table.  */
5440 	  fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5441 	  max *= fact * fact;
5442 # else
5443 	  /* Variant 2: Optimize a lot more for small table.  Here we
5444 	     also add squares of the size but we also add penalties for
5445 	     empty slots (the +1 term).  */
5446 	  for (j = 0; j < i; ++j)
5447 	    max += (1 + counts[j]) * (1 + counts[j]);
5448 
5449 	  /* The overall size of the table is considered, but not as
5450 	     strong as in variant 1, where it is squared.  */
5451 	  fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5452 	  max *= fact;
5453 # endif
5454 
5455 	  /* Compare with current best results.  */
5456 	  if (max < best_chlen)
5457 	    {
5458 	      best_chlen = max;
5459 	      best_size = i;
5460               no_improvement_count = 0;
5461 	    }
5462 	  /* PR 11843: Avoid futile long searches for the best bucket size
5463 	     when there are a large number of symbols.  */
5464 	  else if (++no_improvement_count == 100)
5465 	    break;
5466 	}
5467 
5468       free (counts);
5469     }
5470   else
5471 #endif /* defined (BFD_HOST_U_64_BIT) */
5472     {
5473       /* This is the fallback solution if no 64bit type is available or if we
5474 	 are not supposed to spend much time on optimizations.  We select the
5475 	 bucket count using a fixed set of numbers.  */
5476       for (i = 0; elf_buckets[i] != 0; i++)
5477 	{
5478 	  best_size = elf_buckets[i];
5479 	  if (nsyms < elf_buckets[i + 1])
5480 	    break;
5481 	}
5482       if (gnu_hash && best_size < 2)
5483 	best_size = 2;
5484     }
5485 
5486   return best_size;
5487 }
5488 
5489 /* Size any SHT_GROUP section for ld -r.  */
5490 
5491 bfd_boolean
5492 _bfd_elf_size_group_sections (struct bfd_link_info *info)
5493 {
5494   bfd *ibfd;
5495 
5496   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
5497     if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
5498 	&& !_bfd_elf_fixup_group_sections (ibfd, bfd_abs_section_ptr))
5499       return FALSE;
5500   return TRUE;
5501 }
5502 
5503 /* Set up the sizes and contents of the ELF dynamic sections.  This is
5504    called by the ELF linker emulation before_allocation routine.  We
5505    must set the sizes of the sections before the linker sets the
5506    addresses of the various sections.  */
5507 
5508 bfd_boolean
5509 bfd_elf_size_dynamic_sections (bfd *output_bfd,
5510 			       const char *soname,
5511 			       const char *rpath,
5512 			       const char *filter_shlib,
5513 			       const char *audit,
5514 			       const char *depaudit,
5515 			       const char * const *auxiliary_filters,
5516 			       struct bfd_link_info *info,
5517 			       asection **sinterpptr,
5518 			       struct bfd_elf_version_tree *verdefs)
5519 {
5520   bfd_size_type soname_indx;
5521   bfd *dynobj;
5522   const struct elf_backend_data *bed;
5523   struct elf_info_failed asvinfo;
5524 
5525   *sinterpptr = NULL;
5526 
5527   soname_indx = (bfd_size_type) -1;
5528 
5529   if (!is_elf_hash_table (info->hash))
5530     return TRUE;
5531 
5532   bed = get_elf_backend_data (output_bfd);
5533   if (info->execstack)
5534     elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
5535   else if (info->noexecstack)
5536     elf_tdata (output_bfd)->stack_flags = PF_R | PF_W;
5537   else
5538     {
5539       bfd *inputobj;
5540       asection *notesec = NULL;
5541       int exec = 0;
5542 
5543       for (inputobj = info->input_bfds;
5544 	   inputobj;
5545 	   inputobj = inputobj->link_next)
5546 	{
5547 	  asection *s;
5548 
5549 	  if (inputobj->flags & (DYNAMIC | EXEC_P | BFD_LINKER_CREATED))
5550 	    continue;
5551 	  s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
5552 	  if (s)
5553 	    {
5554 	      if (s->flags & SEC_CODE)
5555 		exec = PF_X;
5556 	      notesec = s;
5557 	    }
5558 	  else if (bed->default_execstack)
5559 	    exec = PF_X;
5560 	}
5561       if (notesec)
5562 	{
5563 	  elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | exec;
5564 	  if (exec && info->relocatable
5565 	      && notesec->output_section != bfd_abs_section_ptr)
5566 	    notesec->output_section->flags |= SEC_CODE;
5567 	}
5568     }
5569 
5570   /* Any syms created from now on start with -1 in
5571      got.refcount/offset and plt.refcount/offset.  */
5572   elf_hash_table (info)->init_got_refcount
5573     = elf_hash_table (info)->init_got_offset;
5574   elf_hash_table (info)->init_plt_refcount
5575     = elf_hash_table (info)->init_plt_offset;
5576 
5577   if (info->relocatable
5578       && !_bfd_elf_size_group_sections (info))
5579     return FALSE;
5580 
5581   /* The backend may have to create some sections regardless of whether
5582      we're dynamic or not.  */
5583   if (bed->elf_backend_always_size_sections
5584       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
5585     return FALSE;
5586 
5587   if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
5588     return FALSE;
5589 
5590   dynobj = elf_hash_table (info)->dynobj;
5591 
5592   /* If there were no dynamic objects in the link, there is nothing to
5593      do here.  */
5594   if (dynobj == NULL)
5595     return TRUE;
5596 
5597   if (elf_hash_table (info)->dynamic_sections_created)
5598     {
5599       struct elf_info_failed eif;
5600       struct elf_link_hash_entry *h;
5601       asection *dynstr;
5602       struct bfd_elf_version_tree *t;
5603       struct bfd_elf_version_expr *d;
5604       asection *s;
5605       bfd_boolean all_defined;
5606 
5607       *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
5608       BFD_ASSERT (*sinterpptr != NULL || !info->executable);
5609 
5610       if (soname != NULL)
5611 	{
5612 	  soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5613 					     soname, TRUE);
5614 	  if (soname_indx == (bfd_size_type) -1
5615 	      || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
5616 	    return FALSE;
5617 	}
5618 
5619       if (info->symbolic)
5620 	{
5621 	  if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
5622 	    return FALSE;
5623 	  info->flags |= DF_SYMBOLIC;
5624 	}
5625 
5626       if (rpath != NULL)
5627 	{
5628 	  bfd_size_type indx;
5629 
5630 	  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
5631 				      TRUE);
5632 	  if (indx == (bfd_size_type) -1
5633 	      || !_bfd_elf_add_dynamic_entry (info, DT_RPATH, indx))
5634 	    return FALSE;
5635 
5636 	  if  (info->new_dtags)
5637 	    {
5638 	      _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx);
5639 	      if (!_bfd_elf_add_dynamic_entry (info, DT_RUNPATH, indx))
5640 		return FALSE;
5641 	    }
5642 	}
5643 
5644       if (filter_shlib != NULL)
5645 	{
5646 	  bfd_size_type indx;
5647 
5648 	  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5649 				      filter_shlib, TRUE);
5650 	  if (indx == (bfd_size_type) -1
5651 	      || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
5652 	    return FALSE;
5653 	}
5654 
5655       if (auxiliary_filters != NULL)
5656 	{
5657 	  const char * const *p;
5658 
5659 	  for (p = auxiliary_filters; *p != NULL; p++)
5660 	    {
5661 	      bfd_size_type indx;
5662 
5663 	      indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5664 					  *p, TRUE);
5665 	      if (indx == (bfd_size_type) -1
5666 		  || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
5667 		return FALSE;
5668 	    }
5669 	}
5670 
5671       if (audit != NULL)
5672 	{
5673 	  bfd_size_type indx;
5674 
5675 	  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit,
5676 				      TRUE);
5677 	  if (indx == (bfd_size_type) -1
5678 	      || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx))
5679 	    return FALSE;
5680 	}
5681 
5682       if (depaudit != NULL)
5683 	{
5684 	  bfd_size_type indx;
5685 
5686 	  indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit,
5687 				      TRUE);
5688 	  if (indx == (bfd_size_type) -1
5689 	      || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx))
5690 	    return FALSE;
5691 	}
5692 
5693       eif.info = info;
5694       eif.verdefs = verdefs;
5695       eif.failed = FALSE;
5696 
5697       /* If we are supposed to export all symbols into the dynamic symbol
5698 	 table (this is not the normal case), then do so.  */
5699       if (info->export_dynamic
5700 	  || (info->executable && info->dynamic))
5701 	{
5702 	  elf_link_hash_traverse (elf_hash_table (info),
5703 				  _bfd_elf_export_symbol,
5704 				  &eif);
5705 	  if (eif.failed)
5706 	    return FALSE;
5707 	}
5708 
5709       /* Make all global versions with definition.  */
5710       for (t = verdefs; t != NULL; t = t->next)
5711 	for (d = t->globals.list; d != NULL; d = d->next)
5712 	  if (!d->symver && d->literal)
5713 	    {
5714 	      const char *verstr, *name;
5715 	      size_t namelen, verlen, newlen;
5716 	      char *newname, *p, leading_char;
5717 	      struct elf_link_hash_entry *newh;
5718 
5719 	      leading_char = bfd_get_symbol_leading_char (output_bfd);
5720 	      name = d->pattern;
5721 	      namelen = strlen (name) + (leading_char != '\0');
5722 	      verstr = t->name;
5723 	      verlen = strlen (verstr);
5724 	      newlen = namelen + verlen + 3;
5725 
5726 	      newname = (char *) bfd_malloc (newlen);
5727 	      if (newname == NULL)
5728 		return FALSE;
5729 	      newname[0] = leading_char;
5730 	      memcpy (newname + (leading_char != '\0'), name, namelen);
5731 
5732 	      /* Check the hidden versioned definition.  */
5733 	      p = newname + namelen;
5734 	      *p++ = ELF_VER_CHR;
5735 	      memcpy (p, verstr, verlen + 1);
5736 	      newh = elf_link_hash_lookup (elf_hash_table (info),
5737 					   newname, FALSE, FALSE,
5738 					   FALSE);
5739 	      if (newh == NULL
5740 		  || (newh->root.type != bfd_link_hash_defined
5741 		      && newh->root.type != bfd_link_hash_defweak))
5742 		{
5743 		  /* Check the default versioned definition.  */
5744 		  *p++ = ELF_VER_CHR;
5745 		  memcpy (p, verstr, verlen + 1);
5746 		  newh = elf_link_hash_lookup (elf_hash_table (info),
5747 					       newname, FALSE, FALSE,
5748 					       FALSE);
5749 		}
5750 	      free (newname);
5751 
5752 	      /* Mark this version if there is a definition and it is
5753 		 not defined in a shared object.  */
5754 	      if (newh != NULL
5755 		  && !newh->def_dynamic
5756 		  && (newh->root.type == bfd_link_hash_defined
5757 		      || newh->root.type == bfd_link_hash_defweak))
5758 		d->symver = 1;
5759 	    }
5760 
5761       /* Attach all the symbols to their version information.  */
5762       asvinfo.info = info;
5763       asvinfo.verdefs = verdefs;
5764       asvinfo.failed = FALSE;
5765 
5766       elf_link_hash_traverse (elf_hash_table (info),
5767 			      _bfd_elf_link_assign_sym_version,
5768 			      &asvinfo);
5769       if (asvinfo.failed)
5770 	return FALSE;
5771 
5772       if (!info->allow_undefined_version)
5773 	{
5774 	  /* Check if all global versions have a definition.  */
5775 	  all_defined = TRUE;
5776 	  for (t = verdefs; t != NULL; t = t->next)
5777 	    for (d = t->globals.list; d != NULL; d = d->next)
5778 	      if (d->literal && !d->symver && !d->script)
5779 		{
5780 		  (*_bfd_error_handler)
5781 		    (_("%s: undefined version: %s"),
5782 		     d->pattern, t->name);
5783 		  all_defined = FALSE;
5784 		}
5785 
5786 	  if (!all_defined)
5787 	    {
5788 	      bfd_set_error (bfd_error_bad_value);
5789 	      return FALSE;
5790 	    }
5791 	}
5792 
5793       /* Find all symbols which were defined in a dynamic object and make
5794 	 the backend pick a reasonable value for them.  */
5795       elf_link_hash_traverse (elf_hash_table (info),
5796 			      _bfd_elf_adjust_dynamic_symbol,
5797 			      &eif);
5798       if (eif.failed)
5799 	return FALSE;
5800 
5801       /* Add some entries to the .dynamic section.  We fill in some of the
5802 	 values later, in bfd_elf_final_link, but we must add the entries
5803 	 now so that we know the final size of the .dynamic section.  */
5804 
5805       /* If there are initialization and/or finalization functions to
5806 	 call then add the corresponding DT_INIT/DT_FINI entries.  */
5807       h = (info->init_function
5808 	   ? elf_link_hash_lookup (elf_hash_table (info),
5809 				   info->init_function, FALSE,
5810 				   FALSE, FALSE)
5811 	   : NULL);
5812       if (h != NULL
5813 	  && (h->ref_regular
5814 	      || h->def_regular))
5815 	{
5816 	  if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
5817 	    return FALSE;
5818 	}
5819       h = (info->fini_function
5820 	   ? elf_link_hash_lookup (elf_hash_table (info),
5821 				   info->fini_function, FALSE,
5822 				   FALSE, FALSE)
5823 	   : NULL);
5824       if (h != NULL
5825 	  && (h->ref_regular
5826 	      || h->def_regular))
5827 	{
5828 	  if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
5829 	    return FALSE;
5830 	}
5831 
5832       s = bfd_get_section_by_name (output_bfd, ".preinit_array");
5833       if (s != NULL && s->linker_has_input)
5834 	{
5835 	  /* DT_PREINIT_ARRAY is not allowed in shared library.  */
5836 	  if (! info->executable)
5837 	    {
5838 	      bfd *sub;
5839 	      asection *o;
5840 
5841 	      for (sub = info->input_bfds; sub != NULL;
5842 		   sub = sub->link_next)
5843 		if (bfd_get_flavour (sub) == bfd_target_elf_flavour)
5844 		  for (o = sub->sections; o != NULL; o = o->next)
5845 		    if (elf_section_data (o)->this_hdr.sh_type
5846 			== SHT_PREINIT_ARRAY)
5847 		      {
5848 			(*_bfd_error_handler)
5849 			  (_("%B: .preinit_array section is not allowed in DSO"),
5850 			   sub);
5851 			break;
5852 		      }
5853 
5854 	      bfd_set_error (bfd_error_nonrepresentable_section);
5855 	      return FALSE;
5856 	    }
5857 
5858 	  if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
5859 	      || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
5860 	    return FALSE;
5861 	}
5862       s = bfd_get_section_by_name (output_bfd, ".init_array");
5863       if (s != NULL && s->linker_has_input)
5864 	{
5865 	  if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
5866 	      || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
5867 	    return FALSE;
5868 	}
5869       s = bfd_get_section_by_name (output_bfd, ".fini_array");
5870       if (s != NULL && s->linker_has_input)
5871 	{
5872 	  if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
5873 	      || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
5874 	    return FALSE;
5875 	}
5876 
5877       dynstr = bfd_get_section_by_name (dynobj, ".dynstr");
5878       /* If .dynstr is excluded from the link, we don't want any of
5879 	 these tags.  Strictly, we should be checking each section
5880 	 individually;  This quick check covers for the case where
5881 	 someone does a /DISCARD/ : { *(*) }.  */
5882       if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
5883 	{
5884 	  bfd_size_type strsize;
5885 
5886 	  strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
5887 	  if ((info->emit_hash
5888 	       && !_bfd_elf_add_dynamic_entry (info, DT_HASH, 0))
5889 	      || (info->emit_gnu_hash
5890 		  && !_bfd_elf_add_dynamic_entry (info, DT_GNU_HASH, 0))
5891 	      || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
5892 	      || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
5893 	      || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
5894 	      || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
5895 					      bed->s->sizeof_sym))
5896 	    return FALSE;
5897 	}
5898     }
5899 
5900   /* The backend must work out the sizes of all the other dynamic
5901      sections.  */
5902   if (bed->elf_backend_size_dynamic_sections
5903       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
5904     return FALSE;
5905 
5906   if (elf_hash_table (info)->dynamic_sections_created)
5907     {
5908       unsigned long section_sym_count;
5909       asection *s;
5910 
5911       /* Set up the version definition section.  */
5912       s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
5913       BFD_ASSERT (s != NULL);
5914 
5915       /* We may have created additional version definitions if we are
5916 	 just linking a regular application.  */
5917       verdefs = asvinfo.verdefs;
5918 
5919       /* Skip anonymous version tag.  */
5920       if (verdefs != NULL && verdefs->vernum == 0)
5921 	verdefs = verdefs->next;
5922 
5923       if (verdefs == NULL && !info->create_default_symver)
5924 	s->flags |= SEC_EXCLUDE;
5925       else
5926 	{
5927 	  unsigned int cdefs;
5928 	  bfd_size_type size;
5929 	  struct bfd_elf_version_tree *t;
5930 	  bfd_byte *p;
5931 	  Elf_Internal_Verdef def;
5932 	  Elf_Internal_Verdaux defaux;
5933 	  struct bfd_link_hash_entry *bh;
5934 	  struct elf_link_hash_entry *h;
5935 	  const char *name;
5936 
5937 	  cdefs = 0;
5938 	  size = 0;
5939 
5940 	  /* Make space for the base version.  */
5941 	  size += sizeof (Elf_External_Verdef);
5942 	  size += sizeof (Elf_External_Verdaux);
5943 	  ++cdefs;
5944 
5945 	  /* Make space for the default version.  */
5946 	  if (info->create_default_symver)
5947 	    {
5948 	      size += sizeof (Elf_External_Verdef);
5949 	      ++cdefs;
5950 	    }
5951 
5952 	  for (t = verdefs; t != NULL; t = t->next)
5953 	    {
5954 	      struct bfd_elf_version_deps *n;
5955 
5956 	      /* Don't emit base version twice.  */
5957 	      if (t->vernum == 0)
5958 		continue;
5959 
5960 	      size += sizeof (Elf_External_Verdef);
5961 	      size += sizeof (Elf_External_Verdaux);
5962 	      ++cdefs;
5963 
5964 	      for (n = t->deps; n != NULL; n = n->next)
5965 		size += sizeof (Elf_External_Verdaux);
5966 	    }
5967 
5968 	  s->size = size;
5969 	  s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
5970 	  if (s->contents == NULL && s->size != 0)
5971 	    return FALSE;
5972 
5973 	  /* Fill in the version definition section.  */
5974 
5975 	  p = s->contents;
5976 
5977 	  def.vd_version = VER_DEF_CURRENT;
5978 	  def.vd_flags = VER_FLG_BASE;
5979 	  def.vd_ndx = 1;
5980 	  def.vd_cnt = 1;
5981 	  if (info->create_default_symver)
5982 	    {
5983 	      def.vd_aux = 2 * sizeof (Elf_External_Verdef);
5984 	      def.vd_next = sizeof (Elf_External_Verdef);
5985 	    }
5986 	  else
5987 	    {
5988 	      def.vd_aux = sizeof (Elf_External_Verdef);
5989 	      def.vd_next = (sizeof (Elf_External_Verdef)
5990 			     + sizeof (Elf_External_Verdaux));
5991 	    }
5992 
5993 	  if (soname_indx != (bfd_size_type) -1)
5994 	    {
5995 	      _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
5996 				      soname_indx);
5997 	      def.vd_hash = bfd_elf_hash (soname);
5998 	      defaux.vda_name = soname_indx;
5999 	      name = soname;
6000 	    }
6001 	  else
6002 	    {
6003 	      bfd_size_type indx;
6004 
6005 	      name = lbasename (output_bfd->filename);
6006 	      def.vd_hash = bfd_elf_hash (name);
6007 	      indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6008 					  name, FALSE);
6009 	      if (indx == (bfd_size_type) -1)
6010 		return FALSE;
6011 	      defaux.vda_name = indx;
6012 	    }
6013 	  defaux.vda_next = 0;
6014 
6015 	  _bfd_elf_swap_verdef_out (output_bfd, &def,
6016 				    (Elf_External_Verdef *) p);
6017 	  p += sizeof (Elf_External_Verdef);
6018 	  if (info->create_default_symver)
6019 	    {
6020 	      /* Add a symbol representing this version.  */
6021 	      bh = NULL;
6022 	      if (! (_bfd_generic_link_add_one_symbol
6023 		     (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
6024 		      0, NULL, FALSE,
6025 		      get_elf_backend_data (dynobj)->collect, &bh)))
6026 		return FALSE;
6027 	      h = (struct elf_link_hash_entry *) bh;
6028 	      h->non_elf = 0;
6029 	      h->def_regular = 1;
6030 	      h->type = STT_OBJECT;
6031 	      h->verinfo.vertree = NULL;
6032 
6033 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
6034 		return FALSE;
6035 
6036 	      /* Create a duplicate of the base version with the same
6037 		 aux block, but different flags.  */
6038 	      def.vd_flags = 0;
6039 	      def.vd_ndx = 2;
6040 	      def.vd_aux = sizeof (Elf_External_Verdef);
6041 	      if (verdefs)
6042 		def.vd_next = (sizeof (Elf_External_Verdef)
6043 			       + sizeof (Elf_External_Verdaux));
6044 	      else
6045 		def.vd_next = 0;
6046 	      _bfd_elf_swap_verdef_out (output_bfd, &def,
6047 					(Elf_External_Verdef *) p);
6048 	      p += sizeof (Elf_External_Verdef);
6049 	    }
6050 	  _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6051 				     (Elf_External_Verdaux *) p);
6052 	  p += sizeof (Elf_External_Verdaux);
6053 
6054 	  for (t = verdefs; t != NULL; t = t->next)
6055 	    {
6056 	      unsigned int cdeps;
6057 	      struct bfd_elf_version_deps *n;
6058 
6059 	      /* Don't emit the base version twice.  */
6060 	      if (t->vernum == 0)
6061 		continue;
6062 
6063 	      cdeps = 0;
6064 	      for (n = t->deps; n != NULL; n = n->next)
6065 		++cdeps;
6066 
6067 	      /* Add a symbol representing this version.  */
6068 	      bh = NULL;
6069 	      if (! (_bfd_generic_link_add_one_symbol
6070 		     (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
6071 		      0, NULL, FALSE,
6072 		      get_elf_backend_data (dynobj)->collect, &bh)))
6073 		return FALSE;
6074 	      h = (struct elf_link_hash_entry *) bh;
6075 	      h->non_elf = 0;
6076 	      h->def_regular = 1;
6077 	      h->type = STT_OBJECT;
6078 	      h->verinfo.vertree = t;
6079 
6080 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
6081 		return FALSE;
6082 
6083 	      def.vd_version = VER_DEF_CURRENT;
6084 	      def.vd_flags = 0;
6085 	      if (t->globals.list == NULL
6086 		  && t->locals.list == NULL
6087 		  && ! t->used)
6088 		def.vd_flags |= VER_FLG_WEAK;
6089 	      def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1);
6090 	      def.vd_cnt = cdeps + 1;
6091 	      def.vd_hash = bfd_elf_hash (t->name);
6092 	      def.vd_aux = sizeof (Elf_External_Verdef);
6093 	      def.vd_next = 0;
6094 
6095 	      /* If a basever node is next, it *must* be the last node in
6096 		 the chain, otherwise Verdef construction breaks.  */
6097 	      if (t->next != NULL && t->next->vernum == 0)
6098 		BFD_ASSERT (t->next->next == NULL);
6099 
6100 	      if (t->next != NULL && t->next->vernum != 0)
6101 		def.vd_next = (sizeof (Elf_External_Verdef)
6102 			       + (cdeps + 1) * sizeof (Elf_External_Verdaux));
6103 
6104 	      _bfd_elf_swap_verdef_out (output_bfd, &def,
6105 					(Elf_External_Verdef *) p);
6106 	      p += sizeof (Elf_External_Verdef);
6107 
6108 	      defaux.vda_name = h->dynstr_index;
6109 	      _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6110 				      h->dynstr_index);
6111 	      defaux.vda_next = 0;
6112 	      if (t->deps != NULL)
6113 		defaux.vda_next = sizeof (Elf_External_Verdaux);
6114 	      t->name_indx = defaux.vda_name;
6115 
6116 	      _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6117 					 (Elf_External_Verdaux *) p);
6118 	      p += sizeof (Elf_External_Verdaux);
6119 
6120 	      for (n = t->deps; n != NULL; n = n->next)
6121 		{
6122 		  if (n->version_needed == NULL)
6123 		    {
6124 		      /* This can happen if there was an error in the
6125 			 version script.  */
6126 		      defaux.vda_name = 0;
6127 		    }
6128 		  else
6129 		    {
6130 		      defaux.vda_name = n->version_needed->name_indx;
6131 		      _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6132 					      defaux.vda_name);
6133 		    }
6134 		  if (n->next == NULL)
6135 		    defaux.vda_next = 0;
6136 		  else
6137 		    defaux.vda_next = sizeof (Elf_External_Verdaux);
6138 
6139 		  _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6140 					     (Elf_External_Verdaux *) p);
6141 		  p += sizeof (Elf_External_Verdaux);
6142 		}
6143 	    }
6144 
6145 	  if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
6146 	      || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
6147 	    return FALSE;
6148 
6149 	  elf_tdata (output_bfd)->cverdefs = cdefs;
6150 	}
6151 
6152       if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
6153 	{
6154 	  if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
6155 	    return FALSE;
6156 	}
6157       else if (info->flags & DF_BIND_NOW)
6158 	{
6159 	  if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
6160 	    return FALSE;
6161 	}
6162 
6163       if (info->flags_1)
6164 	{
6165 	  if (info->executable)
6166 	    info->flags_1 &= ~ (DF_1_INITFIRST
6167 				| DF_1_NODELETE
6168 				| DF_1_NOOPEN);
6169 	  if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
6170 	    return FALSE;
6171 	}
6172 
6173       /* Work out the size of the version reference section.  */
6174 
6175       s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
6176       BFD_ASSERT (s != NULL);
6177       {
6178 	struct elf_find_verdep_info sinfo;
6179 
6180 	sinfo.info = info;
6181 	sinfo.vers = elf_tdata (output_bfd)->cverdefs;
6182 	if (sinfo.vers == 0)
6183 	  sinfo.vers = 1;
6184 	sinfo.failed = FALSE;
6185 
6186 	elf_link_hash_traverse (elf_hash_table (info),
6187 				_bfd_elf_link_find_version_dependencies,
6188 				&sinfo);
6189 	if (sinfo.failed)
6190 	  return FALSE;
6191 
6192 	if (elf_tdata (output_bfd)->verref == NULL)
6193 	  s->flags |= SEC_EXCLUDE;
6194 	else
6195 	  {
6196 	    Elf_Internal_Verneed *t;
6197 	    unsigned int size;
6198 	    unsigned int crefs;
6199 	    bfd_byte *p;
6200 
6201 	    /* Build the version dependency section.  */
6202 	    size = 0;
6203 	    crefs = 0;
6204 	    for (t = elf_tdata (output_bfd)->verref;
6205 		 t != NULL;
6206 		 t = t->vn_nextref)
6207 	      {
6208 		Elf_Internal_Vernaux *a;
6209 
6210 		size += sizeof (Elf_External_Verneed);
6211 		++crefs;
6212 		for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6213 		  size += sizeof (Elf_External_Vernaux);
6214 	      }
6215 
6216 	    s->size = size;
6217 	    s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6218 	    if (s->contents == NULL)
6219 	      return FALSE;
6220 
6221 	    p = s->contents;
6222 	    for (t = elf_tdata (output_bfd)->verref;
6223 		 t != NULL;
6224 		 t = t->vn_nextref)
6225 	      {
6226 		unsigned int caux;
6227 		Elf_Internal_Vernaux *a;
6228 		bfd_size_type indx;
6229 
6230 		caux = 0;
6231 		for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6232 		  ++caux;
6233 
6234 		t->vn_version = VER_NEED_CURRENT;
6235 		t->vn_cnt = caux;
6236 		indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6237 					    elf_dt_name (t->vn_bfd) != NULL
6238 					    ? elf_dt_name (t->vn_bfd)
6239 					    : lbasename (t->vn_bfd->filename),
6240 					    FALSE);
6241 		if (indx == (bfd_size_type) -1)
6242 		  return FALSE;
6243 		t->vn_file = indx;
6244 		t->vn_aux = sizeof (Elf_External_Verneed);
6245 		if (t->vn_nextref == NULL)
6246 		  t->vn_next = 0;
6247 		else
6248 		  t->vn_next = (sizeof (Elf_External_Verneed)
6249 				+ caux * sizeof (Elf_External_Vernaux));
6250 
6251 		_bfd_elf_swap_verneed_out (output_bfd, t,
6252 					   (Elf_External_Verneed *) p);
6253 		p += sizeof (Elf_External_Verneed);
6254 
6255 		for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6256 		  {
6257 		    a->vna_hash = bfd_elf_hash (a->vna_nodename);
6258 		    indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6259 						a->vna_nodename, FALSE);
6260 		    if (indx == (bfd_size_type) -1)
6261 		      return FALSE;
6262 		    a->vna_name = indx;
6263 		    if (a->vna_nextptr == NULL)
6264 		      a->vna_next = 0;
6265 		    else
6266 		      a->vna_next = sizeof (Elf_External_Vernaux);
6267 
6268 		    _bfd_elf_swap_vernaux_out (output_bfd, a,
6269 					       (Elf_External_Vernaux *) p);
6270 		    p += sizeof (Elf_External_Vernaux);
6271 		  }
6272 	      }
6273 
6274 	    if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
6275 		|| !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
6276 	      return FALSE;
6277 
6278 	    elf_tdata (output_bfd)->cverrefs = crefs;
6279 	  }
6280       }
6281 
6282       if ((elf_tdata (output_bfd)->cverrefs == 0
6283 	   && elf_tdata (output_bfd)->cverdefs == 0)
6284 	  || _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6285 					     &section_sym_count) == 0)
6286 	{
6287 	  s = bfd_get_section_by_name (dynobj, ".gnu.version");
6288 	  s->flags |= SEC_EXCLUDE;
6289 	}
6290     }
6291   return TRUE;
6292 }
6293 
6294 /* Find the first non-excluded output section.  We'll use its
6295    section symbol for some emitted relocs.  */
6296 void
6297 _bfd_elf_init_1_index_section (bfd *output_bfd, struct bfd_link_info *info)
6298 {
6299   asection *s;
6300 
6301   for (s = output_bfd->sections; s != NULL; s = s->next)
6302     if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
6303 	&& !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6304       {
6305 	elf_hash_table (info)->text_index_section = s;
6306 	break;
6307       }
6308 }
6309 
6310 /* Find two non-excluded output sections, one for code, one for data.
6311    We'll use their section symbols for some emitted relocs.  */
6312 void
6313 _bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
6314 {
6315   asection *s;
6316 
6317   /* Data first, since setting text_index_section changes
6318      _bfd_elf_link_omit_section_dynsym.  */
6319   for (s = output_bfd->sections; s != NULL; s = s->next)
6320     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
6321 	&& !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6322       {
6323 	elf_hash_table (info)->data_index_section = s;
6324 	break;
6325       }
6326 
6327   for (s = output_bfd->sections; s != NULL; s = s->next)
6328     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
6329 	 == (SEC_ALLOC | SEC_READONLY))
6330 	&& !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6331       {
6332 	elf_hash_table (info)->text_index_section = s;
6333 	break;
6334       }
6335 
6336   if (elf_hash_table (info)->text_index_section == NULL)
6337     elf_hash_table (info)->text_index_section
6338       = elf_hash_table (info)->data_index_section;
6339 }
6340 
6341 bfd_boolean
6342 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
6343 {
6344   const struct elf_backend_data *bed;
6345 
6346   if (!is_elf_hash_table (info->hash))
6347     return TRUE;
6348 
6349   bed = get_elf_backend_data (output_bfd);
6350   (*bed->elf_backend_init_index_section) (output_bfd, info);
6351 
6352   if (elf_hash_table (info)->dynamic_sections_created)
6353     {
6354       bfd *dynobj;
6355       asection *s;
6356       bfd_size_type dynsymcount;
6357       unsigned long section_sym_count;
6358       unsigned int dtagcount;
6359 
6360       dynobj = elf_hash_table (info)->dynobj;
6361 
6362       /* Assign dynsym indicies.  In a shared library we generate a
6363 	 section symbol for each output section, which come first.
6364 	 Next come all of the back-end allocated local dynamic syms,
6365 	 followed by the rest of the global symbols.  */
6366 
6367       dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6368 						    &section_sym_count);
6369 
6370       /* Work out the size of the symbol version section.  */
6371       s = bfd_get_section_by_name (dynobj, ".gnu.version");
6372       BFD_ASSERT (s != NULL);
6373       if (dynsymcount != 0
6374 	  && (s->flags & SEC_EXCLUDE) == 0)
6375 	{
6376 	  s->size = dynsymcount * sizeof (Elf_External_Versym);
6377 	  s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6378 	  if (s->contents == NULL)
6379 	    return FALSE;
6380 
6381 	  if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
6382 	    return FALSE;
6383 	}
6384 
6385       /* Set the size of the .dynsym and .hash sections.  We counted
6386 	 the number of dynamic symbols in elf_link_add_object_symbols.
6387 	 We will build the contents of .dynsym and .hash when we build
6388 	 the final symbol table, because until then we do not know the
6389 	 correct value to give the symbols.  We built the .dynstr
6390 	 section as we went along in elf_link_add_object_symbols.  */
6391       s = bfd_get_section_by_name (dynobj, ".dynsym");
6392       BFD_ASSERT (s != NULL);
6393       s->size = dynsymcount * bed->s->sizeof_sym;
6394 
6395       if (dynsymcount != 0)
6396 	{
6397 	  s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6398 	  if (s->contents == NULL)
6399 	    return FALSE;
6400 
6401 	  /* The first entry in .dynsym is a dummy symbol.
6402 	     Clear all the section syms, in case we don't output them all.  */
6403 	  ++section_sym_count;
6404 	  memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
6405 	}
6406 
6407       elf_hash_table (info)->bucketcount = 0;
6408 
6409       /* Compute the size of the hashing table.  As a side effect this
6410 	 computes the hash values for all the names we export.  */
6411       if (info->emit_hash)
6412 	{
6413 	  unsigned long int *hashcodes;
6414 	  struct hash_codes_info hashinf;
6415 	  bfd_size_type amt;
6416 	  unsigned long int nsyms;
6417 	  size_t bucketcount;
6418 	  size_t hash_entry_size;
6419 
6420 	  /* Compute the hash values for all exported symbols.  At the same
6421 	     time store the values in an array so that we could use them for
6422 	     optimizations.  */
6423 	  amt = dynsymcount * sizeof (unsigned long int);
6424 	  hashcodes = (unsigned long int *) bfd_malloc (amt);
6425 	  if (hashcodes == NULL)
6426 	    return FALSE;
6427 	  hashinf.hashcodes = hashcodes;
6428 	  hashinf.error = FALSE;
6429 
6430 	  /* Put all hash values in HASHCODES.  */
6431 	  elf_link_hash_traverse (elf_hash_table (info),
6432 				  elf_collect_hash_codes, &hashinf);
6433 	  if (hashinf.error)
6434 	    {
6435 	      free (hashcodes);
6436 	      return FALSE;
6437 	    }
6438 
6439 	  nsyms = hashinf.hashcodes - hashcodes;
6440 	  bucketcount
6441 	    = compute_bucket_count (info, hashcodes, nsyms, 0);
6442 	  free (hashcodes);
6443 
6444 	  if (bucketcount == 0)
6445 	    return FALSE;
6446 
6447 	  elf_hash_table (info)->bucketcount = bucketcount;
6448 
6449 	  s = bfd_get_section_by_name (dynobj, ".hash");
6450 	  BFD_ASSERT (s != NULL);
6451 	  hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
6452 	  s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
6453 	  s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6454 	  if (s->contents == NULL)
6455 	    return FALSE;
6456 
6457 	  bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
6458 	  bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
6459 		   s->contents + hash_entry_size);
6460 	}
6461 
6462       if (info->emit_gnu_hash)
6463 	{
6464 	  size_t i, cnt;
6465 	  unsigned char *contents;
6466 	  struct collect_gnu_hash_codes cinfo;
6467 	  bfd_size_type amt;
6468 	  size_t bucketcount;
6469 
6470 	  memset (&cinfo, 0, sizeof (cinfo));
6471 
6472 	  /* Compute the hash values for all exported symbols.  At the same
6473 	     time store the values in an array so that we could use them for
6474 	     optimizations.  */
6475 	  amt = dynsymcount * 2 * sizeof (unsigned long int);
6476 	  cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt);
6477 	  if (cinfo.hashcodes == NULL)
6478 	    return FALSE;
6479 
6480 	  cinfo.hashval = cinfo.hashcodes + dynsymcount;
6481 	  cinfo.min_dynindx = -1;
6482 	  cinfo.output_bfd = output_bfd;
6483 	  cinfo.bed = bed;
6484 
6485 	  /* Put all hash values in HASHCODES.  */
6486 	  elf_link_hash_traverse (elf_hash_table (info),
6487 				  elf_collect_gnu_hash_codes, &cinfo);
6488 	  if (cinfo.error)
6489 	    {
6490 	      free (cinfo.hashcodes);
6491 	      return FALSE;
6492 	    }
6493 
6494 	  bucketcount
6495 	    = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1);
6496 
6497 	  if (bucketcount == 0)
6498 	    {
6499 	      free (cinfo.hashcodes);
6500 	      return FALSE;
6501 	    }
6502 
6503 	  s = bfd_get_section_by_name (dynobj, ".gnu.hash");
6504 	  BFD_ASSERT (s != NULL);
6505 
6506 	  if (cinfo.nsyms == 0)
6507 	    {
6508 	      /* Empty .gnu.hash section is special.  */
6509 	      BFD_ASSERT (cinfo.min_dynindx == -1);
6510 	      free (cinfo.hashcodes);
6511 	      s->size = 5 * 4 + bed->s->arch_size / 8;
6512 	      contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6513 	      if (contents == NULL)
6514 		return FALSE;
6515 	      s->contents = contents;
6516 	      /* 1 empty bucket.  */
6517 	      bfd_put_32 (output_bfd, 1, contents);
6518 	      /* SYMIDX above the special symbol 0.  */
6519 	      bfd_put_32 (output_bfd, 1, contents + 4);
6520 	      /* Just one word for bitmask.  */
6521 	      bfd_put_32 (output_bfd, 1, contents + 8);
6522 	      /* Only hash fn bloom filter.  */
6523 	      bfd_put_32 (output_bfd, 0, contents + 12);
6524 	      /* No hashes are valid - empty bitmask.  */
6525 	      bfd_put (bed->s->arch_size, output_bfd, 0, contents + 16);
6526 	      /* No hashes in the only bucket.  */
6527 	      bfd_put_32 (output_bfd, 0,
6528 			  contents + 16 + bed->s->arch_size / 8);
6529 	    }
6530 	  else
6531 	    {
6532 	      unsigned long int maskwords, maskbitslog2;
6533 	      BFD_ASSERT (cinfo.min_dynindx != -1);
6534 
6535 	      maskbitslog2 = bfd_log2 (cinfo.nsyms) + 1;
6536 	      if (maskbitslog2 < 3)
6537 		maskbitslog2 = 5;
6538 	      else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms)
6539 		maskbitslog2 = maskbitslog2 + 3;
6540 	      else
6541 		maskbitslog2 = maskbitslog2 + 2;
6542 	      if (bed->s->arch_size == 64)
6543 		{
6544 		  if (maskbitslog2 == 5)
6545 		    maskbitslog2 = 6;
6546 		  cinfo.shift1 = 6;
6547 		}
6548 	      else
6549 		cinfo.shift1 = 5;
6550 	      cinfo.mask = (1 << cinfo.shift1) - 1;
6551 	      cinfo.shift2 = maskbitslog2;
6552 	      cinfo.maskbits = 1 << maskbitslog2;
6553 	      maskwords = 1 << (maskbitslog2 - cinfo.shift1);
6554 	      amt = bucketcount * sizeof (unsigned long int) * 2;
6555 	      amt += maskwords * sizeof (bfd_vma);
6556 	      cinfo.bitmask = (bfd_vma *) bfd_malloc (amt);
6557 	      if (cinfo.bitmask == NULL)
6558 		{
6559 		  free (cinfo.hashcodes);
6560 		  return FALSE;
6561 		}
6562 
6563 	      cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords);
6564 	      cinfo.indx = cinfo.counts + bucketcount;
6565 	      cinfo.symindx = dynsymcount - cinfo.nsyms;
6566 	      memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma));
6567 
6568 	      /* Determine how often each hash bucket is used.  */
6569 	      memset (cinfo.counts, 0, bucketcount * sizeof (cinfo.counts[0]));
6570 	      for (i = 0; i < cinfo.nsyms; ++i)
6571 		++cinfo.counts[cinfo.hashcodes[i] % bucketcount];
6572 
6573 	      for (i = 0, cnt = cinfo.symindx; i < bucketcount; ++i)
6574 		if (cinfo.counts[i] != 0)
6575 		  {
6576 		    cinfo.indx[i] = cnt;
6577 		    cnt += cinfo.counts[i];
6578 		  }
6579 	      BFD_ASSERT (cnt == dynsymcount);
6580 	      cinfo.bucketcount = bucketcount;
6581 	      cinfo.local_indx = cinfo.min_dynindx;
6582 
6583 	      s->size = (4 + bucketcount + cinfo.nsyms) * 4;
6584 	      s->size += cinfo.maskbits / 8;
6585 	      contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6586 	      if (contents == NULL)
6587 		{
6588 		  free (cinfo.bitmask);
6589 		  free (cinfo.hashcodes);
6590 		  return FALSE;
6591 		}
6592 
6593 	      s->contents = contents;
6594 	      bfd_put_32 (output_bfd, bucketcount, contents);
6595 	      bfd_put_32 (output_bfd, cinfo.symindx, contents + 4);
6596 	      bfd_put_32 (output_bfd, maskwords, contents + 8);
6597 	      bfd_put_32 (output_bfd, cinfo.shift2, contents + 12);
6598 	      contents += 16 + cinfo.maskbits / 8;
6599 
6600 	      for (i = 0; i < bucketcount; ++i)
6601 		{
6602 		  if (cinfo.counts[i] == 0)
6603 		    bfd_put_32 (output_bfd, 0, contents);
6604 		  else
6605 		    bfd_put_32 (output_bfd, cinfo.indx[i], contents);
6606 		  contents += 4;
6607 		}
6608 
6609 	      cinfo.contents = contents;
6610 
6611 	      /* Renumber dynamic symbols, populate .gnu.hash section.  */
6612 	      elf_link_hash_traverse (elf_hash_table (info),
6613 				      elf_renumber_gnu_hash_syms, &cinfo);
6614 
6615 	      contents = s->contents + 16;
6616 	      for (i = 0; i < maskwords; ++i)
6617 		{
6618 		  bfd_put (bed->s->arch_size, output_bfd, cinfo.bitmask[i],
6619 			   contents);
6620 		  contents += bed->s->arch_size / 8;
6621 		}
6622 
6623 	      free (cinfo.bitmask);
6624 	      free (cinfo.hashcodes);
6625 	    }
6626 	}
6627 
6628       s = bfd_get_section_by_name (dynobj, ".dynstr");
6629       BFD_ASSERT (s != NULL);
6630 
6631       elf_finalize_dynstr (output_bfd, info);
6632 
6633       s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6634 
6635       for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
6636 	if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
6637 	  return FALSE;
6638     }
6639 
6640   return TRUE;
6641 }
6642 
6643 /* Indicate that we are only retrieving symbol values from this
6644    section.  */
6645 
6646 void
6647 _bfd_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
6648 {
6649   if (is_elf_hash_table (info->hash))
6650     sec->sec_info_type = ELF_INFO_TYPE_JUST_SYMS;
6651   _bfd_generic_link_just_syms (sec, info);
6652 }
6653 
6654 /* Make sure sec_info_type is cleared if sec_info is cleared too.  */
6655 
6656 static void
6657 merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
6658 			    asection *sec)
6659 {
6660   BFD_ASSERT (sec->sec_info_type == ELF_INFO_TYPE_MERGE);
6661   sec->sec_info_type = ELF_INFO_TYPE_NONE;
6662 }
6663 
6664 /* Finish SHF_MERGE section merging.  */
6665 
6666 bfd_boolean
6667 _bfd_elf_merge_sections (bfd *abfd, struct bfd_link_info *info)
6668 {
6669   bfd *ibfd;
6670   asection *sec;
6671 
6672   if (!is_elf_hash_table (info->hash))
6673     return FALSE;
6674 
6675   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
6676     if ((ibfd->flags & DYNAMIC) == 0)
6677       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
6678 	if ((sec->flags & SEC_MERGE) != 0
6679 	    && !bfd_is_abs_section (sec->output_section))
6680 	  {
6681 	    struct bfd_elf_section_data *secdata;
6682 
6683 	    secdata = elf_section_data (sec);
6684 	    if (! _bfd_add_merge_section (abfd,
6685 					  &elf_hash_table (info)->merge_info,
6686 					  sec, &secdata->sec_info))
6687 	      return FALSE;
6688 	    else if (secdata->sec_info)
6689 	      sec->sec_info_type = ELF_INFO_TYPE_MERGE;
6690 	  }
6691 
6692   if (elf_hash_table (info)->merge_info != NULL)
6693     _bfd_merge_sections (abfd, info, elf_hash_table (info)->merge_info,
6694 			 merge_sections_remove_hook);
6695   return TRUE;
6696 }
6697 
6698 /* Create an entry in an ELF linker hash table.  */
6699 
6700 struct bfd_hash_entry *
6701 _bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
6702 			    struct bfd_hash_table *table,
6703 			    const char *string)
6704 {
6705   /* Allocate the structure if it has not already been allocated by a
6706      subclass.  */
6707   if (entry == NULL)
6708     {
6709       entry = (struct bfd_hash_entry *)
6710           bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry));
6711       if (entry == NULL)
6712 	return entry;
6713     }
6714 
6715   /* Call the allocation method of the superclass.  */
6716   entry = _bfd_link_hash_newfunc (entry, table, string);
6717   if (entry != NULL)
6718     {
6719       struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
6720       struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table;
6721 
6722       /* Set local fields.  */
6723       ret->indx = -1;
6724       ret->dynindx = -1;
6725       ret->got = htab->init_got_refcount;
6726       ret->plt = htab->init_plt_refcount;
6727       memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry)
6728 			      - offsetof (struct elf_link_hash_entry, size)));
6729       /* Assume that we have been called by a non-ELF symbol reader.
6730 	 This flag is then reset by the code which reads an ELF input
6731 	 file.  This ensures that a symbol created by a non-ELF symbol
6732 	 reader will have the flag set correctly.  */
6733       ret->non_elf = 1;
6734     }
6735 
6736   return entry;
6737 }
6738 
6739 /* Copy data from an indirect symbol to its direct symbol, hiding the
6740    old indirect symbol.  Also used for copying flags to a weakdef.  */
6741 
6742 void
6743 _bfd_elf_link_hash_copy_indirect (struct bfd_link_info *info,
6744 				  struct elf_link_hash_entry *dir,
6745 				  struct elf_link_hash_entry *ind)
6746 {
6747   struct elf_link_hash_table *htab;
6748 
6749   /* Copy down any references that we may have already seen to the
6750      symbol which just became indirect.  */
6751 
6752   dir->ref_dynamic |= ind->ref_dynamic;
6753   dir->ref_regular |= ind->ref_regular;
6754   dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
6755   dir->non_got_ref |= ind->non_got_ref;
6756   dir->needs_plt |= ind->needs_plt;
6757   dir->pointer_equality_needed |= ind->pointer_equality_needed;
6758 
6759   if (ind->root.type != bfd_link_hash_indirect)
6760     return;
6761 
6762   /* Copy over the global and procedure linkage table refcount entries.
6763      These may have been already set up by a check_relocs routine.  */
6764   htab = elf_hash_table (info);
6765   if (ind->got.refcount > htab->init_got_refcount.refcount)
6766     {
6767       if (dir->got.refcount < 0)
6768 	dir->got.refcount = 0;
6769       dir->got.refcount += ind->got.refcount;
6770       ind->got.refcount = htab->init_got_refcount.refcount;
6771     }
6772 
6773   if (ind->plt.refcount > htab->init_plt_refcount.refcount)
6774     {
6775       if (dir->plt.refcount < 0)
6776 	dir->plt.refcount = 0;
6777       dir->plt.refcount += ind->plt.refcount;
6778       ind->plt.refcount = htab->init_plt_refcount.refcount;
6779     }
6780 
6781   if (ind->dynindx != -1)
6782     {
6783       if (dir->dynindx != -1)
6784 	_bfd_elf_strtab_delref (htab->dynstr, dir->dynstr_index);
6785       dir->dynindx = ind->dynindx;
6786       dir->dynstr_index = ind->dynstr_index;
6787       ind->dynindx = -1;
6788       ind->dynstr_index = 0;
6789     }
6790 }
6791 
6792 void
6793 _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info,
6794 				struct elf_link_hash_entry *h,
6795 				bfd_boolean force_local)
6796 {
6797   /* STT_GNU_IFUNC symbol must go through PLT.  */
6798   if (h->type != STT_GNU_IFUNC)
6799     {
6800       h->plt = elf_hash_table (info)->init_plt_offset;
6801       h->needs_plt = 0;
6802     }
6803   if (force_local)
6804     {
6805       h->forced_local = 1;
6806       if (h->dynindx != -1)
6807 	{
6808 	  h->dynindx = -1;
6809 	  _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
6810 				  h->dynstr_index);
6811 	}
6812     }
6813 }
6814 
6815 /* Initialize an ELF linker hash table.  */
6816 
6817 bfd_boolean
6818 _bfd_elf_link_hash_table_init
6819   (struct elf_link_hash_table *table,
6820    bfd *abfd,
6821    struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
6822 				      struct bfd_hash_table *,
6823 				      const char *),
6824    unsigned int entsize,
6825    enum elf_target_id target_id)
6826 {
6827   bfd_boolean ret;
6828   int can_refcount = get_elf_backend_data (abfd)->can_refcount;
6829 
6830   memset (table, 0, sizeof * table);
6831   table->init_got_refcount.refcount = can_refcount - 1;
6832   table->init_plt_refcount.refcount = can_refcount - 1;
6833   table->init_got_offset.offset = -(bfd_vma) 1;
6834   table->init_plt_offset.offset = -(bfd_vma) 1;
6835   /* The first dynamic symbol is a dummy.  */
6836   table->dynsymcount = 1;
6837 
6838   ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
6839 
6840   table->root.type = bfd_link_elf_hash_table;
6841   table->hash_table_id = target_id;
6842 
6843   return ret;
6844 }
6845 
6846 /* Create an ELF linker hash table.  */
6847 
6848 struct bfd_link_hash_table *
6849 _bfd_elf_link_hash_table_create (bfd *abfd)
6850 {
6851   struct elf_link_hash_table *ret;
6852   bfd_size_type amt = sizeof (struct elf_link_hash_table);
6853 
6854   ret = (struct elf_link_hash_table *) bfd_malloc (amt);
6855   if (ret == NULL)
6856     return NULL;
6857 
6858   if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc,
6859 				       sizeof (struct elf_link_hash_entry),
6860 				       GENERIC_ELF_DATA))
6861     {
6862       free (ret);
6863       return NULL;
6864     }
6865 
6866   return &ret->root;
6867 }
6868 
6869 /* This is a hook for the ELF emulation code in the generic linker to
6870    tell the backend linker what file name to use for the DT_NEEDED
6871    entry for a dynamic object.  */
6872 
6873 void
6874 bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
6875 {
6876   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6877       && bfd_get_format (abfd) == bfd_object)
6878     elf_dt_name (abfd) = name;
6879 }
6880 
6881 int
6882 bfd_elf_get_dyn_lib_class (bfd *abfd)
6883 {
6884   int lib_class;
6885   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6886       && bfd_get_format (abfd) == bfd_object)
6887     lib_class = elf_dyn_lib_class (abfd);
6888   else
6889     lib_class = 0;
6890   return lib_class;
6891 }
6892 
6893 void
6894 bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class)
6895 {
6896   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6897       && bfd_get_format (abfd) == bfd_object)
6898     elf_dyn_lib_class (abfd) = lib_class;
6899 }
6900 
6901 /* Get the list of DT_NEEDED entries for a link.  This is a hook for
6902    the linker ELF emulation code.  */
6903 
6904 struct bfd_link_needed_list *
6905 bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
6906 			 struct bfd_link_info *info)
6907 {
6908   if (! is_elf_hash_table (info->hash))
6909     return NULL;
6910   return elf_hash_table (info)->needed;
6911 }
6912 
6913 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link.  This is a
6914    hook for the linker ELF emulation code.  */
6915 
6916 struct bfd_link_needed_list *
6917 bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED,
6918 			  struct bfd_link_info *info)
6919 {
6920   if (! is_elf_hash_table (info->hash))
6921     return NULL;
6922   return elf_hash_table (info)->runpath;
6923 }
6924 
6925 /* Get the name actually used for a dynamic object for a link.  This
6926    is the SONAME entry if there is one.  Otherwise, it is the string
6927    passed to bfd_elf_set_dt_needed_name, or it is the filename.  */
6928 
6929 const char *
6930 bfd_elf_get_dt_soname (bfd *abfd)
6931 {
6932   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6933       && bfd_get_format (abfd) == bfd_object)
6934     return elf_dt_name (abfd);
6935   return NULL;
6936 }
6937 
6938 /* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
6939    the ELF linker emulation code.  */
6940 
6941 bfd_boolean
6942 bfd_elf_get_bfd_needed_list (bfd *abfd,
6943 			     struct bfd_link_needed_list **pneeded)
6944 {
6945   asection *s;
6946   bfd_byte *dynbuf = NULL;
6947   unsigned int elfsec;
6948   unsigned long shlink;
6949   bfd_byte *extdyn, *extdynend;
6950   size_t extdynsize;
6951   void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
6952 
6953   *pneeded = NULL;
6954 
6955   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
6956       || bfd_get_format (abfd) != bfd_object)
6957     return TRUE;
6958 
6959   s = bfd_get_section_by_name (abfd, ".dynamic");
6960   if (s == NULL || s->size == 0)
6961     return TRUE;
6962 
6963   if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
6964     goto error_return;
6965 
6966   elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
6967   if (elfsec == SHN_BAD)
6968     goto error_return;
6969 
6970   shlink = elf_elfsections (abfd)[elfsec]->sh_link;
6971 
6972   extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
6973   swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
6974 
6975   extdyn = dynbuf;
6976   extdynend = extdyn + s->size;
6977   for (; extdyn < extdynend; extdyn += extdynsize)
6978     {
6979       Elf_Internal_Dyn dyn;
6980 
6981       (*swap_dyn_in) (abfd, extdyn, &dyn);
6982 
6983       if (dyn.d_tag == DT_NULL)
6984 	break;
6985 
6986       if (dyn.d_tag == DT_NEEDED)
6987 	{
6988 	  const char *string;
6989 	  struct bfd_link_needed_list *l;
6990 	  unsigned int tagv = dyn.d_un.d_val;
6991 	  bfd_size_type amt;
6992 
6993 	  string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
6994 	  if (string == NULL)
6995 	    goto error_return;
6996 
6997 	  amt = sizeof *l;
6998 	  l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
6999 	  if (l == NULL)
7000 	    goto error_return;
7001 
7002 	  l->by = abfd;
7003 	  l->name = string;
7004 	  l->next = *pneeded;
7005 	  *pneeded = l;
7006 	}
7007     }
7008 
7009   free (dynbuf);
7010 
7011   return TRUE;
7012 
7013  error_return:
7014   if (dynbuf != NULL)
7015     free (dynbuf);
7016   return FALSE;
7017 }
7018 
7019 struct elf_symbuf_symbol
7020 {
7021   unsigned long st_name;	/* Symbol name, index in string tbl */
7022   unsigned char st_info;	/* Type and binding attributes */
7023   unsigned char st_other;	/* Visibilty, and target specific */
7024 };
7025 
7026 struct elf_symbuf_head
7027 {
7028   struct elf_symbuf_symbol *ssym;
7029   bfd_size_type count;
7030   unsigned int st_shndx;
7031 };
7032 
7033 struct elf_symbol
7034 {
7035   union
7036     {
7037       Elf_Internal_Sym *isym;
7038       struct elf_symbuf_symbol *ssym;
7039     } u;
7040   const char *name;
7041 };
7042 
7043 /* Sort references to symbols by ascending section number.  */
7044 
7045 static int
7046 elf_sort_elf_symbol (const void *arg1, const void *arg2)
7047 {
7048   const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1;
7049   const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2;
7050 
7051   return s1->st_shndx - s2->st_shndx;
7052 }
7053 
7054 static int
7055 elf_sym_name_compare (const void *arg1, const void *arg2)
7056 {
7057   const struct elf_symbol *s1 = (const struct elf_symbol *) arg1;
7058   const struct elf_symbol *s2 = (const struct elf_symbol *) arg2;
7059   return strcmp (s1->name, s2->name);
7060 }
7061 
7062 static struct elf_symbuf_head *
7063 elf_create_symbuf (bfd_size_type symcount, Elf_Internal_Sym *isymbuf)
7064 {
7065   Elf_Internal_Sym **ind, **indbufend, **indbuf;
7066   struct elf_symbuf_symbol *ssym;
7067   struct elf_symbuf_head *ssymbuf, *ssymhead;
7068   bfd_size_type i, shndx_count, total_size;
7069 
7070   indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf));
7071   if (indbuf == NULL)
7072     return NULL;
7073 
7074   for (ind = indbuf, i = 0; i < symcount; i++)
7075     if (isymbuf[i].st_shndx != SHN_UNDEF)
7076       *ind++ = &isymbuf[i];
7077   indbufend = ind;
7078 
7079   qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *),
7080 	 elf_sort_elf_symbol);
7081 
7082   shndx_count = 0;
7083   if (indbufend > indbuf)
7084     for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++)
7085       if (ind[0]->st_shndx != ind[1]->st_shndx)
7086 	shndx_count++;
7087 
7088   total_size = ((shndx_count + 1) * sizeof (*ssymbuf)
7089 		+ (indbufend - indbuf) * sizeof (*ssym));
7090   ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size);
7091   if (ssymbuf == NULL)
7092     {
7093       free (indbuf);
7094       return NULL;
7095     }
7096 
7097   ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1);
7098   ssymbuf->ssym = NULL;
7099   ssymbuf->count = shndx_count;
7100   ssymbuf->st_shndx = 0;
7101   for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++)
7102     {
7103       if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx)
7104 	{
7105 	  ssymhead++;
7106 	  ssymhead->ssym = ssym;
7107 	  ssymhead->count = 0;
7108 	  ssymhead->st_shndx = (*ind)->st_shndx;
7109 	}
7110       ssym->st_name = (*ind)->st_name;
7111       ssym->st_info = (*ind)->st_info;
7112       ssym->st_other = (*ind)->st_other;
7113       ssymhead->count++;
7114     }
7115   BFD_ASSERT ((bfd_size_type) (ssymhead - ssymbuf) == shndx_count
7116 	      && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf)
7117 		  == total_size));
7118 
7119   free (indbuf);
7120   return ssymbuf;
7121 }
7122 
7123 /* Check if 2 sections define the same set of local and global
7124    symbols.  */
7125 
7126 static bfd_boolean
7127 bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
7128 				   struct bfd_link_info *info)
7129 {
7130   bfd *bfd1, *bfd2;
7131   const struct elf_backend_data *bed1, *bed2;
7132   Elf_Internal_Shdr *hdr1, *hdr2;
7133   bfd_size_type symcount1, symcount2;
7134   Elf_Internal_Sym *isymbuf1, *isymbuf2;
7135   struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
7136   Elf_Internal_Sym *isym, *isymend;
7137   struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
7138   bfd_size_type count1, count2, i;
7139   unsigned int shndx1, shndx2;
7140   bfd_boolean result;
7141 
7142   bfd1 = sec1->owner;
7143   bfd2 = sec2->owner;
7144 
7145   /* Both sections have to be in ELF.  */
7146   if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
7147       || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
7148     return FALSE;
7149 
7150   if (elf_section_type (sec1) != elf_section_type (sec2))
7151     return FALSE;
7152 
7153   shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
7154   shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
7155   if (shndx1 == SHN_BAD || shndx2 == SHN_BAD)
7156     return FALSE;
7157 
7158   bed1 = get_elf_backend_data (bfd1);
7159   bed2 = get_elf_backend_data (bfd2);
7160   hdr1 = &elf_tdata (bfd1)->symtab_hdr;
7161   symcount1 = hdr1->sh_size / bed1->s->sizeof_sym;
7162   hdr2 = &elf_tdata (bfd2)->symtab_hdr;
7163   symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
7164 
7165   if (symcount1 == 0 || symcount2 == 0)
7166     return FALSE;
7167 
7168   result = FALSE;
7169   isymbuf1 = NULL;
7170   isymbuf2 = NULL;
7171   ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf;
7172   ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf;
7173 
7174   if (ssymbuf1 == NULL)
7175     {
7176       isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
7177 				       NULL, NULL, NULL);
7178       if (isymbuf1 == NULL)
7179 	goto done;
7180 
7181       if (!info->reduce_memory_overheads)
7182 	elf_tdata (bfd1)->symbuf = ssymbuf1
7183 	  = elf_create_symbuf (symcount1, isymbuf1);
7184     }
7185 
7186   if (ssymbuf1 == NULL || ssymbuf2 == NULL)
7187     {
7188       isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
7189 				       NULL, NULL, NULL);
7190       if (isymbuf2 == NULL)
7191 	goto done;
7192 
7193       if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
7194 	elf_tdata (bfd2)->symbuf = ssymbuf2
7195 	  = elf_create_symbuf (symcount2, isymbuf2);
7196     }
7197 
7198   if (ssymbuf1 != NULL && ssymbuf2 != NULL)
7199     {
7200       /* Optimized faster version.  */
7201       bfd_size_type lo, hi, mid;
7202       struct elf_symbol *symp;
7203       struct elf_symbuf_symbol *ssym, *ssymend;
7204 
7205       lo = 0;
7206       hi = ssymbuf1->count;
7207       ssymbuf1++;
7208       count1 = 0;
7209       while (lo < hi)
7210 	{
7211 	  mid = (lo + hi) / 2;
7212 	  if (shndx1 < ssymbuf1[mid].st_shndx)
7213 	    hi = mid;
7214 	  else if (shndx1 > ssymbuf1[mid].st_shndx)
7215 	    lo = mid + 1;
7216 	  else
7217 	    {
7218 	      count1 = ssymbuf1[mid].count;
7219 	      ssymbuf1 += mid;
7220 	      break;
7221 	    }
7222 	}
7223 
7224       lo = 0;
7225       hi = ssymbuf2->count;
7226       ssymbuf2++;
7227       count2 = 0;
7228       while (lo < hi)
7229 	{
7230 	  mid = (lo + hi) / 2;
7231 	  if (shndx2 < ssymbuf2[mid].st_shndx)
7232 	    hi = mid;
7233 	  else if (shndx2 > ssymbuf2[mid].st_shndx)
7234 	    lo = mid + 1;
7235 	  else
7236 	    {
7237 	      count2 = ssymbuf2[mid].count;
7238 	      ssymbuf2 += mid;
7239 	      break;
7240 	    }
7241 	}
7242 
7243       if (count1 == 0 || count2 == 0 || count1 != count2)
7244 	goto done;
7245 
7246       symtable1 = (struct elf_symbol *)
7247           bfd_malloc (count1 * sizeof (struct elf_symbol));
7248       symtable2 = (struct elf_symbol *)
7249           bfd_malloc (count2 * sizeof (struct elf_symbol));
7250       if (symtable1 == NULL || symtable2 == NULL)
7251 	goto done;
7252 
7253       symp = symtable1;
7254       for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
7255 	   ssym < ssymend; ssym++, symp++)
7256 	{
7257 	  symp->u.ssym = ssym;
7258 	  symp->name = bfd_elf_string_from_elf_section (bfd1,
7259 							hdr1->sh_link,
7260 							ssym->st_name);
7261 	}
7262 
7263       symp = symtable2;
7264       for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
7265 	   ssym < ssymend; ssym++, symp++)
7266 	{
7267 	  symp->u.ssym = ssym;
7268 	  symp->name = bfd_elf_string_from_elf_section (bfd2,
7269 							hdr2->sh_link,
7270 							ssym->st_name);
7271 	}
7272 
7273       /* Sort symbol by name.  */
7274       qsort (symtable1, count1, sizeof (struct elf_symbol),
7275 	     elf_sym_name_compare);
7276       qsort (symtable2, count1, sizeof (struct elf_symbol),
7277 	     elf_sym_name_compare);
7278 
7279       for (i = 0; i < count1; i++)
7280 	/* Two symbols must have the same binding, type and name.  */
7281 	if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info
7282 	    || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other
7283 	    || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7284 	  goto done;
7285 
7286       result = TRUE;
7287       goto done;
7288     }
7289 
7290   symtable1 = (struct elf_symbol *)
7291       bfd_malloc (symcount1 * sizeof (struct elf_symbol));
7292   symtable2 = (struct elf_symbol *)
7293       bfd_malloc (symcount2 * sizeof (struct elf_symbol));
7294   if (symtable1 == NULL || symtable2 == NULL)
7295     goto done;
7296 
7297   /* Count definitions in the section.  */
7298   count1 = 0;
7299   for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
7300     if (isym->st_shndx == shndx1)
7301       symtable1[count1++].u.isym = isym;
7302 
7303   count2 = 0;
7304   for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
7305     if (isym->st_shndx == shndx2)
7306       symtable2[count2++].u.isym = isym;
7307 
7308   if (count1 == 0 || count2 == 0 || count1 != count2)
7309     goto done;
7310 
7311   for (i = 0; i < count1; i++)
7312     symtable1[i].name
7313       = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link,
7314 					 symtable1[i].u.isym->st_name);
7315 
7316   for (i = 0; i < count2; i++)
7317     symtable2[i].name
7318       = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link,
7319 					 symtable2[i].u.isym->st_name);
7320 
7321   /* Sort symbol by name.  */
7322   qsort (symtable1, count1, sizeof (struct elf_symbol),
7323 	 elf_sym_name_compare);
7324   qsort (symtable2, count1, sizeof (struct elf_symbol),
7325 	 elf_sym_name_compare);
7326 
7327   for (i = 0; i < count1; i++)
7328     /* Two symbols must have the same binding, type and name.  */
7329     if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info
7330 	|| symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other
7331 	|| strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7332       goto done;
7333 
7334   result = TRUE;
7335 
7336 done:
7337   if (symtable1)
7338     free (symtable1);
7339   if (symtable2)
7340     free (symtable2);
7341   if (isymbuf1)
7342     free (isymbuf1);
7343   if (isymbuf2)
7344     free (isymbuf2);
7345 
7346   return result;
7347 }
7348 
7349 /* Return TRUE if 2 section types are compatible.  */
7350 
7351 bfd_boolean
7352 _bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
7353 				 bfd *bbfd, const asection *bsec)
7354 {
7355   if (asec == NULL
7356       || bsec == NULL
7357       || abfd->xvec->flavour != bfd_target_elf_flavour
7358       || bbfd->xvec->flavour != bfd_target_elf_flavour)
7359     return TRUE;
7360 
7361   return elf_section_type (asec) == elf_section_type (bsec);
7362 }
7363 
7364 /* Final phase of ELF linker.  */
7365 
7366 /* A structure we use to avoid passing large numbers of arguments.  */
7367 
7368 struct elf_final_link_info
7369 {
7370   /* General link information.  */
7371   struct bfd_link_info *info;
7372   /* Output BFD.  */
7373   bfd *output_bfd;
7374   /* Symbol string table.  */
7375   struct bfd_strtab_hash *symstrtab;
7376   /* .dynsym section.  */
7377   asection *dynsym_sec;
7378   /* .hash section.  */
7379   asection *hash_sec;
7380   /* symbol version section (.gnu.version).  */
7381   asection *symver_sec;
7382   /* Buffer large enough to hold contents of any section.  */
7383   bfd_byte *contents;
7384   /* Buffer large enough to hold external relocs of any section.  */
7385   void *external_relocs;
7386   /* Buffer large enough to hold internal relocs of any section.  */
7387   Elf_Internal_Rela *internal_relocs;
7388   /* Buffer large enough to hold external local symbols of any input
7389      BFD.  */
7390   bfd_byte *external_syms;
7391   /* And a buffer for symbol section indices.  */
7392   Elf_External_Sym_Shndx *locsym_shndx;
7393   /* Buffer large enough to hold internal local symbols of any input
7394      BFD.  */
7395   Elf_Internal_Sym *internal_syms;
7396   /* Array large enough to hold a symbol index for each local symbol
7397      of any input BFD.  */
7398   long *indices;
7399   /* Array large enough to hold a section pointer for each local
7400      symbol of any input BFD.  */
7401   asection **sections;
7402   /* Buffer to hold swapped out symbols.  */
7403   bfd_byte *symbuf;
7404   /* And one for symbol section indices.  */
7405   Elf_External_Sym_Shndx *symshndxbuf;
7406   /* Number of swapped out symbols in buffer.  */
7407   size_t symbuf_count;
7408   /* Number of symbols which fit in symbuf.  */
7409   size_t symbuf_size;
7410   /* And same for symshndxbuf.  */
7411   size_t shndxbuf_size;
7412 };
7413 
7414 /* This struct is used to pass information to elf_link_output_extsym.  */
7415 
7416 struct elf_outext_info
7417 {
7418   bfd_boolean failed;
7419   bfd_boolean localsyms;
7420   struct elf_final_link_info *finfo;
7421 };
7422 
7423 
7424 /* Support for evaluating a complex relocation.
7425 
7426    Complex relocations are generalized, self-describing relocations.  The
7427    implementation of them consists of two parts: complex symbols, and the
7428    relocations themselves.
7429 
7430    The relocations are use a reserved elf-wide relocation type code (R_RELC
7431    external / BFD_RELOC_RELC internal) and an encoding of relocation field
7432    information (start bit, end bit, word width, etc) into the addend.  This
7433    information is extracted from CGEN-generated operand tables within gas.
7434 
7435    Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
7436    internal) representing prefix-notation expressions, including but not
7437    limited to those sorts of expressions normally encoded as addends in the
7438    addend field.  The symbol mangling format is:
7439 
7440    <node> := <literal>
7441           |  <unary-operator> ':' <node>
7442           |  <binary-operator> ':' <node> ':' <node>
7443 	  ;
7444 
7445    <literal> := 's' <digits=N> ':' <N character symbol name>
7446              |  'S' <digits=N> ':' <N character section name>
7447 	     |  '#' <hexdigits>
7448 	     ;
7449 
7450    <binary-operator> := as in C
7451    <unary-operator> := as in C, plus "0-" for unambiguous negation.  */
7452 
7453 static void
7454 set_symbol_value (bfd *bfd_with_globals,
7455 		  Elf_Internal_Sym *isymbuf,
7456 		  size_t locsymcount,
7457 		  size_t symidx,
7458 		  bfd_vma val)
7459 {
7460   struct elf_link_hash_entry **sym_hashes;
7461   struct elf_link_hash_entry *h;
7462   size_t extsymoff = locsymcount;
7463 
7464   if (symidx < locsymcount)
7465     {
7466       Elf_Internal_Sym *sym;
7467 
7468       sym = isymbuf + symidx;
7469       if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
7470 	{
7471 	  /* It is a local symbol: move it to the
7472 	     "absolute" section and give it a value.  */
7473 	  sym->st_shndx = SHN_ABS;
7474 	  sym->st_value = val;
7475 	  return;
7476 	}
7477       BFD_ASSERT (elf_bad_symtab (bfd_with_globals));
7478       extsymoff = 0;
7479     }
7480 
7481   /* It is a global symbol: set its link type
7482      to "defined" and give it a value.  */
7483 
7484   sym_hashes = elf_sym_hashes (bfd_with_globals);
7485   h = sym_hashes [symidx - extsymoff];
7486   while (h->root.type == bfd_link_hash_indirect
7487 	 || h->root.type == bfd_link_hash_warning)
7488     h = (struct elf_link_hash_entry *) h->root.u.i.link;
7489   h->root.type = bfd_link_hash_defined;
7490   h->root.u.def.value = val;
7491   h->root.u.def.section = bfd_abs_section_ptr;
7492 }
7493 
7494 static bfd_boolean
7495 resolve_symbol (const char *name,
7496 		bfd *input_bfd,
7497 		struct elf_final_link_info *finfo,
7498 		bfd_vma *result,
7499 		Elf_Internal_Sym *isymbuf,
7500 		size_t locsymcount)
7501 {
7502   Elf_Internal_Sym *sym;
7503   struct bfd_link_hash_entry *global_entry;
7504   const char *candidate = NULL;
7505   Elf_Internal_Shdr *symtab_hdr;
7506   size_t i;
7507 
7508   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
7509 
7510   for (i = 0; i < locsymcount; ++ i)
7511     {
7512       sym = isymbuf + i;
7513 
7514       if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
7515 	continue;
7516 
7517       candidate = bfd_elf_string_from_elf_section (input_bfd,
7518 						   symtab_hdr->sh_link,
7519 						   sym->st_name);
7520 #ifdef DEBUG
7521       printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n",
7522 	      name, candidate, (unsigned long) sym->st_value);
7523 #endif
7524       if (candidate && strcmp (candidate, name) == 0)
7525 	{
7526 	  asection *sec = finfo->sections [i];
7527 
7528 	  *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0);
7529 	  *result += sec->output_offset + sec->output_section->vma;
7530 #ifdef DEBUG
7531 	  printf ("Found symbol with value %8.8lx\n",
7532 		  (unsigned long) *result);
7533 #endif
7534 	  return TRUE;
7535 	}
7536     }
7537 
7538   /* Hmm, haven't found it yet. perhaps it is a global.  */
7539   global_entry = bfd_link_hash_lookup (finfo->info->hash, name,
7540 				       FALSE, FALSE, TRUE);
7541   if (!global_entry)
7542     return FALSE;
7543 
7544   if (global_entry->type == bfd_link_hash_defined
7545       || global_entry->type == bfd_link_hash_defweak)
7546     {
7547       *result = (global_entry->u.def.value
7548 		 + global_entry->u.def.section->output_section->vma
7549 		 + global_entry->u.def.section->output_offset);
7550 #ifdef DEBUG
7551       printf ("Found GLOBAL symbol '%s' with value %8.8lx\n",
7552 	      global_entry->root.string, (unsigned long) *result);
7553 #endif
7554       return TRUE;
7555     }
7556 
7557   return FALSE;
7558 }
7559 
7560 static bfd_boolean
7561 resolve_section (const char *name,
7562 		 asection *sections,
7563 		 bfd_vma *result)
7564 {
7565   asection *curr;
7566   unsigned int len;
7567 
7568   for (curr = sections; curr; curr = curr->next)
7569     if (strcmp (curr->name, name) == 0)
7570       {
7571 	*result = curr->vma;
7572 	return TRUE;
7573       }
7574 
7575   /* Hmm. still haven't found it. try pseudo-section names.  */
7576   for (curr = sections; curr; curr = curr->next)
7577     {
7578       len = strlen (curr->name);
7579       if (len > strlen (name))
7580 	continue;
7581 
7582       if (strncmp (curr->name, name, len) == 0)
7583 	{
7584 	  if (strncmp (".end", name + len, 4) == 0)
7585 	    {
7586 	      *result = curr->vma + curr->size;
7587 	      return TRUE;
7588 	    }
7589 
7590 	  /* Insert more pseudo-section names here, if you like.  */
7591 	}
7592     }
7593 
7594   return FALSE;
7595 }
7596 
7597 static void
7598 undefined_reference (const char *reftype, const char *name)
7599 {
7600   _bfd_error_handler (_("undefined %s reference in complex symbol: %s"),
7601 		      reftype, name);
7602 }
7603 
7604 static bfd_boolean
7605 eval_symbol (bfd_vma *result,
7606 	     const char **symp,
7607 	     bfd *input_bfd,
7608 	     struct elf_final_link_info *finfo,
7609 	     bfd_vma dot,
7610 	     Elf_Internal_Sym *isymbuf,
7611 	     size_t locsymcount,
7612 	     int signed_p)
7613 {
7614   size_t len;
7615   size_t symlen;
7616   bfd_vma a;
7617   bfd_vma b;
7618   char symbuf[4096];
7619   const char *sym = *symp;
7620   const char *symend;
7621   bfd_boolean symbol_is_section = FALSE;
7622 
7623   len = strlen (sym);
7624   symend = sym + len;
7625 
7626   if (len < 1 || len > sizeof (symbuf))
7627     {
7628       bfd_set_error (bfd_error_invalid_operation);
7629       return FALSE;
7630     }
7631 
7632   switch (* sym)
7633     {
7634     case '.':
7635       *result = dot;
7636       *symp = sym + 1;
7637       return TRUE;
7638 
7639     case '#':
7640       ++sym;
7641       *result = strtoul (sym, (char **) symp, 16);
7642       return TRUE;
7643 
7644     case 'S':
7645       symbol_is_section = TRUE;
7646     case 's':
7647       ++sym;
7648       symlen = strtol (sym, (char **) symp, 10);
7649       sym = *symp + 1; /* Skip the trailing ':'.  */
7650 
7651       if (symend < sym || symlen + 1 > sizeof (symbuf))
7652 	{
7653 	  bfd_set_error (bfd_error_invalid_operation);
7654 	  return FALSE;
7655 	}
7656 
7657       memcpy (symbuf, sym, symlen);
7658       symbuf[symlen] = '\0';
7659       *symp = sym + symlen;
7660 
7661       /* Is it always possible, with complex symbols, that gas "mis-guessed"
7662 	 the symbol as a section, or vice-versa. so we're pretty liberal in our
7663 	 interpretation here; section means "try section first", not "must be a
7664 	 section", and likewise with symbol.  */
7665 
7666       if (symbol_is_section)
7667 	{
7668 	  if (!resolve_section (symbuf, finfo->output_bfd->sections, result)
7669 	      && !resolve_symbol (symbuf, input_bfd, finfo, result,
7670 				  isymbuf, locsymcount))
7671 	    {
7672 	      undefined_reference ("section", symbuf);
7673 	      return FALSE;
7674 	    }
7675 	}
7676       else
7677 	{
7678 	  if (!resolve_symbol (symbuf, input_bfd, finfo, result,
7679 			       isymbuf, locsymcount)
7680 	      && !resolve_section (symbuf, finfo->output_bfd->sections,
7681 				   result))
7682 	    {
7683 	      undefined_reference ("symbol", symbuf);
7684 	      return FALSE;
7685 	    }
7686 	}
7687 
7688       return TRUE;
7689 
7690       /* All that remains are operators.  */
7691 
7692 #define UNARY_OP(op)						\
7693   if (strncmp (sym, #op, strlen (#op)) == 0)			\
7694     {								\
7695       sym += strlen (#op);					\
7696       if (*sym == ':')						\
7697 	++sym;							\
7698       *symp = sym;						\
7699       if (!eval_symbol (&a, symp, input_bfd, finfo, dot,	\
7700 			isymbuf, locsymcount, signed_p))	\
7701 	return FALSE;						\
7702       if (signed_p)						\
7703 	*result = op ((bfd_signed_vma) a);			\
7704       else							\
7705 	*result = op a;						\
7706       return TRUE;						\
7707     }
7708 
7709 #define BINARY_OP(op)						\
7710   if (strncmp (sym, #op, strlen (#op)) == 0)			\
7711     {								\
7712       sym += strlen (#op);					\
7713       if (*sym == ':')						\
7714 	++sym;							\
7715       *symp = sym;						\
7716       if (!eval_symbol (&a, symp, input_bfd, finfo, dot,	\
7717 			isymbuf, locsymcount, signed_p))	\
7718 	return FALSE;						\
7719       ++*symp;							\
7720       if (!eval_symbol (&b, symp, input_bfd, finfo, dot,	\
7721 			isymbuf, locsymcount, signed_p))	\
7722 	return FALSE;						\
7723       if (signed_p)						\
7724 	*result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b);	\
7725       else							\
7726 	*result = a op b;					\
7727       return TRUE;						\
7728     }
7729 
7730     default:
7731       UNARY_OP  (0-);
7732       BINARY_OP (<<);
7733       BINARY_OP (>>);
7734       BINARY_OP (==);
7735       BINARY_OP (!=);
7736       BINARY_OP (<=);
7737       BINARY_OP (>=);
7738       BINARY_OP (&&);
7739       BINARY_OP (||);
7740       UNARY_OP  (~);
7741       UNARY_OP  (!);
7742       BINARY_OP (*);
7743       BINARY_OP (/);
7744       BINARY_OP (%);
7745       BINARY_OP (^);
7746       BINARY_OP (|);
7747       BINARY_OP (&);
7748       BINARY_OP (+);
7749       BINARY_OP (-);
7750       BINARY_OP (<);
7751       BINARY_OP (>);
7752 #undef UNARY_OP
7753 #undef BINARY_OP
7754       _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
7755       bfd_set_error (bfd_error_invalid_operation);
7756       return FALSE;
7757     }
7758 }
7759 
7760 static void
7761 put_value (bfd_vma size,
7762 	   unsigned long chunksz,
7763 	   bfd *input_bfd,
7764 	   bfd_vma x,
7765 	   bfd_byte *location)
7766 {
7767   location += (size - chunksz);
7768 
7769   for (; size; size -= chunksz, location -= chunksz, x >>= (chunksz * 8))
7770     {
7771       switch (chunksz)
7772 	{
7773 	default:
7774 	case 0:
7775 	  abort ();
7776 	case 1:
7777 	  bfd_put_8 (input_bfd, x, location);
7778 	  break;
7779 	case 2:
7780 	  bfd_put_16 (input_bfd, x, location);
7781 	  break;
7782 	case 4:
7783 	  bfd_put_32 (input_bfd, x, location);
7784 	  break;
7785 	case 8:
7786 #ifdef BFD64
7787 	  bfd_put_64 (input_bfd, x, location);
7788 #else
7789 	  abort ();
7790 #endif
7791 	  break;
7792 	}
7793     }
7794 }
7795 
7796 static bfd_vma
7797 get_value (bfd_vma size,
7798 	   unsigned long chunksz,
7799 	   bfd *input_bfd,
7800 	   bfd_byte *location)
7801 {
7802   bfd_vma x = 0;
7803 
7804   for (; size; size -= chunksz, location += chunksz)
7805     {
7806       switch (chunksz)
7807 	{
7808 	default:
7809 	case 0:
7810 	  abort ();
7811 	case 1:
7812 	  x = (x << (8 * chunksz)) | bfd_get_8 (input_bfd, location);
7813 	  break;
7814 	case 2:
7815 	  x = (x << (8 * chunksz)) | bfd_get_16 (input_bfd, location);
7816 	  break;
7817 	case 4:
7818 	  x = (x << (8 * chunksz)) | bfd_get_32 (input_bfd, location);
7819 	  break;
7820 	case 8:
7821 #ifdef BFD64
7822 	  x = (x << (8 * chunksz)) | bfd_get_64 (input_bfd, location);
7823 #else
7824 	  abort ();
7825 #endif
7826 	  break;
7827 	}
7828     }
7829   return x;
7830 }
7831 
7832 static void
7833 decode_complex_addend (unsigned long *start,   /* in bits */
7834 		       unsigned long *oplen,   /* in bits */
7835 		       unsigned long *len,     /* in bits */
7836 		       unsigned long *wordsz,  /* in bytes */
7837 		       unsigned long *chunksz, /* in bytes */
7838 		       unsigned long *lsb0_p,
7839 		       unsigned long *signed_p,
7840 		       unsigned long *trunc_p,
7841 		       unsigned long encoded)
7842 {
7843   * start     =  encoded        & 0x3F;
7844   * len       = (encoded >>  6) & 0x3F;
7845   * oplen     = (encoded >> 12) & 0x3F;
7846   * wordsz    = (encoded >> 18) & 0xF;
7847   * chunksz   = (encoded >> 22) & 0xF;
7848   * lsb0_p    = (encoded >> 27) & 1;
7849   * signed_p  = (encoded >> 28) & 1;
7850   * trunc_p   = (encoded >> 29) & 1;
7851 }
7852 
7853 bfd_reloc_status_type
7854 bfd_elf_perform_complex_relocation (bfd *input_bfd,
7855 				    asection *input_section ATTRIBUTE_UNUSED,
7856 				    bfd_byte *contents,
7857 				    Elf_Internal_Rela *rel,
7858 				    bfd_vma relocation)
7859 {
7860   bfd_vma shift, x, mask;
7861   unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p;
7862   bfd_reloc_status_type r;
7863 
7864   /*  Perform this reloc, since it is complex.
7865       (this is not to say that it necessarily refers to a complex
7866       symbol; merely that it is a self-describing CGEN based reloc.
7867       i.e. the addend has the complete reloc information (bit start, end,
7868       word size, etc) encoded within it.).  */
7869 
7870   decode_complex_addend (&start, &oplen, &len, &wordsz,
7871 			 &chunksz, &lsb0_p, &signed_p,
7872 			 &trunc_p, rel->r_addend);
7873 
7874   mask = (((1L << (len - 1)) - 1) << 1) | 1;
7875 
7876   if (lsb0_p)
7877     shift = (start + 1) - len;
7878   else
7879     shift = (8 * wordsz) - (start + len);
7880 
7881   /* FIXME: octets_per_byte.  */
7882   x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset);
7883 
7884 #ifdef DEBUG
7885   printf ("Doing complex reloc: "
7886 	  "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
7887 	  "chunksz %ld, start %ld, len %ld, oplen %ld\n"
7888 	  "    dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
7889 	  lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
7890 	  oplen, (unsigned long) x, (unsigned long) mask,
7891 	  (unsigned long) relocation);
7892 #endif
7893 
7894   r = bfd_reloc_ok;
7895   if (! trunc_p)
7896     /* Now do an overflow check.  */
7897     r = bfd_check_overflow ((signed_p
7898 			     ? complain_overflow_signed
7899 			     : complain_overflow_unsigned),
7900 			    len, 0, (8 * wordsz),
7901 			    relocation);
7902 
7903   /* Do the deed.  */
7904   x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
7905 
7906 #ifdef DEBUG
7907   printf ("           relocation: %8.8lx\n"
7908 	  "         shifted mask: %8.8lx\n"
7909 	  " shifted/masked reloc: %8.8lx\n"
7910 	  "               result: %8.8lx\n",
7911 	  (unsigned long) relocation, (unsigned long) (mask << shift),
7912 	  (unsigned long) ((relocation & mask) << shift), (unsigned long) x);
7913 #endif
7914   /* FIXME: octets_per_byte.  */
7915   put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset);
7916   return r;
7917 }
7918 
7919 /* When performing a relocatable link, the input relocations are
7920    preserved.  But, if they reference global symbols, the indices
7921    referenced must be updated.  Update all the relocations found in
7922    RELDATA.  */
7923 
7924 static void
7925 elf_link_adjust_relocs (bfd *abfd,
7926 			struct bfd_elf_section_reloc_data *reldata)
7927 {
7928   unsigned int i;
7929   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7930   bfd_byte *erela;
7931   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
7932   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
7933   bfd_vma r_type_mask;
7934   int r_sym_shift;
7935   unsigned int count = reldata->count;
7936   struct elf_link_hash_entry **rel_hash = reldata->hashes;
7937 
7938   if (reldata->hdr->sh_entsize == bed->s->sizeof_rel)
7939     {
7940       swap_in = bed->s->swap_reloc_in;
7941       swap_out = bed->s->swap_reloc_out;
7942     }
7943   else if (reldata->hdr->sh_entsize == bed->s->sizeof_rela)
7944     {
7945       swap_in = bed->s->swap_reloca_in;
7946       swap_out = bed->s->swap_reloca_out;
7947     }
7948   else
7949     abort ();
7950 
7951   if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
7952     abort ();
7953 
7954   if (bed->s->arch_size == 32)
7955     {
7956       r_type_mask = 0xff;
7957       r_sym_shift = 8;
7958     }
7959   else
7960     {
7961       r_type_mask = 0xffffffff;
7962       r_sym_shift = 32;
7963     }
7964 
7965   erela = reldata->hdr->contents;
7966   for (i = 0; i < count; i++, rel_hash++, erela += reldata->hdr->sh_entsize)
7967     {
7968       Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
7969       unsigned int j;
7970 
7971       if (*rel_hash == NULL)
7972 	continue;
7973 
7974       BFD_ASSERT ((*rel_hash)->indx >= 0);
7975 
7976       (*swap_in) (abfd, erela, irela);
7977       for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
7978 	irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
7979 			   | (irela[j].r_info & r_type_mask));
7980       (*swap_out) (abfd, irela, erela);
7981     }
7982 }
7983 
7984 struct elf_link_sort_rela
7985 {
7986   union {
7987     bfd_vma offset;
7988     bfd_vma sym_mask;
7989   } u;
7990   enum elf_reloc_type_class type;
7991   /* We use this as an array of size int_rels_per_ext_rel.  */
7992   Elf_Internal_Rela rela[1];
7993 };
7994 
7995 static int
7996 elf_link_sort_cmp1 (const void *A, const void *B)
7997 {
7998   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
7999   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8000   int relativea, relativeb;
8001 
8002   relativea = a->type == reloc_class_relative;
8003   relativeb = b->type == reloc_class_relative;
8004 
8005   if (relativea < relativeb)
8006     return 1;
8007   if (relativea > relativeb)
8008     return -1;
8009   if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
8010     return -1;
8011   if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
8012     return 1;
8013   if (a->rela->r_offset < b->rela->r_offset)
8014     return -1;
8015   if (a->rela->r_offset > b->rela->r_offset)
8016     return 1;
8017   return 0;
8018 }
8019 
8020 static int
8021 elf_link_sort_cmp2 (const void *A, const void *B)
8022 {
8023   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8024   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8025   int copya, copyb;
8026 
8027   if (a->u.offset < b->u.offset)
8028     return -1;
8029   if (a->u.offset > b->u.offset)
8030     return 1;
8031   copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt);
8032   copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt);
8033   if (copya < copyb)
8034     return -1;
8035   if (copya > copyb)
8036     return 1;
8037   if (a->rela->r_offset < b->rela->r_offset)
8038     return -1;
8039   if (a->rela->r_offset > b->rela->r_offset)
8040     return 1;
8041   return 0;
8042 }
8043 
8044 static size_t
8045 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
8046 {
8047   asection *dynamic_relocs;
8048   asection *rela_dyn;
8049   asection *rel_dyn;
8050   bfd_size_type count, size;
8051   size_t i, ret, sort_elt, ext_size;
8052   bfd_byte *sort, *s_non_relative, *p;
8053   struct elf_link_sort_rela *sq;
8054   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8055   int i2e = bed->s->int_rels_per_ext_rel;
8056   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8057   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8058   struct bfd_link_order *lo;
8059   bfd_vma r_sym_mask;
8060   bfd_boolean use_rela;
8061 
8062   /* Find a dynamic reloc section.  */
8063   rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
8064   rel_dyn  = bfd_get_section_by_name (abfd, ".rel.dyn");
8065   if (rela_dyn != NULL && rela_dyn->size > 0
8066       && rel_dyn != NULL && rel_dyn->size > 0)
8067     {
8068       bfd_boolean use_rela_initialised = FALSE;
8069 
8070       /* This is just here to stop gcc from complaining.
8071 	 It's initialization checking code is not perfect.  */
8072       use_rela = TRUE;
8073 
8074       /* Both sections are present.  Examine the sizes
8075 	 of the indirect sections to help us choose.  */
8076       for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8077 	if (lo->type == bfd_indirect_link_order)
8078 	  {
8079 	    asection *o = lo->u.indirect.section;
8080 
8081 	    if ((o->size % bed->s->sizeof_rela) == 0)
8082 	      {
8083 		if ((o->size % bed->s->sizeof_rel) == 0)
8084 		  /* Section size is divisible by both rel and rela sizes.
8085 		     It is of no help to us.  */
8086 		  ;
8087 		else
8088 		  {
8089 		    /* Section size is only divisible by rela.  */
8090 		    if (use_rela_initialised && (use_rela == FALSE))
8091 		      {
8092 			_bfd_error_handler
8093 			  (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8094 			bfd_set_error (bfd_error_invalid_operation);
8095 			return 0;
8096 		      }
8097 		    else
8098 		      {
8099 			use_rela = TRUE;
8100 			use_rela_initialised = TRUE;
8101 		      }
8102 		  }
8103 	      }
8104 	    else if ((o->size % bed->s->sizeof_rel) == 0)
8105 	      {
8106 		/* Section size is only divisible by rel.  */
8107 		if (use_rela_initialised && (use_rela == TRUE))
8108 		  {
8109 		    _bfd_error_handler
8110 		      (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8111 		    bfd_set_error (bfd_error_invalid_operation);
8112 		    return 0;
8113 		  }
8114 		else
8115 		  {
8116 		    use_rela = FALSE;
8117 		    use_rela_initialised = TRUE;
8118 		  }
8119 	      }
8120 	    else
8121 	      {
8122 		/* The section size is not divisible by either - something is wrong.  */
8123 		_bfd_error_handler
8124 		  (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8125 		bfd_set_error (bfd_error_invalid_operation);
8126 		return 0;
8127 	      }
8128 	  }
8129 
8130       for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8131 	if (lo->type == bfd_indirect_link_order)
8132 	  {
8133 	    asection *o = lo->u.indirect.section;
8134 
8135 	    if ((o->size % bed->s->sizeof_rela) == 0)
8136 	      {
8137 		if ((o->size % bed->s->sizeof_rel) == 0)
8138 		  /* Section size is divisible by both rel and rela sizes.
8139 		     It is of no help to us.  */
8140 		  ;
8141 		else
8142 		  {
8143 		    /* Section size is only divisible by rela.  */
8144 		    if (use_rela_initialised && (use_rela == FALSE))
8145 		      {
8146 			_bfd_error_handler
8147 			  (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8148 			bfd_set_error (bfd_error_invalid_operation);
8149 			return 0;
8150 		      }
8151 		    else
8152 		      {
8153 			use_rela = TRUE;
8154 			use_rela_initialised = TRUE;
8155 		      }
8156 		  }
8157 	      }
8158 	    else if ((o->size % bed->s->sizeof_rel) == 0)
8159 	      {
8160 		/* Section size is only divisible by rel.  */
8161 		if (use_rela_initialised && (use_rela == TRUE))
8162 		  {
8163 		    _bfd_error_handler
8164 		      (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8165 		    bfd_set_error (bfd_error_invalid_operation);
8166 		    return 0;
8167 		  }
8168 		else
8169 		  {
8170 		    use_rela = FALSE;
8171 		    use_rela_initialised = TRUE;
8172 		  }
8173 	      }
8174 	    else
8175 	      {
8176 		/* The section size is not divisible by either - something is wrong.  */
8177 		_bfd_error_handler
8178 		  (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8179 		bfd_set_error (bfd_error_invalid_operation);
8180 		return 0;
8181 	      }
8182 	  }
8183 
8184       if (! use_rela_initialised)
8185 	/* Make a guess.  */
8186 	use_rela = TRUE;
8187     }
8188   else if (rela_dyn != NULL && rela_dyn->size > 0)
8189     use_rela = TRUE;
8190   else if (rel_dyn != NULL && rel_dyn->size > 0)
8191     use_rela = FALSE;
8192   else
8193     return 0;
8194 
8195   if (use_rela)
8196     {
8197       dynamic_relocs = rela_dyn;
8198       ext_size = bed->s->sizeof_rela;
8199       swap_in = bed->s->swap_reloca_in;
8200       swap_out = bed->s->swap_reloca_out;
8201     }
8202   else
8203     {
8204       dynamic_relocs = rel_dyn;
8205       ext_size = bed->s->sizeof_rel;
8206       swap_in = bed->s->swap_reloc_in;
8207       swap_out = bed->s->swap_reloc_out;
8208     }
8209 
8210   size = 0;
8211   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8212     if (lo->type == bfd_indirect_link_order)
8213       size += lo->u.indirect.section->size;
8214 
8215   if (size != dynamic_relocs->size)
8216     return 0;
8217 
8218   sort_elt = (sizeof (struct elf_link_sort_rela)
8219 	      + (i2e - 1) * sizeof (Elf_Internal_Rela));
8220 
8221   count = dynamic_relocs->size / ext_size;
8222   if (count == 0)
8223     return 0;
8224   sort = (bfd_byte *) bfd_zmalloc (sort_elt * count);
8225 
8226   if (sort == NULL)
8227     {
8228       (*info->callbacks->warning)
8229 	(info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
8230       return 0;
8231     }
8232 
8233   if (bed->s->arch_size == 32)
8234     r_sym_mask = ~(bfd_vma) 0xff;
8235   else
8236     r_sym_mask = ~(bfd_vma) 0xffffffff;
8237 
8238   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8239     if (lo->type == bfd_indirect_link_order)
8240       {
8241 	bfd_byte *erel, *erelend;
8242 	asection *o = lo->u.indirect.section;
8243 
8244 	if (o->contents == NULL && o->size != 0)
8245 	  {
8246 	    /* This is a reloc section that is being handled as a normal
8247 	       section.  See bfd_section_from_shdr.  We can't combine
8248 	       relocs in this case.  */
8249 	    free (sort);
8250 	    return 0;
8251 	  }
8252 	erel = o->contents;
8253 	erelend = o->contents + o->size;
8254 	/* FIXME: octets_per_byte.  */
8255 	p = sort + o->output_offset / ext_size * sort_elt;
8256 
8257 	while (erel < erelend)
8258 	  {
8259 	    struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8260 
8261 	    (*swap_in) (abfd, erel, s->rela);
8262 	    s->type = (*bed->elf_backend_reloc_type_class) (s->rela);
8263 	    s->u.sym_mask = r_sym_mask;
8264 	    p += sort_elt;
8265 	    erel += ext_size;
8266 	  }
8267       }
8268 
8269   qsort (sort, count, sort_elt, elf_link_sort_cmp1);
8270 
8271   for (i = 0, p = sort; i < count; i++, p += sort_elt)
8272     {
8273       struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8274       if (s->type != reloc_class_relative)
8275 	break;
8276     }
8277   ret = i;
8278   s_non_relative = p;
8279 
8280   sq = (struct elf_link_sort_rela *) s_non_relative;
8281   for (; i < count; i++, p += sort_elt)
8282     {
8283       struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
8284       if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
8285 	sq = sp;
8286       sp->u.offset = sq->rela->r_offset;
8287     }
8288 
8289   qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
8290 
8291   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8292     if (lo->type == bfd_indirect_link_order)
8293       {
8294 	bfd_byte *erel, *erelend;
8295 	asection *o = lo->u.indirect.section;
8296 
8297 	erel = o->contents;
8298 	erelend = o->contents + o->size;
8299 	/* FIXME: octets_per_byte.  */
8300 	p = sort + o->output_offset / ext_size * sort_elt;
8301 	while (erel < erelend)
8302 	  {
8303 	    struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8304 	    (*swap_out) (abfd, s->rela, erel);
8305 	    p += sort_elt;
8306 	    erel += ext_size;
8307 	  }
8308       }
8309 
8310   free (sort);
8311   *psec = dynamic_relocs;
8312   return ret;
8313 }
8314 
8315 /* Flush the output symbols to the file.  */
8316 
8317 static bfd_boolean
8318 elf_link_flush_output_syms (struct elf_final_link_info *finfo,
8319 			    const struct elf_backend_data *bed)
8320 {
8321   if (finfo->symbuf_count > 0)
8322     {
8323       Elf_Internal_Shdr *hdr;
8324       file_ptr pos;
8325       bfd_size_type amt;
8326 
8327       hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr;
8328       pos = hdr->sh_offset + hdr->sh_size;
8329       amt = finfo->symbuf_count * bed->s->sizeof_sym;
8330       if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0
8331 	  || bfd_bwrite (finfo->symbuf, amt, finfo->output_bfd) != amt)
8332 	return FALSE;
8333 
8334       hdr->sh_size += amt;
8335       finfo->symbuf_count = 0;
8336     }
8337 
8338   return TRUE;
8339 }
8340 
8341 /* Add a symbol to the output symbol table.  */
8342 
8343 static int
8344 elf_link_output_sym (struct elf_final_link_info *finfo,
8345 		     const char *name,
8346 		     Elf_Internal_Sym *elfsym,
8347 		     asection *input_sec,
8348 		     struct elf_link_hash_entry *h)
8349 {
8350   bfd_byte *dest;
8351   Elf_External_Sym_Shndx *destshndx;
8352   int (*output_symbol_hook)
8353     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
8354      struct elf_link_hash_entry *);
8355   const struct elf_backend_data *bed;
8356 
8357   bed = get_elf_backend_data (finfo->output_bfd);
8358   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
8359   if (output_symbol_hook != NULL)
8360     {
8361       int ret = (*output_symbol_hook) (finfo->info, name, elfsym, input_sec, h);
8362       if (ret != 1)
8363 	return ret;
8364     }
8365 
8366   if (name == NULL || *name == '\0')
8367     elfsym->st_name = 0;
8368   else if (input_sec->flags & SEC_EXCLUDE)
8369     elfsym->st_name = 0;
8370   else
8371     {
8372       elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
8373 							    name, TRUE, FALSE);
8374       if (elfsym->st_name == (unsigned long) -1)
8375 	return 0;
8376     }
8377 
8378   if (finfo->symbuf_count >= finfo->symbuf_size)
8379     {
8380       if (! elf_link_flush_output_syms (finfo, bed))
8381 	return 0;
8382     }
8383 
8384   dest = finfo->symbuf + finfo->symbuf_count * bed->s->sizeof_sym;
8385   destshndx = finfo->symshndxbuf;
8386   if (destshndx != NULL)
8387     {
8388       if (bfd_get_symcount (finfo->output_bfd) >= finfo->shndxbuf_size)
8389 	{
8390 	  bfd_size_type amt;
8391 
8392 	  amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
8393 	  destshndx = (Elf_External_Sym_Shndx *) bfd_realloc (destshndx,
8394                                                               amt * 2);
8395 	  if (destshndx == NULL)
8396 	    return 0;
8397 	  finfo->symshndxbuf = destshndx;
8398 	  memset ((char *) destshndx + amt, 0, amt);
8399 	  finfo->shndxbuf_size *= 2;
8400 	}
8401       destshndx += bfd_get_symcount (finfo->output_bfd);
8402     }
8403 
8404   bed->s->swap_symbol_out (finfo->output_bfd, elfsym, dest, destshndx);
8405   finfo->symbuf_count += 1;
8406   bfd_get_symcount (finfo->output_bfd) += 1;
8407 
8408   return 1;
8409 }
8410 
8411 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
8412 
8413 static bfd_boolean
8414 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
8415 {
8416   if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
8417       && sym->st_shndx < SHN_LORESERVE)
8418     {
8419       /* The gABI doesn't support dynamic symbols in output sections
8420 	 beyond 64k.  */
8421       (*_bfd_error_handler)
8422 	(_("%B: Too many sections: %d (>= %d)"),
8423 	 abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
8424       bfd_set_error (bfd_error_nonrepresentable_section);
8425       return FALSE;
8426     }
8427   return TRUE;
8428 }
8429 
8430 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
8431    allowing an unsatisfied unversioned symbol in the DSO to match a
8432    versioned symbol that would normally require an explicit version.
8433    We also handle the case that a DSO references a hidden symbol
8434    which may be satisfied by a versioned symbol in another DSO.  */
8435 
8436 static bfd_boolean
8437 elf_link_check_versioned_symbol (struct bfd_link_info *info,
8438 				 const struct elf_backend_data *bed,
8439 				 struct elf_link_hash_entry *h)
8440 {
8441   bfd *abfd;
8442   struct elf_link_loaded_list *loaded;
8443 
8444   if (!is_elf_hash_table (info->hash))
8445     return FALSE;
8446 
8447   switch (h->root.type)
8448     {
8449     default:
8450       abfd = NULL;
8451       break;
8452 
8453     case bfd_link_hash_undefined:
8454     case bfd_link_hash_undefweak:
8455       abfd = h->root.u.undef.abfd;
8456       if ((abfd->flags & DYNAMIC) == 0
8457 	  || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
8458 	return FALSE;
8459       break;
8460 
8461     case bfd_link_hash_defined:
8462     case bfd_link_hash_defweak:
8463       abfd = h->root.u.def.section->owner;
8464       break;
8465 
8466     case bfd_link_hash_common:
8467       abfd = h->root.u.c.p->section->owner;
8468       break;
8469     }
8470   BFD_ASSERT (abfd != NULL);
8471 
8472   for (loaded = elf_hash_table (info)->loaded;
8473        loaded != NULL;
8474        loaded = loaded->next)
8475     {
8476       bfd *input;
8477       Elf_Internal_Shdr *hdr;
8478       bfd_size_type symcount;
8479       bfd_size_type extsymcount;
8480       bfd_size_type extsymoff;
8481       Elf_Internal_Shdr *versymhdr;
8482       Elf_Internal_Sym *isym;
8483       Elf_Internal_Sym *isymend;
8484       Elf_Internal_Sym *isymbuf;
8485       Elf_External_Versym *ever;
8486       Elf_External_Versym *extversym;
8487 
8488       input = loaded->abfd;
8489 
8490       /* We check each DSO for a possible hidden versioned definition.  */
8491       if (input == abfd
8492 	  || (input->flags & DYNAMIC) == 0
8493 	  || elf_dynversym (input) == 0)
8494 	continue;
8495 
8496       hdr = &elf_tdata (input)->dynsymtab_hdr;
8497 
8498       symcount = hdr->sh_size / bed->s->sizeof_sym;
8499       if (elf_bad_symtab (input))
8500 	{
8501 	  extsymcount = symcount;
8502 	  extsymoff = 0;
8503 	}
8504       else
8505 	{
8506 	  extsymcount = symcount - hdr->sh_info;
8507 	  extsymoff = hdr->sh_info;
8508 	}
8509 
8510       if (extsymcount == 0)
8511 	continue;
8512 
8513       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
8514 				      NULL, NULL, NULL);
8515       if (isymbuf == NULL)
8516 	return FALSE;
8517 
8518       /* Read in any version definitions.  */
8519       versymhdr = &elf_tdata (input)->dynversym_hdr;
8520       extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
8521       if (extversym == NULL)
8522 	goto error_ret;
8523 
8524       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
8525 	  || (bfd_bread (extversym, versymhdr->sh_size, input)
8526 	      != versymhdr->sh_size))
8527 	{
8528 	  free (extversym);
8529 	error_ret:
8530 	  free (isymbuf);
8531 	  return FALSE;
8532 	}
8533 
8534       ever = extversym + extsymoff;
8535       isymend = isymbuf + extsymcount;
8536       for (isym = isymbuf; isym < isymend; isym++, ever++)
8537 	{
8538 	  const char *name;
8539 	  Elf_Internal_Versym iver;
8540 	  unsigned short version_index;
8541 
8542 	  if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
8543 	      || isym->st_shndx == SHN_UNDEF)
8544 	    continue;
8545 
8546 	  name = bfd_elf_string_from_elf_section (input,
8547 						  hdr->sh_link,
8548 						  isym->st_name);
8549 	  if (strcmp (name, h->root.root.string) != 0)
8550 	    continue;
8551 
8552 	  _bfd_elf_swap_versym_in (input, ever, &iver);
8553 
8554 	  if ((iver.vs_vers & VERSYM_HIDDEN) == 0
8555 	      && !(h->def_regular
8556 		   && h->forced_local))
8557 	    {
8558 	      /* If we have a non-hidden versioned sym, then it should
8559 		 have provided a definition for the undefined sym unless
8560 		 it is defined in a non-shared object and forced local.
8561 	       */
8562 	      abort ();
8563 	    }
8564 
8565 	  version_index = iver.vs_vers & VERSYM_VERSION;
8566 	  if (version_index == 1 || version_index == 2)
8567 	    {
8568 	      /* This is the base or first version.  We can use it.  */
8569 	      free (extversym);
8570 	      free (isymbuf);
8571 	      return TRUE;
8572 	    }
8573 	}
8574 
8575       free (extversym);
8576       free (isymbuf);
8577     }
8578 
8579   return FALSE;
8580 }
8581 
8582 /* Add an external symbol to the symbol table.  This is called from
8583    the hash table traversal routine.  When generating a shared object,
8584    we go through the symbol table twice.  The first time we output
8585    anything that might have been forced to local scope in a version
8586    script.  The second time we output the symbols that are still
8587    global symbols.  */
8588 
8589 static bfd_boolean
8590 elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
8591 {
8592   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
8593   struct elf_final_link_info *finfo = eoinfo->finfo;
8594   bfd_boolean strip;
8595   Elf_Internal_Sym sym;
8596   asection *input_sec;
8597   const struct elf_backend_data *bed;
8598   long indx;
8599   int ret;
8600 
8601   if (h->root.type == bfd_link_hash_warning)
8602     {
8603       h = (struct elf_link_hash_entry *) h->root.u.i.link;
8604       if (h->root.type == bfd_link_hash_new)
8605 	return TRUE;
8606     }
8607 
8608   /* Decide whether to output this symbol in this pass.  */
8609   if (eoinfo->localsyms)
8610     {
8611       if (!h->forced_local)
8612 	return TRUE;
8613     }
8614   else
8615     {
8616       if (h->forced_local)
8617 	return TRUE;
8618     }
8619 
8620   bed = get_elf_backend_data (finfo->output_bfd);
8621 
8622   if (h->root.type == bfd_link_hash_undefined)
8623     {
8624       /* If we have an undefined symbol reference here then it must have
8625 	 come from a shared library that is being linked in.  (Undefined
8626 	 references in regular files have already been handled unless
8627 	 they are in unreferenced sections which are removed by garbage
8628 	 collection).  */
8629       bfd_boolean ignore_undef = FALSE;
8630 
8631       /* Some symbols may be special in that the fact that they're
8632 	 undefined can be safely ignored - let backend determine that.  */
8633       if (bed->elf_backend_ignore_undef_symbol)
8634 	ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
8635 
8636       /* If we are reporting errors for this situation then do so now.  */
8637       if (!ignore_undef
8638 	  && h->ref_dynamic
8639 	  && (!h->ref_regular || finfo->info->gc_sections)
8640 	  && ! elf_link_check_versioned_symbol (finfo->info, bed, h)
8641 	  && finfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
8642 	{
8643 	  if (! (finfo->info->callbacks->undefined_symbol
8644 		 (finfo->info, h->root.root.string,
8645 		  h->ref_regular ? NULL : h->root.u.undef.abfd,
8646 		  NULL, 0, finfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)))
8647 	    {
8648 	      bfd_set_error (bfd_error_bad_value);
8649 	      eoinfo->failed = TRUE;
8650 	      return FALSE;
8651 	    }
8652 	}
8653     }
8654 
8655   /* We should also warn if a forced local symbol is referenced from
8656      shared libraries.  */
8657   if (! finfo->info->relocatable
8658       && (! finfo->info->shared)
8659       && h->forced_local
8660       && h->ref_dynamic
8661       && !h->dynamic_def
8662       && !h->dynamic_weak
8663       && ! elf_link_check_versioned_symbol (finfo->info, bed, h))
8664     {
8665       bfd *def_bfd;
8666       const char *msg;
8667 
8668       if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
8669 	msg = _("%B: internal symbol `%s' in %B is referenced by DSO");
8670       else if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
8671 	msg = _("%B: hidden symbol `%s' in %B is referenced by DSO");
8672       else
8673 	msg = _("%B: local symbol `%s' in %B is referenced by DSO");
8674       def_bfd = finfo->output_bfd;
8675       if (h->root.u.def.section != bfd_abs_section_ptr)
8676 	def_bfd = h->root.u.def.section->owner;
8677       (*_bfd_error_handler) (msg, finfo->output_bfd, def_bfd,
8678 			     h->root.root.string);
8679       bfd_set_error (bfd_error_bad_value);
8680       eoinfo->failed = TRUE;
8681       return FALSE;
8682     }
8683 
8684   /* We don't want to output symbols that have never been mentioned by
8685      a regular file, or that we have been told to strip.  However, if
8686      h->indx is set to -2, the symbol is used by a reloc and we must
8687      output it.  */
8688   if (h->indx == -2)
8689     strip = FALSE;
8690   else if ((h->def_dynamic
8691 	    || h->ref_dynamic
8692 	    || h->root.type == bfd_link_hash_new)
8693 	   && !h->def_regular
8694 	   && !h->ref_regular)
8695     strip = TRUE;
8696   else if (finfo->info->strip == strip_all)
8697     strip = TRUE;
8698   else if (finfo->info->strip == strip_some
8699 	   && bfd_hash_lookup (finfo->info->keep_hash,
8700 			       h->root.root.string, FALSE, FALSE) == NULL)
8701     strip = TRUE;
8702   else if (finfo->info->strip_discarded
8703 	   && (h->root.type == bfd_link_hash_defined
8704 	       || h->root.type == bfd_link_hash_defweak)
8705 	   && elf_discarded_section (h->root.u.def.section))
8706     strip = TRUE;
8707   else
8708     strip = FALSE;
8709 
8710   /* If we're stripping it, and it's not a dynamic symbol, there's
8711      nothing else to do unless it is a forced local symbol or a
8712      STT_GNU_IFUNC symbol.  */
8713   if (strip
8714       && h->dynindx == -1
8715       && h->type != STT_GNU_IFUNC
8716       && !h->forced_local)
8717     return TRUE;
8718 
8719   sym.st_value = 0;
8720   sym.st_size = h->size;
8721   sym.st_other = h->other;
8722   if (h->forced_local)
8723     {
8724       sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
8725       /* Turn off visibility on local symbol.  */
8726       sym.st_other &= ~ELF_ST_VISIBILITY (-1);
8727     }
8728   else if (h->unique_global)
8729     sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, h->type);
8730   else if (h->root.type == bfd_link_hash_undefweak
8731 	   || h->root.type == bfd_link_hash_defweak)
8732     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
8733   else
8734     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
8735   sym.st_target_internal = h->target_internal;
8736 
8737   switch (h->root.type)
8738     {
8739     default:
8740     case bfd_link_hash_new:
8741     case bfd_link_hash_warning:
8742       abort ();
8743       return FALSE;
8744 
8745     case bfd_link_hash_undefined:
8746     case bfd_link_hash_undefweak:
8747       input_sec = bfd_und_section_ptr;
8748       sym.st_shndx = SHN_UNDEF;
8749       break;
8750 
8751     case bfd_link_hash_defined:
8752     case bfd_link_hash_defweak:
8753       {
8754 	input_sec = h->root.u.def.section;
8755 	if (input_sec->output_section != NULL)
8756 	  {
8757 	    sym.st_shndx =
8758 	      _bfd_elf_section_from_bfd_section (finfo->output_bfd,
8759 						 input_sec->output_section);
8760 	    if (sym.st_shndx == SHN_BAD)
8761 	      {
8762 		(*_bfd_error_handler)
8763 		  (_("%B: could not find output section %A for input section %A"),
8764 		   finfo->output_bfd, input_sec->output_section, input_sec);
8765 		bfd_set_error (bfd_error_nonrepresentable_section);
8766 		eoinfo->failed = TRUE;
8767 		return FALSE;
8768 	      }
8769 
8770 	    /* ELF symbols in relocatable files are section relative,
8771 	       but in nonrelocatable files they are virtual
8772 	       addresses.  */
8773 	    sym.st_value = h->root.u.def.value + input_sec->output_offset;
8774 	    if (! finfo->info->relocatable)
8775 	      {
8776 		sym.st_value += input_sec->output_section->vma;
8777 		if (h->type == STT_TLS)
8778 		  {
8779 		    asection *tls_sec = elf_hash_table (finfo->info)->tls_sec;
8780 		    if (tls_sec != NULL)
8781 		      sym.st_value -= tls_sec->vma;
8782 		    else
8783 		      {
8784 			/* The TLS section may have been garbage collected.  */
8785 			BFD_ASSERT (finfo->info->gc_sections
8786 				    && !input_sec->gc_mark);
8787 		      }
8788 		  }
8789 	      }
8790 	  }
8791 	else
8792 	  {
8793 	    BFD_ASSERT (input_sec->owner == NULL
8794 			|| (input_sec->owner->flags & DYNAMIC) != 0);
8795 	    sym.st_shndx = SHN_UNDEF;
8796 	    input_sec = bfd_und_section_ptr;
8797 	  }
8798       }
8799       break;
8800 
8801     case bfd_link_hash_common:
8802       input_sec = h->root.u.c.p->section;
8803       sym.st_shndx = bed->common_section_index (input_sec);
8804       sym.st_value = 1 << h->root.u.c.p->alignment_power;
8805       break;
8806 
8807     case bfd_link_hash_indirect:
8808       /* These symbols are created by symbol versioning.  They point
8809 	 to the decorated version of the name.  For example, if the
8810 	 symbol foo@@GNU_1.2 is the default, which should be used when
8811 	 foo is used with no version, then we add an indirect symbol
8812 	 foo which points to foo@@GNU_1.2.  We ignore these symbols,
8813 	 since the indirected symbol is already in the hash table.  */
8814       return TRUE;
8815     }
8816 
8817   /* Give the processor backend a chance to tweak the symbol value,
8818      and also to finish up anything that needs to be done for this
8819      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
8820      forced local syms when non-shared is due to a historical quirk.
8821      STT_GNU_IFUNC symbol must go through PLT.  */
8822   if ((h->type == STT_GNU_IFUNC
8823        && h->def_regular
8824        && !finfo->info->relocatable)
8825       || ((h->dynindx != -1
8826 	   || h->forced_local)
8827 	  && ((finfo->info->shared
8828 	       && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
8829 		   || h->root.type != bfd_link_hash_undefweak))
8830 	      || !h->forced_local)
8831 	  && elf_hash_table (finfo->info)->dynamic_sections_created))
8832     {
8833       if (! ((*bed->elf_backend_finish_dynamic_symbol)
8834 	     (finfo->output_bfd, finfo->info, h, &sym)))
8835 	{
8836 	  eoinfo->failed = TRUE;
8837 	  return FALSE;
8838 	}
8839     }
8840 
8841   /* If we are marking the symbol as undefined, and there are no
8842      non-weak references to this symbol from a regular object, then
8843      mark the symbol as weak undefined; if there are non-weak
8844      references, mark the symbol as strong.  We can't do this earlier,
8845      because it might not be marked as undefined until the
8846      finish_dynamic_symbol routine gets through with it.  */
8847   if (sym.st_shndx == SHN_UNDEF
8848       && h->ref_regular
8849       && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
8850 	  || ELF_ST_BIND (sym.st_info) == STB_WEAK))
8851     {
8852       int bindtype;
8853       unsigned int type = ELF_ST_TYPE (sym.st_info);
8854 
8855       /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */
8856       if (type == STT_GNU_IFUNC)
8857 	type = STT_FUNC;
8858 
8859       if (h->ref_regular_nonweak)
8860 	bindtype = STB_GLOBAL;
8861       else
8862 	bindtype = STB_WEAK;
8863       sym.st_info = ELF_ST_INFO (bindtype, type);
8864     }
8865 
8866   /* If this is a symbol defined in a dynamic library, don't use the
8867      symbol size from the dynamic library.  Relinking an executable
8868      against a new library may introduce gratuitous changes in the
8869      executable's symbols if we keep the size.  */
8870   if (sym.st_shndx == SHN_UNDEF
8871       && !h->def_regular
8872       && h->def_dynamic)
8873     sym.st_size = 0;
8874 
8875   /* If a non-weak symbol with non-default visibility is not defined
8876      locally, it is a fatal error.  */
8877   if (! finfo->info->relocatable
8878       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
8879       && ELF_ST_BIND (sym.st_info) != STB_WEAK
8880       && h->root.type == bfd_link_hash_undefined
8881       && !h->def_regular)
8882     {
8883       const char *msg;
8884 
8885       if (ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED)
8886 	msg = _("%B: protected symbol `%s' isn't defined");
8887       else if (ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL)
8888 	msg = _("%B: internal symbol `%s' isn't defined");
8889       else
8890 	msg = _("%B: hidden symbol `%s' isn't defined");
8891       (*_bfd_error_handler) (msg, finfo->output_bfd, h->root.root.string);
8892       bfd_set_error (bfd_error_bad_value);
8893       eoinfo->failed = TRUE;
8894       return FALSE;
8895     }
8896 
8897   /* If this symbol should be put in the .dynsym section, then put it
8898      there now.  We already know the symbol index.  We also fill in
8899      the entry in the .hash section.  */
8900   if (h->dynindx != -1
8901       && elf_hash_table (finfo->info)->dynamic_sections_created)
8902     {
8903       bfd_byte *esym;
8904 
8905       sym.st_name = h->dynstr_index;
8906       esym = finfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym;
8907       if (! check_dynsym (finfo->output_bfd, &sym))
8908 	{
8909 	  eoinfo->failed = TRUE;
8910 	  return FALSE;
8911 	}
8912       bed->s->swap_symbol_out (finfo->output_bfd, &sym, esym, 0);
8913 
8914       if (finfo->hash_sec != NULL)
8915 	{
8916 	  size_t hash_entry_size;
8917 	  bfd_byte *bucketpos;
8918 	  bfd_vma chain;
8919 	  size_t bucketcount;
8920 	  size_t bucket;
8921 
8922 	  bucketcount = elf_hash_table (finfo->info)->bucketcount;
8923 	  bucket = h->u.elf_hash_value % bucketcount;
8924 
8925 	  hash_entry_size
8926 	    = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
8927 	  bucketpos = ((bfd_byte *) finfo->hash_sec->contents
8928 		       + (bucket + 2) * hash_entry_size);
8929 	  chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
8930 	  bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
8931 	  bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
8932 		   ((bfd_byte *) finfo->hash_sec->contents
8933 		    + (bucketcount + 2 + h->dynindx) * hash_entry_size));
8934 	}
8935 
8936       if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
8937 	{
8938 	  Elf_Internal_Versym iversym;
8939 	  Elf_External_Versym *eversym;
8940 
8941 	  if (!h->def_regular)
8942 	    {
8943 	      if (h->verinfo.verdef == NULL)
8944 		iversym.vs_vers = 0;
8945 	      else
8946 		iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
8947 	    }
8948 	  else
8949 	    {
8950 	      if (h->verinfo.vertree == NULL)
8951 		iversym.vs_vers = 1;
8952 	      else
8953 		iversym.vs_vers = h->verinfo.vertree->vernum + 1;
8954 	      if (finfo->info->create_default_symver)
8955 		iversym.vs_vers++;
8956 	    }
8957 
8958 	  if (h->hidden)
8959 	    iversym.vs_vers |= VERSYM_HIDDEN;
8960 
8961 	  eversym = (Elf_External_Versym *) finfo->symver_sec->contents;
8962 	  eversym += h->dynindx;
8963 	  _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym);
8964 	}
8965     }
8966 
8967   /* If we're stripping it, then it was just a dynamic symbol, and
8968      there's nothing else to do.  */
8969   if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
8970     return TRUE;
8971 
8972   indx = bfd_get_symcount (finfo->output_bfd);
8973   ret = elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec, h);
8974   if (ret == 0)
8975     {
8976       eoinfo->failed = TRUE;
8977       return FALSE;
8978     }
8979   else if (ret == 1)
8980     h->indx = indx;
8981   else if (h->indx == -2)
8982     abort();
8983 
8984   return TRUE;
8985 }
8986 
8987 /* Return TRUE if special handling is done for relocs in SEC against
8988    symbols defined in discarded sections.  */
8989 
8990 static bfd_boolean
8991 elf_section_ignore_discarded_relocs (asection *sec)
8992 {
8993   const struct elf_backend_data *bed;
8994 
8995   switch (sec->sec_info_type)
8996     {
8997     case ELF_INFO_TYPE_STABS:
8998     case ELF_INFO_TYPE_EH_FRAME:
8999       return TRUE;
9000     default:
9001       break;
9002     }
9003 
9004   bed = get_elf_backend_data (sec->owner);
9005   if (bed->elf_backend_ignore_discarded_relocs != NULL
9006       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
9007     return TRUE;
9008 
9009   return FALSE;
9010 }
9011 
9012 /* Return a mask saying how ld should treat relocations in SEC against
9013    symbols defined in discarded sections.  If this function returns
9014    COMPLAIN set, ld will issue a warning message.  If this function
9015    returns PRETEND set, and the discarded section was link-once and the
9016    same size as the kept link-once section, ld will pretend that the
9017    symbol was actually defined in the kept section.  Otherwise ld will
9018    zero the reloc (at least that is the intent, but some cooperation by
9019    the target dependent code is needed, particularly for REL targets).  */
9020 
9021 unsigned int
9022 _bfd_elf_default_action_discarded (asection *sec)
9023 {
9024   if (sec->flags & SEC_DEBUGGING)
9025     return PRETEND;
9026 
9027   if (strcmp (".eh_frame", sec->name) == 0)
9028     return 0;
9029 
9030   if (strcmp (".gcc_except_table", sec->name) == 0)
9031     return 0;
9032 
9033   return COMPLAIN | PRETEND;
9034 }
9035 
9036 /* Find a match between a section and a member of a section group.  */
9037 
9038 static asection *
9039 match_group_member (asection *sec, asection *group,
9040 		    struct bfd_link_info *info)
9041 {
9042   asection *first = elf_next_in_group (group);
9043   asection *s = first;
9044 
9045   while (s != NULL)
9046     {
9047       if (bfd_elf_match_symbols_in_sections (s, sec, info))
9048 	return s;
9049 
9050       s = elf_next_in_group (s);
9051       if (s == first)
9052 	break;
9053     }
9054 
9055   return NULL;
9056 }
9057 
9058 /* Check if the kept section of a discarded section SEC can be used
9059    to replace it.  Return the replacement if it is OK.  Otherwise return
9060    NULL.  */
9061 
9062 asection *
9063 _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
9064 {
9065   asection *kept;
9066 
9067   kept = sec->kept_section;
9068   if (kept != NULL)
9069     {
9070       if ((kept->flags & SEC_GROUP) != 0)
9071 	kept = match_group_member (sec, kept, info);
9072       if (kept != NULL
9073 	  && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
9074 	      != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
9075 	kept = NULL;
9076       sec->kept_section = kept;
9077     }
9078   return kept;
9079 }
9080 
9081 /* Link an input file into the linker output file.  This function
9082    handles all the sections and relocations of the input file at once.
9083    This is so that we only have to read the local symbols once, and
9084    don't have to keep them in memory.  */
9085 
9086 static bfd_boolean
9087 elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
9088 {
9089   int (*relocate_section)
9090     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
9091      Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
9092   bfd *output_bfd;
9093   Elf_Internal_Shdr *symtab_hdr;
9094   size_t locsymcount;
9095   size_t extsymoff;
9096   Elf_Internal_Sym *isymbuf;
9097   Elf_Internal_Sym *isym;
9098   Elf_Internal_Sym *isymend;
9099   long *pindex;
9100   asection **ppsection;
9101   asection *o;
9102   const struct elf_backend_data *bed;
9103   struct elf_link_hash_entry **sym_hashes;
9104 
9105   output_bfd = finfo->output_bfd;
9106   bed = get_elf_backend_data (output_bfd);
9107   relocate_section = bed->elf_backend_relocate_section;
9108 
9109   /* If this is a dynamic object, we don't want to do anything here:
9110      we don't want the local symbols, and we don't want the section
9111      contents.  */
9112   if ((input_bfd->flags & DYNAMIC) != 0)
9113     return TRUE;
9114 
9115   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9116   if (elf_bad_symtab (input_bfd))
9117     {
9118       locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9119       extsymoff = 0;
9120     }
9121   else
9122     {
9123       locsymcount = symtab_hdr->sh_info;
9124       extsymoff = symtab_hdr->sh_info;
9125     }
9126 
9127   /* Read the local symbols.  */
9128   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
9129   if (isymbuf == NULL && locsymcount != 0)
9130     {
9131       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
9132 				      finfo->internal_syms,
9133 				      finfo->external_syms,
9134 				      finfo->locsym_shndx);
9135       if (isymbuf == NULL)
9136 	return FALSE;
9137     }
9138 
9139   /* Find local symbol sections and adjust values of symbols in
9140      SEC_MERGE sections.  Write out those local symbols we know are
9141      going into the output file.  */
9142   isymend = isymbuf + locsymcount;
9143   for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections;
9144        isym < isymend;
9145        isym++, pindex++, ppsection++)
9146     {
9147       asection *isec;
9148       const char *name;
9149       Elf_Internal_Sym osym;
9150       long indx;
9151       int ret;
9152 
9153       *pindex = -1;
9154 
9155       if (elf_bad_symtab (input_bfd))
9156 	{
9157 	  if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
9158 	    {
9159 	      *ppsection = NULL;
9160 	      continue;
9161 	    }
9162 	}
9163 
9164       if (isym->st_shndx == SHN_UNDEF)
9165 	isec = bfd_und_section_ptr;
9166       else if (isym->st_shndx == SHN_ABS)
9167 	isec = bfd_abs_section_ptr;
9168       else if (isym->st_shndx == SHN_COMMON)
9169 	isec = bfd_com_section_ptr;
9170       else
9171 	{
9172 	  isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
9173 	  if (isec == NULL)
9174 	    {
9175 	      /* Don't attempt to output symbols with st_shnx in the
9176 		 reserved range other than SHN_ABS and SHN_COMMON.  */
9177 	      *ppsection = NULL;
9178 	      continue;
9179 	    }
9180 	  else if (isec->sec_info_type == ELF_INFO_TYPE_MERGE
9181 		   && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
9182 	    isym->st_value =
9183 	      _bfd_merged_section_offset (output_bfd, &isec,
9184 					  elf_section_data (isec)->sec_info,
9185 					  isym->st_value);
9186 	}
9187 
9188       *ppsection = isec;
9189 
9190       /* Don't output the first, undefined, symbol.  */
9191       if (ppsection == finfo->sections)
9192 	continue;
9193 
9194       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
9195 	{
9196 	  /* We never output section symbols.  Instead, we use the
9197 	     section symbol of the corresponding section in the output
9198 	     file.  */
9199 	  continue;
9200 	}
9201 
9202       /* If we are stripping all symbols, we don't want to output this
9203 	 one.  */
9204       if (finfo->info->strip == strip_all)
9205 	continue;
9206 
9207       /* If we are discarding all local symbols, we don't want to
9208 	 output this one.  If we are generating a relocatable output
9209 	 file, then some of the local symbols may be required by
9210 	 relocs; we output them below as we discover that they are
9211 	 needed.  */
9212       if (finfo->info->discard == discard_all)
9213 	continue;
9214 
9215       /* If this symbol is defined in a section which we are
9216 	 discarding, we don't need to keep it.  */
9217       if (isym->st_shndx != SHN_UNDEF
9218 	  && isym->st_shndx < SHN_LORESERVE
9219 	  && bfd_section_removed_from_list (output_bfd,
9220 					    isec->output_section))
9221 	continue;
9222 
9223       /* Get the name of the symbol.  */
9224       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
9225 					      isym->st_name);
9226       if (name == NULL)
9227 	return FALSE;
9228 
9229       /* See if we are discarding symbols with this name.  */
9230       if ((finfo->info->strip == strip_some
9231 	   && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
9232 	       == NULL))
9233 	  || (((finfo->info->discard == discard_sec_merge
9234 		&& (isec->flags & SEC_MERGE) && ! finfo->info->relocatable)
9235 	       || finfo->info->discard == discard_l)
9236 	      && bfd_is_local_label_name (input_bfd, name)))
9237 	continue;
9238 
9239       osym = *isym;
9240 
9241       /* Adjust the section index for the output file.  */
9242       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9243 							 isec->output_section);
9244       if (osym.st_shndx == SHN_BAD)
9245 	return FALSE;
9246 
9247       /* ELF symbols in relocatable files are section relative, but
9248 	 in executable files they are virtual addresses.  Note that
9249 	 this code assumes that all ELF sections have an associated
9250 	 BFD section with a reasonable value for output_offset; below
9251 	 we assume that they also have a reasonable value for
9252 	 output_section.  Any special sections must be set up to meet
9253 	 these requirements.  */
9254       osym.st_value += isec->output_offset;
9255       if (! finfo->info->relocatable)
9256 	{
9257 	  osym.st_value += isec->output_section->vma;
9258 	  if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
9259 	    {
9260 	      /* STT_TLS symbols are relative to PT_TLS segment base.  */
9261 	      BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL);
9262 	      osym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma;
9263 	    }
9264 	}
9265 
9266       indx = bfd_get_symcount (output_bfd);
9267       ret = elf_link_output_sym (finfo, name, &osym, isec, NULL);
9268       if (ret == 0)
9269 	return FALSE;
9270       else if (ret == 1)
9271 	*pindex = indx;
9272     }
9273 
9274   /* Relocate the contents of each section.  */
9275   sym_hashes = elf_sym_hashes (input_bfd);
9276   for (o = input_bfd->sections; o != NULL; o = o->next)
9277     {
9278       bfd_byte *contents;
9279 
9280       if (! o->linker_mark)
9281 	{
9282 	  /* This section was omitted from the link.  */
9283 	  continue;
9284 	}
9285 
9286       if (finfo->info->relocatable
9287 	  && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
9288 	{
9289 	  /* Deal with the group signature symbol.  */
9290 	  struct bfd_elf_section_data *sec_data = elf_section_data (o);
9291 	  unsigned long symndx = sec_data->this_hdr.sh_info;
9292 	  asection *osec = o->output_section;
9293 
9294 	  if (symndx >= locsymcount
9295 	      || (elf_bad_symtab (input_bfd)
9296 		  && finfo->sections[symndx] == NULL))
9297 	    {
9298 	      struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
9299 	      while (h->root.type == bfd_link_hash_indirect
9300 		     || h->root.type == bfd_link_hash_warning)
9301 		h = (struct elf_link_hash_entry *) h->root.u.i.link;
9302 	      /* Arrange for symbol to be output.  */
9303 	      h->indx = -2;
9304 	      elf_section_data (osec)->this_hdr.sh_info = -2;
9305 	    }
9306 	  else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
9307 	    {
9308 	      /* We'll use the output section target_index.  */
9309 	      asection *sec = finfo->sections[symndx]->output_section;
9310 	      elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
9311 	    }
9312 	  else
9313 	    {
9314 	      if (finfo->indices[symndx] == -1)
9315 		{
9316 		  /* Otherwise output the local symbol now.  */
9317 		  Elf_Internal_Sym sym = isymbuf[symndx];
9318 		  asection *sec = finfo->sections[symndx]->output_section;
9319 		  const char *name;
9320 		  long indx;
9321 		  int ret;
9322 
9323 		  name = bfd_elf_string_from_elf_section (input_bfd,
9324 							  symtab_hdr->sh_link,
9325 							  sym.st_name);
9326 		  if (name == NULL)
9327 		    return FALSE;
9328 
9329 		  sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9330 								    sec);
9331 		  if (sym.st_shndx == SHN_BAD)
9332 		    return FALSE;
9333 
9334 		  sym.st_value += o->output_offset;
9335 
9336 		  indx = bfd_get_symcount (output_bfd);
9337 		  ret = elf_link_output_sym (finfo, name, &sym, o, NULL);
9338 		  if (ret == 0)
9339 		    return FALSE;
9340 		  else if (ret == 1)
9341 		    finfo->indices[symndx] = indx;
9342 		  else
9343 		    abort ();
9344 		}
9345 	      elf_section_data (osec)->this_hdr.sh_info
9346 		= finfo->indices[symndx];
9347 	    }
9348 	}
9349 
9350       if ((o->flags & SEC_HAS_CONTENTS) == 0
9351 	  || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
9352 	continue;
9353 
9354       if ((o->flags & SEC_LINKER_CREATED) != 0)
9355 	{
9356 	  /* Section was created by _bfd_elf_link_create_dynamic_sections
9357 	     or somesuch.  */
9358 	  continue;
9359 	}
9360 
9361       /* Get the contents of the section.  They have been cached by a
9362 	 relaxation routine.  Note that o is a section in an input
9363 	 file, so the contents field will not have been set by any of
9364 	 the routines which work on output files.  */
9365       if (elf_section_data (o)->this_hdr.contents != NULL)
9366 	contents = elf_section_data (o)->this_hdr.contents;
9367       else
9368 	{
9369 	  contents = finfo->contents;
9370 	  if (! bfd_get_full_section_contents (input_bfd, o, &contents))
9371 	    return FALSE;
9372 	}
9373 
9374       if ((o->flags & SEC_RELOC) != 0)
9375 	{
9376 	  Elf_Internal_Rela *internal_relocs;
9377 	  Elf_Internal_Rela *rel, *relend;
9378 	  bfd_vma r_type_mask;
9379 	  int r_sym_shift;
9380 	  int action_discarded;
9381 	  int ret;
9382 
9383 	  /* Get the swapped relocs.  */
9384 	  internal_relocs
9385 	    = _bfd_elf_link_read_relocs (input_bfd, o, finfo->external_relocs,
9386 					 finfo->internal_relocs, FALSE);
9387 	  if (internal_relocs == NULL
9388 	      && o->reloc_count > 0)
9389 	    return FALSE;
9390 
9391 	  if (bed->s->arch_size == 32)
9392 	    {
9393 	      r_type_mask = 0xff;
9394 	      r_sym_shift = 8;
9395 	    }
9396 	  else
9397 	    {
9398 	      r_type_mask = 0xffffffff;
9399 	      r_sym_shift = 32;
9400 	    }
9401 
9402 	  action_discarded = -1;
9403 	  if (!elf_section_ignore_discarded_relocs (o))
9404 	    action_discarded = (*bed->action_discarded) (o);
9405 
9406 	  /* Run through the relocs evaluating complex reloc symbols and
9407 	     looking for relocs against symbols from discarded sections
9408 	     or section symbols from removed link-once sections.
9409 	     Complain about relocs against discarded sections.  Zero
9410 	     relocs against removed link-once sections.  */
9411 
9412 	  rel = internal_relocs;
9413 	  relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
9414 	  for ( ; rel < relend; rel++)
9415 	    {
9416 	      unsigned long r_symndx = rel->r_info >> r_sym_shift;
9417 	      unsigned int s_type;
9418 	      asection **ps, *sec;
9419 	      struct elf_link_hash_entry *h = NULL;
9420 	      const char *sym_name;
9421 
9422 	      if (r_symndx == STN_UNDEF)
9423 		continue;
9424 
9425 	      if (r_symndx >= locsymcount
9426 		  || (elf_bad_symtab (input_bfd)
9427 		      && finfo->sections[r_symndx] == NULL))
9428 		{
9429 		  h = sym_hashes[r_symndx - extsymoff];
9430 
9431 		  /* Badly formatted input files can contain relocs that
9432 		     reference non-existant symbols.  Check here so that
9433 		     we do not seg fault.  */
9434 		  if (h == NULL)
9435 		    {
9436 		      char buffer [32];
9437 
9438 		      sprintf_vma (buffer, rel->r_info);
9439 		      (*_bfd_error_handler)
9440 			(_("error: %B contains a reloc (0x%s) for section %A "
9441 			   "that references a non-existent global symbol"),
9442 			 input_bfd, o, buffer);
9443 		      bfd_set_error (bfd_error_bad_value);
9444 		      return FALSE;
9445 		    }
9446 
9447 		  while (h->root.type == bfd_link_hash_indirect
9448 			 || h->root.type == bfd_link_hash_warning)
9449 		    h = (struct elf_link_hash_entry *) h->root.u.i.link;
9450 
9451 		  s_type = h->type;
9452 
9453 		  ps = NULL;
9454 		  if (h->root.type == bfd_link_hash_defined
9455 		      || h->root.type == bfd_link_hash_defweak)
9456 		    ps = &h->root.u.def.section;
9457 
9458 		  sym_name = h->root.root.string;
9459 		}
9460 	      else
9461 		{
9462 		  Elf_Internal_Sym *sym = isymbuf + r_symndx;
9463 
9464 		  s_type = ELF_ST_TYPE (sym->st_info);
9465 		  ps = &finfo->sections[r_symndx];
9466 		  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9467 					       sym, *ps);
9468 		}
9469 
9470 	      if ((s_type == STT_RELC || s_type == STT_SRELC)
9471 		  && !finfo->info->relocatable)
9472 		{
9473 		  bfd_vma val;
9474 		  bfd_vma dot = (rel->r_offset
9475 				 + o->output_offset + o->output_section->vma);
9476 #ifdef DEBUG
9477 		  printf ("Encountered a complex symbol!");
9478 		  printf (" (input_bfd %s, section %s, reloc %ld\n",
9479 			  input_bfd->filename, o->name,
9480 			  (long) (rel - internal_relocs));
9481 		  printf (" symbol: idx  %8.8lx, name %s\n",
9482 			  r_symndx, sym_name);
9483 		  printf (" reloc : info %8.8lx, addr %8.8lx\n",
9484 			  (unsigned long) rel->r_info,
9485 			  (unsigned long) rel->r_offset);
9486 #endif
9487 		  if (!eval_symbol (&val, &sym_name, input_bfd, finfo, dot,
9488 				    isymbuf, locsymcount, s_type == STT_SRELC))
9489 		    return FALSE;
9490 
9491 		  /* Symbol evaluated OK.  Update to absolute value.  */
9492 		  set_symbol_value (input_bfd, isymbuf, locsymcount,
9493 				    r_symndx, val);
9494 		  continue;
9495 		}
9496 
9497 	      if (action_discarded != -1 && ps != NULL)
9498 		{
9499 		  /* Complain if the definition comes from a
9500 		     discarded section.  */
9501 		  if ((sec = *ps) != NULL && elf_discarded_section (sec))
9502 		    {
9503 		      BFD_ASSERT (r_symndx != STN_UNDEF);
9504 		      if (action_discarded & COMPLAIN)
9505 			(*finfo->info->callbacks->einfo)
9506 			  (_("%X`%s' referenced in section `%A' of %B: "
9507 			     "defined in discarded section `%A' of %B\n"),
9508 			   sym_name, o, input_bfd, sec, sec->owner);
9509 
9510 		      /* Try to do the best we can to support buggy old
9511 			 versions of gcc.  Pretend that the symbol is
9512 			 really defined in the kept linkonce section.
9513 			 FIXME: This is quite broken.  Modifying the
9514 			 symbol here means we will be changing all later
9515 			 uses of the symbol, not just in this section.  */
9516 		      if (action_discarded & PRETEND)
9517 			{
9518 			  asection *kept;
9519 
9520 			  kept = _bfd_elf_check_kept_section (sec,
9521 							      finfo->info);
9522 			  if (kept != NULL)
9523 			    {
9524 			      *ps = kept;
9525 			      continue;
9526 			    }
9527 			}
9528 		    }
9529 		}
9530 	    }
9531 
9532 	  /* Relocate the section by invoking a back end routine.
9533 
9534 	     The back end routine is responsible for adjusting the
9535 	     section contents as necessary, and (if using Rela relocs
9536 	     and generating a relocatable output file) adjusting the
9537 	     reloc addend as necessary.
9538 
9539 	     The back end routine does not have to worry about setting
9540 	     the reloc address or the reloc symbol index.
9541 
9542 	     The back end routine is given a pointer to the swapped in
9543 	     internal symbols, and can access the hash table entries
9544 	     for the external symbols via elf_sym_hashes (input_bfd).
9545 
9546 	     When generating relocatable output, the back end routine
9547 	     must handle STB_LOCAL/STT_SECTION symbols specially.  The
9548 	     output symbol is going to be a section symbol
9549 	     corresponding to the output section, which will require
9550 	     the addend to be adjusted.  */
9551 
9552 	  ret = (*relocate_section) (output_bfd, finfo->info,
9553 				     input_bfd, o, contents,
9554 				     internal_relocs,
9555 				     isymbuf,
9556 				     finfo->sections);
9557 	  if (!ret)
9558 	    return FALSE;
9559 
9560 	  if (ret == 2
9561 	      || finfo->info->relocatable
9562 	      || finfo->info->emitrelocations)
9563 	    {
9564 	      Elf_Internal_Rela *irela;
9565 	      Elf_Internal_Rela *irelaend, *irelamid;
9566 	      bfd_vma last_offset;
9567 	      struct elf_link_hash_entry **rel_hash;
9568 	      struct elf_link_hash_entry **rel_hash_list, **rela_hash_list;
9569 	      Elf_Internal_Shdr *input_rel_hdr, *input_rela_hdr;
9570 	      unsigned int next_erel;
9571 	      bfd_boolean rela_normal;
9572 	      struct bfd_elf_section_data *esdi, *esdo;
9573 
9574 	      esdi = elf_section_data (o);
9575 	      esdo = elf_section_data (o->output_section);
9576 	      rela_normal = FALSE;
9577 
9578 	      /* Adjust the reloc addresses and symbol indices.  */
9579 
9580 	      irela = internal_relocs;
9581 	      irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
9582 	      rel_hash = esdo->rel.hashes + esdo->rel.count;
9583 	      /* We start processing the REL relocs, if any.  When we reach
9584 		 IRELAMID in the loop, we switch to the RELA relocs.  */
9585 	      irelamid = irela;
9586 	      if (esdi->rel.hdr != NULL)
9587 		irelamid += (NUM_SHDR_ENTRIES (esdi->rel.hdr)
9588 			     * bed->s->int_rels_per_ext_rel);
9589 	      rel_hash_list = rel_hash;
9590 	      rela_hash_list = NULL;
9591 	      last_offset = o->output_offset;
9592 	      if (!finfo->info->relocatable)
9593 		last_offset += o->output_section->vma;
9594 	      for (next_erel = 0; irela < irelaend; irela++, next_erel++)
9595 		{
9596 		  unsigned long r_symndx;
9597 		  asection *sec;
9598 		  Elf_Internal_Sym sym;
9599 
9600 		  if (next_erel == bed->s->int_rels_per_ext_rel)
9601 		    {
9602 		      rel_hash++;
9603 		      next_erel = 0;
9604 		    }
9605 
9606 		  if (irela == irelamid)
9607 		    {
9608 		      rel_hash = esdo->rela.hashes + esdo->rela.count;
9609 		      rela_hash_list = rel_hash;
9610 		      rela_normal = bed->rela_normal;
9611 		    }
9612 
9613 		  irela->r_offset = _bfd_elf_section_offset (output_bfd,
9614 							     finfo->info, o,
9615 							     irela->r_offset);
9616 		  if (irela->r_offset >= (bfd_vma) -2)
9617 		    {
9618 		      /* This is a reloc for a deleted entry or somesuch.
9619 			 Turn it into an R_*_NONE reloc, at the same
9620 			 offset as the last reloc.  elf_eh_frame.c and
9621 			 bfd_elf_discard_info rely on reloc offsets
9622 			 being ordered.  */
9623 		      irela->r_offset = last_offset;
9624 		      irela->r_info = 0;
9625 		      irela->r_addend = 0;
9626 		      continue;
9627 		    }
9628 
9629 		  irela->r_offset += o->output_offset;
9630 
9631 		  /* Relocs in an executable have to be virtual addresses.  */
9632 		  if (!finfo->info->relocatable)
9633 		    irela->r_offset += o->output_section->vma;
9634 
9635 		  last_offset = irela->r_offset;
9636 
9637 		  r_symndx = irela->r_info >> r_sym_shift;
9638 		  if (r_symndx == STN_UNDEF)
9639 		    continue;
9640 
9641 		  if (r_symndx >= locsymcount
9642 		      || (elf_bad_symtab (input_bfd)
9643 			  && finfo->sections[r_symndx] == NULL))
9644 		    {
9645 		      struct elf_link_hash_entry *rh;
9646 		      unsigned long indx;
9647 
9648 		      /* This is a reloc against a global symbol.  We
9649 			 have not yet output all the local symbols, so
9650 			 we do not know the symbol index of any global
9651 			 symbol.  We set the rel_hash entry for this
9652 			 reloc to point to the global hash table entry
9653 			 for this symbol.  The symbol index is then
9654 			 set at the end of bfd_elf_final_link.  */
9655 		      indx = r_symndx - extsymoff;
9656 		      rh = elf_sym_hashes (input_bfd)[indx];
9657 		      while (rh->root.type == bfd_link_hash_indirect
9658 			     || rh->root.type == bfd_link_hash_warning)
9659 			rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
9660 
9661 		      /* Setting the index to -2 tells
9662 			 elf_link_output_extsym that this symbol is
9663 			 used by a reloc.  */
9664 		      BFD_ASSERT (rh->indx < 0);
9665 		      rh->indx = -2;
9666 
9667 		      *rel_hash = rh;
9668 
9669 		      continue;
9670 		    }
9671 
9672 		  /* This is a reloc against a local symbol.  */
9673 
9674 		  *rel_hash = NULL;
9675 		  sym = isymbuf[r_symndx];
9676 		  sec = finfo->sections[r_symndx];
9677 		  if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
9678 		    {
9679 		      /* I suppose the backend ought to fill in the
9680 			 section of any STT_SECTION symbol against a
9681 			 processor specific section.  */
9682 		      r_symndx = STN_UNDEF;
9683 		      if (bfd_is_abs_section (sec))
9684 			;
9685 		      else if (sec == NULL || sec->owner == NULL)
9686 			{
9687 			  bfd_set_error (bfd_error_bad_value);
9688 			  return FALSE;
9689 			}
9690 		      else
9691 			{
9692 			  asection *osec = sec->output_section;
9693 
9694 			  /* If we have discarded a section, the output
9695 			     section will be the absolute section.  In
9696 			     case of discarded SEC_MERGE sections, use
9697 			     the kept section.  relocate_section should
9698 			     have already handled discarded linkonce
9699 			     sections.  */
9700 			  if (bfd_is_abs_section (osec)
9701 			      && sec->kept_section != NULL
9702 			      && sec->kept_section->output_section != NULL)
9703 			    {
9704 			      osec = sec->kept_section->output_section;
9705 			      irela->r_addend -= osec->vma;
9706 			    }
9707 
9708 			  if (!bfd_is_abs_section (osec))
9709 			    {
9710 			      r_symndx = osec->target_index;
9711 			      if (r_symndx == STN_UNDEF)
9712 				{
9713 				  struct elf_link_hash_table *htab;
9714 				  asection *oi;
9715 
9716 				  htab = elf_hash_table (finfo->info);
9717 				  oi = htab->text_index_section;
9718 				  if ((osec->flags & SEC_READONLY) == 0
9719 				      && htab->data_index_section != NULL)
9720 				    oi = htab->data_index_section;
9721 
9722 				  if (oi != NULL)
9723 				    {
9724 				      irela->r_addend += osec->vma - oi->vma;
9725 				      r_symndx = oi->target_index;
9726 				    }
9727 				}
9728 
9729 			      BFD_ASSERT (r_symndx != STN_UNDEF);
9730 			    }
9731 			}
9732 
9733 		      /* Adjust the addend according to where the
9734 			 section winds up in the output section.  */
9735 		      if (rela_normal)
9736 			irela->r_addend += sec->output_offset;
9737 		    }
9738 		  else
9739 		    {
9740 		      if (finfo->indices[r_symndx] == -1)
9741 			{
9742 			  unsigned long shlink;
9743 			  const char *name;
9744 			  asection *osec;
9745 			  long indx;
9746 
9747 			  if (finfo->info->strip == strip_all)
9748 			    {
9749 			      /* You can't do ld -r -s.  */
9750 			      bfd_set_error (bfd_error_invalid_operation);
9751 			      return FALSE;
9752 			    }
9753 
9754 			  /* This symbol was skipped earlier, but
9755 			     since it is needed by a reloc, we
9756 			     must output it now.  */
9757 			  shlink = symtab_hdr->sh_link;
9758 			  name = (bfd_elf_string_from_elf_section
9759 				  (input_bfd, shlink, sym.st_name));
9760 			  if (name == NULL)
9761 			    return FALSE;
9762 
9763 			  osec = sec->output_section;
9764 			  sym.st_shndx =
9765 			    _bfd_elf_section_from_bfd_section (output_bfd,
9766 							       osec);
9767 			  if (sym.st_shndx == SHN_BAD)
9768 			    return FALSE;
9769 
9770 			  sym.st_value += sec->output_offset;
9771 			  if (! finfo->info->relocatable)
9772 			    {
9773 			      sym.st_value += osec->vma;
9774 			      if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
9775 				{
9776 				  /* STT_TLS symbols are relative to PT_TLS
9777 				     segment base.  */
9778 				  BFD_ASSERT (elf_hash_table (finfo->info)
9779 					      ->tls_sec != NULL);
9780 				  sym.st_value -= (elf_hash_table (finfo->info)
9781 						   ->tls_sec->vma);
9782 				}
9783 			    }
9784 
9785 			  indx = bfd_get_symcount (output_bfd);
9786 			  ret = elf_link_output_sym (finfo, name, &sym, sec,
9787 						     NULL);
9788 			  if (ret == 0)
9789 			    return FALSE;
9790 			  else if (ret == 1)
9791 			    finfo->indices[r_symndx] = indx;
9792 			  else
9793 			    abort ();
9794 			}
9795 
9796 		      r_symndx = finfo->indices[r_symndx];
9797 		    }
9798 
9799 		  irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
9800 				   | (irela->r_info & r_type_mask));
9801 		}
9802 
9803 	      /* Swap out the relocs.  */
9804 	      input_rel_hdr = esdi->rel.hdr;
9805 	      if (input_rel_hdr && input_rel_hdr->sh_size != 0)
9806 		{
9807 		  if (!bed->elf_backend_emit_relocs (output_bfd, o,
9808 						     input_rel_hdr,
9809 						     internal_relocs,
9810 						     rel_hash_list))
9811 		    return FALSE;
9812 		  internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
9813 				      * bed->s->int_rels_per_ext_rel);
9814 		  rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
9815 		}
9816 
9817 	      input_rela_hdr = esdi->rela.hdr;
9818 	      if (input_rela_hdr && input_rela_hdr->sh_size != 0)
9819 		{
9820 		  if (!bed->elf_backend_emit_relocs (output_bfd, o,
9821 						     input_rela_hdr,
9822 						     internal_relocs,
9823 						     rela_hash_list))
9824 		    return FALSE;
9825 		}
9826 	    }
9827 	}
9828 
9829       /* Write out the modified section contents.  */
9830       if (bed->elf_backend_write_section
9831 	  && (*bed->elf_backend_write_section) (output_bfd, finfo->info, o,
9832 						contents))
9833 	{
9834 	  /* Section written out.  */
9835 	}
9836       else switch (o->sec_info_type)
9837 	{
9838 	case ELF_INFO_TYPE_STABS:
9839 	  if (! (_bfd_write_section_stabs
9840 		 (output_bfd,
9841 		  &elf_hash_table (finfo->info)->stab_info,
9842 		  o, &elf_section_data (o)->sec_info, contents)))
9843 	    return FALSE;
9844 	  break;
9845 	case ELF_INFO_TYPE_MERGE:
9846 	  if (! _bfd_write_merged_section (output_bfd, o,
9847 					   elf_section_data (o)->sec_info))
9848 	    return FALSE;
9849 	  break;
9850 	case ELF_INFO_TYPE_EH_FRAME:
9851 	  {
9852 	    if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info,
9853 						   o, contents))
9854 	      return FALSE;
9855 	  }
9856 	  break;
9857 	default:
9858 	  {
9859 	    /* FIXME: octets_per_byte.  */
9860 	    if (! (o->flags & SEC_EXCLUDE)
9861 		&& ! bfd_set_section_contents (output_bfd, o->output_section,
9862 					       contents,
9863 					       (file_ptr) o->output_offset,
9864 					       o->size))
9865 	      return FALSE;
9866 	  }
9867 	  break;
9868 	}
9869     }
9870 
9871   return TRUE;
9872 }
9873 
9874 /* Generate a reloc when linking an ELF file.  This is a reloc
9875    requested by the linker, and does not come from any input file.  This
9876    is used to build constructor and destructor tables when linking
9877    with -Ur.  */
9878 
9879 static bfd_boolean
9880 elf_reloc_link_order (bfd *output_bfd,
9881 		      struct bfd_link_info *info,
9882 		      asection *output_section,
9883 		      struct bfd_link_order *link_order)
9884 {
9885   reloc_howto_type *howto;
9886   long indx;
9887   bfd_vma offset;
9888   bfd_vma addend;
9889   struct bfd_elf_section_reloc_data *reldata;
9890   struct elf_link_hash_entry **rel_hash_ptr;
9891   Elf_Internal_Shdr *rel_hdr;
9892   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9893   Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
9894   bfd_byte *erel;
9895   unsigned int i;
9896   struct bfd_elf_section_data *esdo = elf_section_data (output_section);
9897 
9898   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
9899   if (howto == NULL)
9900     {
9901       bfd_set_error (bfd_error_bad_value);
9902       return FALSE;
9903     }
9904 
9905   addend = link_order->u.reloc.p->addend;
9906 
9907   if (esdo->rel.hdr)
9908     reldata = &esdo->rel;
9909   else if (esdo->rela.hdr)
9910     reldata = &esdo->rela;
9911   else
9912     {
9913       reldata = NULL;
9914       BFD_ASSERT (0);
9915     }
9916 
9917   /* Figure out the symbol index.  */
9918   rel_hash_ptr = reldata->hashes + reldata->count;
9919   if (link_order->type == bfd_section_reloc_link_order)
9920     {
9921       indx = link_order->u.reloc.p->u.section->target_index;
9922       BFD_ASSERT (indx != 0);
9923       *rel_hash_ptr = NULL;
9924     }
9925   else
9926     {
9927       struct elf_link_hash_entry *h;
9928 
9929       /* Treat a reloc against a defined symbol as though it were
9930 	 actually against the section.  */
9931       h = ((struct elf_link_hash_entry *)
9932 	   bfd_wrapped_link_hash_lookup (output_bfd, info,
9933 					 link_order->u.reloc.p->u.name,
9934 					 FALSE, FALSE, TRUE));
9935       if (h != NULL
9936 	  && (h->root.type == bfd_link_hash_defined
9937 	      || h->root.type == bfd_link_hash_defweak))
9938 	{
9939 	  asection *section;
9940 
9941 	  section = h->root.u.def.section;
9942 	  indx = section->output_section->target_index;
9943 	  *rel_hash_ptr = NULL;
9944 	  /* It seems that we ought to add the symbol value to the
9945 	     addend here, but in practice it has already been added
9946 	     because it was passed to constructor_callback.  */
9947 	  addend += section->output_section->vma + section->output_offset;
9948 	}
9949       else if (h != NULL)
9950 	{
9951 	  /* Setting the index to -2 tells elf_link_output_extsym that
9952 	     this symbol is used by a reloc.  */
9953 	  h->indx = -2;
9954 	  *rel_hash_ptr = h;
9955 	  indx = 0;
9956 	}
9957       else
9958 	{
9959 	  if (! ((*info->callbacks->unattached_reloc)
9960 		 (info, link_order->u.reloc.p->u.name, NULL, NULL, 0)))
9961 	    return FALSE;
9962 	  indx = 0;
9963 	}
9964     }
9965 
9966   /* If this is an inplace reloc, we must write the addend into the
9967      object file.  */
9968   if (howto->partial_inplace && addend != 0)
9969     {
9970       bfd_size_type size;
9971       bfd_reloc_status_type rstat;
9972       bfd_byte *buf;
9973       bfd_boolean ok;
9974       const char *sym_name;
9975 
9976       size = (bfd_size_type) bfd_get_reloc_size (howto);
9977       buf = (bfd_byte *) bfd_zmalloc (size);
9978       if (buf == NULL)
9979 	return FALSE;
9980       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
9981       switch (rstat)
9982 	{
9983 	case bfd_reloc_ok:
9984 	  break;
9985 
9986 	default:
9987 	case bfd_reloc_outofrange:
9988 	  abort ();
9989 
9990 	case bfd_reloc_overflow:
9991 	  if (link_order->type == bfd_section_reloc_link_order)
9992 	    sym_name = bfd_section_name (output_bfd,
9993 					 link_order->u.reloc.p->u.section);
9994 	  else
9995 	    sym_name = link_order->u.reloc.p->u.name;
9996 	  if (! ((*info->callbacks->reloc_overflow)
9997 		 (info, NULL, sym_name, howto->name, addend, NULL,
9998 		  NULL, (bfd_vma) 0)))
9999 	    {
10000 	      free (buf);
10001 	      return FALSE;
10002 	    }
10003 	  break;
10004 	}
10005       ok = bfd_set_section_contents (output_bfd, output_section, buf,
10006 				     link_order->offset, size);
10007       free (buf);
10008       if (! ok)
10009 	return FALSE;
10010     }
10011 
10012   /* The address of a reloc is relative to the section in a
10013      relocatable file, and is a virtual address in an executable
10014      file.  */
10015   offset = link_order->offset;
10016   if (! info->relocatable)
10017     offset += output_section->vma;
10018 
10019   for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
10020     {
10021       irel[i].r_offset = offset;
10022       irel[i].r_info = 0;
10023       irel[i].r_addend = 0;
10024     }
10025   if (bed->s->arch_size == 32)
10026     irel[0].r_info = ELF32_R_INFO (indx, howto->type);
10027   else
10028     irel[0].r_info = ELF64_R_INFO (indx, howto->type);
10029 
10030   rel_hdr = reldata->hdr;
10031   erel = rel_hdr->contents;
10032   if (rel_hdr->sh_type == SHT_REL)
10033     {
10034       erel += reldata->count * bed->s->sizeof_rel;
10035       (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
10036     }
10037   else
10038     {
10039       irel[0].r_addend = addend;
10040       erel += reldata->count * bed->s->sizeof_rela;
10041       (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
10042     }
10043 
10044   ++reldata->count;
10045 
10046   return TRUE;
10047 }
10048 
10049 
10050 /* Get the output vma of the section pointed to by the sh_link field.  */
10051 
10052 static bfd_vma
10053 elf_get_linked_section_vma (struct bfd_link_order *p)
10054 {
10055   Elf_Internal_Shdr **elf_shdrp;
10056   asection *s;
10057   int elfsec;
10058 
10059   s = p->u.indirect.section;
10060   elf_shdrp = elf_elfsections (s->owner);
10061   elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
10062   elfsec = elf_shdrp[elfsec]->sh_link;
10063   /* PR 290:
10064      The Intel C compiler generates SHT_IA_64_UNWIND with
10065      SHF_LINK_ORDER.  But it doesn't set the sh_link or
10066      sh_info fields.  Hence we could get the situation
10067      where elfsec is 0.  */
10068   if (elfsec == 0)
10069     {
10070       const struct elf_backend_data *bed
10071 	= get_elf_backend_data (s->owner);
10072       if (bed->link_order_error_handler)
10073 	bed->link_order_error_handler
10074 	  (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
10075       return 0;
10076     }
10077   else
10078     {
10079       s = elf_shdrp[elfsec]->bfd_section;
10080       return s->output_section->vma + s->output_offset;
10081     }
10082 }
10083 
10084 
10085 /* Compare two sections based on the locations of the sections they are
10086    linked to.  Used by elf_fixup_link_order.  */
10087 
10088 static int
10089 compare_link_order (const void * a, const void * b)
10090 {
10091   bfd_vma apos;
10092   bfd_vma bpos;
10093 
10094   apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
10095   bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
10096   if (apos < bpos)
10097     return -1;
10098   return apos > bpos;
10099 }
10100 
10101 
10102 /* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
10103    order as their linked sections.  Returns false if this could not be done
10104    because an output section includes both ordered and unordered
10105    sections.  Ideally we'd do this in the linker proper.  */
10106 
10107 static bfd_boolean
10108 elf_fixup_link_order (bfd *abfd, asection *o)
10109 {
10110   int seen_linkorder;
10111   int seen_other;
10112   int n;
10113   struct bfd_link_order *p;
10114   bfd *sub;
10115   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10116   unsigned elfsec;
10117   struct bfd_link_order **sections;
10118   asection *s, *other_sec, *linkorder_sec;
10119   bfd_vma offset;
10120 
10121   other_sec = NULL;
10122   linkorder_sec = NULL;
10123   seen_other = 0;
10124   seen_linkorder = 0;
10125   for (p = o->map_head.link_order; p != NULL; p = p->next)
10126     {
10127       if (p->type == bfd_indirect_link_order)
10128 	{
10129 	  s = p->u.indirect.section;
10130 	  sub = s->owner;
10131 	  if (bfd_get_flavour (sub) == bfd_target_elf_flavour
10132 	      && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
10133 	      && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
10134 	      && elfsec < elf_numsections (sub)
10135 	      && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER
10136 	      && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub))
10137 	    {
10138 	      seen_linkorder++;
10139 	      linkorder_sec = s;
10140 	    }
10141 	  else
10142 	    {
10143 	      seen_other++;
10144 	      other_sec = s;
10145 	    }
10146 	}
10147       else
10148 	seen_other++;
10149 
10150       if (seen_other && seen_linkorder)
10151 	{
10152 	  if (other_sec && linkorder_sec)
10153 	    (*_bfd_error_handler) (_("%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"),
10154 				   o, linkorder_sec,
10155 				   linkorder_sec->owner, other_sec,
10156 				   other_sec->owner);
10157 	  else
10158 	    (*_bfd_error_handler) (_("%A has both ordered and unordered sections"),
10159 				   o);
10160 	  bfd_set_error (bfd_error_bad_value);
10161 	  return FALSE;
10162 	}
10163     }
10164 
10165   if (!seen_linkorder)
10166     return TRUE;
10167 
10168   sections = (struct bfd_link_order **)
10169     bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *));
10170   if (sections == NULL)
10171     return FALSE;
10172   seen_linkorder = 0;
10173 
10174   for (p = o->map_head.link_order; p != NULL; p = p->next)
10175     {
10176       sections[seen_linkorder++] = p;
10177     }
10178   /* Sort the input sections in the order of their linked section.  */
10179   qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
10180 	 compare_link_order);
10181 
10182   /* Change the offsets of the sections.  */
10183   offset = 0;
10184   for (n = 0; n < seen_linkorder; n++)
10185     {
10186       s = sections[n]->u.indirect.section;
10187       offset &= ~(bfd_vma) 0 << s->alignment_power;
10188       s->output_offset = offset;
10189       sections[n]->offset = offset;
10190       /* FIXME: octets_per_byte.  */
10191       offset += sections[n]->size;
10192     }
10193 
10194   free (sections);
10195   return TRUE;
10196 }
10197 
10198 
10199 /* Do the final step of an ELF link.  */
10200 
10201 bfd_boolean
10202 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
10203 {
10204   bfd_boolean dynamic;
10205   bfd_boolean emit_relocs;
10206   bfd *dynobj;
10207   struct elf_final_link_info finfo;
10208   asection *o;
10209   struct bfd_link_order *p;
10210   bfd *sub;
10211   bfd_size_type max_contents_size;
10212   bfd_size_type max_external_reloc_size;
10213   bfd_size_type max_internal_reloc_count;
10214   bfd_size_type max_sym_count;
10215   bfd_size_type max_sym_shndx_count;
10216   file_ptr off;
10217   Elf_Internal_Sym elfsym;
10218   unsigned int i;
10219   Elf_Internal_Shdr *symtab_hdr;
10220   Elf_Internal_Shdr *symtab_shndx_hdr;
10221   Elf_Internal_Shdr *symstrtab_hdr;
10222   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10223   struct elf_outext_info eoinfo;
10224   bfd_boolean merged;
10225   size_t relativecount = 0;
10226   asection *reldyn = 0;
10227   bfd_size_type amt;
10228   asection *attr_section = NULL;
10229   bfd_vma attr_size = 0;
10230   const char *std_attrs_section;
10231 
10232   if (! is_elf_hash_table (info->hash))
10233     return FALSE;
10234 
10235   if (info->shared)
10236     abfd->flags |= DYNAMIC;
10237 
10238   dynamic = elf_hash_table (info)->dynamic_sections_created;
10239   dynobj = elf_hash_table (info)->dynobj;
10240 
10241   emit_relocs = (info->relocatable
10242 		 || info->emitrelocations);
10243 
10244   finfo.info = info;
10245   finfo.output_bfd = abfd;
10246   finfo.symstrtab = _bfd_elf_stringtab_init ();
10247   if (finfo.symstrtab == NULL)
10248     return FALSE;
10249 
10250   if (! dynamic)
10251     {
10252       finfo.dynsym_sec = NULL;
10253       finfo.hash_sec = NULL;
10254       finfo.symver_sec = NULL;
10255     }
10256   else
10257     {
10258       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
10259       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
10260       BFD_ASSERT (finfo.dynsym_sec != NULL);
10261       finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
10262       /* Note that it is OK if symver_sec is NULL.  */
10263     }
10264 
10265   finfo.contents = NULL;
10266   finfo.external_relocs = NULL;
10267   finfo.internal_relocs = NULL;
10268   finfo.external_syms = NULL;
10269   finfo.locsym_shndx = NULL;
10270   finfo.internal_syms = NULL;
10271   finfo.indices = NULL;
10272   finfo.sections = NULL;
10273   finfo.symbuf = NULL;
10274   finfo.symshndxbuf = NULL;
10275   finfo.symbuf_count = 0;
10276   finfo.shndxbuf_size = 0;
10277 
10278   /* The object attributes have been merged.  Remove the input
10279      sections from the link, and set the contents of the output
10280      secton.  */
10281   std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
10282   for (o = abfd->sections; o != NULL; o = o->next)
10283     {
10284       if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
10285 	  || strcmp (o->name, ".gnu.attributes") == 0)
10286 	{
10287 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
10288 	    {
10289 	      asection *input_section;
10290 
10291 	      if (p->type != bfd_indirect_link_order)
10292 		continue;
10293 	      input_section = p->u.indirect.section;
10294 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
10295 		 elf_link_input_bfd ignores this section.  */
10296 	      input_section->flags &= ~SEC_HAS_CONTENTS;
10297 	    }
10298 
10299 	  attr_size = bfd_elf_obj_attr_size (abfd);
10300 	  if (attr_size)
10301 	    {
10302 	      bfd_set_section_size (abfd, o, attr_size);
10303 	      attr_section = o;
10304 	      /* Skip this section later on.  */
10305 	      o->map_head.link_order = NULL;
10306 	    }
10307 	  else
10308 	    o->flags |= SEC_EXCLUDE;
10309 	}
10310     }
10311 
10312   /* Count up the number of relocations we will output for each output
10313      section, so that we know the sizes of the reloc sections.  We
10314      also figure out some maximum sizes.  */
10315   max_contents_size = 0;
10316   max_external_reloc_size = 0;
10317   max_internal_reloc_count = 0;
10318   max_sym_count = 0;
10319   max_sym_shndx_count = 0;
10320   merged = FALSE;
10321   for (o = abfd->sections; o != NULL; o = o->next)
10322     {
10323       struct bfd_elf_section_data *esdo = elf_section_data (o);
10324       o->reloc_count = 0;
10325 
10326       for (p = o->map_head.link_order; p != NULL; p = p->next)
10327 	{
10328 	  unsigned int reloc_count = 0;
10329 	  struct bfd_elf_section_data *esdi = NULL;
10330 
10331 	  if (p->type == bfd_section_reloc_link_order
10332 	      || p->type == bfd_symbol_reloc_link_order)
10333 	    reloc_count = 1;
10334 	  else if (p->type == bfd_indirect_link_order)
10335 	    {
10336 	      asection *sec;
10337 
10338 	      sec = p->u.indirect.section;
10339 	      esdi = elf_section_data (sec);
10340 
10341 	      /* Mark all sections which are to be included in the
10342 		 link.  This will normally be every section.  We need
10343 		 to do this so that we can identify any sections which
10344 		 the linker has decided to not include.  */
10345 	      sec->linker_mark = TRUE;
10346 
10347 	      if (sec->flags & SEC_MERGE)
10348 		merged = TRUE;
10349 
10350 	      if (info->relocatable || info->emitrelocations)
10351 		reloc_count = sec->reloc_count;
10352 	      else if (bed->elf_backend_count_relocs)
10353 		reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
10354 
10355 	      if (sec->rawsize > max_contents_size)
10356 		max_contents_size = sec->rawsize;
10357 	      if (sec->size > max_contents_size)
10358 		max_contents_size = sec->size;
10359 
10360 	      /* We are interested in just local symbols, not all
10361 		 symbols.  */
10362 	      if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
10363 		  && (sec->owner->flags & DYNAMIC) == 0)
10364 		{
10365 		  size_t sym_count;
10366 
10367 		  if (elf_bad_symtab (sec->owner))
10368 		    sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
10369 				 / bed->s->sizeof_sym);
10370 		  else
10371 		    sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
10372 
10373 		  if (sym_count > max_sym_count)
10374 		    max_sym_count = sym_count;
10375 
10376 		  if (sym_count > max_sym_shndx_count
10377 		      && elf_symtab_shndx (sec->owner) != 0)
10378 		    max_sym_shndx_count = sym_count;
10379 
10380 		  if ((sec->flags & SEC_RELOC) != 0)
10381 		    {
10382 		      size_t ext_size = 0;
10383 
10384 		      if (esdi->rel.hdr != NULL)
10385 			ext_size = esdi->rel.hdr->sh_size;
10386 		      if (esdi->rela.hdr != NULL)
10387 			ext_size += esdi->rela.hdr->sh_size;
10388 
10389 		      if (ext_size > max_external_reloc_size)
10390 			max_external_reloc_size = ext_size;
10391 		      if (sec->reloc_count > max_internal_reloc_count)
10392 			max_internal_reloc_count = sec->reloc_count;
10393 		    }
10394 		}
10395 	    }
10396 
10397 	  if (reloc_count == 0)
10398 	    continue;
10399 
10400 	  o->reloc_count += reloc_count;
10401 
10402 	  if (p->type == bfd_indirect_link_order
10403 	      && (info->relocatable || info->emitrelocations))
10404 	    {
10405 	      if (esdi->rel.hdr)
10406 		esdo->rel.count += NUM_SHDR_ENTRIES (esdi->rel.hdr);
10407 	      if (esdi->rela.hdr)
10408 		esdo->rela.count += NUM_SHDR_ENTRIES (esdi->rela.hdr);
10409 	    }
10410 	  else
10411 	    {
10412 	      if (o->use_rela_p)
10413 		esdo->rela.count += reloc_count;
10414 	      else
10415 		esdo->rel.count += reloc_count;
10416 	    }
10417 	}
10418 
10419       if (o->reloc_count > 0)
10420 	o->flags |= SEC_RELOC;
10421       else
10422 	{
10423 	  /* Explicitly clear the SEC_RELOC flag.  The linker tends to
10424 	     set it (this is probably a bug) and if it is set
10425 	     assign_section_numbers will create a reloc section.  */
10426 	  o->flags &=~ SEC_RELOC;
10427 	}
10428 
10429       /* If the SEC_ALLOC flag is not set, force the section VMA to
10430 	 zero.  This is done in elf_fake_sections as well, but forcing
10431 	 the VMA to 0 here will ensure that relocs against these
10432 	 sections are handled correctly.  */
10433       if ((o->flags & SEC_ALLOC) == 0
10434 	  && ! o->user_set_vma)
10435 	o->vma = 0;
10436     }
10437 
10438   if (! info->relocatable && merged)
10439     elf_link_hash_traverse (elf_hash_table (info),
10440 			    _bfd_elf_link_sec_merge_syms, abfd);
10441 
10442   /* Figure out the file positions for everything but the symbol table
10443      and the relocs.  We set symcount to force assign_section_numbers
10444      to create a symbol table.  */
10445   bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1;
10446   BFD_ASSERT (! abfd->output_has_begun);
10447   if (! _bfd_elf_compute_section_file_positions (abfd, info))
10448     goto error_return;
10449 
10450   /* Set sizes, and assign file positions for reloc sections.  */
10451   for (o = abfd->sections; o != NULL; o = o->next)
10452     {
10453       struct bfd_elf_section_data *esdo = elf_section_data (o);
10454       if ((o->flags & SEC_RELOC) != 0)
10455 	{
10456 	  if (esdo->rel.hdr
10457 	      && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rel)))
10458 	    goto error_return;
10459 
10460 	  if (esdo->rela.hdr
10461 	      && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rela)))
10462 	    goto error_return;
10463 	}
10464 
10465       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
10466 	 to count upwards while actually outputting the relocations.  */
10467       esdo->rel.count = 0;
10468       esdo->rela.count = 0;
10469     }
10470 
10471   _bfd_elf_assign_file_positions_for_relocs (abfd);
10472 
10473   /* We have now assigned file positions for all the sections except
10474      .symtab and .strtab.  We start the .symtab section at the current
10475      file position, and write directly to it.  We build the .strtab
10476      section in memory.  */
10477   bfd_get_symcount (abfd) = 0;
10478   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
10479   /* sh_name is set in prep_headers.  */
10480   symtab_hdr->sh_type = SHT_SYMTAB;
10481   /* sh_flags, sh_addr and sh_size all start off zero.  */
10482   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
10483   /* sh_link is set in assign_section_numbers.  */
10484   /* sh_info is set below.  */
10485   /* sh_offset is set just below.  */
10486   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
10487 
10488   off = elf_tdata (abfd)->next_file_pos;
10489   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
10490 
10491   /* Note that at this point elf_tdata (abfd)->next_file_pos is
10492      incorrect.  We do not yet know the size of the .symtab section.
10493      We correct next_file_pos below, after we do know the size.  */
10494 
10495   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
10496      continuously seeking to the right position in the file.  */
10497   if (! info->keep_memory || max_sym_count < 20)
10498     finfo.symbuf_size = 20;
10499   else
10500     finfo.symbuf_size = max_sym_count;
10501   amt = finfo.symbuf_size;
10502   amt *= bed->s->sizeof_sym;
10503   finfo.symbuf = (bfd_byte *) bfd_malloc (amt);
10504   if (finfo.symbuf == NULL)
10505     goto error_return;
10506   if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
10507     {
10508       /* Wild guess at number of output symbols.  realloc'd as needed.  */
10509       amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
10510       finfo.shndxbuf_size = amt;
10511       amt *= sizeof (Elf_External_Sym_Shndx);
10512       finfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
10513       if (finfo.symshndxbuf == NULL)
10514 	goto error_return;
10515     }
10516 
10517   /* Start writing out the symbol table.  The first symbol is always a
10518      dummy symbol.  */
10519   if (info->strip != strip_all
10520       || emit_relocs)
10521     {
10522       elfsym.st_value = 0;
10523       elfsym.st_size = 0;
10524       elfsym.st_info = 0;
10525       elfsym.st_other = 0;
10526       elfsym.st_shndx = SHN_UNDEF;
10527       elfsym.st_target_internal = 0;
10528       if (elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr,
10529 			       NULL) != 1)
10530 	goto error_return;
10531     }
10532 
10533   /* Output a symbol for each section.  We output these even if we are
10534      discarding local symbols, since they are used for relocs.  These
10535      symbols have no names.  We store the index of each one in the
10536      index field of the section, so that we can find it again when
10537      outputting relocs.  */
10538   if (info->strip != strip_all
10539       || emit_relocs)
10540     {
10541       elfsym.st_size = 0;
10542       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
10543       elfsym.st_other = 0;
10544       elfsym.st_value = 0;
10545       elfsym.st_target_internal = 0;
10546       for (i = 1; i < elf_numsections (abfd); i++)
10547 	{
10548 	  o = bfd_section_from_elf_index (abfd, i);
10549 	  if (o != NULL)
10550 	    {
10551 	      o->target_index = bfd_get_symcount (abfd);
10552 	      elfsym.st_shndx = i;
10553 	      if (!info->relocatable)
10554 		elfsym.st_value = o->vma;
10555 	      if (elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL) != 1)
10556 		goto error_return;
10557 	    }
10558 	}
10559     }
10560 
10561   /* Allocate some memory to hold information read in from the input
10562      files.  */
10563   if (max_contents_size != 0)
10564     {
10565       finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
10566       if (finfo.contents == NULL)
10567 	goto error_return;
10568     }
10569 
10570   if (max_external_reloc_size != 0)
10571     {
10572       finfo.external_relocs = bfd_malloc (max_external_reloc_size);
10573       if (finfo.external_relocs == NULL)
10574 	goto error_return;
10575     }
10576 
10577   if (max_internal_reloc_count != 0)
10578     {
10579       amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
10580       amt *= sizeof (Elf_Internal_Rela);
10581       finfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
10582       if (finfo.internal_relocs == NULL)
10583 	goto error_return;
10584     }
10585 
10586   if (max_sym_count != 0)
10587     {
10588       amt = max_sym_count * bed->s->sizeof_sym;
10589       finfo.external_syms = (bfd_byte *) bfd_malloc (amt);
10590       if (finfo.external_syms == NULL)
10591 	goto error_return;
10592 
10593       amt = max_sym_count * sizeof (Elf_Internal_Sym);
10594       finfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
10595       if (finfo.internal_syms == NULL)
10596 	goto error_return;
10597 
10598       amt = max_sym_count * sizeof (long);
10599       finfo.indices = (long int *) bfd_malloc (amt);
10600       if (finfo.indices == NULL)
10601 	goto error_return;
10602 
10603       amt = max_sym_count * sizeof (asection *);
10604       finfo.sections = (asection **) bfd_malloc (amt);
10605       if (finfo.sections == NULL)
10606 	goto error_return;
10607     }
10608 
10609   if (max_sym_shndx_count != 0)
10610     {
10611       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
10612       finfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
10613       if (finfo.locsym_shndx == NULL)
10614 	goto error_return;
10615     }
10616 
10617   if (elf_hash_table (info)->tls_sec)
10618     {
10619       bfd_vma base, end = 0;
10620       asection *sec;
10621 
10622       for (sec = elf_hash_table (info)->tls_sec;
10623 	   sec && (sec->flags & SEC_THREAD_LOCAL);
10624 	   sec = sec->next)
10625 	{
10626 	  bfd_size_type size = sec->size;
10627 
10628 	  if (size == 0
10629 	      && (sec->flags & SEC_HAS_CONTENTS) == 0)
10630 	    {
10631 	      struct bfd_link_order *ord = sec->map_tail.link_order;
10632 
10633 	      if (ord != NULL)
10634 		size = ord->offset + ord->size;
10635 	    }
10636 	  end = sec->vma + size;
10637 	}
10638       base = elf_hash_table (info)->tls_sec->vma;
10639       /* Only align end of TLS section if static TLS doesn't have special
10640 	 alignment requirements.  */
10641       if (bed->static_tls_alignment == 1)
10642 	end = align_power (end,
10643 			   elf_hash_table (info)->tls_sec->alignment_power);
10644       elf_hash_table (info)->tls_size = end - base;
10645     }
10646 
10647   /* Reorder SHF_LINK_ORDER sections.  */
10648   for (o = abfd->sections; o != NULL; o = o->next)
10649     {
10650       if (!elf_fixup_link_order (abfd, o))
10651 	return FALSE;
10652     }
10653 
10654   /* Since ELF permits relocations to be against local symbols, we
10655      must have the local symbols available when we do the relocations.
10656      Since we would rather only read the local symbols once, and we
10657      would rather not keep them in memory, we handle all the
10658      relocations for a single input file at the same time.
10659 
10660      Unfortunately, there is no way to know the total number of local
10661      symbols until we have seen all of them, and the local symbol
10662      indices precede the global symbol indices.  This means that when
10663      we are generating relocatable output, and we see a reloc against
10664      a global symbol, we can not know the symbol index until we have
10665      finished examining all the local symbols to see which ones we are
10666      going to output.  To deal with this, we keep the relocations in
10667      memory, and don't output them until the end of the link.  This is
10668      an unfortunate waste of memory, but I don't see a good way around
10669      it.  Fortunately, it only happens when performing a relocatable
10670      link, which is not the common case.  FIXME: If keep_memory is set
10671      we could write the relocs out and then read them again; I don't
10672      know how bad the memory loss will be.  */
10673 
10674   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
10675     sub->output_has_begun = FALSE;
10676   for (o = abfd->sections; o != NULL; o = o->next)
10677     {
10678       for (p = o->map_head.link_order; p != NULL; p = p->next)
10679 	{
10680 	  if (p->type == bfd_indirect_link_order
10681 	      && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
10682 		  == bfd_target_elf_flavour)
10683 	      && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
10684 	    {
10685 	      if (! sub->output_has_begun)
10686 		{
10687 		  if (! elf_link_input_bfd (&finfo, sub))
10688 		    goto error_return;
10689 		  sub->output_has_begun = TRUE;
10690 		}
10691 	    }
10692 	  else if (p->type == bfd_section_reloc_link_order
10693 		   || p->type == bfd_symbol_reloc_link_order)
10694 	    {
10695 	      if (! elf_reloc_link_order (abfd, info, o, p))
10696 		goto error_return;
10697 	    }
10698 	  else
10699 	    {
10700 	      if (! _bfd_default_link_order (abfd, info, o, p))
10701 		{
10702 		  if (p->type == bfd_indirect_link_order
10703 		      && (bfd_get_flavour (sub)
10704 			  == bfd_target_elf_flavour)
10705 		      && (elf_elfheader (sub)->e_ident[EI_CLASS]
10706 			  != bed->s->elfclass))
10707 		    {
10708 		      const char *iclass, *oclass;
10709 
10710 		      if (bed->s->elfclass == ELFCLASS64)
10711 			{
10712 			  iclass = "ELFCLASS32";
10713 			  oclass = "ELFCLASS64";
10714 			}
10715 		      else
10716 			{
10717 			  iclass = "ELFCLASS64";
10718 			  oclass = "ELFCLASS32";
10719 			}
10720 
10721 		      bfd_set_error (bfd_error_wrong_format);
10722 		      (*_bfd_error_handler)
10723 			(_("%B: file class %s incompatible with %s"),
10724 			 sub, iclass, oclass);
10725 		    }
10726 
10727 		  goto error_return;
10728 		}
10729 	    }
10730 	}
10731     }
10732 
10733   /* Free symbol buffer if needed.  */
10734   if (!info->reduce_memory_overheads)
10735     {
10736       for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
10737 	if (bfd_get_flavour (sub) == bfd_target_elf_flavour
10738 	    && elf_tdata (sub)->symbuf)
10739 	  {
10740 	    free (elf_tdata (sub)->symbuf);
10741 	    elf_tdata (sub)->symbuf = NULL;
10742 	  }
10743     }
10744 
10745   /* Output any global symbols that got converted to local in a
10746      version script or due to symbol visibility.  We do this in a
10747      separate step since ELF requires all local symbols to appear
10748      prior to any global symbols.  FIXME: We should only do this if
10749      some global symbols were, in fact, converted to become local.
10750      FIXME: Will this work correctly with the Irix 5 linker?  */
10751   eoinfo.failed = FALSE;
10752   eoinfo.finfo = &finfo;
10753   eoinfo.localsyms = TRUE;
10754   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
10755 			  &eoinfo);
10756   if (eoinfo.failed)
10757     return FALSE;
10758 
10759   /* If backend needs to output some local symbols not present in the hash
10760      table, do it now.  */
10761   if (bed->elf_backend_output_arch_local_syms)
10762     {
10763       typedef int (*out_sym_func)
10764 	(void *, const char *, Elf_Internal_Sym *, asection *,
10765 	 struct elf_link_hash_entry *);
10766 
10767       if (! ((*bed->elf_backend_output_arch_local_syms)
10768 	     (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
10769 	return FALSE;
10770     }
10771 
10772   /* That wrote out all the local symbols.  Finish up the symbol table
10773      with the global symbols. Even if we want to strip everything we
10774      can, we still need to deal with those global symbols that got
10775      converted to local in a version script.  */
10776 
10777   /* The sh_info field records the index of the first non local symbol.  */
10778   symtab_hdr->sh_info = bfd_get_symcount (abfd);
10779 
10780   if (dynamic
10781       && finfo.dynsym_sec->output_section != bfd_abs_section_ptr)
10782     {
10783       Elf_Internal_Sym sym;
10784       bfd_byte *dynsym = finfo.dynsym_sec->contents;
10785       long last_local = 0;
10786 
10787       /* Write out the section symbols for the output sections.  */
10788       if (info->shared || elf_hash_table (info)->is_relocatable_executable)
10789 	{
10790 	  asection *s;
10791 
10792 	  sym.st_size = 0;
10793 	  sym.st_name = 0;
10794 	  sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
10795 	  sym.st_other = 0;
10796 	  sym.st_target_internal = 0;
10797 
10798 	  for (s = abfd->sections; s != NULL; s = s->next)
10799 	    {
10800 	      int indx;
10801 	      bfd_byte *dest;
10802 	      long dynindx;
10803 
10804 	      dynindx = elf_section_data (s)->dynindx;
10805 	      if (dynindx <= 0)
10806 		continue;
10807 	      indx = elf_section_data (s)->this_idx;
10808 	      BFD_ASSERT (indx > 0);
10809 	      sym.st_shndx = indx;
10810 	      if (! check_dynsym (abfd, &sym))
10811 		return FALSE;
10812 	      sym.st_value = s->vma;
10813 	      dest = dynsym + dynindx * bed->s->sizeof_sym;
10814 	      if (last_local < dynindx)
10815 		last_local = dynindx;
10816 	      bed->s->swap_symbol_out (abfd, &sym, dest, 0);
10817 	    }
10818 	}
10819 
10820       /* Write out the local dynsyms.  */
10821       if (elf_hash_table (info)->dynlocal)
10822 	{
10823 	  struct elf_link_local_dynamic_entry *e;
10824 	  for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
10825 	    {
10826 	      asection *s;
10827 	      bfd_byte *dest;
10828 
10829 	      /* Copy the internal symbol and turn off visibility.
10830 		 Note that we saved a word of storage and overwrote
10831 		 the original st_name with the dynstr_index.  */
10832 	      sym = e->isym;
10833 	      sym.st_other &= ~ELF_ST_VISIBILITY (-1);
10834 
10835 	      s = bfd_section_from_elf_index (e->input_bfd,
10836 					      e->isym.st_shndx);
10837 	      if (s != NULL)
10838 		{
10839 		  sym.st_shndx =
10840 		    elf_section_data (s->output_section)->this_idx;
10841 		  if (! check_dynsym (abfd, &sym))
10842 		    return FALSE;
10843 		  sym.st_value = (s->output_section->vma
10844 				  + s->output_offset
10845 				  + e->isym.st_value);
10846 		}
10847 
10848 	      if (last_local < e->dynindx)
10849 		last_local = e->dynindx;
10850 
10851 	      dest = dynsym + e->dynindx * bed->s->sizeof_sym;
10852 	      bed->s->swap_symbol_out (abfd, &sym, dest, 0);
10853 	    }
10854 	}
10855 
10856       elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info =
10857 	last_local + 1;
10858     }
10859 
10860   /* We get the global symbols from the hash table.  */
10861   eoinfo.failed = FALSE;
10862   eoinfo.localsyms = FALSE;
10863   eoinfo.finfo = &finfo;
10864   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
10865 			  &eoinfo);
10866   if (eoinfo.failed)
10867     return FALSE;
10868 
10869   /* If backend needs to output some symbols not present in the hash
10870      table, do it now.  */
10871   if (bed->elf_backend_output_arch_syms)
10872     {
10873       typedef int (*out_sym_func)
10874 	(void *, const char *, Elf_Internal_Sym *, asection *,
10875 	 struct elf_link_hash_entry *);
10876 
10877       if (! ((*bed->elf_backend_output_arch_syms)
10878 	     (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
10879 	return FALSE;
10880     }
10881 
10882   /* Flush all symbols to the file.  */
10883   if (! elf_link_flush_output_syms (&finfo, bed))
10884     return FALSE;
10885 
10886   /* Now we know the size of the symtab section.  */
10887   off += symtab_hdr->sh_size;
10888 
10889   symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
10890   if (symtab_shndx_hdr->sh_name != 0)
10891     {
10892       symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
10893       symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
10894       symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
10895       amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
10896       symtab_shndx_hdr->sh_size = amt;
10897 
10898       off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
10899 						       off, TRUE);
10900 
10901       if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
10902 	  || (bfd_bwrite (finfo.symshndxbuf, amt, abfd) != amt))
10903 	return FALSE;
10904     }
10905 
10906 
10907   /* Finish up and write out the symbol string table (.strtab)
10908      section.  */
10909   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
10910   /* sh_name was set in prep_headers.  */
10911   symstrtab_hdr->sh_type = SHT_STRTAB;
10912   symstrtab_hdr->sh_flags = 0;
10913   symstrtab_hdr->sh_addr = 0;
10914   symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
10915   symstrtab_hdr->sh_entsize = 0;
10916   symstrtab_hdr->sh_link = 0;
10917   symstrtab_hdr->sh_info = 0;
10918   /* sh_offset is set just below.  */
10919   symstrtab_hdr->sh_addralign = 1;
10920 
10921   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE);
10922   elf_tdata (abfd)->next_file_pos = off;
10923 
10924   if (bfd_get_symcount (abfd) > 0)
10925     {
10926       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
10927 	  || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
10928 	return FALSE;
10929     }
10930 
10931   /* Adjust the relocs to have the correct symbol indices.  */
10932   for (o = abfd->sections; o != NULL; o = o->next)
10933     {
10934       struct bfd_elf_section_data *esdo = elf_section_data (o);
10935       if ((o->flags & SEC_RELOC) == 0)
10936 	continue;
10937 
10938       if (esdo->rel.hdr != NULL)
10939 	elf_link_adjust_relocs (abfd, &esdo->rel);
10940       if (esdo->rela.hdr != NULL)
10941 	elf_link_adjust_relocs (abfd, &esdo->rela);
10942 
10943       /* Set the reloc_count field to 0 to prevent write_relocs from
10944 	 trying to swap the relocs out itself.  */
10945       o->reloc_count = 0;
10946     }
10947 
10948   if (dynamic && info->combreloc && dynobj != NULL)
10949     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
10950 
10951   /* If we are linking against a dynamic object, or generating a
10952      shared library, finish up the dynamic linking information.  */
10953   if (dynamic)
10954     {
10955       bfd_byte *dyncon, *dynconend;
10956 
10957       /* Fix up .dynamic entries.  */
10958       o = bfd_get_section_by_name (dynobj, ".dynamic");
10959       BFD_ASSERT (o != NULL);
10960 
10961       dyncon = o->contents;
10962       dynconend = o->contents + o->size;
10963       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
10964 	{
10965 	  Elf_Internal_Dyn dyn;
10966 	  const char *name;
10967 	  unsigned int type;
10968 
10969 	  bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
10970 
10971 	  switch (dyn.d_tag)
10972 	    {
10973 	    default:
10974 	      continue;
10975 	    case DT_NULL:
10976 	      if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
10977 		{
10978 		  switch (elf_section_data (reldyn)->this_hdr.sh_type)
10979 		    {
10980 		    case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
10981 		    case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
10982 		    default: continue;
10983 		    }
10984 		  dyn.d_un.d_val = relativecount;
10985 		  relativecount = 0;
10986 		  break;
10987 		}
10988 	      continue;
10989 
10990 	    case DT_INIT:
10991 	      name = info->init_function;
10992 	      goto get_sym;
10993 	    case DT_FINI:
10994 	      name = info->fini_function;
10995 	    get_sym:
10996 	      {
10997 		struct elf_link_hash_entry *h;
10998 
10999 		h = elf_link_hash_lookup (elf_hash_table (info), name,
11000 					  FALSE, FALSE, TRUE);
11001 		if (h != NULL
11002 		    && (h->root.type == bfd_link_hash_defined
11003 			|| h->root.type == bfd_link_hash_defweak))
11004 		  {
11005 		    dyn.d_un.d_ptr = h->root.u.def.value;
11006 		    o = h->root.u.def.section;
11007 		    if (o->output_section != NULL)
11008 		      dyn.d_un.d_ptr += (o->output_section->vma
11009 					 + o->output_offset);
11010 		    else
11011 		      {
11012 			/* The symbol is imported from another shared
11013 			   library and does not apply to this one.  */
11014 			dyn.d_un.d_ptr = 0;
11015 		      }
11016 		    break;
11017 		  }
11018 	      }
11019 	      continue;
11020 
11021 	    case DT_PREINIT_ARRAYSZ:
11022 	      name = ".preinit_array";
11023 	      goto get_size;
11024 	    case DT_INIT_ARRAYSZ:
11025 	      name = ".init_array";
11026 	      goto get_size;
11027 	    case DT_FINI_ARRAYSZ:
11028 	      name = ".fini_array";
11029 	    get_size:
11030 	      o = bfd_get_section_by_name (abfd, name);
11031 	      if (o == NULL)
11032 		{
11033 		  (*_bfd_error_handler)
11034 		    (_("%B: could not find output section %s"), abfd, name);
11035 		  goto error_return;
11036 		}
11037 	      if (o->size == 0)
11038 		(*_bfd_error_handler)
11039 		  (_("warning: %s section has zero size"), name);
11040 	      dyn.d_un.d_val = o->size;
11041 	      break;
11042 
11043 	    case DT_PREINIT_ARRAY:
11044 	      name = ".preinit_array";
11045 	      goto get_vma;
11046 	    case DT_INIT_ARRAY:
11047 	      name = ".init_array";
11048 	      goto get_vma;
11049 	    case DT_FINI_ARRAY:
11050 	      name = ".fini_array";
11051 	      goto get_vma;
11052 
11053 	    case DT_HASH:
11054 	      name = ".hash";
11055 	      goto get_vma;
11056 	    case DT_GNU_HASH:
11057 	      name = ".gnu.hash";
11058 	      goto get_vma;
11059 	    case DT_STRTAB:
11060 	      name = ".dynstr";
11061 	      goto get_vma;
11062 	    case DT_SYMTAB:
11063 	      name = ".dynsym";
11064 	      goto get_vma;
11065 	    case DT_VERDEF:
11066 	      name = ".gnu.version_d";
11067 	      goto get_vma;
11068 	    case DT_VERNEED:
11069 	      name = ".gnu.version_r";
11070 	      goto get_vma;
11071 	    case DT_VERSYM:
11072 	      name = ".gnu.version";
11073 	    get_vma:
11074 	      o = bfd_get_section_by_name (abfd, name);
11075 	      if (o == NULL)
11076 		{
11077 		  (*_bfd_error_handler)
11078 		    (_("%B: could not find output section %s"), abfd, name);
11079 		  goto error_return;
11080 		}
11081 	      dyn.d_un.d_ptr = o->vma;
11082 	      break;
11083 
11084 	    case DT_REL:
11085 	    case DT_RELA:
11086 	    case DT_RELSZ:
11087 	    case DT_RELASZ:
11088 	      if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
11089 		type = SHT_REL;
11090 	      else
11091 		type = SHT_RELA;
11092 	      dyn.d_un.d_val = 0;
11093 	      dyn.d_un.d_ptr = 0;
11094 	      for (i = 1; i < elf_numsections (abfd); i++)
11095 		{
11096 		  Elf_Internal_Shdr *hdr;
11097 
11098 		  hdr = elf_elfsections (abfd)[i];
11099 		  if (hdr->sh_type == type
11100 		      && (hdr->sh_flags & SHF_ALLOC) != 0)
11101 		    {
11102 		      if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
11103 			dyn.d_un.d_val += hdr->sh_size;
11104 		      else
11105 			{
11106 			  if (dyn.d_un.d_ptr == 0
11107 			      || hdr->sh_addr < dyn.d_un.d_ptr)
11108 			    dyn.d_un.d_ptr = hdr->sh_addr;
11109 			}
11110 		    }
11111 		}
11112 	      break;
11113 	    }
11114 	  bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
11115 	}
11116     }
11117 
11118   /* If we have created any dynamic sections, then output them.  */
11119   if (dynobj != NULL)
11120     {
11121       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
11122 	goto error_return;
11123 
11124       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
11125       if (info->warn_shared_textrel && info->shared)
11126 	{
11127 	  bfd_byte *dyncon, *dynconend;
11128 
11129 	  /* Fix up .dynamic entries.  */
11130 	  o = bfd_get_section_by_name (dynobj, ".dynamic");
11131 	  BFD_ASSERT (o != NULL);
11132 
11133 	  dyncon = o->contents;
11134 	  dynconend = o->contents + o->size;
11135 	  for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
11136 	    {
11137 	      Elf_Internal_Dyn dyn;
11138 
11139 	      bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
11140 
11141 	      if (dyn.d_tag == DT_TEXTREL)
11142 		{
11143 		 info->callbacks->einfo
11144 		    (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
11145 		  break;
11146 		}
11147 	    }
11148 	}
11149 
11150       for (o = dynobj->sections; o != NULL; o = o->next)
11151 	{
11152 	  if ((o->flags & SEC_HAS_CONTENTS) == 0
11153 	      || o->size == 0
11154 	      || o->output_section == bfd_abs_section_ptr)
11155 	    continue;
11156 	  if ((o->flags & SEC_LINKER_CREATED) == 0)
11157 	    {
11158 	      /* At this point, we are only interested in sections
11159 		 created by _bfd_elf_link_create_dynamic_sections.  */
11160 	      continue;
11161 	    }
11162 	  if (elf_hash_table (info)->stab_info.stabstr == o)
11163 	    continue;
11164 	  if (elf_hash_table (info)->eh_info.hdr_sec == o)
11165 	    continue;
11166 	  if ((elf_section_data (o->output_section)->this_hdr.sh_type
11167 	       != SHT_STRTAB)
11168 	      || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
11169 	    {
11170 	      /* FIXME: octets_per_byte.  */
11171 	      if (! bfd_set_section_contents (abfd, o->output_section,
11172 					      o->contents,
11173 					      (file_ptr) o->output_offset,
11174 					      o->size))
11175 		goto error_return;
11176 	    }
11177 	  else
11178 	    {
11179 	      /* The contents of the .dynstr section are actually in a
11180 		 stringtab.  */
11181 	      off = elf_section_data (o->output_section)->this_hdr.sh_offset;
11182 	      if (bfd_seek (abfd, off, SEEK_SET) != 0
11183 		  || ! _bfd_elf_strtab_emit (abfd,
11184 					     elf_hash_table (info)->dynstr))
11185 		goto error_return;
11186 	    }
11187 	}
11188     }
11189 
11190   if (info->relocatable)
11191     {
11192       bfd_boolean failed = FALSE;
11193 
11194       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
11195       if (failed)
11196 	goto error_return;
11197     }
11198 
11199   /* If we have optimized stabs strings, output them.  */
11200   if (elf_hash_table (info)->stab_info.stabstr != NULL)
11201     {
11202       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
11203 	goto error_return;
11204     }
11205 
11206   if (info->eh_frame_hdr)
11207     {
11208       if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
11209 	goto error_return;
11210     }
11211 
11212   if (finfo.symstrtab != NULL)
11213     _bfd_stringtab_free (finfo.symstrtab);
11214   if (finfo.contents != NULL)
11215     free (finfo.contents);
11216   if (finfo.external_relocs != NULL)
11217     free (finfo.external_relocs);
11218   if (finfo.internal_relocs != NULL)
11219     free (finfo.internal_relocs);
11220   if (finfo.external_syms != NULL)
11221     free (finfo.external_syms);
11222   if (finfo.locsym_shndx != NULL)
11223     free (finfo.locsym_shndx);
11224   if (finfo.internal_syms != NULL)
11225     free (finfo.internal_syms);
11226   if (finfo.indices != NULL)
11227     free (finfo.indices);
11228   if (finfo.sections != NULL)
11229     free (finfo.sections);
11230   if (finfo.symbuf != NULL)
11231     free (finfo.symbuf);
11232   if (finfo.symshndxbuf != NULL)
11233     free (finfo.symshndxbuf);
11234   for (o = abfd->sections; o != NULL; o = o->next)
11235     {
11236       struct bfd_elf_section_data *esdo = elf_section_data (o);
11237       if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL)
11238 	free (esdo->rel.hashes);
11239       if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL)
11240 	free (esdo->rela.hashes);
11241     }
11242 
11243   elf_tdata (abfd)->linker = TRUE;
11244 
11245   if (attr_section)
11246     {
11247       bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
11248       if (contents == NULL)
11249 	return FALSE;	/* Bail out and fail.  */
11250       bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
11251       bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
11252       free (contents);
11253     }
11254 
11255   return TRUE;
11256 
11257  error_return:
11258   if (finfo.symstrtab != NULL)
11259     _bfd_stringtab_free (finfo.symstrtab);
11260   if (finfo.contents != NULL)
11261     free (finfo.contents);
11262   if (finfo.external_relocs != NULL)
11263     free (finfo.external_relocs);
11264   if (finfo.internal_relocs != NULL)
11265     free (finfo.internal_relocs);
11266   if (finfo.external_syms != NULL)
11267     free (finfo.external_syms);
11268   if (finfo.locsym_shndx != NULL)
11269     free (finfo.locsym_shndx);
11270   if (finfo.internal_syms != NULL)
11271     free (finfo.internal_syms);
11272   if (finfo.indices != NULL)
11273     free (finfo.indices);
11274   if (finfo.sections != NULL)
11275     free (finfo.sections);
11276   if (finfo.symbuf != NULL)
11277     free (finfo.symbuf);
11278   if (finfo.symshndxbuf != NULL)
11279     free (finfo.symshndxbuf);
11280   for (o = abfd->sections; o != NULL; o = o->next)
11281     {
11282       struct bfd_elf_section_data *esdo = elf_section_data (o);
11283       if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL)
11284 	free (esdo->rel.hashes);
11285       if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL)
11286 	free (esdo->rela.hashes);
11287     }
11288 
11289   return FALSE;
11290 }
11291 
11292 /* Initialize COOKIE for input bfd ABFD.  */
11293 
11294 static bfd_boolean
11295 init_reloc_cookie (struct elf_reloc_cookie *cookie,
11296 		   struct bfd_link_info *info, bfd *abfd)
11297 {
11298   Elf_Internal_Shdr *symtab_hdr;
11299   const struct elf_backend_data *bed;
11300 
11301   bed = get_elf_backend_data (abfd);
11302   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11303 
11304   cookie->abfd = abfd;
11305   cookie->sym_hashes = elf_sym_hashes (abfd);
11306   cookie->bad_symtab = elf_bad_symtab (abfd);
11307   if (cookie->bad_symtab)
11308     {
11309       cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
11310       cookie->extsymoff = 0;
11311     }
11312   else
11313     {
11314       cookie->locsymcount = symtab_hdr->sh_info;
11315       cookie->extsymoff = symtab_hdr->sh_info;
11316     }
11317 
11318   if (bed->s->arch_size == 32)
11319     cookie->r_sym_shift = 8;
11320   else
11321     cookie->r_sym_shift = 32;
11322 
11323   cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
11324   if (cookie->locsyms == NULL && cookie->locsymcount != 0)
11325     {
11326       cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
11327 					      cookie->locsymcount, 0,
11328 					      NULL, NULL, NULL);
11329       if (cookie->locsyms == NULL)
11330 	{
11331 	  info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
11332 	  return FALSE;
11333 	}
11334       if (info->keep_memory)
11335 	symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
11336     }
11337   return TRUE;
11338 }
11339 
11340 /* Free the memory allocated by init_reloc_cookie, if appropriate.  */
11341 
11342 static void
11343 fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd)
11344 {
11345   Elf_Internal_Shdr *symtab_hdr;
11346 
11347   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11348   if (cookie->locsyms != NULL
11349       && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
11350     free (cookie->locsyms);
11351 }
11352 
11353 /* Initialize the relocation information in COOKIE for input section SEC
11354    of input bfd ABFD.  */
11355 
11356 static bfd_boolean
11357 init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11358 			struct bfd_link_info *info, bfd *abfd,
11359 			asection *sec)
11360 {
11361   const struct elf_backend_data *bed;
11362 
11363   if (sec->reloc_count == 0)
11364     {
11365       cookie->rels = NULL;
11366       cookie->relend = NULL;
11367     }
11368   else
11369     {
11370       bed = get_elf_backend_data (abfd);
11371 
11372       cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
11373 						info->keep_memory);
11374       if (cookie->rels == NULL)
11375 	return FALSE;
11376       cookie->rel = cookie->rels;
11377       cookie->relend = (cookie->rels
11378 			+ sec->reloc_count * bed->s->int_rels_per_ext_rel);
11379     }
11380   cookie->rel = cookie->rels;
11381   return TRUE;
11382 }
11383 
11384 /* Free the memory allocated by init_reloc_cookie_rels,
11385    if appropriate.  */
11386 
11387 static void
11388 fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11389 			asection *sec)
11390 {
11391   if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
11392     free (cookie->rels);
11393 }
11394 
11395 /* Initialize the whole of COOKIE for input section SEC.  */
11396 
11397 static bfd_boolean
11398 init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11399 			       struct bfd_link_info *info,
11400 			       asection *sec)
11401 {
11402   if (!init_reloc_cookie (cookie, info, sec->owner))
11403     goto error1;
11404   if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
11405     goto error2;
11406   return TRUE;
11407 
11408  error2:
11409   fini_reloc_cookie (cookie, sec->owner);
11410  error1:
11411   return FALSE;
11412 }
11413 
11414 /* Free the memory allocated by init_reloc_cookie_for_section,
11415    if appropriate.  */
11416 
11417 static void
11418 fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11419 			       asection *sec)
11420 {
11421   fini_reloc_cookie_rels (cookie, sec);
11422   fini_reloc_cookie (cookie, sec->owner);
11423 }
11424 
11425 /* Garbage collect unused sections.  */
11426 
11427 /* Default gc_mark_hook.  */
11428 
11429 asection *
11430 _bfd_elf_gc_mark_hook (asection *sec,
11431 		       struct bfd_link_info *info ATTRIBUTE_UNUSED,
11432 		       Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
11433 		       struct elf_link_hash_entry *h,
11434 		       Elf_Internal_Sym *sym)
11435 {
11436   const char *sec_name;
11437 
11438   if (h != NULL)
11439     {
11440       switch (h->root.type)
11441 	{
11442 	case bfd_link_hash_defined:
11443 	case bfd_link_hash_defweak:
11444 	  return h->root.u.def.section;
11445 
11446 	case bfd_link_hash_common:
11447 	  return h->root.u.c.p->section;
11448 
11449 	case bfd_link_hash_undefined:
11450 	case bfd_link_hash_undefweak:
11451 	  /* To work around a glibc bug, keep all XXX input sections
11452 	     when there is an as yet undefined reference to __start_XXX
11453 	     or __stop_XXX symbols.  The linker will later define such
11454 	     symbols for orphan input sections that have a name
11455 	     representable as a C identifier.  */
11456 	  if (strncmp (h->root.root.string, "__start_", 8) == 0)
11457 	    sec_name = h->root.root.string + 8;
11458 	  else if (strncmp (h->root.root.string, "__stop_", 7) == 0)
11459 	    sec_name = h->root.root.string + 7;
11460 	  else
11461 	    sec_name = NULL;
11462 
11463 	  if (sec_name && *sec_name != '\0')
11464 	    {
11465 	      bfd *i;
11466 
11467 	      for (i = info->input_bfds; i; i = i->link_next)
11468 		{
11469 		  sec = bfd_get_section_by_name (i, sec_name);
11470 		  if (sec)
11471 		    sec->flags |= SEC_KEEP;
11472 		}
11473 	    }
11474 	  break;
11475 
11476 	default:
11477 	  break;
11478 	}
11479     }
11480   else
11481     return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
11482 
11483   return NULL;
11484 }
11485 
11486 /* COOKIE->rel describes a relocation against section SEC, which is
11487    a section we've decided to keep.  Return the section that contains
11488    the relocation symbol, or NULL if no section contains it.  */
11489 
11490 asection *
11491 _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
11492 		       elf_gc_mark_hook_fn gc_mark_hook,
11493 		       struct elf_reloc_cookie *cookie)
11494 {
11495   unsigned long r_symndx;
11496   struct elf_link_hash_entry *h;
11497 
11498   r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
11499   if (r_symndx == STN_UNDEF)
11500     return NULL;
11501 
11502   if (r_symndx >= cookie->locsymcount
11503       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
11504     {
11505       h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
11506       while (h->root.type == bfd_link_hash_indirect
11507 	     || h->root.type == bfd_link_hash_warning)
11508 	h = (struct elf_link_hash_entry *) h->root.u.i.link;
11509       return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
11510     }
11511 
11512   return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
11513 			  &cookie->locsyms[r_symndx]);
11514 }
11515 
11516 /* COOKIE->rel describes a relocation against section SEC, which is
11517    a section we've decided to keep.  Mark the section that contains
11518    the relocation symbol.  */
11519 
11520 bfd_boolean
11521 _bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
11522 			asection *sec,
11523 			elf_gc_mark_hook_fn gc_mark_hook,
11524 			struct elf_reloc_cookie *cookie)
11525 {
11526   asection *rsec;
11527 
11528   rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie);
11529   if (rsec && !rsec->gc_mark)
11530     {
11531       if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour)
11532 	rsec->gc_mark = 1;
11533       else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
11534 	return FALSE;
11535     }
11536   return TRUE;
11537 }
11538 
11539 /* The mark phase of garbage collection.  For a given section, mark
11540    it and any sections in this section's group, and all the sections
11541    which define symbols to which it refers.  */
11542 
11543 bfd_boolean
11544 _bfd_elf_gc_mark (struct bfd_link_info *info,
11545 		  asection *sec,
11546 		  elf_gc_mark_hook_fn gc_mark_hook)
11547 {
11548   bfd_boolean ret;
11549   asection *group_sec, *eh_frame;
11550 
11551   sec->gc_mark = 1;
11552 
11553   /* Mark all the sections in the group.  */
11554   group_sec = elf_section_data (sec)->next_in_group;
11555   if (group_sec && !group_sec->gc_mark)
11556     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
11557       return FALSE;
11558 
11559   /* Look through the section relocs.  */
11560   ret = TRUE;
11561   eh_frame = elf_eh_frame_section (sec->owner);
11562   if ((sec->flags & SEC_RELOC) != 0
11563       && sec->reloc_count > 0
11564       && sec != eh_frame)
11565     {
11566       struct elf_reloc_cookie cookie;
11567 
11568       if (!init_reloc_cookie_for_section (&cookie, info, sec))
11569 	ret = FALSE;
11570       else
11571 	{
11572 	  for (; cookie.rel < cookie.relend; cookie.rel++)
11573 	    if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
11574 	      {
11575 		ret = FALSE;
11576 		break;
11577 	      }
11578 	  fini_reloc_cookie_for_section (&cookie, sec);
11579 	}
11580     }
11581 
11582   if (ret && eh_frame && elf_fde_list (sec))
11583     {
11584       struct elf_reloc_cookie cookie;
11585 
11586       if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
11587 	ret = FALSE;
11588       else
11589 	{
11590 	  if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
11591 				      gc_mark_hook, &cookie))
11592 	    ret = FALSE;
11593 	  fini_reloc_cookie_for_section (&cookie, eh_frame);
11594 	}
11595     }
11596 
11597   return ret;
11598 }
11599 
11600 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
11601 
11602 struct elf_gc_sweep_symbol_info
11603 {
11604   struct bfd_link_info *info;
11605   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
11606 		       bfd_boolean);
11607 };
11608 
11609 static bfd_boolean
11610 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
11611 {
11612   if (h->root.type == bfd_link_hash_warning)
11613     h = (struct elf_link_hash_entry *) h->root.u.i.link;
11614 
11615   if ((h->root.type == bfd_link_hash_defined
11616        || h->root.type == bfd_link_hash_defweak)
11617       && !h->root.u.def.section->gc_mark
11618       && !(h->root.u.def.section->owner->flags & DYNAMIC))
11619     {
11620       struct elf_gc_sweep_symbol_info *inf =
11621           (struct elf_gc_sweep_symbol_info *) data;
11622       (*inf->hide_symbol) (inf->info, h, TRUE);
11623     }
11624 
11625   return TRUE;
11626 }
11627 
11628 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
11629 
11630 typedef bfd_boolean (*gc_sweep_hook_fn)
11631   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
11632 
11633 static bfd_boolean
11634 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
11635 {
11636   bfd *sub;
11637   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11638   gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook;
11639   unsigned long section_sym_count;
11640   struct elf_gc_sweep_symbol_info sweep_info;
11641 
11642   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
11643     {
11644       asection *o;
11645 
11646       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
11647 	continue;
11648 
11649       for (o = sub->sections; o != NULL; o = o->next)
11650 	{
11651 	  /* When any section in a section group is kept, we keep all
11652 	     sections in the section group.  If the first member of
11653 	     the section group is excluded, we will also exclude the
11654 	     group section.  */
11655 	  if (o->flags & SEC_GROUP)
11656 	    {
11657 	      asection *first = elf_next_in_group (o);
11658 	      o->gc_mark = first->gc_mark;
11659 	    }
11660 	  else if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0
11661 		   || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0
11662 		   || elf_section_data (o)->this_hdr.sh_type == SHT_NOTE)
11663 	    {
11664 	      /* Keep debug, special and SHT_NOTE sections.  */
11665 	      o->gc_mark = 1;
11666 	    }
11667 
11668 	  if (o->gc_mark)
11669 	    continue;
11670 
11671 	  /* Skip sweeping sections already excluded.  */
11672 	  if (o->flags & SEC_EXCLUDE)
11673 	    continue;
11674 
11675 	  /* Since this is early in the link process, it is simple
11676 	     to remove a section from the output.  */
11677 	  o->flags |= SEC_EXCLUDE;
11678 
11679 	  if (info->print_gc_sections && o->size != 0)
11680 	    _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), sub, o->name);
11681 
11682 	  /* But we also have to update some of the relocation
11683 	     info we collected before.  */
11684 	  if (gc_sweep_hook
11685 	      && (o->flags & SEC_RELOC) != 0
11686 	      && o->reloc_count > 0
11687 	      && !bfd_is_abs_section (o->output_section))
11688 	    {
11689 	      Elf_Internal_Rela *internal_relocs;
11690 	      bfd_boolean r;
11691 
11692 	      internal_relocs
11693 		= _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
11694 					     info->keep_memory);
11695 	      if (internal_relocs == NULL)
11696 		return FALSE;
11697 
11698 	      r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
11699 
11700 	      if (elf_section_data (o)->relocs != internal_relocs)
11701 		free (internal_relocs);
11702 
11703 	      if (!r)
11704 		return FALSE;
11705 	    }
11706 	}
11707     }
11708 
11709   /* Remove the symbols that were in the swept sections from the dynamic
11710      symbol table.  GCFIXME: Anyone know how to get them out of the
11711      static symbol table as well?  */
11712   sweep_info.info = info;
11713   sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
11714   elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
11715 			  &sweep_info);
11716 
11717   _bfd_elf_link_renumber_dynsyms (abfd, info, &section_sym_count);
11718   return TRUE;
11719 }
11720 
11721 /* Propagate collected vtable information.  This is called through
11722    elf_link_hash_traverse.  */
11723 
11724 static bfd_boolean
11725 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
11726 {
11727   if (h->root.type == bfd_link_hash_warning)
11728     h = (struct elf_link_hash_entry *) h->root.u.i.link;
11729 
11730   /* Those that are not vtables.  */
11731   if (h->vtable == NULL || h->vtable->parent == NULL)
11732     return TRUE;
11733 
11734   /* Those vtables that do not have parents, we cannot merge.  */
11735   if (h->vtable->parent == (struct elf_link_hash_entry *) -1)
11736     return TRUE;
11737 
11738   /* If we've already been done, exit.  */
11739   if (h->vtable->used && h->vtable->used[-1])
11740     return TRUE;
11741 
11742   /* Make sure the parent's table is up to date.  */
11743   elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp);
11744 
11745   if (h->vtable->used == NULL)
11746     {
11747       /* None of this table's entries were referenced.  Re-use the
11748 	 parent's table.  */
11749       h->vtable->used = h->vtable->parent->vtable->used;
11750       h->vtable->size = h->vtable->parent->vtable->size;
11751     }
11752   else
11753     {
11754       size_t n;
11755       bfd_boolean *cu, *pu;
11756 
11757       /* Or the parent's entries into ours.  */
11758       cu = h->vtable->used;
11759       cu[-1] = TRUE;
11760       pu = h->vtable->parent->vtable->used;
11761       if (pu != NULL)
11762 	{
11763 	  const struct elf_backend_data *bed;
11764 	  unsigned int log_file_align;
11765 
11766 	  bed = get_elf_backend_data (h->root.u.def.section->owner);
11767 	  log_file_align = bed->s->log_file_align;
11768 	  n = h->vtable->parent->vtable->size >> log_file_align;
11769 	  while (n--)
11770 	    {
11771 	      if (*pu)
11772 		*cu = TRUE;
11773 	      pu++;
11774 	      cu++;
11775 	    }
11776 	}
11777     }
11778 
11779   return TRUE;
11780 }
11781 
11782 static bfd_boolean
11783 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
11784 {
11785   asection *sec;
11786   bfd_vma hstart, hend;
11787   Elf_Internal_Rela *relstart, *relend, *rel;
11788   const struct elf_backend_data *bed;
11789   unsigned int log_file_align;
11790 
11791   if (h->root.type == bfd_link_hash_warning)
11792     h = (struct elf_link_hash_entry *) h->root.u.i.link;
11793 
11794   /* Take care of both those symbols that do not describe vtables as
11795      well as those that are not loaded.  */
11796   if (h->vtable == NULL || h->vtable->parent == NULL)
11797     return TRUE;
11798 
11799   BFD_ASSERT (h->root.type == bfd_link_hash_defined
11800 	      || h->root.type == bfd_link_hash_defweak);
11801 
11802   sec = h->root.u.def.section;
11803   hstart = h->root.u.def.value;
11804   hend = hstart + h->size;
11805 
11806   relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
11807   if (!relstart)
11808     return *(bfd_boolean *) okp = FALSE;
11809   bed = get_elf_backend_data (sec->owner);
11810   log_file_align = bed->s->log_file_align;
11811 
11812   relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
11813 
11814   for (rel = relstart; rel < relend; ++rel)
11815     if (rel->r_offset >= hstart && rel->r_offset < hend)
11816       {
11817 	/* If the entry is in use, do nothing.  */
11818 	if (h->vtable->used
11819 	    && (rel->r_offset - hstart) < h->vtable->size)
11820 	  {
11821 	    bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
11822 	    if (h->vtable->used[entry])
11823 	      continue;
11824 	  }
11825 	/* Otherwise, kill it.  */
11826 	rel->r_offset = rel->r_info = rel->r_addend = 0;
11827       }
11828 
11829   return TRUE;
11830 }
11831 
11832 /* Mark sections containing dynamically referenced symbols.  When
11833    building shared libraries, we must assume that any visible symbol is
11834    referenced.  */
11835 
11836 bfd_boolean
11837 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
11838 {
11839   struct bfd_link_info *info = (struct bfd_link_info *) inf;
11840 
11841   if (h->root.type == bfd_link_hash_warning)
11842     h = (struct elf_link_hash_entry *) h->root.u.i.link;
11843 
11844   if ((h->root.type == bfd_link_hash_defined
11845        || h->root.type == bfd_link_hash_defweak)
11846       && (h->ref_dynamic
11847 	  || (!info->executable
11848 	      && h->def_regular
11849 	      && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
11850 	      && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN)))
11851     h->root.u.def.section->flags |= SEC_KEEP;
11852 
11853   return TRUE;
11854 }
11855 
11856 /* Keep all sections containing symbols undefined on the command-line,
11857    and the section containing the entry symbol.  */
11858 
11859 void
11860 _bfd_elf_gc_keep (struct bfd_link_info *info)
11861 {
11862   struct bfd_sym_chain *sym;
11863 
11864   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
11865     {
11866       struct elf_link_hash_entry *h;
11867 
11868       h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
11869 				FALSE, FALSE, FALSE);
11870 
11871       if (h != NULL
11872 	  && (h->root.type == bfd_link_hash_defined
11873 	      || h->root.type == bfd_link_hash_defweak)
11874 	  && !bfd_is_abs_section (h->root.u.def.section))
11875 	h->root.u.def.section->flags |= SEC_KEEP;
11876     }
11877 }
11878 
11879 /* Do mark and sweep of unused sections.  */
11880 
11881 bfd_boolean
11882 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
11883 {
11884   bfd_boolean ok = TRUE;
11885   bfd *sub;
11886   elf_gc_mark_hook_fn gc_mark_hook;
11887   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11888 
11889   if (!bed->can_gc_sections
11890       || !is_elf_hash_table (info->hash))
11891     {
11892       (*_bfd_error_handler)(_("Warning: gc-sections option ignored"));
11893       return TRUE;
11894     }
11895 
11896   bed->gc_keep (info);
11897 
11898   /* Try to parse each bfd's .eh_frame section.  Point elf_eh_frame_section
11899      at the .eh_frame section if we can mark the FDEs individually.  */
11900   _bfd_elf_begin_eh_frame_parsing (info);
11901   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
11902     {
11903       asection *sec;
11904       struct elf_reloc_cookie cookie;
11905 
11906       sec = bfd_get_section_by_name (sub, ".eh_frame");
11907       if (sec && init_reloc_cookie_for_section (&cookie, info, sec))
11908 	{
11909 	  _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
11910 	  if (elf_section_data (sec)->sec_info)
11911 	    elf_eh_frame_section (sub) = sec;
11912 	  fini_reloc_cookie_for_section (&cookie, sec);
11913 	}
11914     }
11915   _bfd_elf_end_eh_frame_parsing (info);
11916 
11917   /* Apply transitive closure to the vtable entry usage info.  */
11918   elf_link_hash_traverse (elf_hash_table (info),
11919 			  elf_gc_propagate_vtable_entries_used,
11920 			  &ok);
11921   if (!ok)
11922     return FALSE;
11923 
11924   /* Kill the vtable relocations that were not used.  */
11925   elf_link_hash_traverse (elf_hash_table (info),
11926 			  elf_gc_smash_unused_vtentry_relocs,
11927 			  &ok);
11928   if (!ok)
11929     return FALSE;
11930 
11931   /* Mark dynamically referenced symbols.  */
11932   if (elf_hash_table (info)->dynamic_sections_created)
11933     elf_link_hash_traverse (elf_hash_table (info),
11934 			    bed->gc_mark_dynamic_ref,
11935 			    info);
11936 
11937   /* Grovel through relocs to find out who stays ...  */
11938   gc_mark_hook = bed->gc_mark_hook;
11939   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
11940     {
11941       asection *o;
11942 
11943       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
11944 	continue;
11945 
11946       for (o = sub->sections; o != NULL; o = o->next)
11947 	if ((o->flags & (SEC_EXCLUDE | SEC_KEEP)) == SEC_KEEP && !o->gc_mark)
11948 	  if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
11949 	    return FALSE;
11950     }
11951 
11952   /* Allow the backend to mark additional target specific sections.  */
11953   if (bed->gc_mark_extra_sections)
11954     bed->gc_mark_extra_sections (info, gc_mark_hook);
11955 
11956   /* ... and mark SEC_EXCLUDE for those that go.  */
11957   return elf_gc_sweep (abfd, info);
11958 }
11959 
11960 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
11961 
11962 bfd_boolean
11963 bfd_elf_gc_record_vtinherit (bfd *abfd,
11964 			     asection *sec,
11965 			     struct elf_link_hash_entry *h,
11966 			     bfd_vma offset)
11967 {
11968   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
11969   struct elf_link_hash_entry **search, *child;
11970   bfd_size_type extsymcount;
11971   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11972 
11973   /* The sh_info field of the symtab header tells us where the
11974      external symbols start.  We don't care about the local symbols at
11975      this point.  */
11976   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
11977   if (!elf_bad_symtab (abfd))
11978     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
11979 
11980   sym_hashes = elf_sym_hashes (abfd);
11981   sym_hashes_end = sym_hashes + extsymcount;
11982 
11983   /* Hunt down the child symbol, which is in this section at the same
11984      offset as the relocation.  */
11985   for (search = sym_hashes; search != sym_hashes_end; ++search)
11986     {
11987       if ((child = *search) != NULL
11988 	  && (child->root.type == bfd_link_hash_defined
11989 	      || child->root.type == bfd_link_hash_defweak)
11990 	  && child->root.u.def.section == sec
11991 	  && child->root.u.def.value == offset)
11992 	goto win;
11993     }
11994 
11995   (*_bfd_error_handler) ("%B: %A+%lu: No symbol found for INHERIT",
11996 			 abfd, sec, (unsigned long) offset);
11997   bfd_set_error (bfd_error_invalid_operation);
11998   return FALSE;
11999 
12000  win:
12001   if (!child->vtable)
12002     {
12003       child->vtable = (struct elf_link_virtual_table_entry *)
12004           bfd_zalloc (abfd, sizeof (*child->vtable));
12005       if (!child->vtable)
12006 	return FALSE;
12007     }
12008   if (!h)
12009     {
12010       /* This *should* only be the absolute section.  It could potentially
12011 	 be that someone has defined a non-global vtable though, which
12012 	 would be bad.  It isn't worth paging in the local symbols to be
12013 	 sure though; that case should simply be handled by the assembler.  */
12014 
12015       child->vtable->parent = (struct elf_link_hash_entry *) -1;
12016     }
12017   else
12018     child->vtable->parent = h;
12019 
12020   return TRUE;
12021 }
12022 
12023 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
12024 
12025 bfd_boolean
12026 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
12027 			   asection *sec ATTRIBUTE_UNUSED,
12028 			   struct elf_link_hash_entry *h,
12029 			   bfd_vma addend)
12030 {
12031   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12032   unsigned int log_file_align = bed->s->log_file_align;
12033 
12034   if (!h->vtable)
12035     {
12036       h->vtable = (struct elf_link_virtual_table_entry *)
12037           bfd_zalloc (abfd, sizeof (*h->vtable));
12038       if (!h->vtable)
12039 	return FALSE;
12040     }
12041 
12042   if (addend >= h->vtable->size)
12043     {
12044       size_t size, bytes, file_align;
12045       bfd_boolean *ptr = h->vtable->used;
12046 
12047       /* While the symbol is undefined, we have to be prepared to handle
12048 	 a zero size.  */
12049       file_align = 1 << log_file_align;
12050       if (h->root.type == bfd_link_hash_undefined)
12051 	size = addend + file_align;
12052       else
12053 	{
12054 	  size = h->size;
12055 	  if (addend >= size)
12056 	    {
12057 	      /* Oops!  We've got a reference past the defined end of
12058 		 the table.  This is probably a bug -- shall we warn?  */
12059 	      size = addend + file_align;
12060 	    }
12061 	}
12062       size = (size + file_align - 1) & -file_align;
12063 
12064       /* Allocate one extra entry for use as a "done" flag for the
12065 	 consolidation pass.  */
12066       bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
12067 
12068       if (ptr)
12069 	{
12070 	  ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
12071 
12072 	  if (ptr != NULL)
12073 	    {
12074 	      size_t oldbytes;
12075 
12076 	      oldbytes = (((h->vtable->size >> log_file_align) + 1)
12077 			  * sizeof (bfd_boolean));
12078 	      memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
12079 	    }
12080 	}
12081       else
12082 	ptr = (bfd_boolean *) bfd_zmalloc (bytes);
12083 
12084       if (ptr == NULL)
12085 	return FALSE;
12086 
12087       /* And arrange for that done flag to be at index -1.  */
12088       h->vtable->used = ptr + 1;
12089       h->vtable->size = size;
12090     }
12091 
12092   h->vtable->used[addend >> log_file_align] = TRUE;
12093 
12094   return TRUE;
12095 }
12096 
12097 struct alloc_got_off_arg {
12098   bfd_vma gotoff;
12099   struct bfd_link_info *info;
12100 };
12101 
12102 /* We need a special top-level link routine to convert got reference counts
12103    to real got offsets.  */
12104 
12105 static bfd_boolean
12106 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
12107 {
12108   struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
12109   bfd *obfd = gofarg->info->output_bfd;
12110   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
12111 
12112   if (h->root.type == bfd_link_hash_warning)
12113     h = (struct elf_link_hash_entry *) h->root.u.i.link;
12114 
12115   if (h->got.refcount > 0)
12116     {
12117       h->got.offset = gofarg->gotoff;
12118       gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0);
12119     }
12120   else
12121     h->got.offset = (bfd_vma) -1;
12122 
12123   return TRUE;
12124 }
12125 
12126 /* And an accompanying bit to work out final got entry offsets once
12127    we're done.  Should be called from final_link.  */
12128 
12129 bfd_boolean
12130 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
12131 					struct bfd_link_info *info)
12132 {
12133   bfd *i;
12134   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12135   bfd_vma gotoff;
12136   struct alloc_got_off_arg gofarg;
12137 
12138   BFD_ASSERT (abfd == info->output_bfd);
12139 
12140   if (! is_elf_hash_table (info->hash))
12141     return FALSE;
12142 
12143   /* The GOT offset is relative to the .got section, but the GOT header is
12144      put into the .got.plt section, if the backend uses it.  */
12145   if (bed->want_got_plt)
12146     gotoff = 0;
12147   else
12148     gotoff = bed->got_header_size;
12149 
12150   /* Do the local .got entries first.  */
12151   for (i = info->input_bfds; i; i = i->link_next)
12152     {
12153       bfd_signed_vma *local_got;
12154       bfd_size_type j, locsymcount;
12155       Elf_Internal_Shdr *symtab_hdr;
12156 
12157       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
12158 	continue;
12159 
12160       local_got = elf_local_got_refcounts (i);
12161       if (!local_got)
12162 	continue;
12163 
12164       symtab_hdr = &elf_tdata (i)->symtab_hdr;
12165       if (elf_bad_symtab (i))
12166 	locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
12167       else
12168 	locsymcount = symtab_hdr->sh_info;
12169 
12170       for (j = 0; j < locsymcount; ++j)
12171 	{
12172 	  if (local_got[j] > 0)
12173 	    {
12174 	      local_got[j] = gotoff;
12175 	      gotoff += bed->got_elt_size (abfd, info, NULL, i, j);
12176 	    }
12177 	  else
12178 	    local_got[j] = (bfd_vma) -1;
12179 	}
12180     }
12181 
12182   /* Then the global .got entries.  .plt refcounts are handled by
12183      adjust_dynamic_symbol  */
12184   gofarg.gotoff = gotoff;
12185   gofarg.info = info;
12186   elf_link_hash_traverse (elf_hash_table (info),
12187 			  elf_gc_allocate_got_offsets,
12188 			  &gofarg);
12189   return TRUE;
12190 }
12191 
12192 /* Many folk need no more in the way of final link than this, once
12193    got entry reference counting is enabled.  */
12194 
12195 bfd_boolean
12196 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
12197 {
12198   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
12199     return FALSE;
12200 
12201   /* Invoke the regular ELF backend linker to do all the work.  */
12202   return bfd_elf_final_link (abfd, info);
12203 }
12204 
12205 bfd_boolean
12206 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
12207 {
12208   struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
12209 
12210   if (rcookie->bad_symtab)
12211     rcookie->rel = rcookie->rels;
12212 
12213   for (; rcookie->rel < rcookie->relend; rcookie->rel++)
12214     {
12215       unsigned long r_symndx;
12216 
12217       if (! rcookie->bad_symtab)
12218 	if (rcookie->rel->r_offset > offset)
12219 	  return FALSE;
12220       if (rcookie->rel->r_offset != offset)
12221 	continue;
12222 
12223       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
12224       if (r_symndx == STN_UNDEF)
12225 	return TRUE;
12226 
12227       if (r_symndx >= rcookie->locsymcount
12228 	  || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
12229 	{
12230 	  struct elf_link_hash_entry *h;
12231 
12232 	  h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
12233 
12234 	  while (h->root.type == bfd_link_hash_indirect
12235 		 || h->root.type == bfd_link_hash_warning)
12236 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
12237 
12238 	  if ((h->root.type == bfd_link_hash_defined
12239 	       || h->root.type == bfd_link_hash_defweak)
12240 	      && elf_discarded_section (h->root.u.def.section))
12241 	    return TRUE;
12242 	  else
12243 	    return FALSE;
12244 	}
12245       else
12246 	{
12247 	  /* It's not a relocation against a global symbol,
12248 	     but it could be a relocation against a local
12249 	     symbol for a discarded section.  */
12250 	  asection *isec;
12251 	  Elf_Internal_Sym *isym;
12252 
12253 	  /* Need to: get the symbol; get the section.  */
12254 	  isym = &rcookie->locsyms[r_symndx];
12255 	  isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
12256 	  if (isec != NULL && elf_discarded_section (isec))
12257 	    return TRUE;
12258 	}
12259       return FALSE;
12260     }
12261   return FALSE;
12262 }
12263 
12264 /* Discard unneeded references to discarded sections.
12265    Returns TRUE if any section's size was changed.  */
12266 /* This function assumes that the relocations are in sorted order,
12267    which is true for all known assemblers.  */
12268 
12269 bfd_boolean
12270 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
12271 {
12272   struct elf_reloc_cookie cookie;
12273   asection *stab, *eh;
12274   const struct elf_backend_data *bed;
12275   bfd *abfd;
12276   bfd_boolean ret = FALSE;
12277 
12278   if (info->traditional_format
12279       || !is_elf_hash_table (info->hash))
12280     return FALSE;
12281 
12282   _bfd_elf_begin_eh_frame_parsing (info);
12283   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
12284     {
12285       if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
12286 	continue;
12287 
12288       bed = get_elf_backend_data (abfd);
12289 
12290       if ((abfd->flags & DYNAMIC) != 0)
12291 	continue;
12292 
12293       eh = NULL;
12294       if (!info->relocatable)
12295 	{
12296 	  eh = bfd_get_section_by_name (abfd, ".eh_frame");
12297 	  if (eh != NULL
12298 	      && (eh->size == 0
12299 		  || bfd_is_abs_section (eh->output_section)))
12300 	    eh = NULL;
12301 	}
12302 
12303       stab = bfd_get_section_by_name (abfd, ".stab");
12304       if (stab != NULL
12305 	  && (stab->size == 0
12306 	      || bfd_is_abs_section (stab->output_section)
12307 	      || stab->sec_info_type != ELF_INFO_TYPE_STABS))
12308 	stab = NULL;
12309 
12310       if (stab == NULL
12311 	  && eh == NULL
12312 	  && bed->elf_backend_discard_info == NULL)
12313 	continue;
12314 
12315       if (!init_reloc_cookie (&cookie, info, abfd))
12316 	return FALSE;
12317 
12318       if (stab != NULL
12319 	  && stab->reloc_count > 0
12320 	  && init_reloc_cookie_rels (&cookie, info, abfd, stab))
12321 	{
12322 	  if (_bfd_discard_section_stabs (abfd, stab,
12323 					  elf_section_data (stab)->sec_info,
12324 					  bfd_elf_reloc_symbol_deleted_p,
12325 					  &cookie))
12326 	    ret = TRUE;
12327 	  fini_reloc_cookie_rels (&cookie, stab);
12328 	}
12329 
12330       if (eh != NULL
12331 	  && init_reloc_cookie_rels (&cookie, info, abfd, eh))
12332 	{
12333 	  _bfd_elf_parse_eh_frame (abfd, info, eh, &cookie);
12334 	  if (_bfd_elf_discard_section_eh_frame (abfd, info, eh,
12335 						 bfd_elf_reloc_symbol_deleted_p,
12336 						 &cookie))
12337 	    ret = TRUE;
12338 	  fini_reloc_cookie_rels (&cookie, eh);
12339 	}
12340 
12341       if (bed->elf_backend_discard_info != NULL
12342 	  && (*bed->elf_backend_discard_info) (abfd, &cookie, info))
12343 	ret = TRUE;
12344 
12345       fini_reloc_cookie (&cookie, abfd);
12346     }
12347   _bfd_elf_end_eh_frame_parsing (info);
12348 
12349   if (info->eh_frame_hdr
12350       && !info->relocatable
12351       && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
12352     ret = TRUE;
12353 
12354   return ret;
12355 }
12356 
12357 /* For a SHT_GROUP section, return the group signature.  For other
12358    sections, return the normal section name.  */
12359 
12360 static const char *
12361 section_signature (asection *sec)
12362 {
12363   if ((sec->flags & SEC_GROUP) != 0
12364       && elf_next_in_group (sec) != NULL
12365       && elf_group_name (elf_next_in_group (sec)) != NULL)
12366     return elf_group_name (elf_next_in_group (sec));
12367   return sec->name;
12368 }
12369 
12370 void
12371 _bfd_elf_section_already_linked (bfd *abfd, asection *sec,
12372 				 struct bfd_link_info *info)
12373 {
12374   flagword flags;
12375   const char *name, *p;
12376   struct bfd_section_already_linked *l;
12377   struct bfd_section_already_linked_hash_entry *already_linked_list;
12378 
12379   if (sec->output_section == bfd_abs_section_ptr)
12380     return;
12381 
12382   flags = sec->flags;
12383 
12384   /* Return if it isn't a linkonce section.  A comdat group section
12385      also has SEC_LINK_ONCE set.  */
12386   if ((flags & SEC_LINK_ONCE) == 0)
12387     return;
12388 
12389   /* Don't put group member sections on our list of already linked
12390      sections.  They are handled as a group via their group section.  */
12391   if (elf_sec_group (sec) != NULL)
12392     return;
12393 
12394   /* FIXME: When doing a relocatable link, we may have trouble
12395      copying relocations in other sections that refer to local symbols
12396      in the section being discarded.  Those relocations will have to
12397      be converted somehow; as of this writing I'm not sure that any of
12398      the backends handle that correctly.
12399 
12400      It is tempting to instead not discard link once sections when
12401      doing a relocatable link (technically, they should be discarded
12402      whenever we are building constructors).  However, that fails,
12403      because the linker winds up combining all the link once sections
12404      into a single large link once section, which defeats the purpose
12405      of having link once sections in the first place.
12406 
12407      Also, not merging link once sections in a relocatable link
12408      causes trouble for MIPS ELF, which relies on link once semantics
12409      to handle the .reginfo section correctly.  */
12410 
12411   name = section_signature (sec);
12412 
12413   if (CONST_STRNEQ (name, ".gnu.linkonce.")
12414       && (p = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
12415     p++;
12416   else
12417     p = name;
12418 
12419   already_linked_list = bfd_section_already_linked_table_lookup (p);
12420 
12421   for (l = already_linked_list->entry; l != NULL; l = l->next)
12422     {
12423       /* We may have 2 different types of sections on the list: group
12424 	 sections and linkonce sections.  Match like sections.  */
12425       if ((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
12426 	  && strcmp (name, section_signature (l->sec)) == 0
12427 	  && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL)
12428 	{
12429 	  /* The section has already been linked.  See if we should
12430 	     issue a warning.  */
12431 	  switch (flags & SEC_LINK_DUPLICATES)
12432 	    {
12433 	    default:
12434 	      abort ();
12435 
12436 	    case SEC_LINK_DUPLICATES_DISCARD:
12437 	      break;
12438 
12439 	    case SEC_LINK_DUPLICATES_ONE_ONLY:
12440 	      (*_bfd_error_handler)
12441 		(_("%B: ignoring duplicate section `%A'"),
12442 		 abfd, sec);
12443 	      break;
12444 
12445 	    case SEC_LINK_DUPLICATES_SAME_SIZE:
12446 	      if (sec->size != l->sec->size)
12447 		(*_bfd_error_handler)
12448 		  (_("%B: duplicate section `%A' has different size"),
12449 		   abfd, sec);
12450 	      break;
12451 
12452 	    case SEC_LINK_DUPLICATES_SAME_CONTENTS:
12453 	      if (sec->size != l->sec->size)
12454 		(*_bfd_error_handler)
12455 		  (_("%B: duplicate section `%A' has different size"),
12456 		   abfd, sec);
12457 	      else if (sec->size != 0)
12458 		{
12459 		  bfd_byte *sec_contents, *l_sec_contents;
12460 
12461 		  if (!bfd_malloc_and_get_section (abfd, sec, &sec_contents))
12462 		    (*_bfd_error_handler)
12463 		      (_("%B: warning: could not read contents of section `%A'"),
12464 		       abfd, sec);
12465 		  else if (!bfd_malloc_and_get_section (l->sec->owner, l->sec,
12466 							&l_sec_contents))
12467 		    (*_bfd_error_handler)
12468 		      (_("%B: warning: could not read contents of section `%A'"),
12469 		       l->sec->owner, l->sec);
12470 		  else if (memcmp (sec_contents, l_sec_contents, sec->size) != 0)
12471 		    (*_bfd_error_handler)
12472 		      (_("%B: warning: duplicate section `%A' has different contents"),
12473 		       abfd, sec);
12474 
12475 		  if (sec_contents)
12476 		    free (sec_contents);
12477 		  if (l_sec_contents)
12478 		    free (l_sec_contents);
12479 		}
12480 	      break;
12481 	    }
12482 
12483 	  /* Set the output_section field so that lang_add_section
12484 	     does not create a lang_input_section structure for this
12485 	     section.  Since there might be a symbol in the section
12486 	     being discarded, we must retain a pointer to the section
12487 	     which we are really going to use.  */
12488 	  sec->output_section = bfd_abs_section_ptr;
12489 	  sec->kept_section = l->sec;
12490 
12491 	  if (flags & SEC_GROUP)
12492 	    {
12493 	      asection *first = elf_next_in_group (sec);
12494 	      asection *s = first;
12495 
12496 	      while (s != NULL)
12497 		{
12498 		  s->output_section = bfd_abs_section_ptr;
12499 		  /* Record which group discards it.  */
12500 		  s->kept_section = l->sec;
12501 		  s = elf_next_in_group (s);
12502 		  /* These lists are circular.  */
12503 		  if (s == first)
12504 		    break;
12505 		}
12506 	    }
12507 
12508 	  return;
12509 	}
12510     }
12511 
12512   /* A single member comdat group section may be discarded by a
12513      linkonce section and vice versa.  */
12514 
12515   if ((flags & SEC_GROUP) != 0)
12516     {
12517       asection *first = elf_next_in_group (sec);
12518 
12519       if (first != NULL && elf_next_in_group (first) == first)
12520 	/* Check this single member group against linkonce sections.  */
12521 	for (l = already_linked_list->entry; l != NULL; l = l->next)
12522 	  if ((l->sec->flags & SEC_GROUP) == 0
12523 	      && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL
12524 	      && bfd_elf_match_symbols_in_sections (l->sec, first, info))
12525 	    {
12526 	      first->output_section = bfd_abs_section_ptr;
12527 	      first->kept_section = l->sec;
12528 	      sec->output_section = bfd_abs_section_ptr;
12529 	      break;
12530 	    }
12531     }
12532   else
12533     /* Check this linkonce section against single member groups.  */
12534     for (l = already_linked_list->entry; l != NULL; l = l->next)
12535       if (l->sec->flags & SEC_GROUP)
12536 	{
12537 	  asection *first = elf_next_in_group (l->sec);
12538 
12539 	  if (first != NULL
12540 	      && elf_next_in_group (first) == first
12541 	      && bfd_elf_match_symbols_in_sections (first, sec, info))
12542 	    {
12543 	      sec->output_section = bfd_abs_section_ptr;
12544 	      sec->kept_section = first;
12545 	      break;
12546 	    }
12547 	}
12548 
12549   /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F'
12550      referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4
12551      specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce'
12552      prefix) instead.  `.gnu.linkonce.r.*' were the `.rodata' part of its
12553      matching `.gnu.linkonce.t.*'.  If `.gnu.linkonce.r.F' is not discarded
12554      but its `.gnu.linkonce.t.F' is discarded means we chose one-only
12555      `.gnu.linkonce.t.F' section from a different bfd not requiring any
12556      `.gnu.linkonce.r.F'.  Thus `.gnu.linkonce.r.F' should be discarded.
12557      The reverse order cannot happen as there is never a bfd with only the
12558      `.gnu.linkonce.r.F' section.  The order of sections in a bfd does not
12559      matter as here were are looking only for cross-bfd sections.  */
12560 
12561   if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
12562     for (l = already_linked_list->entry; l != NULL; l = l->next)
12563       if ((l->sec->flags & SEC_GROUP) == 0
12564 	  && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
12565 	{
12566 	  if (abfd != l->sec->owner)
12567 	    sec->output_section = bfd_abs_section_ptr;
12568 	  break;
12569 	}
12570 
12571   /* This is the first section with this name.  Record it.  */
12572   if (! bfd_section_already_linked_table_insert (already_linked_list, sec))
12573     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
12574 }
12575 
12576 bfd_boolean
12577 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
12578 {
12579   return sym->st_shndx == SHN_COMMON;
12580 }
12581 
12582 unsigned int
12583 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
12584 {
12585   return SHN_COMMON;
12586 }
12587 
12588 asection *
12589 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
12590 {
12591   return bfd_com_section_ptr;
12592 }
12593 
12594 bfd_vma
12595 _bfd_elf_default_got_elt_size (bfd *abfd,
12596 			       struct bfd_link_info *info ATTRIBUTE_UNUSED,
12597 			       struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
12598 			       bfd *ibfd ATTRIBUTE_UNUSED,
12599 			       unsigned long symndx ATTRIBUTE_UNUSED)
12600 {
12601   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12602   return bed->s->arch_size / 8;
12603 }
12604 
12605 /* Routines to support the creation of dynamic relocs.  */
12606 
12607 /* Returns the name of the dynamic reloc section associated with SEC.  */
12608 
12609 static const char *
12610 get_dynamic_reloc_section_name (bfd *       abfd,
12611 				asection *  sec,
12612 				bfd_boolean is_rela)
12613 {
12614   char *name;
12615   const char *old_name = bfd_get_section_name (NULL, sec);
12616   const char *prefix = is_rela ? ".rela" : ".rel";
12617 
12618   if (old_name == NULL)
12619     return NULL;
12620 
12621   name = bfd_alloc (abfd, strlen (prefix) + strlen (old_name) + 1);
12622   sprintf (name, "%s%s", prefix, old_name);
12623 
12624   return name;
12625 }
12626 
12627 /* Returns the dynamic reloc section associated with SEC.
12628    If necessary compute the name of the dynamic reloc section based
12629    on SEC's name (looked up in ABFD's string table) and the setting
12630    of IS_RELA.  */
12631 
12632 asection *
12633 _bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
12634 				    asection *  sec,
12635 				    bfd_boolean is_rela)
12636 {
12637   asection * reloc_sec = elf_section_data (sec)->sreloc;
12638 
12639   if (reloc_sec == NULL)
12640     {
12641       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
12642 
12643       if (name != NULL)
12644 	{
12645 	  reloc_sec = bfd_get_section_by_name (abfd, name);
12646 
12647 	  if (reloc_sec != NULL)
12648 	    elf_section_data (sec)->sreloc = reloc_sec;
12649 	}
12650     }
12651 
12652   return reloc_sec;
12653 }
12654 
12655 /* Returns the dynamic reloc section associated with SEC.  If the
12656    section does not exist it is created and attached to the DYNOBJ
12657    bfd and stored in the SRELOC field of SEC's elf_section_data
12658    structure.
12659 
12660    ALIGNMENT is the alignment for the newly created section and
12661    IS_RELA defines whether the name should be .rela.<SEC's name>
12662    or .rel.<SEC's name>.  The section name is looked up in the
12663    string table associated with ABFD.  */
12664 
12665 asection *
12666 _bfd_elf_make_dynamic_reloc_section (asection *         sec,
12667 				     bfd *		dynobj,
12668 				     unsigned int	alignment,
12669 				     bfd *              abfd,
12670 				     bfd_boolean        is_rela)
12671 {
12672   asection * reloc_sec = elf_section_data (sec)->sreloc;
12673 
12674   if (reloc_sec == NULL)
12675     {
12676       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
12677 
12678       if (name == NULL)
12679 	return NULL;
12680 
12681       reloc_sec = bfd_get_section_by_name (dynobj, name);
12682 
12683       if (reloc_sec == NULL)
12684 	{
12685 	  flagword flags;
12686 
12687 	  flags = (SEC_HAS_CONTENTS | SEC_READONLY | SEC_IN_MEMORY | SEC_LINKER_CREATED);
12688 	  if ((sec->flags & SEC_ALLOC) != 0)
12689 	    flags |= SEC_ALLOC | SEC_LOAD;
12690 
12691 	  reloc_sec = bfd_make_section_with_flags (dynobj, name, flags);
12692 	  if (reloc_sec != NULL)
12693 	    {
12694 	      if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
12695 		reloc_sec = NULL;
12696 	    }
12697 	}
12698 
12699       elf_section_data (sec)->sreloc = reloc_sec;
12700     }
12701 
12702   return reloc_sec;
12703 }
12704 
12705 /* Copy the ELF symbol type associated with a linker hash entry.  */
12706 void
12707 _bfd_elf_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED,
12708     struct bfd_link_hash_entry * hdest,
12709     struct bfd_link_hash_entry * hsrc)
12710 {
12711   struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *)hdest;
12712   struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *)hsrc;
12713 
12714   ehdest->type = ehsrc->type;
12715   ehdest->target_internal = ehsrc->target_internal;
12716 }
12717 
12718 /* Append a RELA relocation REL to section S in BFD.  */
12719 
12720 void
12721 elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
12722 {
12723   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12724   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
12725   BFD_ASSERT (loc + bed->s->sizeof_rela <= s->contents + s->size);
12726   bed->s->swap_reloca_out (abfd, rel, loc);
12727 }
12728 
12729 /* Append a REL relocation REL to section S in BFD.  */
12730 
12731 void
12732 elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
12733 {
12734   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12735   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rel);
12736   BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size);
12737   bed->s->swap_reloca_out (abfd, rel, loc);
12738 }
12739