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