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