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