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