21ebc035e024e50c685b2be8dce8de6b10411099
[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 had a failure.  */
2684   boolean failed;
2685 };
2686
2687 /* This structure is used to pass information to
2688    elf_link_find_version_dependencies.  */
2689
2690 struct elf_find_verdep_info
2691 {
2692   /* Output BFD.  */
2693   bfd *output_bfd;
2694   /* General link information.  */
2695   struct bfd_link_info *info;
2696   /* The number of dependencies.  */
2697   unsigned int vers;
2698   /* Whether we had a failure.  */
2699   boolean failed;
2700 };
2701
2702 /* Array used to determine the number of hash table buckets to use
2703    based on the number of symbols there are.  If there are fewer than
2704    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
2705    fewer than 37 we use 17 buckets, and so forth.  We never use more
2706    than 32771 buckets.  */
2707
2708 static const size_t elf_buckets[] =
2709 {
2710   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
2711   16411, 32771, 0
2712 };
2713
2714 /* Compute bucket count for hashing table.  We do not use a static set
2715    of possible tables sizes anymore.  Instead we determine for all
2716    possible reasonable sizes of the table the outcome (i.e., the
2717    number of collisions etc) and choose the best solution.  The
2718    weighting functions are not too simple to allow the table to grow
2719    without bounds.  Instead one of the weighting factors is the size.
2720    Therefore the result is always a good payoff between few collisions
2721    (= short chain lengths) and table size.  */
2722 static size_t
2723 compute_bucket_count (info)
2724      struct bfd_link_info *info;
2725 {
2726   size_t dynsymcount = elf_hash_table (info)->dynsymcount;
2727   size_t best_size = 0;
2728   unsigned long int *hashcodes;
2729   unsigned long int *hashcodesp;
2730   unsigned long int i;
2731
2732   /* Compute the hash values for all exported symbols.  At the same
2733      time store the values in an array so that we could use them for
2734      optimizations.  */
2735   hashcodes = (unsigned long int *) bfd_malloc (dynsymcount
2736                                                 * sizeof (unsigned long int));
2737   if (hashcodes == NULL)
2738     return 0;
2739   hashcodesp = hashcodes;
2740
2741   /* Put all hash values in HASHCODES.  */
2742   elf_link_hash_traverse (elf_hash_table (info),
2743                           elf_collect_hash_codes, &hashcodesp);
2744
2745 /* We have a problem here.  The following code to optimize the table
2746    size requires an integer type with more the 32 bits.  If
2747    BFD_HOST_U_64_BIT is set we know about such a type.  */
2748 #ifdef BFD_HOST_U_64_BIT
2749   if (info->optimize == true)
2750     {
2751       unsigned long int nsyms = hashcodesp - hashcodes;
2752       size_t minsize;
2753       size_t maxsize;
2754       BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
2755       unsigned long int *counts ;
2756
2757       /* Possible optimization parameters: if we have NSYMS symbols we say
2758          that the hashing table must at least have NSYMS/4 and at most
2759          2*NSYMS buckets.  */
2760       minsize = nsyms / 4;
2761       if (minsize == 0)
2762         minsize = 1;
2763       best_size = maxsize = nsyms * 2;
2764
2765       /* Create array where we count the collisions in.  We must use bfd_malloc
2766          since the size could be large.  */
2767       counts = (unsigned long int *) bfd_malloc (maxsize
2768                                                  * sizeof (unsigned long int));
2769       if (counts == NULL)
2770         {
2771           free (hashcodes);
2772           return 0;
2773         }
2774
2775       /* Compute the "optimal" size for the hash table.  The criteria is a
2776          minimal chain length.  The minor criteria is (of course) the size
2777          of the table.  */
2778       for (i = minsize; i < maxsize; ++i)
2779         {
2780           /* Walk through the array of hashcodes and count the collisions.  */
2781           BFD_HOST_U_64_BIT max;
2782           unsigned long int j;
2783           unsigned long int fact;
2784
2785           memset (counts, '\0', i * sizeof (unsigned long int));
2786
2787           /* Determine how often each hash bucket is used.  */
2788           for (j = 0; j < nsyms; ++j)
2789             ++counts[hashcodes[j] % i];
2790
2791           /* For the weight function we need some information about the
2792              pagesize on the target.  This is information need not be 100%
2793              accurate.  Since this information is not available (so far) we
2794              define it here to a reasonable default value.  If it is crucial
2795              to have a better value some day simply define this value.  */
2796 # ifndef BFD_TARGET_PAGESIZE
2797 #  define BFD_TARGET_PAGESIZE   (4096)
2798 # endif
2799
2800           /* We in any case need 2 + NSYMS entries for the size values and
2801              the chains.  */
2802           max = (2 + nsyms) * (ARCH_SIZE / 8);
2803
2804 # if 1
2805           /* Variant 1: optimize for short chains.  We add the squares
2806              of all the chain lengths (which favous many small chain
2807              over a few long chains).  */
2808           for (j = 0; j < i; ++j)
2809             max += counts[j] * counts[j];
2810
2811           /* This adds penalties for the overall size of the table.  */
2812           fact = i / (BFD_TARGET_PAGESIZE / (ARCH_SIZE / 8)) + 1;
2813           max *= fact * fact;
2814 # else
2815           /* Variant 2: Optimize a lot more for small table.  Here we
2816              also add squares of the size but we also add penalties for
2817              empty slots (the +1 term).  */
2818           for (j = 0; j < i; ++j)
2819             max += (1 + counts[j]) * (1 + counts[j]);
2820
2821           /* The overall size of the table is considered, but not as
2822              strong as in variant 1, where it is squared.  */
2823           fact = i / (BFD_TARGET_PAGESIZE / (ARCH_SIZE / 8)) + 1;
2824           max *= fact;
2825 # endif
2826
2827           /* Compare with current best results.  */
2828           if (max < best_chlen)
2829             {
2830               best_chlen = max;
2831               best_size = i;
2832             }
2833         }
2834
2835       free (counts);
2836     }
2837   else
2838 #endif /* defined (BFD_HOST_U_64_BIT) */
2839     {
2840       /* This is the fallback solution if no 64bit type is available or if we
2841          are not supposed to spend much time on optimizations.  We select the
2842          bucket count using a fixed set of numbers.  */
2843       for (i = 0; elf_buckets[i] != 0; i++)
2844         {
2845           best_size = elf_buckets[i];
2846           if (dynsymcount < elf_buckets[i + 1])
2847             break;
2848         }
2849     }
2850
2851   /* Free the arrays we needed.  */
2852   free (hashcodes);
2853
2854   return best_size;
2855 }
2856
2857 /* Set up the sizes and contents of the ELF dynamic sections.  This is
2858    called by the ELF linker emulation before_allocation routine.  We
2859    must set the sizes of the sections before the linker sets the
2860    addresses of the various sections.  */
2861
2862 boolean
2863 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
2864                                      filter_shlib,
2865                                      auxiliary_filters, info, sinterpptr,
2866                                      verdefs)
2867      bfd *output_bfd;
2868      const char *soname;
2869      const char *rpath;
2870      const char *filter_shlib;
2871      const char * const *auxiliary_filters;
2872      struct bfd_link_info *info;
2873      asection **sinterpptr;
2874      struct bfd_elf_version_tree *verdefs;
2875 {
2876   bfd_size_type soname_indx;
2877   bfd *dynobj;
2878   struct elf_backend_data *bed;
2879   struct elf_assign_sym_version_info asvinfo;
2880
2881   *sinterpptr = NULL;
2882
2883   soname_indx = (bfd_size_type) -1;
2884
2885   if (info->hash->creator->flavour != bfd_target_elf_flavour)
2886     return true;
2887
2888   /* The backend may have to create some sections regardless of whether
2889      we're dynamic or not.  */
2890   bed = get_elf_backend_data (output_bfd);
2891   if (bed->elf_backend_always_size_sections
2892       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
2893     return false;
2894
2895   dynobj = elf_hash_table (info)->dynobj;
2896
2897   /* If there were no dynamic objects in the link, there is nothing to
2898      do here.  */
2899   if (dynobj == NULL)
2900     return true;
2901
2902   if (elf_hash_table (info)->dynamic_sections_created)
2903     {
2904       struct elf_info_failed eif;
2905       struct elf_link_hash_entry *h;
2906       asection *dynstr;
2907
2908       *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
2909       BFD_ASSERT (*sinterpptr != NULL || info->shared);
2910
2911       if (soname != NULL)
2912         {
2913           soname_indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2914                                             soname, true, true);
2915           if (soname_indx == (bfd_size_type) -1
2916               || ! elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
2917             return false;
2918         }
2919
2920       if (info->symbolic)
2921         {
2922           if (! elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
2923             return false;
2924           info->flags |= DF_SYMBOLIC;
2925         }
2926
2927       if (rpath != NULL)
2928         {
2929           bfd_size_type indx;
2930
2931           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
2932                                      true, true);
2933           if (indx == (bfd_size_type) -1
2934               || ! elf_add_dynamic_entry (info, DT_RPATH, indx)
2935               || (info->new_dtags
2936                   && ! elf_add_dynamic_entry (info, DT_RUNPATH, indx)))
2937             return false;
2938         }
2939
2940       if (filter_shlib != NULL)
2941         {
2942           bfd_size_type indx;
2943
2944           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2945                                      filter_shlib, true, true);
2946           if (indx == (bfd_size_type) -1
2947               || ! elf_add_dynamic_entry (info, DT_FILTER, indx))
2948             return false;
2949         }
2950
2951       if (auxiliary_filters != NULL)
2952         {
2953           const char * const *p;
2954
2955           for (p = auxiliary_filters; *p != NULL; p++)
2956             {
2957               bfd_size_type indx;
2958
2959               indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2960                                          *p, true, true);
2961               if (indx == (bfd_size_type) -1
2962                   || ! elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
2963                 return false;
2964             }
2965         }
2966
2967       eif.info = info;
2968       eif.verdefs = verdefs;
2969       eif.failed = false;
2970
2971       /* If we are supposed to export all symbols into the dynamic symbol
2972          table (this is not the normal case), then do so.  */
2973       if (info->export_dynamic)
2974         {
2975           elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol,
2976                                   (PTR) &eif);
2977           if (eif.failed)
2978             return false;
2979         }
2980
2981       /* Attach all the symbols to their version information.  */
2982       asvinfo.output_bfd = output_bfd;
2983       asvinfo.info = info;
2984       asvinfo.verdefs = verdefs;
2985       asvinfo.failed = false;
2986
2987       elf_link_hash_traverse (elf_hash_table (info),
2988                               elf_link_assign_sym_version,
2989                               (PTR) &asvinfo);
2990       if (asvinfo.failed)
2991         return false;
2992
2993       /* Find all symbols which were defined in a dynamic object and make
2994          the backend pick a reasonable value for them.  */
2995       elf_link_hash_traverse (elf_hash_table (info),
2996                               elf_adjust_dynamic_symbol,
2997                               (PTR) &eif);
2998       if (eif.failed)
2999         return false;
3000
3001       /* Add some entries to the .dynamic section.  We fill in some of the
3002          values later, in elf_bfd_final_link, but we must add the entries
3003          now so that we know the final size of the .dynamic section.  */
3004
3005       /* If there are initialization and/or finalization functions to
3006          call then add the corresponding DT_INIT/DT_FINI entries.  */
3007       h = (info->init_function
3008            ? elf_link_hash_lookup (elf_hash_table (info),
3009                                    info->init_function, false,
3010                                    false, false)
3011            : NULL);
3012       if (h != NULL
3013           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
3014                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
3015         {
3016           if (! elf_add_dynamic_entry (info, DT_INIT, 0))
3017             return false;
3018         }
3019       h = (info->fini_function
3020            ? elf_link_hash_lookup (elf_hash_table (info),
3021                                    info->fini_function, false,
3022                                    false, false)
3023            : NULL);
3024       if (h != NULL
3025           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
3026                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
3027         {
3028           if (! elf_add_dynamic_entry (info, DT_FINI, 0))
3029             return false;
3030         }
3031
3032       dynstr = bfd_get_section_by_name (dynobj, ".dynstr");
3033       /* If .dynstr is excluded from the link, we don't want any of
3034          these tags.  Strictly, we should be checking each section
3035          individually;  This quick check covers for the case where
3036          someone does a /DISCARD/ : { *(*) }.  */
3037       if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
3038         {
3039           bfd_size_type strsize;
3040
3041           strsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
3042           if (! elf_add_dynamic_entry (info, DT_HASH, 0)
3043               || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
3044               || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
3045               || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
3046               || ! elf_add_dynamic_entry (info, DT_SYMENT,
3047                                           sizeof (Elf_External_Sym)))
3048             return false;
3049         }
3050     }
3051
3052   /* The backend must work out the sizes of all the other dynamic
3053      sections.  */
3054   if (bed->elf_backend_size_dynamic_sections
3055       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
3056     return false;
3057
3058   if (elf_hash_table (info)->dynamic_sections_created)
3059     {
3060       size_t dynsymcount;
3061       asection *s;
3062       size_t bucketcount = 0;
3063       size_t hash_entry_size;
3064
3065       /* Set up the version definition section.  */
3066       s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
3067       BFD_ASSERT (s != NULL);
3068
3069       /* We may have created additional version definitions if we are
3070          just linking a regular application.  */
3071       verdefs = asvinfo.verdefs;
3072
3073       if (verdefs == NULL)
3074         _bfd_strip_section_from_output (info, s);
3075       else
3076         {
3077           unsigned int cdefs;
3078           bfd_size_type size;
3079           struct bfd_elf_version_tree *t;
3080           bfd_byte *p;
3081           Elf_Internal_Verdef def;
3082           Elf_Internal_Verdaux defaux;
3083
3084           cdefs = 0;
3085           size = 0;
3086
3087           /* Make space for the base version.  */
3088           size += sizeof (Elf_External_Verdef);
3089           size += sizeof (Elf_External_Verdaux);
3090           ++cdefs;
3091
3092           for (t = verdefs; t != NULL; t = t->next)
3093             {
3094               struct bfd_elf_version_deps *n;
3095
3096               size += sizeof (Elf_External_Verdef);
3097               size += sizeof (Elf_External_Verdaux);
3098               ++cdefs;
3099
3100               for (n = t->deps; n != NULL; n = n->next)
3101                 size += sizeof (Elf_External_Verdaux);
3102             }
3103
3104           s->_raw_size = size;
3105           s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
3106           if (s->contents == NULL && s->_raw_size != 0)
3107             return false;
3108
3109           /* Fill in the version definition section.  */
3110
3111           p = s->contents;
3112
3113           def.vd_version = VER_DEF_CURRENT;
3114           def.vd_flags = VER_FLG_BASE;
3115           def.vd_ndx = 1;
3116           def.vd_cnt = 1;
3117           def.vd_aux = sizeof (Elf_External_Verdef);
3118           def.vd_next = (sizeof (Elf_External_Verdef)
3119                          + sizeof (Elf_External_Verdaux));
3120
3121           if (soname_indx != (bfd_size_type) -1)
3122             {
3123               def.vd_hash = bfd_elf_hash (soname);
3124               defaux.vda_name = soname_indx;
3125             }
3126           else
3127             {
3128               const char *name;
3129               bfd_size_type indx;
3130
3131               name = basename (output_bfd->filename);
3132               def.vd_hash = bfd_elf_hash (name);
3133               indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
3134                                             name, true, false);
3135               if (indx == (bfd_size_type) -1)
3136                 return false;
3137               defaux.vda_name = indx;
3138             }
3139           defaux.vda_next = 0;
3140
3141           _bfd_elf_swap_verdef_out (output_bfd, &def,
3142                                     (Elf_External_Verdef *)p);
3143           p += sizeof (Elf_External_Verdef);
3144           _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
3145                                      (Elf_External_Verdaux *) p);
3146           p += sizeof (Elf_External_Verdaux);
3147
3148           for (t = verdefs; t != NULL; t = t->next)
3149             {
3150               unsigned int cdeps;
3151               struct bfd_elf_version_deps *n;
3152               struct elf_link_hash_entry *h;
3153
3154               cdeps = 0;
3155               for (n = t->deps; n != NULL; n = n->next)
3156                 ++cdeps;
3157
3158               /* Add a symbol representing this version.  */
3159               h = NULL;
3160               if (! (_bfd_generic_link_add_one_symbol
3161                      (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
3162                       (bfd_vma) 0, (const char *) NULL, false,
3163                       get_elf_backend_data (dynobj)->collect,
3164                       (struct bfd_link_hash_entry **) &h)))
3165                 return false;
3166               h->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF;
3167               h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
3168               h->type = STT_OBJECT;
3169               h->verinfo.vertree = t;
3170
3171               if (! _bfd_elf_link_record_dynamic_symbol (info, h))
3172                 return false;
3173
3174               def.vd_version = VER_DEF_CURRENT;
3175               def.vd_flags = 0;
3176               if (t->globals == NULL && t->locals == NULL && ! t->used)
3177                 def.vd_flags |= VER_FLG_WEAK;
3178               def.vd_ndx = t->vernum + 1;
3179               def.vd_cnt = cdeps + 1;
3180               def.vd_hash = bfd_elf_hash (t->name);
3181               def.vd_aux = sizeof (Elf_External_Verdef);
3182               if (t->next != NULL)
3183                 def.vd_next = (sizeof (Elf_External_Verdef)
3184                                + (cdeps + 1) * sizeof (Elf_External_Verdaux));
3185               else
3186                 def.vd_next = 0;
3187
3188               _bfd_elf_swap_verdef_out (output_bfd, &def,
3189                                         (Elf_External_Verdef *) p);
3190               p += sizeof (Elf_External_Verdef);
3191
3192               defaux.vda_name = h->dynstr_index;
3193               if (t->deps == NULL)
3194                 defaux.vda_next = 0;
3195               else
3196                 defaux.vda_next = sizeof (Elf_External_Verdaux);
3197               t->name_indx = defaux.vda_name;
3198
3199               _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
3200                                          (Elf_External_Verdaux *) p);
3201               p += sizeof (Elf_External_Verdaux);
3202
3203               for (n = t->deps; n != NULL; n = n->next)
3204                 {
3205                   if (n->version_needed == NULL)
3206                     {
3207                       /* This can happen if there was an error in the
3208                          version script.  */
3209                       defaux.vda_name = 0;
3210                     }
3211                   else
3212                     defaux.vda_name = n->version_needed->name_indx;
3213                   if (n->next == NULL)
3214                     defaux.vda_next = 0;
3215                   else
3216                     defaux.vda_next = sizeof (Elf_External_Verdaux);
3217
3218                   _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
3219                                              (Elf_External_Verdaux *) p);
3220                   p += sizeof (Elf_External_Verdaux);
3221                 }
3222             }
3223
3224           if (! elf_add_dynamic_entry (info, DT_VERDEF, 0)
3225               || ! elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
3226             return false;
3227
3228           elf_tdata (output_bfd)->cverdefs = cdefs;
3229         }
3230
3231       if (info->new_dtags && info->flags)
3232         {
3233           if (! elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
3234             return false;
3235         }
3236
3237       if (info->flags_1)
3238         {
3239           if (! info->shared)
3240             info->flags_1 &= ~ (DF_1_INITFIRST
3241                                 | DF_1_NODELETE
3242                                 | DF_1_NOOPEN);
3243           if (! elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
3244             return false;
3245         }
3246
3247       /* Work out the size of the version reference section.  */
3248
3249       s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
3250       BFD_ASSERT (s != NULL);
3251       {
3252         struct elf_find_verdep_info sinfo;
3253
3254         sinfo.output_bfd = output_bfd;
3255         sinfo.info = info;
3256         sinfo.vers = elf_tdata (output_bfd)->cverdefs;
3257         if (sinfo.vers == 0)
3258           sinfo.vers = 1;
3259         sinfo.failed = false;
3260
3261         elf_link_hash_traverse (elf_hash_table (info),
3262                                 elf_link_find_version_dependencies,
3263                                 (PTR) &sinfo);
3264
3265         if (elf_tdata (output_bfd)->verref == NULL)
3266           _bfd_strip_section_from_output (info, s);
3267         else
3268           {
3269             Elf_Internal_Verneed *t;
3270             unsigned int size;
3271             unsigned int crefs;
3272             bfd_byte *p;
3273
3274             /* Build the version definition section.  */
3275             size = 0;
3276             crefs = 0;
3277             for (t = elf_tdata (output_bfd)->verref;
3278                  t != NULL;
3279                  t = t->vn_nextref)
3280               {
3281                 Elf_Internal_Vernaux *a;
3282
3283                 size += sizeof (Elf_External_Verneed);
3284                 ++crefs;
3285                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
3286                   size += sizeof (Elf_External_Vernaux);
3287               }
3288
3289             s->_raw_size = size;
3290             s->contents = (bfd_byte *) bfd_alloc (output_bfd, size);
3291             if (s->contents == NULL)
3292               return false;
3293
3294             p = s->contents;
3295             for (t = elf_tdata (output_bfd)->verref;
3296                  t != NULL;
3297                  t = t->vn_nextref)
3298               {
3299                 unsigned int caux;
3300                 Elf_Internal_Vernaux *a;
3301                 bfd_size_type indx;
3302
3303                 caux = 0;
3304                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
3305                   ++caux;
3306
3307                 t->vn_version = VER_NEED_CURRENT;
3308                 t->vn_cnt = caux;
3309                 if (elf_dt_name (t->vn_bfd) != NULL)
3310                   indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
3311                                              elf_dt_name (t->vn_bfd),
3312                                              true, false);
3313                 else
3314                   indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
3315                                              basename (t->vn_bfd->filename),
3316                                              true, false);
3317                 if (indx == (bfd_size_type) -1)
3318                   return false;
3319                 t->vn_file = indx;
3320                 t->vn_aux = sizeof (Elf_External_Verneed);
3321                 if (t->vn_nextref == NULL)
3322                   t->vn_next = 0;
3323                 else
3324                   t->vn_next = (sizeof (Elf_External_Verneed)
3325                                 + caux * sizeof (Elf_External_Vernaux));
3326
3327                 _bfd_elf_swap_verneed_out (output_bfd, t,
3328                                            (Elf_External_Verneed *) p);
3329                 p += sizeof (Elf_External_Verneed);
3330
3331                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
3332                   {
3333                     a->vna_hash = bfd_elf_hash (a->vna_nodename);
3334                     indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
3335                                                a->vna_nodename, true, false);
3336                     if (indx == (bfd_size_type) -1)
3337                       return false;
3338                     a->vna_name = indx;
3339                     if (a->vna_nextptr == NULL)
3340                       a->vna_next = 0;
3341                     else
3342                       a->vna_next = sizeof (Elf_External_Vernaux);
3343
3344                     _bfd_elf_swap_vernaux_out (output_bfd, a,
3345                                                (Elf_External_Vernaux *) p);
3346                     p += sizeof (Elf_External_Vernaux);
3347                   }
3348               }
3349
3350             if (! elf_add_dynamic_entry (info, DT_VERNEED, 0)
3351                 || ! elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
3352               return false;
3353
3354             elf_tdata (output_bfd)->cverrefs = crefs;
3355           }
3356       }
3357
3358       /* Assign dynsym indicies.  In a shared library we generate a
3359          section symbol for each output section, which come first.
3360          Next come all of the back-end allocated local dynamic syms,
3361          followed by the rest of the global symbols.  */
3362
3363       dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info);
3364
3365       /* Work out the size of the symbol version section.  */
3366       s = bfd_get_section_by_name (dynobj, ".gnu.version");
3367       BFD_ASSERT (s != NULL);
3368       if (dynsymcount == 0
3369           || (verdefs == NULL && elf_tdata (output_bfd)->verref == NULL))
3370         {
3371           _bfd_strip_section_from_output (info, s);
3372           /* The DYNSYMCOUNT might have changed if we were going to
3373              output a dynamic symbol table entry for S.  */
3374           dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info);
3375         }
3376       else
3377         {
3378           s->_raw_size = dynsymcount * sizeof (Elf_External_Versym);
3379           s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->_raw_size);
3380           if (s->contents == NULL)
3381             return false;
3382
3383           if (! elf_add_dynamic_entry (info, DT_VERSYM, 0))
3384             return false;
3385         }
3386
3387       /* Set the size of the .dynsym and .hash sections.  We counted
3388          the number of dynamic symbols in elf_link_add_object_symbols.
3389          We will build the contents of .dynsym and .hash when we build
3390          the final symbol table, because until then we do not know the
3391          correct value to give the symbols.  We built the .dynstr
3392          section as we went along in elf_link_add_object_symbols.  */
3393       s = bfd_get_section_by_name (dynobj, ".dynsym");
3394       BFD_ASSERT (s != NULL);
3395       s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
3396       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
3397       if (s->contents == NULL && s->_raw_size != 0)
3398         return false;
3399
3400       if (dynsymcount != 0)
3401         {
3402           Elf_Internal_Sym isym;
3403
3404           /* The first entry in .dynsym is a dummy symbol.  */
3405           isym.st_value = 0;
3406           isym.st_size = 0;
3407           isym.st_name = 0;
3408           isym.st_info = 0;
3409           isym.st_other = 0;
3410           isym.st_shndx = 0;
3411           elf_swap_symbol_out (output_bfd, &isym,
3412                                (PTR) (Elf_External_Sym *) s->contents);
3413         }
3414
3415       /* Compute the size of the hashing table.  As a side effect this
3416          computes the hash values for all the names we export.  */
3417       bucketcount = compute_bucket_count (info);
3418
3419       s = bfd_get_section_by_name (dynobj, ".hash");
3420       BFD_ASSERT (s != NULL);
3421       hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
3422       s->_raw_size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
3423       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
3424       if (s->contents == NULL)
3425         return false;
3426       memset (s->contents, 0, (size_t) s->_raw_size);
3427
3428       bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
3429       bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
3430                s->contents + hash_entry_size);
3431
3432       elf_hash_table (info)->bucketcount = bucketcount;
3433
3434       s = bfd_get_section_by_name (dynobj, ".dynstr");
3435       BFD_ASSERT (s != NULL);
3436       s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
3437
3438       if (! elf_add_dynamic_entry (info, DT_NULL, 0))
3439         return false;
3440     }
3441
3442   return true;
3443 }
3444 \f
3445 /* Fix up the flags for a symbol.  This handles various cases which
3446    can only be fixed after all the input files are seen.  This is
3447    currently called by both adjust_dynamic_symbol and
3448    assign_sym_version, which is unnecessary but perhaps more robust in
3449    the face of future changes.  */
3450
3451 static boolean
3452 elf_fix_symbol_flags (h, eif)
3453      struct elf_link_hash_entry *h;
3454      struct elf_info_failed *eif;
3455 {
3456   /* If this symbol was mentioned in a non-ELF file, try to set
3457      DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
3458      permit a non-ELF file to correctly refer to a symbol defined in
3459      an ELF dynamic object.  */
3460   if ((h->elf_link_hash_flags & ELF_LINK_NON_ELF) != 0)
3461     {
3462       while (h->root.type == bfd_link_hash_indirect)
3463         h = (struct elf_link_hash_entry *) h->root.u.i.link;
3464
3465       if (h->root.type != bfd_link_hash_defined
3466           && h->root.type != bfd_link_hash_defweak)
3467         h->elf_link_hash_flags |= (ELF_LINK_HASH_REF_REGULAR
3468                                    | ELF_LINK_HASH_REF_REGULAR_NONWEAK);
3469       else
3470         {
3471           if (h->root.u.def.section->owner != NULL
3472               && (bfd_get_flavour (h->root.u.def.section->owner)
3473                   == bfd_target_elf_flavour))
3474             h->elf_link_hash_flags |= (ELF_LINK_HASH_REF_REGULAR
3475                                        | ELF_LINK_HASH_REF_REGULAR_NONWEAK);
3476           else
3477             h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
3478         }
3479
3480       if (h->dynindx == -1
3481           && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
3482               || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0))
3483         {
3484           if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
3485             {
3486               eif->failed = true;
3487               return false;
3488             }
3489         }
3490     }
3491   else
3492     {
3493       /* Unfortunately, ELF_LINK_NON_ELF is only correct if the symbol
3494          was first seen in a non-ELF file.  Fortunately, if the symbol
3495          was first seen in an ELF file, we're probably OK unless the
3496          symbol was defined in a non-ELF file.  Catch that case here.
3497          FIXME: We're still in trouble if the symbol was first seen in
3498          a dynamic object, and then later in a non-ELF regular object.  */
3499       if ((h->root.type == bfd_link_hash_defined
3500            || h->root.type == bfd_link_hash_defweak)
3501           && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
3502           && (h->root.u.def.section->owner != NULL
3503               ? (bfd_get_flavour (h->root.u.def.section->owner)
3504                  != bfd_target_elf_flavour)
3505               : (bfd_is_abs_section (h->root.u.def.section)
3506                  && (h->elf_link_hash_flags
3507                      & ELF_LINK_HASH_DEF_DYNAMIC) == 0)))
3508         h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
3509     }
3510
3511   /* If this is a final link, and the symbol was defined as a common
3512      symbol in a regular object file, and there was no definition in
3513      any dynamic object, then the linker will have allocated space for
3514      the symbol in a common section but the ELF_LINK_HASH_DEF_REGULAR
3515      flag will not have been set.  */
3516   if (h->root.type == bfd_link_hash_defined
3517       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
3518       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
3519       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
3520       && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
3521     h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
3522
3523   /* If -Bsymbolic was used (which means to bind references to global
3524      symbols to the definition within the shared object), and this
3525      symbol was defined in a regular object, then it actually doesn't
3526      need a PLT entry, and we can accomplish that by forcing it local.
3527      Likewise, if the symbol has hidden or internal visibility.
3528      FIXME: It might be that we also do not need a PLT for other
3529      non-hidden visibilities, but we would have to tell that to the
3530      backend specifically; we can't just clear PLT-related data here.  */
3531   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
3532       && eif->info->shared
3533       && (eif->info->symbolic
3534           || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
3535           || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
3536       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
3537     {
3538       struct elf_backend_data *bed;
3539       bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
3540       if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
3541           || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
3542         h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
3543       (*bed->elf_backend_hide_symbol) (eif->info, h);
3544     }
3545
3546   /* If this is a weak defined symbol in a dynamic object, and we know
3547      the real definition in the dynamic object, copy interesting flags
3548      over to the real definition.  */
3549   if (h->weakdef != NULL)
3550     {
3551       struct elf_link_hash_entry *weakdef;
3552
3553       BFD_ASSERT (h->root.type == bfd_link_hash_defined
3554                   || h->root.type == bfd_link_hash_defweak);
3555       weakdef = h->weakdef;
3556       BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
3557                   || weakdef->root.type == bfd_link_hash_defweak);
3558       BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
3559
3560       /* If the real definition is defined by a regular object file,
3561          don't do anything special.  See the longer description in
3562          elf_adjust_dynamic_symbol, below.  */
3563       if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
3564         h->weakdef = NULL;
3565       else
3566         weakdef->elf_link_hash_flags |=
3567           (h->elf_link_hash_flags
3568            & (ELF_LINK_HASH_REF_REGULAR
3569               | ELF_LINK_HASH_REF_REGULAR_NONWEAK
3570               | ELF_LINK_NON_GOT_REF));
3571     }
3572
3573   return true;
3574 }
3575
3576 /* Make the backend pick a good value for a dynamic symbol.  This is
3577    called via elf_link_hash_traverse, and also calls itself
3578    recursively.  */
3579
3580 static boolean
3581 elf_adjust_dynamic_symbol (h, data)
3582      struct elf_link_hash_entry *h;
3583      PTR data;
3584 {
3585   struct elf_info_failed *eif = (struct elf_info_failed *) data;
3586   bfd *dynobj;
3587   struct elf_backend_data *bed;
3588
3589   /* Ignore indirect symbols.  These are added by the versioning code.  */
3590   if (h->root.type == bfd_link_hash_indirect)
3591     return true;
3592
3593   /* Fix the symbol flags.  */
3594   if (! elf_fix_symbol_flags (h, eif))
3595     return false;
3596
3597   /* If this symbol does not require a PLT entry, and it is not
3598      defined by a dynamic object, or is not referenced by a regular
3599      object, ignore it.  We do have to handle a weak defined symbol,
3600      even if no regular object refers to it, if we decided to add it
3601      to the dynamic symbol table.  FIXME: Do we normally need to worry
3602      about symbols which are defined by one dynamic object and
3603      referenced by another one?  */
3604   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
3605       && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
3606           || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
3607           || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
3608               && (h->weakdef == NULL || h->weakdef->dynindx == -1))))
3609     {
3610       h->plt.offset = (bfd_vma) -1;
3611       return true;
3612     }
3613
3614   /* If we've already adjusted this symbol, don't do it again.  This
3615      can happen via a recursive call.  */
3616   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
3617     return true;
3618
3619   /* Don't look at this symbol again.  Note that we must set this
3620      after checking the above conditions, because we may look at a
3621      symbol once, decide not to do anything, and then get called
3622      recursively later after REF_REGULAR is set below.  */
3623   h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
3624
3625   /* If this is a weak definition, and we know a real definition, and
3626      the real symbol is not itself defined by a regular object file,
3627      then get a good value for the real definition.  We handle the
3628      real symbol first, for the convenience of the backend routine.
3629
3630      Note that there is a confusing case here.  If the real definition
3631      is defined by a regular object file, we don't get the real symbol
3632      from the dynamic object, but we do get the weak symbol.  If the
3633      processor backend uses a COPY reloc, then if some routine in the
3634      dynamic object changes the real symbol, we will not see that
3635      change in the corresponding weak symbol.  This is the way other
3636      ELF linkers work as well, and seems to be a result of the shared
3637      library model.
3638
3639      I will clarify this issue.  Most SVR4 shared libraries define the
3640      variable _timezone and define timezone as a weak synonym.  The
3641      tzset call changes _timezone.  If you write
3642        extern int timezone;
3643        int _timezone = 5;
3644        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
3645      you might expect that, since timezone is a synonym for _timezone,
3646      the same number will print both times.  However, if the processor
3647      backend uses a COPY reloc, then actually timezone will be copied
3648      into your process image, and, since you define _timezone
3649      yourself, _timezone will not.  Thus timezone and _timezone will
3650      wind up at different memory locations.  The tzset call will set
3651      _timezone, leaving timezone unchanged.  */
3652
3653   if (h->weakdef != NULL)
3654     {
3655       /* If we get to this point, we know there is an implicit
3656          reference by a regular object file via the weak symbol H.
3657          FIXME: Is this really true?  What if the traversal finds
3658          H->WEAKDEF before it finds H?  */
3659       h->weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
3660
3661       if (! elf_adjust_dynamic_symbol (h->weakdef, (PTR) eif))
3662         return false;
3663     }
3664
3665   /* If a symbol has no type and no size and does not require a PLT
3666      entry, then we are probably about to do the wrong thing here: we
3667      are probably going to create a COPY reloc for an empty object.
3668      This case can arise when a shared object is built with assembly
3669      code, and the assembly code fails to set the symbol type.  */
3670   if (h->size == 0
3671       && h->type == STT_NOTYPE
3672       && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0)
3673     (*_bfd_error_handler)
3674       (_("warning: type and size of dynamic symbol `%s' are not defined"),
3675          h->root.root.string);
3676
3677   dynobj = elf_hash_table (eif->info)->dynobj;
3678   bed = get_elf_backend_data (dynobj);
3679   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
3680     {
3681       eif->failed = true;
3682       return false;
3683     }
3684
3685   return true;
3686 }
3687 \f
3688 /* This routine is used to export all defined symbols into the dynamic
3689    symbol table.  It is called via elf_link_hash_traverse.  */
3690
3691 static boolean
3692 elf_export_symbol (h, data)
3693      struct elf_link_hash_entry *h;
3694      PTR data;
3695 {
3696   struct elf_info_failed *eif = (struct elf_info_failed *) data;
3697
3698   /* Ignore indirect symbols.  These are added by the versioning code.  */
3699   if (h->root.type == bfd_link_hash_indirect)
3700     return true;
3701
3702   if (h->dynindx == -1
3703       && (h->elf_link_hash_flags
3704           & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
3705     {
3706       struct bfd_elf_version_tree *t;
3707       struct bfd_elf_version_expr *d;
3708
3709       for (t = eif->verdefs; t != NULL; t = t->next)
3710         {
3711           if (t->globals != NULL)
3712             {
3713               for (d = t->globals; d != NULL; d = d->next)
3714                 {
3715                   if ((*d->match) (d, h->root.root.string))
3716                     goto doit;
3717                 }
3718             }
3719
3720           if (t->locals != NULL)
3721             {
3722               for (d = t->locals ; d != NULL; d = d->next)
3723                 {
3724                   if ((*d->match) (d, h->root.root.string))
3725                     return true;
3726                 }
3727             }
3728         }
3729
3730       if (!eif->verdefs)
3731         {
3732 doit:
3733           if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
3734             {
3735               eif->failed = true;
3736               return false;
3737             }
3738         }
3739     }
3740
3741   return true;
3742 }
3743 \f
3744 /* Look through the symbols which are defined in other shared
3745    libraries and referenced here.  Update the list of version
3746    dependencies.  This will be put into the .gnu.version_r section.
3747    This function is called via elf_link_hash_traverse.  */
3748
3749 static boolean
3750 elf_link_find_version_dependencies (h, data)
3751      struct elf_link_hash_entry *h;
3752      PTR data;
3753 {
3754   struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
3755   Elf_Internal_Verneed *t;
3756   Elf_Internal_Vernaux *a;
3757
3758   /* We only care about symbols defined in shared objects with version
3759      information.  */
3760   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
3761       || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
3762       || h->dynindx == -1
3763       || h->verinfo.verdef == NULL)
3764     return true;
3765
3766   /* See if we already know about this version.  */
3767   for (t = elf_tdata (rinfo->output_bfd)->verref; t != NULL; t = t->vn_nextref)
3768     {
3769       if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
3770         continue;
3771
3772       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
3773         if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
3774           return true;
3775
3776       break;
3777     }
3778
3779   /* This is a new version.  Add it to tree we are building.  */
3780
3781   if (t == NULL)
3782     {
3783       t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->output_bfd, sizeof *t);
3784       if (t == NULL)
3785         {
3786           rinfo->failed = true;
3787           return false;
3788         }
3789
3790       t->vn_bfd = h->verinfo.verdef->vd_bfd;
3791       t->vn_nextref = elf_tdata (rinfo->output_bfd)->verref;
3792       elf_tdata (rinfo->output_bfd)->verref = t;
3793     }
3794
3795   a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->output_bfd, sizeof *a);
3796
3797   /* Note that we are copying a string pointer here, and testing it
3798      above.  If bfd_elf_string_from_elf_section is ever changed to
3799      discard the string data when low in memory, this will have to be
3800      fixed.  */
3801   a->vna_nodename = h->verinfo.verdef->vd_nodename;
3802
3803   a->vna_flags = h->verinfo.verdef->vd_flags;
3804   a->vna_nextptr = t->vn_auxptr;
3805
3806   h->verinfo.verdef->vd_exp_refno = rinfo->vers;
3807   ++rinfo->vers;
3808
3809   a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
3810
3811   t->vn_auxptr = a;
3812
3813   return true;
3814 }
3815
3816 /* Figure out appropriate versions for all the symbols.  We may not
3817    have the version number script until we have read all of the input
3818    files, so until that point we don't know which symbols should be
3819    local.  This function is called via elf_link_hash_traverse.  */
3820
3821 static boolean
3822 elf_link_assign_sym_version (h, data)
3823      struct elf_link_hash_entry *h;
3824      PTR data;
3825 {
3826   struct elf_assign_sym_version_info *sinfo =
3827     (struct elf_assign_sym_version_info *) data;
3828   struct bfd_link_info *info = sinfo->info;
3829   struct elf_backend_data *bed;
3830   struct elf_info_failed eif;
3831   char *p;
3832
3833   /* Fix the symbol flags.  */
3834   eif.failed = false;
3835   eif.info = info;
3836   if (! elf_fix_symbol_flags (h, &eif))
3837     {
3838       if (eif.failed)
3839         sinfo->failed = true;
3840       return false;
3841     }
3842
3843   /* We only need version numbers for symbols defined in regular
3844      objects.  */
3845   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
3846     return true;
3847
3848   bed = get_elf_backend_data (sinfo->output_bfd);
3849   p = strchr (h->root.root.string, ELF_VER_CHR);
3850   if (p != NULL && h->verinfo.vertree == NULL)
3851     {
3852       struct bfd_elf_version_tree *t;
3853       boolean hidden;
3854
3855       hidden = true;
3856
3857       /* There are two consecutive ELF_VER_CHR characters if this is
3858          not a hidden symbol.  */
3859       ++p;
3860       if (*p == ELF_VER_CHR)
3861         {
3862           hidden = false;
3863           ++p;
3864         }
3865
3866       /* If there is no version string, we can just return out.  */
3867       if (*p == '\0')
3868         {
3869           if (hidden)
3870             h->elf_link_hash_flags |= ELF_LINK_HIDDEN;
3871           return true;
3872         }
3873
3874       /* Look for the version.  If we find it, it is no longer weak.  */
3875       for (t = sinfo->verdefs; t != NULL; t = t->next)
3876         {
3877           if (strcmp (t->name, p) == 0)
3878             {
3879               int len;
3880               char *alc;
3881               struct bfd_elf_version_expr *d;
3882
3883               len = p - h->root.root.string;
3884               alc = bfd_alloc (sinfo->output_bfd, len);
3885               if (alc == NULL)
3886                 return false;
3887               strncpy (alc, h->root.root.string, len - 1);
3888               alc[len - 1] = '\0';
3889               if (alc[len - 2] == ELF_VER_CHR)
3890                 alc[len - 2] = '\0';
3891
3892               h->verinfo.vertree = t;
3893               t->used = true;
3894               d = NULL;
3895
3896               if (t->globals != NULL)
3897                 {
3898                   for (d = t->globals; d != NULL; d = d->next)
3899                     if ((*d->match) (d, alc))
3900                       break;
3901                 }
3902
3903               /* See if there is anything to force this symbol to
3904                  local scope.  */
3905               if (d == NULL && t->locals != NULL)
3906                 {
3907                   for (d = t->locals; d != NULL; d = d->next)
3908                     {
3909                       if ((*d->match) (d, alc))
3910                         {
3911                           if (h->dynindx != -1
3912                               && info->shared
3913                               && ! info->export_dynamic)
3914                             {
3915                               h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
3916                               (*bed->elf_backend_hide_symbol) (info, h);
3917                               /* FIXME: The name of the symbol has
3918                                  already been recorded in the dynamic
3919                                  string table section.  */
3920                             }
3921
3922                           break;
3923                         }
3924                     }
3925                 }
3926
3927               bfd_release (sinfo->output_bfd, alc);
3928               break;
3929             }
3930         }
3931
3932       /* If we are building an application, we need to create a
3933          version node for this version.  */
3934       if (t == NULL && ! info->shared)
3935         {
3936           struct bfd_elf_version_tree **pp;
3937           int version_index;
3938
3939           /* If we aren't going to export this symbol, we don't need
3940              to worry about it.  */
3941           if (h->dynindx == -1)
3942             return true;
3943
3944           t = ((struct bfd_elf_version_tree *)
3945                bfd_alloc (sinfo->output_bfd, sizeof *t));
3946           if (t == NULL)
3947             {
3948               sinfo->failed = true;
3949               return false;
3950             }
3951
3952           t->next = NULL;
3953           t->name = p;
3954           t->globals = NULL;
3955           t->locals = NULL;
3956           t->deps = NULL;
3957           t->name_indx = (unsigned int) -1;
3958           t->used = true;
3959
3960           version_index = 1;
3961           for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next)
3962             ++version_index;
3963           t->vernum = version_index;
3964
3965           *pp = t;
3966
3967           h->verinfo.vertree = t;
3968         }
3969       else if (t == NULL)
3970         {
3971           /* We could not find the version for a symbol when
3972              generating a shared archive.  Return an error.  */
3973           (*_bfd_error_handler)
3974             (_("%s: undefined versioned symbol name %s"),
3975              bfd_get_filename (sinfo->output_bfd), h->root.root.string);
3976           bfd_set_error (bfd_error_bad_value);
3977           sinfo->failed = true;
3978           return false;
3979         }
3980
3981       if (hidden)
3982         h->elf_link_hash_flags |= ELF_LINK_HIDDEN;
3983     }
3984
3985   /* If we don't have a version for this symbol, see if we can find
3986      something.  */
3987   if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL)
3988     {
3989       struct bfd_elf_version_tree *t;
3990       struct bfd_elf_version_tree *deflt;
3991       struct bfd_elf_version_expr *d;
3992
3993       /* See if can find what version this symbol is in.  If the
3994          symbol is supposed to be local, then don't actually register
3995          it.  */
3996       deflt = NULL;
3997       for (t = sinfo->verdefs; t != NULL; t = t->next)
3998         {
3999           if (t->globals != NULL)
4000             {
4001               for (d = t->globals; d != NULL; d = d->next)
4002                 {
4003                   if ((*d->match) (d, h->root.root.string))
4004                     {
4005                       h->verinfo.vertree = t;
4006                       break;
4007                     }
4008                 }
4009
4010               if (d != NULL)
4011                 break;
4012             }
4013
4014           if (t->locals != NULL)
4015             {
4016               for (d = t->locals; d != NULL; d = d->next)
4017                 {
4018                   if (d->pattern[0] == '*' && d->pattern[1] == '\0')
4019                     deflt = t;
4020                   else if ((*d->match) (d, h->root.root.string))
4021                     {
4022                       h->verinfo.vertree = t;
4023                       if (h->dynindx != -1
4024                           && info->shared
4025                           && ! info->export_dynamic)
4026                         {
4027                           h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
4028                           (*bed->elf_backend_hide_symbol) (info, h);
4029                           /* FIXME: The name of the symbol has already
4030                              been recorded in the dynamic string table
4031                              section.  */
4032                         }
4033                       break;
4034                     }
4035                 }
4036
4037               if (d != NULL)
4038                 break;
4039             }
4040         }
4041
4042       if (deflt != NULL && h->verinfo.vertree == NULL)
4043         {
4044           h->verinfo.vertree = deflt;
4045           if (h->dynindx != -1
4046               && info->shared
4047               && ! info->export_dynamic)
4048             {
4049               h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
4050               (*bed->elf_backend_hide_symbol) (info, h);
4051               /* FIXME: The name of the symbol has already been
4052                  recorded in the dynamic string table section.  */
4053             }
4054         }
4055     }
4056
4057   return true;
4058 }
4059 \f
4060 /* Final phase of ELF linker.  */
4061
4062 /* A structure we use to avoid passing large numbers of arguments.  */
4063
4064 struct elf_final_link_info
4065 {
4066   /* General link information.  */
4067   struct bfd_link_info *info;
4068   /* Output BFD.  */
4069   bfd *output_bfd;
4070   /* Symbol string table.  */
4071   struct bfd_strtab_hash *symstrtab;
4072   /* .dynsym section.  */
4073   asection *dynsym_sec;
4074   /* .hash section.  */
4075   asection *hash_sec;
4076   /* symbol version section (.gnu.version).  */
4077   asection *symver_sec;
4078   /* Buffer large enough to hold contents of any section.  */
4079   bfd_byte *contents;
4080   /* Buffer large enough to hold external relocs of any section.  */
4081   PTR external_relocs;
4082   /* Buffer large enough to hold internal relocs of any section.  */
4083   Elf_Internal_Rela *internal_relocs;
4084   /* Buffer large enough to hold external local symbols of any input
4085      BFD.  */
4086   Elf_External_Sym *external_syms;
4087   /* Buffer large enough to hold internal local symbols of any input
4088      BFD.  */
4089   Elf_Internal_Sym *internal_syms;
4090   /* Array large enough to hold a symbol index for each local symbol
4091      of any input BFD.  */
4092   long *indices;
4093   /* Array large enough to hold a section pointer for each local
4094      symbol of any input BFD.  */
4095   asection **sections;
4096   /* Buffer to hold swapped out symbols.  */
4097   Elf_External_Sym *symbuf;
4098   /* Number of swapped out symbols in buffer.  */
4099   size_t symbuf_count;
4100   /* Number of symbols which fit in symbuf.  */
4101   size_t symbuf_size;
4102 };
4103
4104 static boolean elf_link_output_sym
4105   PARAMS ((struct elf_final_link_info *, const char *,
4106            Elf_Internal_Sym *, asection *));
4107 static boolean elf_link_flush_output_syms
4108   PARAMS ((struct elf_final_link_info *));
4109 static boolean elf_link_output_extsym
4110   PARAMS ((struct elf_link_hash_entry *, PTR));
4111 static boolean elf_link_sec_merge_syms
4112   PARAMS ((struct elf_link_hash_entry *, PTR));
4113 static boolean elf_link_input_bfd
4114   PARAMS ((struct elf_final_link_info *, bfd *));
4115 static boolean elf_reloc_link_order
4116   PARAMS ((bfd *, struct bfd_link_info *, asection *,
4117            struct bfd_link_order *));
4118
4119 /* This struct is used to pass information to elf_link_output_extsym.  */
4120
4121 struct elf_outext_info
4122 {
4123   boolean failed;
4124   boolean localsyms;
4125   struct elf_final_link_info *finfo;
4126 };
4127
4128 /* Compute the size of, and allocate space for, REL_HDR which is the
4129    section header for a section containing relocations for O.  */
4130
4131 static boolean
4132 elf_link_size_reloc_section (abfd, rel_hdr, o)
4133      bfd *abfd;
4134      Elf_Internal_Shdr *rel_hdr;
4135      asection *o;
4136 {
4137   unsigned reloc_count;
4138
4139   /* Figure out how many relocations there will be.  */
4140   if (rel_hdr == &elf_section_data (o)->rel_hdr)
4141     reloc_count = elf_section_data (o)->rel_count;
4142   else
4143     reloc_count = elf_section_data (o)->rel_count2;
4144
4145   /* That allows us to calculate the size of the section.  */
4146   rel_hdr->sh_size = rel_hdr->sh_entsize * reloc_count;
4147
4148   /* The contents field must last into write_object_contents, so we
4149      allocate it with bfd_alloc rather than malloc.  Also since we
4150      cannot be sure that the contents will actually be filled in,
4151      we zero the allocated space.  */
4152   rel_hdr->contents = (PTR) bfd_zalloc (abfd, rel_hdr->sh_size);
4153   if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
4154     return false;
4155
4156   /* We only allocate one set of hash entries, so we only do it the
4157      first time we are called.  */
4158   if (elf_section_data (o)->rel_hashes == NULL)
4159     {
4160       struct elf_link_hash_entry **p;
4161
4162       p = ((struct elf_link_hash_entry **)
4163            bfd_zmalloc (o->reloc_count
4164                         * sizeof (struct elf_link_hash_entry *)));
4165       if (p == NULL && o->reloc_count != 0)
4166         return false;
4167
4168       elf_section_data (o)->rel_hashes = p;
4169     }
4170
4171   return true;
4172 }
4173
4174 /* When performing a relocateable link, the input relocations are
4175    preserved.  But, if they reference global symbols, the indices
4176    referenced must be updated.  Update all the relocations in
4177    REL_HDR (there are COUNT of them), using the data in REL_HASH.  */
4178
4179 static void
4180 elf_link_adjust_relocs (abfd, rel_hdr, count, rel_hash)
4181      bfd *abfd;
4182      Elf_Internal_Shdr *rel_hdr;
4183      unsigned int count;
4184      struct elf_link_hash_entry **rel_hash;
4185 {
4186   unsigned int i;
4187   struct elf_backend_data *bed = get_elf_backend_data (abfd);
4188   Elf_Internal_Rel *irel;
4189   Elf_Internal_Rela *irela;
4190
4191   irel = (Elf_Internal_Rel *) bfd_zmalloc (sizeof (Elf_Internal_Rel)
4192                                            * bed->s->int_rels_per_ext_rel);
4193   if (irel == NULL)
4194     {
4195       (*_bfd_error_handler) (_("Error: out of memory"));
4196       abort ();
4197     }
4198
4199   irela = (Elf_Internal_Rela *) bfd_zmalloc (sizeof (Elf_Internal_Rela)
4200                                              * bed->s->int_rels_per_ext_rel);
4201   if (irela == NULL)
4202     {
4203       (*_bfd_error_handler) (_("Error: out of memory"));
4204       abort ();
4205     }
4206
4207   for (i = 0; i < count; i++, rel_hash++)
4208     {
4209       if (*rel_hash == NULL)
4210         continue;
4211
4212       BFD_ASSERT ((*rel_hash)->indx >= 0);
4213
4214       if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
4215         {
4216           Elf_External_Rel *erel;
4217           unsigned int j;
4218
4219           erel = (Elf_External_Rel *) rel_hdr->contents + i;
4220           if (bed->s->swap_reloc_in)
4221             (*bed->s->swap_reloc_in) (abfd, (bfd_byte *) erel, irel);
4222           else
4223             elf_swap_reloc_in (abfd, erel, irel);
4224
4225           for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
4226             irel[j].r_info = ELF_R_INFO ((*rel_hash)->indx,
4227                                          ELF_R_TYPE (irel[j].r_info));
4228
4229           if (bed->s->swap_reloc_out)
4230             (*bed->s->swap_reloc_out) (abfd, irel, (bfd_byte *) erel);
4231           else
4232             elf_swap_reloc_out (abfd, irel, erel);
4233         }
4234       else
4235         {
4236           Elf_External_Rela *erela;
4237           unsigned int j;
4238
4239           BFD_ASSERT (rel_hdr->sh_entsize
4240                       == sizeof (Elf_External_Rela));
4241
4242           erela = (Elf_External_Rela *) rel_hdr->contents + i;
4243           if (bed->s->swap_reloca_in)
4244             (*bed->s->swap_reloca_in) (abfd, (bfd_byte *) erela, irela);
4245           else
4246             elf_swap_reloca_in (abfd, erela, irela);
4247
4248           for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
4249             irela[j].r_info = ELF_R_INFO ((*rel_hash)->indx,
4250                                        ELF_R_TYPE (irela[j].r_info));
4251
4252           if (bed->s->swap_reloca_out)
4253             (*bed->s->swap_reloca_out) (abfd, irela, (bfd_byte *) erela);
4254           else
4255             elf_swap_reloca_out (abfd, irela, erela);
4256         }
4257     }
4258
4259   free (irel);
4260   free (irela);
4261 }
4262
4263 /* Do the final step of an ELF link.  */
4264
4265 boolean
4266 elf_bfd_final_link (abfd, info)
4267      bfd *abfd;
4268      struct bfd_link_info *info;
4269 {
4270   boolean dynamic;
4271   bfd *dynobj;
4272   struct elf_final_link_info finfo;
4273   register asection *o;
4274   register struct bfd_link_order *p;
4275   register bfd *sub;
4276   size_t max_contents_size;
4277   size_t max_external_reloc_size;
4278   size_t max_internal_reloc_count;
4279   size_t max_sym_count;
4280   file_ptr off;
4281   Elf_Internal_Sym elfsym;
4282   unsigned int i;
4283   Elf_Internal_Shdr *symtab_hdr;
4284   Elf_Internal_Shdr *symstrtab_hdr;
4285   struct elf_backend_data *bed = get_elf_backend_data (abfd);
4286   struct elf_outext_info eoinfo;
4287   boolean merged;
4288
4289   if (info->shared)
4290     abfd->flags |= DYNAMIC;
4291
4292   dynamic = elf_hash_table (info)->dynamic_sections_created;
4293   dynobj = elf_hash_table (info)->dynobj;
4294
4295   finfo.info = info;
4296   finfo.output_bfd = abfd;
4297   finfo.symstrtab = elf_stringtab_init ();
4298   if (finfo.symstrtab == NULL)
4299     return false;
4300
4301   if (! dynamic)
4302     {
4303       finfo.dynsym_sec = NULL;
4304       finfo.hash_sec = NULL;
4305       finfo.symver_sec = NULL;
4306     }
4307   else
4308     {
4309       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
4310       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
4311       BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
4312       finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
4313       /* Note that it is OK if symver_sec is NULL.  */
4314     }
4315
4316   finfo.contents = NULL;
4317   finfo.external_relocs = NULL;
4318   finfo.internal_relocs = NULL;
4319   finfo.external_syms = NULL;
4320   finfo.internal_syms = NULL;
4321   finfo.indices = NULL;
4322   finfo.sections = NULL;
4323   finfo.symbuf = NULL;
4324   finfo.symbuf_count = 0;
4325
4326   /* Count up the number of relocations we will output for each output
4327      section, so that we know the sizes of the reloc sections.  We
4328      also figure out some maximum sizes.  */
4329   max_contents_size = 0;
4330   max_external_reloc_size = 0;
4331   max_internal_reloc_count = 0;
4332   max_sym_count = 0;
4333   merged = false;
4334   for (o = abfd->sections; o != (asection *) NULL; o = o->next)
4335     {
4336       o->reloc_count = 0;
4337
4338       for (p = o->link_order_head; p != NULL; p = p->next)
4339         {
4340           if (p->type == bfd_section_reloc_link_order
4341               || p->type == bfd_symbol_reloc_link_order)
4342             ++o->reloc_count;
4343           else if (p->type == bfd_indirect_link_order)
4344             {
4345               asection *sec;
4346
4347               sec = p->u.indirect.section;
4348
4349               /* Mark all sections which are to be included in the
4350                  link.  This will normally be every section.  We need
4351                  to do this so that we can identify any sections which
4352                  the linker has decided to not include.  */
4353               sec->linker_mark = true;
4354
4355               if (sec->flags & SEC_MERGE)
4356                 merged = true;
4357
4358               if (info->relocateable || info->emitrelocations)
4359                 o->reloc_count += sec->reloc_count;
4360
4361               if (sec->_raw_size > max_contents_size)
4362                 max_contents_size = sec->_raw_size;
4363               if (sec->_cooked_size > max_contents_size)
4364                 max_contents_size = sec->_cooked_size;
4365
4366               /* We are interested in just local symbols, not all
4367                  symbols.  */
4368               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
4369                   && (sec->owner->flags & DYNAMIC) == 0)
4370                 {
4371                   size_t sym_count;
4372
4373                   if (elf_bad_symtab (sec->owner))
4374                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
4375                                  / sizeof (Elf_External_Sym));
4376                   else
4377                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
4378
4379                   if (sym_count > max_sym_count)
4380                     max_sym_count = sym_count;
4381
4382                   if ((sec->flags & SEC_RELOC) != 0)
4383                     {
4384                       size_t ext_size;
4385
4386                       ext_size = elf_section_data (sec)->rel_hdr.sh_size;
4387                       if (ext_size > max_external_reloc_size)
4388                         max_external_reloc_size = ext_size;
4389                       if (sec->reloc_count > max_internal_reloc_count)
4390                         max_internal_reloc_count = sec->reloc_count;
4391                     }
4392                 }
4393             }
4394         }
4395
4396       if (o->reloc_count > 0)
4397         o->flags |= SEC_RELOC;
4398       else
4399         {
4400           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
4401              set it (this is probably a bug) and if it is set
4402              assign_section_numbers will create a reloc section.  */
4403           o->flags &=~ SEC_RELOC;
4404         }
4405
4406       /* If the SEC_ALLOC flag is not set, force the section VMA to
4407          zero.  This is done in elf_fake_sections as well, but forcing
4408          the VMA to 0 here will ensure that relocs against these
4409          sections are handled correctly.  */
4410       if ((o->flags & SEC_ALLOC) == 0
4411           && ! o->user_set_vma)
4412         o->vma = 0;
4413     }
4414
4415   if (! info->relocateable && merged)
4416     elf_link_hash_traverse (elf_hash_table (info),
4417                             elf_link_sec_merge_syms, (PTR) abfd);
4418
4419   /* Figure out the file positions for everything but the symbol table
4420      and the relocs.  We set symcount to force assign_section_numbers
4421      to create a symbol table.  */
4422   bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1;
4423   BFD_ASSERT (! abfd->output_has_begun);
4424   if (! _bfd_elf_compute_section_file_positions (abfd, info))
4425     goto error_return;
4426
4427   /* Figure out how many relocations we will have in each section.
4428      Just using RELOC_COUNT isn't good enough since that doesn't
4429      maintain a separate value for REL vs. RELA relocations.  */
4430   if (info->relocateable || info->emitrelocations)
4431     for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
4432       for (o = sub->sections; o != NULL; o = o->next)
4433         {
4434           asection *output_section;
4435
4436           if (! o->linker_mark)
4437             {
4438               /* This section was omitted from the link.  */
4439               continue;
4440             }
4441
4442           output_section = o->output_section;
4443
4444           if (output_section != NULL
4445               && (o->flags & SEC_RELOC) != 0)
4446             {
4447               struct bfd_elf_section_data *esdi
4448                 = elf_section_data (o);
4449               struct bfd_elf_section_data *esdo
4450                 = elf_section_data (output_section);
4451               unsigned int *rel_count;
4452               unsigned int *rel_count2;
4453
4454               /* We must be careful to add the relocation froms the
4455                  input section to the right output count.  */
4456               if (esdi->rel_hdr.sh_entsize == esdo->rel_hdr.sh_entsize)
4457                 {
4458                   rel_count = &esdo->rel_count;
4459                   rel_count2 = &esdo->rel_count2;
4460                 }
4461               else
4462                 {
4463                   rel_count = &esdo->rel_count2;
4464                   rel_count2 = &esdo->rel_count;
4465                 }
4466
4467               *rel_count += NUM_SHDR_ENTRIES (& esdi->rel_hdr);
4468               if (esdi->rel_hdr2)
4469                 *rel_count2 += NUM_SHDR_ENTRIES (esdi->rel_hdr2);
4470             }
4471         }
4472
4473   /* That created the reloc sections.  Set their sizes, and assign
4474      them file positions, and allocate some buffers.  */
4475   for (o = abfd->sections; o != NULL; o = o->next)
4476     {
4477       if ((o->flags & SEC_RELOC) != 0)
4478         {
4479           if (!elf_link_size_reloc_section (abfd,
4480                                             &elf_section_data (o)->rel_hdr,
4481                                             o))
4482             goto error_return;
4483
4484           if (elf_section_data (o)->rel_hdr2
4485               && !elf_link_size_reloc_section (abfd,
4486                                                elf_section_data (o)->rel_hdr2,
4487                                                o))
4488             goto error_return;
4489         }
4490
4491       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
4492          to count upwards while actually outputting the relocations.  */
4493       elf_section_data (o)->rel_count = 0;
4494       elf_section_data (o)->rel_count2 = 0;
4495     }
4496
4497   _bfd_elf_assign_file_positions_for_relocs (abfd);
4498
4499   /* We have now assigned file positions for all the sections except
4500      .symtab and .strtab.  We start the .symtab section at the current
4501      file position, and write directly to it.  We build the .strtab
4502      section in memory.  */
4503   bfd_get_symcount (abfd) = 0;
4504   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
4505   /* sh_name is set in prep_headers.  */
4506   symtab_hdr->sh_type = SHT_SYMTAB;
4507   symtab_hdr->sh_flags = 0;
4508   symtab_hdr->sh_addr = 0;
4509   symtab_hdr->sh_size = 0;
4510   symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
4511   /* sh_link is set in assign_section_numbers.  */
4512   /* sh_info is set below.  */
4513   /* sh_offset is set just below.  */
4514   symtab_hdr->sh_addralign = bed->s->file_align;
4515
4516   off = elf_tdata (abfd)->next_file_pos;
4517   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
4518
4519   /* Note that at this point elf_tdata (abfd)->next_file_pos is
4520      incorrect.  We do not yet know the size of the .symtab section.
4521      We correct next_file_pos below, after we do know the size.  */
4522
4523   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
4524      continuously seeking to the right position in the file.  */
4525   if (! info->keep_memory || max_sym_count < 20)
4526     finfo.symbuf_size = 20;
4527   else
4528     finfo.symbuf_size = max_sym_count;
4529   finfo.symbuf = ((Elf_External_Sym *)
4530                   bfd_malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
4531   if (finfo.symbuf == NULL)
4532     goto error_return;
4533
4534   /* Start writing out the symbol table.  The first symbol is always a
4535      dummy symbol.  */
4536   if (info->strip != strip_all || info->relocateable || info->emitrelocations)
4537     {
4538       elfsym.st_value = 0;
4539       elfsym.st_size = 0;
4540       elfsym.st_info = 0;
4541       elfsym.st_other = 0;
4542       elfsym.st_shndx = SHN_UNDEF;
4543       if (! elf_link_output_sym (&finfo, (const char *) NULL,
4544                                  &elfsym, bfd_und_section_ptr))
4545         goto error_return;
4546     }
4547
4548 #if 0
4549   /* Some standard ELF linkers do this, but we don't because it causes
4550      bootstrap comparison failures.  */
4551   /* Output a file symbol for the output file as the second symbol.
4552      We output this even if we are discarding local symbols, although
4553      I'm not sure if this is correct.  */
4554   elfsym.st_value = 0;
4555   elfsym.st_size = 0;
4556   elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
4557   elfsym.st_other = 0;
4558   elfsym.st_shndx = SHN_ABS;
4559   if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
4560                              &elfsym, bfd_abs_section_ptr))
4561     goto error_return;
4562 #endif
4563
4564   /* Output a symbol for each section.  We output these even if we are
4565      discarding local symbols, since they are used for relocs.  These
4566      symbols have no names.  We store the index of each one in the
4567      index field of the section, so that we can find it again when
4568      outputting relocs.  */
4569   if (info->strip != strip_all || info->relocateable || info->emitrelocations)
4570     {
4571       elfsym.st_size = 0;
4572       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
4573       elfsym.st_other = 0;
4574       for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
4575         {
4576           o = section_from_elf_index (abfd, i);
4577           if (o != NULL)
4578             o->target_index = bfd_get_symcount (abfd);
4579           elfsym.st_shndx = i;
4580           if (info->relocateable || o == NULL)
4581             elfsym.st_value = 0;
4582           else
4583             elfsym.st_value = o->vma;
4584           if (! elf_link_output_sym (&finfo, (const char *) NULL,
4585                                      &elfsym, o))
4586             goto error_return;
4587         }
4588     }
4589
4590   /* Allocate some memory to hold information read in from the input
4591      files.  */
4592   finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
4593   finfo.external_relocs = (PTR) bfd_malloc (max_external_reloc_size);
4594   finfo.internal_relocs = ((Elf_Internal_Rela *)
4595                            bfd_malloc (max_internal_reloc_count
4596                                        * sizeof (Elf_Internal_Rela)
4597                                        * bed->s->int_rels_per_ext_rel));
4598   finfo.external_syms = ((Elf_External_Sym *)
4599                          bfd_malloc (max_sym_count
4600                                      * sizeof (Elf_External_Sym)));
4601   finfo.internal_syms = ((Elf_Internal_Sym *)
4602                          bfd_malloc (max_sym_count
4603                                      * sizeof (Elf_Internal_Sym)));
4604   finfo.indices = (long *) bfd_malloc (max_sym_count * sizeof (long));
4605   finfo.sections = ((asection **)
4606                     bfd_malloc (max_sym_count * sizeof (asection *)));
4607   if ((finfo.contents == NULL && max_contents_size != 0)
4608       || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
4609       || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
4610       || (finfo.external_syms == NULL && max_sym_count != 0)
4611       || (finfo.internal_syms == NULL && max_sym_count != 0)
4612       || (finfo.indices == NULL && max_sym_count != 0)
4613       || (finfo.sections == NULL && max_sym_count != 0))
4614     goto error_return;
4615
4616   /* Since ELF permits relocations to be against local symbols, we
4617      must have the local symbols available when we do the relocations.
4618      Since we would rather only read the local symbols once, and we
4619      would rather not keep them in memory, we handle all the
4620      relocations for a single input file at the same time.
4621
4622      Unfortunately, there is no way to know the total number of local
4623      symbols until we have seen all of them, and the local symbol
4624      indices precede the global symbol indices.  This means that when
4625      we are generating relocateable output, and we see a reloc against
4626      a global symbol, we can not know the symbol index until we have
4627      finished examining all the local symbols to see which ones we are
4628      going to output.  To deal with this, we keep the relocations in
4629      memory, and don't output them until the end of the link.  This is
4630      an unfortunate waste of memory, but I don't see a good way around
4631      it.  Fortunately, it only happens when performing a relocateable
4632      link, which is not the common case.  FIXME: If keep_memory is set
4633      we could write the relocs out and then read them again; I don't
4634      know how bad the memory loss will be.  */
4635
4636   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
4637     sub->output_has_begun = false;
4638   for (o = abfd->sections; o != NULL; o = o->next)
4639     {
4640       for (p = o->link_order_head; p != NULL; p = p->next)
4641         {
4642           if (p->type == bfd_indirect_link_order
4643               && (bfd_get_flavour (p->u.indirect.section->owner)
4644                   == bfd_target_elf_flavour))
4645             {
4646               sub = p->u.indirect.section->owner;
4647               if (! sub->output_has_begun)
4648                 {
4649                   if (! elf_link_input_bfd (&finfo, sub))
4650                     goto error_return;
4651                   sub->output_has_begun = true;
4652                 }
4653             }
4654           else if (p->type == bfd_section_reloc_link_order
4655                    || p->type == bfd_symbol_reloc_link_order)
4656             {
4657               if (! elf_reloc_link_order (abfd, info, o, p))
4658                 goto error_return;
4659             }
4660           else
4661             {
4662               if (! _bfd_default_link_order (abfd, info, o, p))
4663                 goto error_return;
4664             }
4665         }
4666     }
4667
4668   /* That wrote out all the local symbols.  Finish up the symbol table
4669      with the global symbols. Even if we want to strip everything we
4670      can, we still need to deal with those global symbols that got
4671      converted to local in a version script.  */
4672
4673   if (info->shared)
4674     {
4675       /* Output any global symbols that got converted to local in a
4676          version script.  We do this in a separate step since ELF
4677          requires all local symbols to appear prior to any global
4678          symbols.  FIXME: We should only do this if some global
4679          symbols were, in fact, converted to become local.  FIXME:
4680          Will this work correctly with the Irix 5 linker?  */
4681       eoinfo.failed = false;
4682       eoinfo.finfo = &finfo;
4683       eoinfo.localsyms = true;
4684       elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
4685                               (PTR) &eoinfo);
4686       if (eoinfo.failed)
4687         return false;
4688     }
4689
4690   /* The sh_info field records the index of the first non local symbol.  */
4691   symtab_hdr->sh_info = bfd_get_symcount (abfd);
4692
4693   if (dynamic
4694       && finfo.dynsym_sec->output_section != bfd_abs_section_ptr)
4695     {
4696       Elf_Internal_Sym sym;
4697       Elf_External_Sym *dynsym =
4698         (Elf_External_Sym *)finfo.dynsym_sec->contents;
4699       long last_local = 0;
4700
4701       /* Write out the section symbols for the output sections.  */
4702       if (info->shared)
4703         {
4704           asection *s;
4705
4706           sym.st_size = 0;
4707           sym.st_name = 0;
4708           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
4709           sym.st_other = 0;
4710
4711           for (s = abfd->sections; s != NULL; s = s->next)
4712             {
4713               int indx;
4714               indx = elf_section_data (s)->this_idx;
4715               BFD_ASSERT (indx > 0);
4716               sym.st_shndx = indx;
4717               sym.st_value = s->vma;
4718
4719               elf_swap_symbol_out (abfd, &sym,
4720                                    dynsym + elf_section_data (s)->dynindx);
4721             }
4722
4723           last_local = bfd_count_sections (abfd);
4724         }
4725
4726       /* Write out the local dynsyms.  */
4727       if (elf_hash_table (info)->dynlocal)
4728         {
4729           struct elf_link_local_dynamic_entry *e;
4730           for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
4731             {
4732               asection *s;
4733
4734               sym.st_size = e->isym.st_size;
4735               sym.st_other = e->isym.st_other;
4736
4737               /* Copy the internal symbol as is.
4738                  Note that we saved a word of storage and overwrote
4739                  the original st_name with the dynstr_index.  */
4740               sym = e->isym;
4741
4742               if (e->isym.st_shndx > 0 && e->isym.st_shndx < SHN_LORESERVE)
4743                 {
4744                   s = bfd_section_from_elf_index (e->input_bfd,
4745                                                   e->isym.st_shndx);
4746
4747                   sym.st_shndx =
4748                     elf_section_data (s->output_section)->this_idx;
4749                   sym.st_value = (s->output_section->vma
4750                                   + s->output_offset
4751                                   + e->isym.st_value);
4752                 }
4753
4754               if (last_local < e->dynindx)
4755                 last_local = e->dynindx;
4756
4757               elf_swap_symbol_out (abfd, &sym, dynsym + e->dynindx);
4758             }
4759         }
4760
4761       elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info =
4762         last_local + 1;
4763     }
4764
4765   /* We get the global symbols from the hash table.  */
4766   eoinfo.failed = false;
4767   eoinfo.localsyms = false;
4768   eoinfo.finfo = &finfo;
4769   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
4770                           (PTR) &eoinfo);
4771   if (eoinfo.failed)
4772     return false;
4773
4774   /* If backend needs to output some symbols not present in the hash
4775      table, do it now.  */
4776   if (bed->elf_backend_output_arch_syms)
4777     {
4778       if (! (*bed->elf_backend_output_arch_syms)
4779               (abfd, info, (PTR) &finfo,
4780                (boolean (*) PARAMS ((PTR, const char *,
4781                             Elf_Internal_Sym *, asection *)))
4782                elf_link_output_sym))
4783         return false;
4784     }
4785
4786   /* Flush all symbols to the file.  */
4787   if (! elf_link_flush_output_syms (&finfo))
4788     return false;
4789
4790   /* Now we know the size of the symtab section.  */
4791   off += symtab_hdr->sh_size;
4792
4793   /* Finish up and write out the symbol string table (.strtab)
4794      section.  */
4795   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
4796   /* sh_name was set in prep_headers.  */
4797   symstrtab_hdr->sh_type = SHT_STRTAB;
4798   symstrtab_hdr->sh_flags = 0;
4799   symstrtab_hdr->sh_addr = 0;
4800   symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
4801   symstrtab_hdr->sh_entsize = 0;
4802   symstrtab_hdr->sh_link = 0;
4803   symstrtab_hdr->sh_info = 0;
4804   /* sh_offset is set just below.  */
4805   symstrtab_hdr->sh_addralign = 1;
4806
4807   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true);
4808   elf_tdata (abfd)->next_file_pos = off;
4809
4810   if (bfd_get_symcount (abfd) > 0)
4811     {
4812       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
4813           || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
4814         return false;
4815     }
4816
4817   /* Adjust the relocs to have the correct symbol indices.  */
4818   for (o = abfd->sections; o != NULL; o = o->next)
4819     {
4820       if ((o->flags & SEC_RELOC) == 0)
4821         continue;
4822
4823       elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr,
4824                               elf_section_data (o)->rel_count,
4825                               elf_section_data (o)->rel_hashes);
4826       if (elf_section_data (o)->rel_hdr2 != NULL)
4827         elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2,
4828                                 elf_section_data (o)->rel_count2,
4829                                 (elf_section_data (o)->rel_hashes
4830                                  + elf_section_data (o)->rel_count));
4831
4832       /* Set the reloc_count field to 0 to prevent write_relocs from
4833          trying to swap the relocs out itself.  */
4834       o->reloc_count = 0;
4835     }
4836
4837   /* If we are linking against a dynamic object, or generating a
4838      shared library, finish up the dynamic linking information.  */
4839   if (dynamic)
4840     {
4841       Elf_External_Dyn *dyncon, *dynconend;
4842
4843       /* Fix up .dynamic entries.  */
4844       o = bfd_get_section_by_name (dynobj, ".dynamic");
4845       BFD_ASSERT (o != NULL);
4846
4847       dyncon = (Elf_External_Dyn *) o->contents;
4848       dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
4849       for (; dyncon < dynconend; dyncon++)
4850         {
4851           Elf_Internal_Dyn dyn;
4852           const char *name;
4853           unsigned int type;
4854
4855           elf_swap_dyn_in (dynobj, dyncon, &dyn);
4856
4857           switch (dyn.d_tag)
4858             {
4859             default:
4860               break;
4861             case DT_INIT:
4862               name = info->init_function;
4863               goto get_sym;
4864             case DT_FINI:
4865               name = info->fini_function;
4866             get_sym:
4867               {
4868                 struct elf_link_hash_entry *h;
4869
4870                 h = elf_link_hash_lookup (elf_hash_table (info), name,
4871                                           false, false, true);
4872                 if (h != NULL
4873                     && (h->root.type == bfd_link_hash_defined
4874                         || h->root.type == bfd_link_hash_defweak))
4875                   {
4876                     dyn.d_un.d_val = h->root.u.def.value;
4877                     o = h->root.u.def.section;
4878                     if (o->output_section != NULL)
4879                       dyn.d_un.d_val += (o->output_section->vma
4880                                          + o->output_offset);
4881                     else
4882                       {
4883                         /* The symbol is imported from another shared
4884                            library and does not apply to this one.  */
4885                         dyn.d_un.d_val = 0;
4886                       }
4887
4888                     elf_swap_dyn_out (dynobj, &dyn, dyncon);
4889                   }
4890               }
4891               break;
4892
4893             case DT_HASH:
4894               name = ".hash";
4895               goto get_vma;
4896             case DT_STRTAB:
4897               name = ".dynstr";
4898               goto get_vma;
4899             case DT_SYMTAB:
4900               name = ".dynsym";
4901               goto get_vma;
4902             case DT_VERDEF:
4903               name = ".gnu.version_d";
4904               goto get_vma;
4905             case DT_VERNEED:
4906               name = ".gnu.version_r";
4907               goto get_vma;
4908             case DT_VERSYM:
4909               name = ".gnu.version";
4910             get_vma:
4911               o = bfd_get_section_by_name (abfd, name);
4912               BFD_ASSERT (o != NULL);
4913               dyn.d_un.d_ptr = o->vma;
4914               elf_swap_dyn_out (dynobj, &dyn, dyncon);
4915               break;
4916
4917             case DT_REL:
4918             case DT_RELA:
4919             case DT_RELSZ:
4920             case DT_RELASZ:
4921               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
4922                 type = SHT_REL;
4923               else
4924                 type = SHT_RELA;
4925               dyn.d_un.d_val = 0;
4926               for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
4927                 {
4928                   Elf_Internal_Shdr *hdr;
4929
4930                   hdr = elf_elfsections (abfd)[i];
4931                   if (hdr->sh_type == type
4932                       && (hdr->sh_flags & SHF_ALLOC) != 0)
4933                     {
4934                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
4935                         dyn.d_un.d_val += hdr->sh_size;
4936                       else
4937                         {
4938                           if (dyn.d_un.d_val == 0
4939                               || hdr->sh_addr < dyn.d_un.d_val)
4940                             dyn.d_un.d_val = hdr->sh_addr;
4941                         }
4942                     }
4943                 }
4944               elf_swap_dyn_out (dynobj, &dyn, dyncon);
4945               break;
4946             }
4947         }
4948     }
4949
4950   /* If we have created any dynamic sections, then output them.  */
4951   if (dynobj != NULL)
4952     {
4953       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
4954         goto error_return;
4955
4956       for (o = dynobj->sections; o != NULL; o = o->next)
4957         {
4958           if ((o->flags & SEC_HAS_CONTENTS) == 0
4959               || o->_raw_size == 0
4960               || o->output_section == bfd_abs_section_ptr)
4961             continue;
4962           if ((o->flags & SEC_LINKER_CREATED) == 0)
4963             {
4964               /* At this point, we are only interested in sections
4965                  created by elf_link_create_dynamic_sections.  */
4966               continue;
4967             }
4968           if ((elf_section_data (o->output_section)->this_hdr.sh_type
4969                != SHT_STRTAB)
4970               || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
4971             {
4972               if (! bfd_set_section_contents (abfd, o->output_section,
4973                                               o->contents, o->output_offset,
4974                                               o->_raw_size))
4975                 goto error_return;
4976             }
4977           else
4978             {
4979               file_ptr off;
4980
4981               /* The contents of the .dynstr section are actually in a
4982                  stringtab.  */
4983               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
4984               if (bfd_seek (abfd, off, SEEK_SET) != 0
4985                   || ! _bfd_stringtab_emit (abfd,
4986                                             elf_hash_table (info)->dynstr))
4987                 goto error_return;
4988             }
4989         }
4990     }
4991
4992   /* If we have optimized stabs strings, output them.  */
4993   if (elf_hash_table (info)->stab_info != NULL)
4994     {
4995       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
4996         goto error_return;
4997     }
4998
4999   if (finfo.symstrtab != NULL)
5000     _bfd_stringtab_free (finfo.symstrtab);
5001   if (finfo.contents != NULL)
5002     free (finfo.contents);
5003   if (finfo.external_relocs != NULL)
5004     free (finfo.external_relocs);
5005   if (finfo.internal_relocs != NULL)
5006     free (finfo.internal_relocs);
5007   if (finfo.external_syms != NULL)
5008     free (finfo.external_syms);
5009   if (finfo.internal_syms != NULL)
5010     free (finfo.internal_syms);
5011   if (finfo.indices != NULL)
5012     free (finfo.indices);
5013   if (finfo.sections != NULL)
5014     free (finfo.sections);
5015   if (finfo.symbuf != NULL)
5016     free (finfo.symbuf);
5017   for (o = abfd->sections; o != NULL; o = o->next)
5018     {
5019       if ((o->flags & SEC_RELOC) != 0
5020           && elf_section_data (o)->rel_hashes != NULL)
5021         free (elf_section_data (o)->rel_hashes);
5022     }
5023
5024   elf_tdata (abfd)->linker = true;
5025
5026   return true;
5027
5028  error_return:
5029   if (finfo.symstrtab != NULL)
5030     _bfd_stringtab_free (finfo.symstrtab);
5031   if (finfo.contents != NULL)
5032     free (finfo.contents);
5033   if (finfo.external_relocs != NULL)
5034     free (finfo.external_relocs);
5035   if (finfo.internal_relocs != NULL)
5036     free (finfo.internal_relocs);
5037   if (finfo.external_syms != NULL)
5038     free (finfo.external_syms);
5039   if (finfo.internal_syms != NULL)
5040     free (finfo.internal_syms);
5041   if (finfo.indices != NULL)
5042     free (finfo.indices);
5043   if (finfo.sections != NULL)
5044     free (finfo.sections);
5045   if (finfo.symbuf != NULL)
5046     free (finfo.symbuf);
5047   for (o = abfd->sections; o != NULL; o = o->next)
5048     {
5049       if ((o->flags & SEC_RELOC) != 0
5050           && elf_section_data (o)->rel_hashes != NULL)
5051         free (elf_section_data (o)->rel_hashes);
5052     }
5053
5054   return false;
5055 }
5056
5057 /* Add a symbol to the output symbol table.  */
5058
5059 static boolean
5060 elf_link_output_sym (finfo, name, elfsym, input_sec)
5061      struct elf_final_link_info *finfo;
5062      const char *name;
5063      Elf_Internal_Sym *elfsym;
5064      asection *input_sec;
5065 {
5066   boolean (*output_symbol_hook) PARAMS ((bfd *,
5067                                          struct bfd_link_info *info,
5068                                          const char *,
5069                                          Elf_Internal_Sym *,
5070                                          asection *));
5071
5072   output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
5073     elf_backend_link_output_symbol_hook;
5074   if (output_symbol_hook != NULL)
5075     {
5076       if (! ((*output_symbol_hook)
5077              (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
5078         return false;
5079     }
5080
5081   if (name == (const char *) NULL || *name == '\0')
5082     elfsym->st_name = 0;
5083   else if (input_sec->flags & SEC_EXCLUDE)
5084     elfsym->st_name = 0;
5085   else
5086     {
5087       elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
5088                                                             name, true,
5089                                                             false);
5090       if (elfsym->st_name == (unsigned long) -1)
5091         return false;
5092     }
5093
5094   if (finfo->symbuf_count >= finfo->symbuf_size)
5095     {
5096       if (! elf_link_flush_output_syms (finfo))
5097         return false;
5098     }
5099
5100   elf_swap_symbol_out (finfo->output_bfd, elfsym,
5101                        (PTR) (finfo->symbuf + finfo->symbuf_count));
5102   ++finfo->symbuf_count;
5103
5104   ++ bfd_get_symcount (finfo->output_bfd);
5105
5106   return true;
5107 }
5108
5109 /* Flush the output symbols to the file.  */
5110
5111 static boolean
5112 elf_link_flush_output_syms (finfo)
5113      struct elf_final_link_info *finfo;
5114 {
5115   if (finfo->symbuf_count > 0)
5116     {
5117       Elf_Internal_Shdr *symtab;
5118
5119       symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
5120
5121       if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
5122                     SEEK_SET) != 0
5123           || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
5124                          sizeof (Elf_External_Sym), finfo->output_bfd)
5125               != finfo->symbuf_count * sizeof (Elf_External_Sym)))
5126         return false;
5127
5128       symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
5129
5130       finfo->symbuf_count = 0;
5131     }
5132
5133   return true;
5134 }
5135
5136 /* Adjust all external symbols pointing into SEC_MERGE sections
5137    to reflect the object merging within the sections.  */
5138
5139 static boolean
5140 elf_link_sec_merge_syms (h, data)
5141      struct elf_link_hash_entry *h;
5142      PTR data;
5143 {
5144   asection *sec;
5145
5146   if ((h->root.type == bfd_link_hash_defined
5147        || h->root.type == bfd_link_hash_defweak)
5148       && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
5149       && elf_section_data (sec)->merge_info)
5150     {
5151       bfd *output_bfd = (bfd *) data;
5152
5153       h->root.u.def.value =
5154         _bfd_merged_section_offset (output_bfd,
5155                                     &h->root.u.def.section,
5156                                     elf_section_data (sec)->merge_info,
5157                                     h->root.u.def.value, (bfd_vma) 0);
5158     }
5159
5160   return true;
5161 }
5162
5163 /* Add an external symbol to the symbol table.  This is called from
5164    the hash table traversal routine.  When generating a shared object,
5165    we go through the symbol table twice.  The first time we output
5166    anything that might have been forced to local scope in a version
5167    script.  The second time we output the symbols that are still
5168    global symbols.  */
5169
5170 static boolean
5171 elf_link_output_extsym (h, data)
5172      struct elf_link_hash_entry *h;
5173      PTR data;
5174 {
5175   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
5176   struct elf_final_link_info *finfo = eoinfo->finfo;
5177   boolean strip;
5178   Elf_Internal_Sym sym;
5179   asection *input_sec;
5180
5181   /* Decide whether to output this symbol in this pass.  */
5182   if (eoinfo->localsyms)
5183     {
5184       if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
5185         return true;
5186     }
5187   else
5188     {
5189       if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
5190         return true;
5191     }
5192
5193   /* If we are not creating a shared library, and this symbol is
5194      referenced by a shared library but is not defined anywhere, then
5195      warn that it is undefined.  If we do not do this, the runtime
5196      linker will complain that the symbol is undefined when the
5197      program is run.  We don't have to worry about symbols that are
5198      referenced by regular files, because we will already have issued
5199      warnings for them.  */
5200   if (! finfo->info->relocateable
5201       && ! finfo->info->allow_shlib_undefined
5202       && ! (finfo->info->shared
5203             && !finfo->info->no_undefined)
5204       && h->root.type == bfd_link_hash_undefined
5205       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
5206       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
5207     {
5208       if (! ((*finfo->info->callbacks->undefined_symbol)
5209              (finfo->info, h->root.root.string, h->root.u.undef.abfd,
5210               (asection *) NULL, 0, true)))
5211         {
5212           eoinfo->failed = true;
5213           return false;
5214         }
5215     }
5216
5217   /* We don't want to output symbols that have never been mentioned by
5218      a regular file, or that we have been told to strip.  However, if
5219      h->indx is set to -2, the symbol is used by a reloc and we must
5220      output it.  */
5221   if (h->indx == -2)
5222     strip = false;
5223   else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
5224             || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
5225            && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
5226            && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
5227     strip = true;
5228   else if (finfo->info->strip == strip_all
5229            || (finfo->info->strip == strip_some
5230                && bfd_hash_lookup (finfo->info->keep_hash,
5231                                    h->root.root.string,
5232                                    false, false) == NULL))
5233     strip = true;
5234   else
5235     strip = false;
5236
5237   /* If we're stripping it, and it's not a dynamic symbol, there's
5238      nothing else to do unless it is a forced local symbol.  */
5239   if (strip
5240       && h->dynindx == -1
5241       && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
5242     return true;
5243
5244   sym.st_value = 0;
5245   sym.st_size = h->size;
5246   sym.st_other = h->other;
5247   if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
5248     sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
5249   else if (h->root.type == bfd_link_hash_undefweak
5250            || h->root.type == bfd_link_hash_defweak)
5251     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
5252   else
5253     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
5254
5255   switch (h->root.type)
5256     {
5257     default:
5258     case bfd_link_hash_new:
5259       abort ();
5260       return false;
5261
5262     case bfd_link_hash_undefined:
5263       input_sec = bfd_und_section_ptr;
5264       sym.st_shndx = SHN_UNDEF;
5265       break;
5266
5267     case bfd_link_hash_undefweak:
5268       input_sec = bfd_und_section_ptr;
5269       sym.st_shndx = SHN_UNDEF;
5270       break;
5271
5272     case bfd_link_hash_defined:
5273     case bfd_link_hash_defweak:
5274       {
5275         input_sec = h->root.u.def.section;
5276         if (input_sec->output_section != NULL)
5277           {
5278             sym.st_shndx =
5279               _bfd_elf_section_from_bfd_section (finfo->output_bfd,
5280                                                  input_sec->output_section);
5281             if (sym.st_shndx == (unsigned short) -1)
5282               {
5283                 (*_bfd_error_handler)
5284                   (_("%s: could not find output section %s for input section %s"),
5285                    bfd_get_filename (finfo->output_bfd),
5286                    input_sec->output_section->name,
5287                    input_sec->name);
5288                 eoinfo->failed = true;
5289                 return false;
5290               }
5291
5292             /* ELF symbols in relocateable files are section relative,
5293                but in nonrelocateable files they are virtual
5294                addresses.  */
5295             sym.st_value = h->root.u.def.value + input_sec->output_offset;
5296             if (! finfo->info->relocateable)
5297               sym.st_value += input_sec->output_section->vma;
5298           }
5299         else
5300           {
5301             BFD_ASSERT (input_sec->owner == NULL
5302                         || (input_sec->owner->flags & DYNAMIC) != 0);
5303             sym.st_shndx = SHN_UNDEF;
5304             input_sec = bfd_und_section_ptr;
5305           }
5306       }
5307       break;
5308
5309     case bfd_link_hash_common:
5310       input_sec = h->root.u.c.p->section;
5311       sym.st_shndx = SHN_COMMON;
5312       sym.st_value = 1 << h->root.u.c.p->alignment_power;
5313       break;
5314
5315     case bfd_link_hash_indirect:
5316       /* These symbols are created by symbol versioning.  They point
5317          to the decorated version of the name.  For example, if the
5318          symbol foo@@GNU_1.2 is the default, which should be used when
5319          foo is used with no version, then we add an indirect symbol
5320          foo which points to foo@@GNU_1.2.  We ignore these symbols,
5321          since the indirected symbol is already in the hash table.  */
5322       return true;
5323
5324     case bfd_link_hash_warning:
5325       /* We can't represent these symbols in ELF, although a warning
5326          symbol may have come from a .gnu.warning.SYMBOL section.  We
5327          just put the target symbol in the hash table.  If the target
5328          symbol does not really exist, don't do anything.  */
5329       if (h->root.u.i.link->type == bfd_link_hash_new)
5330         return true;
5331       return (elf_link_output_extsym
5332               ((struct elf_link_hash_entry *) h->root.u.i.link, data));
5333     }
5334
5335   /* Give the processor backend a chance to tweak the symbol value,
5336      and also to finish up anything that needs to be done for this
5337      symbol.  */
5338   if ((h->dynindx != -1
5339        || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
5340       && elf_hash_table (finfo->info)->dynamic_sections_created)
5341     {
5342       struct elf_backend_data *bed;
5343
5344       bed = get_elf_backend_data (finfo->output_bfd);
5345       if (! ((*bed->elf_backend_finish_dynamic_symbol)
5346              (finfo->output_bfd, finfo->info, h, &sym)))
5347         {
5348           eoinfo->failed = true;
5349           return false;
5350         }
5351     }
5352
5353   /* If we are marking the symbol as undefined, and there are no
5354      non-weak references to this symbol from a regular object, then
5355      mark the symbol as weak undefined; if there are non-weak
5356      references, mark the symbol as strong.  We can't do this earlier,
5357      because it might not be marked as undefined until the
5358      finish_dynamic_symbol routine gets through with it.  */
5359   if (sym.st_shndx == SHN_UNDEF
5360       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
5361       && (ELF_ST_BIND(sym.st_info) == STB_GLOBAL
5362           || ELF_ST_BIND(sym.st_info) == STB_WEAK))
5363     {
5364       int bindtype;
5365
5366       if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK) != 0)
5367         bindtype = STB_GLOBAL;
5368       else
5369         bindtype = STB_WEAK;
5370       sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info));
5371     }
5372
5373   /* If a symbol is not defined locally, we clear the visibility
5374      field.  */
5375   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
5376     sym.st_other ^= ELF_ST_VISIBILITY(sym.st_other);
5377
5378   /* If this symbol should be put in the .dynsym section, then put it
5379      there now.  We have already know the symbol index.  We also fill
5380      in the entry in the .hash section.  */
5381   if (h->dynindx != -1
5382       && elf_hash_table (finfo->info)->dynamic_sections_created)
5383     {
5384       size_t bucketcount;
5385       size_t bucket;
5386       size_t hash_entry_size;
5387       bfd_byte *bucketpos;
5388       bfd_vma chain;
5389
5390       sym.st_name = h->dynstr_index;
5391
5392       elf_swap_symbol_out (finfo->output_bfd, &sym,
5393                            (PTR) (((Elf_External_Sym *)
5394                                    finfo->dynsym_sec->contents)
5395                                   + h->dynindx));
5396
5397       bucketcount = elf_hash_table (finfo->info)->bucketcount;
5398       bucket = h->elf_hash_value % bucketcount;
5399       hash_entry_size
5400         = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
5401       bucketpos = ((bfd_byte *) finfo->hash_sec->contents
5402                    + (bucket + 2) * hash_entry_size);
5403       chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
5404       bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
5405       bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
5406                ((bfd_byte *) finfo->hash_sec->contents
5407                 + (bucketcount + 2 + h->dynindx) * hash_entry_size));
5408
5409       if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
5410         {
5411           Elf_Internal_Versym iversym;
5412
5413           if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
5414             {
5415               if (h->verinfo.verdef == NULL)
5416                 iversym.vs_vers = 0;
5417               else
5418                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
5419             }
5420           else
5421             {
5422               if (h->verinfo.vertree == NULL)
5423                 iversym.vs_vers = 1;
5424               else
5425                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
5426             }
5427
5428           if ((h->elf_link_hash_flags & ELF_LINK_HIDDEN) != 0)
5429             iversym.vs_vers |= VERSYM_HIDDEN;
5430
5431           _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym,
5432                                     (((Elf_External_Versym *)
5433                                       finfo->symver_sec->contents)
5434                                      + h->dynindx));
5435         }
5436     }
5437
5438   /* If we're stripping it, then it was just a dynamic symbol, and
5439      there's nothing else to do.  */
5440   if (strip)
5441     return true;
5442
5443   h->indx = bfd_get_symcount (finfo->output_bfd);
5444
5445   if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
5446     {
5447       eoinfo->failed = true;
5448       return false;
5449     }
5450
5451   return true;
5452 }
5453
5454 /* Copy the relocations indicated by the INTERNAL_RELOCS (which
5455    originated from the section given by INPUT_REL_HDR) to the
5456    OUTPUT_BFD.  */
5457
5458 static void
5459 elf_link_output_relocs (output_bfd, input_section, input_rel_hdr,
5460                         internal_relocs)
5461      bfd *output_bfd;
5462      asection *input_section;
5463      Elf_Internal_Shdr *input_rel_hdr;
5464      Elf_Internal_Rela *internal_relocs;
5465 {
5466   Elf_Internal_Rela *irela;
5467   Elf_Internal_Rela *irelaend;
5468   Elf_Internal_Shdr *output_rel_hdr;
5469   asection *output_section;
5470   unsigned int *rel_countp = NULL;
5471   struct elf_backend_data *bed;
5472
5473   output_section = input_section->output_section;
5474   output_rel_hdr = NULL;
5475
5476   if (elf_section_data (output_section)->rel_hdr.sh_entsize
5477       == input_rel_hdr->sh_entsize)
5478     {
5479       output_rel_hdr = &elf_section_data (output_section)->rel_hdr;
5480       rel_countp = &elf_section_data (output_section)->rel_count;
5481     }
5482   else if (elf_section_data (output_section)->rel_hdr2
5483            && (elf_section_data (output_section)->rel_hdr2->sh_entsize
5484                == input_rel_hdr->sh_entsize))
5485     {
5486       output_rel_hdr = elf_section_data (output_section)->rel_hdr2;
5487       rel_countp = &elf_section_data (output_section)->rel_count2;
5488     }
5489
5490   BFD_ASSERT (output_rel_hdr != NULL);
5491
5492   bed = get_elf_backend_data (output_bfd);
5493   irela = internal_relocs;
5494   irelaend = irela + NUM_SHDR_ENTRIES (input_rel_hdr)
5495                      * bed->s->int_rels_per_ext_rel;
5496
5497   if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
5498     {
5499       Elf_External_Rel *erel;
5500       Elf_Internal_Rel *irel;
5501       
5502       irel = (Elf_Internal_Rel *) bfd_zmalloc (bed->s->int_rels_per_ext_rel
5503                                                * sizeof (Elf_Internal_Rel));
5504       if (irel == NULL)
5505         {
5506           (*_bfd_error_handler) (_("Error: out of memory"));
5507           abort ();
5508         }
5509
5510       erel = ((Elf_External_Rel *) output_rel_hdr->contents + *rel_countp);
5511       for (; irela < irelaend; irela += bed->s->int_rels_per_ext_rel, erel++)
5512         {
5513           unsigned int i;
5514           
5515           for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
5516             {
5517               irel[i].r_offset = irela[i].r_offset;
5518               irel[i].r_info = irela[i].r_info;
5519               BFD_ASSERT (irela[i].r_addend == 0);
5520             }
5521
5522           if (bed->s->swap_reloc_out)
5523             (*bed->s->swap_reloc_out) (output_bfd, irel, (PTR) erel);
5524           else
5525             elf_swap_reloc_out (output_bfd, irel, erel);
5526         }
5527
5528       free (irel);
5529     }
5530   else
5531     {
5532       Elf_External_Rela *erela;
5533
5534       BFD_ASSERT (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rela));
5535
5536       erela = ((Elf_External_Rela *) output_rel_hdr->contents + *rel_countp);
5537       for (; irela < irelaend; irela += bed->s->int_rels_per_ext_rel, erela++)
5538         if (bed->s->swap_reloca_out)
5539           (*bed->s->swap_reloca_out) (output_bfd, irela, (PTR) erela);
5540         else
5541           elf_swap_reloca_out (output_bfd, irela, erela);
5542     }
5543
5544   /* Bump the counter, so that we know where to add the next set of
5545      relocations.  */
5546   *rel_countp += NUM_SHDR_ENTRIES (input_rel_hdr);
5547 }
5548
5549 /* Link an input file into the linker output file.  This function
5550    handles all the sections and relocations of the input file at once.
5551    This is so that we only have to read the local symbols once, and
5552    don't have to keep them in memory.  */
5553
5554 static boolean
5555 elf_link_input_bfd (finfo, input_bfd)
5556      struct elf_final_link_info *finfo;
5557      bfd *input_bfd;
5558 {
5559   boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
5560                                        bfd *, asection *, bfd_byte *,
5561                                        Elf_Internal_Rela *,
5562                                        Elf_Internal_Sym *, asection **));
5563   bfd *output_bfd;
5564   Elf_Internal_Shdr *symtab_hdr;
5565   size_t locsymcount;
5566   size_t extsymoff;
5567   Elf_External_Sym *external_syms;
5568   Elf_External_Sym *esym;
5569   Elf_External_Sym *esymend;
5570   Elf_Internal_Sym *isym;
5571   long *pindex;
5572   asection **ppsection;
5573   asection *o;
5574   struct elf_backend_data *bed;
5575
5576   output_bfd = finfo->output_bfd;
5577   bed = get_elf_backend_data (output_bfd);
5578   relocate_section = bed->elf_backend_relocate_section;
5579
5580   /* If this is a dynamic object, we don't want to do anything here:
5581      we don't want the local symbols, and we don't want the section
5582      contents.  */
5583   if ((input_bfd->flags & DYNAMIC) != 0)
5584     return true;
5585
5586   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5587   if (elf_bad_symtab (input_bfd))
5588     {
5589       locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
5590       extsymoff = 0;
5591     }
5592   else
5593     {
5594       locsymcount = symtab_hdr->sh_info;
5595       extsymoff = symtab_hdr->sh_info;
5596     }
5597
5598   /* Read the local symbols.  */
5599   if (symtab_hdr->contents != NULL)
5600     external_syms = (Elf_External_Sym *) symtab_hdr->contents;
5601   else if (locsymcount == 0)
5602     external_syms = NULL;
5603   else
5604     {
5605       external_syms = finfo->external_syms;
5606       if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
5607           || (bfd_read (external_syms, sizeof (Elf_External_Sym),
5608                         locsymcount, input_bfd)
5609               != locsymcount * sizeof (Elf_External_Sym)))
5610         return false;
5611     }
5612
5613   /* Swap in the local symbols and write out the ones which we know
5614      are going into the output file.  */
5615   esym = external_syms;
5616   esymend = esym + locsymcount;
5617   isym = finfo->internal_syms;
5618   pindex = finfo->indices;
5619   ppsection = finfo->sections;
5620   for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
5621     {
5622       asection *isec;
5623       const char *name;
5624       Elf_Internal_Sym osym;
5625
5626       elf_swap_symbol_in (input_bfd, esym, isym);
5627       *pindex = -1;
5628
5629       if (elf_bad_symtab (input_bfd))
5630         {
5631           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
5632             {
5633               *ppsection = NULL;
5634               continue;
5635             }
5636         }
5637
5638       name = NULL;
5639       if (isym->st_shndx == SHN_UNDEF)
5640         {
5641           isec = bfd_und_section_ptr;
5642           name = isec->name;
5643         }
5644       else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
5645         {
5646           isec = section_from_elf_index (input_bfd, isym->st_shndx);
5647           if (isec && elf_section_data (isec)->merge_info
5648               && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
5649             isym->st_value =
5650               _bfd_merged_section_offset (output_bfd, &isec,
5651                                           elf_section_data (isec)->merge_info,
5652                                           isym->st_value, (bfd_vma) 0);
5653         }
5654       else if (isym->st_shndx == SHN_ABS)
5655         {
5656           isec = bfd_abs_section_ptr;
5657           name = isec->name;
5658         }
5659       else if (isym->st_shndx == SHN_COMMON)
5660         {
5661           isec = bfd_com_section_ptr;
5662           name = isec->name;
5663         }
5664       else
5665         {
5666           /* Who knows?  */
5667           isec = NULL;
5668         }
5669
5670       *ppsection = isec;
5671
5672       /* Don't output the first, undefined, symbol.  */
5673       if (esym == external_syms)
5674         continue;
5675
5676       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
5677         {
5678           asection *ksec;
5679
5680           /* Save away all section symbol values.  */
5681           if (isec != NULL)
5682             {
5683               if (name)
5684                 {
5685                   if (isec->symbol->value != isym->st_value)
5686                     (*_bfd_error_handler)
5687                       (_("%s: invalid section symbol index 0x%x (%s) ingored"),
5688                        bfd_get_filename (input_bfd), isym->st_shndx,
5689                        name);
5690                   continue;
5691                 }
5692               isec->symbol->value = isym->st_value;
5693             }
5694
5695           /* If this is a discarded link-once section symbol, update
5696              it's value to that of the kept section symbol.  The
5697              linker will keep the first of any matching link-once
5698              sections, so we should have already seen it's section
5699              symbol.  I trust no-one will have the bright idea of
5700              re-ordering the bfd list...  */
5701           if (isec != NULL
5702               && (bfd_get_section_flags (input_bfd, isec) & SEC_LINK_ONCE) != 0
5703               && (ksec = isec->kept_section) != NULL)
5704             {
5705               isym->st_value = ksec->symbol->value;
5706
5707               /* That put the value right, but the section info is all
5708                  wrong.  I hope this works.  */
5709               isec->output_offset = ksec->output_offset;
5710               isec->output_section = ksec->output_section;
5711             }
5712
5713           /* We never output section symbols.  Instead, we use the
5714              section symbol of the corresponding section in the output
5715              file.  */
5716           continue;
5717         }
5718
5719       /* If we are stripping all symbols, we don't want to output this
5720          one.  */
5721       if (finfo->info->strip == strip_all)
5722         continue;
5723
5724       /* If we are discarding all local symbols, we don't want to
5725          output this one.  If we are generating a relocateable output
5726          file, then some of the local symbols may be required by
5727          relocs; we output them below as we discover that they are
5728          needed.  */
5729       if (finfo->info->discard == discard_all)
5730         continue;
5731
5732       /* If this symbol is defined in a section which we are
5733          discarding, we don't need to keep it, but note that
5734          linker_mark is only reliable for sections that have contents.
5735          For the benefit of the MIPS ELF linker, we check SEC_EXCLUDE
5736          as well as linker_mark.  */
5737       if (isym->st_shndx > 0
5738           && isym->st_shndx < SHN_LORESERVE
5739           && isec != NULL
5740           && ((! isec->linker_mark && (isec->flags & SEC_HAS_CONTENTS) != 0)
5741               || (! finfo->info->relocateable
5742                   && (isec->flags & SEC_EXCLUDE) != 0)))
5743         continue;
5744
5745       /* Get the name of the symbol.  */
5746       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
5747                                               isym->st_name);
5748       if (name == NULL)
5749         return false;
5750
5751       /* See if we are discarding symbols with this name.  */
5752       if ((finfo->info->strip == strip_some
5753            && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
5754                == NULL))
5755           || (((finfo->info->discard == discard_sec_merge
5756                 && (isec->flags & SEC_MERGE) && ! finfo->info->relocateable)
5757                || finfo->info->discard == discard_l)
5758               && bfd_is_local_label_name (input_bfd, name)))
5759         continue;
5760
5761       /* If we get here, we are going to output this symbol.  */
5762
5763       osym = *isym;
5764
5765       /* Adjust the section index for the output file.  */
5766       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
5767                                                          isec->output_section);
5768       if (osym.st_shndx == (unsigned short) -1)
5769         return false;
5770
5771       *pindex = bfd_get_symcount (output_bfd);
5772
5773       /* ELF symbols in relocateable files are section relative, but
5774          in executable files they are virtual addresses.  Note that
5775          this code assumes that all ELF sections have an associated
5776          BFD section with a reasonable value for output_offset; below
5777          we assume that they also have a reasonable value for
5778          output_section.  Any special sections must be set up to meet
5779          these requirements.  */
5780       osym.st_value += isec->output_offset;
5781       if (! finfo->info->relocateable)
5782         osym.st_value += isec->output_section->vma;
5783
5784       if (! elf_link_output_sym (finfo, name, &osym, isec))
5785         return false;
5786     }
5787
5788   /* Relocate the contents of each section.  */
5789   for (o = input_bfd->sections; o != NULL; o = o->next)
5790     {
5791       bfd_byte *contents;
5792
5793       if (! o->linker_mark)
5794         {
5795           /* This section was omitted from the link.  */
5796           continue;
5797         }
5798
5799       if ((o->flags & SEC_HAS_CONTENTS) == 0
5800           || (o->_raw_size == 0 && (o->flags & SEC_RELOC) == 0))
5801         continue;
5802
5803       if ((o->flags & SEC_LINKER_CREATED) != 0)
5804         {
5805           /* Section was created by elf_link_create_dynamic_sections
5806              or somesuch.  */
5807           continue;
5808         }
5809
5810       /* Get the contents of the section.  They have been cached by a
5811          relaxation routine.  Note that o is a section in an input
5812          file, so the contents field will not have been set by any of
5813          the routines which work on output files.  */
5814       if (elf_section_data (o)->this_hdr.contents != NULL)
5815         contents = elf_section_data (o)->this_hdr.contents;
5816       else
5817         {
5818           contents = finfo->contents;
5819           if (! bfd_get_section_contents (input_bfd, o, contents,
5820                                           (file_ptr) 0, o->_raw_size))
5821             return false;
5822         }
5823
5824       if ((o->flags & SEC_RELOC) != 0)
5825         {
5826           Elf_Internal_Rela *internal_relocs;
5827
5828           /* Get the swapped relocs.  */
5829           internal_relocs = (NAME(_bfd_elf,link_read_relocs)
5830                              (input_bfd, o, finfo->external_relocs,
5831                               finfo->internal_relocs, false));
5832           if (internal_relocs == NULL
5833               && o->reloc_count > 0)
5834             return false;
5835
5836           /* Relocate the section by invoking a back end routine.
5837
5838              The back end routine is responsible for adjusting the
5839              section contents as necessary, and (if using Rela relocs
5840              and generating a relocateable output file) adjusting the
5841              reloc addend as necessary.
5842
5843              The back end routine does not have to worry about setting
5844              the reloc address or the reloc symbol index.
5845
5846              The back end routine is given a pointer to the swapped in
5847              internal symbols, and can access the hash table entries
5848              for the external symbols via elf_sym_hashes (input_bfd).
5849
5850              When generating relocateable output, the back end routine
5851              must handle STB_LOCAL/STT_SECTION symbols specially.  The
5852              output symbol is going to be a section symbol
5853              corresponding to the output section, which will require
5854              the addend to be adjusted.  */
5855
5856           if (! (*relocate_section) (output_bfd, finfo->info,
5857                                      input_bfd, o, contents,
5858                                      internal_relocs,
5859                                      finfo->internal_syms,
5860                                      finfo->sections))
5861             return false;
5862
5863           if (finfo->info->relocateable || finfo->info->emitrelocations)
5864             {
5865               Elf_Internal_Rela *irela;
5866               Elf_Internal_Rela *irelaend;
5867               struct elf_link_hash_entry **rel_hash;
5868               Elf_Internal_Shdr *input_rel_hdr;
5869               unsigned int next_erel;
5870
5871               /* Adjust the reloc addresses and symbol indices.  */
5872
5873               irela = internal_relocs;
5874               irelaend = irela
5875                          + o->reloc_count * bed->s->int_rels_per_ext_rel;
5876               rel_hash = (elf_section_data (o->output_section)->rel_hashes
5877                           + elf_section_data (o->output_section)->rel_count
5878                           + elf_section_data (o->output_section)->rel_count2);
5879               for (next_erel = 0; irela < irelaend; irela++, next_erel++)
5880                 {
5881                   unsigned long r_symndx;
5882                   Elf_Internal_Sym *isym;
5883                   asection *sec;
5884
5885                   if (next_erel == bed->s->int_rels_per_ext_rel)
5886                     {
5887                       rel_hash++;
5888                       next_erel = 0;
5889                     }
5890
5891                   irela->r_offset += o->output_offset;
5892
5893                   /* Relocs in an executable have to be virtual addresses.  */
5894                   if (finfo->info->emitrelocations)
5895                     irela->r_offset += o->output_section->vma;
5896
5897                   r_symndx = ELF_R_SYM (irela->r_info);
5898
5899                   if (r_symndx == 0)
5900                     continue;
5901
5902                   if (r_symndx >= locsymcount
5903                       || (elf_bad_symtab (input_bfd)
5904                           && finfo->sections[r_symndx] == NULL))
5905                     {
5906                       struct elf_link_hash_entry *rh;
5907                       unsigned long indx;
5908
5909                       /* This is a reloc against a global symbol.  We
5910                          have not yet output all the local symbols, so
5911                          we do not know the symbol index of any global
5912                          symbol.  We set the rel_hash entry for this
5913                          reloc to point to the global hash table entry
5914                          for this symbol.  The symbol index is then
5915                          set at the end of elf_bfd_final_link.  */
5916                       indx = r_symndx - extsymoff;
5917                       rh = elf_sym_hashes (input_bfd)[indx];
5918                       while (rh->root.type == bfd_link_hash_indirect
5919                              || rh->root.type == bfd_link_hash_warning)
5920                         rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
5921
5922                       /* Setting the index to -2 tells
5923                          elf_link_output_extsym that this symbol is
5924                          used by a reloc.  */
5925                       BFD_ASSERT (rh->indx < 0);
5926                       rh->indx = -2;
5927
5928                       *rel_hash = rh;
5929
5930                       continue;
5931                     }
5932
5933                   /* This is a reloc against a local symbol.  */
5934
5935                   *rel_hash = NULL;
5936                   isym = finfo->internal_syms + r_symndx;
5937                   sec = finfo->sections[r_symndx];
5938                   if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
5939                     {
5940                       /* I suppose the backend ought to fill in the
5941                          section of any STT_SECTION symbol against a
5942                          processor specific section.  If we have
5943                          discarded a section, the output_section will
5944                          be the absolute section.  */
5945                       if (sec != NULL
5946                           && (bfd_is_abs_section (sec)
5947                               || (sec->output_section != NULL
5948                                   && bfd_is_abs_section (sec->output_section))))
5949                         r_symndx = 0;
5950                       else if (sec == NULL || sec->owner == NULL)
5951                         {
5952                           bfd_set_error (bfd_error_bad_value);
5953                           return false;
5954                         }
5955                       else
5956                         {
5957                           r_symndx = sec->output_section->target_index;
5958                           BFD_ASSERT (r_symndx != 0);
5959                         }
5960                     }
5961                   else
5962                     {
5963                       if (finfo->indices[r_symndx] == -1)
5964                         {
5965                           unsigned long link;
5966                           const char *name;
5967                           asection *osec;
5968
5969                           if (finfo->info->strip == strip_all)
5970                             {
5971                               /* You can't do ld -r -s.  */
5972                               bfd_set_error (bfd_error_invalid_operation);
5973                               return false;
5974                             }
5975
5976                           /* This symbol was skipped earlier, but
5977                              since it is needed by a reloc, we
5978                              must output it now.  */
5979                           link = symtab_hdr->sh_link;
5980                           name = bfd_elf_string_from_elf_section (input_bfd,
5981                                                                   link,
5982                                                                   isym->st_name);
5983                           if (name == NULL)
5984                             return false;
5985
5986                           osec = sec->output_section;
5987                           isym->st_shndx =
5988                             _bfd_elf_section_from_bfd_section (output_bfd,
5989                                                                osec);
5990                           if (isym->st_shndx == (unsigned short) -1)
5991                             return false;
5992
5993                           isym->st_value += sec->output_offset;
5994                           if (! finfo->info->relocateable)
5995                             isym->st_value += osec->vma;
5996
5997                           finfo->indices[r_symndx] = bfd_get_symcount (output_bfd);
5998
5999                           if (! elf_link_output_sym (finfo, name, isym, sec))
6000                             return false;
6001                         }
6002
6003                       r_symndx = finfo->indices[r_symndx];
6004                     }
6005
6006                   irela->r_info = ELF_R_INFO (r_symndx,
6007                                               ELF_R_TYPE (irela->r_info));
6008                 }
6009
6010               /* Swap out the relocs.  */
6011               input_rel_hdr = &elf_section_data (o)->rel_hdr;
6012               elf_link_output_relocs (output_bfd, o,
6013                                       input_rel_hdr,
6014                                       internal_relocs);
6015               internal_relocs += NUM_SHDR_ENTRIES (input_rel_hdr)
6016                                  * bed->s->int_rels_per_ext_rel;
6017               input_rel_hdr = elf_section_data (o)->rel_hdr2;
6018               if (input_rel_hdr)
6019                 elf_link_output_relocs (output_bfd, o,
6020                                         input_rel_hdr,
6021                                         internal_relocs);
6022             }
6023         }
6024
6025       /* Write out the modified section contents.  */
6026       if (elf_section_data (o)->stab_info)
6027         {
6028           if (! (_bfd_write_section_stabs
6029                  (output_bfd, &elf_hash_table (finfo->info)->stab_info,
6030                   o, &elf_section_data (o)->stab_info, contents)))
6031             return false;
6032         }
6033       else if (elf_section_data (o)->merge_info)
6034         {
6035           if (! (_bfd_write_merged_section
6036                  (output_bfd, o, elf_section_data (o)->merge_info)))
6037             return false;
6038         }
6039       else
6040         {
6041           if (! (o->flags & SEC_EXCLUDE) &&
6042               ! bfd_set_section_contents (output_bfd, o->output_section,
6043                                           contents, o->output_offset,
6044                                           (o->_cooked_size != 0
6045                                            ? o->_cooked_size
6046                                            : o->_raw_size)))
6047             return false;
6048         }
6049     }
6050
6051   return true;
6052 }
6053
6054 /* Generate a reloc when linking an ELF file.  This is a reloc
6055    requested by the linker, and does come from any input file.  This
6056    is used to build constructor and destructor tables when linking
6057    with -Ur.  */
6058
6059 static boolean
6060 elf_reloc_link_order (output_bfd, info, output_section, link_order)
6061      bfd *output_bfd;
6062      struct bfd_link_info *info;
6063      asection *output_section;
6064      struct bfd_link_order *link_order;
6065 {
6066   reloc_howto_type *howto;
6067   long indx;
6068   bfd_vma offset;
6069   bfd_vma addend;
6070   struct elf_link_hash_entry **rel_hash_ptr;
6071   Elf_Internal_Shdr *rel_hdr;
6072   struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
6073
6074   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
6075   if (howto == NULL)
6076     {
6077       bfd_set_error (bfd_error_bad_value);
6078       return false;
6079     }
6080
6081   addend = link_order->u.reloc.p->addend;
6082
6083   /* Figure out the symbol index.  */
6084   rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
6085                   + elf_section_data (output_section)->rel_count
6086                   + elf_section_data (output_section)->rel_count2);
6087   if (link_order->type == bfd_section_reloc_link_order)
6088     {
6089       indx = link_order->u.reloc.p->u.section->target_index;
6090       BFD_ASSERT (indx != 0);
6091       *rel_hash_ptr = NULL;
6092     }
6093   else
6094     {
6095       struct elf_link_hash_entry *h;
6096
6097       /* Treat a reloc against a defined symbol as though it were
6098          actually against the section.  */
6099       h = ((struct elf_link_hash_entry *)
6100            bfd_wrapped_link_hash_lookup (output_bfd, info,
6101                                          link_order->u.reloc.p->u.name,
6102                                          false, false, true));
6103       if (h != NULL
6104           && (h->root.type == bfd_link_hash_defined
6105               || h->root.type == bfd_link_hash_defweak))
6106         {
6107           asection *section;
6108
6109           section = h->root.u.def.section;
6110           indx = section->output_section->target_index;
6111           *rel_hash_ptr = NULL;
6112           /* It seems that we ought to add the symbol value to the
6113              addend here, but in practice it has already been added
6114              because it was passed to constructor_callback.  */
6115           addend += section->output_section->vma + section->output_offset;
6116         }
6117       else if (h != NULL)
6118         {
6119           /* Setting the index to -2 tells elf_link_output_extsym that
6120              this symbol is used by a reloc.  */
6121           h->indx = -2;
6122           *rel_hash_ptr = h;
6123           indx = 0;
6124         }
6125       else
6126         {
6127           if (! ((*info->callbacks->unattached_reloc)
6128                  (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
6129                   (asection *) NULL, (bfd_vma) 0)))
6130             return false;
6131           indx = 0;
6132         }
6133     }
6134
6135   /* If this is an inplace reloc, we must write the addend into the
6136      object file.  */
6137   if (howto->partial_inplace && addend != 0)
6138     {
6139       bfd_size_type size;
6140       bfd_reloc_status_type rstat;
6141       bfd_byte *buf;
6142       boolean ok;
6143
6144       size = bfd_get_reloc_size (howto);
6145       buf = (bfd_byte *) bfd_zmalloc (size);
6146       if (buf == (bfd_byte *) NULL)
6147         return false;
6148       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
6149       switch (rstat)
6150         {
6151         case bfd_reloc_ok:
6152           break;
6153         default:
6154         case bfd_reloc_outofrange:
6155           abort ();
6156         case bfd_reloc_overflow:
6157           if (! ((*info->callbacks->reloc_overflow)
6158                  (info,
6159                   (link_order->type == bfd_section_reloc_link_order
6160                    ? bfd_section_name (output_bfd,
6161                                        link_order->u.reloc.p->u.section)
6162                    : link_order->u.reloc.p->u.name),
6163                   howto->name, addend, (bfd *) NULL, (asection *) NULL,
6164                   (bfd_vma) 0)))
6165             {
6166               free (buf);
6167               return false;
6168             }
6169           break;
6170         }
6171       ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
6172                                      (file_ptr) link_order->offset, size);
6173       free (buf);
6174       if (! ok)
6175         return false;
6176     }
6177
6178   /* The address of a reloc is relative to the section in a
6179      relocateable file, and is a virtual address in an executable
6180      file.  */
6181   offset = link_order->offset;
6182   if (! info->relocateable)
6183     offset += output_section->vma;
6184
6185   rel_hdr = &elf_section_data (output_section)->rel_hdr;
6186
6187   if (rel_hdr->sh_type == SHT_REL)
6188     {
6189       Elf_Internal_Rel *irel;
6190       Elf_External_Rel *erel;
6191       unsigned int i;
6192       
6193       irel = (Elf_Internal_Rel *) bfd_zmalloc (bed->s->int_rels_per_ext_rel
6194                                                * sizeof (Elf_Internal_Rel));
6195       if (irel == NULL)
6196         return false;
6197       
6198       for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
6199         irel[i].r_offset = offset;
6200       irel[0].r_info = ELF_R_INFO (indx, howto->type);
6201
6202       erel = ((Elf_External_Rel *) rel_hdr->contents
6203               + elf_section_data (output_section)->rel_count);
6204
6205       if (bed->s->swap_reloc_out)
6206         (*bed->s->swap_reloc_out) (output_bfd, irel, (bfd_byte *) erel);
6207       else
6208         elf_swap_reloc_out (output_bfd, irel, erel);
6209
6210       free (irel);
6211     }
6212   else
6213     {
6214       Elf_Internal_Rela *irela;
6215       Elf_External_Rela *erela;
6216       unsigned int i;
6217       
6218       irela = (Elf_Internal_Rela *) bfd_zmalloc (bed->s->int_rels_per_ext_rel
6219                                                  * sizeof (Elf_Internal_Rela));
6220       if (irela == NULL)
6221         return false;
6222
6223       for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
6224         irela[i].r_offset = offset;
6225       irela[0].r_info = ELF_R_INFO (indx, howto->type);
6226       irela[0].r_addend = addend;
6227
6228       erela = ((Elf_External_Rela *) rel_hdr->contents
6229                + elf_section_data (output_section)->rel_count);
6230
6231       if (bed->s->swap_reloca_out)
6232         (*bed->s->swap_reloca_out) (output_bfd, irela, (bfd_byte *) erela);
6233       else
6234         elf_swap_reloca_out (output_bfd, irela, erela);
6235     }
6236
6237   ++elf_section_data (output_section)->rel_count;
6238
6239   return true;
6240 }
6241 \f
6242 /* Allocate a pointer to live in a linker created section.  */
6243
6244 boolean
6245 elf_create_pointer_linker_section (abfd, info, lsect, h, rel)
6246      bfd *abfd;
6247      struct bfd_link_info *info;
6248      elf_linker_section_t *lsect;
6249      struct elf_link_hash_entry *h;
6250      const Elf_Internal_Rela *rel;
6251 {
6252   elf_linker_section_pointers_t **ptr_linker_section_ptr = NULL;
6253   elf_linker_section_pointers_t *linker_section_ptr;
6254   unsigned long r_symndx = ELF_R_SYM (rel->r_info);;
6255
6256   BFD_ASSERT (lsect != NULL);
6257
6258   /* Is this a global symbol? */
6259   if (h != NULL)
6260     {
6261       /* Has this symbol already been allocated, if so, our work is done */
6262       if (_bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
6263                                                 rel->r_addend,
6264                                                 lsect->which))
6265         return true;
6266
6267       ptr_linker_section_ptr = &h->linker_section_pointer;
6268       /* Make sure this symbol is output as a dynamic symbol.  */
6269       if (h->dynindx == -1)
6270         {
6271           if (! elf_link_record_dynamic_symbol (info, h))
6272             return false;
6273         }
6274
6275       if (lsect->rel_section)
6276         lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
6277     }
6278
6279   else  /* Allocation of a pointer to a local symbol */
6280     {
6281       elf_linker_section_pointers_t **ptr = elf_local_ptr_offsets (abfd);
6282
6283       /* Allocate a table to hold the local symbols if first time */
6284       if (!ptr)
6285         {
6286           unsigned int num_symbols = elf_tdata (abfd)->symtab_hdr.sh_info;
6287           register unsigned int i;
6288
6289           ptr = (elf_linker_section_pointers_t **)
6290             bfd_alloc (abfd, num_symbols * sizeof (elf_linker_section_pointers_t *));
6291
6292           if (!ptr)
6293             return false;
6294
6295           elf_local_ptr_offsets (abfd) = ptr;
6296           for (i = 0; i < num_symbols; i++)
6297             ptr[i] = (elf_linker_section_pointers_t *)0;
6298         }
6299
6300       /* Has this symbol already been allocated, if so, our work is done */
6301       if (_bfd_elf_find_pointer_linker_section (ptr[r_symndx],
6302                                                 rel->r_addend,
6303                                                 lsect->which))
6304         return true;
6305
6306       ptr_linker_section_ptr = &ptr[r_symndx];
6307
6308       if (info->shared)
6309         {
6310           /* If we are generating a shared object, we need to
6311              output a R_<xxx>_RELATIVE reloc so that the
6312              dynamic linker can adjust this GOT entry.  */
6313           BFD_ASSERT (lsect->rel_section != NULL);
6314           lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
6315         }
6316     }
6317
6318   /* Allocate space for a pointer in the linker section, and allocate a new pointer record
6319      from internal memory.  */
6320   BFD_ASSERT (ptr_linker_section_ptr != NULL);
6321   linker_section_ptr = (elf_linker_section_pointers_t *)
6322     bfd_alloc (abfd, sizeof (elf_linker_section_pointers_t));
6323
6324   if (!linker_section_ptr)
6325     return false;
6326
6327   linker_section_ptr->next = *ptr_linker_section_ptr;
6328   linker_section_ptr->addend = rel->r_addend;
6329   linker_section_ptr->which = lsect->which;
6330   linker_section_ptr->written_address_p = false;
6331   *ptr_linker_section_ptr = linker_section_ptr;
6332
6333 #if 0
6334   if (lsect->hole_size && lsect->hole_offset < lsect->max_hole_offset)
6335     {
6336       linker_section_ptr->offset = lsect->section->_raw_size - lsect->hole_size + (ARCH_SIZE / 8);
6337       lsect->hole_offset += ARCH_SIZE / 8;
6338       lsect->sym_offset  += ARCH_SIZE / 8;
6339       if (lsect->sym_hash)      /* Bump up symbol value if needed */
6340         {
6341           lsect->sym_hash->root.u.def.value += ARCH_SIZE / 8;
6342 #ifdef DEBUG
6343           fprintf (stderr, "Bump up %s by %ld, current value = %ld\n",
6344                    lsect->sym_hash->root.root.string,
6345                    (long)ARCH_SIZE / 8,
6346                    (long)lsect->sym_hash->root.u.def.value);
6347 #endif
6348         }
6349     }
6350   else
6351 #endif
6352     linker_section_ptr->offset = lsect->section->_raw_size;
6353
6354   lsect->section->_raw_size += ARCH_SIZE / 8;
6355
6356 #ifdef DEBUG
6357   fprintf (stderr, "Create pointer in linker section %s, offset = %ld, section size = %ld\n",
6358            lsect->name, (long)linker_section_ptr->offset, (long)lsect->section->_raw_size);
6359 #endif
6360
6361   return true;
6362 }
6363 \f
6364 #if ARCH_SIZE==64
6365 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_64 (BFD, VAL, ADDR)
6366 #endif
6367 #if ARCH_SIZE==32
6368 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_32 (BFD, VAL, ADDR)
6369 #endif
6370
6371 /* Fill in the address for a pointer generated in a linker section.  */
6372
6373 bfd_vma
6374 elf_finish_pointer_linker_section (output_bfd, input_bfd, info, lsect, h, relocation, rel, relative_reloc)
6375      bfd *output_bfd;
6376      bfd *input_bfd;
6377      struct bfd_link_info *info;
6378      elf_linker_section_t *lsect;
6379      struct elf_link_hash_entry *h;
6380      bfd_vma relocation;
6381      const Elf_Internal_Rela *rel;
6382      int relative_reloc;
6383 {
6384   elf_linker_section_pointers_t *linker_section_ptr;
6385
6386   BFD_ASSERT (lsect != NULL);
6387
6388   if (h != NULL)                /* global symbol */
6389     {
6390       linker_section_ptr = _bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
6391                                                                  rel->r_addend,
6392                                                                  lsect->which);
6393
6394       BFD_ASSERT (linker_section_ptr != NULL);
6395
6396       if (! elf_hash_table (info)->dynamic_sections_created
6397           || (info->shared
6398               && info->symbolic
6399               && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
6400         {
6401           /* This is actually a static link, or it is a
6402              -Bsymbolic link and the symbol is defined
6403              locally.  We must initialize this entry in the
6404              global section.
6405
6406              When doing a dynamic link, we create a .rela.<xxx>
6407              relocation entry to initialize the value.  This
6408              is done in the finish_dynamic_symbol routine.  */
6409           if (!linker_section_ptr->written_address_p)
6410             {
6411               linker_section_ptr->written_address_p = true;
6412               bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend,
6413                           lsect->section->contents + linker_section_ptr->offset);
6414             }
6415         }
6416     }
6417   else                          /* local symbol */
6418     {
6419       unsigned long r_symndx = ELF_R_SYM (rel->r_info);
6420       BFD_ASSERT (elf_local_ptr_offsets (input_bfd) != NULL);
6421       BFD_ASSERT (elf_local_ptr_offsets (input_bfd)[r_symndx] != NULL);
6422       linker_section_ptr = _bfd_elf_find_pointer_linker_section (elf_local_ptr_offsets (input_bfd)[r_symndx],
6423                                                                  rel->r_addend,
6424                                                                  lsect->which);
6425
6426       BFD_ASSERT (linker_section_ptr != NULL);
6427
6428       /* Write out pointer if it hasn't been rewritten out before */
6429       if (!linker_section_ptr->written_address_p)
6430         {
6431           linker_section_ptr->written_address_p = true;
6432           bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend,
6433                        lsect->section->contents + linker_section_ptr->offset);
6434
6435           if (info->shared)
6436             {
6437               asection *srel = lsect->rel_section;
6438               Elf_Internal_Rela *outrel;
6439               struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
6440               unsigned int i;
6441
6442               outrel = (Elf_Internal_Rela *) bfd_zmalloc (sizeof (Elf_Internal_Rela)
6443                                                           * bed->s->int_rels_per_ext_rel);
6444               if (outrel == NULL)
6445                 {
6446                   (*_bfd_error_handler) (_("Error: out of memory"));
6447                   return 0;
6448                 }
6449
6450               /* We need to generate a relative reloc for the dynamic linker.  */
6451               if (!srel)
6452                 lsect->rel_section = srel = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
6453                                                                      lsect->rel_name);
6454
6455               BFD_ASSERT (srel != NULL);
6456
6457               for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
6458                 outrel[i].r_offset = (lsect->section->output_section->vma
6459                                       + lsect->section->output_offset
6460                                       + linker_section_ptr->offset);
6461               outrel[0].r_info = ELF_R_INFO (0, relative_reloc);
6462               outrel[0].r_addend = 0;
6463               elf_swap_reloca_out (output_bfd, outrel,
6464                                    (((Elf_External_Rela *)
6465                                      lsect->section->contents)
6466                                     + elf_section_data (lsect->section)->rel_count));
6467               ++elf_section_data (lsect->section)->rel_count;
6468               
6469               free (outrel);
6470             }
6471         }
6472     }
6473
6474   relocation = (lsect->section->output_offset
6475                 + linker_section_ptr->offset
6476                 - lsect->hole_offset
6477                 - lsect->sym_offset);
6478
6479 #ifdef DEBUG
6480   fprintf (stderr, "Finish pointer in linker section %s, offset = %ld (0x%lx)\n",
6481            lsect->name, (long)relocation, (long)relocation);
6482 #endif
6483
6484   /* Subtract out the addend, because it will get added back in by the normal
6485      processing.  */
6486   return relocation - linker_section_ptr->addend;
6487 }
6488 \f
6489 /* Garbage collect unused sections.  */
6490
6491 static boolean elf_gc_mark
6492   PARAMS ((struct bfd_link_info *info, asection *sec,
6493            asection * (*gc_mark_hook)
6494              PARAMS ((bfd *, struct bfd_link_info *, Elf_Internal_Rela *,
6495                       struct elf_link_hash_entry *, Elf_Internal_Sym *))));
6496
6497 static boolean elf_gc_sweep
6498   PARAMS ((struct bfd_link_info *info,
6499            boolean (*gc_sweep_hook)
6500              PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
6501                       const Elf_Internal_Rela *relocs))));
6502
6503 static boolean elf_gc_sweep_symbol
6504   PARAMS ((struct elf_link_hash_entry *h, PTR idxptr));
6505
6506 static boolean elf_gc_allocate_got_offsets
6507   PARAMS ((struct elf_link_hash_entry *h, PTR offarg));
6508
6509 static boolean elf_gc_propagate_vtable_entries_used
6510   PARAMS ((struct elf_link_hash_entry *h, PTR dummy));
6511
6512 static boolean elf_gc_smash_unused_vtentry_relocs
6513   PARAMS ((struct elf_link_hash_entry *h, PTR dummy));
6514
6515 /* The mark phase of garbage collection.  For a given section, mark
6516    it, and all the sections which define symbols to which it refers.  */
6517
6518 static boolean
6519 elf_gc_mark (info, sec, gc_mark_hook)
6520      struct bfd_link_info *info;
6521      asection *sec;
6522      asection * (*gc_mark_hook)
6523        PARAMS ((bfd *, struct bfd_link_info *, Elf_Internal_Rela *,
6524                 struct elf_link_hash_entry *, Elf_Internal_Sym *));
6525 {
6526   boolean ret = true;
6527
6528   sec->gc_mark = 1;
6529
6530   /* Look through the section relocs.  */
6531
6532   if ((sec->flags & SEC_RELOC) != 0 && sec->reloc_count > 0)
6533     {
6534       Elf_Internal_Rela *relstart, *rel, *relend;
6535       Elf_Internal_Shdr *symtab_hdr;
6536       struct elf_link_hash_entry **sym_hashes;
6537       size_t nlocsyms;
6538       size_t extsymoff;
6539       Elf_External_Sym *locsyms, *freesyms = NULL;
6540       bfd *input_bfd = sec->owner;
6541       struct elf_backend_data *bed = get_elf_backend_data (input_bfd);
6542
6543       /* GCFIXME: how to arrange so that relocs and symbols are not
6544          reread continually?  */
6545
6546       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
6547       sym_hashes = elf_sym_hashes (input_bfd);
6548
6549       /* Read the local symbols.  */
6550       if (elf_bad_symtab (input_bfd))
6551         {
6552           nlocsyms = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
6553           extsymoff = 0;
6554         }
6555       else
6556         extsymoff = nlocsyms = symtab_hdr->sh_info;
6557       if (symtab_hdr->contents)
6558         locsyms = (Elf_External_Sym *) symtab_hdr->contents;
6559       else if (nlocsyms == 0)
6560         locsyms = NULL;
6561       else
6562         {
6563           locsyms = freesyms =
6564             bfd_malloc (nlocsyms * sizeof (Elf_External_Sym));
6565           if (freesyms == NULL
6566               || bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
6567               || (bfd_read (locsyms, sizeof (Elf_External_Sym),
6568                             nlocsyms, input_bfd)
6569                   != nlocsyms * sizeof (Elf_External_Sym)))
6570             {
6571               ret = false;
6572               goto out1;
6573             }
6574         }
6575
6576       /* Read the relocations.  */
6577       relstart = (NAME(_bfd_elf,link_read_relocs)
6578                   (sec->owner, sec, NULL, (Elf_Internal_Rela *) NULL,
6579                    info->keep_memory));
6580       if (relstart == NULL)
6581         {
6582           ret = false;
6583           goto out1;
6584         }
6585       relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
6586
6587       for (rel = relstart; rel < relend; rel++)
6588         {
6589           unsigned long r_symndx;
6590           asection *rsec;
6591           struct elf_link_hash_entry *h;
6592           Elf_Internal_Sym s;
6593
6594           r_symndx = ELF_R_SYM (rel->r_info);
6595           if (r_symndx == 0)
6596             continue;
6597
6598           if (elf_bad_symtab (sec->owner))
6599             {
6600               elf_swap_symbol_in (input_bfd, &locsyms[r_symndx], &s);
6601               if (ELF_ST_BIND (s.st_info) == STB_LOCAL)
6602                 rsec = (*gc_mark_hook) (sec->owner, info, rel, NULL, &s);
6603               else
6604                 {
6605                   h = sym_hashes[r_symndx - extsymoff];
6606                   rsec = (*gc_mark_hook) (sec->owner, info, rel, h, NULL);
6607                 }
6608             }
6609           else if (r_symndx >= nlocsyms)
6610             {
6611               h = sym_hashes[r_symndx - extsymoff];
6612               rsec = (*gc_mark_hook) (sec->owner, info, rel, h, NULL);
6613             }
6614           else
6615             {
6616               elf_swap_symbol_in (input_bfd, &locsyms[r_symndx], &s);
6617               rsec = (*gc_mark_hook) (sec->owner, info, rel, NULL, &s);
6618             }
6619
6620           if (rsec && !rsec->gc_mark)
6621             if (!elf_gc_mark (info, rsec, gc_mark_hook))
6622               {
6623                 ret = false;
6624                 goto out2;
6625               }
6626         }
6627
6628     out2:
6629       if (!info->keep_memory)
6630         free (relstart);
6631     out1:
6632       if (freesyms)
6633         free (freesyms);
6634     }
6635
6636   return ret;
6637 }
6638
6639 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
6640
6641 static boolean
6642 elf_gc_sweep (info, gc_sweep_hook)
6643      struct bfd_link_info *info;
6644      boolean (*gc_sweep_hook)
6645        PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
6646                 const Elf_Internal_Rela *relocs));
6647 {
6648   bfd *sub;
6649
6650   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
6651     {
6652       asection *o;
6653
6654       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
6655         continue;
6656
6657       for (o = sub->sections; o != NULL; o = o->next)
6658         {
6659           /* Keep special sections.  Keep .debug sections.  */
6660           if ((o->flags & SEC_LINKER_CREATED)
6661               || (o->flags & SEC_DEBUGGING))
6662             o->gc_mark = 1;
6663
6664           if (o->gc_mark)
6665             continue;
6666
6667           /* Skip sweeping sections already excluded.  */
6668           if (o->flags & SEC_EXCLUDE)
6669             continue;
6670
6671           /* Since this is early in the link process, it is simple
6672              to remove a section from the output.  */
6673           o->flags |= SEC_EXCLUDE;
6674
6675           /* But we also have to update some of the relocation
6676              info we collected before.  */
6677           if (gc_sweep_hook
6678               && (o->flags & SEC_RELOC) && o->reloc_count > 0)
6679             {
6680               Elf_Internal_Rela *internal_relocs;
6681               boolean r;
6682
6683               internal_relocs = (NAME(_bfd_elf,link_read_relocs)
6684                                  (o->owner, o, NULL, NULL, info->keep_memory));
6685               if (internal_relocs == NULL)
6686                 return false;
6687
6688               r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
6689
6690               if (!info->keep_memory)
6691                 free (internal_relocs);
6692
6693               if (!r)
6694                 return false;
6695             }
6696         }
6697     }
6698
6699   /* Remove the symbols that were in the swept sections from the dynamic
6700      symbol table.  GCFIXME: Anyone know how to get them out of the
6701      static symbol table as well?  */
6702   {
6703     int i = 0;
6704
6705     elf_link_hash_traverse (elf_hash_table (info),
6706                             elf_gc_sweep_symbol,
6707                             (PTR) &i);
6708
6709     elf_hash_table (info)->dynsymcount = i;
6710   }
6711
6712   return true;
6713 }
6714
6715 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
6716
6717 static boolean
6718 elf_gc_sweep_symbol (h, idxptr)
6719      struct elf_link_hash_entry *h;
6720      PTR idxptr;
6721 {
6722   int *idx = (int *) idxptr;
6723
6724   if (h->dynindx != -1
6725       && ((h->root.type != bfd_link_hash_defined
6726            && h->root.type != bfd_link_hash_defweak)
6727           || h->root.u.def.section->gc_mark))
6728     h->dynindx = (*idx)++;
6729
6730   return true;
6731 }
6732
6733 /* Propogate collected vtable information.  This is called through
6734    elf_link_hash_traverse.  */
6735
6736 static boolean
6737 elf_gc_propagate_vtable_entries_used (h, okp)
6738      struct elf_link_hash_entry *h;
6739      PTR okp;
6740 {
6741   /* Those that are not vtables.  */
6742   if (h->vtable_parent == NULL)
6743     return true;
6744
6745   /* Those vtables that do not have parents, we cannot merge.  */
6746   if (h->vtable_parent == (struct elf_link_hash_entry *) -1)
6747     return true;
6748
6749   /* If we've already been done, exit.  */
6750   if (h->vtable_entries_used && h->vtable_entries_used[-1])
6751     return true;
6752
6753   /* Make sure the parent's table is up to date.  */
6754   elf_gc_propagate_vtable_entries_used (h->vtable_parent, okp);
6755
6756   if (h->vtable_entries_used == NULL)
6757     {
6758       /* None of this table's entries were referenced.  Re-use the
6759          parent's table.  */
6760       h->vtable_entries_used = h->vtable_parent->vtable_entries_used;
6761       h->vtable_entries_size = h->vtable_parent->vtable_entries_size;
6762     }
6763   else
6764     {
6765       size_t n;
6766       boolean *cu, *pu;
6767
6768       
6769       /* Or the parent's entries into ours.  */
6770       cu = h->vtable_entries_used;
6771       cu[-1] = true;
6772       pu = h->vtable_parent->vtable_entries_used;
6773       if (pu != NULL)
6774         {
6775           asection *sec = h->root.u.def.section;
6776           struct elf_backend_data *bed = get_elf_backend_data (sec->owner);
6777           int file_align = bed->s->file_align;
6778
6779           n = h->vtable_parent->vtable_entries_size / file_align;
6780           while (--n != 0)
6781             {
6782               if (*pu) *cu = true;
6783               pu++, cu++;
6784             }
6785         }
6786     }
6787
6788   return true;
6789 }
6790
6791 static boolean
6792 elf_gc_smash_unused_vtentry_relocs (h, okp)
6793      struct elf_link_hash_entry *h;
6794      PTR okp;
6795 {
6796   asection *sec;
6797   bfd_vma hstart, hend;
6798   Elf_Internal_Rela *relstart, *relend, *rel;
6799   struct elf_backend_data *bed;
6800   int file_align;
6801
6802   /* Take care of both those symbols that do not describe vtables as
6803      well as those that are not loaded.  */
6804   if (h->vtable_parent == NULL)
6805     return true;
6806
6807   BFD_ASSERT (h->root.type == bfd_link_hash_defined
6808               || h->root.type == bfd_link_hash_defweak);
6809
6810   sec = h->root.u.def.section;
6811   hstart = h->root.u.def.value;
6812   hend = hstart + h->size;
6813
6814   relstart = (NAME(_bfd_elf,link_read_relocs)
6815               (sec->owner, sec, NULL, (Elf_Internal_Rela *) NULL, true));
6816   if (!relstart)
6817     return *(boolean *)okp = false;
6818   bed = get_elf_backend_data (sec->owner);
6819   file_align = bed->s->file_align;
6820
6821   relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
6822
6823   for (rel = relstart; rel < relend; ++rel)
6824     if (rel->r_offset >= hstart && rel->r_offset < hend)
6825       {
6826         /* If the entry is in use, do nothing.  */
6827         if (h->vtable_entries_used
6828             && (rel->r_offset - hstart) < h->vtable_entries_size)
6829           {
6830             bfd_vma entry = (rel->r_offset - hstart) / file_align;
6831             if (h->vtable_entries_used[entry])
6832               continue;
6833           }
6834         /* Otherwise, kill it.  */
6835         rel->r_offset = rel->r_info = rel->r_addend = 0;
6836       }
6837
6838   return true;
6839 }
6840
6841 /* Do mark and sweep of unused sections.  */
6842
6843 boolean
6844 elf_gc_sections (abfd, info)
6845      bfd *abfd;
6846      struct bfd_link_info *info;
6847 {
6848   boolean ok = true;
6849   bfd *sub;
6850   asection * (*gc_mark_hook)
6851     PARAMS ((bfd *abfd, struct bfd_link_info *, Elf_Internal_Rela *,
6852              struct elf_link_hash_entry *h, Elf_Internal_Sym *));
6853
6854   if (!get_elf_backend_data (abfd)->can_gc_sections
6855       || info->relocateable || info->emitrelocations
6856       || elf_hash_table (info)->dynamic_sections_created)
6857     return true;
6858
6859   /* Apply transitive closure to the vtable entry usage info.  */
6860   elf_link_hash_traverse (elf_hash_table (info),
6861                           elf_gc_propagate_vtable_entries_used,
6862                           (PTR) &ok);
6863   if (!ok)
6864     return false;
6865
6866   /* Kill the vtable relocations that were not used.  */
6867   elf_link_hash_traverse (elf_hash_table (info),
6868                           elf_gc_smash_unused_vtentry_relocs,
6869                           (PTR) &ok);
6870   if (!ok)
6871     return false;
6872
6873   /* Grovel through relocs to find out who stays ...  */
6874
6875   gc_mark_hook = get_elf_backend_data (abfd)->gc_mark_hook;
6876   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
6877     {
6878       asection *o;
6879
6880       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
6881         continue;
6882
6883       for (o = sub->sections; o != NULL; o = o->next)
6884         {
6885           if (o->flags & SEC_KEEP)
6886             if (!elf_gc_mark (info, o, gc_mark_hook))
6887               return false;
6888         }
6889     }
6890
6891   /* ... and mark SEC_EXCLUDE for those that go.  */
6892   if (!elf_gc_sweep(info, get_elf_backend_data (abfd)->gc_sweep_hook))
6893     return false;
6894
6895   return true;
6896 }
6897 \f
6898 /* Called from check_relocs to record the existance of a VTINHERIT reloc.  */
6899
6900 boolean
6901 elf_gc_record_vtinherit (abfd, sec, h, offset)
6902      bfd *abfd;
6903      asection *sec;
6904      struct elf_link_hash_entry *h;
6905      bfd_vma offset;
6906 {
6907   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
6908   struct elf_link_hash_entry **search, *child;
6909   bfd_size_type extsymcount;
6910
6911   /* The sh_info field of the symtab header tells us where the
6912      external symbols start.  We don't care about the local symbols at
6913      this point.  */
6914   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size/sizeof (Elf_External_Sym);
6915   if (!elf_bad_symtab (abfd))
6916     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
6917
6918   sym_hashes = elf_sym_hashes (abfd);
6919   sym_hashes_end = sym_hashes + extsymcount;
6920
6921   /* Hunt down the child symbol, which is in this section at the same
6922      offset as the relocation.  */
6923   for (search = sym_hashes; search != sym_hashes_end; ++search)
6924     {
6925       if ((child = *search) != NULL
6926           && (child->root.type == bfd_link_hash_defined
6927               || child->root.type == bfd_link_hash_defweak)
6928           && child->root.u.def.section == sec
6929           && child->root.u.def.value == offset)
6930         goto win;
6931     }
6932
6933   (*_bfd_error_handler) ("%s: %s+%lu: No symbol found for INHERIT",
6934                          bfd_get_filename (abfd), sec->name,
6935                          (unsigned long)offset);
6936   bfd_set_error (bfd_error_invalid_operation);
6937   return false;
6938
6939 win:
6940   if (!h)
6941     {
6942       /* This *should* only be the absolute section.  It could potentially
6943          be that someone has defined a non-global vtable though, which
6944          would be bad.  It isn't worth paging in the local symbols to be
6945          sure though; that case should simply be handled by the assembler.  */
6946
6947       child->vtable_parent = (struct elf_link_hash_entry *) -1;
6948     }
6949   else
6950     child->vtable_parent = h;
6951
6952   return true;
6953 }
6954
6955 /* Called from check_relocs to record the existance of a VTENTRY reloc.  */
6956
6957 boolean
6958 elf_gc_record_vtentry (abfd, sec, h, addend)
6959      bfd *abfd ATTRIBUTE_UNUSED;
6960      asection *sec ATTRIBUTE_UNUSED;
6961      struct elf_link_hash_entry *h;
6962      bfd_vma addend;
6963 {
6964   struct elf_backend_data *bed = get_elf_backend_data (abfd);
6965   int file_align = bed->s->file_align;
6966
6967   if (addend >= h->vtable_entries_size)
6968     {
6969       size_t size, bytes;
6970       boolean *ptr = h->vtable_entries_used;
6971
6972       /* While the symbol is undefined, we have to be prepared to handle
6973          a zero size.  */
6974       if (h->root.type == bfd_link_hash_undefined)
6975         size = addend;
6976       else
6977         {
6978           size = h->size;
6979           if (size < addend)
6980             {
6981               /* Oops!  We've got a reference past the defined end of
6982                  the table.  This is probably a bug -- shall we warn?  */
6983               size = addend;
6984             }
6985         }
6986
6987       /* Allocate one extra entry for use as a "done" flag for the
6988          consolidation pass.  */
6989       bytes = (size / file_align + 1) * sizeof (boolean);
6990
6991       if (ptr)
6992         {
6993           ptr = bfd_realloc (ptr - 1, bytes);
6994
6995           if (ptr != NULL)
6996             {
6997               size_t oldbytes;
6998
6999               oldbytes = (h->vtable_entries_size/file_align + 1) * sizeof (boolean);
7000               memset (((char *)ptr) + oldbytes, 0, bytes - oldbytes);
7001             }
7002         }
7003       else
7004         ptr = bfd_zmalloc (bytes);
7005
7006       if (ptr == NULL)
7007         return false;
7008
7009       /* And arrange for that done flag to be at index -1.  */
7010       h->vtable_entries_used = ptr + 1;
7011       h->vtable_entries_size = size;
7012     }
7013
7014   h->vtable_entries_used[addend / file_align] = true;
7015
7016   return true;
7017 }
7018
7019 /* And an accompanying bit to work out final got entry offsets once
7020    we're done.  Should be called from final_link.  */
7021
7022 boolean
7023 elf_gc_common_finalize_got_offsets (abfd, info)
7024      bfd *abfd;
7025      struct bfd_link_info *info;
7026 {
7027   bfd *i;
7028   struct elf_backend_data *bed = get_elf_backend_data (abfd);
7029   bfd_vma gotoff;
7030
7031   /* The GOT offset is relative to the .got section, but the GOT header is
7032      put into the .got.plt section, if the backend uses it.  */
7033   if (bed->want_got_plt)
7034     gotoff = 0;
7035   else
7036     gotoff = bed->got_header_size;
7037
7038   /* Do the local .got entries first.  */
7039   for (i = info->input_bfds; i; i = i->link_next)
7040     {
7041       bfd_signed_vma *local_got;
7042       bfd_size_type j, locsymcount;
7043       Elf_Internal_Shdr *symtab_hdr;
7044
7045       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
7046         continue;
7047
7048       local_got = elf_local_got_refcounts (i);
7049       if (!local_got)
7050         continue;
7051
7052       symtab_hdr = &elf_tdata (i)->symtab_hdr;
7053       if (elf_bad_symtab (i))
7054         locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
7055       else
7056         locsymcount = symtab_hdr->sh_info;
7057
7058       for (j = 0; j < locsymcount; ++j)
7059         {
7060           if (local_got[j] > 0)
7061             {
7062               local_got[j] = gotoff;
7063               gotoff += ARCH_SIZE / 8;
7064             }
7065           else
7066             local_got[j] = (bfd_vma) -1;
7067         }
7068     }
7069
7070   /* Then the global .got entries.  .plt refcounts are handled by
7071      adjust_dynamic_symbol  */
7072   elf_link_hash_traverse (elf_hash_table (info),
7073                           elf_gc_allocate_got_offsets,
7074                           (PTR) &gotoff);
7075   return true;
7076 }
7077
7078 /* We need a special top-level link routine to convert got reference counts
7079    to real got offsets.  */
7080
7081 static boolean
7082 elf_gc_allocate_got_offsets (h, offarg)
7083      struct elf_link_hash_entry *h;
7084      PTR offarg;
7085 {
7086   bfd_vma *off = (bfd_vma *) offarg;
7087
7088   if (h->got.refcount > 0)
7089     {
7090       h->got.offset = off[0];
7091       off[0] += ARCH_SIZE / 8;
7092     }
7093   else
7094     h->got.offset = (bfd_vma) -1;
7095
7096   return true;
7097 }
7098
7099 /* Many folk need no more in the way of final link than this, once
7100    got entry reference counting is enabled.  */
7101
7102 boolean
7103 elf_gc_common_final_link (abfd, info)
7104      bfd *abfd;
7105      struct bfd_link_info *info;
7106 {
7107   if (!elf_gc_common_finalize_got_offsets (abfd, info))
7108     return false;
7109
7110   /* Invoke the regular ELF backend linker to do all the work.  */
7111   return elf_bfd_final_link (abfd, info);
7112 }
7113
7114 /* This function will be called though elf_link_hash_traverse to store
7115    all hash value of the exported symbols in an array.  */
7116
7117 static boolean
7118 elf_collect_hash_codes (h, data)
7119      struct elf_link_hash_entry *h;
7120      PTR data;
7121 {
7122   unsigned long **valuep = (unsigned long **) data;
7123   const char *name;
7124   char *p;
7125   unsigned long ha;
7126   char *alc = NULL;
7127
7128   /* Ignore indirect symbols.  These are added by the versioning code.  */
7129   if (h->dynindx == -1)
7130     return true;
7131
7132   name = h->root.root.string;
7133   p = strchr (name, ELF_VER_CHR);
7134   if (p != NULL)
7135     {
7136       alc = bfd_malloc (p - name + 1);
7137       memcpy (alc, name, p - name);
7138       alc[p - name] = '\0';
7139       name = alc;
7140     }
7141
7142   /* Compute the hash value.  */
7143   ha = bfd_elf_hash (name);
7144
7145   /* Store the found hash value in the array given as the argument.  */
7146   *(*valuep)++ = ha;
7147
7148   /* And store it in the struct so that we can put it in the hash table
7149      later.  */
7150   h->elf_hash_value = ha;
7151
7152   if (alc != NULL)
7153     free (alc);
7154
7155   return true;
7156 }