aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>1998-01-28 05:48:34 +0000
committerRichard Henderson <rth@redhat.com>1998-01-28 05:48:34 +0000
commit16ce62054beeb61824bc4ba6ce06640a5be0b3a4 (patch)
treec11c23d0277a7d916cfe99215eb77e3f01475a03 /bfd/elf.c
parent09025569d24c165bd6bc08271f17724d159697a1 (diff)
downloadgdb-16ce62054beeb61824bc4ba6ce06640a5be0b3a4.zip
gdb-16ce62054beeb61824bc4ba6ce06640a5be0b3a4.tar.gz
gdb-16ce62054beeb61824bc4ba6ce06640a5be0b3a4.tar.bz2
Sparc v9 ABI compliant PLT:
* elf64-sparc.c (PLT_HEADER_SIZE): V9 ABI uses 4 entries. (plt_templates, sparc64_elf_build_plt_entry): Delete. (LARGE_PLT_THRESHOLD): New define. (GOT_RESERVED_ENTRIES): V9 ABI only uses 1. (sparc64_elf_build_plt): New function. (sparc64_elf_plt_entry_offset): Likewise. (sparc64_elf_plt_ptr_offset): Likewise. (sparc64_elf_adjust_dynamic_symbol): Change h->plt_offset to contain the index for convenience. Skip the initial entries in .rela.plt. (sparc64_elf_size_dynamic_sections): Zero the allocated contents memory for the benefit of .rela.plt. (sparc64_elf_relocate_section): Call sparc64_elf_plt_entry_offset. (sparc64_elf_finish_dynamic_symbol): Kill template stuff. Use sparc64_elf_plt_entry_offset & sparc64_elf_plt_ptr_offset for reloc. (sparc64_elf_finish_dynamic_sections): DT_PLTGOT points to .plt. Call sparc64_elf_build_plt. (elf_backend_want_got_plt): No. (elf_backend_plt_readonly): No. (elf_backend_plt_alignment): 8. * elf.c (_bfd_elf_close_and_cleanup): New function; free the shstrtab. * elf-bfd.h (_bfd_elf_close_and_cleanup): Declare it. * elfxx-target.h (bfd_elfNN_close_and_cleanup): Arrange for it to be called.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r--bfd/elf.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/bfd/elf.c b/bfd/elf.c
index ab9d757..fa83495 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -4231,3 +4231,12 @@ _bfd_elf_validate_reloc (abfd, areloc)
bfd_set_error (bfd_error_bad_value);
return false;
}
+
+boolean
+_bfd_elf_close_and_cleanup (abfd)
+ bfd *abfd;
+{
+ if (elf_shstrtab (abfd))
+ _bfd_stringtab_free (elf_shstrtab (abfd));
+ return _bfd_generic_close_and_cleanup (abfd);
+}