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