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