Revert last patch, and:
[external/binutils.git] / bfd / elflink.h
1 /* ELF linker support.
2    Copyright 1995, 1996, 1997 Free Software Foundation, Inc.
3
4 This file is part of BFD, the Binary File Descriptor library.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
19
20 /* ELF linker code.  */
21
22 static boolean elf_link_add_object_symbols
23   PARAMS ((bfd *, struct bfd_link_info *));
24 static boolean elf_link_add_archive_symbols
25   PARAMS ((bfd *, struct bfd_link_info *));
26 static boolean elf_export_symbol
27   PARAMS ((struct elf_link_hash_entry *, PTR));
28 static boolean elf_adjust_dynamic_symbol
29   PARAMS ((struct elf_link_hash_entry *, PTR));
30 static boolean elf_link_find_version_dependencies
31   PARAMS ((struct elf_link_hash_entry *, PTR));
32 static boolean elf_link_find_version_dependencies
33   PARAMS ((struct elf_link_hash_entry *, PTR));
34 static boolean elf_link_assign_sym_version
35   PARAMS ((struct elf_link_hash_entry *, PTR));
36 static boolean elf_link_renumber_dynsyms
37   PARAMS ((struct elf_link_hash_entry *, PTR));
38
39 /* This struct is used to pass information to routines called via
40    elf_link_hash_traverse which must return failure.  */
41
42 struct elf_info_failed
43 {
44   boolean failed;
45   struct bfd_link_info *info;
46 };
47
48 /* Given an ELF BFD, add symbols to the global hash table as
49    appropriate.  */
50
51 boolean
52 elf_bfd_link_add_symbols (abfd, info)
53      bfd *abfd;
54      struct bfd_link_info *info;
55 {
56   switch (bfd_get_format (abfd))
57     {
58     case bfd_object:
59       return elf_link_add_object_symbols (abfd, info);
60     case bfd_archive:
61       return elf_link_add_archive_symbols (abfd, info);
62     default:
63       bfd_set_error (bfd_error_wrong_format);
64       return false;
65     }
66 }
67 \f
68
69 /* Add symbols from an ELF archive file to the linker hash table.  We
70    don't use _bfd_generic_link_add_archive_symbols because of a
71    problem which arises on UnixWare.  The UnixWare libc.so is an
72    archive which includes an entry libc.so.1 which defines a bunch of
73    symbols.  The libc.so archive also includes a number of other
74    object files, which also define symbols, some of which are the same
75    as those defined in libc.so.1.  Correct linking requires that we
76    consider each object file in turn, and include it if it defines any
77    symbols we need.  _bfd_generic_link_add_archive_symbols does not do
78    this; it looks through the list of undefined symbols, and includes
79    any object file which defines them.  When this algorithm is used on
80    UnixWare, it winds up pulling in libc.so.1 early and defining a
81    bunch of symbols.  This means that some of the other objects in the
82    archive are not included in the link, which is incorrect since they
83    precede libc.so.1 in the archive.
84
85    Fortunately, ELF archive handling is simpler than that done by
86    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
87    oddities.  In ELF, if we find a symbol in the archive map, and the
88    symbol is currently undefined, we know that we must pull in that
89    object file.
90
91    Unfortunately, we do have to make multiple passes over the symbol
92    table until nothing further is resolved.  */
93
94 static boolean
95 elf_link_add_archive_symbols (abfd, info)
96      bfd *abfd;
97      struct bfd_link_info *info;
98 {
99   symindex c;
100   boolean *defined = NULL;
101   boolean *included = NULL;
102   carsym *symdefs;
103   boolean loop;
104
105   if (! bfd_has_map (abfd))
106     {
107       /* An empty archive is a special case.  */
108       if (bfd_openr_next_archived_file (abfd, (bfd *) NULL) == NULL)
109         return true;
110       bfd_set_error (bfd_error_no_armap);
111       return false;
112     }
113
114   /* Keep track of all symbols we know to be already defined, and all
115      files we know to be already included.  This is to speed up the
116      second and subsequent passes.  */
117   c = bfd_ardata (abfd)->symdef_count;
118   if (c == 0)
119     return true;
120   defined = (boolean *) bfd_malloc (c * sizeof (boolean));
121   included = (boolean *) bfd_malloc (c * sizeof (boolean));
122   if (defined == (boolean *) NULL || included == (boolean *) NULL)
123     goto error_return;
124   memset (defined, 0, c * sizeof (boolean));
125   memset (included, 0, c * sizeof (boolean));
126
127   symdefs = bfd_ardata (abfd)->symdefs;
128
129   do
130     {
131       file_ptr last;
132       symindex i;
133       carsym *symdef;
134       carsym *symdefend;
135
136       loop = false;
137       last = -1;
138
139       symdef = symdefs;
140       symdefend = symdef + c;
141       for (i = 0; symdef < symdefend; symdef++, i++)
142         {
143           struct elf_link_hash_entry *h;
144           bfd *element;
145           struct bfd_link_hash_entry *undefs_tail;
146           symindex mark;
147
148           if (defined[i] || included[i])
149             continue;
150           if (symdef->file_offset == last)
151             {
152               included[i] = true;
153               continue;
154             }
155
156           h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
157                                     false, false, false);
158
159           if (h == NULL)
160             {
161               char *p, *copy;
162
163               /* If this is a default version (the name contains @@),
164                  look up the symbol again without the version.  The
165                  effect is that references to the symbol without the
166                  version will be matched by the default symbol in the
167                  archive.  */
168
169               p = strchr (symdef->name, ELF_VER_CHR);
170               if (p == NULL || p[1] != ELF_VER_CHR)
171                 continue;
172
173               copy = bfd_alloc (abfd, p - symdef->name + 1);
174               if (copy == NULL)
175                 goto error_return;
176               memcpy (copy, symdef->name, p - symdef->name);
177               copy[p - symdef->name] = '\0';
178
179               h = elf_link_hash_lookup (elf_hash_table (info), copy,
180                                         false, false, false);
181
182               bfd_release (abfd, copy);
183             }
184
185           if (h == NULL)
186             continue;
187
188           if (h->root.type != bfd_link_hash_undefined)
189             {
190               if (h->root.type != bfd_link_hash_undefweak)
191                 defined[i] = true;
192               continue;
193             }
194
195           /* We need to include this archive member.  */
196
197           element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
198           if (element == (bfd *) NULL)
199             goto error_return;
200
201           if (! bfd_check_format (element, bfd_object))
202             goto error_return;
203
204           /* Doublecheck that we have not included this object
205              already--it should be impossible, but there may be
206              something wrong with the archive.  */
207           if (element->archive_pass != 0)
208             {
209               bfd_set_error (bfd_error_bad_value);
210               goto error_return;
211             }
212           element->archive_pass = 1;
213
214           undefs_tail = info->hash->undefs_tail;
215
216           if (! (*info->callbacks->add_archive_element) (info, element,
217                                                          symdef->name))
218             goto error_return;
219           if (! elf_link_add_object_symbols (element, info))
220             goto error_return;
221
222           /* If there are any new undefined symbols, we need to make
223              another pass through the archive in order to see whether
224              they can be defined.  FIXME: This isn't perfect, because
225              common symbols wind up on undefs_tail and because an
226              undefined symbol which is defined later on in this pass
227              does not require another pass.  This isn't a bug, but it
228              does make the code less efficient than it could be.  */
229           if (undefs_tail != info->hash->undefs_tail)
230             loop = true;
231
232           /* Look backward to mark all symbols from this object file
233              which we have already seen in this pass.  */
234           mark = i;
235           do
236             {
237               included[mark] = true;
238               if (mark == 0)
239                 break;
240               --mark;
241             }
242           while (symdefs[mark].file_offset == symdef->file_offset);
243
244           /* We mark subsequent symbols from this object file as we go
245              on through the loop.  */
246           last = symdef->file_offset;
247         }
248     }
249   while (loop);
250
251   free (defined);
252   free (included);
253
254   return true;
255
256  error_return:
257   if (defined != (boolean *) NULL)
258     free (defined);
259   if (included != (boolean *) NULL)
260     free (included);
261   return false;
262 }
263
264 /* Add symbols from an ELF object file to the linker hash table.  */
265
266 static boolean
267 elf_link_add_object_symbols (abfd, info)
268      bfd *abfd;
269      struct bfd_link_info *info;
270 {
271   boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *,
272                                       const Elf_Internal_Sym *,
273                                       const char **, flagword *,
274                                       asection **, bfd_vma *));
275   boolean (*check_relocs) PARAMS ((bfd *, struct bfd_link_info *,
276                                    asection *, const Elf_Internal_Rela *));
277   boolean collect;
278   Elf_Internal_Shdr *hdr;
279   size_t symcount;
280   size_t extsymcount;
281   size_t extsymoff;
282   Elf_External_Sym *buf = NULL;
283   struct elf_link_hash_entry **sym_hash;
284   boolean dynamic;
285   bfd_byte *dynver = NULL;
286   Elf_External_Versym *extversym = NULL;
287   Elf_External_Versym *ever;
288   Elf_External_Dyn *dynbuf = NULL;
289   struct elf_link_hash_entry *weaks;
290   Elf_External_Sym *esym;
291   Elf_External_Sym *esymend;
292
293   add_symbol_hook = get_elf_backend_data (abfd)->elf_add_symbol_hook;
294   collect = get_elf_backend_data (abfd)->collect;
295
296   if ((abfd->flags & DYNAMIC) == 0)
297     dynamic = false;
298   else
299     {
300       dynamic = true;
301
302       /* You can't use -r against a dynamic object.  Also, there's no
303          hope of using a dynamic object which does not exactly match
304          the format of the output file.  */
305       if (info->relocateable || info->hash->creator != abfd->xvec)
306         {
307           bfd_set_error (bfd_error_invalid_operation);
308           goto error_return;
309         }
310     }
311
312   /* As a GNU extension, any input sections which are named
313      .gnu.warning.SYMBOL are treated as warning symbols for the given
314      symbol.  This differs from .gnu.warning sections, which generate
315      warnings when they are included in an output file.  */
316   if (! info->shared)
317     {
318       asection *s;
319
320       for (s = abfd->sections; s != NULL; s = s->next)
321         {
322           const char *name;
323
324           name = bfd_get_section_name (abfd, s);
325           if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
326             {
327               char *msg;
328               bfd_size_type sz;
329
330               name += sizeof ".gnu.warning." - 1;
331
332               /* If this is a shared object, then look up the symbol
333                  in the hash table.  If it is there, and it is already
334                  been defined, then we will not be using the entry
335                  from this shared object, so we don't need to warn.
336                  FIXME: If we see the definition in a regular object
337                  later on, we will warn, but we shouldn't.  The only
338                  fix is to keep track of what warnings we are supposed
339                  to emit, and then handle them all at the end of the
340                  link.  */
341               if (dynamic && abfd->xvec == info->hash->creator)
342                 {
343                   struct elf_link_hash_entry *h;
344
345                   h = elf_link_hash_lookup (elf_hash_table (info), name,
346                                             false, false, true);
347
348                   /* FIXME: What about bfd_link_hash_common?  */
349                   if (h != NULL
350                       && (h->root.type == bfd_link_hash_defined
351                           || h->root.type == bfd_link_hash_defweak))
352                     {
353                       /* We don't want to issue this warning.  Clobber
354                          the section size so that the warning does not
355                          get copied into the output file.  */
356                       s->_raw_size = 0;
357                       continue;
358                     }
359                 }
360
361               sz = bfd_section_size (abfd, s);
362               msg = (char *) bfd_alloc (abfd, sz);
363               if (msg == NULL)
364                 goto error_return;
365
366               if (! bfd_get_section_contents (abfd, s, msg, (file_ptr) 0, sz))
367                 goto error_return;
368
369               if (! (_bfd_generic_link_add_one_symbol
370                      (info, abfd, name, BSF_WARNING, s, (bfd_vma) 0, msg,
371                       false, collect, (struct bfd_link_hash_entry **) NULL)))
372                 goto error_return;
373
374               if (! info->relocateable)
375                 {
376                   /* Clobber the section size so that the warning does
377                      not get copied into the output file.  */
378                   s->_raw_size = 0;
379                 }
380             }
381         }
382     }
383
384   /* If this is a dynamic object, we always link against the .dynsym
385      symbol table, not the .symtab symbol table.  The dynamic linker
386      will only see the .dynsym symbol table, so there is no reason to
387      look at .symtab for a dynamic object.  */
388
389   if (! dynamic || elf_dynsymtab (abfd) == 0)
390     hdr = &elf_tdata (abfd)->symtab_hdr;
391   else
392     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
393
394   if (dynamic)
395     {
396       /* Read in any version definitions.  */
397
398       if (elf_dynverdef (abfd) != 0)
399         {
400           Elf_Internal_Shdr *verdefhdr;
401           bfd_byte *dynver;
402           int i;
403           const Elf_External_Verdef *extverdef;
404           Elf_Internal_Verdef *intverdef;
405
406           verdefhdr = &elf_tdata (abfd)->dynverdef_hdr;
407           elf_tdata (abfd)->verdef =
408             ((Elf_Internal_Verdef *)
409              bfd_zalloc (abfd,
410                          verdefhdr->sh_info * sizeof (Elf_Internal_Verdef)));
411           if (elf_tdata (abfd)->verdef == NULL)
412             goto error_return;
413
414           dynver = (bfd_byte *) bfd_malloc (verdefhdr->sh_size);
415           if (dynver == NULL)
416             goto error_return;
417
418           if (bfd_seek (abfd, verdefhdr->sh_offset, SEEK_SET) != 0
419               || (bfd_read ((PTR) dynver, 1, verdefhdr->sh_size, abfd)
420                   != verdefhdr->sh_size))
421             goto error_return;
422
423           extverdef = (const Elf_External_Verdef *) dynver;
424           intverdef = elf_tdata (abfd)->verdef;
425           for (i = 0; i < verdefhdr->sh_info; i++, intverdef++)
426             {
427               const Elf_External_Verdaux *extverdaux;
428               Elf_Internal_Verdaux intverdaux;
429
430               _bfd_elf_swap_verdef_in (abfd, extverdef, intverdef);
431
432               /* Pick up the name of the version.  */
433               extverdaux = ((const Elf_External_Verdaux *)
434                             ((bfd_byte *) extverdef + intverdef->vd_aux));
435               _bfd_elf_swap_verdaux_in (abfd, extverdaux, &intverdaux);
436
437               intverdef->vd_bfd = abfd;
438               intverdef->vd_nodename =
439                 bfd_elf_string_from_elf_section (abfd, verdefhdr->sh_link,
440                                                  intverdaux.vda_name);
441
442               extverdef = ((const Elf_External_Verdef *)
443                            ((bfd_byte *) extverdef + intverdef->vd_next));
444             }
445
446           free (dynver);
447           dynver = NULL;
448         }
449
450       /* Read in the symbol versions, but don't bother to convert them
451          to internal format.  */
452       if (elf_dynversym (abfd) != 0)
453         {
454           Elf_Internal_Shdr *versymhdr;
455
456           versymhdr = &elf_tdata (abfd)->dynversym_hdr;
457           extversym = (Elf_External_Versym *) bfd_malloc (hdr->sh_size);
458           if (extversym == NULL)
459             goto error_return;
460           if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
461               || (bfd_read ((PTR) extversym, 1, versymhdr->sh_size, abfd)
462                   != versymhdr->sh_size))
463             goto error_return;
464         }
465     }
466
467   symcount = hdr->sh_size / sizeof (Elf_External_Sym);
468
469   /* The sh_info field of the symtab header tells us where the
470      external symbols start.  We don't care about the local symbols at
471      this point.  */
472   if (elf_bad_symtab (abfd))
473     {
474       extsymcount = symcount;
475       extsymoff = 0;
476     }
477   else
478     {
479       extsymcount = symcount - hdr->sh_info;
480       extsymoff = hdr->sh_info;
481     }
482
483   buf = ((Elf_External_Sym *)
484          bfd_malloc (extsymcount * sizeof (Elf_External_Sym)));
485   if (buf == NULL && extsymcount != 0)
486     goto error_return;
487
488   /* We store a pointer to the hash table entry for each external
489      symbol.  */
490   sym_hash = ((struct elf_link_hash_entry **)
491               bfd_alloc (abfd,
492                          extsymcount * sizeof (struct elf_link_hash_entry *)));
493   if (sym_hash == NULL)
494     goto error_return;
495   elf_sym_hashes (abfd) = sym_hash;
496
497   if (! dynamic)
498     {
499       /* If we are creating a shared library, create all the dynamic
500          sections immediately.  We need to attach them to something,
501          so we attach them to this BFD, provided it is the right
502          format.  FIXME: If there are no input BFD's of the same
503          format as the output, we can't make a shared library.  */
504       if (info->shared
505           && ! elf_hash_table (info)->dynamic_sections_created
506           && abfd->xvec == info->hash->creator)
507         {
508           if (! elf_link_create_dynamic_sections (abfd, info))
509             goto error_return;
510         }
511     }
512   else
513     {
514       asection *s;
515       boolean add_needed;
516       const char *name;
517       bfd_size_type oldsize;
518       bfd_size_type strindex;
519
520       /* Find the name to use in a DT_NEEDED entry that refers to this
521          object.  If the object has a DT_SONAME entry, we use it.
522          Otherwise, if the generic linker stuck something in
523          elf_dt_name, we use that.  Otherwise, we just use the file
524          name.  If the generic linker put a null string into
525          elf_dt_name, we don't make a DT_NEEDED entry at all, even if
526          there is a DT_SONAME entry.  */
527       add_needed = true;
528       name = bfd_get_filename (abfd);
529       if (elf_dt_name (abfd) != NULL)
530         {
531           name = elf_dt_name (abfd);
532           if (*name == '\0')
533             add_needed = false;
534         }
535       s = bfd_get_section_by_name (abfd, ".dynamic");
536       if (s != NULL)
537         {
538           Elf_External_Dyn *extdyn;
539           Elf_External_Dyn *extdynend;
540           int elfsec;
541           unsigned long link;
542
543           dynbuf = (Elf_External_Dyn *) bfd_malloc ((size_t) s->_raw_size);
544           if (dynbuf == NULL)
545             goto error_return;
546
547           if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
548                                           (file_ptr) 0, s->_raw_size))
549             goto error_return;
550
551           elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
552           if (elfsec == -1)
553             goto error_return;
554           link = elf_elfsections (abfd)[elfsec]->sh_link;
555
556           extdyn = dynbuf;
557           extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
558           for (; extdyn < extdynend; extdyn++)
559             {
560               Elf_Internal_Dyn dyn;
561
562               elf_swap_dyn_in (abfd, extdyn, &dyn);
563               if (dyn.d_tag == DT_SONAME)
564                 {
565                   name = bfd_elf_string_from_elf_section (abfd, link,
566                                                           dyn.d_un.d_val);
567                   if (name == NULL)
568                     goto error_return;
569                 }
570               if (dyn.d_tag == DT_NEEDED)
571                 {
572                   struct bfd_link_needed_list *n, **pn;
573                   char *fnm, *anm;
574
575                   n = ((struct bfd_link_needed_list *)
576                        bfd_alloc (abfd, sizeof (struct bfd_link_needed_list)));
577                   fnm = bfd_elf_string_from_elf_section (abfd, link,
578                                                          dyn.d_un.d_val);
579                   if (n == NULL || fnm == NULL)
580                     goto error_return;
581                   anm = bfd_alloc (abfd, strlen (fnm) + 1);
582                   if (anm == NULL)
583                     goto error_return;
584                   strcpy (anm, fnm);
585                   n->name = anm;
586                   n->by = abfd;
587                   n->next = NULL;
588                   for (pn = &elf_hash_table (info)->needed;
589                        *pn != NULL;
590                        pn = &(*pn)->next)
591                     ;
592                   *pn = n;
593                 }
594             }
595
596           free (dynbuf);
597           dynbuf = NULL;
598         }
599
600       /* We do not want to include any of the sections in a dynamic
601          object in the output file.  We hack by simply clobbering the
602          list of sections in the BFD.  This could be handled more
603          cleanly by, say, a new section flag; the existing
604          SEC_NEVER_LOAD flag is not the one we want, because that one
605          still implies that the section takes up space in the output
606          file.  */
607       abfd->sections = NULL;
608       abfd->section_count = 0;
609
610       /* If this is the first dynamic object found in the link, create
611          the special sections required for dynamic linking.  */
612       if (! elf_hash_table (info)->dynamic_sections_created)
613         {
614           if (! elf_link_create_dynamic_sections (abfd, info))
615             goto error_return;
616         }
617
618       if (add_needed)
619         {
620           /* Add a DT_NEEDED entry for this dynamic object.  */
621           oldsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
622           strindex = _bfd_stringtab_add (elf_hash_table (info)->dynstr, name,
623                                          true, false);
624           if (strindex == (bfd_size_type) -1)
625             goto error_return;
626
627           if (oldsize == _bfd_stringtab_size (elf_hash_table (info)->dynstr))
628             {
629               asection *sdyn;
630               Elf_External_Dyn *dyncon, *dynconend;
631
632               /* The hash table size did not change, which means that
633                  the dynamic object name was already entered.  If we
634                  have already included this dynamic object in the
635                  link, just ignore it.  There is no reason to include
636                  a particular dynamic object more than once.  */
637               sdyn = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
638                                               ".dynamic");
639               BFD_ASSERT (sdyn != NULL);
640
641               dyncon = (Elf_External_Dyn *) sdyn->contents;
642               dynconend = (Elf_External_Dyn *) (sdyn->contents +
643                                                 sdyn->_raw_size);
644               for (; dyncon < dynconend; dyncon++)
645                 {
646                   Elf_Internal_Dyn dyn;
647
648                   elf_swap_dyn_in (elf_hash_table (info)->dynobj, dyncon,
649                                    &dyn);
650                   if (dyn.d_tag == DT_NEEDED
651                       && dyn.d_un.d_val == strindex)
652                     {
653                       if (buf != NULL)
654                         free (buf);
655                       if (extversym != NULL)
656                         free (extversym);
657                       return true;
658                     }
659                 }
660             }
661
662           if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
663             goto error_return;
664         }
665
666       /* Save the SONAME, if there is one, because sometimes the
667          linker emulation code will need to know it.  */
668       if (*name == '\0')
669         name = bfd_get_filename (abfd);
670       elf_dt_name (abfd) = name;
671     }
672
673   if (bfd_seek (abfd,
674                 hdr->sh_offset + extsymoff * sizeof (Elf_External_Sym),
675                 SEEK_SET) != 0
676       || (bfd_read ((PTR) buf, sizeof (Elf_External_Sym), extsymcount, abfd)
677           != extsymcount * sizeof (Elf_External_Sym)))
678     goto error_return;
679
680   weaks = NULL;
681
682   ever = extversym != NULL ? extversym + extsymoff : NULL;
683   esymend = buf + extsymcount;
684   for (esym = buf;
685        esym < esymend;
686        esym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
687     {
688       Elf_Internal_Sym sym;
689       int bind;
690       bfd_vma value;
691       asection *sec;
692       flagword flags;
693       const char *name;
694       struct elf_link_hash_entry *h;
695       boolean definition;
696       boolean size_change_ok, type_change_ok;
697       boolean new_weakdef;
698
699       elf_swap_symbol_in (abfd, esym, &sym);
700
701       flags = BSF_NO_FLAGS;
702       sec = NULL;
703       value = sym.st_value;
704       *sym_hash = NULL;
705
706       bind = ELF_ST_BIND (sym.st_info);
707       if (bind == STB_LOCAL)
708         {
709           /* This should be impossible, since ELF requires that all
710              global symbols follow all local symbols, and that sh_info
711              point to the first global symbol.  Unfortunatealy, Irix 5
712              screws this up.  */
713           continue;
714         }
715       else if (bind == STB_GLOBAL)
716         {
717           if (sym.st_shndx != SHN_UNDEF
718               && sym.st_shndx != SHN_COMMON)
719             flags = BSF_GLOBAL;
720           else
721             flags = 0;
722         }
723       else if (bind == STB_WEAK)
724         flags = BSF_WEAK;
725       else
726         {
727           /* Leave it up to the processor backend.  */
728         }
729
730       if (sym.st_shndx == SHN_UNDEF)
731         sec = bfd_und_section_ptr;
732       else if (sym.st_shndx > 0 && sym.st_shndx < SHN_LORESERVE)
733         {
734           sec = section_from_elf_index (abfd, sym.st_shndx);
735           if (sec != NULL)
736             value -= sec->vma;
737           else
738             sec = bfd_abs_section_ptr;
739         }
740       else if (sym.st_shndx == SHN_ABS)
741         sec = bfd_abs_section_ptr;
742       else if (sym.st_shndx == SHN_COMMON)
743         {
744           sec = bfd_com_section_ptr;
745           /* What ELF calls the size we call the value.  What ELF
746              calls the value we call the alignment.  */
747           value = sym.st_size;
748         }
749       else
750         {
751           /* Leave it up to the processor backend.  */
752         }
753
754       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
755       if (name == (const char *) NULL)
756         goto error_return;
757
758       if (add_symbol_hook)
759         {
760           if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
761                                     &value))
762             goto error_return;
763
764           /* The hook function sets the name to NULL if this symbol
765              should be skipped for some reason.  */
766           if (name == (const char *) NULL)
767             continue;
768         }
769
770       /* Sanity check that all possibilities were handled.  */
771       if (sec == (asection *) NULL)
772         {
773           bfd_set_error (bfd_error_bad_value);
774           goto error_return;
775         }
776
777       if (bfd_is_und_section (sec)
778           || bfd_is_com_section (sec))
779         definition = false;
780       else
781         definition = true;
782
783       size_change_ok = false;
784       type_change_ok = get_elf_backend_data (abfd)->type_change_ok;
785       if (info->hash->creator->flavour == bfd_target_elf_flavour)
786         {
787           Elf_Internal_Versym iver;
788           int vernum;
789           boolean override;
790
791           if (ever != NULL)
792             {
793               _bfd_elf_swap_versym_in (abfd, ever, &iver);
794               vernum = iver.vs_vers & VERSYM_VERSION;
795
796               /* If this is a hidden symbol, or if it is not version
797                  1, we append the version name to the symbol name.
798                  However, we do not modify a non-hidden absolute
799                  symbol, because it might be the version symbol
800                  itself.  FIXME: What if it isn't?  */
801               if ((iver.vs_vers & VERSYM_HIDDEN) != 0
802                   || (vernum > 1 && ! bfd_is_abs_section (sec)))
803                 {
804                   const char *verstr;
805                   int namelen, newlen;
806                   char *newname, *p;
807
808                   if (vernum > elf_tdata (abfd)->dynverdef_hdr.sh_info)
809                     {
810                       (*_bfd_error_handler)
811                         ("%s: %s: invalid version %d (max %d)",
812                          abfd->filename, name, vernum,
813                          elf_tdata (abfd)->dynverdef_hdr.sh_info);
814                       bfd_set_error (bfd_error_bad_value);
815                       goto error_return;
816                     }
817                   else if (vernum > 1)
818                     verstr = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
819                   else
820                     verstr = "";
821
822                   namelen = strlen (name);
823                   newlen = namelen + strlen (verstr) + 2;
824                   if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
825                     ++newlen;
826
827                   newname = (char *) bfd_alloc (abfd, newlen);
828                   if (newname == NULL)
829                     goto error_return;
830                   strcpy (newname, name);
831                   p = newname + namelen;
832                   *p++ = ELF_VER_CHR;
833                   if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
834                     *p++ = ELF_VER_CHR;
835                   strcpy (p, verstr);
836
837                   name = newname;
838                 }
839             }
840
841           /* We need to look up the symbol now in order to get some of
842              the dynamic object handling right.  We pass the hash
843              table entry in to _bfd_generic_link_add_one_symbol so
844              that it does not have to look it up again.  */
845           if (! bfd_is_und_section (sec))
846             h = elf_link_hash_lookup (elf_hash_table (info), name,
847                                       true, false, false);
848           else
849             h = ((struct elf_link_hash_entry *)
850                  bfd_wrapped_link_hash_lookup (abfd, info, name, true,
851                                                false, false));
852           if (h == NULL)
853             goto error_return;
854           *sym_hash = h;
855
856           if (h->root.type == bfd_link_hash_new)
857             h->elf_link_hash_flags &=~ ELF_LINK_NON_ELF;
858
859           while (h->root.type == bfd_link_hash_indirect
860                  || h->root.type == bfd_link_hash_warning)
861             h = (struct elf_link_hash_entry *) h->root.u.i.link;
862
863           /* It's OK to change the type if it used to be a weak
864              definition, or if the current definition is weak (and
865              hence might be ignored).  */
866           if (h->root.type == bfd_link_hash_defweak
867               || h->root.type == bfd_link_hash_undefweak
868               || bind == STB_WEAK)
869             type_change_ok = true;
870
871           /* It's OK to change the size if it used to be a weak
872              definition, or if it used to be undefined, or if we will
873              be overriding an old definition.  */
874           if (type_change_ok
875               || h->root.type == bfd_link_hash_undefined)
876             size_change_ok = true;
877
878           override = false;
879
880           /* If we are looking at a dynamic object, and this is a
881              definition, we need to see if it has already been defined
882              by some other object.  If it has, we want to use the
883              existing definition, and we do not want to report a
884              multiple symbol definition error; we do this by
885              clobbering sec to be bfd_und_section_ptr.  We treat a
886              common symbol as a definition if the symbol in the shared
887              library is a function, since common symbols always
888              represent variables; this can cause confusion in
889              principle, but any such confusion would seem to indicate
890              an erroneous program or shared library.  We also treat a
891              common symbol as a definition if the symbol in the shared
892              library is in an uninitialized section, and it has a
893              smaller size.  */
894           if (dynamic && definition)
895             {
896               if (h->root.type == bfd_link_hash_defined
897                   || h->root.type == bfd_link_hash_defweak
898                   || (h->root.type == bfd_link_hash_common
899                       && ((bind == STB_WEAK
900                            || ELF_ST_TYPE (sym.st_info) == STT_FUNC)
901                           || ((sec->flags & SEC_ALLOC) != 0
902                               && (sec->flags & SEC_LOAD) == 0
903                               && sym.st_size < h->size))))
904                 {
905                   override = true;
906                   sec = bfd_und_section_ptr;
907                   definition = false;
908                   size_change_ok = true;
909                   if (h->root.type == bfd_link_hash_common)
910                     type_change_ok = true;
911                 }
912             }
913
914           /* Similarly, if we are not looking at a dynamic object, and
915              we have a definition, we want to override any definition
916              we may have from a dynamic object.  Symbols from regular
917              files always take precedence over symbols from dynamic
918              objects, even if they are defined after the dynamic
919              object in the link.  */
920           if (! dynamic
921               && (definition
922                   || (bfd_is_com_section (sec)
923                       && (h->root.type == bfd_link_hash_defweak
924                           || h->type == STT_FUNC)))
925               && (h->root.type == bfd_link_hash_defined
926                   || h->root.type == bfd_link_hash_defweak)
927               && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
928               && (h->root.u.def.section->owner->flags & DYNAMIC) != 0)
929             {
930               override = true;
931               /* Change the hash table entry to undefined, and let
932                  _bfd_generic_link_add_one_symbol do the right thing
933                  with the new definition.  */
934               h->root.type = bfd_link_hash_undefined;
935               h->root.u.undef.abfd = h->root.u.def.section->owner;
936               size_change_ok = true;
937               if (bfd_is_com_section (sec))
938                 type_change_ok = true;
939
940               /* This union may have been set to be non-NULL when this
941                  symbol was seen in a dynamic object.  We must force
942                  the union to be NULL, so that it is correct for a
943                  regular symbol.  */
944               h->verinfo.vertree = NULL;
945             }
946
947           if (ever != NULL
948               && ! override
949               && vernum > 1
950               && (h->verinfo.verdef == NULL || definition))
951             h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
952         }
953
954       if (! (_bfd_generic_link_add_one_symbol
955              (info, abfd, name, flags, sec, value, (const char *) NULL,
956               false, collect, (struct bfd_link_hash_entry **) sym_hash)))
957         goto error_return;
958
959       h = *sym_hash;
960       while (h->root.type == bfd_link_hash_indirect
961              || h->root.type == bfd_link_hash_warning)
962         h = (struct elf_link_hash_entry *) h->root.u.i.link;
963       *sym_hash = h;
964
965       new_weakdef = false;
966       if (dynamic
967           && definition
968           && (flags & BSF_WEAK) != 0
969           && ELF_ST_TYPE (sym.st_info) != STT_FUNC
970           && info->hash->creator->flavour == bfd_target_elf_flavour
971           && h->weakdef == NULL)
972         {
973           /* Keep a list of all weak defined non function symbols from
974              a dynamic object, using the weakdef field.  Later in this
975              function we will set the weakdef field to the correct
976              value.  We only put non-function symbols from dynamic
977              objects on this list, because that happens to be the only
978              time we need to know the normal symbol corresponding to a
979              weak symbol, and the information is time consuming to
980              figure out.  If the weakdef field is not already NULL,
981              then this symbol was already defined by some previous
982              dynamic object, and we will be using that previous
983              definition anyhow.  */
984
985           h->weakdef = weaks;
986           weaks = h;
987           new_weakdef = true;
988         }
989
990       /* Get the alignment of a common symbol.  */
991       if (sym.st_shndx == SHN_COMMON
992           && h->root.type == bfd_link_hash_common)
993         h->root.u.c.p->alignment_power = bfd_log2 (sym.st_value);
994
995       if (info->hash->creator->flavour == bfd_target_elf_flavour)
996         {
997           int old_flags;
998           boolean dynsym;
999           int new_flag;
1000
1001           /* Remember the symbol size and type.  */
1002           if (sym.st_size != 0
1003               && (definition || h->size == 0))
1004             {
1005               if (h->size != 0 && h->size != sym.st_size && ! size_change_ok)
1006                 (*_bfd_error_handler)
1007                   ("Warning: size of symbol `%s' changed from %lu to %lu in %s",
1008                    name, (unsigned long) h->size, (unsigned long) sym.st_size,
1009                    bfd_get_filename (abfd));
1010
1011               h->size = sym.st_size;
1012             }
1013           if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE
1014               && (definition || h->type == STT_NOTYPE))
1015             {
1016               if (h->type != STT_NOTYPE
1017                   && h->type != ELF_ST_TYPE (sym.st_info)
1018                   && ! type_change_ok)
1019                 (*_bfd_error_handler)
1020                   ("Warning: type of symbol `%s' changed from %d to %d in %s",
1021                    name, h->type, ELF_ST_TYPE (sym.st_info),
1022                    bfd_get_filename (abfd));
1023
1024               h->type = ELF_ST_TYPE (sym.st_info);
1025             }
1026
1027           if (sym.st_other != 0
1028               && (definition || h->other == 0))
1029             h->other = sym.st_other;
1030
1031           /* Set a flag in the hash table entry indicating the type of
1032              reference or definition we just found.  Keep a count of
1033              the number of dynamic symbols we find.  A dynamic symbol
1034              is one which is referenced or defined by both a regular
1035              object and a shared object.  */
1036           old_flags = h->elf_link_hash_flags;
1037           dynsym = false;
1038           if (! dynamic)
1039             {
1040               if (! definition)
1041                 new_flag = ELF_LINK_HASH_REF_REGULAR;
1042               else
1043                 new_flag = ELF_LINK_HASH_DEF_REGULAR;
1044               if (info->shared
1045                   || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
1046                                    | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
1047                 dynsym = true;
1048             }
1049           else
1050             {
1051               if (! definition)
1052                 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
1053               else
1054                 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
1055               if ((old_flags & (ELF_LINK_HASH_DEF_REGULAR
1056                                 | ELF_LINK_HASH_REF_REGULAR)) != 0
1057                   || (h->weakdef != NULL
1058                       && ! new_weakdef
1059                       && h->weakdef->dynindx != -1))
1060                 dynsym = true;
1061             }
1062
1063           h->elf_link_hash_flags |= new_flag;
1064
1065           /* If this symbol has a version, and it is the default
1066              version, we create an indirect symbol from the default
1067              name to the fully decorated name.  This will cause
1068              external references which do not specify a version to be
1069              bound to this version of the symbol.  */
1070           if (definition)
1071             {
1072               char *p;
1073
1074               p = strchr (name, ELF_VER_CHR);
1075               if (p != NULL && p[1] == ELF_VER_CHR)
1076                 {
1077                   char *shortname;
1078                   struct elf_link_hash_entry *hold;
1079
1080                   shortname = bfd_hash_allocate (&info->hash->table,
1081                                                  p - name + 1);
1082                   if (shortname == NULL)
1083                     goto error_return;
1084                   strncpy (shortname, name, p - name);
1085                   shortname[p - name] = '\0';
1086
1087                   /* First look to see if we have an existing symbol
1088                      with this name.  */
1089                   hold = elf_link_hash_lookup (elf_hash_table (info),
1090                                                shortname, false, false,
1091                                                false);
1092
1093                   /* If we are looking at a normal object, and the
1094                      symbol was seen in a shared object, clobber the
1095                      definition in the shared object.  */
1096                   if (hold != NULL
1097                       && ! dynamic
1098                       && (hold->root.type == bfd_link_hash_defined
1099                           || hold->root.type == bfd_link_hash_defweak)
1100                       && (hold->elf_link_hash_flags
1101                           & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1102                       && ((hold->root.u.def.section->owner->flags & DYNAMIC)
1103                           != 0))
1104                     {
1105                       /* Change the hash table entry to undefined, so
1106                          that _bfd_generic_link_add_one_symbol will do
1107                          the right thing.  */
1108                       hold->root.type = bfd_link_hash_undefined;
1109                       hold->root.u.undef.abfd =
1110                         hold->root.u.def.section->owner;
1111                       hold->verinfo.vertree = NULL;
1112                       hold = NULL;
1113                     }
1114
1115                   /* If we are looking at a shared object, and we have
1116                      already seen this symbol defined elsewhere, then
1117                      don't try to define it again. */
1118                   if (hold != NULL
1119                       && dynamic
1120                       && (hold->root.type == bfd_link_hash_defined
1121                           || hold->root.type == bfd_link_hash_defweak
1122                           || hold->root.type == bfd_link_hash_indirect
1123                           || (hold->root.type == bfd_link_hash_common
1124                               && (bind == STB_WEAK
1125                                   || ELF_ST_TYPE (sym.st_info) == STT_FUNC))))
1126                     {
1127                       /* Don't add an indirect symbol.  */
1128                     }
1129                   else
1130                     {
1131                       struct elf_link_hash_entry *hi;
1132
1133                       hi = NULL;
1134                       if (! (_bfd_generic_link_add_one_symbol
1135                              (info, abfd, shortname, BSF_INDIRECT,
1136                               bfd_ind_section_ptr, (bfd_vma) 0, name, false,
1137                               collect, (struct bfd_link_hash_entry **) &hi)))
1138                         goto error_return;
1139
1140                       /* If there is a duplicate definition somewhere,
1141                          then HI may not point to an indirect symbol.
1142                          We will have reported an error to the user in
1143                          that case.  */
1144
1145                       if (hi->root.type == bfd_link_hash_indirect)
1146                         {
1147                           hi->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF;
1148
1149                           /* If the symbol became indirect, then we
1150                              assume that we have not seen a definition
1151                              before.  */
1152                           BFD_ASSERT ((hi->elf_link_hash_flags
1153                                        & (ELF_LINK_HASH_DEF_DYNAMIC
1154                                           | ELF_LINK_HASH_DEF_REGULAR))
1155                                       == 0);
1156
1157                           /* Copy down any references that we may have
1158                              already seen to the symbol which just
1159                              became indirect.  */
1160                           h->elf_link_hash_flags |=
1161                             (hi->elf_link_hash_flags
1162                              & (ELF_LINK_HASH_REF_DYNAMIC
1163                                 | ELF_LINK_HASH_REF_REGULAR));
1164
1165                           /* Copy over the global table offset entry.
1166                              This may have been already set up by a
1167                              check_relocs routine.  */
1168                           if (h->got_offset == (bfd_vma) -1)
1169                             {
1170                               h->got_offset = hi->got_offset;
1171                               hi->got_offset = (bfd_vma) -1;
1172                             }
1173                           BFD_ASSERT (hi->got_offset == (bfd_vma) -1);
1174
1175                           if (h->dynindx == -1)
1176                             {
1177                               h->dynindx = hi->dynindx;
1178                               h->dynstr_index = hi->dynstr_index;
1179                               hi->dynindx = -1;
1180                               hi->dynstr_index = 0;
1181                             }
1182                           BFD_ASSERT (hi->dynindx == -1);
1183
1184                           /* FIXME: There may be other information to
1185                              copy over for particular targets.  */
1186
1187                           /* See if the new flags lead us to realize
1188                              that the symbol must be dynamic.  */
1189                           if (! dynsym)
1190                             {
1191                               if (! dynamic)
1192                                 {
1193                                   if (info->shared
1194                                       || ((hi->elf_link_hash_flags
1195                                            & ELF_LINK_HASH_REF_DYNAMIC)
1196                                           != 0))
1197                                     dynsym = true;
1198                                 }
1199                               else
1200                                 {
1201                                   if ((hi->elf_link_hash_flags
1202                                        & ELF_LINK_HASH_REF_REGULAR) != 0)
1203                                     dynsym = true;
1204                                 }
1205                             }
1206                         }
1207                     }
1208
1209                   /* We also need to define an indirection from the
1210                      nondefault version of the symbol.  */
1211
1212                   shortname = bfd_hash_allocate (&info->hash->table,
1213                                                  strlen (name));
1214                   if (shortname == NULL)
1215                     goto error_return;
1216                   strncpy (shortname, name, p - name);
1217                   strcpy (shortname + (p - name), p + 1);
1218
1219                   /* First look to see if we have an existing symbol
1220                      with this name.  */
1221                   hold = elf_link_hash_lookup (elf_hash_table (info),
1222                                                shortname, false, false,
1223                                                false);
1224
1225                   /* If we are looking at a normal object, and the
1226                      symbol was seen in a shared object, clobber the
1227                      definition in the shared object.  */
1228                   if (hold != NULL
1229                       && ! dynamic
1230                       && (hold->root.type == bfd_link_hash_defined
1231                           || hold->root.type == bfd_link_hash_defweak)
1232                       && (hold->elf_link_hash_flags
1233                           & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1234                       && ((hold->root.u.def.section->owner->flags & DYNAMIC)
1235                           != 0))
1236                     {
1237                       /* Change the hash table entry to undefined, so
1238                          that _bfd_generic_link_add_one_symbol will do
1239                          the right thing.  */
1240                       hold->root.type = bfd_link_hash_undefined;
1241                       hold->root.u.undef.abfd =
1242                         hold->root.u.def.section->owner;
1243                       hold->verinfo.vertree = NULL;
1244                       hold = NULL;
1245                     }
1246
1247                   /* If we are looking at a shared object, and we have
1248                      already seen this symbol defined elsewhere, then
1249                      don't try to define it again. */
1250                   if (hold != NULL
1251                       && dynamic
1252                       && (hold->root.type == bfd_link_hash_defined
1253                           || hold->root.type == bfd_link_hash_defweak
1254                           || hold->root.type == bfd_link_hash_indirect
1255                           || (hold->root.type == bfd_link_hash_common
1256                               && (bind == STB_WEAK
1257                                   || ELF_ST_TYPE (sym.st_info) == STT_FUNC))))
1258                     {
1259                       /* Don't add an indirect symbol.  */
1260                     }
1261                   else
1262                     {
1263                       struct elf_link_hash_entry *hi;
1264
1265                       hi = NULL;
1266                       if (! (_bfd_generic_link_add_one_symbol
1267                              (info, abfd, shortname, BSF_INDIRECT,
1268                               bfd_ind_section_ptr, (bfd_vma) 0, name, false,
1269                               collect, (struct bfd_link_hash_entry **) &hi)))
1270                         goto error_return;
1271
1272                       /* If there is a duplicate definition somewhere,
1273                          then HI may not point to an indirect symbol.
1274                          We will have reported an error to the user in
1275                          that case.  */
1276
1277                       if (hi->root.type == bfd_link_hash_indirect)
1278                         {
1279                           hi->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF;
1280
1281                           /* If the symbol became indirect, then we
1282                              assume that we have not seen a definition
1283                              before.  */
1284                           BFD_ASSERT ((hi->elf_link_hash_flags
1285                                        & (ELF_LINK_HASH_DEF_DYNAMIC
1286                                           | ELF_LINK_HASH_DEF_REGULAR))
1287                                       == 0);
1288
1289                           /* Copy down any references that we may have
1290                              already seen to the symbol which just
1291                              became indirect.  */
1292                           h->elf_link_hash_flags |=
1293                             (hi->elf_link_hash_flags
1294                              & (ELF_LINK_HASH_REF_DYNAMIC
1295                                 | ELF_LINK_HASH_REF_REGULAR));
1296
1297                           /* Copy over the global table offset entry.
1298                              This may have been already set up by a
1299                              check_relocs routine.  */
1300                           if (h->got_offset == (bfd_vma) -1)
1301                             {
1302                               h->got_offset = hi->got_offset;
1303                               hi->got_offset = (bfd_vma) -1;
1304                             }
1305                           BFD_ASSERT (hi->got_offset == (bfd_vma) -1);
1306
1307                           if (h->dynindx == -1)
1308                             {
1309                               h->dynindx = hi->dynindx;
1310                               h->dynstr_index = hi->dynstr_index;
1311                               hi->dynindx = -1;
1312                               hi->dynstr_index = 0;
1313                             }
1314                           BFD_ASSERT (hi->dynindx == -1);
1315
1316                           /* FIXME: There may be other information to
1317                              copy over for particular targets.  */
1318
1319                           /* See if the new flags lead us to realize
1320                              that the symbol must be dynamic.  */
1321                           if (! dynsym)
1322                             {
1323                               if (! dynamic)
1324                                 {
1325                                   if (info->shared
1326                                       || ((hi->elf_link_hash_flags
1327                                            & ELF_LINK_HASH_REF_DYNAMIC)
1328                                           != 0))
1329                                     dynsym = true;
1330                                 }
1331                               else
1332                                 {
1333                                   if ((hi->elf_link_hash_flags
1334                                        & ELF_LINK_HASH_REF_REGULAR) != 0)
1335                                     dynsym = true;
1336                                 }
1337                             }
1338                         }
1339                     }
1340                 }
1341             }
1342
1343           if (dynsym && h->dynindx == -1)
1344             {
1345               if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1346                 goto error_return;
1347               if (h->weakdef != NULL
1348                   && ! new_weakdef
1349                   && h->weakdef->dynindx == -1)
1350                 {
1351                   if (! _bfd_elf_link_record_dynamic_symbol (info,
1352                                                              h->weakdef))
1353                     goto error_return;
1354                 }
1355             }
1356         }
1357     }
1358
1359   /* Now set the weakdefs field correctly for all the weak defined
1360      symbols we found.  The only way to do this is to search all the
1361      symbols.  Since we only need the information for non functions in
1362      dynamic objects, that's the only time we actually put anything on
1363      the list WEAKS.  We need this information so that if a regular
1364      object refers to a symbol defined weakly in a dynamic object, the
1365      real symbol in the dynamic object is also put in the dynamic
1366      symbols; we also must arrange for both symbols to point to the
1367      same memory location.  We could handle the general case of symbol
1368      aliasing, but a general symbol alias can only be generated in
1369      assembler code, handling it correctly would be very time
1370      consuming, and other ELF linkers don't handle general aliasing
1371      either.  */
1372   while (weaks != NULL)
1373     {
1374       struct elf_link_hash_entry *hlook;
1375       asection *slook;
1376       bfd_vma vlook;
1377       struct elf_link_hash_entry **hpp;
1378       struct elf_link_hash_entry **hppend;
1379
1380       hlook = weaks;
1381       weaks = hlook->weakdef;
1382       hlook->weakdef = NULL;
1383
1384       BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
1385                   || hlook->root.type == bfd_link_hash_defweak
1386                   || hlook->root.type == bfd_link_hash_common
1387                   || hlook->root.type == bfd_link_hash_indirect);
1388       slook = hlook->root.u.def.section;
1389       vlook = hlook->root.u.def.value;
1390
1391       hpp = elf_sym_hashes (abfd);
1392       hppend = hpp + extsymcount;
1393       for (; hpp < hppend; hpp++)
1394         {
1395           struct elf_link_hash_entry *h;
1396
1397           h = *hpp;
1398           if (h != NULL && h != hlook
1399               && h->root.type == bfd_link_hash_defined
1400               && h->root.u.def.section == slook
1401               && h->root.u.def.value == vlook)
1402             {
1403               hlook->weakdef = h;
1404
1405               /* If the weak definition is in the list of dynamic
1406                  symbols, make sure the real definition is put there
1407                  as well.  */
1408               if (hlook->dynindx != -1
1409                   && h->dynindx == -1)
1410                 {
1411                   if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1412                     goto error_return;
1413                 }
1414
1415               /* If the real definition is in the list of dynamic
1416                  symbols, make sure the weak definition is put there
1417                  as well.  If we don't do this, then the dynamic
1418                  loader might not merge the entries for the real
1419                  definition and the weak definition.  */
1420               if (h->dynindx != -1
1421                   && hlook->dynindx == -1)
1422                 {
1423                   if (! _bfd_elf_link_record_dynamic_symbol (info, hlook))
1424                     goto error_return;
1425                 }
1426
1427               break;
1428             }
1429         }
1430     }
1431
1432   if (buf != NULL)
1433     {
1434       free (buf);
1435       buf = NULL;
1436     }
1437
1438   if (extversym != NULL)
1439     {
1440       free (extversym);
1441       extversym = NULL;
1442     }
1443
1444   /* If this object is the same format as the output object, and it is
1445      not a shared library, then let the backend look through the
1446      relocs.
1447
1448      This is required to build global offset table entries and to
1449      arrange for dynamic relocs.  It is not required for the
1450      particular common case of linking non PIC code, even when linking
1451      against shared libraries, but unfortunately there is no way of
1452      knowing whether an object file has been compiled PIC or not.
1453      Looking through the relocs is not particularly time consuming.
1454      The problem is that we must either (1) keep the relocs in memory,
1455      which causes the linker to require additional runtime memory or
1456      (2) read the relocs twice from the input file, which wastes time.
1457      This would be a good case for using mmap.
1458
1459      I have no idea how to handle linking PIC code into a file of a
1460      different format.  It probably can't be done.  */
1461   check_relocs = get_elf_backend_data (abfd)->check_relocs;
1462   if (! dynamic
1463       && abfd->xvec == info->hash->creator
1464       && check_relocs != NULL)
1465     {
1466       asection *o;
1467
1468       for (o = abfd->sections; o != NULL; o = o->next)
1469         {
1470           Elf_Internal_Rela *internal_relocs;
1471           boolean ok;
1472
1473           if ((o->flags & SEC_RELOC) == 0
1474               || o->reloc_count == 0)
1475             continue;
1476
1477           internal_relocs = (NAME(_bfd_elf,link_read_relocs)
1478                              (abfd, o, (PTR) NULL,
1479                               (Elf_Internal_Rela *) NULL,
1480                               info->keep_memory));
1481           if (internal_relocs == NULL)
1482             goto error_return;
1483
1484           ok = (*check_relocs) (abfd, info, o, internal_relocs);
1485
1486           if (! info->keep_memory)
1487             free (internal_relocs);
1488
1489           if (! ok)
1490             goto error_return;
1491         }
1492     }
1493
1494   /* If this is a non-traditional, non-relocateable link, try to
1495      optimize the handling of the .stab/.stabstr sections.  */
1496   if (! dynamic
1497       && ! info->relocateable
1498       && ! info->traditional_format
1499       && info->hash->creator->flavour == bfd_target_elf_flavour
1500       && (info->strip != strip_all && info->strip != strip_debugger))
1501     {
1502       asection *stab, *stabstr;
1503
1504       stab = bfd_get_section_by_name (abfd, ".stab");
1505       if (stab != NULL)
1506         {
1507           stabstr = bfd_get_section_by_name (abfd, ".stabstr");
1508
1509           if (stabstr != NULL)
1510             {
1511               struct bfd_elf_section_data *secdata;
1512
1513               secdata = elf_section_data (stab);
1514               if (! _bfd_link_section_stabs (abfd,
1515                                              &elf_hash_table (info)->stab_info,
1516                                              stab, stabstr,
1517                                              &secdata->stab_info))
1518                 goto error_return;
1519             }
1520         }
1521     }
1522
1523   return true;
1524
1525  error_return:
1526   if (buf != NULL)
1527     free (buf);
1528   if (dynbuf != NULL)
1529     free (dynbuf);
1530   if (dynver != NULL)
1531     free (dynver);
1532   if (extversym != NULL)
1533     free (extversym);
1534   return false;
1535 }
1536
1537 /* Create some sections which will be filled in with dynamic linking
1538    information.  ABFD is an input file which requires dynamic sections
1539    to be created.  The dynamic sections take up virtual memory space
1540    when the final executable is run, so we need to create them before
1541    addresses are assigned to the output sections.  We work out the
1542    actual contents and size of these sections later.  */
1543
1544 boolean
1545 elf_link_create_dynamic_sections (abfd, info)
1546      bfd *abfd;
1547      struct bfd_link_info *info;
1548 {
1549   flagword flags;
1550   register asection *s;
1551   struct elf_link_hash_entry *h;
1552   struct elf_backend_data *bed;
1553
1554   if (elf_hash_table (info)->dynamic_sections_created)
1555     return true;
1556
1557   /* Make sure that all dynamic sections use the same input BFD.  */
1558   if (elf_hash_table (info)->dynobj == NULL)
1559     elf_hash_table (info)->dynobj = abfd;
1560   else
1561     abfd = elf_hash_table (info)->dynobj;
1562
1563   /* Note that we set the SEC_IN_MEMORY flag for all of these
1564      sections.  */
1565   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
1566            | SEC_IN_MEMORY | SEC_LINKER_CREATED);
1567
1568   /* A dynamically linked executable has a .interp section, but a
1569      shared library does not.  */
1570   if (! info->shared)
1571     {
1572       s = bfd_make_section (abfd, ".interp");
1573       if (s == NULL
1574           || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1575         return false;
1576     }
1577
1578   /* Create sections to hold version informations.  These are removed
1579      if they are not needed.  */
1580   s = bfd_make_section (abfd, ".gnu.version_d");
1581   if (s == NULL
1582       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1583       || ! bfd_set_section_alignment (abfd, s, 2))
1584     return false;
1585
1586   s = bfd_make_section (abfd, ".gnu.version");
1587   if (s == NULL
1588       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1589       || ! bfd_set_section_alignment (abfd, s, 1))
1590     return false;
1591
1592   s = bfd_make_section (abfd, ".gnu.version_r");
1593   if (s == NULL
1594       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1595       || ! bfd_set_section_alignment (abfd, s, 2))
1596     return false;
1597
1598   s = bfd_make_section (abfd, ".dynsym");
1599   if (s == NULL
1600       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1601       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1602     return false;
1603
1604   s = bfd_make_section (abfd, ".dynstr");
1605   if (s == NULL
1606       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1607     return false;
1608
1609   /* Create a strtab to hold the dynamic symbol names.  */
1610   if (elf_hash_table (info)->dynstr == NULL)
1611     {
1612       elf_hash_table (info)->dynstr = elf_stringtab_init ();
1613       if (elf_hash_table (info)->dynstr == NULL)
1614         return false;
1615     }
1616
1617   s = bfd_make_section (abfd, ".dynamic");
1618   if (s == NULL
1619       || ! bfd_set_section_flags (abfd, s, flags)
1620       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1621     return false;
1622
1623   /* The special symbol _DYNAMIC is always set to the start of the
1624      .dynamic section.  This call occurs before we have processed the
1625      symbols for any dynamic object, so we don't have to worry about
1626      overriding a dynamic definition.  We could set _DYNAMIC in a
1627      linker script, but we only want to define it if we are, in fact,
1628      creating a .dynamic section.  We don't want to define it if there
1629      is no .dynamic section, since on some ELF platforms the start up
1630      code examines it to decide how to initialize the process.  */
1631   h = NULL;
1632   if (! (_bfd_generic_link_add_one_symbol
1633          (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
1634           (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
1635           (struct bfd_link_hash_entry **) &h)))
1636     return false;
1637   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1638   h->type = STT_OBJECT;
1639
1640   if (info->shared
1641       && ! _bfd_elf_link_record_dynamic_symbol (info, h))
1642     return false;
1643
1644   s = bfd_make_section (abfd, ".hash");
1645   if (s == NULL
1646       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1647       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1648     return false;
1649
1650   /* Let the backend create the rest of the sections.  This lets the
1651      backend set the right flags.  The backend will normally create
1652      the .got and .plt sections.  */
1653   bed = get_elf_backend_data (abfd);
1654   if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
1655     return false;
1656
1657   elf_hash_table (info)->dynamic_sections_created = true;
1658
1659   return true;
1660 }
1661
1662 /* Add an entry to the .dynamic table.  */
1663
1664 boolean
1665 elf_add_dynamic_entry (info, tag, val)
1666      struct bfd_link_info *info;
1667      bfd_vma tag;
1668      bfd_vma val;
1669 {
1670   Elf_Internal_Dyn dyn;
1671   bfd *dynobj;
1672   asection *s;
1673   size_t newsize;
1674   bfd_byte *newcontents;
1675
1676   dynobj = elf_hash_table (info)->dynobj;
1677
1678   s = bfd_get_section_by_name (dynobj, ".dynamic");
1679   BFD_ASSERT (s != NULL);
1680
1681   newsize = s->_raw_size + sizeof (Elf_External_Dyn);
1682   newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
1683   if (newcontents == NULL)
1684     return false;
1685
1686   dyn.d_tag = tag;
1687   dyn.d_un.d_val = val;
1688   elf_swap_dyn_out (dynobj, &dyn,
1689                     (Elf_External_Dyn *) (newcontents + s->_raw_size));
1690
1691   s->_raw_size = newsize;
1692   s->contents = newcontents;
1693
1694   return true;
1695 }
1696 \f
1697
1698 /* Read and swap the relocs for a section.  They may have been cached.
1699    If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are not NULL,
1700    they are used as buffers to read into.  They are known to be large
1701    enough.  If the INTERNAL_RELOCS relocs argument is NULL, the return
1702    value is allocated using either malloc or bfd_alloc, according to
1703    the KEEP_MEMORY argument.  */
1704
1705 Elf_Internal_Rela *
1706 NAME(_bfd_elf,link_read_relocs) (abfd, o, external_relocs, internal_relocs,
1707                                  keep_memory)
1708      bfd *abfd;
1709      asection *o;
1710      PTR external_relocs;
1711      Elf_Internal_Rela *internal_relocs;
1712      boolean keep_memory;
1713 {
1714   Elf_Internal_Shdr *rel_hdr;
1715   PTR alloc1 = NULL;
1716   Elf_Internal_Rela *alloc2 = NULL;
1717
1718   if (elf_section_data (o)->relocs != NULL)
1719     return elf_section_data (o)->relocs;
1720
1721   if (o->reloc_count == 0)
1722     return NULL;
1723
1724   rel_hdr = &elf_section_data (o)->rel_hdr;
1725
1726   if (internal_relocs == NULL)
1727     {
1728       size_t size;
1729
1730       size = o->reloc_count * sizeof (Elf_Internal_Rela);
1731       if (keep_memory)
1732         internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
1733       else
1734         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
1735       if (internal_relocs == NULL)
1736         goto error_return;
1737     }
1738
1739   if (external_relocs == NULL)
1740     {
1741       alloc1 = (PTR) bfd_malloc ((size_t) rel_hdr->sh_size);
1742       if (alloc1 == NULL)
1743         goto error_return;
1744       external_relocs = alloc1;
1745     }
1746
1747   if ((bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
1748       || (bfd_read (external_relocs, 1, rel_hdr->sh_size, abfd)
1749           != rel_hdr->sh_size))
1750     goto error_return;
1751
1752   /* Swap in the relocs.  For convenience, we always produce an
1753      Elf_Internal_Rela array; if the relocs are Rel, we set the addend
1754      to 0.  */
1755   if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
1756     {
1757       Elf_External_Rel *erel;
1758       Elf_External_Rel *erelend;
1759       Elf_Internal_Rela *irela;
1760
1761       erel = (Elf_External_Rel *) external_relocs;
1762       erelend = erel + o->reloc_count;
1763       irela = internal_relocs;
1764       for (; erel < erelend; erel++, irela++)
1765         {
1766           Elf_Internal_Rel irel;
1767
1768           elf_swap_reloc_in (abfd, erel, &irel);
1769           irela->r_offset = irel.r_offset;
1770           irela->r_info = irel.r_info;
1771           irela->r_addend = 0;
1772         }
1773     }
1774   else
1775     {
1776       Elf_External_Rela *erela;
1777       Elf_External_Rela *erelaend;
1778       Elf_Internal_Rela *irela;
1779
1780       BFD_ASSERT (rel_hdr->sh_entsize == sizeof (Elf_External_Rela));
1781
1782       erela = (Elf_External_Rela *) external_relocs;
1783       erelaend = erela + o->reloc_count;
1784       irela = internal_relocs;
1785       for (; erela < erelaend; erela++, irela++)
1786         elf_swap_reloca_in (abfd, erela, irela);
1787     }
1788
1789   /* Cache the results for next time, if we can.  */
1790   if (keep_memory)
1791     elf_section_data (o)->relocs = internal_relocs;
1792
1793   if (alloc1 != NULL)
1794     free (alloc1);
1795
1796   /* Don't free alloc2, since if it was allocated we are passing it
1797      back (under the name of internal_relocs).  */
1798
1799   return internal_relocs;
1800
1801  error_return:
1802   if (alloc1 != NULL)
1803     free (alloc1);
1804   if (alloc2 != NULL)
1805     free (alloc2);
1806   return NULL;
1807 }
1808 \f
1809
1810 /* Record an assignment to a symbol made by a linker script.  We need
1811    this in case some dynamic object refers to this symbol.  */
1812
1813 /*ARGSUSED*/
1814 boolean
1815 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name, provide)
1816      bfd *output_bfd;
1817      struct bfd_link_info *info;
1818      const char *name;
1819      boolean provide;
1820 {
1821   struct elf_link_hash_entry *h;
1822
1823   if (info->hash->creator->flavour != bfd_target_elf_flavour)
1824     return true;
1825
1826   h = elf_link_hash_lookup (elf_hash_table (info), name, true, true, false);
1827   if (h == NULL)
1828     return false;
1829
1830   if (h->root.type == bfd_link_hash_new)
1831     h->elf_link_hash_flags &=~ ELF_LINK_NON_ELF;
1832
1833   /* If this symbol is being provided by the linker script, and it is
1834      currently defined by a dynamic object, but not by a regular
1835      object, then mark it as undefined so that the generic linker will
1836      force the correct value.  */
1837   if (provide
1838       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1839       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
1840     h->root.type = bfd_link_hash_undefined;
1841
1842   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1843   h->type = STT_OBJECT;
1844
1845   if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
1846                                   | ELF_LINK_HASH_REF_DYNAMIC)) != 0
1847        || info->shared)
1848       && h->dynindx == -1)
1849     {
1850       if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1851         return false;
1852
1853       /* If this is a weak defined symbol, and we know a corresponding
1854          real symbol from the same dynamic object, make sure the real
1855          symbol is also made into a dynamic symbol.  */
1856       if (h->weakdef != NULL
1857           && h->weakdef->dynindx == -1)
1858         {
1859           if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
1860             return false;
1861         }
1862     }
1863
1864   return true;
1865 }
1866 \f
1867 /* This structure is used to pass information to
1868    elf_link_assign_sym_version.  */
1869
1870 struct elf_assign_sym_version_info
1871 {
1872   /* Output BFD.  */
1873   bfd *output_bfd;
1874   /* General link information.  */
1875   struct bfd_link_info *info;
1876   /* Version tree.  */
1877   struct bfd_elf_version_tree *verdefs;
1878   /* Whether we are exporting all dynamic symbols.  */
1879   boolean export_dynamic;
1880   /* Whether we removed any symbols from the dynamic symbol table.  */
1881   boolean removed_dynamic;
1882   /* Whether we had a failure.  */
1883   boolean failed;
1884 };
1885
1886 /* This structure is used to pass information to
1887    elf_link_find_version_dependencies.  */
1888
1889 struct elf_find_verdep_info
1890 {
1891   /* Output BFD.  */
1892   bfd *output_bfd;
1893   /* General link information.  */
1894   struct bfd_link_info *info;
1895   /* The number of dependencies.  */
1896   unsigned int vers;
1897   /* Whether we had a failure.  */
1898   boolean failed;
1899 };
1900
1901 /* Array used to determine the number of hash table buckets to use
1902    based on the number of symbols there are.  If there are fewer than
1903    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
1904    fewer than 37 we use 17 buckets, and so forth.  We never use more
1905    than 32771 buckets.  */
1906
1907 static const size_t elf_buckets[] =
1908 {
1909   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
1910   16411, 32771, 0
1911 };
1912
1913 /* Set up the sizes and contents of the ELF dynamic sections.  This is
1914    called by the ELF linker emulation before_allocation routine.  We
1915    must set the sizes of the sections before the linker sets the
1916    addresses of the various sections.  */
1917
1918 boolean
1919 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
1920                                      export_dynamic, filter_shlib,
1921                                      auxiliary_filters, info, sinterpptr,
1922                                      verdefs)
1923      bfd *output_bfd;
1924      const char *soname;
1925      const char *rpath;
1926      boolean export_dynamic;
1927      const char *filter_shlib;
1928      const char * const *auxiliary_filters;
1929      struct bfd_link_info *info;
1930      asection **sinterpptr;
1931      struct bfd_elf_version_tree *verdefs;
1932 {
1933   bfd_size_type soname_indx;
1934   bfd *dynobj;
1935   struct elf_backend_data *bed;
1936   bfd_size_type old_dynsymcount;
1937
1938   *sinterpptr = NULL;
1939
1940   soname_indx = -1;
1941
1942   if (info->hash->creator->flavour != bfd_target_elf_flavour)
1943     return true;
1944
1945   /* The backend may have to create some sections regardless of whether
1946      we're dynamic or not.  */
1947   bed = get_elf_backend_data (output_bfd);
1948   if (bed->elf_backend_always_size_sections
1949       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
1950     return false;
1951
1952   dynobj = elf_hash_table (info)->dynobj;
1953
1954   /* If there were no dynamic objects in the link, there is nothing to
1955      do here.  */
1956   if (dynobj == NULL)
1957     return true;
1958
1959   /* If we are supposed to export all symbols into the dynamic symbol
1960      table (this is not the normal case), then do so.  */
1961   if (export_dynamic)
1962     {
1963       struct elf_info_failed eif;
1964
1965       eif.failed = false;
1966       eif.info = info;
1967       elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol,
1968                               (PTR) &eif);
1969       if (eif.failed)
1970         return false;
1971     }
1972
1973   if (elf_hash_table (info)->dynamic_sections_created)
1974     {
1975       struct elf_info_failed eif;
1976       struct elf_link_hash_entry *h;
1977       bfd_size_type strsize;
1978
1979       *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
1980       BFD_ASSERT (*sinterpptr != NULL || info->shared);
1981
1982       if (soname != NULL)
1983         {
1984           soname_indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
1985                                             soname, true, true);
1986           if (soname_indx == (bfd_size_type) -1
1987               || ! elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
1988             return false;
1989         }
1990
1991       if (info->symbolic)
1992         {
1993           if (! elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
1994             return false;
1995         }
1996
1997       if (rpath != NULL)
1998         {
1999           bfd_size_type indx;
2000
2001           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
2002                                      true, true);
2003           if (indx == (bfd_size_type) -1
2004               || ! elf_add_dynamic_entry (info, DT_RPATH, indx))
2005             return false;
2006         }
2007
2008       if (filter_shlib != NULL)
2009         {
2010           bfd_size_type indx;
2011
2012           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2013                                      filter_shlib, true, true);
2014           if (indx == (bfd_size_type) -1
2015               || ! elf_add_dynamic_entry (info, DT_FILTER, indx))
2016             return false;
2017         }
2018
2019       if (auxiliary_filters != NULL)
2020         {
2021           const char * const *p;
2022
2023           for (p = auxiliary_filters; *p != NULL; p++)
2024             {
2025               bfd_size_type indx;
2026
2027               indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2028                                          *p, true, true);
2029               if (indx == (bfd_size_type) -1
2030                   || ! elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
2031                 return false;
2032             }
2033         }
2034
2035       /* Find all symbols which were defined in a dynamic object and make
2036          the backend pick a reasonable value for them.  */
2037       eif.failed = false;
2038       eif.info = info;
2039       elf_link_hash_traverse (elf_hash_table (info),
2040                               elf_adjust_dynamic_symbol,
2041                               (PTR) &eif);
2042       if (eif.failed)
2043         return false;
2044
2045       /* Add some entries to the .dynamic section.  We fill in some of the
2046          values later, in elf_bfd_final_link, but we must add the entries
2047          now so that we know the final size of the .dynamic section.  */
2048       h =  elf_link_hash_lookup (elf_hash_table (info), "_init", false,
2049                                 false, false);
2050       if (h != NULL
2051           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
2052                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
2053         {
2054           if (! elf_add_dynamic_entry (info, DT_INIT, 0))
2055             return false;
2056         }
2057       h =  elf_link_hash_lookup (elf_hash_table (info), "_fini", false,
2058                                  false, false);
2059       if (h != NULL
2060           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
2061                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
2062         {
2063           if (! elf_add_dynamic_entry (info, DT_FINI, 0))
2064             return false;
2065         }
2066       strsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
2067       if (! elf_add_dynamic_entry (info, DT_HASH, 0)
2068           || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
2069           || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
2070           || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
2071           || ! elf_add_dynamic_entry (info, DT_SYMENT,
2072                                       sizeof (Elf_External_Sym)))
2073         return false;
2074     }
2075
2076   /* The backend must work out the sizes of all the other dynamic
2077      sections.  */
2078   old_dynsymcount = elf_hash_table (info)->dynsymcount;
2079   if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
2080     return false;
2081
2082   if (elf_hash_table (info)->dynamic_sections_created)
2083     {
2084       size_t dynsymcount;
2085       asection *s;
2086       size_t i;
2087       size_t bucketcount = 0;
2088       Elf_Internal_Sym isym;
2089       struct elf_assign_sym_version_info sinfo;
2090
2091       /* Set up the version definition section.  */
2092       s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
2093       BFD_ASSERT (s != NULL);
2094
2095       /* Attach all the symbols to their version information.  This
2096          may cause some symbols to be unexported.  */
2097       sinfo.output_bfd = output_bfd;
2098       sinfo.info = info;
2099       sinfo.verdefs = verdefs;
2100       sinfo.export_dynamic = export_dynamic;
2101       sinfo.removed_dynamic = false;
2102       sinfo.failed = false;
2103
2104       elf_link_hash_traverse (elf_hash_table (info),
2105                               elf_link_assign_sym_version,
2106                               (PTR) &sinfo);
2107       if (sinfo.failed)
2108         return false;
2109
2110       /* We may have created additional version definitions if we are
2111          just linking a regular application.  */
2112       verdefs = sinfo.verdefs;
2113
2114       if (verdefs == NULL)
2115         {
2116           asection **spp;
2117
2118           /* Don't include this section in the output file.  */
2119           for (spp = &output_bfd->sections;
2120                *spp != s->output_section;
2121                spp = &(*spp)->next)
2122             ;
2123           *spp = s->output_section->next;
2124           --output_bfd->section_count;
2125         }
2126       else
2127         {
2128           unsigned int cdefs;
2129           bfd_size_type size;
2130           struct bfd_elf_version_tree *t;
2131           bfd_byte *p;
2132           Elf_Internal_Verdef def;
2133           Elf_Internal_Verdaux defaux;
2134
2135           if (sinfo.removed_dynamic)
2136             {
2137               /* Some dynamic symbols were changed to be local
2138                  symbols.  In this case, we renumber all of the
2139                  dynamic symbols, so that we don't have a hole.  If
2140                  the backend changed dynsymcount, then assume that the
2141                  new symbols are at the start.  This is the case on
2142                  the MIPS.  FIXME: The names of the removed symbols
2143                  will still be in the dynamic string table, wasting
2144                  space.  */
2145               elf_hash_table (info)->dynsymcount =
2146                 1 + (elf_hash_table (info)->dynsymcount - old_dynsymcount);
2147               elf_link_hash_traverse (elf_hash_table (info),
2148                                       elf_link_renumber_dynsyms,
2149                                       (PTR) info);
2150             }
2151
2152           cdefs = 0;
2153           size = 0;
2154
2155           /* Make space for the base version.  */
2156           size += sizeof (Elf_External_Verdef);
2157           size += sizeof (Elf_External_Verdaux);
2158           ++cdefs;
2159
2160           for (t = verdefs; t != NULL; t = t->next)
2161             {
2162               struct bfd_elf_version_deps *n;
2163
2164               size += sizeof (Elf_External_Verdef);
2165               size += sizeof (Elf_External_Verdaux);
2166               ++cdefs;
2167
2168               for (n = t->deps; n != NULL; n = n->next)
2169                 size += sizeof (Elf_External_Verdaux);
2170             }
2171
2172           s->_raw_size = size;
2173           s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
2174           if (s->contents == NULL && s->_raw_size != 0)
2175             return false;
2176
2177           /* Fill in the version definition section.  */
2178
2179           p = s->contents;
2180
2181           def.vd_version = VER_DEF_CURRENT;
2182           def.vd_flags = VER_FLG_BASE;
2183           def.vd_ndx = 1;
2184           def.vd_cnt = 1;
2185           def.vd_aux = sizeof (Elf_External_Verdef);
2186           def.vd_next = (sizeof (Elf_External_Verdef)
2187                          + sizeof (Elf_External_Verdaux));
2188
2189           if (soname_indx != -1)
2190             {
2191               def.vd_hash = bfd_elf_hash ((const unsigned char *) soname);
2192               defaux.vda_name = soname_indx;
2193             }
2194           else
2195             {
2196               const char *name;
2197               bfd_size_type indx;
2198
2199               name = output_bfd->filename;
2200               def.vd_hash = bfd_elf_hash ((const unsigned char *) name);
2201               indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2202                                             name, true, false);
2203               if (indx == (bfd_size_type) -1)
2204                 return false;
2205               defaux.vda_name = indx;
2206             }
2207           defaux.vda_next = 0;
2208
2209           _bfd_elf_swap_verdef_out (output_bfd, &def,
2210                                     (Elf_External_Verdef *)p);
2211           p += sizeof (Elf_External_Verdef);
2212           _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
2213                                      (Elf_External_Verdaux *) p);
2214           p += sizeof (Elf_External_Verdaux);
2215
2216           for (t = verdefs; t != NULL; t = t->next)
2217             {
2218               unsigned int cdeps;
2219               struct bfd_elf_version_deps *n;
2220               struct elf_link_hash_entry *h;
2221
2222               cdeps = 0;
2223               for (n = t->deps; n != NULL; n = n->next)
2224                 ++cdeps;
2225
2226               /* Add a symbol representing this version.  */
2227               h = NULL;
2228               if (! (_bfd_generic_link_add_one_symbol
2229                      (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
2230                       (bfd_vma) 0, (const char *) NULL, false,
2231                       get_elf_backend_data (dynobj)->collect,
2232                       (struct bfd_link_hash_entry **) &h)))
2233                 return false;
2234               h->elf_link_hash_flags &= ~ ELF_LINK_NON_ELF;
2235               h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2236               h->type = STT_OBJECT;
2237               h->verinfo.vertree = t;
2238
2239               if (! _bfd_elf_link_record_dynamic_symbol (info, h))
2240                 return false;
2241
2242               def.vd_version = VER_DEF_CURRENT;
2243               def.vd_flags = 0;
2244               if (t->globals == NULL && t->locals == NULL && ! t->used)
2245                 def.vd_flags |= VER_FLG_WEAK;
2246               def.vd_ndx = t->vernum + 1;
2247               def.vd_cnt = cdeps + 1;
2248               def.vd_hash = bfd_elf_hash ((const unsigned char *) t->name);
2249               def.vd_aux = sizeof (Elf_External_Verdef);
2250               if (t->next != NULL)
2251                 def.vd_next = (sizeof (Elf_External_Verdef)
2252                                + (cdeps + 1) * sizeof (Elf_External_Verdaux));
2253               else
2254                 def.vd_next = 0;
2255
2256               _bfd_elf_swap_verdef_out (output_bfd, &def,
2257                                         (Elf_External_Verdef *) p);
2258               p += sizeof (Elf_External_Verdef);
2259
2260               defaux.vda_name = h->dynstr_index;
2261               if (t->deps == NULL)
2262                 defaux.vda_next = 0;
2263               else
2264                 defaux.vda_next = sizeof (Elf_External_Verdaux);
2265               t->name_indx = defaux.vda_name;
2266
2267               _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
2268                                          (Elf_External_Verdaux *) p);
2269               p += sizeof (Elf_External_Verdaux);
2270
2271               for (n = t->deps; n != NULL; n = n->next)
2272                 {
2273                   defaux.vda_name = n->version_needed->name_indx;
2274                   if (n->next == NULL)
2275                     defaux.vda_next = 0;
2276                   else
2277                     defaux.vda_next = sizeof (Elf_External_Verdaux);
2278
2279                   _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
2280                                              (Elf_External_Verdaux *) p);
2281                   p += sizeof (Elf_External_Verdaux);
2282                 }
2283             }
2284
2285           if (! elf_add_dynamic_entry (info, DT_VERDEF, 0)
2286               || ! elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
2287             return false;
2288
2289           elf_tdata (output_bfd)->cverdefs = cdefs;
2290         }
2291
2292       /* Work out the size of the version reference section.  */
2293
2294       s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
2295       BFD_ASSERT (s != NULL);
2296       {
2297         struct elf_find_verdep_info sinfo;
2298
2299         sinfo.output_bfd = output_bfd;
2300         sinfo.info = info;
2301         sinfo.vers = elf_tdata (output_bfd)->cverdefs;
2302         if (sinfo.vers == 0)
2303           sinfo.vers = 1;
2304         sinfo.failed = false;
2305
2306         elf_link_hash_traverse (elf_hash_table (info),
2307                                 elf_link_find_version_dependencies,
2308                                 (PTR) &sinfo);
2309
2310         if (elf_tdata (output_bfd)->verref == NULL)
2311           {
2312             asection **spp;
2313
2314             /* We don't have any version definitions, so we can just
2315                remove the section.  */
2316
2317             for (spp = &output_bfd->sections;
2318                  *spp != s->output_section;
2319                  spp = &(*spp)->next)
2320               ;
2321             *spp = s->output_section->next;
2322             --output_bfd->section_count;
2323           }
2324         else
2325           {
2326             Elf_Internal_Verneed *t;
2327             unsigned int size;
2328             unsigned int crefs;
2329             bfd_byte *p;
2330
2331             /* Build the version definition section.  */
2332             size = 0;
2333             crefs = 0;
2334             for (t = elf_tdata (output_bfd)->verref;
2335                  t != NULL;
2336                  t = t->vn_nextref)
2337               {
2338                 Elf_Internal_Vernaux *a;
2339
2340                 size += sizeof (Elf_External_Verneed);
2341                 ++crefs;
2342                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2343                   size += sizeof (Elf_External_Vernaux);
2344               }
2345
2346             s->_raw_size = size;
2347             s->contents = (bfd_byte *) bfd_alloc (output_bfd, size);
2348             if (s->contents == NULL)
2349               return false;
2350
2351             p = s->contents;
2352             for (t = elf_tdata (output_bfd)->verref;
2353                  t != NULL;
2354                  t = t->vn_nextref)
2355               {
2356                 unsigned int caux;
2357                 Elf_Internal_Vernaux *a;
2358                 bfd_size_type indx;
2359
2360                 caux = 0;
2361                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2362                   ++caux;
2363
2364                 t->vn_version = VER_NEED_CURRENT;
2365                 t->vn_cnt = caux;
2366                 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2367                                            t->vn_bfd->filename, true, false);
2368                 if (indx == (bfd_size_type) -1)
2369                   return false;
2370                 t->vn_file = indx;
2371                 t->vn_aux = sizeof (Elf_External_Verneed);
2372                 if (t->vn_nextref == NULL)
2373                   t->vn_next = 0;
2374                 else
2375                   t->vn_next = (sizeof (Elf_External_Verneed)
2376                                 + caux * sizeof (Elf_External_Vernaux));
2377
2378                 _bfd_elf_swap_verneed_out (output_bfd, t,
2379                                            (Elf_External_Verneed *) p);
2380                 p += sizeof (Elf_External_Verneed);
2381
2382                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2383                   {
2384                     a->vna_hash = bfd_elf_hash ((const unsigned char *)
2385                                                 a->vna_nodename);
2386                     indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
2387                                                a->vna_nodename, true, false);
2388                     if (indx == (bfd_size_type) -1)
2389                       return false;
2390                     a->vna_name = indx;
2391                     if (a->vna_nextptr == NULL)
2392                       a->vna_next = 0;
2393                     else
2394                       a->vna_next = sizeof (Elf_External_Vernaux);
2395
2396                     _bfd_elf_swap_vernaux_out (output_bfd, a,
2397                                                (Elf_External_Vernaux *) p);
2398                     p += sizeof (Elf_External_Vernaux);
2399                   }
2400               }
2401
2402             if (! elf_add_dynamic_entry (info, DT_VERNEED, 0)
2403                 || ! elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
2404               return false;
2405
2406             elf_tdata (output_bfd)->cverrefs = crefs;
2407           }
2408       }
2409
2410       dynsymcount = elf_hash_table (info)->dynsymcount;
2411
2412       /* Work out the size of the symbol version section.  */
2413       s = bfd_get_section_by_name (dynobj, ".gnu.version");
2414       BFD_ASSERT (s != NULL);
2415       if (dynsymcount == 0
2416           || (verdefs == NULL && elf_tdata (output_bfd)->verref == NULL))
2417         {
2418           asection **spp;
2419
2420           /* We don't need any symbol versions; just discard the
2421              section.  */
2422           for (spp = &output_bfd->sections;
2423                *spp != s->output_section;
2424                spp = &(*spp)->next)
2425             ;
2426           *spp = s->output_section->next;
2427           --output_bfd->section_count;
2428         }
2429       else
2430         {
2431           s->_raw_size = dynsymcount * sizeof (Elf_External_Versym);
2432           s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->_raw_size);
2433           if (s->contents == NULL)
2434             return false;
2435
2436           if (! elf_add_dynamic_entry (info, DT_VERSYM, 0))
2437             return false;
2438         }
2439
2440       /* Set the size of the .dynsym and .hash sections.  We counted
2441          the number of dynamic symbols in elf_link_add_object_symbols.
2442          We will build the contents of .dynsym and .hash when we build
2443          the final symbol table, because until then we do not know the
2444          correct value to give the symbols.  We built the .dynstr
2445          section as we went along in elf_link_add_object_symbols.  */
2446       s = bfd_get_section_by_name (dynobj, ".dynsym");
2447       BFD_ASSERT (s != NULL);
2448       s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
2449       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
2450       if (s->contents == NULL && s->_raw_size != 0)
2451         return false;
2452
2453       /* The first entry in .dynsym is a dummy symbol.  */
2454       isym.st_value = 0;
2455       isym.st_size = 0;
2456       isym.st_name = 0;
2457       isym.st_info = 0;
2458       isym.st_other = 0;
2459       isym.st_shndx = 0;
2460       elf_swap_symbol_out (output_bfd, &isym,
2461                            (PTR) (Elf_External_Sym *) s->contents);
2462
2463       for (i = 0; elf_buckets[i] != 0; i++)
2464         {
2465           bucketcount = elf_buckets[i];
2466           if (dynsymcount < elf_buckets[i + 1])
2467             break;
2468         }
2469
2470       s = bfd_get_section_by_name (dynobj, ".hash");
2471       BFD_ASSERT (s != NULL);
2472       s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
2473       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
2474       if (s->contents == NULL)
2475         return false;
2476       memset (s->contents, 0, (size_t) s->_raw_size);
2477
2478       put_word (output_bfd, bucketcount, s->contents);
2479       put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
2480
2481       elf_hash_table (info)->bucketcount = bucketcount;
2482
2483       s = bfd_get_section_by_name (dynobj, ".dynstr");
2484       BFD_ASSERT (s != NULL);
2485       s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
2486
2487       if (! elf_add_dynamic_entry (info, DT_NULL, 0))
2488         return false;
2489     }
2490
2491   return true;
2492 }
2493 \f
2494 /* Make the backend pick a good value for a dynamic symbol.  This is
2495    called via elf_link_hash_traverse, and also calls itself
2496    recursively.  */
2497
2498 static boolean
2499 elf_adjust_dynamic_symbol (h, data)
2500      struct elf_link_hash_entry *h;
2501      PTR data;
2502 {
2503   struct elf_info_failed *eif = (struct elf_info_failed *) data;
2504   bfd *dynobj;
2505   struct elf_backend_data *bed;
2506
2507   /* Ignore indirect symbols.  These are added by the versioning code.  */
2508   if (h->root.type == bfd_link_hash_indirect)
2509     return true;
2510
2511   /* If this symbol was mentioned in a non-ELF file, try to set
2512      DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
2513      permit a non-ELF file to correctly refer to a symbol defined in
2514      an ELF dynamic object.  */
2515   if ((h->elf_link_hash_flags & ELF_LINK_NON_ELF) != 0)
2516     {
2517       if (h->root.type != bfd_link_hash_defined
2518           && h->root.type != bfd_link_hash_defweak)
2519         h->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
2520       else
2521         {
2522           if (h->root.u.def.section->owner != NULL
2523               && (bfd_get_flavour (h->root.u.def.section->owner)
2524                   == bfd_target_elf_flavour))
2525             h->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
2526           else
2527             h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2528         }
2529
2530       if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
2531           || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
2532         {
2533           if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
2534             {
2535               eif->failed = true;
2536               return false;
2537             }
2538         }
2539     }
2540
2541   /* If this is a final link, and the symbol was defined as a common
2542      symbol in a regular object file, and there was no definition in
2543      any dynamic object, then the linker will have allocated space for
2544      the symbol in a common section but the ELF_LINK_HASH_DEF_REGULAR
2545      flag will not have been set.  */
2546   if (h->root.type == bfd_link_hash_defined
2547       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
2548       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
2549       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
2550       && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
2551     h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
2552
2553   /* If -Bsymbolic was used (which means to bind references to global
2554      symbols to the definition within the shared object), and this
2555      symbol was defined in a regular object, then it actually doesn't
2556      need a PLT entry.  */
2557   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
2558       && eif->info->shared
2559       && eif->info->symbolic
2560       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
2561     h->elf_link_hash_flags &=~ ELF_LINK_HASH_NEEDS_PLT;
2562
2563   /* If this symbol does not require a PLT entry, and it is not
2564      defined by a dynamic object, or is not referenced by a regular
2565      object, ignore it.  We do have to handle a weak defined symbol,
2566      even if no regular object refers to it, if we decided to add it
2567      to the dynamic symbol table.  FIXME: Do we normally need to worry
2568      about symbols which are defined by one dynamic object and
2569      referenced by another one?  */
2570   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
2571       && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
2572           || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
2573           || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
2574               && (h->weakdef == NULL || h->weakdef->dynindx == -1))))
2575     return true;
2576
2577   /* If we've already adjusted this symbol, don't do it again.  This
2578      can happen via a recursive call.  */
2579   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
2580     return true;
2581
2582   /* Don't look at this symbol again.  Note that we must set this
2583      after checking the above conditions, because we may look at a
2584      symbol once, decide not to do anything, and then get called
2585      recursively later after REF_REGULAR is set below.  */
2586   h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
2587
2588   /* If this is a weak definition, and we know a real definition, and
2589      the real symbol is not itself defined by a regular object file,
2590      then get a good value for the real definition.  We handle the
2591      real symbol first, for the convenience of the backend routine.
2592
2593      Note that there is a confusing case here.  If the real definition
2594      is defined by a regular object file, we don't get the real symbol
2595      from the dynamic object, but we do get the weak symbol.  If the
2596      processor backend uses a COPY reloc, then if some routine in the
2597      dynamic object changes the real symbol, we will not see that
2598      change in the corresponding weak symbol.  This is the way other
2599      ELF linkers work as well, and seems to be a result of the shared
2600      library model.
2601
2602      I will clarify this issue.  Most SVR4 shared libraries define the
2603      variable _timezone and define timezone as a weak synonym.  The
2604      tzset call changes _timezone.  If you write
2605        extern int timezone;
2606        int _timezone = 5;
2607        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
2608      you might expect that, since timezone is a synonym for _timezone,
2609      the same number will print both times.  However, if the processor
2610      backend uses a COPY reloc, then actually timezone will be copied
2611      into your process image, and, since you define _timezone
2612      yourself, _timezone will not.  Thus timezone and _timezone will
2613      wind up at different memory locations.  The tzset call will set
2614      _timezone, leaving timezone unchanged.  */
2615
2616   if (h->weakdef != NULL)
2617     {
2618       struct elf_link_hash_entry *weakdef;
2619
2620       BFD_ASSERT (h->root.type == bfd_link_hash_defined
2621                   || h->root.type == bfd_link_hash_defweak);
2622       weakdef = h->weakdef;
2623       BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
2624                   || weakdef->root.type == bfd_link_hash_defweak);
2625       BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
2626       if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
2627         {
2628           /* This symbol is defined by a regular object file, so we
2629              will not do anything special.  Clear weakdef for the
2630              convenience of the processor backend.  */
2631           h->weakdef = NULL;
2632         }
2633       else
2634         {
2635           /* There is an implicit reference by a regular object file
2636              via the weak symbol.  */
2637           weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
2638           if (! elf_adjust_dynamic_symbol (weakdef, (PTR) eif))
2639             return false;
2640         }
2641     }
2642
2643   dynobj = elf_hash_table (eif->info)->dynobj;
2644   bed = get_elf_backend_data (dynobj);
2645   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
2646     {
2647       eif->failed = true;
2648       return false;
2649     }
2650
2651   return true;
2652 }
2653 \f
2654 /* This routine is used to export all defined symbols into the dynamic
2655    symbol table.  It is called via elf_link_hash_traverse.  */
2656
2657 static boolean
2658 elf_export_symbol (h, data)
2659      struct elf_link_hash_entry *h;
2660      PTR data;
2661 {
2662   struct elf_info_failed *eif = (struct elf_info_failed *) data;
2663
2664   /* Ignore indirect symbols.  These are added by the versioning code.  */
2665   if (h->root.type == bfd_link_hash_indirect)
2666     return true;
2667
2668   if (h->dynindx == -1
2669       && (h->elf_link_hash_flags
2670           & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
2671     {
2672       if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
2673         {
2674           eif->failed = true;
2675           return false;
2676         }
2677     }
2678
2679   return true;
2680 }
2681 \f
2682 /* Look through the symbols which are defined in other shared
2683    libraries and referenced here.  Update the list of version
2684    dependencies.  This will be put into the .gnu.version_r section.
2685    This function is called via elf_link_hash_traverse.  */
2686
2687 static boolean
2688 elf_link_find_version_dependencies (h, data)
2689      struct elf_link_hash_entry *h;
2690      PTR data;
2691 {
2692   struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
2693   Elf_Internal_Verneed *t;
2694   Elf_Internal_Vernaux *a;
2695
2696   /* We only care about symbols defined in shared objects with version
2697      information.  */
2698   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
2699       || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
2700       || h->dynindx == -1
2701       || h->verinfo.verdef == NULL)
2702     return true;
2703
2704   /* See if we already know about this version.  */
2705   for (t = elf_tdata (rinfo->output_bfd)->verref; t != NULL; t = t->vn_nextref)
2706     {
2707       if (t->vn_bfd == h->verinfo.verdef->vd_bfd)
2708         continue;
2709
2710       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2711         if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
2712           return true;
2713
2714       break;
2715     }
2716
2717   /* This is a new version.  Add it to tree we are building.  */
2718
2719   if (t == NULL)
2720     {
2721       t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->output_bfd, sizeof *t);
2722       if (t == NULL)
2723         {
2724           rinfo->failed = true;
2725           return false;
2726         }
2727
2728       t->vn_bfd = h->verinfo.verdef->vd_bfd;
2729       t->vn_nextref = elf_tdata (rinfo->output_bfd)->verref;
2730       elf_tdata (rinfo->output_bfd)->verref = t;
2731     }
2732
2733   a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->output_bfd, sizeof *a);
2734
2735   /* Note that we are copying a string pointer here, and testing it
2736      above.  If bfd_elf_string_from_elf_section is ever changed to
2737      discard the string data when low in memory, this will have to be
2738      fixed.  */
2739   a->vna_nodename = h->verinfo.verdef->vd_nodename;
2740
2741   a->vna_flags = h->verinfo.verdef->vd_flags;
2742   a->vna_nextptr = t->vn_auxptr;
2743
2744   h->verinfo.verdef->vd_exp_refno = rinfo->vers;
2745   ++rinfo->vers;
2746
2747   a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
2748
2749   t->vn_auxptr = a;
2750
2751   return true;
2752 }
2753
2754 /* Figure out appropriate versions for all the symbols.  We may not
2755    have the version number script until we have read all of the input
2756    files, so until that point we don't know which symbols should be
2757    local.  This function is called via elf_link_hash_traverse.  */
2758
2759 static boolean
2760 elf_link_assign_sym_version (h, data)
2761      struct elf_link_hash_entry *h;
2762      PTR data;
2763 {
2764   struct elf_assign_sym_version_info *sinfo =
2765     (struct elf_assign_sym_version_info *) data;
2766   struct bfd_link_info *info = sinfo->info;
2767   char *p;
2768
2769   /* We only need version numbers for symbols defined in regular
2770      objects.  */
2771   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
2772     return true;
2773
2774   p = strchr (h->root.root.string, ELF_VER_CHR);
2775   if (p != NULL && h->verinfo.vertree == NULL)
2776     {
2777       struct bfd_elf_version_tree *t;
2778       boolean hidden;
2779
2780       hidden = true;
2781
2782       /* There are two consecutive ELF_VER_CHR characters if this is
2783          not a hidden symbol.  */
2784       ++p;
2785       if (*p == ELF_VER_CHR)
2786         {
2787           hidden = false;
2788           ++p;
2789         }
2790
2791       /* If there is no version string, we can just return out.  */
2792       if (*p == '\0')
2793         {
2794           if (hidden)
2795             h->elf_link_hash_flags |= ELF_LINK_HIDDEN;
2796           return true;
2797         }
2798
2799       /* Look for the version.  If we find it, it is no longer weak.  */
2800       for (t = sinfo->verdefs; t != NULL; t = t->next)
2801         {
2802           if (strcmp (t->name, p) == 0)
2803             {
2804               h->verinfo.vertree = t;
2805               t->used = true;
2806
2807               /* See if there is anything to force this symbol to
2808                  local scope.  */
2809               if (t->locals != NULL)
2810                 {
2811                   int len;
2812                   char *alc;
2813                   struct bfd_elf_version_expr *d;
2814
2815                   len = p - h->root.root.string;
2816                   alc = bfd_alloc (sinfo->output_bfd, len);
2817                   if (alc == NULL)
2818                     return false;
2819                   strncpy (alc, h->root.root.string, len - 1);
2820                   alc[len - 1] = '\0';
2821                   if (alc[len - 2] == ELF_VER_CHR)
2822                     alc[len - 2] = '\0';
2823
2824                   for (d = t->locals; d != NULL; d = d->next)
2825                     {
2826                       if ((d->match[0] == '*' && d->match[1] == '\0')
2827                           || fnmatch (d->match, alc, 0) == 0)
2828                         {
2829                           if (h->dynindx != -1
2830                               && info->shared
2831                               && ! sinfo->export_dynamic
2832                               && (h->elf_link_hash_flags
2833                                   & ELF_LINK_HASH_NEEDS_PLT) == 0)
2834                             {
2835                               sinfo->removed_dynamic = true;
2836                               h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
2837                               h->dynindx = -1;
2838                               /* FIXME: The name of the symbol has
2839                                  already been recorded in the dynamic
2840                                  string table section.  */
2841                             }
2842
2843                           break;
2844                         }
2845                     }
2846
2847                   bfd_release (sinfo->output_bfd, alc);
2848                 }
2849
2850               break;
2851             }
2852         }
2853
2854       /* If we are building an application, we need to create a
2855          version node for this version.  */
2856       if (t == NULL && ! info->shared)
2857         {
2858           struct bfd_elf_version_tree **pp;
2859           int version_index;
2860
2861           /* If we aren't going to export this symbol, we don't need
2862              to worry about it. */
2863           if (h->dynindx == -1)
2864             return true;
2865
2866           t = ((struct bfd_elf_version_tree *)
2867                bfd_alloc (sinfo->output_bfd, sizeof *t));
2868           if (t == NULL)
2869             {
2870               sinfo->failed = true;
2871               return false;
2872             }
2873
2874           t->next = NULL;
2875           t->name = p;
2876           t->globals = NULL;
2877           t->locals = NULL;
2878           t->deps = NULL;
2879           t->name_indx = (unsigned int) -1;
2880           t->used = true;
2881
2882           version_index = 1;
2883           for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next)
2884             ++version_index;
2885           t->vernum = version_index;
2886
2887           *pp = t;
2888
2889           h->verinfo.vertree = t;
2890         }
2891       else if (t == NULL)
2892         {
2893           /* We could not find the version for a symbol when
2894              generating a shared archive.  Return an error.  */
2895           (*_bfd_error_handler)
2896             ("%s: undefined version name %s",
2897              bfd_get_filename (sinfo->output_bfd), h->root.root.string);
2898           bfd_set_error (bfd_error_bad_value);
2899           sinfo->failed = true;
2900           return false;
2901         }
2902
2903       if (hidden)
2904         h->elf_link_hash_flags |= ELF_LINK_HIDDEN;
2905     }
2906
2907   /* If we don't have a version for this symbol, see if we can find
2908      something.  */
2909   if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL)
2910     {
2911       struct bfd_elf_version_tree *t;
2912       struct bfd_elf_version_tree *deflt;
2913       struct bfd_elf_version_expr *d;
2914
2915       /* See if can find what version this symbol is in.  If the
2916          symbol is supposed to eb local, then don't actually register
2917          it.  */
2918       deflt = NULL;
2919       for (t = sinfo->verdefs; t != NULL; t = t->next)
2920         {
2921           if (t->globals != NULL)
2922             {
2923               for (d = t->globals; d != NULL; d = d->next)
2924                 {
2925                   if (fnmatch (d->match, h->root.root.string, 0) == 0)
2926                     {
2927                       h->verinfo.vertree = t;
2928                       break;
2929                     }
2930                 }
2931
2932               if (d != NULL)
2933                 break;
2934             }
2935
2936           if (t->locals != NULL)
2937             {
2938               for (d = t->locals; d != NULL; d = d->next)
2939                 {
2940                   if (d->match[0] == '*' && d->match[1] == '\0')
2941                     deflt = t;
2942                   else if (fnmatch (d->match, h->root.root.string, 0) == 0)
2943                     {
2944                       h->verinfo.vertree = t;
2945                       if (h->dynindx != -1
2946                           && info->shared
2947                           && ! sinfo->export_dynamic
2948                           && (h->elf_link_hash_flags
2949                               & ELF_LINK_HASH_NEEDS_PLT) == 0)
2950                         {
2951                           sinfo->removed_dynamic = true;
2952                           h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
2953                           h->dynindx = -1;
2954                           /* FIXME: The name of the symbol has already
2955                              been recorded in the dynamic string table
2956                              section.  */
2957                         }
2958                       break;
2959                     }
2960                 }
2961
2962               if (d != NULL)
2963                 break;
2964             }
2965         }
2966
2967       if (deflt != NULL && h->verinfo.vertree == NULL)
2968         {
2969           h->verinfo.vertree = deflt;
2970           if (h->dynindx != -1
2971               && info->shared
2972               && ! sinfo->export_dynamic
2973               && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0)
2974             {
2975               sinfo->removed_dynamic = true;
2976               h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
2977               h->dynindx = -1;
2978               /* FIXME: The name of the symbol has already been
2979                  recorded in the dynamic string table section.  */
2980             }
2981         }
2982     }
2983
2984   return true;
2985 }
2986
2987 /* This function is used to renumber the dynamic symbols, if some of
2988    them are removed because they are marked as local.  This is called
2989    via elf_link_hash_traverse.  */
2990
2991 static boolean
2992 elf_link_renumber_dynsyms (h, data)
2993      struct elf_link_hash_entry *h;
2994      PTR data;
2995 {
2996   struct bfd_link_info *info = (struct bfd_link_info *) data;
2997
2998   if (h->dynindx != -1)
2999     {
3000       h->dynindx = elf_hash_table (info)->dynsymcount;
3001       ++elf_hash_table (info)->dynsymcount;
3002     }
3003
3004   return true;
3005 }
3006 \f
3007 /* Final phase of ELF linker.  */
3008
3009 /* A structure we use to avoid passing large numbers of arguments.  */
3010
3011 struct elf_final_link_info
3012 {
3013   /* General link information.  */
3014   struct bfd_link_info *info;
3015   /* Output BFD.  */
3016   bfd *output_bfd;
3017   /* Symbol string table.  */
3018   struct bfd_strtab_hash *symstrtab;
3019   /* .dynsym section.  */
3020   asection *dynsym_sec;
3021   /* .hash section.  */
3022   asection *hash_sec;
3023   /* symbol version section (.gnu.version).  */
3024   asection *symver_sec;
3025   /* Buffer large enough to hold contents of any section.  */
3026   bfd_byte *contents;
3027   /* Buffer large enough to hold external relocs of any section.  */
3028   PTR external_relocs;
3029   /* Buffer large enough to hold internal relocs of any section.  */
3030   Elf_Internal_Rela *internal_relocs;
3031   /* Buffer large enough to hold external local symbols of any input
3032      BFD.  */
3033   Elf_External_Sym *external_syms;
3034   /* Buffer large enough to hold internal local symbols of any input
3035      BFD.  */
3036   Elf_Internal_Sym *internal_syms;
3037   /* Array large enough to hold a symbol index for each local symbol
3038      of any input BFD.  */
3039   long *indices;
3040   /* Array large enough to hold a section pointer for each local
3041      symbol of any input BFD.  */
3042   asection **sections;
3043   /* Buffer to hold swapped out symbols.  */
3044   Elf_External_Sym *symbuf;
3045   /* Number of swapped out symbols in buffer.  */
3046   size_t symbuf_count;
3047   /* Number of symbols which fit in symbuf.  */
3048   size_t symbuf_size;
3049 };
3050
3051 static boolean elf_link_output_sym
3052   PARAMS ((struct elf_final_link_info *, const char *,
3053            Elf_Internal_Sym *, asection *));
3054 static boolean elf_link_flush_output_syms
3055   PARAMS ((struct elf_final_link_info *));
3056 static boolean elf_link_output_extsym
3057   PARAMS ((struct elf_link_hash_entry *, PTR));
3058 static boolean elf_link_input_bfd
3059   PARAMS ((struct elf_final_link_info *, bfd *));
3060 static boolean elf_reloc_link_order
3061   PARAMS ((bfd *, struct bfd_link_info *, asection *,
3062            struct bfd_link_order *));
3063
3064 /* This struct is used to pass information to elf_link_output_extsym.  */
3065
3066 struct elf_outext_info
3067 {
3068   boolean failed;
3069   boolean localsyms;
3070   struct elf_final_link_info *finfo;
3071 };
3072
3073 /* Do the final step of an ELF link.  */
3074
3075 boolean
3076 elf_bfd_final_link (abfd, info)
3077      bfd *abfd;
3078      struct bfd_link_info *info;
3079 {
3080   boolean dynamic;
3081   bfd *dynobj;
3082   struct elf_final_link_info finfo;
3083   register asection *o;
3084   register struct bfd_link_order *p;
3085   register bfd *sub;
3086   size_t max_contents_size;
3087   size_t max_external_reloc_size;
3088   size_t max_internal_reloc_count;
3089   size_t max_sym_count;
3090   file_ptr off;
3091   Elf_Internal_Sym elfsym;
3092   unsigned int i;
3093   Elf_Internal_Shdr *symtab_hdr;
3094   Elf_Internal_Shdr *symstrtab_hdr;
3095   struct elf_backend_data *bed = get_elf_backend_data (abfd);
3096   struct elf_outext_info eoinfo;
3097
3098   if (info->shared)
3099     abfd->flags |= DYNAMIC;
3100
3101   dynamic = elf_hash_table (info)->dynamic_sections_created;
3102   dynobj = elf_hash_table (info)->dynobj;
3103
3104   finfo.info = info;
3105   finfo.output_bfd = abfd;
3106   finfo.symstrtab = elf_stringtab_init ();
3107   if (finfo.symstrtab == NULL)
3108     return false;
3109
3110   if (! dynamic)
3111     {
3112       finfo.dynsym_sec = NULL;
3113       finfo.hash_sec = NULL;
3114       finfo.symver_sec = NULL;
3115     }
3116   else
3117     {
3118       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
3119       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
3120       BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
3121       finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
3122       /* Note that it is OK if symver_sec is NULL.  */
3123     }
3124
3125   finfo.contents = NULL;
3126   finfo.external_relocs = NULL;
3127   finfo.internal_relocs = NULL;
3128   finfo.external_syms = NULL;
3129   finfo.internal_syms = NULL;
3130   finfo.indices = NULL;
3131   finfo.sections = NULL;
3132   finfo.symbuf = NULL;
3133   finfo.symbuf_count = 0;
3134
3135   /* Count up the number of relocations we will output for each output
3136      section, so that we know the sizes of the reloc sections.  We
3137      also figure out some maximum sizes.  */
3138   max_contents_size = 0;
3139   max_external_reloc_size = 0;
3140   max_internal_reloc_count = 0;
3141   max_sym_count = 0;
3142   for (o = abfd->sections; o != (asection *) NULL; o = o->next)
3143     {
3144       o->reloc_count = 0;
3145
3146       for (p = o->link_order_head; p != NULL; p = p->next)
3147         {
3148           if (p->type == bfd_section_reloc_link_order
3149               || p->type == bfd_symbol_reloc_link_order)
3150             ++o->reloc_count;
3151           else if (p->type == bfd_indirect_link_order)
3152             {
3153               asection *sec;
3154
3155               sec = p->u.indirect.section;
3156
3157               /* Mark all sections which are to be included in the
3158                  link.  This will normally be every section.  We need
3159                  to do this so that we can identify any sections which
3160                  the linker has decided to not include.  */
3161               sec->linker_mark = true;
3162
3163               if (info->relocateable)
3164                 o->reloc_count += sec->reloc_count;
3165
3166               if (sec->_raw_size > max_contents_size)
3167                 max_contents_size = sec->_raw_size;
3168               if (sec->_cooked_size > max_contents_size)
3169                 max_contents_size = sec->_cooked_size;
3170
3171               /* We are interested in just local symbols, not all
3172                  symbols.  */
3173               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
3174                   && (sec->owner->flags & DYNAMIC) == 0)
3175                 {
3176                   size_t sym_count;
3177
3178                   if (elf_bad_symtab (sec->owner))
3179                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
3180                                  / sizeof (Elf_External_Sym));
3181                   else
3182                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
3183
3184                   if (sym_count > max_sym_count)
3185                     max_sym_count = sym_count;
3186
3187                   if ((sec->flags & SEC_RELOC) != 0)
3188                     {
3189                       size_t ext_size;
3190
3191                       ext_size = elf_section_data (sec)->rel_hdr.sh_size;
3192                       if (ext_size > max_external_reloc_size)
3193                         max_external_reloc_size = ext_size;
3194                       if (sec->reloc_count > max_internal_reloc_count)
3195                         max_internal_reloc_count = sec->reloc_count;
3196                     }
3197                 }
3198             }
3199         }
3200
3201       if (o->reloc_count > 0)
3202         o->flags |= SEC_RELOC;
3203       else
3204         {
3205           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
3206              set it (this is probably a bug) and if it is set
3207              assign_section_numbers will create a reloc section.  */
3208           o->flags &=~ SEC_RELOC;
3209         }
3210
3211       /* If the SEC_ALLOC flag is not set, force the section VMA to
3212          zero.  This is done in elf_fake_sections as well, but forcing
3213          the VMA to 0 here will ensure that relocs against these
3214          sections are handled correctly.  */
3215       if ((o->flags & SEC_ALLOC) == 0
3216           && ! o->user_set_vma)
3217         o->vma = 0;
3218     }
3219
3220   /* Figure out the file positions for everything but the symbol table
3221      and the relocs.  We set symcount to force assign_section_numbers
3222      to create a symbol table.  */
3223   abfd->symcount = info->strip == strip_all ? 0 : 1;
3224   BFD_ASSERT (! abfd->output_has_begun);
3225   if (! _bfd_elf_compute_section_file_positions (abfd, info))
3226     goto error_return;
3227
3228   /* That created the reloc sections.  Set their sizes, and assign
3229      them file positions, and allocate some buffers.  */
3230   for (o = abfd->sections; o != NULL; o = o->next)
3231     {
3232       if ((o->flags & SEC_RELOC) != 0)
3233         {
3234           Elf_Internal_Shdr *rel_hdr;
3235           register struct elf_link_hash_entry **p, **pend;
3236
3237           rel_hdr = &elf_section_data (o)->rel_hdr;
3238
3239           rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
3240
3241           /* The contents field must last into write_object_contents,
3242              so we allocate it with bfd_alloc rather than malloc.  */
3243           rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
3244           if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
3245             goto error_return;
3246
3247           p = ((struct elf_link_hash_entry **)
3248                bfd_malloc (o->reloc_count
3249                            * sizeof (struct elf_link_hash_entry *)));
3250           if (p == NULL && o->reloc_count != 0)
3251             goto error_return;
3252           elf_section_data (o)->rel_hashes = p;
3253           pend = p + o->reloc_count;
3254           for (; p < pend; p++)
3255             *p = NULL;
3256
3257           /* Use the reloc_count field as an index when outputting the
3258              relocs.  */
3259           o->reloc_count = 0;
3260         }
3261     }
3262
3263   _bfd_elf_assign_file_positions_for_relocs (abfd);
3264
3265   /* We have now assigned file positions for all the sections except
3266      .symtab and .strtab.  We start the .symtab section at the current
3267      file position, and write directly to it.  We build the .strtab
3268      section in memory.  */
3269   abfd->symcount = 0;
3270   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3271   /* sh_name is set in prep_headers.  */
3272   symtab_hdr->sh_type = SHT_SYMTAB;
3273   symtab_hdr->sh_flags = 0;
3274   symtab_hdr->sh_addr = 0;
3275   symtab_hdr->sh_size = 0;
3276   symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
3277   /* sh_link is set in assign_section_numbers.  */
3278   /* sh_info is set below.  */
3279   /* sh_offset is set just below.  */
3280   symtab_hdr->sh_addralign = 4;  /* FIXME: system dependent?  */
3281
3282   off = elf_tdata (abfd)->next_file_pos;
3283   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
3284
3285   /* Note that at this point elf_tdata (abfd)->next_file_pos is
3286      incorrect.  We do not yet know the size of the .symtab section.
3287      We correct next_file_pos below, after we do know the size.  */
3288
3289   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
3290      continuously seeking to the right position in the file.  */
3291   if (! info->keep_memory || max_sym_count < 20)
3292     finfo.symbuf_size = 20;
3293   else
3294     finfo.symbuf_size = max_sym_count;
3295   finfo.symbuf = ((Elf_External_Sym *)
3296                   bfd_malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
3297   if (finfo.symbuf == NULL)
3298     goto error_return;
3299
3300   /* Start writing out the symbol table.  The first symbol is always a
3301      dummy symbol.  */
3302   if (info->strip != strip_all || info->relocateable)
3303     {
3304       elfsym.st_value = 0;
3305       elfsym.st_size = 0;
3306       elfsym.st_info = 0;
3307       elfsym.st_other = 0;
3308       elfsym.st_shndx = SHN_UNDEF;
3309       if (! elf_link_output_sym (&finfo, (const char *) NULL,
3310                                  &elfsym, bfd_und_section_ptr))
3311         goto error_return;
3312     }
3313
3314 #if 0
3315   /* Some standard ELF linkers do this, but we don't because it causes
3316      bootstrap comparison failures.  */
3317   /* Output a file symbol for the output file as the second symbol.
3318      We output this even if we are discarding local symbols, although
3319      I'm not sure if this is correct.  */
3320   elfsym.st_value = 0;
3321   elfsym.st_size = 0;
3322   elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
3323   elfsym.st_other = 0;
3324   elfsym.st_shndx = SHN_ABS;
3325   if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
3326                              &elfsym, bfd_abs_section_ptr))
3327     goto error_return;
3328 #endif
3329
3330   /* Output a symbol for each section.  We output these even if we are
3331      discarding local symbols, since they are used for relocs.  These
3332      symbols have no names.  We store the index of each one in the
3333      index field of the section, so that we can find it again when
3334      outputting relocs.  */
3335   if (info->strip != strip_all || info->relocateable)
3336     {
3337       elfsym.st_size = 0;
3338       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
3339       elfsym.st_other = 0;
3340       for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
3341         {
3342           o = section_from_elf_index (abfd, i);
3343           if (o != NULL)
3344             o->target_index = abfd->symcount;
3345           elfsym.st_shndx = i;
3346           if (info->relocateable || o == NULL)
3347             elfsym.st_value = 0;
3348           else
3349             elfsym.st_value = o->vma;
3350           if (! elf_link_output_sym (&finfo, (const char *) NULL,
3351                                      &elfsym, o))
3352             goto error_return;
3353         }
3354     }
3355
3356   /* Allocate some memory to hold information read in from the input
3357      files.  */
3358   finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
3359   finfo.external_relocs = (PTR) bfd_malloc (max_external_reloc_size);
3360   finfo.internal_relocs = ((Elf_Internal_Rela *)
3361                            bfd_malloc (max_internal_reloc_count
3362                                        * sizeof (Elf_Internal_Rela)));
3363   finfo.external_syms = ((Elf_External_Sym *)
3364                          bfd_malloc (max_sym_count
3365                                      * sizeof (Elf_External_Sym)));
3366   finfo.internal_syms = ((Elf_Internal_Sym *)
3367                          bfd_malloc (max_sym_count
3368                                      * sizeof (Elf_Internal_Sym)));
3369   finfo.indices = (long *) bfd_malloc (max_sym_count * sizeof (long));
3370   finfo.sections = ((asection **)
3371                     bfd_malloc (max_sym_count * sizeof (asection *)));
3372   if ((finfo.contents == NULL && max_contents_size != 0)
3373       || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
3374       || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
3375       || (finfo.external_syms == NULL && max_sym_count != 0)
3376       || (finfo.internal_syms == NULL && max_sym_count != 0)
3377       || (finfo.indices == NULL && max_sym_count != 0)
3378       || (finfo.sections == NULL && max_sym_count != 0))
3379     goto error_return;
3380
3381   /* Since ELF permits relocations to be against local symbols, we
3382      must have the local symbols available when we do the relocations.
3383      Since we would rather only read the local symbols once, and we
3384      would rather not keep them in memory, we handle all the
3385      relocations for a single input file at the same time.
3386
3387      Unfortunately, there is no way to know the total number of local
3388      symbols until we have seen all of them, and the local symbol
3389      indices precede the global symbol indices.  This means that when
3390      we are generating relocateable output, and we see a reloc against
3391      a global symbol, we can not know the symbol index until we have
3392      finished examining all the local symbols to see which ones we are
3393      going to output.  To deal with this, we keep the relocations in
3394      memory, and don't output them until the end of the link.  This is
3395      an unfortunate waste of memory, but I don't see a good way around
3396      it.  Fortunately, it only happens when performing a relocateable
3397      link, which is not the common case.  FIXME: If keep_memory is set
3398      we could write the relocs out and then read them again; I don't
3399      know how bad the memory loss will be.  */
3400
3401   for (sub = info->input_bfds; sub != NULL; sub = sub->next)
3402     sub->output_has_begun = false;
3403   for (o = abfd->sections; o != NULL; o = o->next)
3404     {
3405       for (p = o->link_order_head; p != NULL; p = p->next)
3406         {
3407           if (p->type == bfd_indirect_link_order
3408               && (bfd_get_flavour (p->u.indirect.section->owner)
3409                   == bfd_target_elf_flavour))
3410             {
3411               sub = p->u.indirect.section->owner;
3412               if (! sub->output_has_begun)
3413                 {
3414                   if (! elf_link_input_bfd (&finfo, sub))
3415                     goto error_return;
3416                   sub->output_has_begun = true;
3417                 }
3418             }
3419           else if (p->type == bfd_section_reloc_link_order
3420                    || p->type == bfd_symbol_reloc_link_order)
3421             {
3422               if (! elf_reloc_link_order (abfd, info, o, p))
3423                 goto error_return;
3424             }
3425           else
3426             {
3427               if (! _bfd_default_link_order (abfd, info, o, p))
3428                 goto error_return;
3429             }
3430         }
3431     }
3432
3433   /* That wrote out all the local symbols.  Finish up the symbol table
3434      with the global symbols.  */
3435
3436   if (info->strip != strip_all && info->shared)
3437     {
3438       /* Output any global symbols that got converted to local in a
3439          version script.  We do this in a separate step since ELF
3440          requires all local symbols to appear prior to any global
3441          symbols.  FIXME: We should only do this if some global
3442          symbols were, in fact, converted to become local.  FIXME:
3443          Will this work correctly with the Irix 5 linker?  */
3444       eoinfo.failed = false;
3445       eoinfo.finfo = &finfo;
3446       eoinfo.localsyms = true;
3447       elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
3448                               (PTR) &eoinfo);
3449       if (eoinfo.failed)
3450         return false;
3451     }
3452
3453   /* The sh_info field records the index of the first non local
3454      symbol.  */
3455   symtab_hdr->sh_info = abfd->symcount;
3456   if (dynamic)
3457     elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
3458
3459   /* We get the global symbols from the hash table.  */
3460   eoinfo.failed = false;
3461   eoinfo.localsyms = false;
3462   eoinfo.finfo = &finfo;
3463   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
3464                           (PTR) &eoinfo);
3465   if (eoinfo.failed)
3466     return false;
3467
3468   /* Flush all symbols to the file.  */
3469   if (! elf_link_flush_output_syms (&finfo))
3470     return false;
3471
3472   /* Now we know the size of the symtab section.  */
3473   off += symtab_hdr->sh_size;
3474
3475   /* Finish up and write out the symbol string table (.strtab)
3476      section.  */
3477   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
3478   /* sh_name was set in prep_headers.  */
3479   symstrtab_hdr->sh_type = SHT_STRTAB;
3480   symstrtab_hdr->sh_flags = 0;
3481   symstrtab_hdr->sh_addr = 0;
3482   symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
3483   symstrtab_hdr->sh_entsize = 0;
3484   symstrtab_hdr->sh_link = 0;
3485   symstrtab_hdr->sh_info = 0;
3486   /* sh_offset is set just below.  */
3487   symstrtab_hdr->sh_addralign = 1;
3488
3489   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true);
3490   elf_tdata (abfd)->next_file_pos = off;
3491
3492   if (abfd->symcount > 0)
3493     {
3494       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
3495           || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
3496         return false;
3497     }
3498
3499   /* Adjust the relocs to have the correct symbol indices.  */
3500   for (o = abfd->sections; o != NULL; o = o->next)
3501     {
3502       struct elf_link_hash_entry **rel_hash;
3503       Elf_Internal_Shdr *rel_hdr;
3504
3505       if ((o->flags & SEC_RELOC) == 0)
3506         continue;
3507
3508       rel_hash = elf_section_data (o)->rel_hashes;
3509       rel_hdr = &elf_section_data (o)->rel_hdr;
3510       for (i = 0; i < o->reloc_count; i++, rel_hash++)
3511         {
3512           if (*rel_hash == NULL)
3513             continue;
3514
3515           BFD_ASSERT ((*rel_hash)->indx >= 0);
3516
3517           if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
3518             {
3519               Elf_External_Rel *erel;
3520               Elf_Internal_Rel irel;
3521
3522               erel = (Elf_External_Rel *) rel_hdr->contents + i;
3523               elf_swap_reloc_in (abfd, erel, &irel);
3524               irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
3525                                         ELF_R_TYPE (irel.r_info));
3526               elf_swap_reloc_out (abfd, &irel, erel);
3527             }
3528           else
3529             {
3530               Elf_External_Rela *erela;
3531               Elf_Internal_Rela irela;
3532
3533               BFD_ASSERT (rel_hdr->sh_entsize
3534                           == sizeof (Elf_External_Rela));
3535
3536               erela = (Elf_External_Rela *) rel_hdr->contents + i;
3537               elf_swap_reloca_in (abfd, erela, &irela);
3538               irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
3539                                          ELF_R_TYPE (irela.r_info));
3540               elf_swap_reloca_out (abfd, &irela, erela);
3541             }
3542         }
3543
3544       /* Set the reloc_count field to 0 to prevent write_relocs from
3545          trying to swap the relocs out itself.  */
3546       o->reloc_count = 0;
3547     }
3548
3549   /* If we are linking against a dynamic object, or generating a
3550      shared library, finish up the dynamic linking information.  */
3551   if (dynamic)
3552     {
3553       Elf_External_Dyn *dyncon, *dynconend;
3554
3555       /* Fix up .dynamic entries.  */
3556       o = bfd_get_section_by_name (dynobj, ".dynamic");
3557       BFD_ASSERT (o != NULL);
3558
3559       dyncon = (Elf_External_Dyn *) o->contents;
3560       dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
3561       for (; dyncon < dynconend; dyncon++)
3562         {
3563           Elf_Internal_Dyn dyn;
3564           const char *name;
3565           unsigned int type;
3566
3567           elf_swap_dyn_in (dynobj, dyncon, &dyn);
3568
3569           switch (dyn.d_tag)
3570             {
3571             default:
3572               break;
3573
3574               /* SVR4 linkers seem to set DT_INIT and DT_FINI based on
3575                  magic _init and _fini symbols.  This is pretty ugly,
3576                  but we are compatible.  */
3577             case DT_INIT:
3578               name = "_init";
3579               goto get_sym;
3580             case DT_FINI:
3581               name = "_fini";
3582             get_sym:
3583               {
3584                 struct elf_link_hash_entry *h;
3585
3586                 h = elf_link_hash_lookup (elf_hash_table (info), name,
3587                                           false, false, true);
3588                 if (h != NULL
3589                     && (h->root.type == bfd_link_hash_defined
3590                         || h->root.type == bfd_link_hash_defweak))
3591                   {
3592                     dyn.d_un.d_val = h->root.u.def.value;
3593                     o = h->root.u.def.section;
3594                     if (o->output_section != NULL)
3595                       dyn.d_un.d_val += (o->output_section->vma
3596                                          + o->output_offset);
3597                     else
3598                       {
3599                         /* The symbol is imported from another shared
3600                            library and does not apply to this one.  */
3601                         dyn.d_un.d_val = 0;
3602                       }
3603
3604                     elf_swap_dyn_out (dynobj, &dyn, dyncon);
3605                   }
3606               }
3607               break;
3608
3609             case DT_HASH:
3610               name = ".hash";
3611               goto get_vma;
3612             case DT_STRTAB:
3613               name = ".dynstr";
3614               goto get_vma;
3615             case DT_SYMTAB:
3616               name = ".dynsym";
3617               goto get_vma;
3618             case DT_VERDEF:
3619               name = ".gnu.version_d";
3620               goto get_vma;
3621             case DT_VERNEED:
3622               name = ".gnu.version_r";
3623               goto get_vma;
3624             case DT_VERSYM:
3625               name = ".gnu.version";
3626             get_vma:
3627               o = bfd_get_section_by_name (abfd, name);
3628               BFD_ASSERT (o != NULL);
3629               dyn.d_un.d_ptr = o->vma;
3630               elf_swap_dyn_out (dynobj, &dyn, dyncon);
3631               break;
3632
3633             case DT_REL:
3634             case DT_RELA:
3635             case DT_RELSZ:
3636             case DT_RELASZ:
3637               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
3638                 type = SHT_REL;
3639               else
3640                 type = SHT_RELA;
3641               dyn.d_un.d_val = 0;
3642               for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
3643                 {
3644                   Elf_Internal_Shdr *hdr;
3645
3646                   hdr = elf_elfsections (abfd)[i];
3647                   if (hdr->sh_type == type
3648                       && (hdr->sh_flags & SHF_ALLOC) != 0)
3649                     {
3650                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
3651                         dyn.d_un.d_val += hdr->sh_size;
3652                       else
3653                         {
3654                           if (dyn.d_un.d_val == 0
3655                               || hdr->sh_addr < dyn.d_un.d_val)
3656                             dyn.d_un.d_val = hdr->sh_addr;
3657                         }
3658                     }
3659                 }
3660               elf_swap_dyn_out (dynobj, &dyn, dyncon);
3661               break;
3662             }
3663         }
3664     }
3665
3666   /* If we have created any dynamic sections, then output them.  */
3667   if (dynobj != NULL)
3668     {
3669       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
3670         goto error_return;
3671
3672       for (o = dynobj->sections; o != NULL; o = o->next)
3673         {
3674           if ((o->flags & SEC_HAS_CONTENTS) == 0
3675               || o->_raw_size == 0)
3676             continue;
3677           if ((o->flags & SEC_LINKER_CREATED) == 0)
3678             {
3679               /* At this point, we are only interested in sections
3680                  created by elf_link_create_dynamic_sections.  */
3681               continue;
3682             }
3683           if ((elf_section_data (o->output_section)->this_hdr.sh_type
3684                != SHT_STRTAB)
3685               || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
3686             {
3687               if (! bfd_set_section_contents (abfd, o->output_section,
3688                                               o->contents, o->output_offset,
3689                                               o->_raw_size))
3690                 goto error_return;
3691             }
3692           else
3693             {
3694               file_ptr off;
3695
3696               /* The contents of the .dynstr section are actually in a
3697                  stringtab.  */
3698               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
3699               if (bfd_seek (abfd, off, SEEK_SET) != 0
3700                   || ! _bfd_stringtab_emit (abfd,
3701                                             elf_hash_table (info)->dynstr))
3702                 goto error_return;
3703             }
3704         }
3705     }
3706
3707   /* If we have optimized stabs strings, output them.  */
3708   if (elf_hash_table (info)->stab_info != NULL)
3709     {
3710       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
3711         goto error_return;
3712     }
3713
3714   if (finfo.symstrtab != NULL)
3715     _bfd_stringtab_free (finfo.symstrtab);
3716   if (finfo.contents != NULL)
3717     free (finfo.contents);
3718   if (finfo.external_relocs != NULL)
3719     free (finfo.external_relocs);
3720   if (finfo.internal_relocs != NULL)
3721     free (finfo.internal_relocs);
3722   if (finfo.external_syms != NULL)
3723     free (finfo.external_syms);
3724   if (finfo.internal_syms != NULL)
3725     free (finfo.internal_syms);
3726   if (finfo.indices != NULL)
3727     free (finfo.indices);
3728   if (finfo.sections != NULL)
3729     free (finfo.sections);
3730   if (finfo.symbuf != NULL)
3731     free (finfo.symbuf);
3732   for (o = abfd->sections; o != NULL; o = o->next)
3733     {
3734       if ((o->flags & SEC_RELOC) != 0
3735           && elf_section_data (o)->rel_hashes != NULL)
3736         free (elf_section_data (o)->rel_hashes);
3737     }
3738
3739   elf_tdata (abfd)->linker = true;
3740
3741   return true;
3742
3743  error_return:
3744   if (finfo.symstrtab != NULL)
3745     _bfd_stringtab_free (finfo.symstrtab);
3746   if (finfo.contents != NULL)
3747     free (finfo.contents);
3748   if (finfo.external_relocs != NULL)
3749     free (finfo.external_relocs);
3750   if (finfo.internal_relocs != NULL)
3751     free (finfo.internal_relocs);
3752   if (finfo.external_syms != NULL)
3753     free (finfo.external_syms);
3754   if (finfo.internal_syms != NULL)
3755     free (finfo.internal_syms);
3756   if (finfo.indices != NULL)
3757     free (finfo.indices);
3758   if (finfo.sections != NULL)
3759     free (finfo.sections);
3760   if (finfo.symbuf != NULL)
3761     free (finfo.symbuf);
3762   for (o = abfd->sections; o != NULL; o = o->next)
3763     {
3764       if ((o->flags & SEC_RELOC) != 0
3765           && elf_section_data (o)->rel_hashes != NULL)
3766         free (elf_section_data (o)->rel_hashes);
3767     }
3768
3769   return false;
3770 }
3771
3772 /* Add a symbol to the output symbol table.  */
3773
3774 static boolean
3775 elf_link_output_sym (finfo, name, elfsym, input_sec)
3776      struct elf_final_link_info *finfo;
3777      const char *name;
3778      Elf_Internal_Sym *elfsym;
3779      asection *input_sec;
3780 {
3781   boolean (*output_symbol_hook) PARAMS ((bfd *,
3782                                          struct bfd_link_info *info,
3783                                          const char *,
3784                                          Elf_Internal_Sym *,
3785                                          asection *));
3786
3787   output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
3788     elf_backend_link_output_symbol_hook;
3789   if (output_symbol_hook != NULL)
3790     {
3791       if (! ((*output_symbol_hook)
3792              (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
3793         return false;
3794     }
3795
3796   if (name == (const char *) NULL || *name == '\0')
3797     elfsym->st_name = 0;
3798   else
3799     {
3800       elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
3801                                                             name, true,
3802                                                             false);
3803       if (elfsym->st_name == (unsigned long) -1)
3804         return false;
3805     }
3806
3807   if (finfo->symbuf_count >= finfo->symbuf_size)
3808     {
3809       if (! elf_link_flush_output_syms (finfo))
3810         return false;
3811     }
3812
3813   elf_swap_symbol_out (finfo->output_bfd, elfsym,
3814                        (PTR) (finfo->symbuf + finfo->symbuf_count));
3815   ++finfo->symbuf_count;
3816
3817   ++finfo->output_bfd->symcount;
3818
3819   return true;
3820 }
3821
3822 /* Flush the output symbols to the file.  */
3823
3824 static boolean
3825 elf_link_flush_output_syms (finfo)
3826      struct elf_final_link_info *finfo;
3827 {
3828   if (finfo->symbuf_count > 0)
3829     {
3830       Elf_Internal_Shdr *symtab;
3831
3832       symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
3833
3834       if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
3835                     SEEK_SET) != 0
3836           || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
3837                          sizeof (Elf_External_Sym), finfo->output_bfd)
3838               != finfo->symbuf_count * sizeof (Elf_External_Sym)))
3839         return false;
3840
3841       symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
3842
3843       finfo->symbuf_count = 0;
3844     }
3845
3846   return true;
3847 }
3848
3849 /* Add an external symbol to the symbol table.  This is called from
3850    the hash table traversal routine.  When generating a shared object,
3851    we go through the symbol table twice.  The first time we output
3852    anything that might have been forced to local scope in a version
3853    script.  The second time we output the symbols that are still
3854    global symbols.  */
3855
3856 static boolean
3857 elf_link_output_extsym (h, data)
3858      struct elf_link_hash_entry *h;
3859      PTR data;
3860 {
3861   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
3862   struct elf_final_link_info *finfo = eoinfo->finfo;
3863   boolean strip;
3864   Elf_Internal_Sym sym;
3865   asection *input_sec;
3866
3867   /* Decide whether to output this symbol in this pass.  */
3868   if (eoinfo->localsyms)
3869     {
3870       if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
3871         return true;
3872     }
3873   else
3874     {
3875       if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
3876         return true;
3877     }
3878
3879   /* If we are not creating a shared library, and this symbol is
3880      referenced by a shared library but is not defined anywhere, then
3881      warn that it is undefined.  If we do not do this, the runtime
3882      linker will complain that the symbol is undefined when the
3883      program is run.  We don't have to worry about symbols that are
3884      referenced by regular files, because we will already have issued
3885      warnings for them.  */
3886   if (! finfo->info->relocateable
3887       && ! finfo->info->shared
3888       && h->root.type == bfd_link_hash_undefined
3889       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
3890       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
3891     {
3892       if (! ((*finfo->info->callbacks->undefined_symbol)
3893              (finfo->info, h->root.root.string, h->root.u.undef.abfd,
3894               (asection *) NULL, 0)))
3895         {
3896           eoinfo->failed = true;
3897           return false;
3898         }
3899     }
3900
3901   /* We don't want to output symbols that have never been mentioned by
3902      a regular file, or that we have been told to strip.  However, if
3903      h->indx is set to -2, the symbol is used by a reloc and we must
3904      output it.  */
3905   if (h->indx == -2)
3906     strip = false;
3907   else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
3908             || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
3909            && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
3910            && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
3911     strip = true;
3912   else if (finfo->info->strip == strip_all
3913            || (finfo->info->strip == strip_some
3914                && bfd_hash_lookup (finfo->info->keep_hash,
3915                                    h->root.root.string,
3916                                    false, false) == NULL))
3917     strip = true;
3918   else
3919     strip = false;
3920
3921   /* If we're stripping it, and it's not a dynamic symbol, there's
3922      nothing else to do.  */
3923   if (strip && h->dynindx == -1)
3924     return true;
3925
3926   sym.st_value = 0;
3927   sym.st_size = h->size;
3928   sym.st_other = h->other;
3929   if ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
3930     sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
3931   else if (h->root.type == bfd_link_hash_undefweak
3932            || h->root.type == bfd_link_hash_defweak)
3933     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
3934   else
3935     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
3936
3937   switch (h->root.type)
3938     {
3939     default:
3940     case bfd_link_hash_new:
3941       abort ();
3942       return false;
3943
3944     case bfd_link_hash_undefined:
3945       input_sec = bfd_und_section_ptr;
3946       sym.st_shndx = SHN_UNDEF;
3947       break;
3948
3949     case bfd_link_hash_undefweak:
3950       input_sec = bfd_und_section_ptr;
3951       sym.st_shndx = SHN_UNDEF;
3952       break;
3953
3954     case bfd_link_hash_defined:
3955     case bfd_link_hash_defweak:
3956       {
3957         input_sec = h->root.u.def.section;
3958         if (input_sec->output_section != NULL)
3959           {
3960             sym.st_shndx =
3961               _bfd_elf_section_from_bfd_section (finfo->output_bfd,
3962                                                  input_sec->output_section);
3963             if (sym.st_shndx == (unsigned short) -1)
3964               {
3965                 eoinfo->failed = true;
3966                 return false;
3967               }
3968
3969             /* ELF symbols in relocateable files are section relative,
3970                but in nonrelocateable files they are virtual
3971                addresses.  */
3972             sym.st_value = h->root.u.def.value + input_sec->output_offset;
3973             if (! finfo->info->relocateable)
3974               sym.st_value += input_sec->output_section->vma;
3975           }
3976         else
3977           {
3978             BFD_ASSERT (input_sec->owner == NULL
3979                         || (input_sec->owner->flags & DYNAMIC) != 0);
3980             sym.st_shndx = SHN_UNDEF;
3981             input_sec = bfd_und_section_ptr;
3982           }
3983       }
3984       break;
3985
3986     case bfd_link_hash_common:
3987       input_sec = bfd_com_section_ptr;
3988       sym.st_shndx = SHN_COMMON;
3989       sym.st_value = 1 << h->root.u.c.p->alignment_power;
3990       break;
3991
3992     case bfd_link_hash_indirect:
3993       /* These symbols are created by symbol versioning.  They point
3994          to the decorated version of the name.  For example, if the
3995          symbol foo@@GNU_1.2 is the default, which should be used when
3996          foo is used with no version, then we add an indirect symbol
3997          foo which points to foo@@GNU_1.2.  We ignore these symbols,
3998          since the indirected symbol is already in the hash table.  If
3999          the indirect symbol is non-ELF, fall through and output it.  */
4000       if ((h->elf_link_hash_flags & ELF_LINK_NON_ELF) == 0)
4001         return true;
4002
4003       /* Fall through.  */
4004     case bfd_link_hash_warning:
4005       /* We can't represent these symbols in ELF, although a warning
4006          symbol may have come from a .gnu.warning.SYMBOL section.  We
4007          just put the target symbol in the hash table.  If the target
4008          symbol does not really exist, don't do anything.  */
4009       if (h->root.u.i.link->type == bfd_link_hash_new)
4010         return true;
4011       return (elf_link_output_extsym
4012               ((struct elf_link_hash_entry *) h->root.u.i.link, data));
4013     }
4014
4015   /* If this symbol should be put in the .dynsym section, then put it
4016      there now.  We have already know the symbol index.  We also fill
4017      in the entry in the .hash section.  */
4018   if (h->dynindx != -1
4019       && elf_hash_table (finfo->info)->dynamic_sections_created)
4020     {
4021       struct elf_backend_data *bed;
4022       char *p, *copy;
4023       const char *name;
4024       size_t bucketcount;
4025       size_t bucket;
4026       bfd_byte *bucketpos;
4027       bfd_vma chain;
4028
4029       sym.st_name = h->dynstr_index;
4030
4031       /* Give the processor backend a chance to tweak the symbol
4032          value, and also to finish up anything that needs to be done
4033          for this symbol.  */
4034       bed = get_elf_backend_data (finfo->output_bfd);
4035       if (! ((*bed->elf_backend_finish_dynamic_symbol)
4036              (finfo->output_bfd, finfo->info, h, &sym)))
4037         {
4038           eoinfo->failed = true;
4039           return false;
4040         }
4041
4042       elf_swap_symbol_out (finfo->output_bfd, &sym,
4043                            (PTR) (((Elf_External_Sym *)
4044                                    finfo->dynsym_sec->contents)
4045                                   + h->dynindx));
4046
4047       /* We didn't include the version string in the dynamic string
4048          table, so we must not consider it in the hash table.  */
4049       name = h->root.root.string;
4050       p = strchr (name, ELF_VER_CHR);
4051       if (p == NULL)
4052         copy = NULL;
4053       else
4054         {
4055           copy = bfd_alloc (finfo->output_bfd, p - name + 1);
4056           strncpy (copy, name, p - name);
4057           copy[p - name] = '\0';
4058           name = copy;
4059         }
4060
4061       bucketcount = elf_hash_table (finfo->info)->bucketcount;
4062       bucket = bfd_elf_hash ((const unsigned char *) name) % bucketcount;
4063       bucketpos = ((bfd_byte *) finfo->hash_sec->contents
4064                    + (bucket + 2) * (ARCH_SIZE / 8));
4065       chain = get_word (finfo->output_bfd, bucketpos);
4066       put_word (finfo->output_bfd, h->dynindx, bucketpos);
4067       put_word (finfo->output_bfd, chain,
4068                 ((bfd_byte *) finfo->hash_sec->contents
4069                  + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
4070
4071       if (copy != NULL)
4072         bfd_release (finfo->output_bfd, copy);
4073
4074       if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
4075         {
4076           Elf_Internal_Versym iversym;
4077
4078           if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
4079             {
4080               if (h->verinfo.verdef == NULL)
4081                 iversym.vs_vers = 0;
4082               else
4083                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
4084             }
4085           else
4086             {
4087               if (h->verinfo.vertree == NULL)
4088                 iversym.vs_vers = 1;
4089               else
4090                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
4091             }
4092
4093           if ((h->elf_link_hash_flags & ELF_LINK_HIDDEN) != 0)
4094             iversym.vs_vers |= VERSYM_HIDDEN;
4095
4096           _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym,
4097                                     (((Elf_External_Versym *)
4098                                       finfo->symver_sec->contents)
4099                                      + h->dynindx));
4100         }
4101     }
4102
4103   /* If we're stripping it, then it was just a dynamic symbol, and
4104      there's nothing else to do.  */
4105   if (strip)
4106     return true;
4107
4108   h->indx = finfo->output_bfd->symcount;
4109
4110   if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
4111     {
4112       eoinfo->failed = true;
4113       return false;
4114     }
4115
4116   return true;
4117 }
4118
4119 /* Link an input file into the linker output file.  This function
4120    handles all the sections and relocations of the input file at once.
4121    This is so that we only have to read the local symbols once, and
4122    don't have to keep them in memory.  */
4123
4124 static boolean
4125 elf_link_input_bfd (finfo, input_bfd)
4126      struct elf_final_link_info *finfo;
4127      bfd *input_bfd;
4128 {
4129   boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
4130                                        bfd *, asection *, bfd_byte *,
4131                                        Elf_Internal_Rela *,
4132                                        Elf_Internal_Sym *, asection **));
4133   bfd *output_bfd;
4134   Elf_Internal_Shdr *symtab_hdr;
4135   size_t locsymcount;
4136   size_t extsymoff;
4137   Elf_External_Sym *external_syms;
4138   Elf_External_Sym *esym;
4139   Elf_External_Sym *esymend;
4140   Elf_Internal_Sym *isym;
4141   long *pindex;
4142   asection **ppsection;
4143   asection *o;
4144
4145   output_bfd = finfo->output_bfd;
4146   relocate_section =
4147     get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
4148
4149   /* If this is a dynamic object, we don't want to do anything here:
4150      we don't want the local symbols, and we don't want the section
4151      contents.  */
4152   if ((input_bfd->flags & DYNAMIC) != 0)
4153     return true;
4154
4155   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4156   if (elf_bad_symtab (input_bfd))
4157     {
4158       locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
4159       extsymoff = 0;
4160     }
4161   else
4162     {
4163       locsymcount = symtab_hdr->sh_info;
4164       extsymoff = symtab_hdr->sh_info;
4165     }
4166
4167   /* Read the local symbols.  */
4168   if (symtab_hdr->contents != NULL)
4169     external_syms = (Elf_External_Sym *) symtab_hdr->contents;
4170   else if (locsymcount == 0)
4171     external_syms = NULL;
4172   else
4173     {
4174       external_syms = finfo->external_syms;
4175       if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
4176           || (bfd_read (external_syms, sizeof (Elf_External_Sym),
4177                         locsymcount, input_bfd)
4178               != locsymcount * sizeof (Elf_External_Sym)))
4179         return false;
4180     }
4181
4182   /* Swap in the local symbols and write out the ones which we know
4183      are going into the output file.  */
4184   esym = external_syms;
4185   esymend = esym + locsymcount;
4186   isym = finfo->internal_syms;
4187   pindex = finfo->indices;
4188   ppsection = finfo->sections;
4189   for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
4190     {
4191       asection *isec;
4192       const char *name;
4193       Elf_Internal_Sym osym;
4194
4195       elf_swap_symbol_in (input_bfd, esym, isym);
4196       *pindex = -1;
4197
4198       if (elf_bad_symtab (input_bfd))
4199         {
4200           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
4201             {
4202               *ppsection = NULL;
4203               continue;
4204             }
4205         }
4206
4207       if (isym->st_shndx == SHN_UNDEF)
4208         isec = bfd_und_section_ptr;
4209       else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
4210         isec = section_from_elf_index (input_bfd, isym->st_shndx);
4211       else if (isym->st_shndx == SHN_ABS)
4212         isec = bfd_abs_section_ptr;
4213       else if (isym->st_shndx == SHN_COMMON)
4214         isec = bfd_com_section_ptr;
4215       else
4216         {
4217           /* Who knows?  */
4218           isec = NULL;
4219         }
4220
4221       *ppsection = isec;
4222
4223       /* Don't output the first, undefined, symbol.  */
4224       if (esym == external_syms)
4225         continue;
4226
4227       /* If we are stripping all symbols, we don't want to output this
4228          one.  */
4229       if (finfo->info->strip == strip_all)
4230         continue;
4231
4232       /* We never output section symbols.  Instead, we use the section
4233          symbol of the corresponding section in the output file.  */
4234       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4235         continue;
4236
4237       /* If we are discarding all local symbols, we don't want to
4238          output this one.  If we are generating a relocateable output
4239          file, then some of the local symbols may be required by
4240          relocs; we output them below as we discover that they are
4241          needed.  */
4242       if (finfo->info->discard == discard_all)
4243         continue;
4244
4245       /* If this symbol is defined in a section which we are
4246          discarding, we don't need to keep it, but note that
4247          linker_mark is only reliable for sections that have contents.
4248          For the benefit of the MIPS ELF linker, we check SEC_EXCLUDE
4249          as well as linker_mark.  */
4250       if (isym->st_shndx > 0
4251           && isym->st_shndx < SHN_LORESERVE
4252           && isec != NULL
4253           && ((! isec->linker_mark && (isec->flags & SEC_HAS_CONTENTS) != 0)
4254               || (! finfo->info->relocateable
4255                   && (isec->flags & SEC_EXCLUDE) != 0)))
4256         continue;
4257
4258       /* Get the name of the symbol.  */
4259       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
4260                                               isym->st_name);
4261       if (name == NULL)
4262         return false;
4263
4264       /* See if we are discarding symbols with this name.  */
4265       if ((finfo->info->strip == strip_some
4266            && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
4267                == NULL))
4268           || (finfo->info->discard == discard_l
4269               && bfd_is_local_label_name (input_bfd, name)))
4270         continue;
4271
4272       /* If we get here, we are going to output this symbol.  */
4273
4274       osym = *isym;
4275
4276       /* Adjust the section index for the output file.  */
4277       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
4278                                                          isec->output_section);
4279       if (osym.st_shndx == (unsigned short) -1)
4280         return false;
4281
4282       *pindex = output_bfd->symcount;
4283
4284       /* ELF symbols in relocateable files are section relative, but
4285          in executable files they are virtual addresses.  Note that
4286          this code assumes that all ELF sections have an associated
4287          BFD section with a reasonable value for output_offset; below
4288          we assume that they also have a reasonable value for
4289          output_section.  Any special sections must be set up to meet
4290          these requirements.  */
4291       osym.st_value += isec->output_offset;
4292       if (! finfo->info->relocateable)
4293         osym.st_value += isec->output_section->vma;
4294
4295       if (! elf_link_output_sym (finfo, name, &osym, isec))
4296         return false;
4297     }
4298
4299   /* Relocate the contents of each section.  */
4300   for (o = input_bfd->sections; o != NULL; o = o->next)
4301     {
4302       bfd_byte *contents;
4303
4304       if (! o->linker_mark)
4305         {
4306           /* This section was omitted from the link.  */
4307           continue;
4308         }
4309
4310       if ((o->flags & SEC_HAS_CONTENTS) == 0
4311           || (o->_raw_size == 0 && (o->flags & SEC_RELOC) == 0))
4312         continue;
4313
4314       if ((o->flags & SEC_LINKER_CREATED) != 0)
4315         {
4316           /* Section was created by elf_link_create_dynamic_sections
4317              or somesuch.  */
4318           continue;
4319         }
4320
4321       /* Get the contents of the section.  They have been cached by a
4322          relaxation routine.  Note that o is a section in an input
4323          file, so the contents field will not have been set by any of
4324          the routines which work on output files.  */
4325       if (elf_section_data (o)->this_hdr.contents != NULL)
4326         contents = elf_section_data (o)->this_hdr.contents;
4327       else
4328         {
4329           contents = finfo->contents;
4330           if (! bfd_get_section_contents (input_bfd, o, contents,
4331                                           (file_ptr) 0, o->_raw_size))
4332             return false;
4333         }
4334
4335       if ((o->flags & SEC_RELOC) != 0)
4336         {
4337           Elf_Internal_Rela *internal_relocs;
4338
4339           /* Get the swapped relocs.  */
4340           internal_relocs = (NAME(_bfd_elf,link_read_relocs)
4341                              (input_bfd, o, finfo->external_relocs,
4342                               finfo->internal_relocs, false));
4343           if (internal_relocs == NULL
4344               && o->reloc_count > 0)
4345             return false;
4346
4347           /* Relocate the section by invoking a back end routine.
4348
4349              The back end routine is responsible for adjusting the
4350              section contents as necessary, and (if using Rela relocs
4351              and generating a relocateable output file) adjusting the
4352              reloc addend as necessary.
4353
4354              The back end routine does not have to worry about setting
4355              the reloc address or the reloc symbol index.
4356
4357              The back end routine is given a pointer to the swapped in
4358              internal symbols, and can access the hash table entries
4359              for the external symbols via elf_sym_hashes (input_bfd).
4360
4361              When generating relocateable output, the back end routine
4362              must handle STB_LOCAL/STT_SECTION symbols specially.  The
4363              output symbol is going to be a section symbol
4364              corresponding to the output section, which will require
4365              the addend to be adjusted.  */
4366
4367           if (! (*relocate_section) (output_bfd, finfo->info,
4368                                      input_bfd, o, contents,
4369                                      internal_relocs,
4370                                      finfo->internal_syms,
4371                                      finfo->sections))
4372             return false;
4373
4374           if (finfo->info->relocateable)
4375             {
4376               Elf_Internal_Rela *irela;
4377               Elf_Internal_Rela *irelaend;
4378               struct elf_link_hash_entry **rel_hash;
4379               Elf_Internal_Shdr *input_rel_hdr;
4380               Elf_Internal_Shdr *output_rel_hdr;
4381
4382               /* Adjust the reloc addresses and symbol indices.  */
4383
4384               irela = internal_relocs;
4385               irelaend = irela + o->reloc_count;
4386               rel_hash = (elf_section_data (o->output_section)->rel_hashes
4387                           + o->output_section->reloc_count);
4388               for (; irela < irelaend; irela++, rel_hash++)
4389                 {
4390                   unsigned long r_symndx;
4391                   Elf_Internal_Sym *isym;
4392                   asection *sec;
4393
4394                   irela->r_offset += o->output_offset;
4395
4396                   r_symndx = ELF_R_SYM (irela->r_info);
4397
4398                   if (r_symndx == 0)
4399                     continue;
4400
4401                   if (r_symndx >= locsymcount
4402                       || (elf_bad_symtab (input_bfd)
4403                           && finfo->sections[r_symndx] == NULL))
4404                     {
4405                       long indx;
4406
4407                       /* This is a reloc against a global symbol.  We
4408                          have not yet output all the local symbols, so
4409                          we do not know the symbol index of any global
4410                          symbol.  We set the rel_hash entry for this
4411                          reloc to point to the global hash table entry
4412                          for this symbol.  The symbol index is then
4413                          set at the end of elf_bfd_final_link.  */
4414                       indx = r_symndx - extsymoff;
4415                       *rel_hash = elf_sym_hashes (input_bfd)[indx];
4416
4417                       /* Setting the index to -2 tells
4418                          elf_link_output_extsym that this symbol is
4419                          used by a reloc.  */
4420                       BFD_ASSERT ((*rel_hash)->indx < 0);
4421                       (*rel_hash)->indx = -2;
4422
4423                       continue;
4424                     }
4425
4426                   /* This is a reloc against a local symbol. */
4427
4428                   *rel_hash = NULL;
4429                   isym = finfo->internal_syms + r_symndx;
4430                   sec = finfo->sections[r_symndx];
4431                   if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4432                     {
4433                       /* I suppose the backend ought to fill in the
4434                          section of any STT_SECTION symbol against a
4435                          processor specific section.  If we have
4436                          discarded a section, the output_section will
4437                          be the absolute section.  */
4438                       if (sec != NULL
4439                           && (bfd_is_abs_section (sec)
4440                               || (sec->output_section != NULL
4441                                   && bfd_is_abs_section (sec->output_section))))
4442                         r_symndx = 0;
4443                       else if (sec == NULL || sec->owner == NULL)
4444                         {
4445                           bfd_set_error (bfd_error_bad_value);
4446                           return false;
4447                         }
4448                       else
4449                         {
4450                           r_symndx = sec->output_section->target_index;
4451                           BFD_ASSERT (r_symndx != 0);
4452                         }
4453                     }
4454                   else
4455                     {
4456                       if (finfo->indices[r_symndx] == -1)
4457                         {
4458                           unsigned long link;
4459                           const char *name;
4460                           asection *osec;
4461
4462                           if (finfo->info->strip == strip_all)
4463                             {
4464                               /* You can't do ld -r -s.  */
4465                               bfd_set_error (bfd_error_invalid_operation);
4466                               return false;
4467                             }
4468
4469                           /* This symbol was skipped earlier, but
4470                              since it is needed by a reloc, we
4471                              must output it now.  */
4472                           link = symtab_hdr->sh_link;
4473                           name = bfd_elf_string_from_elf_section (input_bfd,
4474                                                                   link,
4475                                                                   isym->st_name);
4476                           if (name == NULL)
4477                             return false;
4478
4479                           osec = sec->output_section;
4480                           isym->st_shndx =
4481                             _bfd_elf_section_from_bfd_section (output_bfd,
4482                                                                osec);
4483                           if (isym->st_shndx == (unsigned short) -1)
4484                             return false;
4485
4486                           isym->st_value += sec->output_offset;
4487                           if (! finfo->info->relocateable)
4488                             isym->st_value += osec->vma;
4489
4490                           finfo->indices[r_symndx] = output_bfd->symcount;
4491
4492                           if (! elf_link_output_sym (finfo, name, isym, sec))
4493                             return false;
4494                         }
4495
4496                       r_symndx = finfo->indices[r_symndx];
4497                     }
4498
4499                   irela->r_info = ELF_R_INFO (r_symndx,
4500                                               ELF_R_TYPE (irela->r_info));
4501                 }
4502
4503               /* Swap out the relocs.  */
4504               input_rel_hdr = &elf_section_data (o)->rel_hdr;
4505               output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
4506               BFD_ASSERT (output_rel_hdr->sh_entsize
4507                           == input_rel_hdr->sh_entsize);
4508               irela = internal_relocs;
4509               irelaend = irela + o->reloc_count;
4510               if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
4511                 {
4512                   Elf_External_Rel *erel;
4513
4514                   erel = ((Elf_External_Rel *) output_rel_hdr->contents
4515                           + o->output_section->reloc_count);
4516                   for (; irela < irelaend; irela++, erel++)
4517                     {
4518                       Elf_Internal_Rel irel;
4519
4520                       irel.r_offset = irela->r_offset;
4521                       irel.r_info = irela->r_info;
4522                       BFD_ASSERT (irela->r_addend == 0);
4523                       elf_swap_reloc_out (output_bfd, &irel, erel);
4524                     }
4525                 }
4526               else
4527                 {
4528                   Elf_External_Rela *erela;
4529
4530                   BFD_ASSERT (input_rel_hdr->sh_entsize
4531                               == sizeof (Elf_External_Rela));
4532                   erela = ((Elf_External_Rela *) output_rel_hdr->contents
4533                            + o->output_section->reloc_count);
4534                   for (; irela < irelaend; irela++, erela++)
4535                     elf_swap_reloca_out (output_bfd, irela, erela);
4536                 }
4537
4538               o->output_section->reloc_count += o->reloc_count;
4539             }
4540         }
4541
4542       /* Write out the modified section contents.  */
4543       if (elf_section_data (o)->stab_info == NULL)
4544         {
4545           if (! bfd_set_section_contents (output_bfd, o->output_section,
4546                                           contents, o->output_offset,
4547                                           (o->_cooked_size != 0
4548                                            ? o->_cooked_size
4549                                            : o->_raw_size)))
4550             return false;
4551         }
4552       else
4553         {
4554           if (! (_bfd_write_section_stabs
4555                  (output_bfd, &elf_hash_table (finfo->info)->stab_info,
4556                   o, &elf_section_data (o)->stab_info, contents)))
4557             return false;
4558         }
4559     }
4560
4561   return true;
4562 }
4563
4564 /* Generate a reloc when linking an ELF file.  This is a reloc
4565    requested by the linker, and does come from any input file.  This
4566    is used to build constructor and destructor tables when linking
4567    with -Ur.  */
4568
4569 static boolean
4570 elf_reloc_link_order (output_bfd, info, output_section, link_order)
4571      bfd *output_bfd;
4572      struct bfd_link_info *info;
4573      asection *output_section;
4574      struct bfd_link_order *link_order;
4575 {
4576   reloc_howto_type *howto;
4577   long indx;
4578   bfd_vma offset;
4579   bfd_vma addend;
4580   struct elf_link_hash_entry **rel_hash_ptr;
4581   Elf_Internal_Shdr *rel_hdr;
4582
4583   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
4584   if (howto == NULL)
4585     {
4586       bfd_set_error (bfd_error_bad_value);
4587       return false;
4588     }
4589
4590   addend = link_order->u.reloc.p->addend;
4591
4592   /* Figure out the symbol index.  */
4593   rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
4594                   + output_section->reloc_count);
4595   if (link_order->type == bfd_section_reloc_link_order)
4596     {
4597       indx = link_order->u.reloc.p->u.section->target_index;
4598       BFD_ASSERT (indx != 0);
4599       *rel_hash_ptr = NULL;
4600     }
4601   else
4602     {
4603       struct elf_link_hash_entry *h;
4604
4605       /* Treat a reloc against a defined symbol as though it were
4606          actually against the section.  */
4607       h = ((struct elf_link_hash_entry *)
4608            bfd_wrapped_link_hash_lookup (output_bfd, info,
4609                                          link_order->u.reloc.p->u.name,
4610                                          false, false, true));
4611       if (h != NULL
4612           && (h->root.type == bfd_link_hash_defined
4613               || h->root.type == bfd_link_hash_defweak))
4614         {
4615           asection *section;
4616
4617           section = h->root.u.def.section;
4618           indx = section->output_section->target_index;
4619           *rel_hash_ptr = NULL;
4620           /* It seems that we ought to add the symbol value to the
4621              addend here, but in practice it has already been added
4622              because it was passed to constructor_callback.  */
4623           addend += section->output_section->vma + section->output_offset;
4624         }
4625       else if (h != NULL)
4626         {
4627           /* Setting the index to -2 tells elf_link_output_extsym that
4628              this symbol is used by a reloc.  */
4629           h->indx = -2;
4630           *rel_hash_ptr = h;
4631           indx = 0;
4632         }
4633       else
4634         {
4635           if (! ((*info->callbacks->unattached_reloc)
4636                  (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
4637                   (asection *) NULL, (bfd_vma) 0)))
4638             return false;
4639           indx = 0;
4640         }
4641     }
4642
4643   /* If this is an inplace reloc, we must write the addend into the
4644      object file.  */
4645   if (howto->partial_inplace && addend != 0)
4646     {
4647       bfd_size_type size;
4648       bfd_reloc_status_type rstat;
4649       bfd_byte *buf;
4650       boolean ok;
4651
4652       size = bfd_get_reloc_size (howto);
4653       buf = (bfd_byte *) bfd_zmalloc (size);
4654       if (buf == (bfd_byte *) NULL)
4655         return false;
4656       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
4657       switch (rstat)
4658         {
4659         case bfd_reloc_ok:
4660           break;
4661         default:
4662         case bfd_reloc_outofrange:
4663           abort ();
4664         case bfd_reloc_overflow:
4665           if (! ((*info->callbacks->reloc_overflow)
4666                  (info,
4667                   (link_order->type == bfd_section_reloc_link_order
4668                    ? bfd_section_name (output_bfd,
4669                                        link_order->u.reloc.p->u.section)
4670                    : link_order->u.reloc.p->u.name),
4671                   howto->name, addend, (bfd *) NULL, (asection *) NULL,
4672                   (bfd_vma) 0)))
4673             {
4674               free (buf);
4675               return false;
4676             }
4677           break;
4678         }
4679       ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
4680                                      (file_ptr) link_order->offset, size);
4681       free (buf);
4682       if (! ok)
4683         return false;
4684     }
4685
4686   /* The address of a reloc is relative to the section in a
4687      relocateable file, and is a virtual address in an executable
4688      file.  */
4689   offset = link_order->offset;
4690   if (! info->relocateable)
4691     offset += output_section->vma;
4692
4693   rel_hdr = &elf_section_data (output_section)->rel_hdr;
4694
4695   if (rel_hdr->sh_type == SHT_REL)
4696     {
4697       Elf_Internal_Rel irel;
4698       Elf_External_Rel *erel;
4699
4700       irel.r_offset = offset;
4701       irel.r_info = ELF_R_INFO (indx, howto->type);
4702       erel = ((Elf_External_Rel *) rel_hdr->contents
4703               + output_section->reloc_count);
4704       elf_swap_reloc_out (output_bfd, &irel, erel);
4705     }
4706   else
4707     {
4708       Elf_Internal_Rela irela;
4709       Elf_External_Rela *erela;
4710
4711       irela.r_offset = offset;
4712       irela.r_info = ELF_R_INFO (indx, howto->type);
4713       irela.r_addend = addend;
4714       erela = ((Elf_External_Rela *) rel_hdr->contents
4715                + output_section->reloc_count);
4716       elf_swap_reloca_out (output_bfd, &irela, erela);
4717     }
4718
4719   ++output_section->reloc_count;
4720
4721   return true;
4722 }
4723
4724 \f
4725 /* Allocate a pointer to live in a linker created section.  */
4726
4727 boolean
4728 elf_create_pointer_linker_section (abfd, info, lsect, h, rel)
4729      bfd *abfd;
4730      struct bfd_link_info *info;
4731      elf_linker_section_t *lsect;
4732      struct elf_link_hash_entry *h;
4733      const Elf_Internal_Rela *rel;
4734 {
4735   elf_linker_section_pointers_t **ptr_linker_section_ptr = NULL;
4736   elf_linker_section_pointers_t *linker_section_ptr;
4737   unsigned long r_symndx = ELF_R_SYM (rel->r_info);;
4738
4739   BFD_ASSERT (lsect != NULL);
4740
4741   /* Is this a global symbol? */
4742   if (h != NULL)
4743     {
4744       /* Has this symbol already been allocated, if so, our work is done */
4745       if (_bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
4746                                                 rel->r_addend,
4747                                                 lsect->which))
4748         return true;
4749
4750       ptr_linker_section_ptr = &h->linker_section_pointer;
4751       /* Make sure this symbol is output as a dynamic symbol.  */
4752       if (h->dynindx == -1)
4753         {
4754           if (! elf_link_record_dynamic_symbol (info, h))
4755             return false;
4756         }
4757
4758       if (lsect->rel_section)
4759         lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
4760     }
4761
4762   else  /* Allocation of a pointer to a local symbol */
4763     {
4764       elf_linker_section_pointers_t **ptr = elf_local_ptr_offsets (abfd);
4765
4766       /* Allocate a table to hold the local symbols if first time */
4767       if (!ptr)
4768         {
4769           int num_symbols = elf_tdata (abfd)->symtab_hdr.sh_info;
4770           register unsigned int i;
4771
4772           ptr = (elf_linker_section_pointers_t **)
4773             bfd_alloc (abfd, num_symbols * sizeof (elf_linker_section_pointers_t *));
4774
4775           if (!ptr)
4776             return false;
4777
4778           elf_local_ptr_offsets (abfd) = ptr;
4779           for (i = 0; i < num_symbols; i++)
4780             ptr[i] = (elf_linker_section_pointers_t *)0;
4781         }
4782
4783       /* Has this symbol already been allocated, if so, our work is done */
4784       if (_bfd_elf_find_pointer_linker_section (ptr[r_symndx],
4785                                                 rel->r_addend,
4786                                                 lsect->which))
4787         return true;
4788
4789       ptr_linker_section_ptr = &ptr[r_symndx];
4790
4791       if (info->shared)
4792         {
4793           /* If we are generating a shared object, we need to
4794              output a R_<xxx>_RELATIVE reloc so that the
4795              dynamic linker can adjust this GOT entry.  */
4796           BFD_ASSERT (lsect->rel_section != NULL);
4797           lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
4798         }
4799     }
4800
4801   /* Allocate space for a pointer in the linker section, and allocate a new pointer record
4802      from internal memory.  */
4803   BFD_ASSERT (ptr_linker_section_ptr != NULL);
4804   linker_section_ptr = (elf_linker_section_pointers_t *)
4805     bfd_alloc (abfd, sizeof (elf_linker_section_pointers_t));
4806
4807   if (!linker_section_ptr)
4808     return false;
4809
4810   linker_section_ptr->next = *ptr_linker_section_ptr;
4811   linker_section_ptr->addend = rel->r_addend;
4812   linker_section_ptr->which = lsect->which;
4813   linker_section_ptr->written_address_p = false;
4814   *ptr_linker_section_ptr = linker_section_ptr;
4815
4816 #if 0
4817   if (lsect->hole_size && lsect->hole_offset < lsect->max_hole_offset)
4818     {
4819       linker_section_ptr->offset = lsect->section->_raw_size - lsect->hole_size + (ARCH_SIZE / 8);
4820       lsect->hole_offset += ARCH_SIZE / 8;
4821       lsect->sym_offset  += ARCH_SIZE / 8;
4822       if (lsect->sym_hash)      /* Bump up symbol value if needed */
4823         {
4824           lsect->sym_hash->root.u.def.value += ARCH_SIZE / 8;
4825 #ifdef DEBUG
4826           fprintf (stderr, "Bump up %s by %ld, current value = %ld\n",
4827                    lsect->sym_hash->root.root.string,
4828                    (long)ARCH_SIZE / 8,
4829                    (long)lsect->sym_hash->root.u.def.value);
4830 #endif
4831         }
4832     }
4833   else
4834 #endif
4835     linker_section_ptr->offset = lsect->section->_raw_size;
4836
4837   lsect->section->_raw_size += ARCH_SIZE / 8;
4838
4839 #ifdef DEBUG
4840   fprintf (stderr, "Create pointer in linker section %s, offset = %ld, section size = %ld\n",
4841            lsect->name, (long)linker_section_ptr->offset, (long)lsect->section->_raw_size);
4842 #endif
4843
4844   return true;
4845 }
4846
4847 \f
4848 #if ARCH_SIZE==64
4849 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_64 (BFD, VAL, ADDR)
4850 #endif
4851 #if ARCH_SIZE==32
4852 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_32 (BFD, VAL, ADDR)
4853 #endif
4854
4855 /* Fill in the address for a pointer generated in alinker section.  */
4856
4857 bfd_vma
4858 elf_finish_pointer_linker_section (output_bfd, input_bfd, info, lsect, h, relocation, rel, relative_reloc)
4859      bfd *output_bfd;
4860      bfd *input_bfd;
4861      struct bfd_link_info *info;
4862      elf_linker_section_t *lsect;
4863      struct elf_link_hash_entry *h;
4864      bfd_vma relocation;
4865      const Elf_Internal_Rela *rel;
4866      int relative_reloc;
4867 {
4868   elf_linker_section_pointers_t *linker_section_ptr;
4869
4870   BFD_ASSERT (lsect != NULL);
4871
4872   if (h != NULL)                /* global symbol */
4873     {
4874       linker_section_ptr = _bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
4875                                                                  rel->r_addend,
4876                                                                  lsect->which);
4877
4878       BFD_ASSERT (linker_section_ptr != NULL);
4879
4880       if (! elf_hash_table (info)->dynamic_sections_created
4881           || (info->shared
4882               && info->symbolic
4883               && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
4884         {
4885           /* This is actually a static link, or it is a
4886              -Bsymbolic link and the symbol is defined
4887              locally.  We must initialize this entry in the
4888              global section.
4889
4890              When doing a dynamic link, we create a .rela.<xxx>
4891              relocation entry to initialize the value.  This
4892              is done in the finish_dynamic_symbol routine.  */
4893           if (!linker_section_ptr->written_address_p)
4894             {
4895               linker_section_ptr->written_address_p = true;
4896               bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend,
4897                           lsect->section->contents + linker_section_ptr->offset);
4898             }
4899         }
4900     }
4901   else                          /* local symbol */
4902     {
4903       unsigned long r_symndx = ELF_R_SYM (rel->r_info);
4904       BFD_ASSERT (elf_local_ptr_offsets (input_bfd) != NULL);
4905       BFD_ASSERT (elf_local_ptr_offsets (input_bfd)[r_symndx] != NULL);
4906       linker_section_ptr = _bfd_elf_find_pointer_linker_section (elf_local_ptr_offsets (input_bfd)[r_symndx],
4907                                                                  rel->r_addend,
4908                                                                  lsect->which);
4909
4910       BFD_ASSERT (linker_section_ptr != NULL);
4911
4912       /* Write out pointer if it hasn't been rewritten out before */
4913       if (!linker_section_ptr->written_address_p)
4914         {
4915           linker_section_ptr->written_address_p = true;
4916           bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend,
4917                        lsect->section->contents + linker_section_ptr->offset);
4918
4919           if (info->shared)
4920             {
4921               asection *srel = lsect->rel_section;
4922               Elf_Internal_Rela outrel;
4923
4924               /* We need to generate a relative reloc for the dynamic linker.  */
4925               if (!srel)
4926                 lsect->rel_section = srel = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
4927                                                                      lsect->rel_name);
4928
4929               BFD_ASSERT (srel != NULL);
4930
4931               outrel.r_offset = (lsect->section->output_section->vma
4932                                  + lsect->section->output_offset
4933                                  + linker_section_ptr->offset);
4934               outrel.r_info = ELF_R_INFO (0, relative_reloc);
4935               outrel.r_addend = 0;
4936               elf_swap_reloca_out (output_bfd, &outrel,
4937                                    (((Elf_External_Rela *)
4938                                      lsect->section->contents)
4939                                     + lsect->section->reloc_count));
4940               ++lsect->section->reloc_count;
4941             }
4942         }
4943     }
4944
4945   relocation = (lsect->section->output_offset
4946                 + linker_section_ptr->offset
4947                 - lsect->hole_offset
4948                 - lsect->sym_offset);
4949
4950 #ifdef DEBUG
4951   fprintf (stderr, "Finish pointer in linker section %s, offset = %ld (0x%lx)\n",
4952            lsect->name, (long)relocation, (long)relocation);
4953 #endif
4954
4955   /* Subtract out the addend, because it will get added back in by the normal
4956      processing.  */
4957   return relocation - linker_section_ptr->addend;
4958 }