* elflink.h (NAME(bfd_elf,size_dynamic_sections)): Only create
[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       struct elf_link_hash_entry *h;
1349       bfd_size_type strsize;
1350
1351       *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
1352       BFD_ASSERT (*sinterpptr != NULL || info->shared);
1353
1354       if (soname != NULL)
1355         {
1356           bfd_size_type indx;
1357
1358           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, soname,
1359                                      true, true);
1360           if (indx == (bfd_size_type) -1
1361               || ! elf_add_dynamic_entry (info, DT_SONAME, indx))
1362             return false;
1363         }      
1364
1365       if (info->symbolic)
1366         {
1367           if (! elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
1368             return false;
1369         }
1370
1371       if (rpath != NULL)
1372         {
1373           bfd_size_type indx;
1374
1375           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
1376                                      true, true);
1377           if (indx == (bfd_size_type) -1
1378               || ! elf_add_dynamic_entry (info, DT_RPATH, indx))
1379             return false;
1380         }
1381
1382       /* Find all symbols which were defined in a dynamic object and make
1383          the backend pick a reasonable value for them.  */
1384       eif.failed = false;
1385       eif.info = info;
1386       elf_link_hash_traverse (elf_hash_table (info),
1387                               elf_adjust_dynamic_symbol,
1388                               (PTR) &eif);
1389       if (eif.failed)
1390         return false;
1391
1392       /* Add some entries to the .dynamic section.  We fill in some of the
1393          values later, in elf_bfd_final_link, but we must add the entries
1394          now so that we know the final size of the .dynamic section.  */
1395       h =  elf_link_hash_lookup (elf_hash_table (info), "_init", false,
1396                                 false, false);
1397       if (h != NULL
1398           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1399                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1400         {
1401           if (! elf_add_dynamic_entry (info, DT_INIT, 0))
1402             return false;
1403         }
1404       h =  elf_link_hash_lookup (elf_hash_table (info), "_fini", false,
1405                                  false, false);
1406       if (h != NULL
1407           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1408                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1409         {
1410           if (! elf_add_dynamic_entry (info, DT_FINI, 0))
1411             return false;
1412         }
1413       strsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1414       if (! elf_add_dynamic_entry (info, DT_HASH, 0)
1415           || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
1416           || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
1417           || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
1418           || ! elf_add_dynamic_entry (info, DT_SYMENT,
1419                                       sizeof (Elf_External_Sym)))
1420         return false;
1421     }
1422
1423   /* The backend must work out the sizes of all the other dynamic
1424      sections.  */
1425   bed = get_elf_backend_data (output_bfd);
1426   if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
1427     return false;
1428
1429   if (elf_hash_table (info)->dynamic_sections_created)
1430     {
1431       size_t dynsymcount;
1432       asection *s;
1433       size_t i;
1434       size_t bucketcount = 0;
1435       Elf_Internal_Sym isym;
1436
1437       /* Set the size of the .dynsym and .hash sections.  We counted
1438          the number of dynamic symbols in elf_link_add_object_symbols.
1439          We will build the contents of .dynsym and .hash when we build
1440          the final symbol table, because until then we do not know the
1441          correct value to give the symbols.  We built the .dynstr
1442          section as we went along in elf_link_add_object_symbols.  */
1443       dynsymcount = elf_hash_table (info)->dynsymcount;
1444       s = bfd_get_section_by_name (dynobj, ".dynsym");
1445       BFD_ASSERT (s != NULL);
1446       s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
1447       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1448       if (s->contents == NULL && s->_raw_size != 0)
1449         {
1450           bfd_set_error (bfd_error_no_memory);
1451           return false;
1452         }
1453
1454       /* The first entry in .dynsym is a dummy symbol.  */
1455       isym.st_value = 0;
1456       isym.st_size = 0;
1457       isym.st_name = 0;
1458       isym.st_info = 0;
1459       isym.st_other = 0;
1460       isym.st_shndx = 0;
1461       elf_swap_symbol_out (output_bfd, &isym,
1462                            (PTR) (Elf_External_Sym *) s->contents);
1463
1464       for (i = 0; elf_buckets[i] != 0; i++)
1465         {
1466           bucketcount = elf_buckets[i];
1467           if (dynsymcount < elf_buckets[i + 1])
1468             break;
1469         }
1470
1471       s = bfd_get_section_by_name (dynobj, ".hash");
1472       BFD_ASSERT (s != NULL);
1473       s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
1474       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1475       if (s->contents == NULL)
1476         {
1477           bfd_set_error (bfd_error_no_memory);
1478           return false;
1479         }
1480       memset (s->contents, 0, (size_t) s->_raw_size);
1481
1482       put_word (output_bfd, bucketcount, s->contents);
1483       put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
1484
1485       elf_hash_table (info)->bucketcount = bucketcount;
1486
1487       s = bfd_get_section_by_name (dynobj, ".dynstr");
1488       BFD_ASSERT (s != NULL);
1489       s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1490
1491       if (! elf_add_dynamic_entry (info, DT_NULL, 0))
1492         return false;
1493     }
1494
1495   return true;
1496 }
1497
1498 /* This routine is used to export all defined symbols into the dynamic
1499    symbol table.  It is called via elf_link_hash_traverse.  */
1500
1501 static boolean
1502 elf_export_symbol (h, data)
1503      struct elf_link_hash_entry *h;
1504      PTR data;
1505 {
1506   struct elf_info_failed *eif = (struct elf_info_failed *) data;
1507
1508   if (h->dynindx == -1
1509       && (h->elf_link_hash_flags
1510           & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
1511     {
1512       if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
1513         {
1514           eif->failed = true;
1515           return false;
1516         }
1517     }
1518
1519   return true;
1520 }
1521
1522 /* Make the backend pick a good value for a dynamic symbol.  This is
1523    called via elf_link_hash_traverse, and also calls itself
1524    recursively.  */
1525
1526 static boolean
1527 elf_adjust_dynamic_symbol (h, data)
1528      struct elf_link_hash_entry *h;
1529      PTR data;
1530 {
1531   struct elf_info_failed *eif = (struct elf_info_failed *) data;
1532   bfd *dynobj;
1533   struct elf_backend_data *bed;
1534
1535   /* If -Bsymbolic was used (which means to bind references to global
1536      symbols to the definition within the shared object), and this
1537      symbol was defined in a regular object, then it actually doesn't
1538      need a PLT entry.  */
1539   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
1540       && eif->info->shared
1541       && eif->info->symbolic
1542       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1543     h->elf_link_hash_flags &=~ ELF_LINK_HASH_NEEDS_PLT;
1544
1545   /* If this symbol does not require a PLT entry, and it is not
1546      defined by a dynamic object, or is not referenced by a regular
1547      object, ignore it.  We do have to handle a weak defined symbol,
1548      even if no regular object refers to it, if we decided to add it
1549      to the dynamic symbol table.  FIXME: Do we normally need to worry
1550      about symbols which are defined by one dynamic object and
1551      referenced by another one?  */
1552   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
1553       && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
1554           || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
1555           || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
1556               && (h->weakdef == NULL || h->weakdef->dynindx == -1))))
1557     return true;
1558
1559   /* If we've already adjusted this symbol, don't do it again.  This
1560      can happen via a recursive call.  */
1561   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
1562     return true;
1563
1564   /* Don't look at this symbol again.  Note that we must set this
1565      after checking the above conditions, because we may look at a
1566      symbol once, decide not to do anything, and then get called
1567      recursively later after REF_REGULAR is set below.  */
1568   h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
1569
1570   /* If this is a weak definition, and we know a real definition, and
1571      the real symbol is not itself defined by a regular object file,
1572      then get a good value for the real definition.  We handle the
1573      real symbol first, for the convenience of the backend routine.
1574
1575      Note that there is a confusing case here.  If the real definition
1576      is defined by a regular object file, we don't get the real symbol
1577      from the dynamic object, but we do get the weak symbol.  If the
1578      processor backend uses a COPY reloc, then if some routine in the
1579      dynamic object changes the real symbol, we will not see that
1580      change in the corresponding weak symbol.  This is the way other
1581      ELF linkers work as well, and seems to be a result of the shared
1582      library model.
1583
1584      I will clarify this issue.  Most SVR4 shared libraries define the
1585      variable _timezone and define timezone as a weak synonym.  The
1586      tzset call changes _timezone.  If you write
1587        extern int timezone;
1588        int _timezone = 5;
1589        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
1590      you might expect that, since timezone is a synonym for _timezone,
1591      the same number will print both times.  However, if the processor
1592      backend uses a COPY reloc, then actually timezone will be copied
1593      into your process image, and, since you define _timezone
1594      yourself, _timezone will not.  Thus timezone and _timezone will
1595      wind up at different memory locations.  The tzset call will set
1596      _timezone, leaving timezone unchanged.  */
1597
1598   if (h->weakdef != NULL)
1599     {
1600       struct elf_link_hash_entry *weakdef;
1601
1602       BFD_ASSERT (h->root.type == bfd_link_hash_defined
1603                   || h->root.type == bfd_link_hash_defweak);
1604       weakdef = h->weakdef;
1605       BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
1606                   || weakdef->root.type == bfd_link_hash_defweak);
1607       BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
1608       if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1609         {
1610           /* This symbol is defined by a regular object file, so we
1611              will not do anything special.  Clear weakdef for the
1612              convenience of the processor backend.  */
1613           h->weakdef = NULL;
1614         }
1615       else
1616         {
1617           /* There is an implicit reference by a regular object file
1618              via the weak symbol.  */
1619           weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
1620           if (! elf_adjust_dynamic_symbol (weakdef, (PTR) eif))
1621             return false;
1622         }
1623     }
1624
1625   dynobj = elf_hash_table (eif->info)->dynobj;
1626   bed = get_elf_backend_data (dynobj);
1627   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
1628     {
1629       eif->failed = true;
1630       return false;
1631     }
1632
1633   return true;
1634 }
1635 \f
1636 /* Final phase of ELF linker.  */
1637
1638 /* A structure we use to avoid passing large numbers of arguments.  */
1639
1640 struct elf_final_link_info
1641 {
1642   /* General link information.  */
1643   struct bfd_link_info *info;
1644   /* Output BFD.  */
1645   bfd *output_bfd;
1646   /* Symbol string table.  */
1647   struct bfd_strtab_hash *symstrtab;
1648   /* .dynsym section.  */
1649   asection *dynsym_sec;
1650   /* .hash section.  */
1651   asection *hash_sec;
1652   /* Buffer large enough to hold contents of any section.  */
1653   bfd_byte *contents;
1654   /* Buffer large enough to hold external relocs of any section.  */
1655   PTR external_relocs;
1656   /* Buffer large enough to hold internal relocs of any section.  */
1657   Elf_Internal_Rela *internal_relocs;
1658   /* Buffer large enough to hold external local symbols of any input
1659      BFD.  */
1660   Elf_External_Sym *external_syms;
1661   /* Buffer large enough to hold internal local symbols of any input
1662      BFD.  */
1663   Elf_Internal_Sym *internal_syms;
1664   /* Array large enough to hold a symbol index for each local symbol
1665      of any input BFD.  */
1666   long *indices;
1667   /* Array large enough to hold a section pointer for each local
1668      symbol of any input BFD.  */
1669   asection **sections;
1670   /* Buffer to hold swapped out symbols.  */
1671   Elf_External_Sym *symbuf;
1672   /* Number of swapped out symbols in buffer.  */
1673   size_t symbuf_count;
1674   /* Number of symbols which fit in symbuf.  */
1675   size_t symbuf_size;
1676 };
1677
1678 static boolean elf_link_output_sym
1679   PARAMS ((struct elf_final_link_info *, const char *,
1680            Elf_Internal_Sym *, asection *));
1681 static boolean elf_link_flush_output_syms
1682   PARAMS ((struct elf_final_link_info *));
1683 static boolean elf_link_output_extsym
1684   PARAMS ((struct elf_link_hash_entry *, PTR));
1685 static boolean elf_link_input_bfd
1686   PARAMS ((struct elf_final_link_info *, bfd *));
1687 static boolean elf_reloc_link_order
1688   PARAMS ((bfd *, struct bfd_link_info *, asection *,
1689            struct bfd_link_order *));
1690
1691 /* This struct is used to pass information to routines called via
1692    elf_link_hash_traverse which must return failure.  */
1693
1694 struct elf_finfo_failed
1695 {
1696   boolean failed;
1697   struct elf_final_link_info *finfo;
1698 };  
1699
1700 /* Do the final step of an ELF link.  */
1701
1702 boolean
1703 elf_bfd_final_link (abfd, info)
1704      bfd *abfd;
1705      struct bfd_link_info *info;
1706 {
1707   boolean dynamic;
1708   bfd *dynobj;
1709   struct elf_final_link_info finfo;
1710   register asection *o;
1711   register struct bfd_link_order *p;
1712   register bfd *sub;
1713   size_t max_contents_size;
1714   size_t max_external_reloc_size;
1715   size_t max_internal_reloc_count;
1716   size_t max_sym_count;
1717   file_ptr off;
1718   Elf_Internal_Sym elfsym;
1719   unsigned int i;
1720   Elf_Internal_Shdr *symtab_hdr;
1721   Elf_Internal_Shdr *symstrtab_hdr;
1722   struct elf_backend_data *bed = get_elf_backend_data (abfd);
1723   struct elf_finfo_failed eif;
1724
1725   if (info->shared)
1726     abfd->flags |= DYNAMIC;
1727
1728   dynamic = elf_hash_table (info)->dynamic_sections_created;
1729   dynobj = elf_hash_table (info)->dynobj;
1730
1731   finfo.info = info;
1732   finfo.output_bfd = abfd;
1733   finfo.symstrtab = elf_stringtab_init ();
1734   if (finfo.symstrtab == NULL)
1735     return false;
1736   if (! dynamic)
1737     {
1738       finfo.dynsym_sec = NULL;
1739       finfo.hash_sec = NULL;
1740     }
1741   else
1742     {
1743       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
1744       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
1745       BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
1746     }
1747   finfo.contents = NULL;
1748   finfo.external_relocs = NULL;
1749   finfo.internal_relocs = NULL;
1750   finfo.external_syms = NULL;
1751   finfo.internal_syms = NULL;
1752   finfo.indices = NULL;
1753   finfo.sections = NULL;
1754   finfo.symbuf = NULL;
1755   finfo.symbuf_count = 0;
1756
1757   /* Count up the number of relocations we will output for each output
1758      section, so that we know the sizes of the reloc sections.  We
1759      also figure out some maximum sizes.  */
1760   max_contents_size = 0;
1761   max_external_reloc_size = 0;
1762   max_internal_reloc_count = 0;
1763   max_sym_count = 0;
1764   for (o = abfd->sections; o != (asection *) NULL; o = o->next)
1765     {
1766       o->reloc_count = 0;
1767
1768       for (p = o->link_order_head; p != NULL; p = p->next)
1769         {
1770           if (p->type == bfd_section_reloc_link_order
1771               || p->type == bfd_symbol_reloc_link_order)
1772             ++o->reloc_count;
1773           else if (p->type == bfd_indirect_link_order)
1774             {
1775               asection *sec;
1776
1777               sec = p->u.indirect.section;
1778
1779               if (info->relocateable)
1780                 o->reloc_count += sec->reloc_count;
1781
1782               if (sec->_raw_size > max_contents_size)
1783                 max_contents_size = sec->_raw_size;
1784               if (sec->_cooked_size > max_contents_size)
1785                 max_contents_size = sec->_cooked_size;
1786
1787               /* We are interested in just local symbols, not all
1788                  symbols.  */
1789               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour)
1790                 {
1791                   size_t sym_count;
1792
1793                   if (elf_bad_symtab (sec->owner))
1794                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
1795                                  / sizeof (Elf_External_Sym));
1796                   else
1797                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
1798
1799                   if (sym_count > max_sym_count)
1800                     max_sym_count = sym_count;
1801
1802                   if ((sec->flags & SEC_RELOC) != 0)
1803                     {
1804                       size_t ext_size;
1805
1806                       ext_size = elf_section_data (sec)->rel_hdr.sh_size;
1807                       if (ext_size > max_external_reloc_size)
1808                         max_external_reloc_size = ext_size;
1809                       if (sec->reloc_count > max_internal_reloc_count)
1810                         max_internal_reloc_count = sec->reloc_count;
1811                     }
1812                 }
1813             }
1814         }
1815
1816       if (o->reloc_count > 0)
1817         o->flags |= SEC_RELOC;
1818       else
1819         {
1820           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
1821              set it (this is probably a bug) and if it is set
1822              assign_section_numbers will create a reloc section.  */
1823           o->flags &=~ SEC_RELOC;
1824         }
1825
1826       /* If the SEC_ALLOC flag is not set, force the section VMA to
1827          zero.  This is done in elf_fake_sections as well, but forcing
1828          the VMA to 0 here will ensure that relocs against these
1829          sections are handled correctly.  */
1830       if ((o->flags & SEC_ALLOC) == 0)
1831         o->vma = 0;
1832     }
1833
1834   /* Figure out the file positions for everything but the symbol table
1835      and the relocs.  We set symcount to force assign_section_numbers
1836      to create a symbol table.  */
1837   abfd->symcount = info->strip == strip_all ? 0 : 1;
1838   BFD_ASSERT (! abfd->output_has_begun);
1839   if (! _bfd_elf_compute_section_file_positions (abfd, info))
1840     goto error_return;
1841
1842   /* That created the reloc sections.  Set their sizes, and assign
1843      them file positions, and allocate some buffers.  */
1844   for (o = abfd->sections; o != NULL; o = o->next)
1845     {
1846       if ((o->flags & SEC_RELOC) != 0)
1847         {
1848           Elf_Internal_Shdr *rel_hdr;
1849           register struct elf_link_hash_entry **p, **pend;
1850
1851           rel_hdr = &elf_section_data (o)->rel_hdr;
1852
1853           rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
1854
1855           /* The contents field must last into write_object_contents,
1856              so we allocate it with bfd_alloc rather than malloc.  */
1857           rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
1858           if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
1859             {
1860               bfd_set_error (bfd_error_no_memory);
1861               goto error_return;
1862             }
1863
1864           p = ((struct elf_link_hash_entry **)
1865                malloc (o->reloc_count
1866                        * sizeof (struct elf_link_hash_entry *)));
1867           if (p == NULL && o->reloc_count != 0)
1868             {
1869               bfd_set_error (bfd_error_no_memory);
1870               goto error_return;
1871             }
1872           elf_section_data (o)->rel_hashes = p;
1873           pend = p + o->reloc_count;
1874           for (; p < pend; p++)
1875             *p = NULL;
1876
1877           /* Use the reloc_count field as an index when outputting the
1878              relocs.  */
1879           o->reloc_count = 0;
1880         }
1881     }
1882
1883   _bfd_elf_assign_file_positions_for_relocs (abfd);
1884
1885   /* We have now assigned file positions for all the sections except
1886      .symtab and .strtab.  We start the .symtab section at the current
1887      file position, and write directly to it.  We build the .strtab
1888      section in memory.  */
1889   abfd->symcount = 0;
1890   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1891   /* sh_name is set in prep_headers.  */
1892   symtab_hdr->sh_type = SHT_SYMTAB;
1893   symtab_hdr->sh_flags = 0;
1894   symtab_hdr->sh_addr = 0;
1895   symtab_hdr->sh_size = 0;
1896   symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
1897   /* sh_link is set in assign_section_numbers.  */
1898   /* sh_info is set below.  */
1899   /* sh_offset is set just below.  */
1900   symtab_hdr->sh_addralign = 4;  /* FIXME: system dependent?  */
1901
1902   off = elf_tdata (abfd)->next_file_pos;
1903   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
1904
1905   /* Note that at this point elf_tdata (abfd)->next_file_pos is
1906      incorrect.  We do not yet know the size of the .symtab section.
1907      We correct next_file_pos below, after we do know the size.  */
1908
1909   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
1910      continuously seeking to the right position in the file.  */
1911   if (! info->keep_memory || max_sym_count < 20)
1912     finfo.symbuf_size = 20;
1913   else
1914     finfo.symbuf_size = max_sym_count;
1915   finfo.symbuf = ((Elf_External_Sym *)
1916                   malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
1917   if (finfo.symbuf == NULL)
1918     {
1919       bfd_set_error (bfd_error_no_memory);
1920       goto error_return;
1921     }
1922
1923   /* Start writing out the symbol table.  The first symbol is always a
1924      dummy symbol.  */
1925   elfsym.st_value = 0;
1926   elfsym.st_size = 0;
1927   elfsym.st_info = 0;
1928   elfsym.st_other = 0;
1929   elfsym.st_shndx = SHN_UNDEF;
1930   if (! elf_link_output_sym (&finfo, (const char *) NULL,
1931                              &elfsym, bfd_und_section_ptr))
1932     goto error_return;
1933
1934 #if 0
1935   /* Some standard ELF linkers do this, but we don't because it causes
1936      bootstrap comparison failures.  */
1937   /* Output a file symbol for the output file as the second symbol.
1938      We output this even if we are discarding local symbols, although
1939      I'm not sure if this is correct.  */
1940   elfsym.st_value = 0;
1941   elfsym.st_size = 0;
1942   elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
1943   elfsym.st_other = 0;
1944   elfsym.st_shndx = SHN_ABS;
1945   if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
1946                              &elfsym, bfd_abs_section_ptr))
1947     goto error_return;
1948 #endif
1949
1950   /* Output a symbol for each section.  We output these even if we are
1951      discarding local symbols, since they are used for relocs.  These
1952      symbols have no names.  We store the index of each one in the
1953      index field of the section, so that we can find it again when
1954      outputting relocs.  */
1955   elfsym.st_value = 0;
1956   elfsym.st_size = 0;
1957   elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
1958   elfsym.st_other = 0;
1959   for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
1960     {
1961       o = section_from_elf_index (abfd, i);
1962       if (o != NULL)
1963         o->target_index = abfd->symcount;
1964       elfsym.st_shndx = i;
1965       if (! elf_link_output_sym (&finfo, (const char *) NULL,
1966                                  &elfsym, o))
1967         goto error_return;
1968     }
1969
1970   /* Allocate some memory to hold information read in from the input
1971      files.  */
1972   finfo.contents = (bfd_byte *) malloc (max_contents_size);
1973   finfo.external_relocs = (PTR) malloc (max_external_reloc_size);
1974   finfo.internal_relocs = ((Elf_Internal_Rela *)
1975                            malloc (max_internal_reloc_count
1976                                    * sizeof (Elf_Internal_Rela)));
1977   finfo.external_syms = ((Elf_External_Sym *)
1978                          malloc (max_sym_count * sizeof (Elf_External_Sym)));
1979   finfo.internal_syms = ((Elf_Internal_Sym *)
1980                          malloc (max_sym_count * sizeof (Elf_Internal_Sym)));
1981   finfo.indices = (long *) malloc (max_sym_count * sizeof (long));
1982   finfo.sections = (asection **) malloc (max_sym_count * sizeof (asection *));
1983   if ((finfo.contents == NULL && max_contents_size != 0)
1984       || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
1985       || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
1986       || (finfo.external_syms == NULL && max_sym_count != 0)
1987       || (finfo.internal_syms == NULL && max_sym_count != 0)
1988       || (finfo.indices == NULL && max_sym_count != 0)
1989       || (finfo.sections == NULL && max_sym_count != 0))
1990     {
1991       bfd_set_error (bfd_error_no_memory);
1992       goto error_return;
1993     }
1994
1995   /* Since ELF permits relocations to be against local symbols, we
1996      must have the local symbols available when we do the relocations.
1997      Since we would rather only read the local symbols once, and we
1998      would rather not keep them in memory, we handle all the
1999      relocations for a single input file at the same time.
2000
2001      Unfortunately, there is no way to know the total number of local
2002      symbols until we have seen all of them, and the local symbol
2003      indices precede the global symbol indices.  This means that when
2004      we are generating relocateable output, and we see a reloc against
2005      a global symbol, we can not know the symbol index until we have
2006      finished examining all the local symbols to see which ones we are
2007      going to output.  To deal with this, we keep the relocations in
2008      memory, and don't output them until the end of the link.  This is
2009      an unfortunate waste of memory, but I don't see a good way around
2010      it.  Fortunately, it only happens when performing a relocateable
2011      link, which is not the common case.  FIXME: If keep_memory is set
2012      we could write the relocs out and then read them again; I don't
2013      know how bad the memory loss will be.  */
2014
2015   for (sub = info->input_bfds; sub != NULL; sub = sub->next)
2016     sub->output_has_begun = false;
2017   for (o = abfd->sections; o != NULL; o = o->next)
2018     {
2019       for (p = o->link_order_head; p != NULL; p = p->next)
2020         {
2021           if (p->type == bfd_indirect_link_order
2022               && (bfd_get_flavour (p->u.indirect.section->owner)
2023                   == bfd_target_elf_flavour))
2024             {
2025               sub = p->u.indirect.section->owner;
2026               if (! sub->output_has_begun)
2027                 {
2028                   if (! elf_link_input_bfd (&finfo, sub))
2029                     goto error_return;
2030                   sub->output_has_begun = true;
2031                 }
2032             }
2033           else if (p->type == bfd_section_reloc_link_order
2034                    || p->type == bfd_symbol_reloc_link_order)
2035             {
2036               if (! elf_reloc_link_order (abfd, info, o, p))
2037                 goto error_return;
2038             }
2039           else
2040             {
2041               if (! _bfd_default_link_order (abfd, info, o, p))
2042                 goto error_return;
2043             }
2044         }
2045     }
2046
2047   /* That wrote out all the local symbols.  Finish up the symbol table
2048      with the global symbols.  */
2049
2050   /* The sh_info field records the index of the first non local
2051      symbol.  */
2052   symtab_hdr->sh_info = abfd->symcount;
2053   if (dynamic)
2054     elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
2055
2056   /* We get the global symbols from the hash table.  */
2057   eif.failed = false;
2058   eif.finfo = &finfo;
2059   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
2060                           (PTR) &eif);
2061   if (eif.failed)
2062     return false;
2063
2064   /* Flush all symbols to the file.  */
2065   if (! elf_link_flush_output_syms (&finfo))
2066     return false;
2067
2068   /* Now we know the size of the symtab section.  */
2069   off += symtab_hdr->sh_size;
2070
2071   /* Finish up and write out the symbol string table (.strtab)
2072      section.  */
2073   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2074   /* sh_name was set in prep_headers.  */
2075   symstrtab_hdr->sh_type = SHT_STRTAB;
2076   symstrtab_hdr->sh_flags = 0;
2077   symstrtab_hdr->sh_addr = 0;
2078   symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
2079   symstrtab_hdr->sh_entsize = 0;
2080   symstrtab_hdr->sh_link = 0;
2081   symstrtab_hdr->sh_info = 0;
2082   /* sh_offset is set just below.  */
2083   symstrtab_hdr->sh_addralign = 1;
2084
2085   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true);
2086   elf_tdata (abfd)->next_file_pos = off;
2087
2088   if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
2089       || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
2090     return false;
2091
2092   /* Adjust the relocs to have the correct symbol indices.  */
2093   for (o = abfd->sections; o != NULL; o = o->next)
2094     {
2095       struct elf_link_hash_entry **rel_hash;
2096       Elf_Internal_Shdr *rel_hdr;
2097
2098       if ((o->flags & SEC_RELOC) == 0)
2099         continue;
2100
2101       rel_hash = elf_section_data (o)->rel_hashes;
2102       rel_hdr = &elf_section_data (o)->rel_hdr;
2103       for (i = 0; i < o->reloc_count; i++, rel_hash++)
2104         {
2105           if (*rel_hash == NULL)
2106             continue;
2107               
2108           BFD_ASSERT ((*rel_hash)->indx >= 0);
2109
2110           if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2111             {
2112               Elf_External_Rel *erel;
2113               Elf_Internal_Rel irel;
2114
2115               erel = (Elf_External_Rel *) rel_hdr->contents + i;
2116               elf_swap_reloc_in (abfd, erel, &irel);
2117               irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
2118                                         ELF_R_TYPE (irel.r_info));
2119               elf_swap_reloc_out (abfd, &irel, erel);
2120             }
2121           else
2122             {
2123               Elf_External_Rela *erela;
2124               Elf_Internal_Rela irela;
2125
2126               BFD_ASSERT (rel_hdr->sh_entsize
2127                           == sizeof (Elf_External_Rela));
2128
2129               erela = (Elf_External_Rela *) rel_hdr->contents + i;
2130               elf_swap_reloca_in (abfd, erela, &irela);
2131               irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
2132                                          ELF_R_TYPE (irela.r_info));
2133               elf_swap_reloca_out (abfd, &irela, erela);
2134             }
2135         }
2136
2137       /* Set the reloc_count field to 0 to prevent write_relocs from
2138          trying to swap the relocs out itself.  */
2139       o->reloc_count = 0;
2140     }
2141
2142   /* If we are linking against a dynamic object, or generating a
2143      shared library, finish up the dynamic linking information.  */
2144   if (dynamic)
2145     {
2146       Elf_External_Dyn *dyncon, *dynconend;
2147
2148       /* Fix up .dynamic entries.  */
2149       o = bfd_get_section_by_name (dynobj, ".dynamic");
2150       BFD_ASSERT (o != NULL);
2151
2152       dyncon = (Elf_External_Dyn *) o->contents;
2153       dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
2154       for (; dyncon < dynconend; dyncon++)
2155         {
2156           Elf_Internal_Dyn dyn;
2157           const char *name;
2158           unsigned int type;
2159
2160           elf_swap_dyn_in (dynobj, dyncon, &dyn);
2161
2162           switch (dyn.d_tag)
2163             {
2164             default:
2165               break;
2166
2167               /* SVR4 linkers seem to set DT_INIT and DT_FINI based on
2168                  magic _init and _fini symbols.  This is pretty ugly,
2169                  but we are compatible.  */
2170             case DT_INIT:
2171               name = "_init";
2172               goto get_sym;
2173             case DT_FINI:
2174               name = "_fini";
2175             get_sym:
2176               {
2177                 struct elf_link_hash_entry *h;
2178
2179                 h = elf_link_hash_lookup (elf_hash_table (info), name,
2180                                           false, false, true);
2181                 if (h != NULL
2182                     && (h->root.type == bfd_link_hash_defined
2183                         || h->root.type == bfd_link_hash_defweak))
2184                   {
2185                     dyn.d_un.d_val = h->root.u.def.value;
2186                     o = h->root.u.def.section;
2187                     if (o->output_section != NULL)
2188                       dyn.d_un.d_val += (o->output_section->vma
2189                                          + o->output_offset);
2190                     else
2191                       {
2192                         /* The symbol is imported from another shared
2193                            library and does not apply to this one.  */
2194                         dyn.d_un.d_val = 0;
2195                       }
2196
2197                     elf_swap_dyn_out (dynobj, &dyn, dyncon);
2198                   }
2199               }
2200               break;
2201
2202             case DT_HASH:
2203               name = ".hash";
2204               goto get_vma;
2205             case DT_STRTAB:
2206               name = ".dynstr";
2207               goto get_vma;
2208             case DT_SYMTAB:
2209               name = ".dynsym";
2210             get_vma:
2211               o = bfd_get_section_by_name (abfd, name);
2212               BFD_ASSERT (o != NULL);
2213               dyn.d_un.d_ptr = o->vma;
2214               elf_swap_dyn_out (dynobj, &dyn, dyncon);
2215               break;
2216
2217             case DT_REL:
2218             case DT_RELA:
2219             case DT_RELSZ:
2220             case DT_RELASZ:
2221               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
2222                 type = SHT_REL;
2223               else
2224                 type = SHT_RELA;
2225               dyn.d_un.d_val = 0;
2226               for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
2227                 {
2228                   Elf_Internal_Shdr *hdr;
2229
2230                   hdr = elf_elfsections (abfd)[i];
2231                   if (hdr->sh_type == type
2232                       && (hdr->sh_flags & SHF_ALLOC) != 0)
2233                     {
2234                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
2235                         dyn.d_un.d_val += hdr->sh_size;
2236                       else
2237                         {
2238                           if (dyn.d_un.d_val == 0
2239                               || hdr->sh_addr < dyn.d_un.d_val)
2240                             dyn.d_un.d_val = hdr->sh_addr;
2241                         }
2242                     }
2243                 }
2244               elf_swap_dyn_out (dynobj, &dyn, dyncon);
2245               break;
2246             }
2247         }
2248     }
2249
2250   /* If we have created any dynamic sections, then output them.  */
2251   if (dynobj != NULL)
2252     {
2253       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
2254         goto error_return;
2255
2256       for (o = dynobj->sections; o != NULL; o = o->next)
2257         {
2258           if ((o->flags & SEC_HAS_CONTENTS) == 0
2259               || o->_raw_size == 0)
2260             continue;
2261           if ((o->flags & SEC_IN_MEMORY) == 0)
2262             {
2263               /* At this point, we are only interested in sections
2264                  created by elf_link_create_dynamic_sections.  FIXME:
2265                  This test is fragile.  */
2266               continue;
2267             }
2268           if ((elf_section_data (o->output_section)->this_hdr.sh_type
2269                != SHT_STRTAB)
2270               || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
2271             {
2272               if (! bfd_set_section_contents (abfd, o->output_section,
2273                                               o->contents, o->output_offset,
2274                                               o->_raw_size))
2275                 goto error_return;
2276             }
2277           else
2278             {
2279               file_ptr off;
2280
2281               /* The contents of the .dynstr section are actually in a
2282                  stringtab.  */
2283               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
2284               if (bfd_seek (abfd, off, SEEK_SET) != 0
2285                   || ! _bfd_stringtab_emit (abfd,
2286                                             elf_hash_table (info)->dynstr))
2287                 goto error_return;
2288             }
2289         }
2290     }
2291
2292   if (finfo.symstrtab != NULL)
2293     _bfd_stringtab_free (finfo.symstrtab);
2294   if (finfo.contents != NULL)
2295     free (finfo.contents);
2296   if (finfo.external_relocs != NULL)
2297     free (finfo.external_relocs);
2298   if (finfo.internal_relocs != NULL)
2299     free (finfo.internal_relocs);
2300   if (finfo.external_syms != NULL)
2301     free (finfo.external_syms);
2302   if (finfo.internal_syms != NULL)
2303     free (finfo.internal_syms);
2304   if (finfo.indices != NULL)
2305     free (finfo.indices);
2306   if (finfo.sections != NULL)
2307     free (finfo.sections);
2308   if (finfo.symbuf != NULL)
2309     free (finfo.symbuf);
2310   for (o = abfd->sections; o != NULL; o = o->next)
2311     {
2312       if ((o->flags & SEC_RELOC) != 0
2313           && elf_section_data (o)->rel_hashes != NULL)
2314         free (elf_section_data (o)->rel_hashes);
2315     }
2316
2317   elf_tdata (abfd)->linker = true;
2318
2319   return true;
2320
2321  error_return:
2322   if (finfo.symstrtab != NULL)
2323     _bfd_stringtab_free (finfo.symstrtab);
2324   if (finfo.contents != NULL)
2325     free (finfo.contents);
2326   if (finfo.external_relocs != NULL)
2327     free (finfo.external_relocs);
2328   if (finfo.internal_relocs != NULL)
2329     free (finfo.internal_relocs);
2330   if (finfo.external_syms != NULL)
2331     free (finfo.external_syms);
2332   if (finfo.internal_syms != NULL)
2333     free (finfo.internal_syms);
2334   if (finfo.indices != NULL)
2335     free (finfo.indices);
2336   if (finfo.sections != NULL)
2337     free (finfo.sections);
2338   if (finfo.symbuf != NULL)
2339     free (finfo.symbuf);
2340   for (o = abfd->sections; o != NULL; o = o->next)
2341     {
2342       if ((o->flags & SEC_RELOC) != 0
2343           && elf_section_data (o)->rel_hashes != NULL)
2344         free (elf_section_data (o)->rel_hashes);
2345     }
2346
2347   return false;
2348 }
2349
2350 /* Add a symbol to the output symbol table.  */
2351
2352 static boolean
2353 elf_link_output_sym (finfo, name, elfsym, input_sec)
2354      struct elf_final_link_info *finfo;
2355      const char *name;
2356      Elf_Internal_Sym *elfsym;
2357      asection *input_sec;
2358 {
2359   boolean (*output_symbol_hook) PARAMS ((bfd *,
2360                                          struct bfd_link_info *info,
2361                                          const char *,
2362                                          Elf_Internal_Sym *,
2363                                          asection *));
2364
2365   output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
2366     elf_backend_link_output_symbol_hook;
2367   if (output_symbol_hook != NULL)
2368     {
2369       if (! ((*output_symbol_hook)
2370              (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
2371         return false;
2372     }
2373
2374   if (name == (const char *) NULL || *name == '\0')
2375     elfsym->st_name = 0;
2376   else
2377     {
2378       elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
2379                                                             name, true,
2380                                                             false);
2381       if (elfsym->st_name == (unsigned long) -1)
2382         return false;
2383     }
2384
2385   if (finfo->symbuf_count >= finfo->symbuf_size)
2386     {
2387       if (! elf_link_flush_output_syms (finfo))
2388         return false;
2389     }
2390
2391   elf_swap_symbol_out (finfo->output_bfd, elfsym,
2392                        (PTR) (finfo->symbuf + finfo->symbuf_count));
2393   ++finfo->symbuf_count;
2394
2395   ++finfo->output_bfd->symcount;
2396
2397   return true;
2398 }
2399
2400 /* Flush the output symbols to the file.  */
2401
2402 static boolean
2403 elf_link_flush_output_syms (finfo)
2404      struct elf_final_link_info *finfo;
2405 {
2406   Elf_Internal_Shdr *symtab;
2407
2408   symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
2409
2410   if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
2411                 SEEK_SET) != 0
2412       || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
2413                      sizeof (Elf_External_Sym), finfo->output_bfd)
2414           != finfo->symbuf_count * sizeof (Elf_External_Sym)))
2415     return false;
2416
2417   symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
2418
2419   finfo->symbuf_count = 0;
2420
2421   return true;
2422 }
2423
2424 /* Add an external symbol to the symbol table.  This is called from
2425    the hash table traversal routine.  */
2426
2427 static boolean
2428 elf_link_output_extsym (h, data)
2429      struct elf_link_hash_entry *h;
2430      PTR data;
2431 {
2432   struct elf_finfo_failed *eif = (struct elf_finfo_failed *) data;
2433   struct elf_final_link_info *finfo = eif->finfo;
2434   boolean strip;
2435   Elf_Internal_Sym sym;
2436   asection *input_sec;
2437
2438   /* If we are not creating a shared library, and this symbol is
2439      referenced by a shared library but is not defined anywhere, then
2440      warn that it is undefined.  If we do not do this, the runtime
2441      linker will complain that the symbol is undefined when the
2442      program is run.  We don't have to worry about symbols that are
2443      referenced by regular files, because we will already have issued
2444      warnings for them.  */
2445   if (! finfo->info->relocateable
2446       && ! finfo->info->shared
2447       && h->root.type == bfd_link_hash_undefined
2448       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
2449       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2450     {
2451       if (! ((*finfo->info->callbacks->undefined_symbol)
2452              (finfo->info, h->root.root.string, h->root.u.undef.abfd,
2453               (asection *) NULL, 0)))
2454         {
2455           eif->failed = true;
2456           return false;
2457         }
2458     }
2459
2460   /* We don't want to output symbols that have never been mentioned by
2461      a regular file, or that we have been told to strip.  However, if
2462      h->indx is set to -2, the symbol is used by a reloc and we must
2463      output it.  */
2464   if (h->indx == -2)
2465     strip = false;
2466   else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
2467             || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
2468            && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
2469            && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2470     strip = true;
2471   else if (finfo->info->strip == strip_all
2472            || (finfo->info->strip == strip_some
2473                && bfd_hash_lookup (finfo->info->keep_hash,
2474                                    h->root.root.string,
2475                                    false, false) == NULL))
2476     strip = true;
2477   else
2478     strip = false;
2479
2480   /* If we're stripping it, and it's not a dynamic symbol, there's
2481      nothing else to do.  */
2482   if (strip && h->dynindx == -1)
2483     return true;
2484
2485   sym.st_value = 0;
2486   sym.st_size = h->size;
2487   sym.st_other = 0;
2488   if (h->root.type == bfd_link_hash_undefweak
2489       || h->root.type == bfd_link_hash_defweak)
2490     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
2491   else
2492     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
2493
2494   switch (h->root.type)
2495     {
2496     default:
2497     case bfd_link_hash_new:
2498       abort ();
2499       return false;
2500
2501     case bfd_link_hash_undefined:
2502       input_sec = bfd_und_section_ptr;
2503       sym.st_shndx = SHN_UNDEF;
2504       break;
2505
2506     case bfd_link_hash_undefweak:
2507       input_sec = bfd_und_section_ptr;
2508       sym.st_shndx = SHN_UNDEF;
2509       break;
2510
2511     case bfd_link_hash_defined:
2512     case bfd_link_hash_defweak:
2513       {
2514         input_sec = h->root.u.def.section;
2515         if (input_sec->output_section != NULL)
2516           {
2517             sym.st_shndx =
2518               _bfd_elf_section_from_bfd_section (finfo->output_bfd,
2519                                                  input_sec->output_section);
2520             if (sym.st_shndx == (unsigned short) -1)
2521               {
2522                 eif->failed = true;
2523                 return false;
2524               }
2525
2526             /* ELF symbols in relocateable files are section relative,
2527                but in nonrelocateable files they are virtual
2528                addresses.  */
2529             sym.st_value = h->root.u.def.value + input_sec->output_offset;
2530             if (! finfo->info->relocateable)
2531               sym.st_value += input_sec->output_section->vma;
2532           }
2533         else
2534           {
2535             BFD_ASSERT ((bfd_get_flavour (input_sec->owner)
2536                          == bfd_target_elf_flavour)
2537                         && elf_elfheader (input_sec->owner)->e_type == ET_DYN);
2538             sym.st_shndx = SHN_UNDEF;
2539             input_sec = bfd_und_section_ptr;
2540           }
2541       }
2542       break;
2543
2544     case bfd_link_hash_common:
2545       input_sec = bfd_com_section_ptr;
2546       sym.st_shndx = SHN_COMMON;
2547       sym.st_value = 1 << h->root.u.c.p->alignment_power;
2548       break;
2549
2550     case bfd_link_hash_indirect:
2551     case bfd_link_hash_warning:
2552       return (elf_link_output_extsym
2553               ((struct elf_link_hash_entry *) h->root.u.i.link, data));
2554     }
2555
2556   /* If this symbol should be put in the .dynsym section, then put it
2557      there now.  We have already know the symbol index.  We also fill
2558      in the entry in the .hash section.  */
2559   if (h->dynindx != -1
2560       && elf_hash_table (finfo->info)->dynamic_sections_created)
2561     {
2562       struct elf_backend_data *bed;
2563       size_t bucketcount;
2564       size_t bucket;
2565       bfd_byte *bucketpos;
2566       bfd_vma chain;
2567
2568       sym.st_name = h->dynstr_index;
2569
2570       /* Give the processor backend a chance to tweak the symbol
2571          value, and also to finish up anything that needs to be done
2572          for this symbol.  */
2573       bed = get_elf_backend_data (finfo->output_bfd);
2574       if (! ((*bed->elf_backend_finish_dynamic_symbol)
2575              (finfo->output_bfd, finfo->info, h, &sym)))
2576         {
2577           eif->failed = true;
2578           return false;
2579         }
2580
2581       elf_swap_symbol_out (finfo->output_bfd, &sym,
2582                            (PTR) (((Elf_External_Sym *)
2583                                    finfo->dynsym_sec->contents)
2584                                   + h->dynindx));
2585
2586       bucketcount = elf_hash_table (finfo->info)->bucketcount;
2587       bucket = (bfd_elf_hash ((const unsigned char *) h->root.root.string)
2588                 % bucketcount);
2589       bucketpos = ((bfd_byte *) finfo->hash_sec->contents
2590                    + (bucket + 2) * (ARCH_SIZE / 8));
2591       chain = get_word (finfo->output_bfd, bucketpos);
2592       put_word (finfo->output_bfd, h->dynindx, bucketpos);
2593       put_word (finfo->output_bfd, chain,
2594                 ((bfd_byte *) finfo->hash_sec->contents
2595                  + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
2596     }
2597
2598   /* If we're stripping it, then it was just a dynamic symbol, and
2599      there's nothing else to do.  */
2600   if (strip)
2601     return true;
2602
2603   h->indx = finfo->output_bfd->symcount;
2604
2605   if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
2606     {
2607       eif->failed = true;
2608       return false;
2609     }
2610
2611   return true;
2612 }
2613
2614 /* Link an input file into the linker output file.  This function
2615    handles all the sections and relocations of the input file at once.
2616    This is so that we only have to read the local symbols once, and
2617    don't have to keep them in memory.  */
2618
2619 static boolean
2620 elf_link_input_bfd (finfo, input_bfd)
2621      struct elf_final_link_info *finfo;
2622      bfd *input_bfd;
2623 {
2624   boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
2625                                        bfd *, asection *, bfd_byte *,
2626                                        Elf_Internal_Rela *,
2627                                        Elf_Internal_Sym *, asection **));
2628   bfd *output_bfd;
2629   Elf_Internal_Shdr *symtab_hdr;
2630   size_t locsymcount;
2631   size_t extsymoff;
2632   Elf_External_Sym *esym;
2633   Elf_External_Sym *esymend;
2634   Elf_Internal_Sym *isym;
2635   long *pindex;
2636   asection **ppsection;
2637   asection *o;
2638
2639   output_bfd = finfo->output_bfd;
2640   relocate_section =
2641     get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
2642
2643   /* If this is a dynamic object, we don't want to do anything here:
2644      we don't want the local symbols, and we don't want the section
2645      contents.  */
2646   if (elf_elfheader (input_bfd)->e_type == ET_DYN)
2647     return true;
2648
2649   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2650   if (elf_bad_symtab (input_bfd))
2651     {
2652       locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
2653       extsymoff = 0;
2654     }
2655   else
2656     {
2657       locsymcount = symtab_hdr->sh_info;
2658       extsymoff = symtab_hdr->sh_info;
2659     }
2660
2661   /* Read the local symbols.  */
2662   if (locsymcount > 0
2663       && (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
2664           || (bfd_read (finfo->external_syms, sizeof (Elf_External_Sym),
2665                         locsymcount, input_bfd)
2666               != locsymcount * sizeof (Elf_External_Sym))))
2667     return false;
2668
2669   /* Swap in the local symbols and write out the ones which we know
2670      are going into the output file.  */
2671   esym = finfo->external_syms;
2672   esymend = esym + locsymcount;
2673   isym = finfo->internal_syms;
2674   pindex = finfo->indices;
2675   ppsection = finfo->sections;
2676   for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
2677     {
2678       asection *isec;
2679       const char *name;
2680       Elf_Internal_Sym osym;
2681
2682       elf_swap_symbol_in (input_bfd, esym, isym);
2683       *pindex = -1;
2684
2685       if (elf_bad_symtab (input_bfd))
2686         {
2687           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
2688             {
2689               *ppsection = NULL;
2690               continue;
2691             }
2692         }
2693
2694       if (isym->st_shndx == SHN_UNDEF)
2695         isec = bfd_und_section_ptr;
2696       else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
2697         isec = section_from_elf_index (input_bfd, isym->st_shndx);
2698       else if (isym->st_shndx == SHN_ABS)
2699         isec = bfd_abs_section_ptr;
2700       else if (isym->st_shndx == SHN_COMMON)
2701         isec = bfd_com_section_ptr;
2702       else
2703         {
2704           /* Who knows?  */
2705           isec = NULL;
2706         }
2707
2708       *ppsection = isec;
2709
2710       /* Don't output the first, undefined, symbol.  */
2711       if (esym == finfo->external_syms)
2712         continue;
2713
2714       /* If we are stripping all symbols, we don't want to output this
2715          one.  */
2716       if (finfo->info->strip == strip_all)
2717         continue;
2718
2719       /* We never output section symbols.  Instead, we use the section
2720          symbol of the corresponding section in the output file.  */
2721       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
2722         continue;
2723
2724       /* If we are discarding all local symbols, we don't want to
2725          output this one.  If we are generating a relocateable output
2726          file, then some of the local symbols may be required by
2727          relocs; we output them below as we discover that they are
2728          needed.  */
2729       if (finfo->info->discard == discard_all)
2730         continue;
2731
2732       /* Get the name of the symbol.  */
2733       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
2734                                           isym->st_name);
2735       if (name == NULL)
2736         return false;
2737
2738       /* See if we are discarding symbols with this name.  */
2739       if ((finfo->info->strip == strip_some
2740            && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
2741                == NULL))
2742           || (finfo->info->discard == discard_l
2743               && strncmp (name, finfo->info->lprefix,
2744                           finfo->info->lprefix_len) == 0))
2745         continue;
2746
2747       /* If we get here, we are going to output this symbol.  */
2748
2749       osym = *isym;
2750
2751       /* Adjust the section index for the output file.  */
2752       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
2753                                                          isec->output_section);
2754       if (osym.st_shndx == (unsigned short) -1)
2755         return false;
2756
2757       *pindex = output_bfd->symcount;
2758
2759       /* ELF symbols in relocateable files are section relative, but
2760          in executable files they are virtual addresses.  Note that
2761          this code assumes that all ELF sections have an associated
2762          BFD section with a reasonable value for output_offset; below
2763          we assume that they also have a reasonable value for
2764          output_section.  Any special sections must be set up to meet
2765          these requirements.  */
2766       osym.st_value += isec->output_offset;
2767       if (! finfo->info->relocateable)
2768         osym.st_value += isec->output_section->vma;
2769
2770       if (! elf_link_output_sym (finfo, name, &osym, isec))
2771         return false;
2772     }
2773
2774   /* Relocate the contents of each section.  */
2775   for (o = input_bfd->sections; o != NULL; o = o->next)
2776     {
2777       if ((o->flags & SEC_HAS_CONTENTS) == 0)
2778         continue;
2779
2780       if ((o->flags & SEC_IN_MEMORY) != 0
2781           && input_bfd == elf_hash_table (finfo->info)->dynobj)
2782         {
2783           /* Section was created by elf_link_create_dynamic_sections.
2784              FIXME: This test is fragile.  */
2785           continue;
2786         }
2787
2788       /* Read the contents of the section.  */
2789       if (! bfd_get_section_contents (input_bfd, o, finfo->contents,
2790                                       (file_ptr) 0, o->_raw_size))
2791         return false;
2792
2793       if ((o->flags & SEC_RELOC) != 0)
2794         {
2795           Elf_Internal_Rela *internal_relocs;
2796
2797           /* Get the swapped relocs.  */
2798           internal_relocs = elf_link_read_relocs (input_bfd, o,
2799                                                   finfo->external_relocs,
2800                                                   finfo->internal_relocs,
2801                                                   false);
2802           if (internal_relocs == NULL
2803               && o->reloc_count > 0)
2804             return false;
2805
2806           /* Relocate the section by invoking a back end routine.
2807
2808              The back end routine is responsible for adjusting the
2809              section contents as necessary, and (if using Rela relocs
2810              and generating a relocateable output file) adjusting the
2811              reloc addend as necessary.
2812
2813              The back end routine does not have to worry about setting
2814              the reloc address or the reloc symbol index.
2815
2816              The back end routine is given a pointer to the swapped in
2817              internal symbols, and can access the hash table entries
2818              for the external symbols via elf_sym_hashes (input_bfd).
2819
2820              When generating relocateable output, the back end routine
2821              must handle STB_LOCAL/STT_SECTION symbols specially.  The
2822              output symbol is going to be a section symbol
2823              corresponding to the output section, which will require
2824              the addend to be adjusted.  */
2825
2826           if (! (*relocate_section) (output_bfd, finfo->info,
2827                                      input_bfd, o,
2828                                      finfo->contents,
2829                                      internal_relocs,
2830                                      finfo->internal_syms,
2831                                      finfo->sections))
2832             return false;
2833
2834           if (finfo->info->relocateable)
2835             {
2836               Elf_Internal_Rela *irela;
2837               Elf_Internal_Rela *irelaend;
2838               struct elf_link_hash_entry **rel_hash;
2839               Elf_Internal_Shdr *input_rel_hdr;
2840               Elf_Internal_Shdr *output_rel_hdr;
2841
2842               /* Adjust the reloc addresses and symbol indices.  */
2843
2844               irela = internal_relocs;
2845               irelaend = irela + o->reloc_count;
2846               rel_hash = (elf_section_data (o->output_section)->rel_hashes
2847                           + o->output_section->reloc_count);
2848               for (; irela < irelaend; irela++, rel_hash++)
2849                 {
2850                   unsigned long r_symndx;
2851                   Elf_Internal_Sym *isym;
2852                   asection *sec;
2853
2854                   irela->r_offset += o->output_offset;
2855
2856                   r_symndx = ELF_R_SYM (irela->r_info);
2857
2858                   if (r_symndx == 0)
2859                     continue;
2860
2861                   if (r_symndx >= locsymcount
2862                       || (elf_bad_symtab (input_bfd)
2863                           && finfo->sections[r_symndx] == NULL))
2864                     {
2865                       long indx;
2866
2867                       /* This is a reloc against a global symbol.  We
2868                          have not yet output all the local symbols, so
2869                          we do not know the symbol index of any global
2870                          symbol.  We set the rel_hash entry for this
2871                          reloc to point to the global hash table entry
2872                          for this symbol.  The symbol index is then
2873                          set at the end of elf_bfd_final_link.  */
2874                       indx = r_symndx - extsymoff;
2875                       *rel_hash = elf_sym_hashes (input_bfd)[indx];
2876
2877                       /* Setting the index to -2 tells
2878                          elf_link_output_extsym that this symbol is
2879                          used by a reloc.  */
2880                       BFD_ASSERT ((*rel_hash)->indx < 0);
2881                       (*rel_hash)->indx = -2;
2882
2883                       continue;
2884                     }
2885
2886                   /* This is a reloc against a local symbol. */
2887
2888                   *rel_hash = NULL;
2889                   isym = finfo->internal_syms + r_symndx;
2890                   sec = finfo->sections[r_symndx];
2891                   if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
2892                     {
2893                       /* I suppose the backend ought to fill in the
2894                          section of any STT_SECTION symbol against a
2895                          processor specific section.  */
2896                       if (sec != NULL && bfd_is_abs_section (sec))
2897                         r_symndx = 0;
2898                       else if (sec == NULL || sec->owner == NULL)
2899                         {
2900                           bfd_set_error (bfd_error_bad_value);
2901                           return false;
2902                         }
2903                       else
2904                         {
2905                           r_symndx = sec->output_section->target_index;
2906                           BFD_ASSERT (r_symndx != 0);
2907                         }
2908                     }
2909                   else
2910                     {
2911                       if (finfo->indices[r_symndx] == -1)
2912                         {
2913                           unsigned long link;
2914                           const char *name;
2915                           asection *osec;
2916
2917                           if (finfo->info->strip == strip_all)
2918                             {
2919                               /* You can't do ld -r -s.  */
2920                               bfd_set_error (bfd_error_invalid_operation);
2921                               return false;
2922                             }
2923
2924                           /* This symbol was skipped earlier, but
2925                              since it is needed by a reloc, we
2926                              must output it now.  */
2927                           link = symtab_hdr->sh_link;
2928                           name = bfd_elf_string_from_elf_section (input_bfd,
2929                                                                   link,
2930                                                                   isym->st_name);
2931                           if (name == NULL)
2932                             return false;
2933
2934                           osec = sec->output_section;
2935                           isym->st_shndx =
2936                             _bfd_elf_section_from_bfd_section (output_bfd,
2937                                                                osec);
2938                           if (isym->st_shndx == (unsigned short) -1)
2939                             return false;
2940
2941                           isym->st_value += sec->output_offset;
2942                           if (! finfo->info->relocateable)
2943                             isym->st_value += osec->vma;
2944
2945                           finfo->indices[r_symndx] = output_bfd->symcount;
2946
2947                           if (! elf_link_output_sym (finfo, name, isym, sec))
2948                             return false;
2949                         }
2950
2951                       r_symndx = finfo->indices[r_symndx];
2952                     }
2953
2954                   irela->r_info = ELF_R_INFO (r_symndx,
2955                                               ELF_R_TYPE (irela->r_info));
2956                 }
2957
2958               /* Swap out the relocs.  */
2959               input_rel_hdr = &elf_section_data (o)->rel_hdr;
2960               output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
2961               BFD_ASSERT (output_rel_hdr->sh_entsize
2962                           == input_rel_hdr->sh_entsize);
2963               irela = internal_relocs;
2964               irelaend = irela + o->reloc_count;
2965               if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2966                 {
2967                   Elf_External_Rel *erel;
2968
2969                   erel = ((Elf_External_Rel *) output_rel_hdr->contents
2970                           + o->output_section->reloc_count);
2971                   for (; irela < irelaend; irela++, erel++)
2972                     {
2973                       Elf_Internal_Rel irel;
2974
2975                       irel.r_offset = irela->r_offset;
2976                       irel.r_info = irela->r_info;
2977                       BFD_ASSERT (irela->r_addend == 0);
2978                       elf_swap_reloc_out (output_bfd, &irel, erel);
2979                     }
2980                 }
2981               else
2982                 {
2983                   Elf_External_Rela *erela;
2984
2985                   BFD_ASSERT (input_rel_hdr->sh_entsize
2986                               == sizeof (Elf_External_Rela));
2987                   erela = ((Elf_External_Rela *) output_rel_hdr->contents
2988                            + o->output_section->reloc_count);
2989                   for (; irela < irelaend; irela++, erela++)
2990                     elf_swap_reloca_out (output_bfd, irela, erela);
2991                 }
2992
2993               o->output_section->reloc_count += o->reloc_count;
2994             }
2995         }
2996
2997       /* Write out the modified section contents.  */
2998       if (! bfd_set_section_contents (output_bfd, o->output_section,
2999                                       finfo->contents, o->output_offset,
3000                                       (o->_cooked_size != 0
3001                                        ? o->_cooked_size
3002                                        : o->_raw_size)))
3003         return false;
3004     }
3005
3006   return true;
3007 }
3008
3009 /* Generate a reloc when linking an ELF file.  This is a reloc
3010    requested by the linker, and does come from any input file.  This
3011    is used to build constructor and destructor tables when linking
3012    with -Ur.  */
3013
3014 static boolean
3015 elf_reloc_link_order (output_bfd, info, output_section, link_order)
3016      bfd *output_bfd;
3017      struct bfd_link_info *info;
3018      asection *output_section;
3019      struct bfd_link_order *link_order;
3020 {
3021   reloc_howto_type *howto;
3022   long indx;
3023   bfd_vma offset;
3024   struct elf_link_hash_entry **rel_hash_ptr;
3025   Elf_Internal_Shdr *rel_hdr;
3026
3027   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
3028   if (howto == NULL)
3029     {
3030       bfd_set_error (bfd_error_bad_value);
3031       return false;
3032     }
3033
3034   /* If this is an inplace reloc, we must write the addend into the
3035      object file.  */
3036   if (howto->partial_inplace
3037       && link_order->u.reloc.p->addend != 0)
3038     {
3039       bfd_size_type size;
3040       bfd_reloc_status_type rstat;
3041       bfd_byte *buf;
3042       boolean ok;
3043
3044       size = bfd_get_reloc_size (howto);
3045       buf = (bfd_byte *) bfd_zmalloc (size);
3046       if (buf == (bfd_byte *) NULL)
3047         {
3048           bfd_set_error (bfd_error_no_memory);
3049           return false;
3050         }
3051       rstat = _bfd_relocate_contents (howto, output_bfd,
3052                                       link_order->u.reloc.p->addend, buf);
3053       switch (rstat)
3054         {
3055         case bfd_reloc_ok:
3056           break;
3057         default:
3058         case bfd_reloc_outofrange:
3059           abort ();
3060         case bfd_reloc_overflow:
3061           if (! ((*info->callbacks->reloc_overflow)
3062                  (info,
3063                   (link_order->type == bfd_section_reloc_link_order
3064                    ? bfd_section_name (output_bfd,
3065                                        link_order->u.reloc.p->u.section)
3066                    : link_order->u.reloc.p->u.name),
3067                   howto->name, link_order->u.reloc.p->addend,
3068                   (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
3069             {
3070               free (buf);
3071               return false;
3072             }
3073           break;
3074         }
3075       ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
3076                                      (file_ptr) link_order->offset, size);
3077       free (buf);
3078       if (! ok)
3079         return false;
3080     }
3081
3082   /* Figure out the symbol index.  */
3083   rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
3084                   + output_section->reloc_count);
3085   if (link_order->type == bfd_section_reloc_link_order)
3086     {
3087       indx = link_order->u.reloc.p->u.section->target_index;
3088       BFD_ASSERT (indx != 0);
3089       *rel_hash_ptr = NULL;
3090     }
3091   else
3092     {
3093       struct elf_link_hash_entry *h;
3094
3095       h = elf_link_hash_lookup (elf_hash_table (info),
3096                                 link_order->u.reloc.p->u.name,
3097                                 false, false, true);
3098       if (h != NULL)
3099         {
3100           /* Setting the index to -2 tells elf_link_output_extsym that
3101              this symbol is used by a reloc.  */
3102           h->indx = -2;
3103           *rel_hash_ptr = h;
3104           indx = 0;
3105         }
3106       else
3107         {
3108           if (! ((*info->callbacks->unattached_reloc)
3109                  (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
3110                   (asection *) NULL, (bfd_vma) 0)))
3111             return false;
3112           indx = 0;
3113         }
3114     }
3115
3116   /* The address of a reloc is relative to the section in a
3117      relocateable file, and is a virtual address in an executable
3118      file.  */
3119   offset = link_order->offset;
3120   if (! info->relocateable)
3121     offset += output_section->vma;
3122
3123   rel_hdr = &elf_section_data (output_section)->rel_hdr;
3124
3125   if (rel_hdr->sh_type == SHT_REL)
3126     {
3127       Elf_Internal_Rel irel;
3128       Elf_External_Rel *erel;
3129
3130       irel.r_offset = offset;
3131       irel.r_info = ELF_R_INFO (indx, howto->type);
3132       erel = ((Elf_External_Rel *) rel_hdr->contents
3133               + output_section->reloc_count);
3134       elf_swap_reloc_out (output_bfd, &irel, erel);
3135     }
3136   else
3137     {
3138       Elf_Internal_Rela irela;
3139       Elf_External_Rela *erela;
3140
3141       irela.r_offset = offset;
3142       irela.r_info = ELF_R_INFO (indx, howto->type);
3143       irela.r_addend = link_order->u.reloc.p->addend;
3144       erela = ((Elf_External_Rela *) rel_hdr->contents
3145                + output_section->reloc_count);
3146       elf_swap_reloca_out (output_bfd, &irela, erela);
3147     }
3148
3149   ++output_section->reloc_count;
3150
3151   return true;
3152 }
3153