]> Git Repo - binutils.git/blob - bfd/elflink.h
* simops.c: Use REG macros in few places not using them yet.
[binutils.git] / bfd / elflink.h
1 /* ELF linker support.
2    Copyright 1995, 1996, 1997 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.  */
814           old_flags = h->elf_link_hash_flags;
815           dynsym = false;
816           if (! dynamic)
817             {
818               if (! definition)
819                 new_flag = ELF_LINK_HASH_REF_REGULAR;
820               else
821                 new_flag = ELF_LINK_HASH_DEF_REGULAR;
822               if (info->shared
823                   || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
824                                    | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
825                 dynsym = true;
826             }
827           else
828             {
829               if (! definition)
830                 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
831               else
832                 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
833               if ((old_flags & (ELF_LINK_HASH_DEF_REGULAR
834                                 | ELF_LINK_HASH_REF_REGULAR)) != 0
835                   || (h->weakdef != NULL
836                       && ! new_weakdef
837                       && h->weakdef->dynindx != -1))
838                 dynsym = true;
839             }
840
841           h->elf_link_hash_flags |= new_flag;
842           if (dynsym && h->dynindx == -1)
843             {
844               if (! _bfd_elf_link_record_dynamic_symbol (info, h))
845                 goto error_return;
846               if (h->weakdef != NULL
847                   && ! new_weakdef
848                   && h->weakdef->dynindx == -1)
849                 {
850                   if (! _bfd_elf_link_record_dynamic_symbol (info,
851                                                              h->weakdef))
852                     goto error_return;
853                 }
854             }
855         }
856     }
857
858   /* Now set the weakdefs field correctly for all the weak defined
859      symbols we found.  The only way to do this is to search all the
860      symbols.  Since we only need the information for non functions in
861      dynamic objects, that's the only time we actually put anything on
862      the list WEAKS.  We need this information so that if a regular
863      object refers to a symbol defined weakly in a dynamic object, the
864      real symbol in the dynamic object is also put in the dynamic
865      symbols; we also must arrange for both symbols to point to the
866      same memory location.  We could handle the general case of symbol
867      aliasing, but a general symbol alias can only be generated in
868      assembler code, handling it correctly would be very time
869      consuming, and other ELF linkers don't handle general aliasing
870      either.  */
871   while (weaks != NULL)
872     {
873       struct elf_link_hash_entry *hlook;
874       asection *slook;
875       bfd_vma vlook;
876       struct elf_link_hash_entry **hpp;
877       struct elf_link_hash_entry **hppend;
878
879       hlook = weaks;
880       weaks = hlook->weakdef;
881       hlook->weakdef = NULL;
882
883       BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
884                   || hlook->root.type == bfd_link_hash_defweak
885                   || hlook->root.type == bfd_link_hash_common
886                   || hlook->root.type == bfd_link_hash_indirect);
887       slook = hlook->root.u.def.section;
888       vlook = hlook->root.u.def.value;
889
890       hpp = elf_sym_hashes (abfd);
891       hppend = hpp + extsymcount;
892       for (; hpp < hppend; hpp++)
893         {
894           struct elf_link_hash_entry *h;
895
896           h = *hpp;
897           if (h != NULL && h != hlook
898               && h->root.type == bfd_link_hash_defined
899               && h->root.u.def.section == slook
900               && h->root.u.def.value == vlook)
901             {
902               hlook->weakdef = h;
903
904               /* If the weak definition is in the list of dynamic
905                  symbols, make sure the real definition is put there
906                  as well.  */
907               if (hlook->dynindx != -1
908                   && h->dynindx == -1)
909                 {
910                   if (! _bfd_elf_link_record_dynamic_symbol (info, h))
911                     goto error_return;
912                 }
913
914               /* If the real definition is in the list of dynamic
915                  symbols, make sure the weak definition is put there
916                  as well.  If we don't do this, then the dynamic
917                  loader might not merge the entries for the real
918                  definition and the weak definition.  */
919               if (h->dynindx != -1
920                   && hlook->dynindx == -1)
921                 {
922                   if (! _bfd_elf_link_record_dynamic_symbol (info, hlook))
923                     goto error_return;
924                 }
925
926               break;
927             }
928         }
929     }
930
931   if (buf != NULL)
932     {
933       free (buf);
934       buf = NULL;
935     }
936
937   /* If this object is the same format as the output object, and it is
938      not a shared library, then let the backend look through the
939      relocs.
940
941      This is required to build global offset table entries and to
942      arrange for dynamic relocs.  It is not required for the
943      particular common case of linking non PIC code, even when linking
944      against shared libraries, but unfortunately there is no way of
945      knowing whether an object file has been compiled PIC or not.
946      Looking through the relocs is not particularly time consuming.
947      The problem is that we must either (1) keep the relocs in memory,
948      which causes the linker to require additional runtime memory or
949      (2) read the relocs twice from the input file, which wastes time.
950      This would be a good case for using mmap.
951
952      I have no idea how to handle linking PIC code into a file of a
953      different format.  It probably can't be done.  */
954   check_relocs = get_elf_backend_data (abfd)->check_relocs;
955   if (! dynamic
956       && abfd->xvec == info->hash->creator
957       && check_relocs != NULL)
958     {
959       asection *o;
960
961       for (o = abfd->sections; o != NULL; o = o->next)
962         {
963           Elf_Internal_Rela *internal_relocs;
964           boolean ok;
965
966           if ((o->flags & SEC_RELOC) == 0
967               || o->reloc_count == 0)
968             continue;
969
970           internal_relocs = (NAME(_bfd_elf,link_read_relocs)
971                              (abfd, o, (PTR) NULL,
972                               (Elf_Internal_Rela *) NULL,
973                               info->keep_memory));
974           if (internal_relocs == NULL)
975             goto error_return;
976
977           ok = (*check_relocs) (abfd, info, o, internal_relocs);
978
979           if (! info->keep_memory)
980             free (internal_relocs);
981
982           if (! ok)
983             goto error_return;
984         }
985     }
986
987   /* If this is a non-traditional, non-relocateable link, try to
988      optimize the handling of the .stab/.stabstr sections.  */
989   if (! dynamic
990       && ! info->relocateable
991       && ! info->traditional_format
992       && info->hash->creator->flavour == bfd_target_elf_flavour
993       && (info->strip != strip_all && info->strip != strip_debugger))
994     {
995       asection *stab, *stabstr;
996
997       stab = bfd_get_section_by_name (abfd, ".stab");
998       if (stab != NULL)
999         {
1000           stabstr = bfd_get_section_by_name (abfd, ".stabstr");
1001
1002           if (stabstr != NULL)
1003             {
1004               struct bfd_elf_section_data *secdata;
1005
1006               secdata = elf_section_data (stab);
1007               if (! _bfd_link_section_stabs (abfd,
1008                                              &elf_hash_table (info)->stab_info,
1009                                              stab, stabstr,
1010                                              &secdata->stab_info))
1011                 goto error_return;
1012             }
1013         }
1014     }
1015
1016   return true;
1017
1018  error_return:
1019   if (buf != NULL)
1020     free (buf);
1021   if (dynbuf != NULL)
1022     free (dynbuf);
1023   return false;
1024 }
1025
1026 /* Create some sections which will be filled in with dynamic linking
1027    information.  ABFD is an input file which requires dynamic sections
1028    to be created.  The dynamic sections take up virtual memory space
1029    when the final executable is run, so we need to create them before
1030    addresses are assigned to the output sections.  We work out the
1031    actual contents and size of these sections later.  */
1032
1033 boolean
1034 elf_link_create_dynamic_sections (abfd, info)
1035      bfd *abfd;
1036      struct bfd_link_info *info;
1037 {
1038   flagword flags;
1039   register asection *s;
1040   struct elf_link_hash_entry *h;
1041   struct elf_backend_data *bed;
1042
1043   if (elf_hash_table (info)->dynamic_sections_created)
1044     return true;
1045
1046   /* Make sure that all dynamic sections use the same input BFD.  */
1047   if (elf_hash_table (info)->dynobj == NULL)
1048     elf_hash_table (info)->dynobj = abfd;
1049   else
1050     abfd = elf_hash_table (info)->dynobj;
1051
1052   /* Note that we set the SEC_IN_MEMORY flag for all of these
1053      sections.  */
1054   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS
1055            | SEC_IN_MEMORY | SEC_LINKER_CREATED);
1056
1057   /* A dynamically linked executable has a .interp section, but a
1058      shared library does not.  */
1059   if (! info->shared)
1060     {
1061       s = bfd_make_section (abfd, ".interp");
1062       if (s == NULL
1063           || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1064         return false;
1065     }
1066
1067   s = bfd_make_section (abfd, ".dynsym");
1068   if (s == NULL
1069       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1070       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1071     return false;
1072
1073   s = bfd_make_section (abfd, ".dynstr");
1074   if (s == NULL
1075       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1076     return false;
1077
1078   /* Create a strtab to hold the dynamic symbol names.  */
1079   if (elf_hash_table (info)->dynstr == NULL)
1080     {
1081       elf_hash_table (info)->dynstr = elf_stringtab_init ();
1082       if (elf_hash_table (info)->dynstr == NULL)
1083         return false;
1084     }
1085
1086   s = bfd_make_section (abfd, ".dynamic");
1087   if (s == NULL
1088       || ! bfd_set_section_flags (abfd, s, flags)
1089       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1090     return false;
1091
1092   /* The special symbol _DYNAMIC is always set to the start of the
1093      .dynamic section.  This call occurs before we have processed the
1094      symbols for any dynamic object, so we don't have to worry about
1095      overriding a dynamic definition.  We could set _DYNAMIC in a
1096      linker script, but we only want to define it if we are, in fact,
1097      creating a .dynamic section.  We don't want to define it if there
1098      is no .dynamic section, since on some ELF platforms the start up
1099      code examines it to decide how to initialize the process.  */
1100   h = NULL;
1101   if (! (_bfd_generic_link_add_one_symbol
1102          (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
1103           (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
1104           (struct bfd_link_hash_entry **) &h)))
1105     return false;
1106   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1107   h->type = STT_OBJECT;
1108
1109   if (info->shared
1110       && ! _bfd_elf_link_record_dynamic_symbol (info, h))
1111     return false;
1112
1113   s = bfd_make_section (abfd, ".hash");
1114   if (s == NULL
1115       || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1116       || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1117     return false;
1118
1119   /* Let the backend create the rest of the sections.  This lets the
1120      backend set the right flags.  The backend will normally create
1121      the .got and .plt sections.  */
1122   bed = get_elf_backend_data (abfd);
1123   if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
1124     return false;
1125
1126   elf_hash_table (info)->dynamic_sections_created = true;
1127
1128   return true;
1129 }
1130
1131 /* Add an entry to the .dynamic table.  */
1132
1133 boolean
1134 elf_add_dynamic_entry (info, tag, val)
1135      struct bfd_link_info *info;
1136      bfd_vma tag;
1137      bfd_vma val;
1138 {
1139   Elf_Internal_Dyn dyn;
1140   bfd *dynobj;
1141   asection *s;
1142   size_t newsize;
1143   bfd_byte *newcontents;
1144
1145   dynobj = elf_hash_table (info)->dynobj;
1146
1147   s = bfd_get_section_by_name (dynobj, ".dynamic");
1148   BFD_ASSERT (s != NULL);
1149
1150   newsize = s->_raw_size + sizeof (Elf_External_Dyn);
1151   newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
1152   if (newcontents == NULL)
1153     return false;
1154
1155   dyn.d_tag = tag;
1156   dyn.d_un.d_val = val;
1157   elf_swap_dyn_out (dynobj, &dyn,
1158                     (Elf_External_Dyn *) (newcontents + s->_raw_size));
1159
1160   s->_raw_size = newsize;
1161   s->contents = newcontents;
1162
1163   return true;
1164 }
1165 \f
1166
1167 /* Read and swap the relocs for a section.  They may have been cached.
1168    If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are not NULL,
1169    they are used as buffers to read into.  They are known to be large
1170    enough.  If the INTERNAL_RELOCS relocs argument is NULL, the return
1171    value is allocated using either malloc or bfd_alloc, according to
1172    the KEEP_MEMORY argument.  */
1173
1174 Elf_Internal_Rela *
1175 NAME(_bfd_elf,link_read_relocs) (abfd, o, external_relocs, internal_relocs,
1176                                  keep_memory)
1177      bfd *abfd;
1178      asection *o;
1179      PTR external_relocs;
1180      Elf_Internal_Rela *internal_relocs;
1181      boolean keep_memory;
1182 {
1183   Elf_Internal_Shdr *rel_hdr;
1184   PTR alloc1 = NULL;
1185   Elf_Internal_Rela *alloc2 = NULL;
1186
1187   if (elf_section_data (o)->relocs != NULL)
1188     return elf_section_data (o)->relocs;
1189
1190   if (o->reloc_count == 0)
1191     return NULL;
1192
1193   rel_hdr = &elf_section_data (o)->rel_hdr;
1194
1195   if (internal_relocs == NULL)
1196     {
1197       size_t size;
1198
1199       size = o->reloc_count * sizeof (Elf_Internal_Rela);
1200       if (keep_memory)
1201         internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
1202       else
1203         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
1204       if (internal_relocs == NULL)
1205         goto error_return;
1206     }
1207
1208   if (external_relocs == NULL)
1209     {
1210       alloc1 = (PTR) bfd_malloc ((size_t) rel_hdr->sh_size);
1211       if (alloc1 == NULL)
1212         goto error_return;
1213       external_relocs = alloc1;
1214     }
1215
1216   if ((bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
1217       || (bfd_read (external_relocs, 1, rel_hdr->sh_size, abfd)
1218           != rel_hdr->sh_size))
1219     goto error_return;
1220
1221   /* Swap in the relocs.  For convenience, we always produce an
1222      Elf_Internal_Rela array; if the relocs are Rel, we set the addend
1223      to 0.  */
1224   if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
1225     {
1226       Elf_External_Rel *erel;
1227       Elf_External_Rel *erelend;
1228       Elf_Internal_Rela *irela;
1229
1230       erel = (Elf_External_Rel *) external_relocs;
1231       erelend = erel + o->reloc_count;
1232       irela = internal_relocs;
1233       for (; erel < erelend; erel++, irela++)
1234         {
1235           Elf_Internal_Rel irel;
1236
1237           elf_swap_reloc_in (abfd, erel, &irel);
1238           irela->r_offset = irel.r_offset;
1239           irela->r_info = irel.r_info;
1240           irela->r_addend = 0;
1241         }
1242     }
1243   else
1244     {
1245       Elf_External_Rela *erela;
1246       Elf_External_Rela *erelaend;
1247       Elf_Internal_Rela *irela;
1248
1249       BFD_ASSERT (rel_hdr->sh_entsize == sizeof (Elf_External_Rela));
1250
1251       erela = (Elf_External_Rela *) external_relocs;
1252       erelaend = erela + o->reloc_count;
1253       irela = internal_relocs;
1254       for (; erela < erelaend; erela++, irela++)
1255         elf_swap_reloca_in (abfd, erela, irela);
1256     }
1257
1258   /* Cache the results for next time, if we can.  */
1259   if (keep_memory)
1260     elf_section_data (o)->relocs = internal_relocs;
1261
1262   if (alloc1 != NULL)
1263     free (alloc1);
1264
1265   /* Don't free alloc2, since if it was allocated we are passing it
1266      back (under the name of internal_relocs).  */
1267
1268   return internal_relocs;
1269
1270  error_return:
1271   if (alloc1 != NULL)
1272     free (alloc1);
1273   if (alloc2 != NULL)
1274     free (alloc2);
1275   return NULL;
1276 }
1277 \f
1278
1279 /* Record an assignment to a symbol made by a linker script.  We need
1280    this in case some dynamic object refers to this symbol.  */
1281
1282 /*ARGSUSED*/
1283 boolean
1284 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name, provide)
1285      bfd *output_bfd;
1286      struct bfd_link_info *info;
1287      const char *name;
1288      boolean provide;
1289 {
1290   struct elf_link_hash_entry *h;
1291
1292   if (info->hash->creator->flavour != bfd_target_elf_flavour)
1293     return true;
1294
1295   h = elf_link_hash_lookup (elf_hash_table (info), name, true, true, false);
1296   if (h == NULL)
1297     return false;
1298
1299   if (h->root.type == bfd_link_hash_new)
1300     h->elf_link_hash_flags &=~ ELF_LINK_NON_ELF;
1301
1302   /* If this symbol is being provided by the linker script, and it is
1303      currently defined by a dynamic object, but not by a regular
1304      object, then mark it as undefined so that the generic linker will
1305      force the correct value.  */
1306   if (provide
1307       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1308       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
1309     h->root.type = bfd_link_hash_undefined;
1310
1311   h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1312   h->type = STT_OBJECT;
1313
1314   if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
1315                                   | ELF_LINK_HASH_REF_DYNAMIC)) != 0
1316        || info->shared)
1317       && h->dynindx == -1)
1318     {
1319       if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1320         return false;
1321
1322       /* If this is a weak defined symbol, and we know a corresponding
1323          real symbol from the same dynamic object, make sure the real
1324          symbol is also made into a dynamic symbol.  */
1325       if (h->weakdef != NULL
1326           && h->weakdef->dynindx == -1)
1327         {
1328           if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
1329             return false;
1330         }
1331     }
1332
1333   return true;
1334 }
1335 \f
1336
1337 /* Array used to determine the number of hash table buckets to use
1338    based on the number of symbols there are.  If there are fewer than
1339    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
1340    fewer than 37 we use 17 buckets, and so forth.  We never use more
1341    than 32771 buckets.  */
1342
1343 static const size_t elf_buckets[] =
1344 {
1345   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
1346   16411, 32771, 0
1347 };
1348
1349 /* Set up the sizes and contents of the ELF dynamic sections.  This is
1350    called by the ELF linker emulation before_allocation routine.  We
1351    must set the sizes of the sections before the linker sets the
1352    addresses of the various sections.  */
1353
1354 boolean
1355 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
1356                                      export_dynamic, filter_shlib,
1357                                      auxiliary_filter_shlib, info, sinterpptr)
1358      bfd *output_bfd;
1359      const char *soname;
1360      const char *rpath;
1361      boolean export_dynamic;
1362      const char *filter_shlib;
1363      const char *auxiliary_filter_shlib;
1364      struct bfd_link_info *info;
1365      asection **sinterpptr;
1366 {
1367   bfd *dynobj;
1368   struct elf_backend_data *bed;
1369
1370   *sinterpptr = NULL;
1371
1372   if (info->hash->creator->flavour != bfd_target_elf_flavour)
1373     return true;
1374
1375   /* The backend may have to create some sections regardless of whether
1376      we're dynamic or not.  */
1377   bed = get_elf_backend_data (output_bfd);
1378   if (bed->elf_backend_always_size_sections
1379       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
1380     return false;
1381
1382   dynobj = elf_hash_table (info)->dynobj;
1383
1384   /* If there were no dynamic objects in the link, there is nothing to
1385      do here.  */
1386   if (dynobj == NULL)
1387     return true;
1388
1389   /* If we are supposed to export all symbols into the dynamic symbol
1390      table (this is not the normal case), then do so.  */
1391   if (export_dynamic)
1392     {
1393       struct elf_info_failed eif;
1394
1395       eif.failed = false;
1396       eif.info = info;
1397       elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol,
1398                               (PTR) &eif);
1399       if (eif.failed)
1400         return false;
1401     }
1402
1403   if (elf_hash_table (info)->dynamic_sections_created)
1404     {
1405       struct elf_info_failed eif;
1406       struct elf_link_hash_entry *h;
1407       bfd_size_type strsize;
1408
1409       *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
1410       BFD_ASSERT (*sinterpptr != NULL || info->shared);
1411
1412       if (soname != NULL)
1413         {
1414           bfd_size_type indx;
1415
1416           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, soname,
1417                                      true, true);
1418           if (indx == (bfd_size_type) -1
1419               || ! elf_add_dynamic_entry (info, DT_SONAME, indx))
1420             return false;
1421         }
1422
1423       if (info->symbolic)
1424         {
1425           if (! elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
1426             return false;
1427         }
1428
1429       if (rpath != NULL)
1430         {
1431           bfd_size_type indx;
1432
1433           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
1434                                      true, true);
1435           if (indx == (bfd_size_type) -1
1436               || ! elf_add_dynamic_entry (info, DT_RPATH, indx))
1437             return false;
1438         }
1439
1440       if (filter_shlib != NULL)
1441         {
1442           bfd_size_type indx;
1443
1444           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
1445                                      filter_shlib, true, true);
1446           if (indx == (bfd_size_type) -1
1447               || ! elf_add_dynamic_entry (info, DT_FILTER, indx))
1448             return false;
1449         }
1450
1451       if (auxiliary_filter_shlib != NULL)
1452         {
1453           bfd_size_type indx;
1454
1455           indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr,
1456                                      auxiliary_filter_shlib, true, true);
1457           if (indx == (bfd_size_type) -1
1458               || ! elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
1459             return false;
1460         }
1461
1462       /* Find all symbols which were defined in a dynamic object and make
1463          the backend pick a reasonable value for them.  */
1464       eif.failed = false;
1465       eif.info = info;
1466       elf_link_hash_traverse (elf_hash_table (info),
1467                               elf_adjust_dynamic_symbol,
1468                               (PTR) &eif);
1469       if (eif.failed)
1470         return false;
1471
1472       /* Add some entries to the .dynamic section.  We fill in some of the
1473          values later, in elf_bfd_final_link, but we must add the entries
1474          now so that we know the final size of the .dynamic section.  */
1475       h =  elf_link_hash_lookup (elf_hash_table (info), "_init", false,
1476                                 false, false);
1477       if (h != NULL
1478           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1479                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1480         {
1481           if (! elf_add_dynamic_entry (info, DT_INIT, 0))
1482             return false;
1483         }
1484       h =  elf_link_hash_lookup (elf_hash_table (info), "_fini", false,
1485                                  false, false);
1486       if (h != NULL
1487           && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1488                                         | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1489         {
1490           if (! elf_add_dynamic_entry (info, DT_FINI, 0))
1491             return false;
1492         }
1493       strsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1494       if (! elf_add_dynamic_entry (info, DT_HASH, 0)
1495           || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
1496           || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
1497           || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
1498           || ! elf_add_dynamic_entry (info, DT_SYMENT,
1499                                       sizeof (Elf_External_Sym)))
1500         return false;
1501     }
1502
1503   /* The backend must work out the sizes of all the other dynamic
1504      sections.  */
1505   if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
1506     return false;
1507
1508   if (elf_hash_table (info)->dynamic_sections_created)
1509     {
1510       size_t dynsymcount;
1511       asection *s;
1512       size_t i;
1513       size_t bucketcount = 0;
1514       Elf_Internal_Sym isym;
1515
1516       /* Set the size of the .dynsym and .hash sections.  We counted
1517          the number of dynamic symbols in elf_link_add_object_symbols.
1518          We will build the contents of .dynsym and .hash when we build
1519          the final symbol table, because until then we do not know the
1520          correct value to give the symbols.  We built the .dynstr
1521          section as we went along in elf_link_add_object_symbols.  */
1522       dynsymcount = elf_hash_table (info)->dynsymcount;
1523       s = bfd_get_section_by_name (dynobj, ".dynsym");
1524       BFD_ASSERT (s != NULL);
1525       s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
1526       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1527       if (s->contents == NULL && s->_raw_size != 0)
1528         return false;
1529
1530       /* The first entry in .dynsym is a dummy symbol.  */
1531       isym.st_value = 0;
1532       isym.st_size = 0;
1533       isym.st_name = 0;
1534       isym.st_info = 0;
1535       isym.st_other = 0;
1536       isym.st_shndx = 0;
1537       elf_swap_symbol_out (output_bfd, &isym,
1538                            (PTR) (Elf_External_Sym *) s->contents);
1539
1540       for (i = 0; elf_buckets[i] != 0; i++)
1541         {
1542           bucketcount = elf_buckets[i];
1543           if (dynsymcount < elf_buckets[i + 1])
1544             break;
1545         }
1546
1547       s = bfd_get_section_by_name (dynobj, ".hash");
1548       BFD_ASSERT (s != NULL);
1549       s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
1550       s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1551       if (s->contents == NULL)
1552         return false;
1553       memset (s->contents, 0, (size_t) s->_raw_size);
1554
1555       put_word (output_bfd, bucketcount, s->contents);
1556       put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
1557
1558       elf_hash_table (info)->bucketcount = bucketcount;
1559
1560       s = bfd_get_section_by_name (dynobj, ".dynstr");
1561       BFD_ASSERT (s != NULL);
1562       s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1563
1564       if (! elf_add_dynamic_entry (info, DT_NULL, 0))
1565         return false;
1566     }
1567
1568   return true;
1569 }
1570 \f
1571
1572 /* This routine is used to export all defined symbols into the dynamic
1573    symbol table.  It is called via elf_link_hash_traverse.  */
1574
1575 static boolean
1576 elf_export_symbol (h, data)
1577      struct elf_link_hash_entry *h;
1578      PTR data;
1579 {
1580   struct elf_info_failed *eif = (struct elf_info_failed *) data;
1581
1582   if (h->dynindx == -1
1583       && (h->elf_link_hash_flags
1584           & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
1585     {
1586       if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
1587         {
1588           eif->failed = true;
1589           return false;
1590         }
1591     }
1592
1593   return true;
1594 }
1595 \f
1596
1597 /* Make the backend pick a good value for a dynamic symbol.  This is
1598    called via elf_link_hash_traverse, and also calls itself
1599    recursively.  */
1600
1601 static boolean
1602 elf_adjust_dynamic_symbol (h, data)
1603      struct elf_link_hash_entry *h;
1604      PTR data;
1605 {
1606   struct elf_info_failed *eif = (struct elf_info_failed *) data;
1607   bfd *dynobj;
1608   struct elf_backend_data *bed;
1609
1610   /* If this symbol was mentioned in a non-ELF file, try to set
1611      DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
1612      permit a non-ELF file to correctly refer to a symbol defined in
1613      an ELF dynamic object.  */
1614   if ((h->elf_link_hash_flags & ELF_LINK_NON_ELF) != 0)
1615     {
1616       if (h->root.type != bfd_link_hash_defined
1617           && h->root.type != bfd_link_hash_defweak)
1618         h->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
1619       else
1620         {
1621           if (h->root.u.def.section->owner != NULL
1622               && (bfd_get_flavour (h->root.u.def.section->owner)
1623                   == bfd_target_elf_flavour))
1624             h->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
1625           else
1626             h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1627         }
1628
1629       if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1630           || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
1631         {
1632           if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
1633             {
1634               eif->failed = true;
1635               return false;
1636             }
1637         }
1638     }
1639
1640   /* If this is a final link, and the symbol was defined as a common
1641      symbol in a regular object file, and there was no definition in
1642      any dynamic object, then the linker will have allocated space for
1643      the symbol in a common section but the ELF_LINK_HASH_DEF_REGULAR
1644      flag will not have been set.  */
1645   if (h->root.type == bfd_link_hash_defined
1646       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
1647       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0
1648       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
1649       && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
1650     h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1651
1652   /* If -Bsymbolic was used (which means to bind references to global
1653      symbols to the definition within the shared object), and this
1654      symbol was defined in a regular object, then it actually doesn't
1655      need a PLT entry.  */
1656   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
1657       && eif->info->shared
1658       && eif->info->symbolic
1659       && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1660     h->elf_link_hash_flags &=~ ELF_LINK_HASH_NEEDS_PLT;
1661
1662   /* If this symbol does not require a PLT entry, and it is not
1663      defined by a dynamic object, or is not referenced by a regular
1664      object, ignore it.  We do have to handle a weak defined symbol,
1665      even if no regular object refers to it, if we decided to add it
1666      to the dynamic symbol table.  FIXME: Do we normally need to worry
1667      about symbols which are defined by one dynamic object and
1668      referenced by another one?  */
1669   if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
1670       && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
1671           || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
1672           || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
1673               && (h->weakdef == NULL || h->weakdef->dynindx == -1))))
1674     return true;
1675
1676   /* If we've already adjusted this symbol, don't do it again.  This
1677      can happen via a recursive call.  */
1678   if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
1679     return true;
1680
1681   /* Don't look at this symbol again.  Note that we must set this
1682      after checking the above conditions, because we may look at a
1683      symbol once, decide not to do anything, and then get called
1684      recursively later after REF_REGULAR is set below.  */
1685   h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
1686
1687   /* If this is a weak definition, and we know a real definition, and
1688      the real symbol is not itself defined by a regular object file,
1689      then get a good value for the real definition.  We handle the
1690      real symbol first, for the convenience of the backend routine.
1691
1692      Note that there is a confusing case here.  If the real definition
1693      is defined by a regular object file, we don't get the real symbol
1694      from the dynamic object, but we do get the weak symbol.  If the
1695      processor backend uses a COPY reloc, then if some routine in the
1696      dynamic object changes the real symbol, we will not see that
1697      change in the corresponding weak symbol.  This is the way other
1698      ELF linkers work as well, and seems to be a result of the shared
1699      library model.
1700
1701      I will clarify this issue.  Most SVR4 shared libraries define the
1702      variable _timezone and define timezone as a weak synonym.  The
1703      tzset call changes _timezone.  If you write
1704        extern int timezone;
1705        int _timezone = 5;
1706        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
1707      you might expect that, since timezone is a synonym for _timezone,
1708      the same number will print both times.  However, if the processor
1709      backend uses a COPY reloc, then actually timezone will be copied
1710      into your process image, and, since you define _timezone
1711      yourself, _timezone will not.  Thus timezone and _timezone will
1712      wind up at different memory locations.  The tzset call will set
1713      _timezone, leaving timezone unchanged.  */
1714
1715   if (h->weakdef != NULL)
1716     {
1717       struct elf_link_hash_entry *weakdef;
1718
1719       BFD_ASSERT (h->root.type == bfd_link_hash_defined
1720                   || h->root.type == bfd_link_hash_defweak);
1721       weakdef = h->weakdef;
1722       BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
1723                   || weakdef->root.type == bfd_link_hash_defweak);
1724       BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
1725       if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1726         {
1727           /* This symbol is defined by a regular object file, so we
1728              will not do anything special.  Clear weakdef for the
1729              convenience of the processor backend.  */
1730           h->weakdef = NULL;
1731         }
1732       else
1733         {
1734           /* There is an implicit reference by a regular object file
1735              via the weak symbol.  */
1736           weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
1737           if (! elf_adjust_dynamic_symbol (weakdef, (PTR) eif))
1738             return false;
1739         }
1740     }
1741
1742   dynobj = elf_hash_table (eif->info)->dynobj;
1743   bed = get_elf_backend_data (dynobj);
1744   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
1745     {
1746       eif->failed = true;
1747       return false;
1748     }
1749
1750   return true;
1751 }
1752 \f
1753 /* Final phase of ELF linker.  */
1754
1755 /* A structure we use to avoid passing large numbers of arguments.  */
1756
1757 struct elf_final_link_info
1758 {
1759   /* General link information.  */
1760   struct bfd_link_info *info;
1761   /* Output BFD.  */
1762   bfd *output_bfd;
1763   /* Symbol string table.  */
1764   struct bfd_strtab_hash *symstrtab;
1765   /* .dynsym section.  */
1766   asection *dynsym_sec;
1767   /* .hash section.  */
1768   asection *hash_sec;
1769   /* Buffer large enough to hold contents of any section.  */
1770   bfd_byte *contents;
1771   /* Buffer large enough to hold external relocs of any section.  */
1772   PTR external_relocs;
1773   /* Buffer large enough to hold internal relocs of any section.  */
1774   Elf_Internal_Rela *internal_relocs;
1775   /* Buffer large enough to hold external local symbols of any input
1776      BFD.  */
1777   Elf_External_Sym *external_syms;
1778   /* Buffer large enough to hold internal local symbols of any input
1779      BFD.  */
1780   Elf_Internal_Sym *internal_syms;
1781   /* Array large enough to hold a symbol index for each local symbol
1782      of any input BFD.  */
1783   long *indices;
1784   /* Array large enough to hold a section pointer for each local
1785      symbol of any input BFD.  */
1786   asection **sections;
1787   /* Buffer to hold swapped out symbols.  */
1788   Elf_External_Sym *symbuf;
1789   /* Number of swapped out symbols in buffer.  */
1790   size_t symbuf_count;
1791   /* Number of symbols which fit in symbuf.  */
1792   size_t symbuf_size;
1793 };
1794
1795 static boolean elf_link_output_sym
1796   PARAMS ((struct elf_final_link_info *, const char *,
1797            Elf_Internal_Sym *, asection *));
1798 static boolean elf_link_flush_output_syms
1799   PARAMS ((struct elf_final_link_info *));
1800 static boolean elf_link_output_extsym
1801   PARAMS ((struct elf_link_hash_entry *, PTR));
1802 static boolean elf_link_input_bfd
1803   PARAMS ((struct elf_final_link_info *, bfd *));
1804 static boolean elf_reloc_link_order
1805   PARAMS ((bfd *, struct bfd_link_info *, asection *,
1806            struct bfd_link_order *));
1807
1808 /* This struct is used to pass information to routines called via
1809    elf_link_hash_traverse which must return failure.  */
1810
1811 struct elf_finfo_failed
1812 {
1813   boolean failed;
1814   struct elf_final_link_info *finfo;
1815 };
1816
1817 /* Do the final step of an ELF link.  */
1818
1819 boolean
1820 elf_bfd_final_link (abfd, info)
1821      bfd *abfd;
1822      struct bfd_link_info *info;
1823 {
1824   boolean dynamic;
1825   bfd *dynobj;
1826   struct elf_final_link_info finfo;
1827   register asection *o;
1828   register struct bfd_link_order *p;
1829   register bfd *sub;
1830   size_t max_contents_size;
1831   size_t max_external_reloc_size;
1832   size_t max_internal_reloc_count;
1833   size_t max_sym_count;
1834   file_ptr off;
1835   Elf_Internal_Sym elfsym;
1836   unsigned int i;
1837   Elf_Internal_Shdr *symtab_hdr;
1838   Elf_Internal_Shdr *symstrtab_hdr;
1839   struct elf_backend_data *bed = get_elf_backend_data (abfd);
1840   struct elf_finfo_failed eif;
1841
1842   if (info->shared)
1843     abfd->flags |= DYNAMIC;
1844
1845   dynamic = elf_hash_table (info)->dynamic_sections_created;
1846   dynobj = elf_hash_table (info)->dynobj;
1847
1848   finfo.info = info;
1849   finfo.output_bfd = abfd;
1850   finfo.symstrtab = elf_stringtab_init ();
1851   if (finfo.symstrtab == NULL)
1852     return false;
1853   if (! dynamic)
1854     {
1855       finfo.dynsym_sec = NULL;
1856       finfo.hash_sec = NULL;
1857     }
1858   else
1859     {
1860       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
1861       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
1862       BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
1863     }
1864   finfo.contents = NULL;
1865   finfo.external_relocs = NULL;
1866   finfo.internal_relocs = NULL;
1867   finfo.external_syms = NULL;
1868   finfo.internal_syms = NULL;
1869   finfo.indices = NULL;
1870   finfo.sections = NULL;
1871   finfo.symbuf = NULL;
1872   finfo.symbuf_count = 0;
1873
1874   /* Count up the number of relocations we will output for each output
1875      section, so that we know the sizes of the reloc sections.  We
1876      also figure out some maximum sizes.  */
1877   max_contents_size = 0;
1878   max_external_reloc_size = 0;
1879   max_internal_reloc_count = 0;
1880   max_sym_count = 0;
1881   for (o = abfd->sections; o != (asection *) NULL; o = o->next)
1882     {
1883       o->reloc_count = 0;
1884
1885       for (p = o->link_order_head; p != NULL; p = p->next)
1886         {
1887           if (p->type == bfd_section_reloc_link_order
1888               || p->type == bfd_symbol_reloc_link_order)
1889             ++o->reloc_count;
1890           else if (p->type == bfd_indirect_link_order)
1891             {
1892               asection *sec;
1893
1894               sec = p->u.indirect.section;
1895
1896               /* Mark all sections which are to be included in the
1897                  link.  This will normally be every section.  We need
1898                  to do this so that we can identify any sections which
1899                  the linker has decided to not include.  */
1900               sec->linker_mark = true;
1901
1902               if (info->relocateable)
1903                 o->reloc_count += sec->reloc_count;
1904
1905               if (sec->_raw_size > max_contents_size)
1906                 max_contents_size = sec->_raw_size;
1907               if (sec->_cooked_size > max_contents_size)
1908                 max_contents_size = sec->_cooked_size;
1909
1910               /* We are interested in just local symbols, not all
1911                  symbols.  */
1912               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour)
1913                 {
1914                   size_t sym_count;
1915
1916                   if (elf_bad_symtab (sec->owner))
1917                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
1918                                  / sizeof (Elf_External_Sym));
1919                   else
1920                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
1921
1922                   if (sym_count > max_sym_count)
1923                     max_sym_count = sym_count;
1924
1925                   if ((sec->flags & SEC_RELOC) != 0)
1926                     {
1927                       size_t ext_size;
1928
1929                       ext_size = elf_section_data (sec)->rel_hdr.sh_size;
1930                       if (ext_size > max_external_reloc_size)
1931                         max_external_reloc_size = ext_size;
1932                       if (sec->reloc_count > max_internal_reloc_count)
1933                         max_internal_reloc_count = sec->reloc_count;
1934                     }
1935                 }
1936             }
1937         }
1938
1939       if (o->reloc_count > 0)
1940         o->flags |= SEC_RELOC;
1941       else
1942         {
1943           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
1944              set it (this is probably a bug) and if it is set
1945              assign_section_numbers will create a reloc section.  */
1946           o->flags &=~ SEC_RELOC;
1947         }
1948
1949       /* If the SEC_ALLOC flag is not set, force the section VMA to
1950          zero.  This is done in elf_fake_sections as well, but forcing
1951          the VMA to 0 here will ensure that relocs against these
1952          sections are handled correctly.  */
1953       if ((o->flags & SEC_ALLOC) == 0
1954           && ! o->user_set_vma)
1955         o->vma = 0;
1956     }
1957
1958   /* Figure out the file positions for everything but the symbol table
1959      and the relocs.  We set symcount to force assign_section_numbers
1960      to create a symbol table.  */
1961   abfd->symcount = info->strip == strip_all ? 0 : 1;
1962   BFD_ASSERT (! abfd->output_has_begun);
1963   if (! _bfd_elf_compute_section_file_positions (abfd, info))
1964     goto error_return;
1965
1966   /* That created the reloc sections.  Set their sizes, and assign
1967      them file positions, and allocate some buffers.  */
1968   for (o = abfd->sections; o != NULL; o = o->next)
1969     {
1970       if ((o->flags & SEC_RELOC) != 0)
1971         {
1972           Elf_Internal_Shdr *rel_hdr;
1973           register struct elf_link_hash_entry **p, **pend;
1974
1975           rel_hdr = &elf_section_data (o)->rel_hdr;
1976
1977           rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
1978
1979           /* The contents field must last into write_object_contents,
1980              so we allocate it with bfd_alloc rather than malloc.  */
1981           rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
1982           if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
1983             goto error_return;
1984
1985           p = ((struct elf_link_hash_entry **)
1986                bfd_malloc (o->reloc_count
1987                            * sizeof (struct elf_link_hash_entry *)));
1988           if (p == NULL && o->reloc_count != 0)
1989             goto error_return;
1990           elf_section_data (o)->rel_hashes = p;
1991           pend = p + o->reloc_count;
1992           for (; p < pend; p++)
1993             *p = NULL;
1994
1995           /* Use the reloc_count field as an index when outputting the
1996              relocs.  */
1997           o->reloc_count = 0;
1998         }
1999     }
2000
2001   _bfd_elf_assign_file_positions_for_relocs (abfd);
2002
2003   /* We have now assigned file positions for all the sections except
2004      .symtab and .strtab.  We start the .symtab section at the current
2005      file position, and write directly to it.  We build the .strtab
2006      section in memory.  */
2007   abfd->symcount = 0;
2008   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2009   /* sh_name is set in prep_headers.  */
2010   symtab_hdr->sh_type = SHT_SYMTAB;
2011   symtab_hdr->sh_flags = 0;
2012   symtab_hdr->sh_addr = 0;
2013   symtab_hdr->sh_size = 0;
2014   symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
2015   /* sh_link is set in assign_section_numbers.  */
2016   /* sh_info is set below.  */
2017   /* sh_offset is set just below.  */
2018   symtab_hdr->sh_addralign = 4;  /* FIXME: system dependent?  */
2019
2020   off = elf_tdata (abfd)->next_file_pos;
2021   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
2022
2023   /* Note that at this point elf_tdata (abfd)->next_file_pos is
2024      incorrect.  We do not yet know the size of the .symtab section.
2025      We correct next_file_pos below, after we do know the size.  */
2026
2027   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
2028      continuously seeking to the right position in the file.  */
2029   if (! info->keep_memory || max_sym_count < 20)
2030     finfo.symbuf_size = 20;
2031   else
2032     finfo.symbuf_size = max_sym_count;
2033   finfo.symbuf = ((Elf_External_Sym *)
2034                   bfd_malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
2035   if (finfo.symbuf == NULL)
2036     goto error_return;
2037
2038   /* Start writing out the symbol table.  The first symbol is always a
2039      dummy symbol.  */
2040   if (info->strip != strip_all || info->relocateable)
2041     {
2042       elfsym.st_value = 0;
2043       elfsym.st_size = 0;
2044       elfsym.st_info = 0;
2045       elfsym.st_other = 0;
2046       elfsym.st_shndx = SHN_UNDEF;
2047       if (! elf_link_output_sym (&finfo, (const char *) NULL,
2048                                  &elfsym, bfd_und_section_ptr))
2049         goto error_return;
2050     }
2051
2052 #if 0
2053   /* Some standard ELF linkers do this, but we don't because it causes
2054      bootstrap comparison failures.  */
2055   /* Output a file symbol for the output file as the second symbol.
2056      We output this even if we are discarding local symbols, although
2057      I'm not sure if this is correct.  */
2058   elfsym.st_value = 0;
2059   elfsym.st_size = 0;
2060   elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
2061   elfsym.st_other = 0;
2062   elfsym.st_shndx = SHN_ABS;
2063   if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
2064                              &elfsym, bfd_abs_section_ptr))
2065     goto error_return;
2066 #endif
2067
2068   /* Output a symbol for each section.  We output these even if we are
2069      discarding local symbols, since they are used for relocs.  These
2070      symbols have no names.  We store the index of each one in the
2071      index field of the section, so that we can find it again when
2072      outputting relocs.  */
2073   if (info->strip != strip_all || info->relocateable)
2074     {
2075       elfsym.st_value = 0;
2076       elfsym.st_size = 0;
2077       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
2078       elfsym.st_other = 0;
2079       for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
2080         {
2081           o = section_from_elf_index (abfd, i);
2082           if (o != NULL)
2083             o->target_index = abfd->symcount;
2084           elfsym.st_shndx = i;
2085           if (! elf_link_output_sym (&finfo, (const char *) NULL,
2086                                      &elfsym, o))
2087             goto error_return;
2088         }
2089     }
2090
2091   /* Allocate some memory to hold information read in from the input
2092      files.  */
2093   finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
2094   finfo.external_relocs = (PTR) bfd_malloc (max_external_reloc_size);
2095   finfo.internal_relocs = ((Elf_Internal_Rela *)
2096                            bfd_malloc (max_internal_reloc_count
2097                                        * sizeof (Elf_Internal_Rela)));
2098   finfo.external_syms = ((Elf_External_Sym *)
2099                          bfd_malloc (max_sym_count
2100                                      * sizeof (Elf_External_Sym)));
2101   finfo.internal_syms = ((Elf_Internal_Sym *)
2102                          bfd_malloc (max_sym_count
2103                                      * sizeof (Elf_Internal_Sym)));
2104   finfo.indices = (long *) bfd_malloc (max_sym_count * sizeof (long));
2105   finfo.sections = ((asection **)
2106                     bfd_malloc (max_sym_count * sizeof (asection *)));
2107   if ((finfo.contents == NULL && max_contents_size != 0)
2108       || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
2109       || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
2110       || (finfo.external_syms == NULL && max_sym_count != 0)
2111       || (finfo.internal_syms == NULL && max_sym_count != 0)
2112       || (finfo.indices == NULL && max_sym_count != 0)
2113       || (finfo.sections == NULL && max_sym_count != 0))
2114     goto error_return;
2115
2116   /* Since ELF permits relocations to be against local symbols, we
2117      must have the local symbols available when we do the relocations.
2118      Since we would rather only read the local symbols once, and we
2119      would rather not keep them in memory, we handle all the
2120      relocations for a single input file at the same time.
2121
2122      Unfortunately, there is no way to know the total number of local
2123      symbols until we have seen all of them, and the local symbol
2124      indices precede the global symbol indices.  This means that when
2125      we are generating relocateable output, and we see a reloc against
2126      a global symbol, we can not know the symbol index until we have
2127      finished examining all the local symbols to see which ones we are
2128      going to output.  To deal with this, we keep the relocations in
2129      memory, and don't output them until the end of the link.  This is
2130      an unfortunate waste of memory, but I don't see a good way around
2131      it.  Fortunately, it only happens when performing a relocateable
2132      link, which is not the common case.  FIXME: If keep_memory is set
2133      we could write the relocs out and then read them again; I don't
2134      know how bad the memory loss will be.  */
2135
2136   for (sub = info->input_bfds; sub != NULL; sub = sub->next)
2137     sub->output_has_begun = false;
2138   for (o = abfd->sections; o != NULL; o = o->next)
2139     {
2140       for (p = o->link_order_head; p != NULL; p = p->next)
2141         {
2142           if (p->type == bfd_indirect_link_order
2143               && (bfd_get_flavour (p->u.indirect.section->owner)
2144                   == bfd_target_elf_flavour))
2145             {
2146               sub = p->u.indirect.section->owner;
2147               if (! sub->output_has_begun)
2148                 {
2149                   if (! elf_link_input_bfd (&finfo, sub))
2150                     goto error_return;
2151                   sub->output_has_begun = true;
2152                 }
2153             }
2154           else if (p->type == bfd_section_reloc_link_order
2155                    || p->type == bfd_symbol_reloc_link_order)
2156             {
2157               if (! elf_reloc_link_order (abfd, info, o, p))
2158                 goto error_return;
2159             }
2160           else
2161             {
2162               if (! _bfd_default_link_order (abfd, info, o, p))
2163                 goto error_return;
2164             }
2165         }
2166     }
2167
2168   /* That wrote out all the local symbols.  Finish up the symbol table
2169      with the global symbols.  */
2170
2171   /* The sh_info field records the index of the first non local
2172      symbol.  */
2173   symtab_hdr->sh_info = abfd->symcount;
2174   if (dynamic)
2175     elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
2176
2177   /* We get the global symbols from the hash table.  */
2178   eif.failed = false;
2179   eif.finfo = &finfo;
2180   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
2181                           (PTR) &eif);
2182   if (eif.failed)
2183     return false;
2184
2185   /* Flush all symbols to the file.  */
2186   if (! elf_link_flush_output_syms (&finfo))
2187     return false;
2188
2189   /* Now we know the size of the symtab section.  */
2190   off += symtab_hdr->sh_size;
2191
2192   /* Finish up and write out the symbol string table (.strtab)
2193      section.  */
2194   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2195   /* sh_name was set in prep_headers.  */
2196   symstrtab_hdr->sh_type = SHT_STRTAB;
2197   symstrtab_hdr->sh_flags = 0;
2198   symstrtab_hdr->sh_addr = 0;
2199   symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
2200   symstrtab_hdr->sh_entsize = 0;
2201   symstrtab_hdr->sh_link = 0;
2202   symstrtab_hdr->sh_info = 0;
2203   /* sh_offset is set just below.  */
2204   symstrtab_hdr->sh_addralign = 1;
2205
2206   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true);
2207   elf_tdata (abfd)->next_file_pos = off;
2208
2209   if (abfd->symcount > 0)
2210     {
2211       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
2212           || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
2213         return false;
2214     }
2215
2216   /* Adjust the relocs to have the correct symbol indices.  */
2217   for (o = abfd->sections; o != NULL; o = o->next)
2218     {
2219       struct elf_link_hash_entry **rel_hash;
2220       Elf_Internal_Shdr *rel_hdr;
2221
2222       if ((o->flags & SEC_RELOC) == 0)
2223         continue;
2224
2225       rel_hash = elf_section_data (o)->rel_hashes;
2226       rel_hdr = &elf_section_data (o)->rel_hdr;
2227       for (i = 0; i < o->reloc_count; i++, rel_hash++)
2228         {
2229           if (*rel_hash == NULL)
2230             continue;
2231
2232           BFD_ASSERT ((*rel_hash)->indx >= 0);
2233
2234           if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2235             {
2236               Elf_External_Rel *erel;
2237               Elf_Internal_Rel irel;
2238
2239               erel = (Elf_External_Rel *) rel_hdr->contents + i;
2240               elf_swap_reloc_in (abfd, erel, &irel);
2241               irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
2242                                         ELF_R_TYPE (irel.r_info));
2243               elf_swap_reloc_out (abfd, &irel, erel);
2244             }
2245           else
2246             {
2247               Elf_External_Rela *erela;
2248               Elf_Internal_Rela irela;
2249
2250               BFD_ASSERT (rel_hdr->sh_entsize
2251                           == sizeof (Elf_External_Rela));
2252
2253               erela = (Elf_External_Rela *) rel_hdr->contents + i;
2254               elf_swap_reloca_in (abfd, erela, &irela);
2255               irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
2256                                          ELF_R_TYPE (irela.r_info));
2257               elf_swap_reloca_out (abfd, &irela, erela);
2258             }
2259         }
2260
2261       /* Set the reloc_count field to 0 to prevent write_relocs from
2262          trying to swap the relocs out itself.  */
2263       o->reloc_count = 0;
2264     }
2265
2266   /* If we are linking against a dynamic object, or generating a
2267      shared library, finish up the dynamic linking information.  */
2268   if (dynamic)
2269     {
2270       Elf_External_Dyn *dyncon, *dynconend;
2271
2272       /* Fix up .dynamic entries.  */
2273       o = bfd_get_section_by_name (dynobj, ".dynamic");
2274       BFD_ASSERT (o != NULL);
2275
2276       dyncon = (Elf_External_Dyn *) o->contents;
2277       dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
2278       for (; dyncon < dynconend; dyncon++)
2279         {
2280           Elf_Internal_Dyn dyn;
2281           const char *name;
2282           unsigned int type;
2283
2284           elf_swap_dyn_in (dynobj, dyncon, &dyn);
2285
2286           switch (dyn.d_tag)
2287             {
2288             default:
2289               break;
2290
2291               /* SVR4 linkers seem to set DT_INIT and DT_FINI based on
2292                  magic _init and _fini symbols.  This is pretty ugly,
2293                  but we are compatible.  */
2294             case DT_INIT:
2295               name = "_init";
2296               goto get_sym;
2297             case DT_FINI:
2298               name = "_fini";
2299             get_sym:
2300               {
2301                 struct elf_link_hash_entry *h;
2302
2303                 h = elf_link_hash_lookup (elf_hash_table (info), name,
2304                                           false, false, true);
2305                 if (h != NULL
2306                     && (h->root.type == bfd_link_hash_defined
2307                         || h->root.type == bfd_link_hash_defweak))
2308                   {
2309                     dyn.d_un.d_val = h->root.u.def.value;
2310                     o = h->root.u.def.section;
2311                     if (o->output_section != NULL)
2312                       dyn.d_un.d_val += (o->output_section->vma
2313                                          + o->output_offset);
2314                     else
2315                       {
2316                         /* The symbol is imported from another shared
2317                            library and does not apply to this one.  */
2318                         dyn.d_un.d_val = 0;
2319                       }
2320
2321                     elf_swap_dyn_out (dynobj, &dyn, dyncon);
2322                   }
2323               }
2324               break;
2325
2326             case DT_HASH:
2327               name = ".hash";
2328               goto get_vma;
2329             case DT_STRTAB:
2330               name = ".dynstr";
2331               goto get_vma;
2332             case DT_SYMTAB:
2333               name = ".dynsym";
2334             get_vma:
2335               o = bfd_get_section_by_name (abfd, name);
2336               BFD_ASSERT (o != NULL);
2337               dyn.d_un.d_ptr = o->vma;
2338               elf_swap_dyn_out (dynobj, &dyn, dyncon);
2339               break;
2340
2341             case DT_REL:
2342             case DT_RELA:
2343             case DT_RELSZ:
2344             case DT_RELASZ:
2345               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
2346                 type = SHT_REL;
2347               else
2348                 type = SHT_RELA;
2349               dyn.d_un.d_val = 0;
2350               for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
2351                 {
2352                   Elf_Internal_Shdr *hdr;
2353
2354                   hdr = elf_elfsections (abfd)[i];
2355                   if (hdr->sh_type == type
2356                       && (hdr->sh_flags & SHF_ALLOC) != 0)
2357                     {
2358                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
2359                         dyn.d_un.d_val += hdr->sh_size;
2360                       else
2361                         {
2362                           if (dyn.d_un.d_val == 0
2363                               || hdr->sh_addr < dyn.d_un.d_val)
2364                             dyn.d_un.d_val = hdr->sh_addr;
2365                         }
2366                     }
2367                 }
2368               elf_swap_dyn_out (dynobj, &dyn, dyncon);
2369               break;
2370             }
2371         }
2372     }
2373
2374   /* If we have created any dynamic sections, then output them.  */
2375   if (dynobj != NULL)
2376     {
2377       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
2378         goto error_return;
2379
2380       for (o = dynobj->sections; o != NULL; o = o->next)
2381         {
2382           if ((o->flags & SEC_HAS_CONTENTS) == 0
2383               || o->_raw_size == 0)
2384             continue;
2385           if ((o->flags & SEC_LINKER_CREATED) == 0)
2386             {
2387               /* At this point, we are only interested in sections
2388                  created by elf_link_create_dynamic_sections.  */
2389               continue;
2390             }
2391           if ((elf_section_data (o->output_section)->this_hdr.sh_type
2392                != SHT_STRTAB)
2393               || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
2394             {
2395               if (! bfd_set_section_contents (abfd, o->output_section,
2396                                               o->contents, o->output_offset,
2397                                               o->_raw_size))
2398                 goto error_return;
2399             }
2400           else
2401             {
2402               file_ptr off;
2403
2404               /* The contents of the .dynstr section are actually in a
2405                  stringtab.  */
2406               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
2407               if (bfd_seek (abfd, off, SEEK_SET) != 0
2408                   || ! _bfd_stringtab_emit (abfd,
2409                                             elf_hash_table (info)->dynstr))
2410                 goto error_return;
2411             }
2412         }
2413     }
2414
2415   /* If we have optimized stabs strings, output them.  */
2416   if (elf_hash_table (info)->stab_info != NULL)
2417     {
2418       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
2419         goto error_return;
2420     }
2421
2422   if (finfo.symstrtab != NULL)
2423     _bfd_stringtab_free (finfo.symstrtab);
2424   if (finfo.contents != NULL)
2425     free (finfo.contents);
2426   if (finfo.external_relocs != NULL)
2427     free (finfo.external_relocs);
2428   if (finfo.internal_relocs != NULL)
2429     free (finfo.internal_relocs);
2430   if (finfo.external_syms != NULL)
2431     free (finfo.external_syms);
2432   if (finfo.internal_syms != NULL)
2433     free (finfo.internal_syms);
2434   if (finfo.indices != NULL)
2435     free (finfo.indices);
2436   if (finfo.sections != NULL)
2437     free (finfo.sections);
2438   if (finfo.symbuf != NULL)
2439     free (finfo.symbuf);
2440   for (o = abfd->sections; o != NULL; o = o->next)
2441     {
2442       if ((o->flags & SEC_RELOC) != 0
2443           && elf_section_data (o)->rel_hashes != NULL)
2444         free (elf_section_data (o)->rel_hashes);
2445     }
2446
2447   elf_tdata (abfd)->linker = true;
2448
2449   return true;
2450
2451  error_return:
2452   if (finfo.symstrtab != NULL)
2453     _bfd_stringtab_free (finfo.symstrtab);
2454   if (finfo.contents != NULL)
2455     free (finfo.contents);
2456   if (finfo.external_relocs != NULL)
2457     free (finfo.external_relocs);
2458   if (finfo.internal_relocs != NULL)
2459     free (finfo.internal_relocs);
2460   if (finfo.external_syms != NULL)
2461     free (finfo.external_syms);
2462   if (finfo.internal_syms != NULL)
2463     free (finfo.internal_syms);
2464   if (finfo.indices != NULL)
2465     free (finfo.indices);
2466   if (finfo.sections != NULL)
2467     free (finfo.sections);
2468   if (finfo.symbuf != NULL)
2469     free (finfo.symbuf);
2470   for (o = abfd->sections; o != NULL; o = o->next)
2471     {
2472       if ((o->flags & SEC_RELOC) != 0
2473           && elf_section_data (o)->rel_hashes != NULL)
2474         free (elf_section_data (o)->rel_hashes);
2475     }
2476
2477   return false;
2478 }
2479
2480 /* Add a symbol to the output symbol table.  */
2481
2482 static boolean
2483 elf_link_output_sym (finfo, name, elfsym, input_sec)
2484      struct elf_final_link_info *finfo;
2485      const char *name;
2486      Elf_Internal_Sym *elfsym;
2487      asection *input_sec;
2488 {
2489   boolean (*output_symbol_hook) PARAMS ((bfd *,
2490                                          struct bfd_link_info *info,
2491                                          const char *,
2492                                          Elf_Internal_Sym *,
2493                                          asection *));
2494
2495   output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
2496     elf_backend_link_output_symbol_hook;
2497   if (output_symbol_hook != NULL)
2498     {
2499       if (! ((*output_symbol_hook)
2500              (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
2501         return false;
2502     }
2503
2504   if (name == (const char *) NULL || *name == '\0')
2505     elfsym->st_name = 0;
2506   else
2507     {
2508       elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
2509                                                             name, true,
2510                                                             false);
2511       if (elfsym->st_name == (unsigned long) -1)
2512         return false;
2513     }
2514
2515   if (finfo->symbuf_count >= finfo->symbuf_size)
2516     {
2517       if (! elf_link_flush_output_syms (finfo))
2518         return false;
2519     }
2520
2521   elf_swap_symbol_out (finfo->output_bfd, elfsym,
2522                        (PTR) (finfo->symbuf + finfo->symbuf_count));
2523   ++finfo->symbuf_count;
2524
2525   ++finfo->output_bfd->symcount;
2526
2527   return true;
2528 }
2529
2530 /* Flush the output symbols to the file.  */
2531
2532 static boolean
2533 elf_link_flush_output_syms (finfo)
2534      struct elf_final_link_info *finfo;
2535 {
2536   if (finfo->symbuf_count > 0)
2537     {
2538       Elf_Internal_Shdr *symtab;
2539
2540       symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
2541
2542       if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
2543                     SEEK_SET) != 0
2544           || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
2545                          sizeof (Elf_External_Sym), finfo->output_bfd)
2546               != finfo->symbuf_count * sizeof (Elf_External_Sym)))
2547         return false;
2548
2549       symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
2550
2551       finfo->symbuf_count = 0;
2552     }
2553
2554   return true;
2555 }
2556
2557 /* Add an external symbol to the symbol table.  This is called from
2558    the hash table traversal routine.  */
2559
2560 static boolean
2561 elf_link_output_extsym (h, data)
2562      struct elf_link_hash_entry *h;
2563      PTR data;
2564 {
2565   struct elf_finfo_failed *eif = (struct elf_finfo_failed *) data;
2566   struct elf_final_link_info *finfo = eif->finfo;
2567   boolean strip;
2568   Elf_Internal_Sym sym;
2569   asection *input_sec;
2570
2571   /* If we are not creating a shared library, and this symbol is
2572      referenced by a shared library but is not defined anywhere, then
2573      warn that it is undefined.  If we do not do this, the runtime
2574      linker will complain that the symbol is undefined when the
2575      program is run.  We don't have to worry about symbols that are
2576      referenced by regular files, because we will already have issued
2577      warnings for them.  */
2578   if (! finfo->info->relocateable
2579       && ! finfo->info->shared
2580       && h->root.type == bfd_link_hash_undefined
2581       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
2582       && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2583     {
2584       if (! ((*finfo->info->callbacks->undefined_symbol)
2585              (finfo->info, h->root.root.string, h->root.u.undef.abfd,
2586               (asection *) NULL, 0)))
2587         {
2588           eif->failed = true;
2589           return false;
2590         }
2591     }
2592
2593   /* We don't want to output symbols that have never been mentioned by
2594      a regular file, or that we have been told to strip.  However, if
2595      h->indx is set to -2, the symbol is used by a reloc and we must
2596      output it.  */
2597   if (h->indx == -2)
2598     strip = false;
2599   else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
2600             || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
2601            && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
2602            && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2603     strip = true;
2604   else if (finfo->info->strip == strip_all
2605            || (finfo->info->strip == strip_some
2606                && bfd_hash_lookup (finfo->info->keep_hash,
2607                                    h->root.root.string,
2608                                    false, false) == NULL))
2609     strip = true;
2610   else
2611     strip = false;
2612
2613   /* If we're stripping it, and it's not a dynamic symbol, there's
2614      nothing else to do.  */
2615   if (strip && h->dynindx == -1)
2616     return true;
2617
2618   sym.st_value = 0;
2619   sym.st_size = h->size;
2620   sym.st_other = h->other;
2621   if (h->root.type == bfd_link_hash_undefweak
2622       || h->root.type == bfd_link_hash_defweak)
2623     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
2624   else
2625     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
2626
2627   switch (h->root.type)
2628     {
2629     default:
2630     case bfd_link_hash_new:
2631       abort ();
2632       return false;
2633
2634     case bfd_link_hash_undefined:
2635       input_sec = bfd_und_section_ptr;
2636       sym.st_shndx = SHN_UNDEF;
2637       break;
2638
2639     case bfd_link_hash_undefweak:
2640       input_sec = bfd_und_section_ptr;
2641       sym.st_shndx = SHN_UNDEF;
2642       break;
2643
2644     case bfd_link_hash_defined:
2645     case bfd_link_hash_defweak:
2646       {
2647         input_sec = h->root.u.def.section;
2648         if (input_sec->output_section != NULL)
2649           {
2650             sym.st_shndx =
2651               _bfd_elf_section_from_bfd_section (finfo->output_bfd,
2652                                                  input_sec->output_section);
2653             if (sym.st_shndx == (unsigned short) -1)
2654               {
2655                 eif->failed = true;
2656                 return false;
2657               }
2658
2659             /* ELF symbols in relocateable files are section relative,
2660                but in nonrelocateable files they are virtual
2661                addresses.  */
2662             sym.st_value = h->root.u.def.value + input_sec->output_offset;
2663             if (! finfo->info->relocateable)
2664               sym.st_value += input_sec->output_section->vma;
2665           }
2666         else
2667           {
2668             BFD_ASSERT ((bfd_get_flavour (input_sec->owner)
2669                          == bfd_target_elf_flavour)
2670                         && elf_elfheader (input_sec->owner)->e_type == ET_DYN);
2671             sym.st_shndx = SHN_UNDEF;
2672             input_sec = bfd_und_section_ptr;
2673           }
2674       }
2675       break;
2676
2677     case bfd_link_hash_common:
2678       input_sec = bfd_com_section_ptr;
2679       sym.st_shndx = SHN_COMMON;
2680       sym.st_value = 1 << h->root.u.c.p->alignment_power;
2681       break;
2682
2683     case bfd_link_hash_indirect:
2684     case bfd_link_hash_warning:
2685       /* We can't represent these symbols in ELF.  A warning symbol
2686          may have come from a .gnu.warning.SYMBOL section anyhow.  We
2687          just put the target symbol in the hash table.  If the target
2688          symbol does not really exist, don't do anything.  */
2689       if (h->root.u.i.link->type == bfd_link_hash_new)
2690         return true;
2691       return (elf_link_output_extsym
2692               ((struct elf_link_hash_entry *) h->root.u.i.link, data));
2693     }
2694
2695   /* If this symbol should be put in the .dynsym section, then put it
2696      there now.  We have already know the symbol index.  We also fill
2697      in the entry in the .hash section.  */
2698   if (h->dynindx != -1
2699       && elf_hash_table (finfo->info)->dynamic_sections_created)
2700     {
2701       struct elf_backend_data *bed;
2702       size_t bucketcount;
2703       size_t bucket;
2704       bfd_byte *bucketpos;
2705       bfd_vma chain;
2706
2707       sym.st_name = h->dynstr_index;
2708
2709       /* Give the processor backend a chance to tweak the symbol
2710          value, and also to finish up anything that needs to be done
2711          for this symbol.  */
2712       bed = get_elf_backend_data (finfo->output_bfd);
2713       if (! ((*bed->elf_backend_finish_dynamic_symbol)
2714              (finfo->output_bfd, finfo->info, h, &sym)))
2715         {
2716           eif->failed = true;
2717           return false;
2718         }
2719
2720       elf_swap_symbol_out (finfo->output_bfd, &sym,
2721                            (PTR) (((Elf_External_Sym *)
2722                                    finfo->dynsym_sec->contents)
2723                                   + h->dynindx));
2724
2725       bucketcount = elf_hash_table (finfo->info)->bucketcount;
2726       bucket = (bfd_elf_hash ((const unsigned char *) h->root.root.string)
2727                 % bucketcount);
2728       bucketpos = ((bfd_byte *) finfo->hash_sec->contents
2729                    + (bucket + 2) * (ARCH_SIZE / 8));
2730       chain = get_word (finfo->output_bfd, bucketpos);
2731       put_word (finfo->output_bfd, h->dynindx, bucketpos);
2732       put_word (finfo->output_bfd, chain,
2733                 ((bfd_byte *) finfo->hash_sec->contents
2734                  + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
2735     }
2736
2737   /* If we're stripping it, then it was just a dynamic symbol, and
2738      there's nothing else to do.  */
2739   if (strip)
2740     return true;
2741
2742   h->indx = finfo->output_bfd->symcount;
2743
2744   if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
2745     {
2746       eif->failed = true;
2747       return false;
2748     }
2749
2750   return true;
2751 }
2752
2753 /* Link an input file into the linker output file.  This function
2754    handles all the sections and relocations of the input file at once.
2755    This is so that we only have to read the local symbols once, and
2756    don't have to keep them in memory.  */
2757
2758 static boolean
2759 elf_link_input_bfd (finfo, input_bfd)
2760      struct elf_final_link_info *finfo;
2761      bfd *input_bfd;
2762 {
2763   boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
2764                                        bfd *, asection *, bfd_byte *,
2765                                        Elf_Internal_Rela *,
2766                                        Elf_Internal_Sym *, asection **));
2767   bfd *output_bfd;
2768   Elf_Internal_Shdr *symtab_hdr;
2769   size_t locsymcount;
2770   size_t extsymoff;
2771   Elf_External_Sym *external_syms;
2772   Elf_External_Sym *esym;
2773   Elf_External_Sym *esymend;
2774   Elf_Internal_Sym *isym;
2775   long *pindex;
2776   asection **ppsection;
2777   asection *o;
2778
2779   output_bfd = finfo->output_bfd;
2780   relocate_section =
2781     get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
2782
2783   /* If this is a dynamic object, we don't want to do anything here:
2784      we don't want the local symbols, and we don't want the section
2785      contents.  */
2786   if (elf_elfheader (input_bfd)->e_type == ET_DYN)
2787     return true;
2788
2789   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2790   if (elf_bad_symtab (input_bfd))
2791     {
2792       locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
2793       extsymoff = 0;
2794     }
2795   else
2796     {
2797       locsymcount = symtab_hdr->sh_info;
2798       extsymoff = symtab_hdr->sh_info;
2799     }
2800
2801   /* Read the local symbols.  */
2802   if (symtab_hdr->contents != NULL)
2803     external_syms = (Elf_External_Sym *) symtab_hdr->contents;
2804   else if (locsymcount == 0)
2805     external_syms = NULL;
2806   else
2807     {
2808       external_syms = finfo->external_syms;
2809       if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
2810           || (bfd_read (external_syms, sizeof (Elf_External_Sym),
2811                         locsymcount, input_bfd)
2812               != locsymcount * sizeof (Elf_External_Sym)))
2813         return false;
2814     }
2815
2816   /* Swap in the local symbols and write out the ones which we know
2817      are going into the output file.  */
2818   esym = external_syms;
2819   esymend = esym + locsymcount;
2820   isym = finfo->internal_syms;
2821   pindex = finfo->indices;
2822   ppsection = finfo->sections;
2823   for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
2824     {
2825       asection *isec;
2826       const char *name;
2827       Elf_Internal_Sym osym;
2828
2829       elf_swap_symbol_in (input_bfd, esym, isym);
2830       *pindex = -1;
2831
2832       if (elf_bad_symtab (input_bfd))
2833         {
2834           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
2835             {
2836               *ppsection = NULL;
2837               continue;
2838             }
2839         }
2840
2841       if (isym->st_shndx == SHN_UNDEF)
2842         isec = bfd_und_section_ptr;
2843       else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
2844         isec = section_from_elf_index (input_bfd, isym->st_shndx);
2845       else if (isym->st_shndx == SHN_ABS)
2846         isec = bfd_abs_section_ptr;
2847       else if (isym->st_shndx == SHN_COMMON)
2848         isec = bfd_com_section_ptr;
2849       else
2850         {
2851           /* Who knows?  */
2852           isec = NULL;
2853         }
2854
2855       *ppsection = isec;
2856
2857       /* Don't output the first, undefined, symbol.  */
2858       if (esym == external_syms)
2859         continue;
2860
2861       /* If we are stripping all symbols, we don't want to output this
2862          one.  */
2863       if (finfo->info->strip == strip_all)
2864         continue;
2865
2866       /* We never output section symbols.  Instead, we use the section
2867          symbol of the corresponding section in the output file.  */
2868       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
2869         continue;
2870
2871       /* If we are discarding all local symbols, we don't want to
2872          output this one.  If we are generating a relocateable output
2873          file, then some of the local symbols may be required by
2874          relocs; we output them below as we discover that they are
2875          needed.  */
2876       if (finfo->info->discard == discard_all)
2877         continue;
2878
2879       /* Get the name of the symbol.  */
2880       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
2881                                           isym->st_name);
2882       if (name == NULL)
2883         return false;
2884
2885       /* See if we are discarding symbols with this name.  */
2886       if ((finfo->info->strip == strip_some
2887            && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
2888                == NULL))
2889           || (finfo->info->discard == discard_l
2890               && strncmp (name, finfo->info->lprefix,
2891                           finfo->info->lprefix_len) == 0))
2892         continue;
2893
2894       /* If we get here, we are going to output this symbol.  */
2895
2896       osym = *isym;
2897
2898       /* Adjust the section index for the output file.  */
2899       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
2900                                                          isec->output_section);
2901       if (osym.st_shndx == (unsigned short) -1)
2902         return false;
2903
2904       *pindex = output_bfd->symcount;
2905
2906       /* ELF symbols in relocateable files are section relative, but
2907          in executable files they are virtual addresses.  Note that
2908          this code assumes that all ELF sections have an associated
2909          BFD section with a reasonable value for output_offset; below
2910          we assume that they also have a reasonable value for
2911          output_section.  Any special sections must be set up to meet
2912          these requirements.  */
2913       osym.st_value += isec->output_offset;
2914       if (! finfo->info->relocateable)
2915         osym.st_value += isec->output_section->vma;
2916
2917       if (! elf_link_output_sym (finfo, name, &osym, isec))
2918         return false;
2919     }
2920
2921   /* Relocate the contents of each section.  */
2922   for (o = input_bfd->sections; o != NULL; o = o->next)
2923     {
2924       bfd_byte *contents;
2925
2926       if (! o->linker_mark)
2927         {
2928           /* This section was omitted from the link.  */
2929           continue;
2930         }
2931
2932       if ((o->flags & SEC_HAS_CONTENTS) == 0
2933           || (o->_raw_size == 0 && (o->flags & SEC_RELOC) == 0))
2934         continue;
2935
2936       if ((o->flags & SEC_LINKER_CREATED) != 0)
2937         {
2938           /* Section was created by elf_link_create_dynamic_sections
2939              or somesuch.  */
2940           continue;
2941         }
2942
2943       /* Get the contents of the section.  They have been cached by a
2944          relaxation routine.  Note that o is a section in an input
2945          file, so the contents field will not have been set by any of
2946          the routines which work on output files.  */
2947       if (elf_section_data (o)->this_hdr.contents != NULL)
2948         contents = elf_section_data (o)->this_hdr.contents;
2949       else
2950         {
2951           contents = finfo->contents;
2952           if (! bfd_get_section_contents (input_bfd, o, contents,
2953                                           (file_ptr) 0, o->_raw_size))
2954             return false;
2955         }
2956
2957       if ((o->flags & SEC_RELOC) != 0)
2958         {
2959           Elf_Internal_Rela *internal_relocs;
2960
2961           /* Get the swapped relocs.  */
2962           internal_relocs = (NAME(_bfd_elf,link_read_relocs)
2963                              (input_bfd, o, finfo->external_relocs,
2964                               finfo->internal_relocs, false));
2965           if (internal_relocs == NULL
2966               && o->reloc_count > 0)
2967             return false;
2968
2969           /* Relocate the section by invoking a back end routine.
2970
2971              The back end routine is responsible for adjusting the
2972              section contents as necessary, and (if using Rela relocs
2973              and generating a relocateable output file) adjusting the
2974              reloc addend as necessary.
2975
2976              The back end routine does not have to worry about setting
2977              the reloc address or the reloc symbol index.
2978
2979              The back end routine is given a pointer to the swapped in
2980              internal symbols, and can access the hash table entries
2981              for the external symbols via elf_sym_hashes (input_bfd).
2982
2983              When generating relocateable output, the back end routine
2984              must handle STB_LOCAL/STT_SECTION symbols specially.  The
2985              output symbol is going to be a section symbol
2986              corresponding to the output section, which will require
2987              the addend to be adjusted.  */
2988
2989           if (! (*relocate_section) (output_bfd, finfo->info,
2990                                      input_bfd, o, contents,
2991                                      internal_relocs,
2992                                      finfo->internal_syms,
2993                                      finfo->sections))
2994             return false;
2995
2996           if (finfo->info->relocateable)
2997             {
2998               Elf_Internal_Rela *irela;
2999               Elf_Internal_Rela *irelaend;
3000               struct elf_link_hash_entry **rel_hash;
3001               Elf_Internal_Shdr *input_rel_hdr;
3002               Elf_Internal_Shdr *output_rel_hdr;
3003
3004               /* Adjust the reloc addresses and symbol indices.  */
3005
3006               irela = internal_relocs;
3007               irelaend = irela + o->reloc_count;
3008               rel_hash = (elf_section_data (o->output_section)->rel_hashes
3009                           + o->output_section->reloc_count);
3010               for (; irela < irelaend; irela++, rel_hash++)
3011                 {
3012                   unsigned long r_symndx;
3013                   Elf_Internal_Sym *isym;
3014                   asection *sec;
3015
3016                   irela->r_offset += o->output_offset;
3017
3018                   r_symndx = ELF_R_SYM (irela->r_info);
3019
3020                   if (r_symndx == 0)
3021                     continue;
3022
3023                   if (r_symndx >= locsymcount
3024                       || (elf_bad_symtab (input_bfd)
3025                           && finfo->sections[r_symndx] == NULL))
3026                     {
3027                       long indx;
3028
3029                       /* This is a reloc against a global symbol.  We
3030                          have not yet output all the local symbols, so
3031                          we do not know the symbol index of any global
3032                          symbol.  We set the rel_hash entry for this
3033                          reloc to point to the global hash table entry
3034                          for this symbol.  The symbol index is then
3035                          set at the end of elf_bfd_final_link.  */
3036                       indx = r_symndx - extsymoff;
3037                       *rel_hash = elf_sym_hashes (input_bfd)[indx];
3038
3039                       /* Setting the index to -2 tells
3040                          elf_link_output_extsym that this symbol is
3041                          used by a reloc.  */
3042                       BFD_ASSERT ((*rel_hash)->indx < 0);
3043                       (*rel_hash)->indx = -2;
3044
3045                       continue;
3046                     }
3047
3048                   /* This is a reloc against a local symbol. */
3049
3050                   *rel_hash = NULL;
3051                   isym = finfo->internal_syms + r_symndx;
3052                   sec = finfo->sections[r_symndx];
3053                   if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
3054                     {
3055                       /* I suppose the backend ought to fill in the
3056                          section of any STT_SECTION symbol against a
3057                          processor specific section.  */
3058                       if (sec != NULL && bfd_is_abs_section (sec))
3059                         r_symndx = 0;
3060                       else if (sec == NULL || sec->owner == NULL)
3061                         {
3062                           bfd_set_error (bfd_error_bad_value);
3063                           return false;
3064                         }
3065                       else
3066                         {
3067                           r_symndx = sec->output_section->target_index;
3068                           BFD_ASSERT (r_symndx != 0);
3069                         }
3070                     }
3071                   else
3072                     {
3073                       if (finfo->indices[r_symndx] == -1)
3074                         {
3075                           unsigned long link;
3076                           const char *name;
3077                           asection *osec;
3078
3079                           if (finfo->info->strip == strip_all)
3080                             {
3081                               /* You can't do ld -r -s.  */
3082                               bfd_set_error (bfd_error_invalid_operation);
3083                               return false;
3084                             }
3085
3086                           /* This symbol was skipped earlier, but
3087                              since it is needed by a reloc, we
3088                              must output it now.  */
3089                           link = symtab_hdr->sh_link;
3090                           name = bfd_elf_string_from_elf_section (input_bfd,
3091                                                                   link,
3092                                                                   isym->st_name);
3093                           if (name == NULL)
3094                             return false;
3095
3096                           osec = sec->output_section;
3097                           isym->st_shndx =
3098                             _bfd_elf_section_from_bfd_section (output_bfd,
3099                                                                osec);
3100                           if (isym->st_shndx == (unsigned short) -1)
3101                             return false;
3102
3103                           isym->st_value += sec->output_offset;
3104                           if (! finfo->info->relocateable)
3105                             isym->st_value += osec->vma;
3106
3107                           finfo->indices[r_symndx] = output_bfd->symcount;
3108
3109                           if (! elf_link_output_sym (finfo, name, isym, sec))
3110                             return false;
3111                         }
3112
3113                       r_symndx = finfo->indices[r_symndx];
3114                     }
3115
3116                   irela->r_info = ELF_R_INFO (r_symndx,
3117                                               ELF_R_TYPE (irela->r_info));
3118                 }
3119
3120               /* Swap out the relocs.  */
3121               input_rel_hdr = &elf_section_data (o)->rel_hdr;
3122               output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
3123               BFD_ASSERT (output_rel_hdr->sh_entsize
3124                           == input_rel_hdr->sh_entsize);
3125               irela = internal_relocs;
3126               irelaend = irela + o->reloc_count;
3127               if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
3128                 {
3129                   Elf_External_Rel *erel;
3130
3131                   erel = ((Elf_External_Rel *) output_rel_hdr->contents
3132                           + o->output_section->reloc_count);
3133                   for (; irela < irelaend; irela++, erel++)
3134                     {
3135                       Elf_Internal_Rel irel;
3136
3137                       irel.r_offset = irela->r_offset;
3138                       irel.r_info = irela->r_info;
3139                       BFD_ASSERT (irela->r_addend == 0);
3140                       elf_swap_reloc_out (output_bfd, &irel, erel);
3141                     }
3142                 }
3143               else
3144                 {
3145                   Elf_External_Rela *erela;
3146
3147                   BFD_ASSERT (input_rel_hdr->sh_entsize
3148                               == sizeof (Elf_External_Rela));
3149                   erela = ((Elf_External_Rela *) output_rel_hdr->contents
3150                            + o->output_section->reloc_count);
3151                   for (; irela < irelaend; irela++, erela++)
3152                     elf_swap_reloca_out (output_bfd, irela, erela);
3153                 }
3154
3155               o->output_section->reloc_count += o->reloc_count;
3156             }
3157         }
3158
3159       /* Write out the modified section contents.  */
3160       if (elf_section_data (o)->stab_info == NULL)
3161         {
3162           if (! bfd_set_section_contents (output_bfd, o->output_section,
3163                                           contents, o->output_offset,
3164                                           (o->_cooked_size != 0
3165                                            ? o->_cooked_size
3166                                            : o->_raw_size)))
3167             return false;
3168         }
3169       else
3170         {
3171           if (! _bfd_write_section_stabs (output_bfd, o,
3172                                           &elf_section_data (o)->stab_info,
3173                                           contents))
3174             return false;
3175         }
3176     }
3177
3178   return true;
3179 }
3180
3181 /* Generate a reloc when linking an ELF file.  This is a reloc
3182    requested by the linker, and does come from any input file.  This
3183    is used to build constructor and destructor tables when linking
3184    with -Ur.  */
3185
3186 static boolean
3187 elf_reloc_link_order (output_bfd, info, output_section, link_order)
3188      bfd *output_bfd;
3189      struct bfd_link_info *info;
3190      asection *output_section;
3191      struct bfd_link_order *link_order;
3192 {
3193   reloc_howto_type *howto;
3194   long indx;
3195   bfd_vma offset;
3196   bfd_vma addend;
3197   struct elf_link_hash_entry **rel_hash_ptr;
3198   Elf_Internal_Shdr *rel_hdr;
3199
3200   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
3201   if (howto == NULL)
3202     {
3203       bfd_set_error (bfd_error_bad_value);
3204       return false;
3205     }
3206
3207   addend = link_order->u.reloc.p->addend;
3208
3209   /* Figure out the symbol index.  */
3210   rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
3211                   + output_section->reloc_count);
3212   if (link_order->type == bfd_section_reloc_link_order)
3213     {
3214       indx = link_order->u.reloc.p->u.section->target_index;
3215       BFD_ASSERT (indx != 0);
3216       *rel_hash_ptr = NULL;
3217     }
3218   else
3219     {
3220       struct elf_link_hash_entry *h;
3221
3222       /* Treat a reloc against a defined symbol as though it were
3223          actually against the section.  */
3224       h = ((struct elf_link_hash_entry *)
3225            bfd_wrapped_link_hash_lookup (output_bfd, info,
3226                                          link_order->u.reloc.p->u.name,
3227                                          false, false, true));
3228       if (h != NULL
3229           && (h->root.type == bfd_link_hash_defined
3230               || h->root.type == bfd_link_hash_defweak))
3231         {
3232           asection *section;
3233
3234           section = h->root.u.def.section;
3235           indx = section->output_section->target_index;
3236           *rel_hash_ptr = NULL;
3237           /* It seems that we ought to add the symbol value to the
3238              addend here, but in practice it has already been added
3239              because it was passed to constructor_callback.  */
3240           addend += section->output_section->vma + section->output_offset;
3241         }
3242       else if (h != NULL)
3243         {
3244           /* Setting the index to -2 tells elf_link_output_extsym that
3245              this symbol is used by a reloc.  */
3246           h->indx = -2;
3247           *rel_hash_ptr = h;
3248           indx = 0;
3249         }
3250       else
3251         {
3252           if (! ((*info->callbacks->unattached_reloc)
3253                  (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
3254                   (asection *) NULL, (bfd_vma) 0)))
3255             return false;
3256           indx = 0;
3257         }
3258     }
3259
3260   /* If this is an inplace reloc, we must write the addend into the
3261      object file.  */
3262   if (howto->partial_inplace && addend != 0)
3263     {
3264       bfd_size_type size;
3265       bfd_reloc_status_type rstat;
3266       bfd_byte *buf;
3267       boolean ok;
3268
3269       size = bfd_get_reloc_size (howto);
3270       buf = (bfd_byte *) bfd_zmalloc (size);
3271       if (buf == (bfd_byte *) NULL)
3272         return false;
3273       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
3274       switch (rstat)
3275         {
3276         case bfd_reloc_ok:
3277           break;
3278         default:
3279         case bfd_reloc_outofrange:
3280           abort ();
3281         case bfd_reloc_overflow:
3282           if (! ((*info->callbacks->reloc_overflow)
3283                  (info,
3284                   (link_order->type == bfd_section_reloc_link_order
3285                    ? bfd_section_name (output_bfd,
3286                                        link_order->u.reloc.p->u.section)
3287                    : link_order->u.reloc.p->u.name),
3288                   howto->name, addend, (bfd *) NULL, (asection *) NULL,
3289                   (bfd_vma) 0)))
3290             {
3291               free (buf);
3292               return false;
3293             }
3294           break;
3295         }
3296       ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
3297                                      (file_ptr) link_order->offset, size);
3298       free (buf);
3299       if (! ok)
3300         return false;
3301     }
3302
3303   /* The address of a reloc is relative to the section in a
3304      relocateable file, and is a virtual address in an executable
3305      file.  */
3306   offset = link_order->offset;
3307   if (! info->relocateable)
3308     offset += output_section->vma;
3309
3310   rel_hdr = &elf_section_data (output_section)->rel_hdr;
3311
3312   if (rel_hdr->sh_type == SHT_REL)
3313     {
3314       Elf_Internal_Rel irel;
3315       Elf_External_Rel *erel;
3316
3317       irel.r_offset = offset;
3318       irel.r_info = ELF_R_INFO (indx, howto->type);
3319       erel = ((Elf_External_Rel *) rel_hdr->contents
3320               + output_section->reloc_count);
3321       elf_swap_reloc_out (output_bfd, &irel, erel);
3322     }
3323   else
3324     {
3325       Elf_Internal_Rela irela;
3326       Elf_External_Rela *erela;
3327
3328       irela.r_offset = offset;
3329       irela.r_info = ELF_R_INFO (indx, howto->type);
3330       irela.r_addend = addend;
3331       erela = ((Elf_External_Rela *) rel_hdr->contents
3332                + output_section->reloc_count);
3333       elf_swap_reloca_out (output_bfd, &irela, erela);
3334     }
3335
3336   ++output_section->reloc_count;
3337
3338   return true;
3339 }
3340
3341 \f
3342 /* Allocate a pointer to live in a linker created section.  */
3343
3344 boolean
3345 elf_create_pointer_linker_section (abfd, info, lsect, h, rel)
3346      bfd *abfd;
3347      struct bfd_link_info *info;
3348      elf_linker_section_t *lsect;
3349      struct elf_link_hash_entry *h;
3350      const Elf_Internal_Rela *rel;
3351 {
3352   elf_linker_section_pointers_t **ptr_linker_section_ptr = NULL;
3353   elf_linker_section_pointers_t *linker_section_ptr;
3354   unsigned long r_symndx = ELF_R_SYM (rel->r_info);;
3355
3356   BFD_ASSERT (lsect != NULL);
3357
3358   /* Is this a global symbol? */
3359   if (h != NULL)
3360     {
3361       /* Has this symbol already been allocated, if so, our work is done */
3362       if (_bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
3363                                                 rel->r_addend,
3364                                                 lsect->which))
3365         return true;
3366
3367       ptr_linker_section_ptr = &h->linker_section_pointer;
3368       /* Make sure this symbol is output as a dynamic symbol.  */
3369       if (h->dynindx == -1)
3370         {
3371           if (! elf_link_record_dynamic_symbol (info, h))
3372             return false;
3373         }
3374
3375       if (lsect->rel_section)
3376         lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
3377     }
3378
3379   else  /* Allocation of a pointer to a local symbol */
3380     {
3381       elf_linker_section_pointers_t **ptr = elf_local_ptr_offsets (abfd);
3382
3383       /* Allocate a table to hold the local symbols if first time */
3384       if (!ptr)
3385         {
3386           int num_symbols = elf_tdata (abfd)->symtab_hdr.sh_info;
3387           register unsigned int i;
3388
3389           ptr = (elf_linker_section_pointers_t **)
3390             bfd_alloc (abfd, num_symbols * sizeof (elf_linker_section_pointers_t *));
3391
3392           if (!ptr)
3393             return false;
3394
3395           elf_local_ptr_offsets (abfd) = ptr;
3396           for (i = 0; i < num_symbols; i++)
3397             ptr[i] = (elf_linker_section_pointers_t *)0;
3398         }
3399
3400       /* Has this symbol already been allocated, if so, our work is done */
3401       if (_bfd_elf_find_pointer_linker_section (ptr[r_symndx],
3402                                                 rel->r_addend,
3403                                                 lsect->which))
3404         return true;
3405
3406       ptr_linker_section_ptr = &ptr[r_symndx];
3407
3408       if (info->shared)
3409         {
3410           /* If we are generating a shared object, we need to
3411              output a R_<xxx>_RELATIVE reloc so that the
3412              dynamic linker can adjust this GOT entry.  */
3413           BFD_ASSERT (lsect->rel_section != NULL);
3414           lsect->rel_section->_raw_size += sizeof (Elf_External_Rela);
3415         }
3416     }
3417
3418   /* Allocate space for a pointer in the linker section, and allocate a new pointer record
3419      from internal memory.  */
3420   BFD_ASSERT (ptr_linker_section_ptr != NULL);
3421   linker_section_ptr = (elf_linker_section_pointers_t *)
3422     bfd_alloc (abfd, sizeof (elf_linker_section_pointers_t));
3423
3424   if (!linker_section_ptr)
3425     return false;
3426
3427   linker_section_ptr->next = *ptr_linker_section_ptr;
3428   linker_section_ptr->addend = rel->r_addend;
3429   linker_section_ptr->which = lsect->which;
3430   linker_section_ptr->written_address_p = false;
3431   *ptr_linker_section_ptr = linker_section_ptr;
3432
3433 #if 0
3434   if (lsect->hole_size && lsect->hole_offset < lsect->max_hole_offset)
3435     {
3436       linker_section_ptr->offset = lsect->section->_raw_size - lsect->hole_size + (ARCH_SIZE / 8);
3437       lsect->hole_offset += ARCH_SIZE / 8;
3438       lsect->sym_offset  += ARCH_SIZE / 8;
3439       if (lsect->sym_hash)      /* Bump up symbol value if needed */
3440         {
3441           lsect->sym_hash->root.u.def.value += ARCH_SIZE / 8;
3442 #ifdef DEBUG
3443           fprintf (stderr, "Bump up %s by %ld, current value = %ld\n",
3444                    lsect->sym_hash->root.root.string,
3445                    (long)ARCH_SIZE / 8,
3446                    (long)lsect->sym_hash->root.u.def.value);
3447 #endif
3448         }
3449     }
3450   else
3451 #endif
3452     linker_section_ptr->offset = lsect->section->_raw_size;
3453
3454   lsect->section->_raw_size += ARCH_SIZE / 8;
3455
3456 #ifdef DEBUG
3457   fprintf (stderr, "Create pointer in linker section %s, offset = %ld, section size = %ld\n",
3458            lsect->name, (long)linker_section_ptr->offset, (long)lsect->section->_raw_size);
3459 #endif
3460
3461   return true;
3462 }
3463
3464 \f
3465 #if ARCH_SIZE==64
3466 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_64 (BFD, VAL, ADDR)
3467 #endif
3468 #if ARCH_SIZE==32
3469 #define bfd_put_ptr(BFD,VAL,ADDR) bfd_put_32 (BFD, VAL, ADDR)
3470 #endif
3471
3472 /* Fill in the address for a pointer generated in alinker section.  */
3473
3474 bfd_vma
3475 elf_finish_pointer_linker_section (output_bfd, input_bfd, info, lsect, h, relocation, rel, relative_reloc)
3476      bfd *output_bfd;
3477      bfd *input_bfd;
3478      struct bfd_link_info *info;
3479      elf_linker_section_t *lsect;
3480      struct elf_link_hash_entry *h;
3481      bfd_vma relocation;
3482      const Elf_Internal_Rela *rel;
3483      int relative_reloc;
3484 {
3485   elf_linker_section_pointers_t *linker_section_ptr;
3486
3487   BFD_ASSERT (lsect != NULL);
3488
3489   if (h != NULL)                /* global symbol */
3490     {
3491       linker_section_ptr = _bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
3492                                                                  rel->r_addend,
3493                                                                  lsect->which);
3494
3495       BFD_ASSERT (linker_section_ptr != NULL);
3496
3497       if (! elf_hash_table (info)->dynamic_sections_created
3498           || (info->shared
3499               && info->symbolic
3500               && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
3501         {
3502           /* This is actually a static link, or it is a
3503              -Bsymbolic link and the symbol is defined
3504              locally.  We must initialize this entry in the
3505              global section.
3506
3507              When doing a dynamic link, we create a .rela.<xxx>
3508              relocation entry to initialize the value.  This
3509              is done in the finish_dynamic_symbol routine.  */
3510           if (!linker_section_ptr->written_address_p)
3511             {
3512               linker_section_ptr->written_address_p = true;
3513               bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend,
3514                           lsect->section->contents + linker_section_ptr->offset);
3515             }
3516         }
3517     }
3518   else                          /* local symbol */
3519     {
3520       unsigned long r_symndx = ELF_R_SYM (rel->r_info);
3521       BFD_ASSERT (elf_local_ptr_offsets (input_bfd) != NULL);
3522       BFD_ASSERT (elf_local_ptr_offsets (input_bfd)[r_symndx] != NULL);
3523       linker_section_ptr = _bfd_elf_find_pointer_linker_section (elf_local_ptr_offsets (input_bfd)[r_symndx],
3524                                                                  rel->r_addend,
3525                                                                  lsect->which);
3526
3527       BFD_ASSERT (linker_section_ptr != NULL);
3528
3529       /* Write out pointer if it hasn't been rewritten out before */
3530       if (!linker_section_ptr->written_address_p)
3531         {
3532           linker_section_ptr->written_address_p = true;
3533           bfd_put_ptr (output_bfd, relocation + linker_section_ptr->addend,
3534                        lsect->section->contents + linker_section_ptr->offset);
3535
3536           if (info->shared)
3537             {
3538               asection *srel = lsect->rel_section;
3539               Elf_Internal_Rela outrel;
3540
3541               /* We need to generate a relative reloc for the dynamic linker.  */
3542               if (!srel)
3543                 lsect->rel_section = srel = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
3544                                                                      lsect->rel_name);
3545
3546               BFD_ASSERT (srel != NULL);
3547
3548               outrel.r_offset = (lsect->section->output_section->vma
3549                                  + lsect->section->output_offset
3550                                  + linker_section_ptr->offset);
3551               outrel.r_info = ELF_R_INFO (0, relative_reloc);
3552               outrel.r_addend = 0;
3553               elf_swap_reloca_out (output_bfd, &outrel,
3554                                    (((Elf_External_Rela *)
3555                                      lsect->section->contents)
3556                                     + lsect->section->reloc_count));
3557               ++lsect->section->reloc_count;
3558             }
3559         }
3560     }
3561
3562   relocation = (lsect->section->output_offset
3563                 + linker_section_ptr->offset
3564                 - lsect->hole_offset
3565                 - lsect->sym_offset);
3566
3567 #ifdef DEBUG
3568   fprintf (stderr, "Finish pointer in linker section %s, offset = %ld (0x%lx)\n",
3569            lsect->name, (long)relocation, (long)relocation);
3570 #endif
3571
3572   /* Subtract out the addend, because it will get added back in by the normal
3573      processing.  */
3574   return relocation - linker_section_ptr->addend;
3575 }
This page took 0.225456 seconds and 4 git commands to generate.