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