* aoutx.h: String hash functions moved to hash.c. Retain
simplified versions of add_to_stringtab and emit_stringtab.
Change all callers to use new function and structure names.
* libbfd-in.h (_bfd_stringtab_init, _bfd_stringtab_free): Declare.
(_bfd_stringtab_size, _bfd_stringtab_add): Declare.
(_bfd_stringtab_emit): Declare.
* libbfd.h: Rebuilt.
* i386linux.c (linux_add_one_symbol): Create a fixup for any
defined absolute symbol, not just GOT or PLT symbols.
(linux_tally_symbols): Correct handling of references to defined
symbols.
* aoutx.h (adjust_o_magic): If the .bss VMA was set outside of
BFD, pad the .data section up to the VMA of the .bss section.
(aout_link_add_symbols): If a set symbol does not get modified,
treat it as a local symbol.
(aout_link_write_symbols): Set the value of set symbols
correctly. Don't discard set symbols even if discarding local
symbols.
(aout_link_write_other_symbol): Don't abort on bfd_link_hash_new,
since it can now happen for set symbols.
".rel", not ".rela." and ".rel."; make this work by checking
use_rela_p.
* elf32-i386.c (elf_i386_check_relocs): Just check for ".rel", not
".rel."
(elf_i386_size_dynamic_sections): Likewise.
(elf_i386_relocate_section): Likewise.
* elf32-sparc.c (elf32_sparc_check_relocs): Just check for
".rela", not ".rela."
(elf32_sparc_size_dynamic_sections): Likewise.
(elf32_sparc_relocate_section): Likewise.
no aux entries, use the symbol name as the file name.
(coff_find_nearest_line): Look for the right C_FILE symbol, rather
than always using the first one. If there is a debugging symbol
after a function symbol, skip it. Add the section VMA to the line
offset, since it was subtracted out in coff_slurp_line_table.
PR 5010.
allocate and attach an exec header to the BFD private data.
(som_begin_writing): Don't fill fields of the exec header based
on BFD private data here (like the exec flags). Do not write
the exec header here.
(som_write_headers): Instead do it here.
* som.h (struct somdata): New field "exec_hdr" for the executable
file header.
(obj_som_exec_hdr): New accessor macro.
named .linux-dynamic, not .dynamic.
(linux_add_one_symbol): Use .linux-dynamic, not .dynamic.
(bfd_linux_size_dynamic_sections): Likewise.
(linux_finish_dynamic_link): Likewise.
are recognized, chose section flags based on the name.
(bfd_coff_backend_data): _bfd_styp_to_sec_flags_hook field: Add
name argument.
(bfd_coff_styp_to_sec_flags_hook): Add name argument.
(coff_compute_section_file_positions): Don't adjust the section
position by COFF_PAGE_SIZE unless SEC_ALLOC is set.
* libcoff.h: Rebuilt.
* coffgen.c (make_a_section_from_file): Pass section name to
bfd_coff_styp_to_sec_flags_hook.
* ecoff.c (_bfd_ecoff_styp_to_sec_flags): Add unused name
argument.
* libecoff.h (_bfd_ecoff_styp_to_sec_flags): Add name argument to
prototype.
* aout-ns32k.c: Add declarations that were in aout-ns32k.h, change
declarations to traditional form.
(MY_reloc_howto, MY_put_reloc): Change from macro to function.
(ns32k_relocate_contents): New function.
* aout-ns32k.h: Remove.
* cpu-ns32k.c: Add declarations that were in aout-ns32k.h, change
declarations to traditional form.
(ns32k_final_link_relocate): Call ns32k_relocate_contents.
* netbsd532.c: Reformat to standards, add copyright notice.
(ARCH): Don't define.
(aout-ns32k.h): Don't include.
* pc532-mach.c: Ditto.
* i386linux.c (linux_add_one_symbol): Only handle
SHARABLE_CONFLICTS specially if BSF_CONSTRUCTOR is set. Set hashp
for a GOT or PLT symbol. Set jump field of fixup for a PLT symbol.
(linux_tally_symbols): Check section of real symbol. When looking
for a builtin fixup, check builtin and jump flags. Create no more
than one fixup, and always create one if the real symbol is in the
absolute section. Only strip absolute symbols.
bfd_tell, bfd_flush, and bfd_stat from here...
* bfd-in.h: ...to here, to make them visible to programs which
know more about the object file format than BFD does.
* libbfd.h, bfd-in2.h: Rebuilt.
* elfcode.h (elf_link_create_dynamic_sections): Set type of
_DYNAMIC to STT_OBJECT.
(NAME(bfd_elf,record_link_assignment)): Always create hash table
entry. Set type to STT_OBJECT.
(elf_link_output_extsym): Don't set type of weak defined symbol to
STB_WEAK if symbol was referenced.
* elf32-i386.c (elf_i386_create_dynamic_sections): Set type of
_GLOBAL_OFFSET_TABLE to STT_OBJECT.
(elf_i386_check_relocs): Ignore local PLT32 relocs.
(elf_i386_relocate_section): Treat local PLT32 relocs as PC32.
ELF. Based on patches by Eric Youngdale <ericy@cais.cais.com>.
* libelf.h (struct elf_link_hash_entry): Remove copy_offset field.
Add got_offset and plt_offset fields.
(ELF_LINK_HASH_REF_DYNAMIC_MULTIPLE): Don't define.
(ELF_LINK_HASH_DEF_DYNAMIC_MULTIPLE): Don't define.
(ELF_LINK_HASH_NEEDS_COPY): Define.
(struct elf_backend_data): Add check_relocs field.
(struct bfd_elf_section_data): Change relocs from PTR to
Elf_Internal_Rela *.
(struct elf_obj_tdata): Add local_got_offsets field.
(elf_local_got_offsets): Define accessor macro.
(bfd_elf32_link_create_dynamic_sections): Declare.
(bfd_elf32_link_record_dynamic_symbol): Declare.
(bfd_elf64_link_create_dynamic_sections): Declare.
(bfd_elf64_link_record_dynamic_symbol): Declare.
* elfcode.h (elf_slurp_reloc_table): Don't use the section data
relocs field.
(elf_link_record_dynamic_symbol): Make globally visible. Use
macro to rename to NAME(bfd_elf,link_record_dynamic_symbol).
(elf_link_add_object_symbols): If creating a shared library, put
make all local symbols dynamic. Don't bother with the
DYNAMIC_MULTIPLE flags. Call the check_relocs backend function if
it is defined.
(elf_link_create_dynamic_sections): Make globally visible. Use
macro to rename to NAME(bfd_elf,link_create_dynamic_sections). If
creating a shared library, make sure that _DYNAMIC is added as a
dynamic symbol.
(elf_link_read_relocs): New function.
(NAME(bfd_elf,record_link_assignment)): If creating a shared
library, always create symbols, and always make them dynamic.
(elf_bfd_final_link): Permit creation of shared libraries.
(elf_link_input_bfd): Use elf_link_read_relocs to get the relocs.
* elf.c (_bfd_elf_link_hash_newfunc): Don't initialize
copy_offset. Initialize got_offset and plt_offset.
* elf32-target.h (elf_backend_check_relocs): Define as 0 if not
defined.
(elf32_bed): Initialize check_relocs field.
* elf64-target.h (elf_backend_check_relocs): Define as 0 if not
defined.
(elf64_bed): Initialize check_relocs field.
* elf32-i386.c (elf_howto_table): Change R_386_PLT32 and
R_386_GOTPC to be pc_relative and pcrel_offset.
(elf_i386_pic_plt0_entry): Define.
(elf_i386_pic_plt_entry): Define.
(elf_i386_create_dynamic_sections): Create a .got.plt section, and
define _GLOBAL_OFFSET_TABLE_ at the start of it. If creating a
shared library, make sure that _GLOBAL_OFFSET_TABLE_ is added as a
dynamic symbol. Don't create .rel.bss if creating a shared
library.
(elf_i386_check_relocs): New function.
(elf_i386_adjust_dynamic_symbol): Don't make a PLT entry if the
symbol already has one. When making a PLT entry, set plt_offset.
Don't create a copy reloc when creating a shared library. Don't
set copy_offset, just set ELF_LINK_HASH_NEEDS_COPY.
(elf_i386_allocate_dynamic_section): Remove.
(elf_i386_size_dynamic_sections): Look through all the sections
rather than assuming we know their names. Remove any empty reloc
or plt sections. Only add a DT_DEBUG entry if not creating a
shared library. Only add a DT_PLTGOT entry if there is a PLT.
Add a DT_TEXTREL entry if required.
(elf_i386_relocate_section): Permit undefined symbols when
creating a shared library. Handle the special relocation types
specially.
(elf_i386_finish_dynamic_symbol): Create a PLT entry if plt_offset
is set. If creating a shared library, produce a PIC PLT entry.
Only mark a PLT symbol as undefined if it was not defined by a
regular object file. Create a GOT entry if got_offset is set.
Create a copy reloc if ELF_LINK_HASH_NEEDS_COPY is set.
(elf_i386_finish_dynamic_sections): Change the handling of
DT_RELSZ to simply subtract out the size of .rel.plt. If creating
a shared library, produce PIC PLT code.
(elf_backend_check_relocs): Define.
* elf32-sparc.c (elf_sparc_howto_table): Change R_SPARC_GOT10,
R_SPARC_GOT22, and R_SPARC_PC10 to not warn about reloc overflow.
(elf32_sparc_create_dynamic_sections): If creating a shared
library, make sure that _GLOBAL_OFFSET_TABLE_ is added as a
dynamic symbol, and set the type to STT_OBJECT. Likewise for
_PROCEDURE_LINKAGE_TABLE_. Don't create .rel.bss if creating a
shared library.
(elf32_sparc_check_relocs): New function.
(elf32_sparc_adjust_dynamic_symbol): Don't make a PLT entry if the
symbol already has one. When making a PLT entry, set plt_offset.
Don't create a copy reloc when creating a shared library. Don't
set copy_offset, just set ELF_LINK_HASH_NEEDS_COPY.
(elf32_sparc_allocate_dynamic_section): Remove.
(elf32_sparc_size_dynamic_sections): Look through all the sections
rather than assuming we know their names. Only add a DT_DEBUG
entry if not creating a shared library. Add a DT_TEXTREL entry if
required.
(elf32_sparc_relocate_section): Permit undefined symbols when
creating a shared library. Handle the special relocation types
specially.
(elf32_sparc_finish_dynamic_symbol): Create a PLT entry if plt_offset
is set. Only mark a PLT symbol as undefined if it was not defined
by a regular object file. Create a GOT entry if got_offset is
set. Create a copy reloc if ELF_LINK_HASH_NEEDS_COPY is set.
(elf32_sparc_finish_dynamic_sections): Store dynobj in a local
variable.
(elf_backend_check_relocs): Define.
It's the wrong way to do things.
(HOWTO): Change accordingly.
(HOWTO2): Remove.
(_bfd_final_link_relocate): Remove references to
special_function1.
* bfd-in2.h: Rebuilt.
* aoutx.h (aout_link_input_section_std): Remove references to
special_function1.
(aout_link_reloc_link_order): Likewise.
* elfcode.h (elf_link_add_object_symbols): If symbol is defined as
weak, set ELF_LINK_HASH_DEFINED_WEAK.
(elf_link_output_extsym): If symbol is defined as weak, mark it
STB_WEAK.
(shdr_name): Remove; unused.
* elfcode.h (elf_slurp_reloc_table): Rewrote to handle both REL
and RELA relocs. Free up the unswapped relocs. Permit the relocs
to be cached in the section_data. Correct the reloc address.
(elf_slurp_reloca_table): Remove.
(elf_canonicalize_reloc): Rewrote.
(elf_link_input_bfd): Permit the relocs to be cached in the
section data.