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