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