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