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