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