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