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