* elflink.h (elf_link_output_extsym): Just ignore warning and
[external/binutils.git] / bfd / elflink.h
1 /* ELF linker support.
2    Copyright 1995 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 Elf_Internal_Rela *elf_link_read_relocs
27   PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
28 static boolean elf_export_symbol
29   PARAMS ((struct elf_link_hash_entry *, PTR));
30 static boolean elf_adjust_dynamic_symbol
31   PARAMS ((struct elf_link_hash_entry *, PTR));
32
33 /* This struct is used to pass information to routines called via
34    elf_link_hash_traverse which must return failure.  */
35
36 struct elf_info_failed
37 {
38   boolean failed;
39   struct bfd_link_info *info;
40 };  
41
42 /* Given an ELF BFD, add symbols to the global hash table as
43    appropriate.  */
44
45 boolean
46 elf_bfd_link_add_symbols (abfd, info)
47      bfd *abfd;
48      struct bfd_link_info *info;
49 {
50   switch (bfd_get_format (abfd))
51     {
52     case bfd_object:
53       return elf_link_add_object_symbols (abfd, info);
54     case bfd_archive:
55       return elf_link_add_archive_symbols (abfd, info);
56     default:
57       bfd_set_error (bfd_error_wrong_format);
58       return false;
59     }
60 }
61
62 /* Add symbols from an ELF archive file to the linker hash table.  We
63    don't use _bfd_generic_link_add_archive_symbols because of a
64    problem which arises on UnixWare.  The UnixWare libc.so is an
65    archive which includes an entry libc.so.1 which defines a bunch of
66    symbols.  The libc.so archive also includes a number of other
67    object files, which also define symbols, some of which are the same
68    as those defined in libc.so.1.  Correct linking requires that we
69    consider each object file in turn, and include it if it defines any
70    symbols we need.  _bfd_generic_link_add_archive_symbols does not do
71    this; it looks through the list of undefined symbols, and includes
72    any object file which defines them.  When this algorithm is used on
73    UnixWare, it winds up pulling in libc.so.1 early and defining a
74    bunch of symbols.  This means that some of the other objects in the
75    archive are not included in the link, which is incorrect since they
76    precede libc.so.1 in the archive.
77
78    Fortunately, ELF archive handling is simpler than that done by
79    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
80    oddities.  In ELF, if we find a symbol in the archive map, and the
81    symbol is currently undefined, we know that we must pull in that
82    object file.
83
84    Unfortunately, we do have to make multiple passes over the symbol
85    table until nothing further is resolved.  */
86
87 static boolean
88 elf_link_add_archive_symbols (abfd, info)
89      bfd *abfd;
90      struct bfd_link_info *info;
91 {
92   symindex c;
93   boolean *defined = NULL;
94   boolean *included = NULL;
95   carsym *symdefs;
96   boolean loop;
97
98   if (! bfd_has_map (abfd))
99     {
100       /* An empty archive is a special case.  */
101       if (bfd_openr_next_archived_file (abfd, (bfd *) NULL) == NULL)
102         return true;
103       bfd_set_error (bfd_error_no_armap);
104       return false;
105     }
106
107   /* Keep track of all symbols we know to be already defined, and all
108      files we know to be already included.  This is to speed up the
109      second and subsequent passes.  */
110   c = bfd_ardata (abfd)->symdef_count;
111   if (c == 0)
112     return true;
113   defined = (boolean *) bfd_malloc (c * sizeof (boolean));
114   included = (boolean *) bfd_malloc (c * sizeof (boolean));
115   if (defined == (boolean *) NULL || included == (boolean *) NULL)
116     goto error_return;
117   memset (defined, 0, c * sizeof (boolean));
118   memset (included, 0, c * sizeof (boolean));
119
120   symdefs = bfd_ardata (abfd)->symdefs;
121
122   do
123     {
124       file_ptr last;
125       symindex i;
126       carsym *symdef;
127       carsym *symdefend;
128
129       loop = false;
130       last = -1;
131
132       symdef = symdefs;
133       symdefend = symdef + c;
134       for (i = 0; symdef < symdefend; symdef++, i++)
135         {
136           struct elf_link_hash_entry *h;
137           bfd *element;
138           struct bfd_link_hash_entry *undefs_tail;
139           symindex mark;
140
141           if (defined[i] || included[i])
142             continue;
143           if (symdef->file_offset == last)
144             {
145               included[i] = true;
146               continue;
147             }
148
149           h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
150                                     false, false, false);
151           if (h == (struct elf_link_hash_entry *) NULL)
152             continue;
153           if (h->root.type != bfd_link_hash_undefined)
154             {
155               if (h->root.type != bfd_link_hash_undefweak)
156                 defined[i] = true;
157               continue;
158             }
159
160           /* We need to include this archive member.  */
161
162           element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
163           if (element == (bfd *) NULL)
164             goto error_return;
165
166           if (! bfd_check_format (element, bfd_object))
167             goto error_return;
168
169           /* Doublecheck that we have not included this object
170              already--it should be impossible, but there may be
171              something wrong with the archive.  */
172           if (element->archive_pass != 0)
173             {
174               bfd_set_error (bfd_error_bad_value);
175               goto error_return;
176             }
177           element->archive_pass = 1;
178
179           undefs_tail = info->hash->undefs_tail;
180
181           if (! (*info->callbacks->add_archive_element) (info, element,
182                                                          symdef->name))
183             goto error_return;
184           if (! elf_link_add_object_symbols (element, info))
185             goto error_return;
186
187           /* If there are any new undefined symbols, we need to make
188              another pass through the archive in order to see whether
189              they can be defined.  FIXME: This isn't perfect, because
190              common symbols wind up on undefs_tail and because an
191              undefined symbol which is defined later on in this pass
192              does not require another pass.  This isn't a bug, but it
193              does make the code less efficient than it could be.  */
194           if (undefs_tail != info->hash->undefs_tail)
195             loop = true;
196
197           /* Look backward to mark all symbols from this object file
198              which we have already seen in this pass.  */
199           mark = i;
200           do
201             {
202               included[mark] = true;
203               if (mark == 0)
204                 break;
205               --mark;
206             }
207           while (symdefs[mark].file_offset == symdef->file_offset);
208
209           /* We mark subsequent symbols from this object file as we go
210              on through the loop.  */
211           last = symdef->file_offset;
212         }
213     }
214   while (loop);
215
216   free (defined);
217   free (included);
218
219   return true;
220
221  error_return:
222   if (defined != (boolean *) NULL)
223     free (defined);
224   if (included != (boolean *) NULL)
225     free (included);
226   return false;
227 }
228
229 /* Add symbols from an ELF object file to the linker hash table.  */
230
231 static boolean
232 elf_link_add_object_symbols (abfd, info)
233      bfd *abfd;
234      struct bfd_link_info *info;
235 {
236   boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *,
237                                       const Elf_Internal_Sym *,
238                                       const char **, flagword *,
239                                       asection **, bfd_vma *));
240   boolean (*check_relocs) PARAMS ((bfd *, struct bfd_link_info *,
241                                    asection *, const Elf_Internal_Rela *));
242   boolean collect;
243   Elf_Internal_Shdr *hdr;
244   size_t symcount;
245   size_t extsymcount;
246   size_t extsymoff;
247   Elf_External_Sym *buf = NULL;
248   struct elf_link_hash_entry **sym_hash;
249   boolean dynamic;
250   Elf_External_Dyn *dynbuf = NULL;
251   struct elf_link_hash_entry *weaks;
252   Elf_External_Sym *esym;
253   Elf_External_Sym *esymend;
254
255   add_symbol_hook = get_elf_backend_data (abfd)->elf_add_symbol_hook;
256   collect = get_elf_backend_data (abfd)->collect;
257
258   /* As a GNU extension, any input sections which are named
259      .gnu.warning.SYMBOL are treated as warning symbols for the given
260      symbol.  This differs from .gnu.warning sections, which generate
261      warnings when they are included in an output file.  */
262   if (! info->shared)
263     {
264       asection *s;
265
266       for (s = abfd->sections; s != NULL; s = s->next)
267         {
268           const char *name;
269
270           name = bfd_get_section_name (abfd, s);
271           if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
272             {
273               char *msg;
274               bfd_size_type sz;
275
276               sz = bfd_section_size (abfd, s);
277               msg = (char *) bfd_alloc (abfd, sz);
278               if (msg == NULL)
279                 goto error_return;
280
281               if (! bfd_get_section_contents (abfd, s, msg, (file_ptr) 0, sz))
282                 goto error_return;
283
284               if (! (_bfd_generic_link_add_one_symbol
285                      (info, abfd, 
286                       name + sizeof ".gnu.warning." - 1,
287                       BSF_WARNING, s, (bfd_vma) 0, msg, false, collect,
288                       (struct bfd_link_hash_entry **) NULL)))
289                 goto error_return;
290
291               if (! info->relocateable)
292                 {
293                   /* Clobber the section size so that the warning does
294                      not get copied into the output file.  */
295                   s->_raw_size = 0;
296                 }
297             }
298         }
299     }
300
301   /* A stripped shared library might only have a dynamic symbol table,
302      not a regular symbol table.  In that case we can still go ahead
303      and link using the dynamic symbol table.  */
304   if (elf_onesymtab (abfd) == 0
305       && elf_dynsymtab (abfd) != 0)
306     {
307       elf_onesymtab (abfd) = elf_dynsymtab (abfd);
308       elf_tdata (abfd)->symtab_hdr = elf_tdata (abfd)->dynsymtab_hdr;
309     }
310
311   hdr = &elf_tdata (abfd)->symtab_hdr;
312   symcount = hdr->sh_size / sizeof (Elf_External_Sym);
313
314   /* The sh_info field of the symtab header tells us where the
315      external symbols start.  We don't care about the local symbols at
316      this point.  */
317   if (elf_bad_symtab (abfd))
318     {
319       extsymcount = symcount;
320       extsymoff = 0;
321     }
322   else
323     {
324       extsymcount = symcount - hdr->sh_info;
325       extsymoff = hdr->sh_info;
326     }
327
328   buf = ((Elf_External_Sym *)
329          bfd_malloc (extsymcount * sizeof (Elf_External_Sym)));
330   if (buf == NULL && extsymcount != 0)
331     goto error_return;
332
333   /* We store a pointer to the hash table entry for each external
334      symbol.  */
335   sym_hash = ((struct elf_link_hash_entry **)
336               bfd_alloc (abfd,
337                          extsymcount * sizeof (struct elf_link_hash_entry *)));
338   if (sym_hash == NULL)
339     goto error_return;
340   elf_sym_hashes (abfd) = sym_hash;
341
342   if (elf_elfheader (abfd)->e_type != ET_DYN)
343     {
344       dynamic = false;
345
346       /* If we are creating a shared library, create all the dynamic
347          sections immediately.  We need to attach them to something,
348          so we attach them to this BFD, provided it is the right
349          format.  FIXME: If there are no input BFD's of the same
350          format as the output, we can't make a shared library.  */
351       if (info->shared
352           && ! elf_hash_table (info)->dynamic_sections_created
353           && abfd->xvec == info->hash->creator)
354         {
355           if (! elf_link_create_dynamic_sections (abfd, info))
356             goto error_return;
357         }
358     }
359   else
360     {
361       asection *s;
362       boolean add_needed;
363       const char *name;
364       bfd_size_type oldsize;
365       bfd_size_type strindex;
366
367       dynamic = true;
368
369       /* You can't use -r against a dynamic object.  Also, there's no
370          hope of using a dynamic object which does not exactly match
371          the format of the output file.  */
372       if (info->relocateable
373           || info->hash->creator != abfd->xvec)
374         {
375           bfd_set_error (bfd_error_invalid_operation);
376           goto error_return;
377         }
378
379       /* Find the name to use in a DT_NEEDED entry that refers to this
380          object.  If the object has a DT_SONAME entry, we use it.
381          Otherwise, if the generic linker stuck something in
382          elf_dt_needed_name, we use that.  Otherwise, we just use the
383          file name.  If the generic linker put a null string into
384          elf_dt_needed_name, we don't make a DT_NEEDED entry at all,
385          even if there is a DT_SONAME entry.  */
386       add_needed = true;
387       name = bfd_get_filename (abfd);
388       if (elf_dt_needed_name (abfd) != NULL)
389         {
390           name = elf_dt_needed_name (abfd);
391           if (*name == '\0')
392             add_needed = false;
393         }
394       s = bfd_get_section_by_name (abfd, ".dynamic");
395       if (s != NULL)
396         {
397           Elf_External_Dyn *extdyn;
398           Elf_External_Dyn *extdynend;
399           int elfsec;
400           unsigned long link;
401
402           dynbuf = (Elf_External_Dyn *) bfd_malloc ((size_t) s->_raw_size);
403           if (dynbuf == NULL)
404             goto error_return;
405
406           if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
407                                           (file_ptr) 0, s->_raw_size))
408             goto error_return;
409
410           elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
411           if (elfsec == -1)
412             goto error_return;
413           link = elf_elfsections (abfd)[elfsec]->sh_link;
414
415           extdyn = dynbuf;
416           extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
417           for (; extdyn < extdynend; extdyn++)
418             {
419               Elf_Internal_Dyn dyn;
420
421               elf_swap_dyn_in (abfd, extdyn, &dyn);
422               if (add_needed && dyn.d_tag == DT_SONAME)
423                 {
424                   name = bfd_elf_string_from_elf_section (abfd, link,
425                                                           dyn.d_un.d_val);
426                   if (name == NULL)
427                     goto error_return;
428                 }
429               if (dyn.d_tag == DT_NEEDED)
430                 {
431                   struct bfd_link_needed_list *n, **pn;
432                   char *fnm, *anm;
433
434                   n = ((struct bfd_link_needed_list *)
435                        bfd_alloc (abfd, sizeof (struct bfd_link_needed_list)));
436                   fnm = bfd_elf_string_from_elf_section (abfd, link,
437                                                          dyn.d_un.d_val);
438                   if (n == NULL || fnm == NULL)
439                     goto error_return;
440                   anm = bfd_alloc (abfd, strlen (fnm) + 1);
441                   if (anm == NULL)
442                     goto error_return;
443                   strcpy (anm, fnm);
444                   n->name = anm;
445                   n->by = abfd;
446                   n->next = NULL;
447                   for (pn = &elf_hash_table (info)->needed;
448                        *pn != NULL;
449                        pn = &(*pn)->next)
450                     ;
451                   *pn = n;
452                 }
453             }
454
455           free (dynbuf);
456           dynbuf = NULL;
457         }
458
459       /* We do not want to include any of the sections in a dynamic
460          object in the output file.  We hack by simply clobbering the
461          list of sections in the BFD.  This could be handled more
462          cleanly by, say, a new section flag; the existing
463          SEC_NEVER_LOAD flag is not the one we want, because that one
464          still implies that the section takes up space in the output
465          file.  */
466       abfd->sections = NULL;
467
468       /* If this is the first dynamic object found in the link, create
469          the special sections required for dynamic linking.  */
470       if (! elf_hash_table (info)->dynamic_sections_created)
471         {
472           if (! elf_link_create_dynamic_sections (abfd, info))
473             goto error_return;
474         }
475
476       if (add_needed)
477         {
478           /* Add a DT_NEEDED entry for this dynamic object.  */
479           oldsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
480           strindex = _bfd_stringtab_add (elf_hash_table (info)->dynstr, name,
481                                          true, false);
482           if (strindex == (bfd_size_type) -1)
483             goto error_return;
484
485           if (oldsize == _bfd_stringtab_size (elf_hash_table (info)->dynstr))
486             {
487               asection *sdyn;
488               Elf_External_Dyn *dyncon, *dynconend;
489
490               /* The hash table size did not change, which means that
491                  the dynamic object name was already entered.  If we
492                  have already included this dynamic object in the
493                  link, just ignore it.  There is no reason to include
494                  a particular dynamic object more than once.  */
495               sdyn = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
496                                               ".dynamic");
497               BFD_ASSERT (sdyn != NULL);
498
499               dyncon = (Elf_External_Dyn *) sdyn->contents;
500               dynconend = (Elf_External_Dyn *) (sdyn->contents +
501                                                 sdyn->_raw_size);
502               for (; dyncon < dynconend; dyncon++)
503                 {
504                   Elf_Internal_Dyn dyn;
505
506                   elf_swap_dyn_in (elf_hash_table (info)->dynobj, dyncon,
507                                    &dyn);
508                   if (dyn.d_tag == DT_NEEDED
509                       && dyn.d_un.d_val == strindex)
510                     {
511                       if (buf != NULL)
512                         free (buf);
513                       return true;
514                     }
515                 }
516             }
517
518           if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
519             goto error_return;
520         }
521     }
522
523   if (bfd_seek (abfd,
524                 hdr->sh_offset + extsymoff * sizeof (Elf_External_Sym),
525                 SEEK_SET) != 0
526       || (bfd_read ((PTR) buf, sizeof (Elf_External_Sym), extsymcount, abfd)
527           != extsymcount * sizeof (Elf_External_Sym)))
528     goto error_return;
529
530   weaks = NULL;
531
532   esymend = buf + extsymcount;
533   for (esym = buf; esym < esymend; esym++, sym_hash++)
534     {
535       Elf_Internal_Sym sym;
536       int bind;
537       bfd_vma value;
538       asection *sec;
539       flagword flags;
540       const char *name;
541       struct elf_link_hash_entry *h;
542       boolean definition;
543       boolean size_change_ok, type_change_ok;
544       boolean new_weakdef;
545
546       elf_swap_symbol_in (abfd, esym, &sym);
547
548       flags = BSF_NO_FLAGS;
549       sec = NULL;
550       value = sym.st_value;
551       *sym_hash = NULL;
552
553       bind = ELF_ST_BIND (sym.st_info);
554       if (bind == STB_LOCAL)
555         {
556           /* This should be impossible, since ELF requires that all
557              global symbols follow all local symbols, and that sh_info
558              point to the first global symbol.  Unfortunatealy, Irix 5
559              screws this up.  */
560           continue;
561         }
562       else if (bind == STB_GLOBAL)
563         {
564           if (sym.st_shndx != SHN_UNDEF
565               && sym.st_shndx != SHN_COMMON)
566             flags = BSF_GLOBAL;
567           else
568             flags = 0;
569         }
570       else if (bind == STB_WEAK)
571         flags = BSF_WEAK;
572       else
573         {
574           /* Leave it up to the processor backend.  */
575         }
576
577       if (sym.st_shndx == SHN_UNDEF)
578         sec = bfd_und_section_ptr;
579       else if (sym.st_shndx > 0 && sym.st_shndx < SHN_LORESERVE)
580         {
581           sec = section_from_elf_index (abfd, sym.st_shndx);
582           if (sec != NULL)
583             value -= sec->vma;
584           else
585             sec = bfd_abs_section_ptr;
586         }
587       else if (sym.st_shndx == SHN_ABS)
588         sec = bfd_abs_section_ptr;
589       else if (sym.st_shndx == SHN_COMMON)
590         {
591           sec = bfd_com_section_ptr;
592           /* What ELF calls the size we call the value.  What ELF
593              calls the value we call the alignment.  */
594           value = sym.st_size;
595         }
596       else
597         {
598           /* Leave it up to the processor backend.  */
599         }
600
601       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
602       if (name == (const char *) NULL)
603         goto error_return;
604
605       if (add_symbol_hook)
606         {
607           if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
608                                     &value))
609             goto error_return;
610
611           /* The hook function sets the name to NULL if this symbol
612              should be skipped for some reason.  */
613           if (name == (const char *) NULL)
614             continue;
615         }
616
617       /* Sanity check that all possibilities were handled.  */
618       if (sec == (asection *) NULL)
619         {
620           bfd_set_error (bfd_error_bad_value);
621           goto error_return;
622         }
623
624       if (bfd_is_und_section (sec)
625           || bfd_is_com_section (sec))
626         definition = false;
627       else
628         definition = true;
629
630       size_change_ok = false;
631       type_change_ok = false;
632       if (info->hash->creator->flavour == bfd_target_elf_flavour)
633         {
634           /* We need to look up the symbol now in order to get some of
635              the dynamic object handling right.  We pass the hash
636              table entry in to _bfd_generic_link_add_one_symbol so
637              that it does not have to look it up again.  */
638           h = elf_link_hash_lookup (elf_hash_table (info), name,
639                                     true, false, false);
640           if (h == NULL)
641             goto error_return;
642           *sym_hash = h;
643
644           while (h->root.type == bfd_link_hash_indirect
645                  || h->root.type == bfd_link_hash_warning)
646             h = (struct elf_link_hash_entry *) h->root.u.i.link;
647
648           /* It's OK to change the type if it used to be a weak
649              definition.  */
650           type_change_ok = (h->root.type == bfd_link_hash_defweak
651                             || h->root.type == bfd_link_hash_undefweak);
652
653           /* It's OK to change the size if it used to be a weak
654              definition, or if it used to be undefined, or if we will
655              be overriding an old definition.
656              */
657           size_change_ok = (type_change_ok
658                             || h->root.type == bfd_link_hash_undefined);
659
660           /* If we are looking at a dynamic object, and this is a
661              definition, we need to see if it has already been defined
662              by some other object.  If it has, we want to use the
663              existing definition, and we do not want to report a
664              multiple symbol definition error; we do this by
665              clobbering sec to be bfd_und_section_ptr.  */
666           if (dynamic && definition)
667             {
668               if (h->root.type == bfd_link_hash_defined
669                   || h->root.type == bfd_link_hash_defweak
670                   || (h->root.type == bfd_link_hash_common
671                       && bind == STB_WEAK))
672                 {
673                   sec = bfd_und_section_ptr;
674                   definition = false;
675                   size_change_ok = true;
676                 }
677             }
678
679           /* Similarly, if we are not looking at a dynamic object, and
680              we have a definition, we want to override any definition
681              we may have from a dynamic object.  Symbols from regular
682              files always take precedence over symbols from dynamic
683              objects, even if they are defined after the dynamic
684              object in the link.  */
685           if (! dynamic
686               && definition
687               && (h->root.type == bfd_link_hash_defined
688                   || h->root.type == bfd_link_hash_defweak)
689               && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
690               && (bfd_get_flavour (h->root.u.def.section->owner)
691                   == bfd_target_elf_flavour)
692               && (elf_elfheader (h->root.u.def.section->owner)->e_type
693                   == ET_DYN))
694             {
695               /* Change the hash table entry to undefined, and let
696                  _bfd_generic_link_add_one_symbol do the right thing
697                  with the new definition.  */
698               h->root.type = bfd_link_hash_undefined;
699               h->root.u.undef.abfd = h->root.u.def.section->owner;
700               size_change_ok = true;
701             }
702         }
703
704       if (! (_bfd_generic_link_add_one_symbol
705              (info, abfd, name, flags, sec, value, (const char *) NULL,
706               false, collect, (struct bfd_link_hash_entry **) sym_hash)))
707         goto error_return;
708
709       h = *sym_hash;
710       while (h->root.type == bfd_link_hash_indirect
711              || h->root.type == bfd_link_hash_warning)
712         h = (struct elf_link_hash_entry *) h->root.u.i.link;
713       *sym_hash = h;
714
715       new_weakdef = false;
716       if (dynamic
717           && definition
718           && (flags & BSF_WEAK) != 0
719           && ELF_ST_TYPE (sym.st_info) != STT_FUNC
720           && info->hash->creator->flavour == bfd_target_elf_flavour
721           && h->weakdef == NULL)
722         {
723           /* Keep a list of all weak defined non function symbols from
724              a dynamic object, using the weakdef field.  Later in this
725              function we will set the weakdef field to the correct
726              value.  We only put non-function symbols from dynamic
727              objects on this list, because that happens to be the only
728              time we need to know the normal symbol corresponding to a
729              weak symbol, and the information is time consuming to
730              figure out.  If the weakdef field is not already NULL,
731              then this symbol was already defined by some previous
732              dynamic object, and we will be using that previous
733              definition anyhow.  */
734
735           h->weakdef = weaks;
736           weaks = h;
737           new_weakdef = true;
738         }
739
740       /* Get the alignment of a common symbol.  */
741       if (sym.st_shndx == SHN_COMMON
742           && h->root.type == bfd_link_hash_common)
743         h->root.u.c.p->alignment_power = bfd_log2 (sym.st_value);
744
745       if (info->hash->creator->flavour == bfd_target_elf_flavour)
746         {
747           int old_flags;
748           boolean dynsym;
749           int new_flag;
750
751           /* Remember the symbol size and type.  */
752           if (sym.st_size != 0
753               && (definition || h->size == 0))
754             {
755               if (h->size != 0 && h->size != sym.st_size && ! size_change_ok)
756                 (*_bfd_error_handler)
757                   ("Warning: size of symbol `%s' changed from %lu to %lu in %s",
758                    name, (unsigned long) h->size, (unsigned long) sym.st_size,
759                    bfd_get_filename (abfd));
760
761               h->size = sym.st_size;
762             }
763           if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE
764               && (definition || h->type == STT_NOTYPE))
765             {
766               if (h->type != STT_NOTYPE
767                   && h->type != ELF_ST_TYPE (sym.st_info)
768                   && ! type_change_ok)
769                 (*_bfd_error_handler)
770                   ("Warning: type of symbol `%s' changed from %d to %d in %s",
771                    name, h->type, ELF_ST_TYPE (sym.st_info),
772                    bfd_get_filename (abfd));
773
774               h->type = ELF_ST_TYPE (sym.st_info);
775             }
776
777           /* Set a flag in the hash table entry indicating the type of
778              reference or definition we just found.  Keep a count of
779              the number of dynamic symbols we find.  A dynamic symbol
780              is one which is referenced or defined by both a regular
781              object and a shared object, or one which is referenced or
782              defined by more than one shared object.  */
783           old_flags = h->elf_link_hash_flags;
784           dynsym = false;
785           if (! dynamic)
786             {
787               if (! definition)
788                 new_flag = ELF_LINK_HASH_REF_REGULAR;
789               else
790                 new_flag = ELF_LINK_HASH_DEF_REGULAR;
791               if (info->shared
792                   || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
793                                    | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
794                 dynsym = true;
795             }
796           else
797             {
798               if (! definition)
799                 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
800               else
801                 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
802               if ((old_flags & new_flag) != 0
803                   || (old_flags & (ELF_LINK_HASH_DEF_REGULAR
804                                    | ELF_LINK_HASH_REF_REGULAR)) != 0
805                   || (h->weakdef != NULL
806                       && (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
807                                        | ELF_LINK_HASH_REF_DYNAMIC)) != 0))
808                 dynsym = true;
809             }
810
811           h->elf_link_hash_flags |= new_flag;
812           if (dynsym && h->dynindx == -1)
813             {
814               if (! _bfd_elf_link_record_dynamic_symbol (info, h))
815                 goto error_return;
816               if (h->weakdef != NULL
817                   && ! new_weakdef
818                   && h->weakdef->dynindx == -1)
819                 {
820                   if (! _bfd_elf_link_record_dynamic_symbol (info,
821                                                              h->weakdef))
822                     goto error_return;
823                 }
824             }
825         }
826     }
827
828   /* Now set the weakdefs field correctly for all the weak defined
829      symbols we found.  The only way to do this is to search all the
830      symbols.  Since we only need the information for non functions in
831      dynamic objects, that's the only time we actually put anything on
832      the list WEAKS.  We need this information so that if a regular
833      object refers to a symbol defined weakly in a dynamic object, the
834      real symbol in the dynamic object is also put in the dynamic
835      symbols; we also must arrange for both symbols to point to the
836      same memory location.  We could handle the general case of symbol
837      aliasing, but a general symbol alias can only be generated in
838      assembler code, handling it correctly would be very time
839      consuming, and other ELF linkers don't handle general aliasing
840      either.  */
841   while (weaks != NULL)
842     {
843       struct elf_link_hash_entry *hlook;
844       asection *slook;
845       bfd_vma vlook;
846       struct elf_link_hash_entry **hpp;
847       struct elf_link_hash_entry **hppend;
848
849       hlook = weaks;
850       weaks = hlook->weakdef;
851       hlook->weakdef = NULL;
852
853       BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
854                   || hlook->root.type == bfd_link_hash_defweak
855                   || hlook->root.type == bfd_link_hash_common
856                   || hlook->root.type == bfd_link_hash_indirect);
857       slook = hlook->root.u.def.section;
858       vlook = hlook->root.u.def.value;
859
860       hpp = elf_sym_hashes (abfd);
861       hppend = hpp + extsymcount;
862       for (; hpp < hppend; hpp++)
863         {
864           struct elf_link_hash_entry *h;
865
866           h = *hpp;
867           if (h != NULL && h != hlook
868               && (h->root.type == bfd_link_hash_defined
869                   || h->root.type == bfd_link_hash_defweak)
870               && h->root.u.def.section == slook
871               && h->root.u.def.value == vlook)
872             {
873               hlook->weakdef = h;
874
875               /* If the weak definition is in the list of dynamic
876                  symbols, make sure the real definition is put there
877                  as well.  */
878               if (hlook->dynindx != -1
879                   && h->dynindx == -1)
880                 {
881                   if (! _bfd_elf_link_record_dynamic_symbol (info, h))
882                     goto error_return;
883                 }
884
885               break;
886             }
887         }
888     }
889
890   if (buf != NULL)
891     {
892       free (buf);
893       buf = NULL;
894     }
895
896   /* If this object is the same format as the output object, and it is
897      not a shared library, then let the backend look through the
898      relocs.
899
900      This is required to build global offset table entries and to
901      arrange for dynamic relocs.  It is not required for the
902      particular common case of linking non PIC code, even when linking
903      against shared libraries, but unfortunately there is no way of
904      knowing whether an object file has been compiled PIC or not.
905      Looking through the relocs is not particularly time consuming.
906      The problem is that we must either (1) keep the relocs in memory,
907      which causes the linker to require additional runtime memory or
908      (2) read the relocs twice from the input file, which wastes time.
909      This would be a good case for using mmap.
910
911      I have no idea how to handle linking PIC code into a file of a
912      different format.  It probably can't be done.  */
913   check_relocs = get_elf_backend_data (abfd)->check_relocs;
914   if (! dynamic
915       && abfd->xvec == info->hash->creator
916       && check_relocs != NULL)
917     {
918       asection *o;
919
920       for (o = abfd->sections; o != NULL; o = o->next)
921         {
922           Elf_Internal_Rela *internal_relocs;
923           boolean ok;
924
925           if ((o->flags & SEC_RELOC) == 0
926               || o->reloc_count == 0)
927             continue;
928
929           /* I believe we can ignore the relocs for any section which
930              does not form part of the final process image, such as a
931              debugging section.  */
932           if ((o->flags & SEC_ALLOC) == 0)
933             continue;
934
935           internal_relocs = elf_link_read_relocs (abfd, o, (PTR) NULL,
936                                                   (Elf_Internal_Rela *) NULL,
937                                                   info->keep_memory);
938           if (internal_relocs == NULL)
939             goto error_return;
940
941           ok = (*check_relocs) (abfd, info, o, internal_relocs);
942
943           if (! info->keep_memory)
944             free (internal_relocs);
945
946           if (! ok)
947             goto error_return;
948         }
949     }
950
951   return true;
952
953  error_return:
954   if (buf != NULL)
955     free (buf);
956   if (dynbuf != NULL)
957     free (dynbuf);
958   return false;
959 }
960
961 /* Create some sections which will be filled in with dynamic linking
962    information.  ABFD is an input file which requires dynamic sections
963    to be created.  The dynamic sections take up virtual memory space
964    when the final executable is run, so we need to create them before
965    addresses are assigned to the output sections.  We work out the
966    actual contents and size of these sections later.  */
967
968 boolean
969 elf_link_create_dynamic_sections (abfd, info)
970      bfd *abfd;
971      struct bfd_link_info *info;
972 {
973   flagword flags;
974   register asection *s;
975   struct elf_link_hash_entry *h;
976   struct elf_backend_data *bed;
977
978   if (elf_hash_table (info)->dynamic_sections_created)
979     return true;
980
981   /* Make sure that all dynamic sections use the same input BFD.  */
982   if (elf_hash_table (info)->dynobj == NULL)
983     elf_hash_table (info)->dynobj = abfd;
984   else
985     abfd = elf_hash_table (info)->dynobj;
986
987   /* Note that we set the SEC_IN_MEMORY flag for all of these
988      sections.  */
989   flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
990
991   /* A dynamically linked executable has a .interp section, but a
992      shared library does not.  */
993   if (! info->shared)
994     {
995       s = bfd_make_section (abfd, ".interp");
996       if (s == NULL
997           || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
998         return false;
999     }
1000
1001   s = bfd_make_section (abfd, ".dynsym");
1002   if (s == NULL
1003       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1004       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1005     return false;
1006
1007   s = bfd_make_section (abfd, ".dynstr");
1008   if (s == NULL
1009       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1010     return false;
1011
1012   /* Create a strtab to hold the dynamic symbol names.  */
1013   if (elf_hash_table (info)->dynstr == NULL)
1014     {
1015       elf_hash_table (info)->dynstr = elf_stringtab_init ();
1016       if (elf_hash_table (info)->dynstr == NULL)
1017         return false;
1018     }
1019
1020   s = bfd_make_section (abfd, ".dynamic");
1021   if (s == NULL
1022       || ! bfd_set_section_flags (abfd, s, flags)
1023       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1024     return false;
1025
1026   /* The special symbol _DYNAMIC is always set to the start of the
1027      .dynamic section.  This call occurs before we have processed the
1028      symbols for any dynamic object, so we don't have to worry about
1029      overriding a dynamic definition.  We could set _DYNAMIC in a
1030      linker script, but we only want to define it if we are, in fact,
1031      creating a .dynamic section.  We don't want to define it if there
1032      is no .dynamic section, since on some ELF platforms the start up
1033      code examines it to decide how to initialize the process.  */
1034   h = NULL;
1035   if (! (_bfd_generic_link_add_one_symbol
1036          (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
1037           (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
1038           (struct bfd_link_hash_entry **) &h)))
1039     return false;
1040   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1041   h->type = STT_OBJECT;
1042
1043   if (info->shared
1044       && ! _bfd_elf_link_record_dynamic_symbol (info, h))
1045     return false;
1046
1047   s = bfd_make_section (abfd, ".hash");
1048   if (s == NULL
1049       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1050       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1051     return false;
1052
1053   /* Let the backend create the rest of the sections.  This lets the
1054      backend set the right flags.  The backend will normally create
1055      the .got and .plt sections.  */
1056   bed = get_elf_backend_data (abfd);
1057   if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
1058     return false;
1059
1060   elf_hash_table (info)->dynamic_sections_created = true;
1061
1062   return true;
1063 }
1064
1065 /* Add an entry to the .dynamic table.  */
1066
1067 boolean
1068 elf_add_dynamic_entry (info, tag, val)
1069      struct bfd_link_info *info;
1070      bfd_vma tag;
1071      bfd_vma val;
1072 {
1073   Elf_Internal_Dyn dyn;
1074   bfd *dynobj;
1075   asection *s;
1076   size_t newsize;
1077   bfd_byte *newcontents;
1078
1079   dynobj = elf_hash_table (info)->dynobj;
1080
1081   s = bfd_get_section_by_name (dynobj, ".dynamic");
1082   BFD_ASSERT (s != NULL);
1083
1084   newsize = s->_raw_size + sizeof (Elf_External_Dyn);
1085   newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
1086   if (newcontents == NULL)
1087     return false;
1088
1089   dyn.d_tag = tag;
1090   dyn.d_un.d_val = val;
1091   elf_swap_dyn_out (dynobj, &dyn,
1092                     (Elf_External_Dyn *) (newcontents + s->_raw_size));
1093
1094   s->_raw_size = newsize;
1095   s->contents = newcontents;
1096
1097   return true;
1098 }
1099
1100 /* Read and swap the relocs for a section.  They may have been cached.
1101    If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are not NULL,
1102    they are used as buffers to read into.  They are known to be large
1103    enough.  If the INTERNAL_RELOCS relocs argument is NULL, the return
1104    value is allocated using either malloc or bfd_alloc, according to
1105    the KEEP_MEMORY argument.  */
1106
1107 static Elf_Internal_Rela *
1108 elf_link_read_relocs (abfd, o, external_relocs, internal_relocs, keep_memory)
1109      bfd *abfd;
1110      asection *o;
1111      PTR external_relocs;
1112      Elf_Internal_Rela *internal_relocs;
1113      boolean keep_memory;
1114 {
1115   Elf_Internal_Shdr *rel_hdr;
1116   PTR alloc1 = NULL;
1117   Elf_Internal_Rela *alloc2 = NULL;
1118
1119   if (elf_section_data (o)->relocs != NULL)
1120     return elf_section_data (o)->relocs;
1121
1122   if (o->reloc_count == 0)
1123     return NULL;
1124
1125   rel_hdr = &elf_section_data (o)->rel_hdr;
1126
1127   if (internal_relocs == NULL)
1128     {
1129       size_t size;
1130
1131       size = o->reloc_count * sizeof (Elf_Internal_Rela);
1132       if (keep_memory)
1133         internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
1134       else
1135         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
1136       if (internal_relocs == NULL)
1137         goto error_return;
1138     }
1139
1140   if (external_relocs == NULL)
1141     {
1142       alloc1 = (PTR) bfd_malloc ((size_t) rel_hdr->sh_size);
1143       if (alloc1 == NULL)
1144         goto error_return;
1145       external_relocs = alloc1;
1146     }
1147
1148   if ((bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
1149       || (bfd_read (external_relocs, 1, rel_hdr->sh_size, abfd)
1150           != rel_hdr->sh_size))
1151     goto error_return;
1152
1153   /* Swap in the relocs.  For convenience, we always produce an
1154      Elf_Internal_Rela array; if the relocs are Rel, we set the addend
1155      to 0.  */
1156   if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
1157     {
1158       Elf_External_Rel *erel;
1159       Elf_External_Rel *erelend;
1160       Elf_Internal_Rela *irela;
1161
1162       erel = (Elf_External_Rel *) external_relocs;
1163       erelend = erel + o->reloc_count;
1164       irela = internal_relocs;
1165       for (; erel < erelend; erel++, irela++)
1166         {
1167           Elf_Internal_Rel irel;
1168
1169           elf_swap_reloc_in (abfd, erel, &irel);
1170           irela->r_offset = irel.r_offset;
1171           irela->r_info = irel.r_info;
1172           irela->r_addend = 0;
1173         }
1174     }
1175   else
1176     {
1177       Elf_External_Rela *erela;
1178       Elf_External_Rela *erelaend;
1179       Elf_Internal_Rela *irela;
1180
1181       BFD_ASSERT (rel_hdr->sh_entsize == sizeof (Elf_External_Rela));
1182
1183       erela = (Elf_External_Rela *) external_relocs;
1184       erelaend = erela + o->reloc_count;
1185       irela = internal_relocs;
1186       for (; erela < erelaend; erela++, irela++)
1187         elf_swap_reloca_in (abfd, erela, irela);
1188     }
1189
1190   /* Cache the results for next time, if we can.  */
1191   if (keep_memory)
1192     elf_section_data (o)->relocs = internal_relocs;
1193                  
1194   if (alloc1 != NULL)
1195     free (alloc1);
1196
1197   /* Don't free alloc2, since if it was allocated we are passing it
1198      back (under the name of internal_relocs).  */
1199
1200   return internal_relocs;
1201
1202  error_return:
1203   if (alloc1 != NULL)
1204     free (alloc1);
1205   if (alloc2 != NULL)
1206     free (alloc2);
1207   return NULL;
1208 }
1209
1210 /* Record an assignment to a symbol made by a linker script.  We need
1211    this in case some dynamic object refers to this symbol.  */
1212
1213 /*ARGSUSED*/
1214 boolean
1215 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name, provide)
1216      bfd *output_bfd;
1217      struct bfd_link_info *info;
1218      const char *name;
1219      boolean provide;
1220 {
1221   struct elf_link_hash_entry *h;
1222
1223   if (info->hash->creator->flavour != bfd_target_elf_flavour)
1224     return true;
1225
1226   h = elf_link_hash_lookup (elf_hash_table (info), name, true, true, false);
1227   if (h == NULL)
1228     return false;
1229
1230   /* If this symbol is being provided by the linker script, and it is
1231      currently defined by a dynamic object, but not by a regular
1232      object, then mark it as undefined so that the generic linker will
1233      force the correct value.  */
1234   if (provide
1235       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1236       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
1237     h->root.type = bfd_link_hash_undefined;
1238
1239   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1240   h->type = STT_OBJECT;
1241
1242   if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
1243                                   | ELF_LINK_HASH_REF_DYNAMIC)) != 0
1244        || info->shared)
1245       && h->dynindx == -1)
1246     {
1247       if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1248         return false;
1249
1250       /* If this is a weak defined symbol, and we know a corresponding
1251          real symbol from the same dynamic object, make sure the real
1252          symbol is also made into a dynamic symbol.  */
1253       if (h->weakdef != NULL
1254           && h->weakdef->dynindx == -1)
1255         {
1256           if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
1257             return false;
1258         }
1259     }
1260
1261   return true;
1262 }
1263
1264 /* Array used to determine the number of hash table buckets to use
1265    based on the number of symbols there are.  If there are fewer than
1266    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
1267    fewer than 37 we use 17 buckets, and so forth.  We never use more
1268    than 521 buckets.  */
1269
1270 static const size_t elf_buckets[] =
1271 {
1272   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 0
1273 };
1274
1275 /* Set up the sizes and contents of the ELF dynamic sections.  This is
1276    called by the ELF linker emulation before_allocation routine.  We
1277    must set the sizes of the sections before the linker sets the
1278    addresses of the various sections.  */
1279
1280 boolean
1281 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
1282                                      export_dynamic, info, sinterpptr)
1283      bfd *output_bfd;
1284      const char *soname;
1285      const char *rpath;
1286      boolean export_dynamic;
1287      struct bfd_link_info *info;
1288      asection **sinterpptr;
1289 {
1290   bfd *dynobj;
1291   struct elf_backend_data *bed;
1292
1293   *sinterpptr = NULL;
1294
1295   if (info->hash->creator->flavour != bfd_target_elf_flavour)
1296     return true;
1297
1298   dynobj = elf_hash_table (info)->dynobj;
1299
1300   /* If there were no dynamic objects in the link, there is nothing to
1301      do here.  */
1302   if (dynobj == NULL)
1303     return true;
1304
1305   /* If we are supposed to export all symbols into the dynamic symbol
1306      table (this is not the normal case), then do so.  */
1307   if (export_dynamic)
1308     {
1309       struct elf_info_failed eif;
1310
1311       eif.failed = false;
1312       eif.info = info;
1313       elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol,
1314                               (PTR) &eif);
1315       if (eif.failed)
1316         return false;
1317     }
1318
1319   if (elf_hash_table (info)->dynamic_sections_created)
1320     {
1321       struct elf_info_failed eif;
1322       struct elf_link_hash_entry *h;
1323       bfd_size_type strsize;
1324
1325       *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
1326       BFD_ASSERT (*sinterpptr != NULL || info->shared);
1327
1328       if (soname != NULL)
1329         {
1330           bfd_size_type indx;
1331
1332           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, soname,
1333                                      true, true);
1334           if (indx == (bfd_size_type) -1
1335               || ! elf_add_dynamic_entry (info, DT_SONAME, indx))
1336             return false;
1337         }      
1338
1339       if (info->symbolic)
1340         {
1341           if (! elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
1342             return false;
1343         }
1344
1345       if (rpath != NULL)
1346         {
1347           bfd_size_type indx;
1348
1349           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
1350                                      true, true);
1351           if (indx == (bfd_size_type) -1
1352               || ! elf_add_dynamic_entry (info, DT_RPATH, indx))
1353             return false;
1354         }
1355
1356       /* Find all symbols which were defined in a dynamic object and make
1357          the backend pick a reasonable value for them.  */
1358       eif.failed = false;
1359       eif.info = info;
1360       elf_link_hash_traverse (elf_hash_table (info),
1361                               elf_adjust_dynamic_symbol,
1362                               (PTR) &eif);
1363       if (eif.failed)
1364         return false;
1365
1366       /* Add some entries to the .dynamic section.  We fill in some of the
1367          values later, in elf_bfd_final_link, but we must add the entries
1368          now so that we know the final size of the .dynamic section.  */
1369       h =  elf_link_hash_lookup (elf_hash_table (info), "_init", false,
1370                                 false, false);
1371       if (h != NULL
1372           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1373                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1374         {
1375           if (! elf_add_dynamic_entry (info, DT_INIT, 0))
1376             return false;
1377         }
1378       h =  elf_link_hash_lookup (elf_hash_table (info), "_fini", false,
1379                                  false, false);
1380       if (h != NULL
1381           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1382                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1383         {
1384           if (! elf_add_dynamic_entry (info, DT_FINI, 0))
1385             return false;
1386         }
1387       strsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1388       if (! elf_add_dynamic_entry (info, DT_HASH, 0)
1389           || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
1390           || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
1391           || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
1392           || ! elf_add_dynamic_entry (info, DT_SYMENT,
1393                                       sizeof (Elf_External_Sym)))
1394         return false;
1395     }
1396
1397   /* The backend must work out the sizes of all the other dynamic
1398      sections.  */
1399   bed = get_elf_backend_data (output_bfd);
1400   if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
1401     return false;
1402
1403   if (elf_hash_table (info)->dynamic_sections_created)
1404     {
1405       size_t dynsymcount;
1406       asection *s;
1407       size_t i;
1408       size_t bucketcount = 0;
1409       Elf_Internal_Sym isym;
1410
1411       /* Set the size of the .dynsym and .hash sections.  We counted
1412          the number of dynamic symbols in elf_link_add_object_symbols.
1413          We will build the contents of .dynsym and .hash when we build
1414          the final symbol table, because until then we do not know the
1415          correct value to give the symbols.  We built the .dynstr
1416          section as we went along in elf_link_add_object_symbols.  */
1417       dynsymcount = elf_hash_table (info)->dynsymcount;
1418       s = bfd_get_section_by_name (dynobj, ".dynsym");
1419       BFD_ASSERT (s != NULL);
1420       s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
1421       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1422       if (s->contents == NULL && s->_raw_size != 0)
1423         return false;
1424
1425       /* The first entry in .dynsym is a dummy symbol.  */
1426       isym.st_value = 0;
1427       isym.st_size = 0;
1428       isym.st_name = 0;
1429       isym.st_info = 0;
1430       isym.st_other = 0;
1431       isym.st_shndx = 0;
1432       elf_swap_symbol_out (output_bfd, &isym,
1433                            (PTR) (Elf_External_Sym *) s->contents);
1434
1435       for (i = 0; elf_buckets[i] != 0; i++)
1436         {
1437           bucketcount = elf_buckets[i];
1438           if (dynsymcount < elf_buckets[i + 1])
1439             break;
1440         }
1441
1442       s = bfd_get_section_by_name (dynobj, ".hash");
1443       BFD_ASSERT (s != NULL);
1444       s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
1445       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1446       if (s->contents == NULL)
1447         return false;
1448       memset (s->contents, 0, (size_t) s->_raw_size);
1449
1450       put_word (output_bfd, bucketcount, s->contents);
1451       put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
1452
1453       elf_hash_table (info)->bucketcount = bucketcount;
1454
1455       s = bfd_get_section_by_name (dynobj, ".dynstr");
1456       BFD_ASSERT (s != NULL);
1457       s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1458
1459       if (! elf_add_dynamic_entry (info, DT_NULL, 0))
1460         return false;
1461     }
1462
1463   return true;
1464 }
1465
1466 /* This routine is used to export all defined symbols into the dynamic
1467    symbol table.  It is called via elf_link_hash_traverse.  */
1468
1469 static boolean
1470 elf_export_symbol (h, data)
1471      struct elf_link_hash_entry *h;
1472      PTR data;
1473 {
1474   struct elf_info_failed *eif = (struct elf_info_failed *) data;
1475
1476   if (h->dynindx == -1
1477       && (h->elf_link_hash_flags
1478           & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
1479     {
1480       if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
1481         {
1482           eif->failed = true;
1483           return false;
1484         }
1485     }
1486
1487   return true;
1488 }
1489
1490 /* Make the backend pick a good value for a dynamic symbol.  This is
1491    called via elf_link_hash_traverse, and also calls itself
1492    recursively.  */
1493
1494 static boolean
1495 elf_adjust_dynamic_symbol (h, data)
1496      struct elf_link_hash_entry *h;
1497      PTR data;
1498 {
1499   struct elf_info_failed *eif = (struct elf_info_failed *) data;
1500   bfd *dynobj;
1501   struct elf_backend_data *bed;
1502
1503   /* If -Bsymbolic was used (which means to bind references to global
1504      symbols to the definition within the shared object), and this
1505      symbol was defined in a regular object, then it actually doesn't
1506      need a PLT entry.  */
1507   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
1508       && eif->info->shared
1509       && eif->info->symbolic
1510       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1511     h->elf_link_hash_flags &=~ ELF_LINK_HASH_NEEDS_PLT;
1512
1513   /* If this symbol does not require a PLT entry, and it is not
1514      defined by a dynamic object, or is not referenced by a regular
1515      object, ignore it.  We do have to handle a weak defined symbol,
1516      even if no regular object refers to it, if we decided to add it
1517      to the dynamic symbol table.  FIXME: Do we normally need to worry
1518      about symbols which are defined by one dynamic object and
1519      referenced by another one?  */
1520   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
1521       && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
1522           || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
1523           || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
1524               && (h->weakdef == NULL || h->weakdef->dynindx == -1))))
1525     return true;
1526
1527   /* If we've already adjusted this symbol, don't do it again.  This
1528      can happen via a recursive call.  */
1529   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
1530     return true;
1531
1532   /* Don't look at this symbol again.  Note that we must set this
1533      after checking the above conditions, because we may look at a
1534      symbol once, decide not to do anything, and then get called
1535      recursively later after REF_REGULAR is set below.  */
1536   h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
1537
1538   /* If this is a weak definition, and we know a real definition, and
1539      the real symbol is not itself defined by a regular object file,
1540      then get a good value for the real definition.  We handle the
1541      real symbol first, for the convenience of the backend routine.
1542
1543      Note that there is a confusing case here.  If the real definition
1544      is defined by a regular object file, we don't get the real symbol
1545      from the dynamic object, but we do get the weak symbol.  If the
1546      processor backend uses a COPY reloc, then if some routine in the
1547      dynamic object changes the real symbol, we will not see that
1548      change in the corresponding weak symbol.  This is the way other
1549      ELF linkers work as well, and seems to be a result of the shared
1550      library model.
1551
1552      I will clarify this issue.  Most SVR4 shared libraries define the
1553      variable _timezone and define timezone as a weak synonym.  The
1554      tzset call changes _timezone.  If you write
1555        extern int timezone;
1556        int _timezone = 5;
1557        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
1558      you might expect that, since timezone is a synonym for _timezone,
1559      the same number will print both times.  However, if the processor
1560      backend uses a COPY reloc, then actually timezone will be copied
1561      into your process image, and, since you define _timezone
1562      yourself, _timezone will not.  Thus timezone and _timezone will
1563      wind up at different memory locations.  The tzset call will set
1564      _timezone, leaving timezone unchanged.  */
1565
1566   if (h->weakdef != NULL)
1567     {
1568       struct elf_link_hash_entry *weakdef;
1569
1570       BFD_ASSERT (h->root.type == bfd_link_hash_defined
1571                   || h->root.type == bfd_link_hash_defweak);
1572       weakdef = h->weakdef;
1573       BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
1574                   || weakdef->root.type == bfd_link_hash_defweak);
1575       BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
1576       if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1577         {
1578           /* This symbol is defined by a regular object file, so we
1579              will not do anything special.  Clear weakdef for the
1580              convenience of the processor backend.  */
1581           h->weakdef = NULL;
1582         }
1583       else
1584         {
1585           /* There is an implicit reference by a regular object file
1586              via the weak symbol.  */
1587           weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
1588           if (! elf_adjust_dynamic_symbol (weakdef, (PTR) eif))
1589             return false;
1590         }
1591     }
1592
1593   dynobj = elf_hash_table (eif->info)->dynobj;
1594   bed = get_elf_backend_data (dynobj);
1595   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
1596     {
1597       eif->failed = true;
1598       return false;
1599     }
1600
1601   return true;
1602 }
1603 \f
1604 /* Final phase of ELF linker.  */
1605
1606 /* A structure we use to avoid passing large numbers of arguments.  */
1607
1608 struct elf_final_link_info
1609 {
1610   /* General link information.  */
1611   struct bfd_link_info *info;
1612   /* Output BFD.  */
1613   bfd *output_bfd;
1614   /* Symbol string table.  */
1615   struct bfd_strtab_hash *symstrtab;
1616   /* .dynsym section.  */
1617   asection *dynsym_sec;
1618   /* .hash section.  */
1619   asection *hash_sec;
1620   /* Buffer large enough to hold contents of any section.  */
1621   bfd_byte *contents;
1622   /* Buffer large enough to hold external relocs of any section.  */
1623   PTR external_relocs;
1624   /* Buffer large enough to hold internal relocs of any section.  */
1625   Elf_Internal_Rela *internal_relocs;
1626   /* Buffer large enough to hold external local symbols of any input
1627      BFD.  */
1628   Elf_External_Sym *external_syms;
1629   /* Buffer large enough to hold internal local symbols of any input
1630      BFD.  */
1631   Elf_Internal_Sym *internal_syms;
1632   /* Array large enough to hold a symbol index for each local symbol
1633      of any input BFD.  */
1634   long *indices;
1635   /* Array large enough to hold a section pointer for each local
1636      symbol of any input BFD.  */
1637   asection **sections;
1638   /* Buffer to hold swapped out symbols.  */
1639   Elf_External_Sym *symbuf;
1640   /* Number of swapped out symbols in buffer.  */
1641   size_t symbuf_count;
1642   /* Number of symbols which fit in symbuf.  */
1643   size_t symbuf_size;
1644 };
1645
1646 static boolean elf_link_output_sym
1647   PARAMS ((struct elf_final_link_info *, const char *,
1648            Elf_Internal_Sym *, asection *));
1649 static boolean elf_link_flush_output_syms
1650   PARAMS ((struct elf_final_link_info *));
1651 static boolean elf_link_output_extsym
1652   PARAMS ((struct elf_link_hash_entry *, PTR));
1653 static boolean elf_link_input_bfd
1654   PARAMS ((struct elf_final_link_info *, bfd *));
1655 static boolean elf_reloc_link_order
1656   PARAMS ((bfd *, struct bfd_link_info *, asection *,
1657            struct bfd_link_order *));
1658
1659 /* This struct is used to pass information to routines called via
1660    elf_link_hash_traverse which must return failure.  */
1661
1662 struct elf_finfo_failed
1663 {
1664   boolean failed;
1665   struct elf_final_link_info *finfo;
1666 };  
1667
1668 /* Do the final step of an ELF link.  */
1669
1670 boolean
1671 elf_bfd_final_link (abfd, info)
1672      bfd *abfd;
1673      struct bfd_link_info *info;
1674 {
1675   boolean dynamic;
1676   bfd *dynobj;
1677   struct elf_final_link_info finfo;
1678   register asection *o;
1679   register struct bfd_link_order *p;
1680   register bfd *sub;
1681   size_t max_contents_size;
1682   size_t max_external_reloc_size;
1683   size_t max_internal_reloc_count;
1684   size_t max_sym_count;
1685   file_ptr off;
1686   Elf_Internal_Sym elfsym;
1687   unsigned int i;
1688   Elf_Internal_Shdr *symtab_hdr;
1689   Elf_Internal_Shdr *symstrtab_hdr;
1690   struct elf_backend_data *bed = get_elf_backend_data (abfd);
1691   struct elf_finfo_failed eif;
1692
1693   if (info->shared)
1694     abfd->flags |= DYNAMIC;
1695
1696   dynamic = elf_hash_table (info)->dynamic_sections_created;
1697   dynobj = elf_hash_table (info)->dynobj;
1698
1699   finfo.info = info;
1700   finfo.output_bfd = abfd;
1701   finfo.symstrtab = elf_stringtab_init ();
1702   if (finfo.symstrtab == NULL)
1703     return false;
1704   if (! dynamic)
1705     {
1706       finfo.dynsym_sec = NULL;
1707       finfo.hash_sec = NULL;
1708     }
1709   else
1710     {
1711       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
1712       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
1713       BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
1714     }
1715   finfo.contents = NULL;
1716   finfo.external_relocs = NULL;
1717   finfo.internal_relocs = NULL;
1718   finfo.external_syms = NULL;
1719   finfo.internal_syms = NULL;
1720   finfo.indices = NULL;
1721   finfo.sections = NULL;
1722   finfo.symbuf = NULL;
1723   finfo.symbuf_count = 0;
1724
1725   /* Count up the number of relocations we will output for each output
1726      section, so that we know the sizes of the reloc sections.  We
1727      also figure out some maximum sizes.  */
1728   max_contents_size = 0;
1729   max_external_reloc_size = 0;
1730   max_internal_reloc_count = 0;
1731   max_sym_count = 0;
1732   for (o = abfd->sections; o != (asection *) NULL; o = o->next)
1733     {
1734       o->reloc_count = 0;
1735
1736       for (p = o->link_order_head; p != NULL; p = p->next)
1737         {
1738           if (p->type == bfd_section_reloc_link_order
1739               || p->type == bfd_symbol_reloc_link_order)
1740             ++o->reloc_count;
1741           else if (p->type == bfd_indirect_link_order)
1742             {
1743               asection *sec;
1744
1745               sec = p->u.indirect.section;
1746
1747               if (info->relocateable)
1748                 o->reloc_count += sec->reloc_count;
1749
1750               if (sec->_raw_size > max_contents_size)
1751                 max_contents_size = sec->_raw_size;
1752               if (sec->_cooked_size > max_contents_size)
1753                 max_contents_size = sec->_cooked_size;
1754
1755               /* We are interested in just local symbols, not all
1756                  symbols.  */
1757               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour)
1758                 {
1759                   size_t sym_count;
1760
1761                   if (elf_bad_symtab (sec->owner))
1762                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
1763                                  / sizeof (Elf_External_Sym));
1764                   else
1765                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
1766
1767                   if (sym_count > max_sym_count)
1768                     max_sym_count = sym_count;
1769
1770                   if ((sec->flags & SEC_RELOC) != 0)
1771                     {
1772                       size_t ext_size;
1773
1774                       ext_size = elf_section_data (sec)->rel_hdr.sh_size;
1775                       if (ext_size > max_external_reloc_size)
1776                         max_external_reloc_size = ext_size;
1777                       if (sec->reloc_count > max_internal_reloc_count)
1778                         max_internal_reloc_count = sec->reloc_count;
1779                     }
1780                 }
1781             }
1782         }
1783
1784       if (o->reloc_count > 0)
1785         o->flags |= SEC_RELOC;
1786       else
1787         {
1788           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
1789              set it (this is probably a bug) and if it is set
1790              assign_section_numbers will create a reloc section.  */
1791           o->flags &=~ SEC_RELOC;
1792         }
1793
1794       /* If the SEC_ALLOC flag is not set, force the section VMA to
1795          zero.  This is done in elf_fake_sections as well, but forcing
1796          the VMA to 0 here will ensure that relocs against these
1797          sections are handled correctly.  */
1798       if ((o->flags & SEC_ALLOC) == 0)
1799         o->vma = 0;
1800     }
1801
1802   /* Figure out the file positions for everything but the symbol table
1803      and the relocs.  We set symcount to force assign_section_numbers
1804      to create a symbol table.  */
1805   abfd->symcount = info->strip == strip_all ? 0 : 1;
1806   BFD_ASSERT (! abfd->output_has_begun);
1807   if (! _bfd_elf_compute_section_file_positions (abfd, info))
1808     goto error_return;
1809
1810   /* That created the reloc sections.  Set their sizes, and assign
1811      them file positions, and allocate some buffers.  */
1812   for (o = abfd->sections; o != NULL; o = o->next)
1813     {
1814       if ((o->flags & SEC_RELOC) != 0)
1815         {
1816           Elf_Internal_Shdr *rel_hdr;
1817           register struct elf_link_hash_entry **p, **pend;
1818
1819           rel_hdr = &elf_section_data (o)->rel_hdr;
1820
1821           rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
1822
1823           /* The contents field must last into write_object_contents,
1824              so we allocate it with bfd_alloc rather than malloc.  */
1825           rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
1826           if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
1827             goto error_return;
1828
1829           p = ((struct elf_link_hash_entry **)
1830                bfd_malloc (o->reloc_count
1831                            * sizeof (struct elf_link_hash_entry *)));
1832           if (p == NULL && o->reloc_count != 0)
1833             goto error_return;
1834           elf_section_data (o)->rel_hashes = p;
1835           pend = p + o->reloc_count;
1836           for (; p < pend; p++)
1837             *p = NULL;
1838
1839           /* Use the reloc_count field as an index when outputting the
1840              relocs.  */
1841           o->reloc_count = 0;
1842         }
1843     }
1844
1845   _bfd_elf_assign_file_positions_for_relocs (abfd);
1846
1847   /* We have now assigned file positions for all the sections except
1848      .symtab and .strtab.  We start the .symtab section at the current
1849      file position, and write directly to it.  We build the .strtab
1850      section in memory.  */
1851   abfd->symcount = 0;
1852   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1853   /* sh_name is set in prep_headers.  */
1854   symtab_hdr->sh_type = SHT_SYMTAB;
1855   symtab_hdr->sh_flags = 0;
1856   symtab_hdr->sh_addr = 0;
1857   symtab_hdr->sh_size = 0;
1858   symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
1859   /* sh_link is set in assign_section_numbers.  */
1860   /* sh_info is set below.  */
1861   /* sh_offset is set just below.  */
1862   symtab_hdr->sh_addralign = 4;  /* FIXME: system dependent?  */
1863
1864   off = elf_tdata (abfd)->next_file_pos;
1865   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
1866
1867   /* Note that at this point elf_tdata (abfd)->next_file_pos is
1868      incorrect.  We do not yet know the size of the .symtab section.
1869      We correct next_file_pos below, after we do know the size.  */
1870
1871   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
1872      continuously seeking to the right position in the file.  */
1873   if (! info->keep_memory || max_sym_count < 20)
1874     finfo.symbuf_size = 20;
1875   else
1876     finfo.symbuf_size = max_sym_count;
1877   finfo.symbuf = ((Elf_External_Sym *)
1878                   bfd_malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
1879   if (finfo.symbuf == NULL)
1880     goto error_return;
1881
1882   /* Start writing out the symbol table.  The first symbol is always a
1883      dummy symbol.  */
1884   elfsym.st_value = 0;
1885   elfsym.st_size = 0;
1886   elfsym.st_info = 0;
1887   elfsym.st_other = 0;
1888   elfsym.st_shndx = SHN_UNDEF;
1889   if (! elf_link_output_sym (&finfo, (const char *) NULL,
1890                              &elfsym, bfd_und_section_ptr))
1891     goto error_return;
1892
1893 #if 0
1894   /* Some standard ELF linkers do this, but we don't because it causes
1895      bootstrap comparison failures.  */
1896   /* Output a file symbol for the output file as the second symbol.
1897      We output this even if we are discarding local symbols, although
1898      I'm not sure if this is correct.  */
1899   elfsym.st_value = 0;
1900   elfsym.st_size = 0;
1901   elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
1902   elfsym.st_other = 0;
1903   elfsym.st_shndx = SHN_ABS;
1904   if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
1905                              &elfsym, bfd_abs_section_ptr))
1906     goto error_return;
1907 #endif
1908
1909   /* Output a symbol for each section.  We output these even if we are
1910      discarding local symbols, since they are used for relocs.  These
1911      symbols have no names.  We store the index of each one in the
1912      index field of the section, so that we can find it again when
1913      outputting relocs.  */
1914   elfsym.st_value = 0;
1915   elfsym.st_size = 0;
1916   elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
1917   elfsym.st_other = 0;
1918   for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
1919     {
1920       o = section_from_elf_index (abfd, i);
1921       if (o != NULL)
1922         o->target_index = abfd->symcount;
1923       elfsym.st_shndx = i;
1924       if (! elf_link_output_sym (&finfo, (const char *) NULL,
1925                                  &elfsym, o))
1926         goto error_return;
1927     }
1928
1929   /* Allocate some memory to hold information read in from the input
1930      files.  */
1931   finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
1932   finfo.external_relocs = (PTR) bfd_malloc (max_external_reloc_size);
1933   finfo.internal_relocs = ((Elf_Internal_Rela *)
1934                            bfd_malloc (max_internal_reloc_count
1935                                        * sizeof (Elf_Internal_Rela)));
1936   finfo.external_syms = ((Elf_External_Sym *)
1937                          bfd_malloc (max_sym_count
1938                                      * sizeof (Elf_External_Sym)));
1939   finfo.internal_syms = ((Elf_Internal_Sym *)
1940                          bfd_malloc (max_sym_count
1941                                      * sizeof (Elf_Internal_Sym)));
1942   finfo.indices = (long *) bfd_malloc (max_sym_count * sizeof (long));
1943   finfo.sections = ((asection **)
1944                     bfd_malloc (max_sym_count * sizeof (asection *)));
1945   if ((finfo.contents == NULL && max_contents_size != 0)
1946       || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
1947       || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
1948       || (finfo.external_syms == NULL && max_sym_count != 0)
1949       || (finfo.internal_syms == NULL && max_sym_count != 0)
1950       || (finfo.indices == NULL && max_sym_count != 0)
1951       || (finfo.sections == NULL && max_sym_count != 0))
1952     goto error_return;
1953
1954   /* Since ELF permits relocations to be against local symbols, we
1955      must have the local symbols available when we do the relocations.
1956      Since we would rather only read the local symbols once, and we
1957      would rather not keep them in memory, we handle all the
1958      relocations for a single input file at the same time.
1959
1960      Unfortunately, there is no way to know the total number of local
1961      symbols until we have seen all of them, and the local symbol
1962      indices precede the global symbol indices.  This means that when
1963      we are generating relocateable output, and we see a reloc against
1964      a global symbol, we can not know the symbol index until we have
1965      finished examining all the local symbols to see which ones we are
1966      going to output.  To deal with this, we keep the relocations in
1967      memory, and don't output them until the end of the link.  This is
1968      an unfortunate waste of memory, but I don't see a good way around
1969      it.  Fortunately, it only happens when performing a relocateable
1970      link, which is not the common case.  FIXME: If keep_memory is set
1971      we could write the relocs out and then read them again; I don't
1972      know how bad the memory loss will be.  */
1973
1974   for (sub = info->input_bfds; sub != NULL; sub = sub->next)
1975     sub->output_has_begun = false;
1976   for (o = abfd->sections; o != NULL; o = o->next)
1977     {
1978       for (p = o->link_order_head; p != NULL; p = p->next)
1979         {
1980           if (p->type == bfd_indirect_link_order
1981               && (bfd_get_flavour (p->u.indirect.section->owner)
1982                   == bfd_target_elf_flavour))
1983             {
1984               sub = p->u.indirect.section->owner;
1985               if (! sub->output_has_begun)
1986                 {
1987                   if (! elf_link_input_bfd (&finfo, sub))
1988                     goto error_return;
1989                   sub->output_has_begun = true;
1990                 }
1991             }
1992           else if (p->type == bfd_section_reloc_link_order
1993                    || p->type == bfd_symbol_reloc_link_order)
1994             {
1995               if (! elf_reloc_link_order (abfd, info, o, p))
1996                 goto error_return;
1997             }
1998           else
1999             {
2000               if (! _bfd_default_link_order (abfd, info, o, p))
2001                 goto error_return;
2002             }
2003         }
2004     }
2005
2006   /* That wrote out all the local symbols.  Finish up the symbol table
2007      with the global symbols.  */
2008
2009   /* The sh_info field records the index of the first non local
2010      symbol.  */
2011   symtab_hdr->sh_info = abfd->symcount;
2012   if (dynamic)
2013     elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
2014
2015   /* We get the global symbols from the hash table.  */
2016   eif.failed = false;
2017   eif.finfo = &finfo;
2018   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
2019                           (PTR) &eif);
2020   if (eif.failed)
2021     return false;
2022
2023   /* Flush all symbols to the file.  */
2024   if (! elf_link_flush_output_syms (&finfo))
2025     return false;
2026
2027   /* Now we know the size of the symtab section.  */
2028   off += symtab_hdr->sh_size;
2029
2030   /* Finish up and write out the symbol string table (.strtab)
2031      section.  */
2032   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2033   /* sh_name was set in prep_headers.  */
2034   symstrtab_hdr->sh_type = SHT_STRTAB;
2035   symstrtab_hdr->sh_flags = 0;
2036   symstrtab_hdr->sh_addr = 0;
2037   symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
2038   symstrtab_hdr->sh_entsize = 0;
2039   symstrtab_hdr->sh_link = 0;
2040   symstrtab_hdr->sh_info = 0;
2041   /* sh_offset is set just below.  */
2042   symstrtab_hdr->sh_addralign = 1;
2043
2044   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true);
2045   elf_tdata (abfd)->next_file_pos = off;
2046
2047   if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
2048       || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
2049     return false;
2050
2051   /* Adjust the relocs to have the correct symbol indices.  */
2052   for (o = abfd->sections; o != NULL; o = o->next)
2053     {
2054       struct elf_link_hash_entry **rel_hash;
2055       Elf_Internal_Shdr *rel_hdr;
2056
2057       if ((o->flags & SEC_RELOC) == 0)
2058         continue;
2059
2060       rel_hash = elf_section_data (o)->rel_hashes;
2061       rel_hdr = &elf_section_data (o)->rel_hdr;
2062       for (i = 0; i < o->reloc_count; i++, rel_hash++)
2063         {
2064           if (*rel_hash == NULL)
2065             continue;
2066               
2067           BFD_ASSERT ((*rel_hash)->indx >= 0);
2068
2069           if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2070             {
2071               Elf_External_Rel *erel;
2072               Elf_Internal_Rel irel;
2073
2074               erel = (Elf_External_Rel *) rel_hdr->contents + i;
2075               elf_swap_reloc_in (abfd, erel, &irel);
2076               irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
2077                                         ELF_R_TYPE (irel.r_info));
2078               elf_swap_reloc_out (abfd, &irel, erel);
2079             }
2080           else
2081             {
2082               Elf_External_Rela *erela;
2083               Elf_Internal_Rela irela;
2084
2085               BFD_ASSERT (rel_hdr->sh_entsize
2086                           == sizeof (Elf_External_Rela));
2087
2088               erela = (Elf_External_Rela *) rel_hdr->contents + i;
2089               elf_swap_reloca_in (abfd, erela, &irela);
2090               irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
2091                                          ELF_R_TYPE (irela.r_info));
2092               elf_swap_reloca_out (abfd, &irela, erela);
2093             }
2094         }
2095
2096       /* Set the reloc_count field to 0 to prevent write_relocs from
2097          trying to swap the relocs out itself.  */
2098       o->reloc_count = 0;
2099     }
2100
2101   /* If we are linking against a dynamic object, or generating a
2102      shared library, finish up the dynamic linking information.  */
2103   if (dynamic)
2104     {
2105       Elf_External_Dyn *dyncon, *dynconend;
2106
2107       /* Fix up .dynamic entries.  */
2108       o = bfd_get_section_by_name (dynobj, ".dynamic");
2109       BFD_ASSERT (o != NULL);
2110
2111       dyncon = (Elf_External_Dyn *) o->contents;
2112       dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
2113       for (; dyncon < dynconend; dyncon++)
2114         {
2115           Elf_Internal_Dyn dyn;
2116           const char *name;
2117           unsigned int type;
2118
2119           elf_swap_dyn_in (dynobj, dyncon, &dyn);
2120
2121           switch (dyn.d_tag)
2122             {
2123             default:
2124               break;
2125
2126               /* SVR4 linkers seem to set DT_INIT and DT_FINI based on
2127                  magic _init and _fini symbols.  This is pretty ugly,
2128                  but we are compatible.  */
2129             case DT_INIT:
2130               name = "_init";
2131               goto get_sym;
2132             case DT_FINI:
2133               name = "_fini";
2134             get_sym:
2135               {
2136                 struct elf_link_hash_entry *h;
2137
2138                 h = elf_link_hash_lookup (elf_hash_table (info), name,
2139                                           false, false, true);
2140                 if (h != NULL
2141                     && (h->root.type == bfd_link_hash_defined
2142                         || h->root.type == bfd_link_hash_defweak))
2143                   {
2144                     dyn.d_un.d_val = h->root.u.def.value;
2145                     o = h->root.u.def.section;
2146                     if (o->output_section != NULL)
2147                       dyn.d_un.d_val += (o->output_section->vma
2148                                          + o->output_offset);
2149                     else
2150                       {
2151                         /* The symbol is imported from another shared
2152                            library and does not apply to this one.  */
2153                         dyn.d_un.d_val = 0;
2154                       }
2155
2156                     elf_swap_dyn_out (dynobj, &dyn, dyncon);
2157                   }
2158               }
2159               break;
2160
2161             case DT_HASH:
2162               name = ".hash";
2163               goto get_vma;
2164             case DT_STRTAB:
2165               name = ".dynstr";
2166               goto get_vma;
2167             case DT_SYMTAB:
2168               name = ".dynsym";
2169             get_vma:
2170               o = bfd_get_section_by_name (abfd, name);
2171               BFD_ASSERT (o != NULL);
2172               dyn.d_un.d_ptr = o->vma;
2173               elf_swap_dyn_out (dynobj, &dyn, dyncon);
2174               break;
2175
2176             case DT_REL:
2177             case DT_RELA:
2178             case DT_RELSZ:
2179             case DT_RELASZ:
2180               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
2181                 type = SHT_REL;
2182               else
2183                 type = SHT_RELA;
2184               dyn.d_un.d_val = 0;
2185               for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
2186                 {
2187                   Elf_Internal_Shdr *hdr;
2188
2189                   hdr = elf_elfsections (abfd)[i];
2190                   if (hdr->sh_type == type
2191                       && (hdr->sh_flags & SHF_ALLOC) != 0)
2192                     {
2193                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
2194                         dyn.d_un.d_val += hdr->sh_size;
2195                       else
2196                         {
2197                           if (dyn.d_un.d_val == 0
2198                               || hdr->sh_addr < dyn.d_un.d_val)
2199                             dyn.d_un.d_val = hdr->sh_addr;
2200                         }
2201                     }
2202                 }
2203               elf_swap_dyn_out (dynobj, &dyn, dyncon);
2204               break;
2205             }
2206         }
2207     }
2208
2209   /* If we have created any dynamic sections, then output them.  */
2210   if (dynobj != NULL)
2211     {
2212       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
2213         goto error_return;
2214
2215       for (o = dynobj->sections; o != NULL; o = o->next)
2216         {
2217           if ((o->flags & SEC_HAS_CONTENTS) == 0
2218               || o->_raw_size == 0)
2219             continue;
2220           if ((o->flags & SEC_IN_MEMORY) == 0)
2221             {
2222               /* At this point, we are only interested in sections
2223                  created by elf_link_create_dynamic_sections.  FIXME:
2224                  This test is fragile.  */
2225               continue;
2226             }
2227           if ((elf_section_data (o->output_section)->this_hdr.sh_type
2228                != SHT_STRTAB)
2229               || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
2230             {
2231               if (! bfd_set_section_contents (abfd, o->output_section,
2232                                               o->contents, o->output_offset,
2233                                               o->_raw_size))
2234                 goto error_return;
2235             }
2236           else
2237             {
2238               file_ptr off;
2239
2240               /* The contents of the .dynstr section are actually in a
2241                  stringtab.  */
2242               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
2243               if (bfd_seek (abfd, off, SEEK_SET) != 0
2244                   || ! _bfd_stringtab_emit (abfd,
2245                                             elf_hash_table (info)->dynstr))
2246                 goto error_return;
2247             }
2248         }
2249     }
2250
2251   if (finfo.symstrtab != NULL)
2252     _bfd_stringtab_free (finfo.symstrtab);
2253   if (finfo.contents != NULL)
2254     free (finfo.contents);
2255   if (finfo.external_relocs != NULL)
2256     free (finfo.external_relocs);
2257   if (finfo.internal_relocs != NULL)
2258     free (finfo.internal_relocs);
2259   if (finfo.external_syms != NULL)
2260     free (finfo.external_syms);
2261   if (finfo.internal_syms != NULL)
2262     free (finfo.internal_syms);
2263   if (finfo.indices != NULL)
2264     free (finfo.indices);
2265   if (finfo.sections != NULL)
2266     free (finfo.sections);
2267   if (finfo.symbuf != NULL)
2268     free (finfo.symbuf);
2269   for (o = abfd->sections; o != NULL; o = o->next)
2270     {
2271       if ((o->flags & SEC_RELOC) != 0
2272           && elf_section_data (o)->rel_hashes != NULL)
2273         free (elf_section_data (o)->rel_hashes);
2274     }
2275
2276   elf_tdata (abfd)->linker = true;
2277
2278   return true;
2279
2280  error_return:
2281   if (finfo.symstrtab != NULL)
2282     _bfd_stringtab_free (finfo.symstrtab);
2283   if (finfo.contents != NULL)
2284     free (finfo.contents);
2285   if (finfo.external_relocs != NULL)
2286     free (finfo.external_relocs);
2287   if (finfo.internal_relocs != NULL)
2288     free (finfo.internal_relocs);
2289   if (finfo.external_syms != NULL)
2290     free (finfo.external_syms);
2291   if (finfo.internal_syms != NULL)
2292     free (finfo.internal_syms);
2293   if (finfo.indices != NULL)
2294     free (finfo.indices);
2295   if (finfo.sections != NULL)
2296     free (finfo.sections);
2297   if (finfo.symbuf != NULL)
2298     free (finfo.symbuf);
2299   for (o = abfd->sections; o != NULL; o = o->next)
2300     {
2301       if ((o->flags & SEC_RELOC) != 0
2302           && elf_section_data (o)->rel_hashes != NULL)
2303         free (elf_section_data (o)->rel_hashes);
2304     }
2305
2306   return false;
2307 }
2308
2309 /* Add a symbol to the output symbol table.  */
2310
2311 static boolean
2312 elf_link_output_sym (finfo, name, elfsym, input_sec)
2313      struct elf_final_link_info *finfo;
2314      const char *name;
2315      Elf_Internal_Sym *elfsym;
2316      asection *input_sec;
2317 {
2318   boolean (*output_symbol_hook) PARAMS ((bfd *,
2319                                          struct bfd_link_info *info,
2320                                          const char *,
2321                                          Elf_Internal_Sym *,
2322                                          asection *));
2323
2324   output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
2325     elf_backend_link_output_symbol_hook;
2326   if (output_symbol_hook != NULL)
2327     {
2328       if (! ((*output_symbol_hook)
2329              (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
2330         return false;
2331     }
2332
2333   if (name == (const char *) NULL || *name == '\0')
2334     elfsym->st_name = 0;
2335   else
2336     {
2337       elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
2338                                                             name, true,
2339                                                             false);
2340       if (elfsym->st_name == (unsigned long) -1)
2341         return false;
2342     }
2343
2344   if (finfo->symbuf_count >= finfo->symbuf_size)
2345     {
2346       if (! elf_link_flush_output_syms (finfo))
2347         return false;
2348     }
2349
2350   elf_swap_symbol_out (finfo->output_bfd, elfsym,
2351                        (PTR) (finfo->symbuf + finfo->symbuf_count));
2352   ++finfo->symbuf_count;
2353
2354   ++finfo->output_bfd->symcount;
2355
2356   return true;
2357 }
2358
2359 /* Flush the output symbols to the file.  */
2360
2361 static boolean
2362 elf_link_flush_output_syms (finfo)
2363      struct elf_final_link_info *finfo;
2364 {
2365   Elf_Internal_Shdr *symtab;
2366
2367   symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
2368
2369   if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
2370                 SEEK_SET) != 0
2371       || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
2372                      sizeof (Elf_External_Sym), finfo->output_bfd)
2373           != finfo->symbuf_count * sizeof (Elf_External_Sym)))
2374     return false;
2375
2376   symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
2377
2378   finfo->symbuf_count = 0;
2379
2380   return true;
2381 }
2382
2383 /* Add an external symbol to the symbol table.  This is called from
2384    the hash table traversal routine.  */
2385
2386 static boolean
2387 elf_link_output_extsym (h, data)
2388      struct elf_link_hash_entry *h;
2389      PTR data;
2390 {
2391   struct elf_finfo_failed *eif = (struct elf_finfo_failed *) data;
2392   struct elf_final_link_info *finfo = eif->finfo;
2393   boolean strip;
2394   Elf_Internal_Sym sym;
2395   asection *input_sec;
2396
2397   /* If we are not creating a shared library, and this symbol is
2398      referenced by a shared library but is not defined anywhere, then
2399      warn that it is undefined.  If we do not do this, the runtime
2400      linker will complain that the symbol is undefined when the
2401      program is run.  We don't have to worry about symbols that are
2402      referenced by regular files, because we will already have issued
2403      warnings for them.  */
2404   if (! finfo->info->relocateable
2405       && ! finfo->info->shared
2406       && h->root.type == bfd_link_hash_undefined
2407       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
2408       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2409     {
2410       if (! ((*finfo->info->callbacks->undefined_symbol)
2411              (finfo->info, h->root.root.string, h->root.u.undef.abfd,
2412               (asection *) NULL, 0)))
2413         {
2414           eif->failed = true;
2415           return false;
2416         }
2417     }
2418
2419   /* We don't want to output symbols that have never been mentioned by
2420      a regular file, or that we have been told to strip.  However, if
2421      h->indx is set to -2, the symbol is used by a reloc and we must
2422      output it.  */
2423   if (h->indx == -2)
2424     strip = false;
2425   else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
2426             || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
2427            && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
2428            && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2429     strip = true;
2430   else if (finfo->info->strip == strip_all
2431            || (finfo->info->strip == strip_some
2432                && bfd_hash_lookup (finfo->info->keep_hash,
2433                                    h->root.root.string,
2434                                    false, false) == NULL))
2435     strip = true;
2436   else
2437     strip = false;
2438
2439   /* If we're stripping it, and it's not a dynamic symbol, there's
2440      nothing else to do.  */
2441   if (strip && h->dynindx == -1)
2442     return true;
2443
2444   sym.st_value = 0;
2445   sym.st_size = h->size;
2446   sym.st_other = 0;
2447   if (h->root.type == bfd_link_hash_undefweak
2448       || h->root.type == bfd_link_hash_defweak)
2449     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
2450   else
2451     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
2452
2453   switch (h->root.type)
2454     {
2455     default:
2456     case bfd_link_hash_new:
2457       abort ();
2458       return false;
2459
2460     case bfd_link_hash_undefined:
2461       input_sec = bfd_und_section_ptr;
2462       sym.st_shndx = SHN_UNDEF;
2463       break;
2464
2465     case bfd_link_hash_undefweak:
2466       input_sec = bfd_und_section_ptr;
2467       sym.st_shndx = SHN_UNDEF;
2468       break;
2469
2470     case bfd_link_hash_defined:
2471     case bfd_link_hash_defweak:
2472       {
2473         input_sec = h->root.u.def.section;
2474         if (input_sec->output_section != NULL)
2475           {
2476             sym.st_shndx =
2477               _bfd_elf_section_from_bfd_section (finfo->output_bfd,
2478                                                  input_sec->output_section);
2479             if (sym.st_shndx == (unsigned short) -1)
2480               {
2481                 eif->failed = true;
2482                 return false;
2483               }
2484
2485             /* ELF symbols in relocateable files are section relative,
2486                but in nonrelocateable files they are virtual
2487                addresses.  */
2488             sym.st_value = h->root.u.def.value + input_sec->output_offset;
2489             if (! finfo->info->relocateable)
2490               sym.st_value += input_sec->output_section->vma;
2491           }
2492         else
2493           {
2494             BFD_ASSERT ((bfd_get_flavour (input_sec->owner)
2495                          == bfd_target_elf_flavour)
2496                         && elf_elfheader (input_sec->owner)->e_type == ET_DYN);
2497             sym.st_shndx = SHN_UNDEF;
2498             input_sec = bfd_und_section_ptr;
2499           }
2500       }
2501       break;
2502
2503     case bfd_link_hash_common:
2504       input_sec = bfd_com_section_ptr;
2505       sym.st_shndx = SHN_COMMON;
2506       sym.st_value = 1 << h->root.u.c.p->alignment_power;
2507       break;
2508
2509     case bfd_link_hash_indirect:
2510     case bfd_link_hash_warning:
2511       /* We can't represent these symbols in ELF.  A warning symbol
2512          may have come from a .gnu.warning.SYMBOL section anyhow.  We
2513          just put the target symbol in the hash table.  If the target
2514          symbol does not really exist, don't do anything.  */
2515       if (h->root.u.i.link->type == bfd_link_hash_new)
2516         return true;
2517       return (elf_link_output_extsym
2518               ((struct elf_link_hash_entry *) h->root.u.i.link, data));
2519     }
2520
2521   /* If this symbol should be put in the .dynsym section, then put it
2522      there now.  We have already know the symbol index.  We also fill
2523      in the entry in the .hash section.  */
2524   if (h->dynindx != -1
2525       && elf_hash_table (finfo->info)->dynamic_sections_created)
2526     {
2527       struct elf_backend_data *bed;
2528       size_t bucketcount;
2529       size_t bucket;
2530       bfd_byte *bucketpos;
2531       bfd_vma chain;
2532
2533       sym.st_name = h->dynstr_index;
2534
2535       /* Give the processor backend a chance to tweak the symbol
2536          value, and also to finish up anything that needs to be done
2537          for this symbol.  */
2538       bed = get_elf_backend_data (finfo->output_bfd);
2539       if (! ((*bed->elf_backend_finish_dynamic_symbol)
2540              (finfo->output_bfd, finfo->info, h, &sym)))
2541         {
2542           eif->failed = true;
2543           return false;
2544         }
2545
2546       elf_swap_symbol_out (finfo->output_bfd, &sym,
2547                            (PTR) (((Elf_External_Sym *)
2548                                    finfo->dynsym_sec->contents)
2549                                   + h->dynindx));
2550
2551       bucketcount = elf_hash_table (finfo->info)->bucketcount;
2552       bucket = (bfd_elf_hash ((const unsigned char *) h->root.root.string)
2553                 % bucketcount);
2554       bucketpos = ((bfd_byte *) finfo->hash_sec->contents
2555                    + (bucket + 2) * (ARCH_SIZE / 8));
2556       chain = get_word (finfo->output_bfd, bucketpos);
2557       put_word (finfo->output_bfd, h->dynindx, bucketpos);
2558       put_word (finfo->output_bfd, chain,
2559                 ((bfd_byte *) finfo->hash_sec->contents
2560                  + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
2561     }
2562
2563   /* If we're stripping it, then it was just a dynamic symbol, and
2564      there's nothing else to do.  */
2565   if (strip)
2566     return true;
2567
2568   h->indx = finfo->output_bfd->symcount;
2569
2570   if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
2571     {
2572       eif->failed = true;
2573       return false;
2574     }
2575
2576   return true;
2577 }
2578
2579 /* Link an input file into the linker output file.  This function
2580    handles all the sections and relocations of the input file at once.
2581    This is so that we only have to read the local symbols once, and
2582    don't have to keep them in memory.  */
2583
2584 static boolean
2585 elf_link_input_bfd (finfo, input_bfd)
2586      struct elf_final_link_info *finfo;
2587      bfd *input_bfd;
2588 {
2589   boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
2590                                        bfd *, asection *, bfd_byte *,
2591                                        Elf_Internal_Rela *,
2592                                        Elf_Internal_Sym *, asection **));
2593   bfd *output_bfd;
2594   Elf_Internal_Shdr *symtab_hdr;
2595   size_t locsymcount;
2596   size_t extsymoff;
2597   Elf_External_Sym *esym;
2598   Elf_External_Sym *esymend;
2599   Elf_Internal_Sym *isym;
2600   long *pindex;
2601   asection **ppsection;
2602   asection *o;
2603
2604   output_bfd = finfo->output_bfd;
2605   relocate_section =
2606     get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
2607
2608   /* If this is a dynamic object, we don't want to do anything here:
2609      we don't want the local symbols, and we don't want the section
2610      contents.  */
2611   if (elf_elfheader (input_bfd)->e_type == ET_DYN)
2612     return true;
2613
2614   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2615   if (elf_bad_symtab (input_bfd))
2616     {
2617       locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
2618       extsymoff = 0;
2619     }
2620   else
2621     {
2622       locsymcount = symtab_hdr->sh_info;
2623       extsymoff = symtab_hdr->sh_info;
2624     }
2625
2626   /* Read the local symbols.  */
2627   if (locsymcount > 0
2628       && (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
2629           || (bfd_read (finfo->external_syms, sizeof (Elf_External_Sym),
2630                         locsymcount, input_bfd)
2631               != locsymcount * sizeof (Elf_External_Sym))))
2632     return false;
2633
2634   /* Swap in the local symbols and write out the ones which we know
2635      are going into the output file.  */
2636   esym = finfo->external_syms;
2637   esymend = esym + locsymcount;
2638   isym = finfo->internal_syms;
2639   pindex = finfo->indices;
2640   ppsection = finfo->sections;
2641   for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
2642     {
2643       asection *isec;
2644       const char *name;
2645       Elf_Internal_Sym osym;
2646
2647       elf_swap_symbol_in (input_bfd, esym, isym);
2648       *pindex = -1;
2649
2650       if (elf_bad_symtab (input_bfd))
2651         {
2652           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
2653             {
2654               *ppsection = NULL;
2655               continue;
2656             }
2657         }
2658
2659       if (isym->st_shndx == SHN_UNDEF)
2660         isec = bfd_und_section_ptr;
2661       else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
2662         isec = section_from_elf_index (input_bfd, isym->st_shndx);
2663       else if (isym->st_shndx == SHN_ABS)
2664         isec = bfd_abs_section_ptr;
2665       else if (isym->st_shndx == SHN_COMMON)
2666         isec = bfd_com_section_ptr;
2667       else
2668         {
2669           /* Who knows?  */
2670           isec = NULL;
2671         }
2672
2673       *ppsection = isec;
2674
2675       /* Don't output the first, undefined, symbol.  */
2676       if (esym == finfo->external_syms)
2677         continue;
2678
2679       /* If we are stripping all symbols, we don't want to output this
2680          one.  */
2681       if (finfo->info->strip == strip_all)
2682         continue;
2683
2684       /* We never output section symbols.  Instead, we use the section
2685          symbol of the corresponding section in the output file.  */
2686       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
2687         continue;
2688
2689       /* If we are discarding all local symbols, we don't want to
2690          output this one.  If we are generating a relocateable output
2691          file, then some of the local symbols may be required by
2692          relocs; we output them below as we discover that they are
2693          needed.  */
2694       if (finfo->info->discard == discard_all)
2695         continue;
2696
2697       /* Get the name of the symbol.  */
2698       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
2699                                           isym->st_name);
2700       if (name == NULL)
2701         return false;
2702
2703       /* See if we are discarding symbols with this name.  */
2704       if ((finfo->info->strip == strip_some
2705            && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
2706                == NULL))
2707           || (finfo->info->discard == discard_l
2708               && strncmp (name, finfo->info->lprefix,
2709                           finfo->info->lprefix_len) == 0))
2710         continue;
2711
2712       /* If we get here, we are going to output this symbol.  */
2713
2714       osym = *isym;
2715
2716       /* Adjust the section index for the output file.  */
2717       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
2718                                                          isec->output_section);
2719       if (osym.st_shndx == (unsigned short) -1)
2720         return false;
2721
2722       *pindex = output_bfd->symcount;
2723
2724       /* ELF symbols in relocateable files are section relative, but
2725          in executable files they are virtual addresses.  Note that
2726          this code assumes that all ELF sections have an associated
2727          BFD section with a reasonable value for output_offset; below
2728          we assume that they also have a reasonable value for
2729          output_section.  Any special sections must be set up to meet
2730          these requirements.  */
2731       osym.st_value += isec->output_offset;
2732       if (! finfo->info->relocateable)
2733         osym.st_value += isec->output_section->vma;
2734
2735       if (! elf_link_output_sym (finfo, name, &osym, isec))
2736         return false;
2737     }
2738
2739   /* Relocate the contents of each section.  */
2740   for (o = input_bfd->sections; o != NULL; o = o->next)
2741     {
2742       if ((o->flags & SEC_HAS_CONTENTS) == 0)
2743         continue;
2744
2745       if ((o->flags & SEC_IN_MEMORY) != 0
2746           && input_bfd == elf_hash_table (finfo->info)->dynobj)
2747         {
2748           /* Section was created by elf_link_create_dynamic_sections.
2749              FIXME: This test is fragile.  */
2750           continue;
2751         }
2752
2753       /* Read the contents of the section.  */
2754       if (! bfd_get_section_contents (input_bfd, o, finfo->contents,
2755                                       (file_ptr) 0, o->_raw_size))
2756         return false;
2757
2758       if ((o->flags & SEC_RELOC) != 0)
2759         {
2760           Elf_Internal_Rela *internal_relocs;
2761
2762           /* Get the swapped relocs.  */
2763           internal_relocs = elf_link_read_relocs (input_bfd, o,
2764                                                   finfo->external_relocs,
2765                                                   finfo->internal_relocs,
2766                                                   false);
2767           if (internal_relocs == NULL
2768               && o->reloc_count > 0)
2769             return false;
2770
2771           /* Relocate the section by invoking a back end routine.
2772
2773              The back end routine is responsible for adjusting the
2774              section contents as necessary, and (if using Rela relocs
2775              and generating a relocateable output file) adjusting the
2776              reloc addend as necessary.
2777
2778              The back end routine does not have to worry about setting
2779              the reloc address or the reloc symbol index.
2780
2781              The back end routine is given a pointer to the swapped in
2782              internal symbols, and can access the hash table entries
2783              for the external symbols via elf_sym_hashes (input_bfd).
2784
2785              When generating relocateable output, the back end routine
2786              must handle STB_LOCAL/STT_SECTION symbols specially.  The
2787              output symbol is going to be a section symbol
2788              corresponding to the output section, which will require
2789              the addend to be adjusted.  */
2790
2791           if (! (*relocate_section) (output_bfd, finfo->info,
2792                                      input_bfd, o,
2793                                      finfo->contents,
2794                                      internal_relocs,
2795                                      finfo->internal_syms,
2796                                      finfo->sections))
2797             return false;
2798
2799           if (finfo->info->relocateable)
2800             {
2801               Elf_Internal_Rela *irela;
2802               Elf_Internal_Rela *irelaend;
2803               struct elf_link_hash_entry **rel_hash;
2804               Elf_Internal_Shdr *input_rel_hdr;
2805               Elf_Internal_Shdr *output_rel_hdr;
2806
2807               /* Adjust the reloc addresses and symbol indices.  */
2808
2809               irela = internal_relocs;
2810               irelaend = irela + o->reloc_count;
2811               rel_hash = (elf_section_data (o->output_section)->rel_hashes
2812                           + o->output_section->reloc_count);
2813               for (; irela < irelaend; irela++, rel_hash++)
2814                 {
2815                   unsigned long r_symndx;
2816                   Elf_Internal_Sym *isym;
2817                   asection *sec;
2818
2819                   irela->r_offset += o->output_offset;
2820
2821                   r_symndx = ELF_R_SYM (irela->r_info);
2822
2823                   if (r_symndx == 0)
2824                     continue;
2825
2826                   if (r_symndx >= locsymcount
2827                       || (elf_bad_symtab (input_bfd)
2828                           && finfo->sections[r_symndx] == NULL))
2829                     {
2830                       long indx;
2831
2832                       /* This is a reloc against a global symbol.  We
2833                          have not yet output all the local symbols, so
2834                          we do not know the symbol index of any global
2835                          symbol.  We set the rel_hash entry for this
2836                          reloc to point to the global hash table entry
2837                          for this symbol.  The symbol index is then
2838                          set at the end of elf_bfd_final_link.  */
2839                       indx = r_symndx - extsymoff;
2840                       *rel_hash = elf_sym_hashes (input_bfd)[indx];
2841
2842                       /* Setting the index to -2 tells
2843                          elf_link_output_extsym that this symbol is
2844                          used by a reloc.  */
2845                       BFD_ASSERT ((*rel_hash)->indx < 0);
2846                       (*rel_hash)->indx = -2;
2847
2848                       continue;
2849                     }
2850
2851                   /* This is a reloc against a local symbol. */
2852
2853                   *rel_hash = NULL;
2854                   isym = finfo->internal_syms + r_symndx;
2855                   sec = finfo->sections[r_symndx];
2856                   if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
2857                     {
2858                       /* I suppose the backend ought to fill in the
2859                          section of any STT_SECTION symbol against a
2860                          processor specific section.  */
2861                       if (sec != NULL && bfd_is_abs_section (sec))
2862                         r_symndx = 0;
2863                       else if (sec == NULL || sec->owner == NULL)
2864                         {
2865                           bfd_set_error (bfd_error_bad_value);
2866                           return false;
2867                         }
2868                       else
2869                         {
2870                           r_symndx = sec->output_section->target_index;
2871                           BFD_ASSERT (r_symndx != 0);
2872                         }
2873                     }
2874                   else
2875                     {
2876                       if (finfo->indices[r_symndx] == -1)
2877                         {
2878                           unsigned long link;
2879                           const char *name;
2880                           asection *osec;
2881
2882                           if (finfo->info->strip == strip_all)
2883                             {
2884                               /* You can't do ld -r -s.  */
2885                               bfd_set_error (bfd_error_invalid_operation);
2886                               return false;
2887                             }
2888
2889                           /* This symbol was skipped earlier, but
2890                              since it is needed by a reloc, we
2891                              must output it now.  */
2892                           link = symtab_hdr->sh_link;
2893                           name = bfd_elf_string_from_elf_section (input_bfd,
2894                                                                   link,
2895                                                                   isym->st_name);
2896                           if (name == NULL)
2897                             return false;
2898
2899                           osec = sec->output_section;
2900                           isym->st_shndx =
2901                             _bfd_elf_section_from_bfd_section (output_bfd,
2902                                                                osec);
2903                           if (isym->st_shndx == (unsigned short) -1)
2904                             return false;
2905
2906                           isym->st_value += sec->output_offset;
2907                           if (! finfo->info->relocateable)
2908                             isym->st_value += osec->vma;
2909
2910                           finfo->indices[r_symndx] = output_bfd->symcount;
2911
2912                           if (! elf_link_output_sym (finfo, name, isym, sec))
2913                             return false;
2914                         }
2915
2916                       r_symndx = finfo->indices[r_symndx];
2917                     }
2918
2919                   irela->r_info = ELF_R_INFO (r_symndx,
2920                                               ELF_R_TYPE (irela->r_info));
2921                 }
2922
2923               /* Swap out the relocs.  */
2924               input_rel_hdr = &elf_section_data (o)->rel_hdr;
2925               output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
2926               BFD_ASSERT (output_rel_hdr->sh_entsize
2927                           == input_rel_hdr->sh_entsize);
2928               irela = internal_relocs;
2929               irelaend = irela + o->reloc_count;
2930               if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2931                 {
2932                   Elf_External_Rel *erel;
2933
2934                   erel = ((Elf_External_Rel *) output_rel_hdr->contents
2935                           + o->output_section->reloc_count);
2936                   for (; irela < irelaend; irela++, erel++)
2937                     {
2938                       Elf_Internal_Rel irel;
2939
2940                       irel.r_offset = irela->r_offset;
2941                       irel.r_info = irela->r_info;
2942                       BFD_ASSERT (irela->r_addend == 0);
2943                       elf_swap_reloc_out (output_bfd, &irel, erel);
2944                     }
2945                 }
2946               else
2947                 {
2948                   Elf_External_Rela *erela;
2949
2950                   BFD_ASSERT (input_rel_hdr->sh_entsize
2951                               == sizeof (Elf_External_Rela));
2952                   erela = ((Elf_External_Rela *) output_rel_hdr->contents
2953                            + o->output_section->reloc_count);
2954                   for (; irela < irelaend; irela++, erela++)
2955                     elf_swap_reloca_out (output_bfd, irela, erela);
2956                 }
2957
2958               o->output_section->reloc_count += o->reloc_count;
2959             }
2960         }
2961
2962       /* Write out the modified section contents.  */
2963       if (! bfd_set_section_contents (output_bfd, o->output_section,
2964                                       finfo->contents, o->output_offset,
2965                                       (o->_cooked_size != 0
2966                                        ? o->_cooked_size
2967                                        : o->_raw_size)))
2968         return false;
2969     }
2970
2971   return true;
2972 }
2973
2974 /* Generate a reloc when linking an ELF file.  This is a reloc
2975    requested by the linker, and does come from any input file.  This
2976    is used to build constructor and destructor tables when linking
2977    with -Ur.  */
2978
2979 static boolean
2980 elf_reloc_link_order (output_bfd, info, output_section, link_order)
2981      bfd *output_bfd;
2982      struct bfd_link_info *info;
2983      asection *output_section;
2984      struct bfd_link_order *link_order;
2985 {
2986   reloc_howto_type *howto;
2987   long indx;
2988   bfd_vma offset;
2989   struct elf_link_hash_entry **rel_hash_ptr;
2990   Elf_Internal_Shdr *rel_hdr;
2991
2992   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
2993   if (howto == NULL)
2994     {
2995       bfd_set_error (bfd_error_bad_value);
2996       return false;
2997     }
2998
2999   /* If this is an inplace reloc, we must write the addend into the
3000      object file.  */
3001   if (howto->partial_inplace
3002       && link_order->u.reloc.p->addend != 0)
3003     {
3004       bfd_size_type size;
3005       bfd_reloc_status_type rstat;
3006       bfd_byte *buf;
3007       boolean ok;
3008
3009       size = bfd_get_reloc_size (howto);
3010       buf = (bfd_byte *) bfd_zmalloc (size);
3011       if (buf == (bfd_byte *) NULL)
3012         return false;
3013       rstat = _bfd_relocate_contents (howto, output_bfd,
3014                                       link_order->u.reloc.p->addend, buf);
3015       switch (rstat)
3016         {
3017         case bfd_reloc_ok:
3018           break;
3019         default:
3020         case bfd_reloc_outofrange:
3021           abort ();
3022         case bfd_reloc_overflow:
3023           if (! ((*info->callbacks->reloc_overflow)
3024                  (info,
3025                   (link_order->type == bfd_section_reloc_link_order
3026                    ? bfd_section_name (output_bfd,
3027                                        link_order->u.reloc.p->u.section)
3028                    : link_order->u.reloc.p->u.name),
3029                   howto->name, link_order->u.reloc.p->addend,
3030                   (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
3031             {
3032               free (buf);
3033               return false;
3034             }
3035           break;
3036         }
3037       ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
3038                                      (file_ptr) link_order->offset, size);
3039       free (buf);
3040       if (! ok)
3041         return false;
3042     }
3043
3044   /* Figure out the symbol index.  */
3045   rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
3046                   + output_section->reloc_count);
3047   if (link_order->type == bfd_section_reloc_link_order)
3048     {
3049       indx = link_order->u.reloc.p->u.section->target_index;
3050       BFD_ASSERT (indx != 0);
3051       *rel_hash_ptr = NULL;
3052     }
3053   else
3054     {
3055       struct elf_link_hash_entry *h;
3056
3057       h = elf_link_hash_lookup (elf_hash_table (info),
3058                                 link_order->u.reloc.p->u.name,
3059                                 false, false, true);
3060       if (h != NULL)
3061         {
3062           /* Setting the index to -2 tells elf_link_output_extsym that
3063              this symbol is used by a reloc.  */
3064           h->indx = -2;
3065           *rel_hash_ptr = h;
3066           indx = 0;
3067         }
3068       else
3069         {
3070           if (! ((*info->callbacks->unattached_reloc)
3071                  (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
3072                   (asection *) NULL, (bfd_vma) 0)))
3073             return false;
3074           indx = 0;
3075         }
3076     }
3077
3078   /* The address of a reloc is relative to the section in a
3079      relocateable file, and is a virtual address in an executable
3080      file.  */
3081   offset = link_order->offset;
3082   if (! info->relocateable)
3083     offset += output_section->vma;
3084
3085   rel_hdr = &elf_section_data (output_section)->rel_hdr;
3086
3087   if (rel_hdr->sh_type == SHT_REL)
3088     {
3089       Elf_Internal_Rel irel;
3090       Elf_External_Rel *erel;
3091
3092       irel.r_offset = offset;
3093       irel.r_info = ELF_R_INFO (indx, howto->type);
3094       erel = ((Elf_External_Rel *) rel_hdr->contents
3095               + output_section->reloc_count);
3096       elf_swap_reloc_out (output_bfd, &irel, erel);
3097     }
3098   else
3099     {
3100       Elf_Internal_Rela irela;
3101       Elf_External_Rela *erela;
3102
3103       irela.r_offset = offset;
3104       irela.r_info = ELF_R_INFO (indx, howto->type);
3105       irela.r_addend = link_order->u.reloc.p->addend;
3106       erela = ((Elf_External_Rela *) rel_hdr->contents
3107                + output_section->reloc_count);
3108       elf_swap_reloca_out (output_bfd, &irela, erela);
3109     }
3110
3111   ++output_section->reloc_count;
3112
3113   return true;
3114 }
3115