2 Copyright 1995 Free Software Foundation, Inc.
4 This file is part of BFD, the Binary File Descriptor library.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20 /* ELF linker code. */
22 static boolean elf_link_add_object_symbols
23 PARAMS ((bfd *, struct bfd_link_info *));
24 static boolean elf_link_add_archive_symbols
25 PARAMS ((bfd *, struct bfd_link_info *));
26 static Elf_Internal_Rela *elf_link_read_relocs
27 PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
28 static boolean elf_export_symbol
29 PARAMS ((struct elf_link_hash_entry *, PTR));
30 static boolean elf_adjust_dynamic_symbol
31 PARAMS ((struct elf_link_hash_entry *, PTR));
33 /* This struct is used to pass information to routines called via
34 elf_link_hash_traverse which must return failure. */
36 struct elf_info_failed
39 struct bfd_link_info *info;
42 /* Given an ELF BFD, add symbols to the global hash table as
46 elf_bfd_link_add_symbols (abfd, info)
48 struct bfd_link_info *info;
50 switch (bfd_get_format (abfd))
53 return elf_link_add_object_symbols (abfd, info);
55 return elf_link_add_archive_symbols (abfd, info);
57 bfd_set_error (bfd_error_wrong_format);
62 /* Add symbols from an ELF archive file to the linker hash table. We
63 don't use _bfd_generic_link_add_archive_symbols because of a
64 problem which arises on UnixWare. The UnixWare libc.so is an
65 archive which includes an entry libc.so.1 which defines a bunch of
66 symbols. The libc.so archive also includes a number of other
67 object files, which also define symbols, some of which are the same
68 as those defined in libc.so.1. Correct linking requires that we
69 consider each object file in turn, and include it if it defines any
70 symbols we need. _bfd_generic_link_add_archive_symbols does not do
71 this; it looks through the list of undefined symbols, and includes
72 any object file which defines them. When this algorithm is used on
73 UnixWare, it winds up pulling in libc.so.1 early and defining a
74 bunch of symbols. This means that some of the other objects in the
75 archive are not included in the link, which is incorrect since they
76 precede libc.so.1 in the archive.
78 Fortunately, ELF archive handling is simpler than that done by
79 _bfd_generic_link_add_archive_symbols, which has to allow for a.out
80 oddities. In ELF, if we find a symbol in the archive map, and the
81 symbol is currently undefined, we know that we must pull in that
84 Unfortunately, we do have to make multiple passes over the symbol
85 table until nothing further is resolved. */
88 elf_link_add_archive_symbols (abfd, info)
90 struct bfd_link_info *info;
93 boolean *defined = NULL;
94 boolean *included = NULL;
98 if (! bfd_has_map (abfd))
100 /* An empty archive is a special case. */
101 if (bfd_openr_next_archived_file (abfd, (bfd *) NULL) == NULL)
103 bfd_set_error (bfd_error_no_armap);
107 /* Keep track of all symbols we know to be already defined, and all
108 files we know to be already included. This is to speed up the
109 second and subsequent passes. */
110 c = bfd_ardata (abfd)->symdef_count;
113 defined = (boolean *) malloc (c * sizeof (boolean));
114 included = (boolean *) malloc (c * sizeof (boolean));
115 if (defined == (boolean *) NULL || included == (boolean *) NULL)
117 bfd_set_error (bfd_error_no_memory);
120 memset (defined, 0, c * sizeof (boolean));
121 memset (included, 0, c * sizeof (boolean));
123 symdefs = bfd_ardata (abfd)->symdefs;
136 symdefend = symdef + c;
137 for (i = 0; symdef < symdefend; symdef++, i++)
139 struct elf_link_hash_entry *h;
141 struct bfd_link_hash_entry *undefs_tail;
144 if (defined[i] || included[i])
146 if (symdef->file_offset == last)
152 h = elf_link_hash_lookup (elf_hash_table (info), symdef->name,
153 false, false, false);
154 if (h == (struct elf_link_hash_entry *) NULL)
156 if (h->root.type != bfd_link_hash_undefined)
158 if (h->root.type != bfd_link_hash_undefweak)
163 /* We need to include this archive member. */
165 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
166 if (element == (bfd *) NULL)
169 if (! bfd_check_format (element, bfd_object))
172 /* Doublecheck that we have not included this object
173 already--it should be impossible, but there may be
174 something wrong with the archive. */
175 if (element->archive_pass != 0)
177 bfd_set_error (bfd_error_bad_value);
180 element->archive_pass = 1;
182 undefs_tail = info->hash->undefs_tail;
184 if (! (*info->callbacks->add_archive_element) (info, element,
187 if (! elf_link_add_object_symbols (element, info))
190 /* If there are any new undefined symbols, we need to make
191 another pass through the archive in order to see whether
192 they can be defined. FIXME: This isn't perfect, because
193 common symbols wind up on undefs_tail and because an
194 undefined symbol which is defined later on in this pass
195 does not require another pass. This isn't a bug, but it
196 does make the code less efficient than it could be. */
197 if (undefs_tail != info->hash->undefs_tail)
200 /* Look backward to mark all symbols from this object file
201 which we have already seen in this pass. */
205 included[mark] = true;
210 while (symdefs[mark].file_offset == symdef->file_offset);
212 /* We mark subsequent symbols from this object file as we go
213 on through the loop. */
214 last = symdef->file_offset;
225 if (defined != (boolean *) NULL)
227 if (included != (boolean *) NULL)
232 /* Add symbols from an ELF object file to the linker hash table. */
235 elf_link_add_object_symbols (abfd, info)
237 struct bfd_link_info *info;
239 boolean (*add_symbol_hook) PARAMS ((bfd *, struct bfd_link_info *,
240 const Elf_Internal_Sym *,
241 const char **, flagword *,
242 asection **, bfd_vma *));
243 boolean (*check_relocs) PARAMS ((bfd *, struct bfd_link_info *,
244 asection *, const Elf_Internal_Rela *));
246 Elf_Internal_Shdr *hdr;
250 Elf_External_Sym *buf = NULL;
251 struct elf_link_hash_entry **sym_hash;
253 Elf_External_Dyn *dynbuf = NULL;
254 struct elf_link_hash_entry *weaks;
255 Elf_External_Sym *esym;
256 Elf_External_Sym *esymend;
258 add_symbol_hook = get_elf_backend_data (abfd)->elf_add_symbol_hook;
259 collect = get_elf_backend_data (abfd)->collect;
261 /* As a GNU extension, any input sections which are named
262 .gnu.warning.SYMBOL are treated as warning symbols for the given
263 symbol. This differs from .gnu.warning sections, which generate
264 warnings when they are included in an output file. */
269 for (s = abfd->sections; s != NULL; s = s->next)
273 name = bfd_get_section_name (abfd, s);
274 if (strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0)
279 sz = bfd_section_size (abfd, s);
280 msg = (char *) bfd_alloc (abfd, sz);
284 if (! bfd_get_section_contents (abfd, s, msg, (file_ptr) 0, sz))
287 if (! (_bfd_generic_link_add_one_symbol
289 name + sizeof ".gnu.warning." - 1,
290 BSF_WARNING, s, (bfd_vma) 0, msg, false, collect,
291 (struct bfd_link_hash_entry **) NULL)))
294 if (! info->relocateable)
296 /* Clobber the section size so that the warning does
297 not get copied into the output file. */
304 /* A stripped shared library might only have a dynamic symbol table,
305 not a regular symbol table. In that case we can still go ahead
306 and link using the dynamic symbol table. */
307 if (elf_onesymtab (abfd) == 0
308 && elf_dynsymtab (abfd) != 0)
310 elf_onesymtab (abfd) = elf_dynsymtab (abfd);
311 elf_tdata (abfd)->symtab_hdr = elf_tdata (abfd)->dynsymtab_hdr;
314 hdr = &elf_tdata (abfd)->symtab_hdr;
315 symcount = hdr->sh_size / sizeof (Elf_External_Sym);
317 /* The sh_info field of the symtab header tells us where the
318 external symbols start. We don't care about the local symbols at
320 if (elf_bad_symtab (abfd))
322 extsymcount = symcount;
327 extsymcount = symcount - hdr->sh_info;
328 extsymoff = hdr->sh_info;
331 buf = (Elf_External_Sym *) malloc (extsymcount * sizeof (Elf_External_Sym));
332 if (buf == NULL && extsymcount != 0)
334 bfd_set_error (bfd_error_no_memory);
338 /* We store a pointer to the hash table entry for each external
340 sym_hash = ((struct elf_link_hash_entry **)
342 extsymcount * sizeof (struct elf_link_hash_entry *)));
343 if (sym_hash == NULL)
345 elf_sym_hashes (abfd) = sym_hash;
347 if (elf_elfheader (abfd)->e_type != ET_DYN)
351 /* If we are creating a shared library, create all the dynamic
352 sections immediately. We need to attach them to something,
353 so we attach them to this BFD, provided it is the right
354 format. FIXME: If there are no input BFD's of the same
355 format as the output, we can't make a shared library. */
357 && ! elf_hash_table (info)->dynamic_sections_created
358 && abfd->xvec == info->hash->creator)
360 if (! elf_link_create_dynamic_sections (abfd, info))
369 bfd_size_type oldsize;
370 bfd_size_type strindex;
374 /* You can't use -r against a dynamic object. Also, there's no
375 hope of using a dynamic object which does not exactly match
376 the format of the output file. */
377 if (info->relocateable
378 || info->hash->creator != abfd->xvec)
380 bfd_set_error (bfd_error_invalid_operation);
384 /* Find the name to use in a DT_NEEDED entry that refers to this
385 object. If the object has a DT_SONAME entry, we use it.
386 Otherwise, if the generic linker stuck something in
387 elf_dt_needed_name, we use that. Otherwise, we just use the
388 file name. If the generic linker put a null string into
389 elf_dt_needed_name, we don't make a DT_NEEDED entry at all,
390 even if there is a DT_SONAME entry. */
392 name = bfd_get_filename (abfd);
393 if (elf_dt_needed_name (abfd) != NULL)
395 name = elf_dt_needed_name (abfd);
399 s = bfd_get_section_by_name (abfd, ".dynamic");
402 Elf_External_Dyn *extdyn;
403 Elf_External_Dyn *extdynend;
407 dynbuf = (Elf_External_Dyn *) malloc ((size_t) s->_raw_size);
410 bfd_set_error (bfd_error_no_memory);
414 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf,
415 (file_ptr) 0, s->_raw_size))
418 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
421 link = elf_elfsections (abfd)[elfsec]->sh_link;
424 extdynend = extdyn + s->_raw_size / sizeof (Elf_External_Dyn);
425 for (; extdyn < extdynend; extdyn++)
427 Elf_Internal_Dyn dyn;
429 elf_swap_dyn_in (abfd, extdyn, &dyn);
430 if (add_needed && dyn.d_tag == DT_SONAME)
432 name = bfd_elf_string_from_elf_section (abfd, link,
437 if (dyn.d_tag == DT_NEEDED)
439 struct bfd_link_needed_list *n, **pn;
442 n = ((struct bfd_link_needed_list *)
443 bfd_alloc (abfd, sizeof (struct bfd_link_needed_list)));
444 fnm = bfd_elf_string_from_elf_section (abfd, link,
446 if (n == NULL || fnm == NULL)
448 anm = bfd_alloc (abfd, strlen (fnm) + 1);
455 for (pn = &elf_hash_table (info)->needed;
467 /* We do not want to include any of the sections in a dynamic
468 object in the output file. We hack by simply clobbering the
469 list of sections in the BFD. This could be handled more
470 cleanly by, say, a new section flag; the existing
471 SEC_NEVER_LOAD flag is not the one we want, because that one
472 still implies that the section takes up space in the output
474 abfd->sections = NULL;
476 /* If this is the first dynamic object found in the link, create
477 the special sections required for dynamic linking. */
478 if (! elf_hash_table (info)->dynamic_sections_created)
480 if (! elf_link_create_dynamic_sections (abfd, info))
486 /* Add a DT_NEEDED entry for this dynamic object. */
487 oldsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
488 strindex = _bfd_stringtab_add (elf_hash_table (info)->dynstr, name,
490 if (strindex == (bfd_size_type) -1)
493 if (oldsize == _bfd_stringtab_size (elf_hash_table (info)->dynstr))
496 Elf_External_Dyn *dyncon, *dynconend;
498 /* The hash table size did not change, which means that
499 the dynamic object name was already entered. If we
500 have already included this dynamic object in the
501 link, just ignore it. There is no reason to include
502 a particular dynamic object more than once. */
503 sdyn = bfd_get_section_by_name (elf_hash_table (info)->dynobj,
505 BFD_ASSERT (sdyn != NULL);
507 dyncon = (Elf_External_Dyn *) sdyn->contents;
508 dynconend = (Elf_External_Dyn *) (sdyn->contents +
510 for (; dyncon < dynconend; dyncon++)
512 Elf_Internal_Dyn dyn;
514 elf_swap_dyn_in (elf_hash_table (info)->dynobj, dyncon,
516 if (dyn.d_tag == DT_NEEDED
517 && dyn.d_un.d_val == strindex)
526 if (! elf_add_dynamic_entry (info, DT_NEEDED, strindex))
532 hdr->sh_offset + extsymoff * sizeof (Elf_External_Sym),
534 || (bfd_read ((PTR) buf, sizeof (Elf_External_Sym), extsymcount, abfd)
535 != extsymcount * sizeof (Elf_External_Sym)))
540 esymend = buf + extsymcount;
541 for (esym = buf; esym < esymend; esym++, sym_hash++)
543 Elf_Internal_Sym sym;
549 struct elf_link_hash_entry *h;
551 boolean size_change_ok, type_change_ok;
554 elf_swap_symbol_in (abfd, esym, &sym);
556 flags = BSF_NO_FLAGS;
558 value = sym.st_value;
561 bind = ELF_ST_BIND (sym.st_info);
562 if (bind == STB_LOCAL)
564 /* This should be impossible, since ELF requires that all
565 global symbols follow all local symbols, and that sh_info
566 point to the first global symbol. Unfortunatealy, Irix 5
570 else if (bind == STB_GLOBAL)
572 if (sym.st_shndx != SHN_UNDEF
573 && sym.st_shndx != SHN_COMMON)
578 else if (bind == STB_WEAK)
582 /* Leave it up to the processor backend. */
585 if (sym.st_shndx == SHN_UNDEF)
586 sec = bfd_und_section_ptr;
587 else if (sym.st_shndx > 0 && sym.st_shndx < SHN_LORESERVE)
589 sec = section_from_elf_index (abfd, sym.st_shndx);
593 sec = bfd_abs_section_ptr;
595 else if (sym.st_shndx == SHN_ABS)
596 sec = bfd_abs_section_ptr;
597 else if (sym.st_shndx == SHN_COMMON)
599 sec = bfd_com_section_ptr;
600 /* What ELF calls the size we call the value. What ELF
601 calls the value we call the alignment. */
606 /* Leave it up to the processor backend. */
609 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
610 if (name == (const char *) NULL)
615 if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
619 /* The hook function sets the name to NULL if this symbol
620 should be skipped for some reason. */
621 if (name == (const char *) NULL)
625 /* Sanity check that all possibilities were handled. */
626 if (sec == (asection *) NULL)
628 bfd_set_error (bfd_error_bad_value);
632 if (bfd_is_und_section (sec)
633 || bfd_is_com_section (sec))
638 size_change_ok = false;
639 type_change_ok = false;
640 if (info->hash->creator->flavour == bfd_target_elf_flavour)
642 /* We need to look up the symbol now in order to get some of
643 the dynamic object handling right. We pass the hash
644 table entry in to _bfd_generic_link_add_one_symbol so
645 that it does not have to look it up again. */
646 h = elf_link_hash_lookup (elf_hash_table (info), name,
652 while (h->root.type == bfd_link_hash_indirect
653 || h->root.type == bfd_link_hash_warning)
654 h = (struct elf_link_hash_entry *) h->root.u.i.link;
656 /* It's OK to change the type if it used to be a weak
658 type_change_ok = (h->root.type == bfd_link_hash_defweak
659 || h->root.type == bfd_link_hash_undefweak);
661 /* It's OK to change the size if it used to be a weak
662 definition, or if it used to be undefined, or if we will
663 be overriding an old definition.
665 size_change_ok = (type_change_ok
666 || h->root.type == bfd_link_hash_undefined);
668 /* If we are looking at a dynamic object, and this is a
669 definition, we need to see if it has already been defined
670 by some other object. If it has, we want to use the
671 existing definition, and we do not want to report a
672 multiple symbol definition error; we do this by
673 clobbering sec to be bfd_und_section_ptr. */
674 if (dynamic && definition)
676 if (h->root.type == bfd_link_hash_defined
677 || h->root.type == bfd_link_hash_defweak
678 || (h->root.type == bfd_link_hash_common
679 && bind == STB_WEAK))
681 sec = bfd_und_section_ptr;
683 size_change_ok = true;
687 /* Similarly, if we are not looking at a dynamic object, and
688 we have a definition, we want to override any definition
689 we may have from a dynamic object. Symbols from regular
690 files always take precedence over symbols from dynamic
691 objects, even if they are defined after the dynamic
692 object in the link. */
695 && (h->root.type == bfd_link_hash_defined
696 || h->root.type == bfd_link_hash_defweak)
697 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
698 && (bfd_get_flavour (h->root.u.def.section->owner)
699 == bfd_target_elf_flavour)
700 && (elf_elfheader (h->root.u.def.section->owner)->e_type
703 /* Change the hash table entry to undefined, and let
704 _bfd_generic_link_add_one_symbol do the right thing
705 with the new definition. */
706 h->root.type = bfd_link_hash_undefined;
707 h->root.u.undef.abfd = h->root.u.def.section->owner;
708 size_change_ok = true;
712 if (! (_bfd_generic_link_add_one_symbol
713 (info, abfd, name, flags, sec, value, (const char *) NULL,
714 false, collect, (struct bfd_link_hash_entry **) sym_hash)))
718 while (h->root.type == bfd_link_hash_indirect
719 || h->root.type == bfd_link_hash_warning)
720 h = (struct elf_link_hash_entry *) h->root.u.i.link;
726 && (flags & BSF_WEAK) != 0
727 && ELF_ST_TYPE (sym.st_info) != STT_FUNC
728 && info->hash->creator->flavour == bfd_target_elf_flavour
729 && h->weakdef == NULL)
731 /* Keep a list of all weak defined non function symbols from
732 a dynamic object, using the weakdef field. Later in this
733 function we will set the weakdef field to the correct
734 value. We only put non-function symbols from dynamic
735 objects on this list, because that happens to be the only
736 time we need to know the normal symbol corresponding to a
737 weak symbol, and the information is time consuming to
738 figure out. If the weakdef field is not already NULL,
739 then this symbol was already defined by some previous
740 dynamic object, and we will be using that previous
741 definition anyhow. */
748 /* Get the alignment of a common symbol. */
749 if (sym.st_shndx == SHN_COMMON
750 && h->root.type == bfd_link_hash_common)
751 h->root.u.c.p->alignment_power = bfd_log2 (sym.st_value);
753 if (info->hash->creator->flavour == bfd_target_elf_flavour)
759 /* Remember the symbol size and type. */
761 && (definition || h->size == 0))
763 if (h->size != 0 && h->size != sym.st_size && ! size_change_ok)
764 (*_bfd_error_handler)
765 ("Warning: size of symbol `%s' changed from %lu to %lu in %s",
766 name, (unsigned long) h->size, (unsigned long) sym.st_size,
767 bfd_get_filename (abfd));
769 h->size = sym.st_size;
771 if (ELF_ST_TYPE (sym.st_info) != STT_NOTYPE
772 && (definition || h->type == STT_NOTYPE))
774 if (h->type != STT_NOTYPE
775 && h->type != ELF_ST_TYPE (sym.st_info)
777 (*_bfd_error_handler)
778 ("Warning: type of symbol `%s' changed from %d to %d in %s",
779 name, h->type, ELF_ST_TYPE (sym.st_info),
780 bfd_get_filename (abfd));
782 h->type = ELF_ST_TYPE (sym.st_info);
785 /* Set a flag in the hash table entry indicating the type of
786 reference or definition we just found. Keep a count of
787 the number of dynamic symbols we find. A dynamic symbol
788 is one which is referenced or defined by both a regular
789 object and a shared object, or one which is referenced or
790 defined by more than one shared object. */
791 old_flags = h->elf_link_hash_flags;
796 new_flag = ELF_LINK_HASH_REF_REGULAR;
798 new_flag = ELF_LINK_HASH_DEF_REGULAR;
800 || (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
801 | ELF_LINK_HASH_REF_DYNAMIC)) != 0)
807 new_flag = ELF_LINK_HASH_REF_DYNAMIC;
809 new_flag = ELF_LINK_HASH_DEF_DYNAMIC;
810 if ((old_flags & new_flag) != 0
811 || (old_flags & (ELF_LINK_HASH_DEF_REGULAR
812 | ELF_LINK_HASH_REF_REGULAR)) != 0
813 || (h->weakdef != NULL
814 && (old_flags & (ELF_LINK_HASH_DEF_DYNAMIC
815 | ELF_LINK_HASH_REF_DYNAMIC)) != 0))
819 h->elf_link_hash_flags |= new_flag;
820 if (dynsym && h->dynindx == -1)
822 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
824 if (h->weakdef != NULL
826 && h->weakdef->dynindx == -1)
828 if (! _bfd_elf_link_record_dynamic_symbol (info,
836 /* Now set the weakdefs field correctly for all the weak defined
837 symbols we found. The only way to do this is to search all the
838 symbols. Since we only need the information for non functions in
839 dynamic objects, that's the only time we actually put anything on
840 the list WEAKS. We need this information so that if a regular
841 object refers to a symbol defined weakly in a dynamic object, the
842 real symbol in the dynamic object is also put in the dynamic
843 symbols; we also must arrange for both symbols to point to the
844 same memory location. We could handle the general case of symbol
845 aliasing, but a general symbol alias can only be generated in
846 assembler code, handling it correctly would be very time
847 consuming, and other ELF linkers don't handle general aliasing
849 while (weaks != NULL)
851 struct elf_link_hash_entry *hlook;
854 struct elf_link_hash_entry **hpp;
855 struct elf_link_hash_entry **hppend;
858 weaks = hlook->weakdef;
859 hlook->weakdef = NULL;
861 BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
862 || hlook->root.type == bfd_link_hash_defweak
863 || hlook->root.type == bfd_link_hash_common
864 || hlook->root.type == bfd_link_hash_indirect);
865 slook = hlook->root.u.def.section;
866 vlook = hlook->root.u.def.value;
868 hpp = elf_sym_hashes (abfd);
869 hppend = hpp + extsymcount;
870 for (; hpp < hppend; hpp++)
872 struct elf_link_hash_entry *h;
875 if (h != NULL && h != hlook
876 && (h->root.type == bfd_link_hash_defined
877 || h->root.type == bfd_link_hash_defweak)
878 && h->root.u.def.section == slook
879 && h->root.u.def.value == vlook)
883 /* If the weak definition is in the list of dynamic
884 symbols, make sure the real definition is put there
886 if (hlook->dynindx != -1
889 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
904 /* If this object is the same format as the output object, and it is
905 not a shared library, then let the backend look through the
908 This is required to build global offset table entries and to
909 arrange for dynamic relocs. It is not required for the
910 particular common case of linking non PIC code, even when linking
911 against shared libraries, but unfortunately there is no way of
912 knowing whether an object file has been compiled PIC or not.
913 Looking through the relocs is not particularly time consuming.
914 The problem is that we must either (1) keep the relocs in memory,
915 which causes the linker to require additional runtime memory or
916 (2) read the relocs twice from the input file, which wastes time.
917 This would be a good case for using mmap.
919 I have no idea how to handle linking PIC code into a file of a
920 different format. It probably can't be done. */
921 check_relocs = get_elf_backend_data (abfd)->check_relocs;
923 && abfd->xvec == info->hash->creator
924 && check_relocs != NULL)
928 for (o = abfd->sections; o != NULL; o = o->next)
930 Elf_Internal_Rela *internal_relocs;
933 if ((o->flags & SEC_RELOC) == 0
934 || o->reloc_count == 0)
937 /* I believe we can ignore the relocs for any section which
938 does not form part of the final process image, such as a
939 debugging section. */
940 if ((o->flags & SEC_ALLOC) == 0)
943 internal_relocs = elf_link_read_relocs (abfd, o, (PTR) NULL,
944 (Elf_Internal_Rela *) NULL,
946 if (internal_relocs == NULL)
949 ok = (*check_relocs) (abfd, info, o, internal_relocs);
951 if (! info->keep_memory)
952 free (internal_relocs);
969 /* Create some sections which will be filled in with dynamic linking
970 information. ABFD is an input file which requires dynamic sections
971 to be created. The dynamic sections take up virtual memory space
972 when the final executable is run, so we need to create them before
973 addresses are assigned to the output sections. We work out the
974 actual contents and size of these sections later. */
977 elf_link_create_dynamic_sections (abfd, info)
979 struct bfd_link_info *info;
982 register asection *s;
983 struct elf_link_hash_entry *h;
984 struct elf_backend_data *bed;
986 if (elf_hash_table (info)->dynamic_sections_created)
989 /* Make sure that all dynamic sections use the same input BFD. */
990 if (elf_hash_table (info)->dynobj == NULL)
991 elf_hash_table (info)->dynobj = abfd;
993 abfd = elf_hash_table (info)->dynobj;
995 /* Note that we set the SEC_IN_MEMORY flag for all of these
997 flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;
999 /* A dynamically linked executable has a .interp section, but a
1000 shared library does not. */
1003 s = bfd_make_section (abfd, ".interp");
1005 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1009 s = bfd_make_section (abfd, ".dynsym");
1011 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1012 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1015 s = bfd_make_section (abfd, ".dynstr");
1017 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY))
1020 /* Create a strtab to hold the dynamic symbol names. */
1021 if (elf_hash_table (info)->dynstr == NULL)
1023 elf_hash_table (info)->dynstr = elf_stringtab_init ();
1024 if (elf_hash_table (info)->dynstr == NULL)
1028 s = bfd_make_section (abfd, ".dynamic");
1030 || ! bfd_set_section_flags (abfd, s, flags)
1031 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1034 /* The special symbol _DYNAMIC is always set to the start of the
1035 .dynamic section. This call occurs before we have processed the
1036 symbols for any dynamic object, so we don't have to worry about
1037 overriding a dynamic definition. We could set _DYNAMIC in a
1038 linker script, but we only want to define it if we are, in fact,
1039 creating a .dynamic section. We don't want to define it if there
1040 is no .dynamic section, since on some ELF platforms the start up
1041 code examines it to decide how to initialize the process. */
1043 if (! (_bfd_generic_link_add_one_symbol
1044 (info, abfd, "_DYNAMIC", BSF_GLOBAL, s, (bfd_vma) 0,
1045 (const char *) NULL, false, get_elf_backend_data (abfd)->collect,
1046 (struct bfd_link_hash_entry **) &h)))
1048 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1049 h->type = STT_OBJECT;
1052 && ! _bfd_elf_link_record_dynamic_symbol (info, h))
1055 s = bfd_make_section (abfd, ".hash");
1057 || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
1058 || ! bfd_set_section_alignment (abfd, s, LOG_FILE_ALIGN))
1061 /* Let the backend create the rest of the sections. This lets the
1062 backend set the right flags. The backend will normally create
1063 the .got and .plt sections. */
1064 bed = get_elf_backend_data (abfd);
1065 if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
1068 elf_hash_table (info)->dynamic_sections_created = true;
1073 /* Add an entry to the .dynamic table. */
1076 elf_add_dynamic_entry (info, tag, val)
1077 struct bfd_link_info *info;
1081 Elf_Internal_Dyn dyn;
1085 bfd_byte *newcontents;
1087 dynobj = elf_hash_table (info)->dynobj;
1089 s = bfd_get_section_by_name (dynobj, ".dynamic");
1090 BFD_ASSERT (s != NULL);
1092 newsize = s->_raw_size + sizeof (Elf_External_Dyn);
1093 if (s->contents == NULL)
1094 newcontents = (bfd_byte *) malloc (newsize);
1096 newcontents = (bfd_byte *) realloc (s->contents, newsize);
1097 if (newcontents == NULL)
1099 bfd_set_error (bfd_error_no_memory);
1104 dyn.d_un.d_val = val;
1105 elf_swap_dyn_out (dynobj, &dyn,
1106 (Elf_External_Dyn *) (newcontents + s->_raw_size));
1108 s->_raw_size = newsize;
1109 s->contents = newcontents;
1114 /* Read and swap the relocs for a section. They may have been cached.
1115 If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are not NULL,
1116 they are used as buffers to read into. They are known to be large
1117 enough. If the INTERNAL_RELOCS relocs argument is NULL, the return
1118 value is allocated using either malloc or bfd_alloc, according to
1119 the KEEP_MEMORY argument. */
1121 static Elf_Internal_Rela *
1122 elf_link_read_relocs (abfd, o, external_relocs, internal_relocs, keep_memory)
1125 PTR external_relocs;
1126 Elf_Internal_Rela *internal_relocs;
1127 boolean keep_memory;
1129 Elf_Internal_Shdr *rel_hdr;
1131 Elf_Internal_Rela *alloc2 = NULL;
1133 if (elf_section_data (o)->relocs != NULL)
1134 return elf_section_data (o)->relocs;
1136 if (o->reloc_count == 0)
1139 rel_hdr = &elf_section_data (o)->rel_hdr;
1141 if (internal_relocs == NULL)
1145 size = o->reloc_count * sizeof (Elf_Internal_Rela);
1147 internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
1149 internal_relocs = alloc2 = (Elf_Internal_Rela *) malloc (size);
1150 if (internal_relocs == NULL)
1152 bfd_set_error (bfd_error_no_memory);
1157 if (external_relocs == NULL)
1159 alloc1 = (PTR) malloc ((size_t) rel_hdr->sh_size);
1162 bfd_set_error (bfd_error_no_memory);
1165 external_relocs = alloc1;
1168 if ((bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
1169 || (bfd_read (external_relocs, 1, rel_hdr->sh_size, abfd)
1170 != rel_hdr->sh_size))
1173 /* Swap in the relocs. For convenience, we always produce an
1174 Elf_Internal_Rela array; if the relocs are Rel, we set the addend
1176 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
1178 Elf_External_Rel *erel;
1179 Elf_External_Rel *erelend;
1180 Elf_Internal_Rela *irela;
1182 erel = (Elf_External_Rel *) external_relocs;
1183 erelend = erel + o->reloc_count;
1184 irela = internal_relocs;
1185 for (; erel < erelend; erel++, irela++)
1187 Elf_Internal_Rel irel;
1189 elf_swap_reloc_in (abfd, erel, &irel);
1190 irela->r_offset = irel.r_offset;
1191 irela->r_info = irel.r_info;
1192 irela->r_addend = 0;
1197 Elf_External_Rela *erela;
1198 Elf_External_Rela *erelaend;
1199 Elf_Internal_Rela *irela;
1201 BFD_ASSERT (rel_hdr->sh_entsize == sizeof (Elf_External_Rela));
1203 erela = (Elf_External_Rela *) external_relocs;
1204 erelaend = erela + o->reloc_count;
1205 irela = internal_relocs;
1206 for (; erela < erelaend; erela++, irela++)
1207 elf_swap_reloca_in (abfd, erela, irela);
1210 /* Cache the results for next time, if we can. */
1212 elf_section_data (o)->relocs = internal_relocs;
1217 /* Don't free alloc2, since if it was allocated we are passing it
1218 back (under the name of internal_relocs). */
1220 return internal_relocs;
1230 /* Record an assignment to a symbol made by a linker script. We need
1231 this in case some dynamic object refers to this symbol. */
1235 NAME(bfd_elf,record_link_assignment) (output_bfd, info, name, provide)
1237 struct bfd_link_info *info;
1241 struct elf_link_hash_entry *h;
1243 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1246 h = elf_link_hash_lookup (elf_hash_table (info), name, true, true, false);
1250 /* If this symbol is being provided by the linker script, and it is
1251 currently defined by a dynamic object, but not by a regular
1252 object, then mark it as undefined so that the generic linker will
1253 force the correct value. */
1255 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1256 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
1257 h->root.type = bfd_link_hash_undefined;
1259 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1260 h->type = STT_OBJECT;
1262 if (((h->elf_link_hash_flags & (ELF_LINK_HASH_DEF_DYNAMIC
1263 | ELF_LINK_HASH_REF_DYNAMIC)) != 0
1265 && h->dynindx == -1)
1267 if (! _bfd_elf_link_record_dynamic_symbol (info, h))
1270 /* If this is a weak defined symbol, and we know a corresponding
1271 real symbol from the same dynamic object, make sure the real
1272 symbol is also made into a dynamic symbol. */
1273 if (h->weakdef != NULL
1274 && h->weakdef->dynindx == -1)
1276 if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
1284 /* Array used to determine the number of hash table buckets to use
1285 based on the number of symbols there are. If there are fewer than
1286 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
1287 fewer than 37 we use 17 buckets, and so forth. We never use more
1288 than 521 buckets. */
1290 static const size_t elf_buckets[] =
1292 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 0
1295 /* Set up the sizes and contents of the ELF dynamic sections. This is
1296 called by the ELF linker emulation before_allocation routine. We
1297 must set the sizes of the sections before the linker sets the
1298 addresses of the various sections. */
1301 NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
1302 export_dynamic, info, sinterpptr)
1306 boolean export_dynamic;
1307 struct bfd_link_info *info;
1308 asection **sinterpptr;
1311 struct elf_backend_data *bed;
1315 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1318 dynobj = elf_hash_table (info)->dynobj;
1320 /* If there were no dynamic objects in the link, there is nothing to
1325 /* If we are supposed to export all symbols into the dynamic symbol
1326 table (this is not the normal case), then do so. */
1329 struct elf_info_failed eif;
1333 elf_link_hash_traverse (elf_hash_table (info), elf_export_symbol,
1339 if (elf_hash_table (info)->dynamic_sections_created)
1341 struct elf_info_failed eif;
1342 struct elf_link_hash_entry *h;
1343 bfd_size_type strsize;
1345 *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
1346 BFD_ASSERT (*sinterpptr != NULL || info->shared);
1352 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, soname,
1354 if (indx == (bfd_size_type) -1
1355 || ! elf_add_dynamic_entry (info, DT_SONAME, indx))
1361 if (! elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
1369 indx = _bfd_stringtab_add (elf_hash_table (info)->dynstr, rpath,
1371 if (indx == (bfd_size_type) -1
1372 || ! elf_add_dynamic_entry (info, DT_RPATH, indx))
1376 /* Find all symbols which were defined in a dynamic object and make
1377 the backend pick a reasonable value for them. */
1380 elf_link_hash_traverse (elf_hash_table (info),
1381 elf_adjust_dynamic_symbol,
1386 /* Add some entries to the .dynamic section. We fill in some of the
1387 values later, in elf_bfd_final_link, but we must add the entries
1388 now so that we know the final size of the .dynamic section. */
1389 h = elf_link_hash_lookup (elf_hash_table (info), "_init", false,
1392 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1393 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1395 if (! elf_add_dynamic_entry (info, DT_INIT, 0))
1398 h = elf_link_hash_lookup (elf_hash_table (info), "_fini", false,
1401 && (h->elf_link_hash_flags & (ELF_LINK_HASH_REF_REGULAR
1402 | ELF_LINK_HASH_DEF_REGULAR)) != 0)
1404 if (! elf_add_dynamic_entry (info, DT_FINI, 0))
1407 strsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1408 if (! elf_add_dynamic_entry (info, DT_HASH, 0)
1409 || ! elf_add_dynamic_entry (info, DT_STRTAB, 0)
1410 || ! elf_add_dynamic_entry (info, DT_SYMTAB, 0)
1411 || ! elf_add_dynamic_entry (info, DT_STRSZ, strsize)
1412 || ! elf_add_dynamic_entry (info, DT_SYMENT,
1413 sizeof (Elf_External_Sym)))
1417 /* The backend must work out the sizes of all the other dynamic
1419 bed = get_elf_backend_data (output_bfd);
1420 if (! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
1423 if (elf_hash_table (info)->dynamic_sections_created)
1428 size_t bucketcount = 0;
1429 Elf_Internal_Sym isym;
1431 /* Set the size of the .dynsym and .hash sections. We counted
1432 the number of dynamic symbols in elf_link_add_object_symbols.
1433 We will build the contents of .dynsym and .hash when we build
1434 the final symbol table, because until then we do not know the
1435 correct value to give the symbols. We built the .dynstr
1436 section as we went along in elf_link_add_object_symbols. */
1437 dynsymcount = elf_hash_table (info)->dynsymcount;
1438 s = bfd_get_section_by_name (dynobj, ".dynsym");
1439 BFD_ASSERT (s != NULL);
1440 s->_raw_size = dynsymcount * sizeof (Elf_External_Sym);
1441 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1442 if (s->contents == NULL && s->_raw_size != 0)
1445 /* The first entry in .dynsym is a dummy symbol. */
1452 elf_swap_symbol_out (output_bfd, &isym,
1453 (PTR) (Elf_External_Sym *) s->contents);
1455 for (i = 0; elf_buckets[i] != 0; i++)
1457 bucketcount = elf_buckets[i];
1458 if (dynsymcount < elf_buckets[i + 1])
1462 s = bfd_get_section_by_name (dynobj, ".hash");
1463 BFD_ASSERT (s != NULL);
1464 s->_raw_size = (2 + bucketcount + dynsymcount) * (ARCH_SIZE / 8);
1465 s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
1466 if (s->contents == NULL)
1468 memset (s->contents, 0, (size_t) s->_raw_size);
1470 put_word (output_bfd, bucketcount, s->contents);
1471 put_word (output_bfd, dynsymcount, s->contents + (ARCH_SIZE / 8));
1473 elf_hash_table (info)->bucketcount = bucketcount;
1475 s = bfd_get_section_by_name (dynobj, ".dynstr");
1476 BFD_ASSERT (s != NULL);
1477 s->_raw_size = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
1479 if (! elf_add_dynamic_entry (info, DT_NULL, 0))
1486 /* This routine is used to export all defined symbols into the dynamic
1487 symbol table. It is called via elf_link_hash_traverse. */
1490 elf_export_symbol (h, data)
1491 struct elf_link_hash_entry *h;
1494 struct elf_info_failed *eif = (struct elf_info_failed *) data;
1496 if (h->dynindx == -1
1497 && (h->elf_link_hash_flags
1498 & (ELF_LINK_HASH_DEF_REGULAR | ELF_LINK_HASH_REF_REGULAR)) != 0)
1500 if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
1510 /* Make the backend pick a good value for a dynamic symbol. This is
1511 called via elf_link_hash_traverse, and also calls itself
1515 elf_adjust_dynamic_symbol (h, data)
1516 struct elf_link_hash_entry *h;
1519 struct elf_info_failed *eif = (struct elf_info_failed *) data;
1521 struct elf_backend_data *bed;
1523 /* If -Bsymbolic was used (which means to bind references to global
1524 symbols to the definition within the shared object), and this
1525 symbol was defined in a regular object, then it actually doesn't
1526 need a PLT entry. */
1527 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0
1528 && eif->info->shared
1529 && eif->info->symbolic
1530 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1531 h->elf_link_hash_flags &=~ ELF_LINK_HASH_NEEDS_PLT;
1533 /* If this symbol does not require a PLT entry, and it is not
1534 defined by a dynamic object, or is not referenced by a regular
1535 object, ignore it. We do have to handle a weak defined symbol,
1536 even if no regular object refers to it, if we decided to add it
1537 to the dynamic symbol table. FIXME: Do we normally need to worry
1538 about symbols which are defined by one dynamic object and
1539 referenced by another one? */
1540 if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0
1541 && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
1542 || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
1543 || ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
1544 && (h->weakdef == NULL || h->weakdef->dynindx == -1))))
1547 /* If we've already adjusted this symbol, don't do it again. This
1548 can happen via a recursive call. */
1549 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DYNAMIC_ADJUSTED) != 0)
1552 /* Don't look at this symbol again. Note that we must set this
1553 after checking the above conditions, because we may look at a
1554 symbol once, decide not to do anything, and then get called
1555 recursively later after REF_REGULAR is set below. */
1556 h->elf_link_hash_flags |= ELF_LINK_HASH_DYNAMIC_ADJUSTED;
1558 /* If this is a weak definition, and we know a real definition, and
1559 the real symbol is not itself defined by a regular object file,
1560 then get a good value for the real definition. We handle the
1561 real symbol first, for the convenience of the backend routine.
1563 Note that there is a confusing case here. If the real definition
1564 is defined by a regular object file, we don't get the real symbol
1565 from the dynamic object, but we do get the weak symbol. If the
1566 processor backend uses a COPY reloc, then if some routine in the
1567 dynamic object changes the real symbol, we will not see that
1568 change in the corresponding weak symbol. This is the way other
1569 ELF linkers work as well, and seems to be a result of the shared
1572 I will clarify this issue. Most SVR4 shared libraries define the
1573 variable _timezone and define timezone as a weak synonym. The
1574 tzset call changes _timezone. If you write
1575 extern int timezone;
1577 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
1578 you might expect that, since timezone is a synonym for _timezone,
1579 the same number will print both times. However, if the processor
1580 backend uses a COPY reloc, then actually timezone will be copied
1581 into your process image, and, since you define _timezone
1582 yourself, _timezone will not. Thus timezone and _timezone will
1583 wind up at different memory locations. The tzset call will set
1584 _timezone, leaving timezone unchanged. */
1586 if (h->weakdef != NULL)
1588 struct elf_link_hash_entry *weakdef;
1590 BFD_ASSERT (h->root.type == bfd_link_hash_defined
1591 || h->root.type == bfd_link_hash_defweak);
1592 weakdef = h->weakdef;
1593 BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
1594 || weakdef->root.type == bfd_link_hash_defweak);
1595 BFD_ASSERT (weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC);
1596 if ((weakdef->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
1598 /* This symbol is defined by a regular object file, so we
1599 will not do anything special. Clear weakdef for the
1600 convenience of the processor backend. */
1605 /* There is an implicit reference by a regular object file
1606 via the weak symbol. */
1607 weakdef->elf_link_hash_flags |= ELF_LINK_HASH_REF_REGULAR;
1608 if (! elf_adjust_dynamic_symbol (weakdef, (PTR) eif))
1613 dynobj = elf_hash_table (eif->info)->dynobj;
1614 bed = get_elf_backend_data (dynobj);
1615 if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
1624 /* Final phase of ELF linker. */
1626 /* A structure we use to avoid passing large numbers of arguments. */
1628 struct elf_final_link_info
1630 /* General link information. */
1631 struct bfd_link_info *info;
1634 /* Symbol string table. */
1635 struct bfd_strtab_hash *symstrtab;
1636 /* .dynsym section. */
1637 asection *dynsym_sec;
1638 /* .hash section. */
1640 /* Buffer large enough to hold contents of any section. */
1642 /* Buffer large enough to hold external relocs of any section. */
1643 PTR external_relocs;
1644 /* Buffer large enough to hold internal relocs of any section. */
1645 Elf_Internal_Rela *internal_relocs;
1646 /* Buffer large enough to hold external local symbols of any input
1648 Elf_External_Sym *external_syms;
1649 /* Buffer large enough to hold internal local symbols of any input
1651 Elf_Internal_Sym *internal_syms;
1652 /* Array large enough to hold a symbol index for each local symbol
1653 of any input BFD. */
1655 /* Array large enough to hold a section pointer for each local
1656 symbol of any input BFD. */
1657 asection **sections;
1658 /* Buffer to hold swapped out symbols. */
1659 Elf_External_Sym *symbuf;
1660 /* Number of swapped out symbols in buffer. */
1661 size_t symbuf_count;
1662 /* Number of symbols which fit in symbuf. */
1666 static boolean elf_link_output_sym
1667 PARAMS ((struct elf_final_link_info *, const char *,
1668 Elf_Internal_Sym *, asection *));
1669 static boolean elf_link_flush_output_syms
1670 PARAMS ((struct elf_final_link_info *));
1671 static boolean elf_link_output_extsym
1672 PARAMS ((struct elf_link_hash_entry *, PTR));
1673 static boolean elf_link_input_bfd
1674 PARAMS ((struct elf_final_link_info *, bfd *));
1675 static boolean elf_reloc_link_order
1676 PARAMS ((bfd *, struct bfd_link_info *, asection *,
1677 struct bfd_link_order *));
1679 /* This struct is used to pass information to routines called via
1680 elf_link_hash_traverse which must return failure. */
1682 struct elf_finfo_failed
1685 struct elf_final_link_info *finfo;
1688 /* Do the final step of an ELF link. */
1691 elf_bfd_final_link (abfd, info)
1693 struct bfd_link_info *info;
1697 struct elf_final_link_info finfo;
1698 register asection *o;
1699 register struct bfd_link_order *p;
1701 size_t max_contents_size;
1702 size_t max_external_reloc_size;
1703 size_t max_internal_reloc_count;
1704 size_t max_sym_count;
1706 Elf_Internal_Sym elfsym;
1708 Elf_Internal_Shdr *symtab_hdr;
1709 Elf_Internal_Shdr *symstrtab_hdr;
1710 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1711 struct elf_finfo_failed eif;
1714 abfd->flags |= DYNAMIC;
1716 dynamic = elf_hash_table (info)->dynamic_sections_created;
1717 dynobj = elf_hash_table (info)->dynobj;
1720 finfo.output_bfd = abfd;
1721 finfo.symstrtab = elf_stringtab_init ();
1722 if (finfo.symstrtab == NULL)
1726 finfo.dynsym_sec = NULL;
1727 finfo.hash_sec = NULL;
1731 finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
1732 finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
1733 BFD_ASSERT (finfo.dynsym_sec != NULL && finfo.hash_sec != NULL);
1735 finfo.contents = NULL;
1736 finfo.external_relocs = NULL;
1737 finfo.internal_relocs = NULL;
1738 finfo.external_syms = NULL;
1739 finfo.internal_syms = NULL;
1740 finfo.indices = NULL;
1741 finfo.sections = NULL;
1742 finfo.symbuf = NULL;
1743 finfo.symbuf_count = 0;
1745 /* Count up the number of relocations we will output for each output
1746 section, so that we know the sizes of the reloc sections. We
1747 also figure out some maximum sizes. */
1748 max_contents_size = 0;
1749 max_external_reloc_size = 0;
1750 max_internal_reloc_count = 0;
1752 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
1756 for (p = o->link_order_head; p != NULL; p = p->next)
1758 if (p->type == bfd_section_reloc_link_order
1759 || p->type == bfd_symbol_reloc_link_order)
1761 else if (p->type == bfd_indirect_link_order)
1765 sec = p->u.indirect.section;
1767 if (info->relocateable)
1768 o->reloc_count += sec->reloc_count;
1770 if (sec->_raw_size > max_contents_size)
1771 max_contents_size = sec->_raw_size;
1772 if (sec->_cooked_size > max_contents_size)
1773 max_contents_size = sec->_cooked_size;
1775 /* We are interested in just local symbols, not all
1777 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour)
1781 if (elf_bad_symtab (sec->owner))
1782 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
1783 / sizeof (Elf_External_Sym));
1785 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
1787 if (sym_count > max_sym_count)
1788 max_sym_count = sym_count;
1790 if ((sec->flags & SEC_RELOC) != 0)
1794 ext_size = elf_section_data (sec)->rel_hdr.sh_size;
1795 if (ext_size > max_external_reloc_size)
1796 max_external_reloc_size = ext_size;
1797 if (sec->reloc_count > max_internal_reloc_count)
1798 max_internal_reloc_count = sec->reloc_count;
1804 if (o->reloc_count > 0)
1805 o->flags |= SEC_RELOC;
1808 /* Explicitly clear the SEC_RELOC flag. The linker tends to
1809 set it (this is probably a bug) and if it is set
1810 assign_section_numbers will create a reloc section. */
1811 o->flags &=~ SEC_RELOC;
1814 /* If the SEC_ALLOC flag is not set, force the section VMA to
1815 zero. This is done in elf_fake_sections as well, but forcing
1816 the VMA to 0 here will ensure that relocs against these
1817 sections are handled correctly. */
1818 if ((o->flags & SEC_ALLOC) == 0)
1822 /* Figure out the file positions for everything but the symbol table
1823 and the relocs. We set symcount to force assign_section_numbers
1824 to create a symbol table. */
1825 abfd->symcount = info->strip == strip_all ? 0 : 1;
1826 BFD_ASSERT (! abfd->output_has_begun);
1827 if (! _bfd_elf_compute_section_file_positions (abfd, info))
1830 /* That created the reloc sections. Set their sizes, and assign
1831 them file positions, and allocate some buffers. */
1832 for (o = abfd->sections; o != NULL; o = o->next)
1834 if ((o->flags & SEC_RELOC) != 0)
1836 Elf_Internal_Shdr *rel_hdr;
1837 register struct elf_link_hash_entry **p, **pend;
1839 rel_hdr = &elf_section_data (o)->rel_hdr;
1841 rel_hdr->sh_size = rel_hdr->sh_entsize * o->reloc_count;
1843 /* The contents field must last into write_object_contents,
1844 so we allocate it with bfd_alloc rather than malloc. */
1845 rel_hdr->contents = (PTR) bfd_alloc (abfd, rel_hdr->sh_size);
1846 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
1849 p = ((struct elf_link_hash_entry **)
1850 malloc (o->reloc_count
1851 * sizeof (struct elf_link_hash_entry *)));
1852 if (p == NULL && o->reloc_count != 0)
1854 bfd_set_error (bfd_error_no_memory);
1857 elf_section_data (o)->rel_hashes = p;
1858 pend = p + o->reloc_count;
1859 for (; p < pend; p++)
1862 /* Use the reloc_count field as an index when outputting the
1868 _bfd_elf_assign_file_positions_for_relocs (abfd);
1870 /* We have now assigned file positions for all the sections except
1871 .symtab and .strtab. We start the .symtab section at the current
1872 file position, and write directly to it. We build the .strtab
1873 section in memory. */
1875 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1876 /* sh_name is set in prep_headers. */
1877 symtab_hdr->sh_type = SHT_SYMTAB;
1878 symtab_hdr->sh_flags = 0;
1879 symtab_hdr->sh_addr = 0;
1880 symtab_hdr->sh_size = 0;
1881 symtab_hdr->sh_entsize = sizeof (Elf_External_Sym);
1882 /* sh_link is set in assign_section_numbers. */
1883 /* sh_info is set below. */
1884 /* sh_offset is set just below. */
1885 symtab_hdr->sh_addralign = 4; /* FIXME: system dependent? */
1887 off = elf_tdata (abfd)->next_file_pos;
1888 off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);
1890 /* Note that at this point elf_tdata (abfd)->next_file_pos is
1891 incorrect. We do not yet know the size of the .symtab section.
1892 We correct next_file_pos below, after we do know the size. */
1894 /* Allocate a buffer to hold swapped out symbols. This is to avoid
1895 continuously seeking to the right position in the file. */
1896 if (! info->keep_memory || max_sym_count < 20)
1897 finfo.symbuf_size = 20;
1899 finfo.symbuf_size = max_sym_count;
1900 finfo.symbuf = ((Elf_External_Sym *)
1901 malloc (finfo.symbuf_size * sizeof (Elf_External_Sym)));
1902 if (finfo.symbuf == NULL)
1904 bfd_set_error (bfd_error_no_memory);
1908 /* Start writing out the symbol table. The first symbol is always a
1910 elfsym.st_value = 0;
1913 elfsym.st_other = 0;
1914 elfsym.st_shndx = SHN_UNDEF;
1915 if (! elf_link_output_sym (&finfo, (const char *) NULL,
1916 &elfsym, bfd_und_section_ptr))
1920 /* Some standard ELF linkers do this, but we don't because it causes
1921 bootstrap comparison failures. */
1922 /* Output a file symbol for the output file as the second symbol.
1923 We output this even if we are discarding local symbols, although
1924 I'm not sure if this is correct. */
1925 elfsym.st_value = 0;
1927 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
1928 elfsym.st_other = 0;
1929 elfsym.st_shndx = SHN_ABS;
1930 if (! elf_link_output_sym (&finfo, bfd_get_filename (abfd),
1931 &elfsym, bfd_abs_section_ptr))
1935 /* Output a symbol for each section. We output these even if we are
1936 discarding local symbols, since they are used for relocs. These
1937 symbols have no names. We store the index of each one in the
1938 index field of the section, so that we can find it again when
1939 outputting relocs. */
1940 elfsym.st_value = 0;
1942 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
1943 elfsym.st_other = 0;
1944 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
1946 o = section_from_elf_index (abfd, i);
1948 o->target_index = abfd->symcount;
1949 elfsym.st_shndx = i;
1950 if (! elf_link_output_sym (&finfo, (const char *) NULL,
1955 /* Allocate some memory to hold information read in from the input
1957 finfo.contents = (bfd_byte *) malloc (max_contents_size);
1958 finfo.external_relocs = (PTR) malloc (max_external_reloc_size);
1959 finfo.internal_relocs = ((Elf_Internal_Rela *)
1960 malloc (max_internal_reloc_count
1961 * sizeof (Elf_Internal_Rela)));
1962 finfo.external_syms = ((Elf_External_Sym *)
1963 malloc (max_sym_count * sizeof (Elf_External_Sym)));
1964 finfo.internal_syms = ((Elf_Internal_Sym *)
1965 malloc (max_sym_count * sizeof (Elf_Internal_Sym)));
1966 finfo.indices = (long *) malloc (max_sym_count * sizeof (long));
1967 finfo.sections = (asection **) malloc (max_sym_count * sizeof (asection *));
1968 if ((finfo.contents == NULL && max_contents_size != 0)
1969 || (finfo.external_relocs == NULL && max_external_reloc_size != 0)
1970 || (finfo.internal_relocs == NULL && max_internal_reloc_count != 0)
1971 || (finfo.external_syms == NULL && max_sym_count != 0)
1972 || (finfo.internal_syms == NULL && max_sym_count != 0)
1973 || (finfo.indices == NULL && max_sym_count != 0)
1974 || (finfo.sections == NULL && max_sym_count != 0))
1976 bfd_set_error (bfd_error_no_memory);
1980 /* Since ELF permits relocations to be against local symbols, we
1981 must have the local symbols available when we do the relocations.
1982 Since we would rather only read the local symbols once, and we
1983 would rather not keep them in memory, we handle all the
1984 relocations for a single input file at the same time.
1986 Unfortunately, there is no way to know the total number of local
1987 symbols until we have seen all of them, and the local symbol
1988 indices precede the global symbol indices. This means that when
1989 we are generating relocateable output, and we see a reloc against
1990 a global symbol, we can not know the symbol index until we have
1991 finished examining all the local symbols to see which ones we are
1992 going to output. To deal with this, we keep the relocations in
1993 memory, and don't output them until the end of the link. This is
1994 an unfortunate waste of memory, but I don't see a good way around
1995 it. Fortunately, it only happens when performing a relocateable
1996 link, which is not the common case. FIXME: If keep_memory is set
1997 we could write the relocs out and then read them again; I don't
1998 know how bad the memory loss will be. */
2000 for (sub = info->input_bfds; sub != NULL; sub = sub->next)
2001 sub->output_has_begun = false;
2002 for (o = abfd->sections; o != NULL; o = o->next)
2004 for (p = o->link_order_head; p != NULL; p = p->next)
2006 if (p->type == bfd_indirect_link_order
2007 && (bfd_get_flavour (p->u.indirect.section->owner)
2008 == bfd_target_elf_flavour))
2010 sub = p->u.indirect.section->owner;
2011 if (! sub->output_has_begun)
2013 if (! elf_link_input_bfd (&finfo, sub))
2015 sub->output_has_begun = true;
2018 else if (p->type == bfd_section_reloc_link_order
2019 || p->type == bfd_symbol_reloc_link_order)
2021 if (! elf_reloc_link_order (abfd, info, o, p))
2026 if (! _bfd_default_link_order (abfd, info, o, p))
2032 /* That wrote out all the local symbols. Finish up the symbol table
2033 with the global symbols. */
2035 /* The sh_info field records the index of the first non local
2037 symtab_hdr->sh_info = abfd->symcount;
2039 elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info = 1;
2041 /* We get the global symbols from the hash table. */
2044 elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
2049 /* Flush all symbols to the file. */
2050 if (! elf_link_flush_output_syms (&finfo))
2053 /* Now we know the size of the symtab section. */
2054 off += symtab_hdr->sh_size;
2056 /* Finish up and write out the symbol string table (.strtab)
2058 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2059 /* sh_name was set in prep_headers. */
2060 symstrtab_hdr->sh_type = SHT_STRTAB;
2061 symstrtab_hdr->sh_flags = 0;
2062 symstrtab_hdr->sh_addr = 0;
2063 symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
2064 symstrtab_hdr->sh_entsize = 0;
2065 symstrtab_hdr->sh_link = 0;
2066 symstrtab_hdr->sh_info = 0;
2067 /* sh_offset is set just below. */
2068 symstrtab_hdr->sh_addralign = 1;
2070 off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true);
2071 elf_tdata (abfd)->next_file_pos = off;
2073 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
2074 || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
2077 /* Adjust the relocs to have the correct symbol indices. */
2078 for (o = abfd->sections; o != NULL; o = o->next)
2080 struct elf_link_hash_entry **rel_hash;
2081 Elf_Internal_Shdr *rel_hdr;
2083 if ((o->flags & SEC_RELOC) == 0)
2086 rel_hash = elf_section_data (o)->rel_hashes;
2087 rel_hdr = &elf_section_data (o)->rel_hdr;
2088 for (i = 0; i < o->reloc_count; i++, rel_hash++)
2090 if (*rel_hash == NULL)
2093 BFD_ASSERT ((*rel_hash)->indx >= 0);
2095 if (rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2097 Elf_External_Rel *erel;
2098 Elf_Internal_Rel irel;
2100 erel = (Elf_External_Rel *) rel_hdr->contents + i;
2101 elf_swap_reloc_in (abfd, erel, &irel);
2102 irel.r_info = ELF_R_INFO ((*rel_hash)->indx,
2103 ELF_R_TYPE (irel.r_info));
2104 elf_swap_reloc_out (abfd, &irel, erel);
2108 Elf_External_Rela *erela;
2109 Elf_Internal_Rela irela;
2111 BFD_ASSERT (rel_hdr->sh_entsize
2112 == sizeof (Elf_External_Rela));
2114 erela = (Elf_External_Rela *) rel_hdr->contents + i;
2115 elf_swap_reloca_in (abfd, erela, &irela);
2116 irela.r_info = ELF_R_INFO ((*rel_hash)->indx,
2117 ELF_R_TYPE (irela.r_info));
2118 elf_swap_reloca_out (abfd, &irela, erela);
2122 /* Set the reloc_count field to 0 to prevent write_relocs from
2123 trying to swap the relocs out itself. */
2127 /* If we are linking against a dynamic object, or generating a
2128 shared library, finish up the dynamic linking information. */
2131 Elf_External_Dyn *dyncon, *dynconend;
2133 /* Fix up .dynamic entries. */
2134 o = bfd_get_section_by_name (dynobj, ".dynamic");
2135 BFD_ASSERT (o != NULL);
2137 dyncon = (Elf_External_Dyn *) o->contents;
2138 dynconend = (Elf_External_Dyn *) (o->contents + o->_raw_size);
2139 for (; dyncon < dynconend; dyncon++)
2141 Elf_Internal_Dyn dyn;
2145 elf_swap_dyn_in (dynobj, dyncon, &dyn);
2152 /* SVR4 linkers seem to set DT_INIT and DT_FINI based on
2153 magic _init and _fini symbols. This is pretty ugly,
2154 but we are compatible. */
2162 struct elf_link_hash_entry *h;
2164 h = elf_link_hash_lookup (elf_hash_table (info), name,
2165 false, false, true);
2167 && (h->root.type == bfd_link_hash_defined
2168 || h->root.type == bfd_link_hash_defweak))
2170 dyn.d_un.d_val = h->root.u.def.value;
2171 o = h->root.u.def.section;
2172 if (o->output_section != NULL)
2173 dyn.d_un.d_val += (o->output_section->vma
2174 + o->output_offset);
2177 /* The symbol is imported from another shared
2178 library and does not apply to this one. */
2182 elf_swap_dyn_out (dynobj, &dyn, dyncon);
2196 o = bfd_get_section_by_name (abfd, name);
2197 BFD_ASSERT (o != NULL);
2198 dyn.d_un.d_ptr = o->vma;
2199 elf_swap_dyn_out (dynobj, &dyn, dyncon);
2206 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
2211 for (i = 1; i < elf_elfheader (abfd)->e_shnum; i++)
2213 Elf_Internal_Shdr *hdr;
2215 hdr = elf_elfsections (abfd)[i];
2216 if (hdr->sh_type == type
2217 && (hdr->sh_flags & SHF_ALLOC) != 0)
2219 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
2220 dyn.d_un.d_val += hdr->sh_size;
2223 if (dyn.d_un.d_val == 0
2224 || hdr->sh_addr < dyn.d_un.d_val)
2225 dyn.d_un.d_val = hdr->sh_addr;
2229 elf_swap_dyn_out (dynobj, &dyn, dyncon);
2235 /* If we have created any dynamic sections, then output them. */
2238 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
2241 for (o = dynobj->sections; o != NULL; o = o->next)
2243 if ((o->flags & SEC_HAS_CONTENTS) == 0
2244 || o->_raw_size == 0)
2246 if ((o->flags & SEC_IN_MEMORY) == 0)
2248 /* At this point, we are only interested in sections
2249 created by elf_link_create_dynamic_sections. FIXME:
2250 This test is fragile. */
2253 if ((elf_section_data (o->output_section)->this_hdr.sh_type
2255 || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
2257 if (! bfd_set_section_contents (abfd, o->output_section,
2258 o->contents, o->output_offset,
2266 /* The contents of the .dynstr section are actually in a
2268 off = elf_section_data (o->output_section)->this_hdr.sh_offset;
2269 if (bfd_seek (abfd, off, SEEK_SET) != 0
2270 || ! _bfd_stringtab_emit (abfd,
2271 elf_hash_table (info)->dynstr))
2277 if (finfo.symstrtab != NULL)
2278 _bfd_stringtab_free (finfo.symstrtab);
2279 if (finfo.contents != NULL)
2280 free (finfo.contents);
2281 if (finfo.external_relocs != NULL)
2282 free (finfo.external_relocs);
2283 if (finfo.internal_relocs != NULL)
2284 free (finfo.internal_relocs);
2285 if (finfo.external_syms != NULL)
2286 free (finfo.external_syms);
2287 if (finfo.internal_syms != NULL)
2288 free (finfo.internal_syms);
2289 if (finfo.indices != NULL)
2290 free (finfo.indices);
2291 if (finfo.sections != NULL)
2292 free (finfo.sections);
2293 if (finfo.symbuf != NULL)
2294 free (finfo.symbuf);
2295 for (o = abfd->sections; o != NULL; o = o->next)
2297 if ((o->flags & SEC_RELOC) != 0
2298 && elf_section_data (o)->rel_hashes != NULL)
2299 free (elf_section_data (o)->rel_hashes);
2302 elf_tdata (abfd)->linker = true;
2307 if (finfo.symstrtab != NULL)
2308 _bfd_stringtab_free (finfo.symstrtab);
2309 if (finfo.contents != NULL)
2310 free (finfo.contents);
2311 if (finfo.external_relocs != NULL)
2312 free (finfo.external_relocs);
2313 if (finfo.internal_relocs != NULL)
2314 free (finfo.internal_relocs);
2315 if (finfo.external_syms != NULL)
2316 free (finfo.external_syms);
2317 if (finfo.internal_syms != NULL)
2318 free (finfo.internal_syms);
2319 if (finfo.indices != NULL)
2320 free (finfo.indices);
2321 if (finfo.sections != NULL)
2322 free (finfo.sections);
2323 if (finfo.symbuf != NULL)
2324 free (finfo.symbuf);
2325 for (o = abfd->sections; o != NULL; o = o->next)
2327 if ((o->flags & SEC_RELOC) != 0
2328 && elf_section_data (o)->rel_hashes != NULL)
2329 free (elf_section_data (o)->rel_hashes);
2335 /* Add a symbol to the output symbol table. */
2338 elf_link_output_sym (finfo, name, elfsym, input_sec)
2339 struct elf_final_link_info *finfo;
2341 Elf_Internal_Sym *elfsym;
2342 asection *input_sec;
2344 boolean (*output_symbol_hook) PARAMS ((bfd *,
2345 struct bfd_link_info *info,
2350 output_symbol_hook = get_elf_backend_data (finfo->output_bfd)->
2351 elf_backend_link_output_symbol_hook;
2352 if (output_symbol_hook != NULL)
2354 if (! ((*output_symbol_hook)
2355 (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
2359 if (name == (const char *) NULL || *name == '\0')
2360 elfsym->st_name = 0;
2363 elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
2366 if (elfsym->st_name == (unsigned long) -1)
2370 if (finfo->symbuf_count >= finfo->symbuf_size)
2372 if (! elf_link_flush_output_syms (finfo))
2376 elf_swap_symbol_out (finfo->output_bfd, elfsym,
2377 (PTR) (finfo->symbuf + finfo->symbuf_count));
2378 ++finfo->symbuf_count;
2380 ++finfo->output_bfd->symcount;
2385 /* Flush the output symbols to the file. */
2388 elf_link_flush_output_syms (finfo)
2389 struct elf_final_link_info *finfo;
2391 Elf_Internal_Shdr *symtab;
2393 symtab = &elf_tdata (finfo->output_bfd)->symtab_hdr;
2395 if (bfd_seek (finfo->output_bfd, symtab->sh_offset + symtab->sh_size,
2397 || (bfd_write ((PTR) finfo->symbuf, finfo->symbuf_count,
2398 sizeof (Elf_External_Sym), finfo->output_bfd)
2399 != finfo->symbuf_count * sizeof (Elf_External_Sym)))
2402 symtab->sh_size += finfo->symbuf_count * sizeof (Elf_External_Sym);
2404 finfo->symbuf_count = 0;
2409 /* Add an external symbol to the symbol table. This is called from
2410 the hash table traversal routine. */
2413 elf_link_output_extsym (h, data)
2414 struct elf_link_hash_entry *h;
2417 struct elf_finfo_failed *eif = (struct elf_finfo_failed *) data;
2418 struct elf_final_link_info *finfo = eif->finfo;
2420 Elf_Internal_Sym sym;
2421 asection *input_sec;
2423 /* If we are not creating a shared library, and this symbol is
2424 referenced by a shared library but is not defined anywhere, then
2425 warn that it is undefined. If we do not do this, the runtime
2426 linker will complain that the symbol is undefined when the
2427 program is run. We don't have to worry about symbols that are
2428 referenced by regular files, because we will already have issued
2429 warnings for them. */
2430 if (! finfo->info->relocateable
2431 && ! finfo->info->shared
2432 && h->root.type == bfd_link_hash_undefined
2433 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
2434 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2436 if (! ((*finfo->info->callbacks->undefined_symbol)
2437 (finfo->info, h->root.root.string, h->root.u.undef.abfd,
2438 (asection *) NULL, 0)))
2445 /* We don't want to output symbols that have never been mentioned by
2446 a regular file, or that we have been told to strip. However, if
2447 h->indx is set to -2, the symbol is used by a reloc and we must
2451 else if (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
2452 || (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
2453 && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
2454 && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
2456 else if (finfo->info->strip == strip_all
2457 || (finfo->info->strip == strip_some
2458 && bfd_hash_lookup (finfo->info->keep_hash,
2459 h->root.root.string,
2460 false, false) == NULL))
2465 /* If we're stripping it, and it's not a dynamic symbol, there's
2466 nothing else to do. */
2467 if (strip && h->dynindx == -1)
2471 sym.st_size = h->size;
2473 if (h->root.type == bfd_link_hash_undefweak
2474 || h->root.type == bfd_link_hash_defweak)
2475 sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
2477 sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
2479 switch (h->root.type)
2482 case bfd_link_hash_new:
2486 case bfd_link_hash_undefined:
2487 input_sec = bfd_und_section_ptr;
2488 sym.st_shndx = SHN_UNDEF;
2491 case bfd_link_hash_undefweak:
2492 input_sec = bfd_und_section_ptr;
2493 sym.st_shndx = SHN_UNDEF;
2496 case bfd_link_hash_defined:
2497 case bfd_link_hash_defweak:
2499 input_sec = h->root.u.def.section;
2500 if (input_sec->output_section != NULL)
2503 _bfd_elf_section_from_bfd_section (finfo->output_bfd,
2504 input_sec->output_section);
2505 if (sym.st_shndx == (unsigned short) -1)
2511 /* ELF symbols in relocateable files are section relative,
2512 but in nonrelocateable files they are virtual
2514 sym.st_value = h->root.u.def.value + input_sec->output_offset;
2515 if (! finfo->info->relocateable)
2516 sym.st_value += input_sec->output_section->vma;
2520 BFD_ASSERT ((bfd_get_flavour (input_sec->owner)
2521 == bfd_target_elf_flavour)
2522 && elf_elfheader (input_sec->owner)->e_type == ET_DYN);
2523 sym.st_shndx = SHN_UNDEF;
2524 input_sec = bfd_und_section_ptr;
2529 case bfd_link_hash_common:
2530 input_sec = bfd_com_section_ptr;
2531 sym.st_shndx = SHN_COMMON;
2532 sym.st_value = 1 << h->root.u.c.p->alignment_power;
2535 case bfd_link_hash_indirect:
2536 case bfd_link_hash_warning:
2537 return (elf_link_output_extsym
2538 ((struct elf_link_hash_entry *) h->root.u.i.link, data));
2541 /* If this symbol should be put in the .dynsym section, then put it
2542 there now. We have already know the symbol index. We also fill
2543 in the entry in the .hash section. */
2544 if (h->dynindx != -1
2545 && elf_hash_table (finfo->info)->dynamic_sections_created)
2547 struct elf_backend_data *bed;
2550 bfd_byte *bucketpos;
2553 sym.st_name = h->dynstr_index;
2555 /* Give the processor backend a chance to tweak the symbol
2556 value, and also to finish up anything that needs to be done
2558 bed = get_elf_backend_data (finfo->output_bfd);
2559 if (! ((*bed->elf_backend_finish_dynamic_symbol)
2560 (finfo->output_bfd, finfo->info, h, &sym)))
2566 elf_swap_symbol_out (finfo->output_bfd, &sym,
2567 (PTR) (((Elf_External_Sym *)
2568 finfo->dynsym_sec->contents)
2571 bucketcount = elf_hash_table (finfo->info)->bucketcount;
2572 bucket = (bfd_elf_hash ((const unsigned char *) h->root.root.string)
2574 bucketpos = ((bfd_byte *) finfo->hash_sec->contents
2575 + (bucket + 2) * (ARCH_SIZE / 8));
2576 chain = get_word (finfo->output_bfd, bucketpos);
2577 put_word (finfo->output_bfd, h->dynindx, bucketpos);
2578 put_word (finfo->output_bfd, chain,
2579 ((bfd_byte *) finfo->hash_sec->contents
2580 + (bucketcount + 2 + h->dynindx) * (ARCH_SIZE / 8)));
2583 /* If we're stripping it, then it was just a dynamic symbol, and
2584 there's nothing else to do. */
2588 h->indx = finfo->output_bfd->symcount;
2590 if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
2599 /* Link an input file into the linker output file. This function
2600 handles all the sections and relocations of the input file at once.
2601 This is so that we only have to read the local symbols once, and
2602 don't have to keep them in memory. */
2605 elf_link_input_bfd (finfo, input_bfd)
2606 struct elf_final_link_info *finfo;
2609 boolean (*relocate_section) PARAMS ((bfd *, struct bfd_link_info *,
2610 bfd *, asection *, bfd_byte *,
2611 Elf_Internal_Rela *,
2612 Elf_Internal_Sym *, asection **));
2614 Elf_Internal_Shdr *symtab_hdr;
2617 Elf_External_Sym *esym;
2618 Elf_External_Sym *esymend;
2619 Elf_Internal_Sym *isym;
2621 asection **ppsection;
2624 output_bfd = finfo->output_bfd;
2626 get_elf_backend_data (output_bfd)->elf_backend_relocate_section;
2628 /* If this is a dynamic object, we don't want to do anything here:
2629 we don't want the local symbols, and we don't want the section
2631 if (elf_elfheader (input_bfd)->e_type == ET_DYN)
2634 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2635 if (elf_bad_symtab (input_bfd))
2637 locsymcount = symtab_hdr->sh_size / sizeof (Elf_External_Sym);
2642 locsymcount = symtab_hdr->sh_info;
2643 extsymoff = symtab_hdr->sh_info;
2646 /* Read the local symbols. */
2648 && (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
2649 || (bfd_read (finfo->external_syms, sizeof (Elf_External_Sym),
2650 locsymcount, input_bfd)
2651 != locsymcount * sizeof (Elf_External_Sym))))
2654 /* Swap in the local symbols and write out the ones which we know
2655 are going into the output file. */
2656 esym = finfo->external_syms;
2657 esymend = esym + locsymcount;
2658 isym = finfo->internal_syms;
2659 pindex = finfo->indices;
2660 ppsection = finfo->sections;
2661 for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
2665 Elf_Internal_Sym osym;
2667 elf_swap_symbol_in (input_bfd, esym, isym);
2670 if (elf_bad_symtab (input_bfd))
2672 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
2679 if (isym->st_shndx == SHN_UNDEF)
2680 isec = bfd_und_section_ptr;
2681 else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
2682 isec = section_from_elf_index (input_bfd, isym->st_shndx);
2683 else if (isym->st_shndx == SHN_ABS)
2684 isec = bfd_abs_section_ptr;
2685 else if (isym->st_shndx == SHN_COMMON)
2686 isec = bfd_com_section_ptr;
2695 /* Don't output the first, undefined, symbol. */
2696 if (esym == finfo->external_syms)
2699 /* If we are stripping all symbols, we don't want to output this
2701 if (finfo->info->strip == strip_all)
2704 /* We never output section symbols. Instead, we use the section
2705 symbol of the corresponding section in the output file. */
2706 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
2709 /* If we are discarding all local symbols, we don't want to
2710 output this one. If we are generating a relocateable output
2711 file, then some of the local symbols may be required by
2712 relocs; we output them below as we discover that they are
2714 if (finfo->info->discard == discard_all)
2717 /* Get the name of the symbol. */
2718 name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
2723 /* See if we are discarding symbols with this name. */
2724 if ((finfo->info->strip == strip_some
2725 && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
2727 || (finfo->info->discard == discard_l
2728 && strncmp (name, finfo->info->lprefix,
2729 finfo->info->lprefix_len) == 0))
2732 /* If we get here, we are going to output this symbol. */
2736 /* Adjust the section index for the output file. */
2737 osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
2738 isec->output_section);
2739 if (osym.st_shndx == (unsigned short) -1)
2742 *pindex = output_bfd->symcount;
2744 /* ELF symbols in relocateable files are section relative, but
2745 in executable files they are virtual addresses. Note that
2746 this code assumes that all ELF sections have an associated
2747 BFD section with a reasonable value for output_offset; below
2748 we assume that they also have a reasonable value for
2749 output_section. Any special sections must be set up to meet
2750 these requirements. */
2751 osym.st_value += isec->output_offset;
2752 if (! finfo->info->relocateable)
2753 osym.st_value += isec->output_section->vma;
2755 if (! elf_link_output_sym (finfo, name, &osym, isec))
2759 /* Relocate the contents of each section. */
2760 for (o = input_bfd->sections; o != NULL; o = o->next)
2762 if ((o->flags & SEC_HAS_CONTENTS) == 0)
2765 if ((o->flags & SEC_IN_MEMORY) != 0
2766 && input_bfd == elf_hash_table (finfo->info)->dynobj)
2768 /* Section was created by elf_link_create_dynamic_sections.
2769 FIXME: This test is fragile. */
2773 /* Read the contents of the section. */
2774 if (! bfd_get_section_contents (input_bfd, o, finfo->contents,
2775 (file_ptr) 0, o->_raw_size))
2778 if ((o->flags & SEC_RELOC) != 0)
2780 Elf_Internal_Rela *internal_relocs;
2782 /* Get the swapped relocs. */
2783 internal_relocs = elf_link_read_relocs (input_bfd, o,
2784 finfo->external_relocs,
2785 finfo->internal_relocs,
2787 if (internal_relocs == NULL
2788 && o->reloc_count > 0)
2791 /* Relocate the section by invoking a back end routine.
2793 The back end routine is responsible for adjusting the
2794 section contents as necessary, and (if using Rela relocs
2795 and generating a relocateable output file) adjusting the
2796 reloc addend as necessary.
2798 The back end routine does not have to worry about setting
2799 the reloc address or the reloc symbol index.
2801 The back end routine is given a pointer to the swapped in
2802 internal symbols, and can access the hash table entries
2803 for the external symbols via elf_sym_hashes (input_bfd).
2805 When generating relocateable output, the back end routine
2806 must handle STB_LOCAL/STT_SECTION symbols specially. The
2807 output symbol is going to be a section symbol
2808 corresponding to the output section, which will require
2809 the addend to be adjusted. */
2811 if (! (*relocate_section) (output_bfd, finfo->info,
2815 finfo->internal_syms,
2819 if (finfo->info->relocateable)
2821 Elf_Internal_Rela *irela;
2822 Elf_Internal_Rela *irelaend;
2823 struct elf_link_hash_entry **rel_hash;
2824 Elf_Internal_Shdr *input_rel_hdr;
2825 Elf_Internal_Shdr *output_rel_hdr;
2827 /* Adjust the reloc addresses and symbol indices. */
2829 irela = internal_relocs;
2830 irelaend = irela + o->reloc_count;
2831 rel_hash = (elf_section_data (o->output_section)->rel_hashes
2832 + o->output_section->reloc_count);
2833 for (; irela < irelaend; irela++, rel_hash++)
2835 unsigned long r_symndx;
2836 Elf_Internal_Sym *isym;
2839 irela->r_offset += o->output_offset;
2841 r_symndx = ELF_R_SYM (irela->r_info);
2846 if (r_symndx >= locsymcount
2847 || (elf_bad_symtab (input_bfd)
2848 && finfo->sections[r_symndx] == NULL))
2852 /* This is a reloc against a global symbol. We
2853 have not yet output all the local symbols, so
2854 we do not know the symbol index of any global
2855 symbol. We set the rel_hash entry for this
2856 reloc to point to the global hash table entry
2857 for this symbol. The symbol index is then
2858 set at the end of elf_bfd_final_link. */
2859 indx = r_symndx - extsymoff;
2860 *rel_hash = elf_sym_hashes (input_bfd)[indx];
2862 /* Setting the index to -2 tells
2863 elf_link_output_extsym that this symbol is
2865 BFD_ASSERT ((*rel_hash)->indx < 0);
2866 (*rel_hash)->indx = -2;
2871 /* This is a reloc against a local symbol. */
2874 isym = finfo->internal_syms + r_symndx;
2875 sec = finfo->sections[r_symndx];
2876 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
2878 /* I suppose the backend ought to fill in the
2879 section of any STT_SECTION symbol against a
2880 processor specific section. */
2881 if (sec != NULL && bfd_is_abs_section (sec))
2883 else if (sec == NULL || sec->owner == NULL)
2885 bfd_set_error (bfd_error_bad_value);
2890 r_symndx = sec->output_section->target_index;
2891 BFD_ASSERT (r_symndx != 0);
2896 if (finfo->indices[r_symndx] == -1)
2902 if (finfo->info->strip == strip_all)
2904 /* You can't do ld -r -s. */
2905 bfd_set_error (bfd_error_invalid_operation);
2909 /* This symbol was skipped earlier, but
2910 since it is needed by a reloc, we
2911 must output it now. */
2912 link = symtab_hdr->sh_link;
2913 name = bfd_elf_string_from_elf_section (input_bfd,
2919 osec = sec->output_section;
2921 _bfd_elf_section_from_bfd_section (output_bfd,
2923 if (isym->st_shndx == (unsigned short) -1)
2926 isym->st_value += sec->output_offset;
2927 if (! finfo->info->relocateable)
2928 isym->st_value += osec->vma;
2930 finfo->indices[r_symndx] = output_bfd->symcount;
2932 if (! elf_link_output_sym (finfo, name, isym, sec))
2936 r_symndx = finfo->indices[r_symndx];
2939 irela->r_info = ELF_R_INFO (r_symndx,
2940 ELF_R_TYPE (irela->r_info));
2943 /* Swap out the relocs. */
2944 input_rel_hdr = &elf_section_data (o)->rel_hdr;
2945 output_rel_hdr = &elf_section_data (o->output_section)->rel_hdr;
2946 BFD_ASSERT (output_rel_hdr->sh_entsize
2947 == input_rel_hdr->sh_entsize);
2948 irela = internal_relocs;
2949 irelaend = irela + o->reloc_count;
2950 if (input_rel_hdr->sh_entsize == sizeof (Elf_External_Rel))
2952 Elf_External_Rel *erel;
2954 erel = ((Elf_External_Rel *) output_rel_hdr->contents
2955 + o->output_section->reloc_count);
2956 for (; irela < irelaend; irela++, erel++)
2958 Elf_Internal_Rel irel;
2960 irel.r_offset = irela->r_offset;
2961 irel.r_info = irela->r_info;
2962 BFD_ASSERT (irela->r_addend == 0);
2963 elf_swap_reloc_out (output_bfd, &irel, erel);
2968 Elf_External_Rela *erela;
2970 BFD_ASSERT (input_rel_hdr->sh_entsize
2971 == sizeof (Elf_External_Rela));
2972 erela = ((Elf_External_Rela *) output_rel_hdr->contents
2973 + o->output_section->reloc_count);
2974 for (; irela < irelaend; irela++, erela++)
2975 elf_swap_reloca_out (output_bfd, irela, erela);
2978 o->output_section->reloc_count += o->reloc_count;
2982 /* Write out the modified section contents. */
2983 if (! bfd_set_section_contents (output_bfd, o->output_section,
2984 finfo->contents, o->output_offset,
2985 (o->_cooked_size != 0
2994 /* Generate a reloc when linking an ELF file. This is a reloc
2995 requested by the linker, and does come from any input file. This
2996 is used to build constructor and destructor tables when linking
3000 elf_reloc_link_order (output_bfd, info, output_section, link_order)
3002 struct bfd_link_info *info;
3003 asection *output_section;
3004 struct bfd_link_order *link_order;
3006 reloc_howto_type *howto;
3009 struct elf_link_hash_entry **rel_hash_ptr;
3010 Elf_Internal_Shdr *rel_hdr;
3012 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
3015 bfd_set_error (bfd_error_bad_value);
3019 /* If this is an inplace reloc, we must write the addend into the
3021 if (howto->partial_inplace
3022 && link_order->u.reloc.p->addend != 0)
3025 bfd_reloc_status_type rstat;
3029 size = bfd_get_reloc_size (howto);
3030 buf = (bfd_byte *) bfd_zmalloc (size);
3031 if (buf == (bfd_byte *) NULL)
3033 rstat = _bfd_relocate_contents (howto, output_bfd,
3034 link_order->u.reloc.p->addend, buf);
3040 case bfd_reloc_outofrange:
3042 case bfd_reloc_overflow:
3043 if (! ((*info->callbacks->reloc_overflow)
3045 (link_order->type == bfd_section_reloc_link_order
3046 ? bfd_section_name (output_bfd,
3047 link_order->u.reloc.p->u.section)
3048 : link_order->u.reloc.p->u.name),
3049 howto->name, link_order->u.reloc.p->addend,
3050 (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
3057 ok = bfd_set_section_contents (output_bfd, output_section, (PTR) buf,
3058 (file_ptr) link_order->offset, size);
3064 /* Figure out the symbol index. */
3065 rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
3066 + output_section->reloc_count);
3067 if (link_order->type == bfd_section_reloc_link_order)
3069 indx = link_order->u.reloc.p->u.section->target_index;
3070 BFD_ASSERT (indx != 0);
3071 *rel_hash_ptr = NULL;
3075 struct elf_link_hash_entry *h;
3077 h = elf_link_hash_lookup (elf_hash_table (info),
3078 link_order->u.reloc.p->u.name,
3079 false, false, true);
3082 /* Setting the index to -2 tells elf_link_output_extsym that
3083 this symbol is used by a reloc. */
3090 if (! ((*info->callbacks->unattached_reloc)
3091 (info, link_order->u.reloc.p->u.name, (bfd *) NULL,
3092 (asection *) NULL, (bfd_vma) 0)))
3098 /* The address of a reloc is relative to the section in a
3099 relocateable file, and is a virtual address in an executable
3101 offset = link_order->offset;
3102 if (! info->relocateable)
3103 offset += output_section->vma;
3105 rel_hdr = &elf_section_data (output_section)->rel_hdr;
3107 if (rel_hdr->sh_type == SHT_REL)
3109 Elf_Internal_Rel irel;
3110 Elf_External_Rel *erel;
3112 irel.r_offset = offset;
3113 irel.r_info = ELF_R_INFO (indx, howto->type);
3114 erel = ((Elf_External_Rel *) rel_hdr->contents
3115 + output_section->reloc_count);
3116 elf_swap_reloc_out (output_bfd, &irel, erel);
3120 Elf_Internal_Rela irela;
3121 Elf_External_Rela *erela;
3123 irela.r_offset = offset;
3124 irela.r_info = ELF_R_INFO (indx, howto->type);
3125 irela.r_addend = link_order->u.reloc.p->addend;
3126 erela = ((Elf_External_Rela *) rel_hdr->contents
3127 + output_section->reloc_count);
3128 elf_swap_reloca_out (output_bfd, &irela, erela);
3131 ++output_section->reloc_count;