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