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