mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 10:03:47 +08:00
PR ld/5692
* elf-bfd.h (enum elf_object_id): New enum, used to identify target specific extensions to the elf_obj_tdata structure. (struct elf_obj_tdata): New field 'object_id'. (elf_object_id, elf_program_header_size, elf_symtab_hdr): New macros for accessing fields in the elf_obj_tdata structure. (bfd_elf_mkobject): Rename to bfd_elf_make_generic_object. (bfd_elf_allocate_object): New function. * elf.c (bfd_elf_mkobject): Rename to bfd_elf_make_generic_object and implement by calling bfd_elf_allocate_object. (bfd_elf_allocate_object): New function: Allocates an elf_obj_tdata structure, possibly with a target specific extension. * elfxx-target.h (bfd_elfNN_mkobject): Use bfd_elf_make_generic_object as the default value. * elf32-arm.c (elf32_arm_obj_tdata): Rename to elf_arm_obj_tdata for consistency with other, similar structures. (is_arm_elf): New macro. Checks a BFD to make sure that is an ARM ELF bfd. (elf32_arm_mkobject): Call bfd_elf_allocate_object. (bfd_elf32_arm_vfp11_erratum_scan): Use is_arm_elf macro to check the bfd being processed. (bfd_elf32_arm_vfp11_fix_veneer_locations): Likewise. (bfd_elf32_arm_set_target_relocs): Likewise. (bfd_elf32_arm_final_link_relocate): Likewise. (bfd_elf32_arm_copy_private_bfd_data): Likewise. (bfd_elf32_arm_merge_eabi_attributes): Likewise. (bfd_elf32_arm_merge_private_bfd_data): Likewise. (bfd_elf32_arm_check_relocs): Likewise. (bfd_elf32_arm_gc_mark_extra_sections): Likewise. (bfd_elf32_arm_size_dynamic_sections): Likewise. (bfd_elf32_arm_process_before_allocation): Use elf_symtab_hdr. (bfd_elf32_arm_init_maps): Likewise. (bfd_elf32_arm_final_link_relocate): Likewise. (bfd_elf32_arm_relocate_section): Likewise. (bfd_elf32_arm_gc_sweep_hook): Likewise. (bfd_elf32_arm_check_relocs): Likewise. (bfd_elf32_arm_size_dynamic_sections): Likewise. * elf32-i386.c (elf_i386_mkobject): Call bfd_elf_allocate_object. (is_i386_elf): New macro. Checks a BFD to make sure that is an x86 ELF bfd. (elf_i386_check_relocs): Use is_i386_elf macro to check the bfd being processed. (elf_i386_size_dynamic_sections): Likewise. (elf_i386_relocate_section): Likewise. (elf_i386_check_relocs): Use elf_symtab_hdr. (elf_i386_gc_sweep_hook): Likewise. (elf_i386_size_dynamic_sections): Likewise. (elf_i386_relocate_section): Likewise. * elf32-ppc.c (ppc_elf_mkobject): Call bfd_elf_allocate_object. (elf_create_pointer_linker_section): Use is_ppc_elf_target to verify that the bfd before accessing target specific fields. (ppc_elf_check_relocs): Likewise. (elf_finish_pointer_linker_section): Likewise. (elf_create_pointer_linker_section): Use elf_symtab_hdr. (ppc_elf_check_relocs): Likewise. (ppc_elf_gc_sweep_hook): Likewise. (ppc_elf_tls_optimize): Likewise. (ppc_elf_size_dynamic_sections): Likewise. (ppc_elf_relax_section): Likewise. (ppc_elf_relocate_section): Likewise. * elf32-s390.c (struct elf_s390_obj_tdata): Add a comment reminding programmers to keep this structure in sync with the one defined in elf64-s390.c. (elf_s390_mkobject): Call bfd_elf_allocate_object. (is_s390_elf): New macro. Checks a BFD to make sure that is an s390 ELF bfd. (elf_s390_check_relocs): Use is_s390_elf macro to check the bfd being processed. (elf_s390_size_dynamic_sections): Likewise. (elf_s390_relocate_section): Likewise. (elf_s390_check_relocs): Use elf_symtab_hdr. (elf_s390_gc_sweep_hook): Likewise. (elf_s390_size_dynamic_sections): Likewise. (elf_s390_relocate_section): Likewise. * elf32-sh.c (sh_elf_mkobject): Call bfd_elf_allocate_object. (is_sh_elf): New macro. Checks a BFD to make sure that is an SH ELF bfd. (sh_elf_size_dynamic_sections): Use is_sh_elf macro to check the bfd being processed. (sh_elf_relocate_section): Likewise. (sh_elf_check_relocs): Likewise. (sh_elf_copy_private_data): Likewise. (sh_elf_relax_section): Use elf_symtab_hdr. (sh_elf_size_dynamic_sections): Likewise. (sh_elf_relocate_section): Likewise. (sh_elf_get_relocated_section_contents): Likewise. (sh_elf_gc_sweep_hook): Likewise. (sh_elf_check_relocs): Likewise. * elf64-alpha.c (elf64_alpha_mkobject): Call bfd_elf_allocate_object. (is_alpha_elf): New macro. Checks a BFD to make sure that is an Alpha ELF bfd. (elf64_alpha_create_got_section): Use is_alpha_elf macro to check the bfd being processed. (elf64_alpha_create_dynamic_section): Likewise. (elf64_alpha_check_relocs): Likewise. (elf64_alpha_size_got_sections): Likewise. (elf64_alpha_relax_section): Likewise. (elf64_alpha_relocate_section): Likewise. (elf64_alpha_final_link): Likewise. (elf64_alpha_check_relocs): Use elf_symtab_hdr. (elf64_alpha_relax_section): Likewise. (elf64_alpha_relocate_section_r): Likewise. (elf64_alpha_relocate_section): Likewise. * elf64-ppc.c (ppc64_elf_mkobject): Call bfd_elf_allocate_object. (ppc64_elf_check_relocs): Use is_ppc64_elf_target to check the bfd being processed. (opd_entry_value): Likewise. (allocate_dynrelocs): Likewise. (ppc64_elf_relocate_section): Likewise. (ppc64_elf_check_relocs): Use elf_symtab_hdr. (opd_entry_value): Likewise. (ppc64_elf_gc_sweep_hook): Likewise. (get_sym_h): Likewise. (ppc64_elf_edit_opd): Likewise. (ppc64_elf_tls_optimize): Likewise. (ppc64_elf_edit_toc): Likewise. (ppc64_elf_size_dynamic_sections): Likewise. (toc_adjusting_stub_needed): Likewise. (ppc64_elf_size_stubs): Likewise. (ppc64_elf_relocate_section): Likewise. * elf64-s390.c (struct elf_s390_obj_tdata): Add a comment reminding programmers to keep this structure in sync with the one defined in elf32-s390.c. (elf_s390_mkobject): Call bfd_elf_allocate_object. (is_s390_elf): New macro. Checks a BFD to make sure that is an s390 ELF bfd. (elf_s390_check_relocs): Use is_s390_elf macro to check the bfd being processed. (elf_s390_size_dynamic_sections): Likewise. (elf_s390_relocate_section): Likewise. (elf_s390_check_relocs): Use elf_symtab_hdr. (elf_s390_gc_sweep_hook): Likewise. (elf_s390_size_dynamic_sections): Likewise. (elf_s390_relocate_section): Likewise. * elf64-x86_64.c (elf64_x86_64_mkobject): Call bfd_elf_allocate_object. (is_x86_64_elf): New macro. Checks a BFD to make sure that is an x86_64 ELF bfd. (elf64_x86_64_check_relocs): Use is_x86_64_elf macro to check the bfd being processed. (elf64_x86_64_size_dynamic_sections): Likewise. (elf64_x86_64_relocate_section): Likewise. (elf64_x86_64_check_relocs): Use elf_symtab_hdr. (elf64_x86_64_gc_sweep_hook): Likewise. (elf64_x86_64_size_dynamic_sections): Likewise. (elf64_x86_64_relocate_section): Likewise. * elfxx-sparc.c (_bfd_sparc_elf_mkobject): Call bfd_elf_allocate_object. (is_sparc_elf): New macro. Checks a BFD to make sure that is a Sparc ELF bfd. (_bfd_sparc_elf_check_relocs): Use is_sparc_elf macro to check the bfd being processed. (_bfd_sparc_elf_gc_sweep_hook): Likewise. (_bfd_sparc_elf_size_dynamic_sections): Likewise. (_bfd_sparc_elf_check_relocs): Use elf_symtab_hdr. (_bfd_sparc_elf_gc_sweep_hook): Likewise. (_bfd_sparc_elf_size_dynamic_sections): Likewise. (_bfd_sparc_elf_relocate_section): Likewise.
This commit is contained in:
parent
9c95b5212a
commit
0ffa91dd69
160
bfd/ChangeLog
160
bfd/ChangeLog
@ -1,3 +1,163 @@
|
||||
2008-02-12 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR ld/5692
|
||||
* elf-bfd.h (enum elf_object_id): New enum, used to identify
|
||||
target specific extensions to the elf_obj_tdata structure.
|
||||
(struct elf_obj_tdata): New field 'object_id'.
|
||||
(elf_object_id, elf_program_header_size, elf_symtab_hdr): New
|
||||
macros for accessing fields in the elf_obj_tdata structure.
|
||||
(bfd_elf_mkobject): Rename to bfd_elf_make_generic_object.
|
||||
(bfd_elf_allocate_object): New function.
|
||||
* elf.c (bfd_elf_mkobject): Rename to bfd_elf_make_generic_object
|
||||
and implement by calling bfd_elf_allocate_object.
|
||||
(bfd_elf_allocate_object): New function: Allocates an
|
||||
elf_obj_tdata structure, possibly with a target specific
|
||||
extension.
|
||||
* elfxx-target.h (bfd_elfNN_mkobject): Use
|
||||
bfd_elf_make_generic_object as the default value.
|
||||
* elf32-arm.c (elf32_arm_obj_tdata): Rename to elf_arm_obj_tdata
|
||||
for consistency with other, similar structures.
|
||||
(is_arm_elf): New macro. Checks a BFD to make sure that is an ARM
|
||||
ELF bfd.
|
||||
(elf32_arm_mkobject): Call bfd_elf_allocate_object.
|
||||
(bfd_elf32_arm_vfp11_erratum_scan): Use is_arm_elf macro to check
|
||||
the bfd being processed.
|
||||
(bfd_elf32_arm_vfp11_fix_veneer_locations): Likewise.
|
||||
(bfd_elf32_arm_set_target_relocs): Likewise.
|
||||
(bfd_elf32_arm_final_link_relocate): Likewise.
|
||||
(bfd_elf32_arm_copy_private_bfd_data): Likewise.
|
||||
(bfd_elf32_arm_merge_eabi_attributes): Likewise.
|
||||
(bfd_elf32_arm_merge_private_bfd_data): Likewise.
|
||||
(bfd_elf32_arm_check_relocs): Likewise.
|
||||
(bfd_elf32_arm_gc_mark_extra_sections): Likewise.
|
||||
(bfd_elf32_arm_size_dynamic_sections): Likewise.
|
||||
(bfd_elf32_arm_process_before_allocation): Use elf_symtab_hdr.
|
||||
(bfd_elf32_arm_init_maps): Likewise.
|
||||
(bfd_elf32_arm_final_link_relocate): Likewise.
|
||||
(bfd_elf32_arm_relocate_section): Likewise.
|
||||
(bfd_elf32_arm_gc_sweep_hook): Likewise.
|
||||
(bfd_elf32_arm_check_relocs): Likewise.
|
||||
(bfd_elf32_arm_size_dynamic_sections): Likewise.
|
||||
* elf32-i386.c (elf_i386_mkobject): Call bfd_elf_allocate_object.
|
||||
(is_i386_elf): New macro. Checks a BFD to make sure that is an x86
|
||||
ELF bfd.
|
||||
(elf_i386_check_relocs): Use is_i386_elf macro to check the bfd
|
||||
being processed.
|
||||
(elf_i386_size_dynamic_sections): Likewise.
|
||||
(elf_i386_relocate_section): Likewise.
|
||||
(elf_i386_check_relocs): Use elf_symtab_hdr.
|
||||
(elf_i386_gc_sweep_hook): Likewise.
|
||||
(elf_i386_size_dynamic_sections): Likewise.
|
||||
(elf_i386_relocate_section): Likewise.
|
||||
* elf32-ppc.c (ppc_elf_mkobject): Call bfd_elf_allocate_object.
|
||||
(elf_create_pointer_linker_section): Use is_ppc_elf_target to
|
||||
verify that the bfd before accessing target specific fields.
|
||||
(ppc_elf_check_relocs): Likewise.
|
||||
(elf_finish_pointer_linker_section): Likewise.
|
||||
(elf_create_pointer_linker_section): Use elf_symtab_hdr.
|
||||
(ppc_elf_check_relocs): Likewise.
|
||||
(ppc_elf_gc_sweep_hook): Likewise.
|
||||
(ppc_elf_tls_optimize): Likewise.
|
||||
(ppc_elf_size_dynamic_sections): Likewise.
|
||||
(ppc_elf_relax_section): Likewise.
|
||||
(ppc_elf_relocate_section): Likewise.
|
||||
* elf32-s390.c (struct elf_s390_obj_tdata): Add a comment
|
||||
reminding programmers to keep this structure in sync with the one
|
||||
defined in elf64-s390.c.
|
||||
(elf_s390_mkobject): Call bfd_elf_allocate_object.
|
||||
(is_s390_elf): New macro. Checks a BFD to make sure that is an s390
|
||||
ELF bfd.
|
||||
(elf_s390_check_relocs): Use is_s390_elf macro to check the bfd
|
||||
being processed.
|
||||
(elf_s390_size_dynamic_sections): Likewise.
|
||||
(elf_s390_relocate_section): Likewise.
|
||||
(elf_s390_check_relocs): Use elf_symtab_hdr.
|
||||
(elf_s390_gc_sweep_hook): Likewise.
|
||||
(elf_s390_size_dynamic_sections): Likewise.
|
||||
(elf_s390_relocate_section): Likewise.
|
||||
* elf32-sh.c (sh_elf_mkobject): Call bfd_elf_allocate_object.
|
||||
(is_sh_elf): New macro. Checks a BFD to make sure that is an SH
|
||||
ELF bfd.
|
||||
(sh_elf_size_dynamic_sections): Use is_sh_elf macro to check the
|
||||
bfd being processed.
|
||||
(sh_elf_relocate_section): Likewise.
|
||||
(sh_elf_check_relocs): Likewise.
|
||||
(sh_elf_copy_private_data): Likewise.
|
||||
(sh_elf_relax_section): Use elf_symtab_hdr.
|
||||
(sh_elf_size_dynamic_sections): Likewise.
|
||||
(sh_elf_relocate_section): Likewise.
|
||||
(sh_elf_get_relocated_section_contents): Likewise.
|
||||
(sh_elf_gc_sweep_hook): Likewise.
|
||||
(sh_elf_check_relocs): Likewise.
|
||||
* elf64-alpha.c (elf64_alpha_mkobject): Call bfd_elf_allocate_object.
|
||||
(is_alpha_elf): New macro. Checks a BFD to make sure that is an
|
||||
Alpha ELF bfd.
|
||||
(elf64_alpha_create_got_section): Use is_alpha_elf macro to check
|
||||
the bfd being processed.
|
||||
(elf64_alpha_create_dynamic_section): Likewise.
|
||||
(elf64_alpha_check_relocs): Likewise.
|
||||
(elf64_alpha_size_got_sections): Likewise.
|
||||
(elf64_alpha_relax_section): Likewise.
|
||||
(elf64_alpha_relocate_section): Likewise.
|
||||
(elf64_alpha_final_link): Likewise.
|
||||
(elf64_alpha_check_relocs): Use elf_symtab_hdr.
|
||||
(elf64_alpha_relax_section): Likewise.
|
||||
(elf64_alpha_relocate_section_r): Likewise.
|
||||
(elf64_alpha_relocate_section): Likewise.
|
||||
* elf64-ppc.c (ppc64_elf_mkobject): Call bfd_elf_allocate_object.
|
||||
(ppc64_elf_check_relocs): Use is_ppc64_elf_target to check the bfd
|
||||
being processed.
|
||||
(opd_entry_value): Likewise.
|
||||
(allocate_dynrelocs): Likewise.
|
||||
(ppc64_elf_relocate_section): Likewise.
|
||||
(ppc64_elf_check_relocs): Use elf_symtab_hdr.
|
||||
(opd_entry_value): Likewise.
|
||||
(ppc64_elf_gc_sweep_hook): Likewise.
|
||||
(get_sym_h): Likewise.
|
||||
(ppc64_elf_edit_opd): Likewise.
|
||||
(ppc64_elf_tls_optimize): Likewise.
|
||||
(ppc64_elf_edit_toc): Likewise.
|
||||
(ppc64_elf_size_dynamic_sections): Likewise.
|
||||
(toc_adjusting_stub_needed): Likewise.
|
||||
(ppc64_elf_size_stubs): Likewise.
|
||||
(ppc64_elf_relocate_section): Likewise.
|
||||
* elf64-s390.c (struct elf_s390_obj_tdata): Add a comment
|
||||
reminding programmers to keep this structure in sync with the one
|
||||
defined in elf32-s390.c.
|
||||
(elf_s390_mkobject): Call bfd_elf_allocate_object.
|
||||
(is_s390_elf): New macro. Checks a BFD to make sure that is an s390
|
||||
ELF bfd.
|
||||
(elf_s390_check_relocs): Use is_s390_elf macro to check the bfd
|
||||
being processed.
|
||||
(elf_s390_size_dynamic_sections): Likewise.
|
||||
(elf_s390_relocate_section): Likewise.
|
||||
(elf_s390_check_relocs): Use elf_symtab_hdr.
|
||||
(elf_s390_gc_sweep_hook): Likewise.
|
||||
(elf_s390_size_dynamic_sections): Likewise.
|
||||
(elf_s390_relocate_section): Likewise.
|
||||
* elf64-x86_64.c (elf64_x86_64_mkobject): Call bfd_elf_allocate_object.
|
||||
(is_x86_64_elf): New macro. Checks a BFD to make sure that is an
|
||||
x86_64 ELF bfd.
|
||||
(elf64_x86_64_check_relocs): Use is_x86_64_elf macro to check the bfd
|
||||
being processed.
|
||||
(elf64_x86_64_size_dynamic_sections): Likewise.
|
||||
(elf64_x86_64_relocate_section): Likewise.
|
||||
(elf64_x86_64_check_relocs): Use elf_symtab_hdr.
|
||||
(elf64_x86_64_gc_sweep_hook): Likewise.
|
||||
(elf64_x86_64_size_dynamic_sections): Likewise.
|
||||
(elf64_x86_64_relocate_section): Likewise.
|
||||
* elfxx-sparc.c (_bfd_sparc_elf_mkobject): Call bfd_elf_allocate_object.
|
||||
(is_sparc_elf): New macro. Checks a BFD to make sure that is a Sparc
|
||||
ELF bfd.
|
||||
(_bfd_sparc_elf_check_relocs): Use is_sparc_elf macro to check the
|
||||
bfd being processed.
|
||||
(_bfd_sparc_elf_gc_sweep_hook): Likewise.
|
||||
(_bfd_sparc_elf_size_dynamic_sections): Likewise.
|
||||
(_bfd_sparc_elf_check_relocs): Use elf_symtab_hdr.
|
||||
(_bfd_sparc_elf_gc_sweep_hook): Likewise.
|
||||
(_bfd_sparc_elf_size_dynamic_sections): Likewise.
|
||||
(_bfd_sparc_elf_relocate_section): Likewise.
|
||||
|
||||
2008-02-12 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
PR 5303, 5755
|
||||
|
@ -1393,6 +1393,24 @@ enum
|
||||
Tag_compatibility = 32
|
||||
};
|
||||
|
||||
/* Enum used to identify target specific extensions to the elf_obj_tdata
|
||||
structure. Note the enums deliberately start from 1 so that we can
|
||||
detect an uninitialized field. The generic value is last so that
|
||||
additions to this enum do not need to modify more than one line. */
|
||||
enum elf_object_id
|
||||
{
|
||||
ALPHA_ELF_TDATA = 1,
|
||||
ARM_ELF_TDATA,
|
||||
I386_ELF_TDATA,
|
||||
PPC32_ELF_TDATA,
|
||||
PPC64_ELF_TDATA,
|
||||
S390_ELF_TDATA,
|
||||
SH_ELF_TDATA,
|
||||
SPARC_ELF_TDATA,
|
||||
X86_64_ELF_TDATA,
|
||||
GENERIC_ELF_TDATA
|
||||
};
|
||||
|
||||
/* Some private data is stashed away for future use using the tdata pointer
|
||||
in the bfd structure. */
|
||||
|
||||
@ -1545,15 +1563,23 @@ struct elf_obj_tdata
|
||||
/* NT_GNU_BUILD_ID note type. */
|
||||
bfd_size_type build_id_size;
|
||||
bfd_byte *build_id;
|
||||
|
||||
/* An identifier used to distinguish different target
|
||||
specific extensions to this structure. */
|
||||
enum elf_object_id object_id;
|
||||
};
|
||||
|
||||
#define elf_tdata(bfd) ((bfd) -> tdata.elf_obj_data)
|
||||
|
||||
#define elf_object_id(bfd) (elf_tdata(bfd) -> object_id)
|
||||
#define elf_program_header_size(bfd) (elf_tdata(bfd) -> program_header_size)
|
||||
#define elf_elfheader(bfd) (elf_tdata(bfd) -> elf_header)
|
||||
#define elf_elfsections(bfd) (elf_tdata(bfd) -> elf_sect_ptr)
|
||||
#define elf_numsections(bfd) (elf_tdata(bfd) -> num_elf_sections)
|
||||
#define elf_shstrtab(bfd) (elf_tdata(bfd) -> strtab_ptr)
|
||||
#define elf_onesymtab(bfd) (elf_tdata(bfd) -> symtab_section)
|
||||
#define elf_symtab_shndx(bfd) (elf_tdata(bfd) -> symtab_shndx_section)
|
||||
#define elf_symtab_hdr(bfd) (elf_tdata(bfd) -> symtab_hdr)
|
||||
#define elf_dynsymtab(bfd) (elf_tdata(bfd) -> dynsymtab_section)
|
||||
#define elf_dynversym(bfd) (elf_tdata(bfd) -> dynversym_section)
|
||||
#define elf_dynverdef(bfd) (elf_tdata(bfd) -> dynverdef_section)
|
||||
@ -1647,7 +1673,9 @@ extern unsigned long bfd_elf_gnu_hash
|
||||
|
||||
extern bfd_reloc_status_type bfd_elf_generic_reloc
|
||||
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
|
||||
extern bfd_boolean bfd_elf_mkobject
|
||||
extern bfd_boolean bfd_elf_allocate_object
|
||||
(bfd *, size_t, enum elf_object_id);
|
||||
extern bfd_boolean bfd_elf_make_generic_object
|
||||
(bfd *);
|
||||
extern bfd_boolean bfd_elf_mkcorefile
|
||||
(bfd *);
|
||||
|
32
bfd/elf.c
32
bfd/elf.c
@ -226,26 +226,40 @@ bfd_elf_gnu_hash (const char *namearg)
|
||||
return h & 0xffffffff;
|
||||
}
|
||||
|
||||
/* If ABFD does not already have an allocated tdata field then create
|
||||
one, OBJECT_SIZE bytes is length, zeroed out and with the object_id
|
||||
field of an elf_obj_tdata field set to OBJECT_ID. */
|
||||
bfd_boolean
|
||||
bfd_elf_mkobject (bfd *abfd)
|
||||
bfd_elf_allocate_object (bfd * abfd,
|
||||
size_t object_size,
|
||||
enum elf_object_id object_id)
|
||||
{
|
||||
if (abfd->tdata.any != NULL)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
|
||||
abfd->tdata.any = bfd_zalloc (abfd, object_size);
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
abfd->tdata.any = bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
elf_tdata (abfd)->program_header_size = (bfd_size_type) -1;
|
||||
return FALSE;
|
||||
|
||||
elf_object_id (abfd) = object_id;
|
||||
elf_program_header_size (abfd) = (bfd_size_type) -1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bfd_boolean
|
||||
bfd_elf_make_generic_object (bfd *abfd)
|
||||
{
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
|
||||
GENERIC_ELF_TDATA);
|
||||
}
|
||||
|
||||
bfd_boolean
|
||||
bfd_elf_mkcorefile (bfd *abfd)
|
||||
{
|
||||
/* I think this can be done just like an object file. */
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_make_generic_object (abfd);
|
||||
}
|
||||
|
||||
char *
|
||||
|
@ -2065,7 +2065,7 @@ _arm_elf_section_data;
|
||||
/* The size of the thread control block. */
|
||||
#define TCB_SIZE 8
|
||||
|
||||
struct elf32_arm_obj_tdata
|
||||
struct elf_arm_obj_tdata
|
||||
{
|
||||
struct elf_obj_tdata root;
|
||||
|
||||
@ -2076,23 +2076,22 @@ struct elf32_arm_obj_tdata
|
||||
int no_enum_size_warning;
|
||||
};
|
||||
|
||||
#define elf32_arm_tdata(abfd) \
|
||||
((struct elf32_arm_obj_tdata *) (abfd)->tdata.any)
|
||||
#define elf_arm_tdata(bfd) \
|
||||
((struct elf_arm_obj_tdata *) (bfd)->tdata.any)
|
||||
|
||||
#define elf32_arm_local_got_tls_type(abfd) \
|
||||
(elf32_arm_tdata (abfd)->local_got_tls_type)
|
||||
#define elf32_arm_local_got_tls_type(bfd) \
|
||||
(elf_arm_tdata (bfd)->local_got_tls_type)
|
||||
|
||||
#define is_arm_elf(bfd) \
|
||||
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
|
||||
&& elf_tdata (bfd) != NULL \
|
||||
&& elf_object_id (bfd) == ARM_ELF_TDATA)
|
||||
|
||||
static bfd_boolean
|
||||
elf32_arm_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct elf32_arm_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct elf_arm_obj_tdata),
|
||||
ARM_ELF_TDATA);
|
||||
}
|
||||
|
||||
/* The ARM linker needs to keep track of the number of relocs that it
|
||||
@ -3151,7 +3150,7 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd,
|
||||
if ((sec->flags & SEC_EXCLUDE) != 0)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = & elf_symtab_hdr (abfd);
|
||||
|
||||
/* Load the relocs. */
|
||||
internal_relocs
|
||||
@ -3285,7 +3284,7 @@ bfd_elf32_arm_init_maps (bfd *abfd)
|
||||
if ((abfd->flags & DYNAMIC) != 0)
|
||||
return;
|
||||
|
||||
hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
hdr = & elf_symtab_hdr (abfd);
|
||||
localsyms = hdr->sh_info;
|
||||
|
||||
/* Obtain a buffer full of symbols for this BFD. The hdr->sh_info field
|
||||
@ -3658,16 +3657,16 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info)
|
||||
if (link_info->relocatable)
|
||||
return TRUE;
|
||||
|
||||
/* Skip if this bfd does not correspond to an ELF image. */
|
||||
if (! is_arm_elf (abfd))
|
||||
return TRUE;
|
||||
|
||||
/* We should have chosen a fix type by the time we get here. */
|
||||
BFD_ASSERT (globals->vfp11_fix != BFD_ARM_VFP11_FIX_DEFAULT);
|
||||
|
||||
if (globals->vfp11_fix == BFD_ARM_VFP11_FIX_NONE)
|
||||
return TRUE;
|
||||
|
||||
/* Skip if this bfd does not correspond to an ELF image. */
|
||||
if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
|
||||
return TRUE;
|
||||
|
||||
for (sec = abfd->sections; sec != NULL; sec = sec->next)
|
||||
{
|
||||
unsigned int i, span, first_fmac = 0, veneer_of_insn = 0;
|
||||
@ -3840,7 +3839,7 @@ bfd_elf32_arm_vfp11_fix_veneer_locations (bfd *abfd,
|
||||
return;
|
||||
|
||||
/* Skip if this bfd does not correspond to an ELF image. */
|
||||
if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
|
||||
if (! is_arm_elf (abfd))
|
||||
return;
|
||||
|
||||
globals = elf32_arm_hash_table (link_info);
|
||||
@ -3943,7 +3942,8 @@ bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd,
|
||||
globals->vfp11_fix = vfp11_fix;
|
||||
globals->pic_veneer = pic_veneer;
|
||||
|
||||
elf32_arm_tdata (output_bfd)->no_enum_size_warning = no_enum_warn;
|
||||
BFD_ASSERT (is_arm_elf (output_bfd));
|
||||
elf_arm_tdata (output_bfd)->no_enum_size_warning = no_enum_warn;
|
||||
}
|
||||
|
||||
/* The thumb form of a long branch is a bit finicky, because the offset
|
||||
@ -4528,7 +4528,9 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
||||
|
||||
globals = elf32_arm_hash_table (info);
|
||||
|
||||
/* Some relocation type map to different relocations depending on the
|
||||
BFD_ASSERT (is_arm_elf (input_bfd));
|
||||
|
||||
/* Some relocation types map to different relocations depending on the
|
||||
target. We pick the right one here. */
|
||||
r_type = arm_real_reloc_type (globals, r_type);
|
||||
if (r_type != howto->type)
|
||||
@ -4552,7 +4554,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
||||
sgot = bfd_get_section_by_name (dynobj, ".got");
|
||||
splt = bfd_get_section_by_name (dynobj, ".plt");
|
||||
}
|
||||
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = & elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
local_got_offsets = elf_local_got_offsets (input_bfd);
|
||||
r_symndx = ELF32_R_SYM (rel->r_info);
|
||||
@ -6319,7 +6321,7 @@ elf32_arm_relocate_section (bfd * output_bfd,
|
||||
|
||||
globals = elf32_arm_hash_table (info);
|
||||
|
||||
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = & elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
|
||||
rel = relocs;
|
||||
@ -6608,8 +6610,7 @@ elf32_arm_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
|
||||
flagword in_flags;
|
||||
flagword out_flags;
|
||||
|
||||
if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|
||||
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
|
||||
if (! is_arm_elf (ibfd) || ! is_arm_elf (obfd))
|
||||
return TRUE;
|
||||
|
||||
in_flags = elf_elfheader (ibfd)->e_flags;
|
||||
@ -6867,7 +6868,7 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
|
||||
}
|
||||
else if (in_attr[i].i != AEABI_enum_forced_wide
|
||||
&& out_attr[i].i != in_attr[i].i
|
||||
&& !elf32_arm_tdata (obfd)->no_enum_size_warning)
|
||||
&& !elf_arm_tdata (obfd)->no_enum_size_warning)
|
||||
{
|
||||
const char *aeabi_enum_names[] =
|
||||
{ "", "variable-size", "32-bit", "" };
|
||||
@ -6963,8 +6964,7 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
|
||||
if (! _bfd_generic_verify_endian_match (ibfd, obfd))
|
||||
return FALSE;
|
||||
|
||||
if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|
||||
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
|
||||
if (! is_arm_elf (ibfd) || ! is_arm_elf (obfd))
|
||||
return TRUE;
|
||||
|
||||
if (!elf32_arm_merge_eabi_attributes (ibfd, obfd))
|
||||
@ -7358,7 +7358,7 @@ elf32_arm_gc_sweep_hook (bfd * abfd,
|
||||
|
||||
elf_section_data (sec)->local_dynrel = NULL;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = & elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
|
||||
@ -7492,6 +7492,8 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
if (info->relocatable)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (is_arm_elf (abfd));
|
||||
|
||||
htab = elf32_arm_hash_table (info);
|
||||
sreloc = NULL;
|
||||
|
||||
@ -7507,7 +7509,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
dynobj = elf_hash_table (info)->dynobj;
|
||||
local_got_offsets = elf_local_got_offsets (abfd);
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = & elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
|
||||
rel_end = relocs + sec->reloc_count;
|
||||
@ -7832,13 +7834,14 @@ elf32_arm_gc_mark_extra_sections(struct bfd_link_info *info,
|
||||
{
|
||||
asection *o;
|
||||
|
||||
if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
|
||||
if (! is_arm_elf (sub))
|
||||
continue;
|
||||
|
||||
elf_shdrp = elf_elfsections (sub);
|
||||
for (o = sub->sections; o != NULL; o = o->next)
|
||||
{
|
||||
Elf_Internal_Shdr *hdr;
|
||||
|
||||
hdr = &elf_section_data (o)->this_hdr;
|
||||
if (hdr->sh_type == SHT_ARM_EXIDX && hdr->sh_link
|
||||
&& !o->gc_mark
|
||||
@ -8524,12 +8527,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
|
||||
Elf_Internal_Shdr *symtab_hdr;
|
||||
asection *srel;
|
||||
|
||||
/* FIXME: Here and elsewhere the test for an ELF input BFD is
|
||||
not sufficiently strict. Since we use elf32_arm_tdata and
|
||||
elf32_arm_section_data, we should only allow those targets
|
||||
that in fact have such data. This of course is the set of
|
||||
targets defined in this file. */
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
|
||||
if (! is_arm_elf (ibfd))
|
||||
continue;
|
||||
|
||||
for (s = ibfd->sections; s != NULL; s = s->next)
|
||||
@ -8560,7 +8558,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
|
||||
if (!local_got)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = & elf_symtab_hdr (ibfd);
|
||||
locsymcount = symtab_hdr->sh_info;
|
||||
end_local_got = local_got + locsymcount;
|
||||
local_tls_type = elf32_arm_local_got_tls_type (ibfd);
|
||||
@ -8606,7 +8604,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
|
||||
/* Here we rummage through the found bfds to collect glue information. */
|
||||
for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
|
||||
{
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
|
||||
if (! is_arm_elf (ibfd))
|
||||
continue;
|
||||
|
||||
/* Initialise mapping tables for code/data. */
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Intel 80386/80486-specific support for 32-bit ELF
|
||||
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
@ -642,17 +642,16 @@ struct elf_i386_obj_tdata
|
||||
#define elf_i386_local_tlsdesc_gotent(abfd) \
|
||||
(elf_i386_tdata (abfd)->local_tlsdesc_gotent)
|
||||
|
||||
#define is_i386_elf(bfd) \
|
||||
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
|
||||
&& elf_tdata (bfd) != NULL \
|
||||
&& elf_object_id (bfd) == I386_ELF_TDATA)
|
||||
|
||||
static bfd_boolean
|
||||
elf_i386_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct elf_i386_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct elf_i386_obj_tdata),
|
||||
I386_ELF_TDATA);
|
||||
}
|
||||
|
||||
/* i386 ELF linker hash table. */
|
||||
@ -1210,8 +1209,10 @@ elf_i386_check_relocs (bfd *abfd,
|
||||
if (info->relocatable)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (is_i386_elf (abfd));
|
||||
|
||||
htab = elf_i386_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
|
||||
sreloc = NULL;
|
||||
@ -1604,7 +1605,7 @@ elf_i386_gc_sweep_hook (bfd *abfd,
|
||||
|
||||
elf_section_data (sec)->local_dynrel = NULL;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
|
||||
@ -2161,7 +2162,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
Elf_Internal_Shdr *symtab_hdr;
|
||||
asection *srel;
|
||||
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
|
||||
if (! is_i386_elf (ibfd))
|
||||
continue;
|
||||
|
||||
for (s = ibfd->sections; s != NULL; s = s->next)
|
||||
@ -2195,7 +2196,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
if (!local_got)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
locsymcount = symtab_hdr->sh_info;
|
||||
end_local_got = local_got + locsymcount;
|
||||
local_tls_type = elf_i386_local_got_tls_type (ibfd);
|
||||
@ -2502,8 +2503,10 @@ elf_i386_relocate_section (bfd *output_bfd,
|
||||
Elf_Internal_Rela *rel;
|
||||
Elf_Internal_Rela *relend;
|
||||
|
||||
BFD_ASSERT (is_i386_elf (input_bfd));
|
||||
|
||||
htab = elf_i386_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
local_got_offsets = elf_local_got_offsets (input_bfd);
|
||||
local_tlsdesc_gotents = elf_i386_local_tlsdesc_gotent (input_bfd);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* PowerPC-specific support for 32-bit ELF
|
||||
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
|
||||
2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor, Cygnus Support.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
@ -1741,14 +1741,8 @@ struct ppc_elf_obj_tdata
|
||||
static bfd_boolean
|
||||
ppc_elf_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct ppc_elf_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct ppc_elf_obj_tdata),
|
||||
PPC32_ELF_TDATA);
|
||||
}
|
||||
|
||||
/* Fix bad default arch selected for a 32 bit input bfd when the
|
||||
@ -2895,13 +2889,15 @@ elf_create_pointer_linker_section (bfd *abfd,
|
||||
}
|
||||
else
|
||||
{
|
||||
BFD_ASSERT (is_ppc_elf_target (abfd->xvec));
|
||||
|
||||
/* Allocation of a pointer to a local symbol. */
|
||||
elf_linker_section_pointers_t **ptr = elf_local_ptr_offsets (abfd);
|
||||
|
||||
/* Allocate a table to hold the local symbols if first time. */
|
||||
if (!ptr)
|
||||
{
|
||||
unsigned int num_symbols = elf_tdata (abfd)->symtab_hdr.sh_info;
|
||||
unsigned int num_symbols = elf_symtab_hdr (abfd).sh_info;
|
||||
|
||||
amt = num_symbols;
|
||||
amt *= sizeof (elf_linker_section_pointers_t *);
|
||||
@ -3059,12 +3055,14 @@ ppc_elf_check_relocs (bfd *abfd,
|
||||
sec, abfd);
|
||||
#endif
|
||||
|
||||
BFD_ASSERT (is_ppc_elf_target (abfd->xvec));
|
||||
|
||||
/* Initialize howto table if not already done. */
|
||||
if (!ppc_elf_howto_table[R_PPC_ADDR32])
|
||||
ppc_elf_howto_init ();
|
||||
|
||||
htab = ppc_elf_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
got2 = bfd_get_section_by_name (abfd, ".got2");
|
||||
sreloc = NULL;
|
||||
@ -3919,7 +3917,7 @@ ppc_elf_gc_sweep_hook (bfd *abfd,
|
||||
elf_section_data (sec)->local_dynrel = NULL;
|
||||
|
||||
htab = ppc_elf_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
got2 = bfd_get_section_by_name (abfd, ".got2");
|
||||
@ -4077,7 +4075,7 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED,
|
||||
for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
|
||||
{
|
||||
Elf_Internal_Sym *locsyms = NULL;
|
||||
Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
|
||||
for (sec = ibfd->sections; sec != NULL; sec = sec->next)
|
||||
if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
|
||||
@ -4954,7 +4952,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
if (!local_got)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
locsymcount = symtab_hdr->sh_info;
|
||||
end_local_got = local_got + locsymcount;
|
||||
lgot_masks = (char *) end_local_got;
|
||||
@ -5260,7 +5258,7 @@ ppc_elf_relax_section (bfd *abfd,
|
||||
/* Space for a branch around any trampolines. */
|
||||
trampoff += 4;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
|
||||
/* Get a copy of the native relocations. */
|
||||
internal_relocs = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL,
|
||||
@ -5677,6 +5675,7 @@ elf_finish_pointer_linker_section (bfd *input_bfd,
|
||||
/* Handle local symbol. */
|
||||
unsigned long r_symndx = ELF32_R_SYM (rel->r_info);
|
||||
|
||||
BFD_ASSERT (is_ppc_elf_target (input_bfd->xvec));
|
||||
BFD_ASSERT (elf_local_ptr_offsets (input_bfd) != NULL);
|
||||
linker_section_ptr = elf_local_ptr_offsets (input_bfd)[r_symndx];
|
||||
}
|
||||
@ -5778,7 +5777,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
|
||||
|
||||
htab = ppc_elf_hash_table (info);
|
||||
local_got_offsets = elf_local_got_offsets (input_bfd);
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
rel = relocs;
|
||||
relend = relocs + input_section->reloc_count;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* IBM S/390-specific support for 32-bit ELF
|
||||
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
||||
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Carl B. Pedersen and Martin Schwidefsky.
|
||||
|
||||
@ -674,11 +674,13 @@ struct elf_s390_link_hash_entry
|
||||
#define elf_s390_hash_entry(ent) \
|
||||
((struct elf_s390_link_hash_entry *)(ent))
|
||||
|
||||
/* NOTE: Keep this structure in sync with
|
||||
the one declared in elf64-s390.c. */
|
||||
struct elf_s390_obj_tdata
|
||||
{
|
||||
struct elf_obj_tdata root;
|
||||
|
||||
/* tls_type for each local got entry. */
|
||||
/* TLS type for each local got entry. */
|
||||
char *local_got_tls_type;
|
||||
};
|
||||
|
||||
@ -688,17 +690,16 @@ struct elf_s390_obj_tdata
|
||||
#define elf_s390_local_got_tls_type(abfd) \
|
||||
(elf_s390_tdata (abfd)->local_got_tls_type)
|
||||
|
||||
#define is_s390_elf(bfd) \
|
||||
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
|
||||
&& elf_tdata (bfd) != NULL \
|
||||
&& elf_object_id (bfd) == S390_ELF_TDATA)
|
||||
|
||||
static bfd_boolean
|
||||
elf_s390_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct elf_s390_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct elf_s390_obj_tdata),
|
||||
S390_ELF_TDATA);
|
||||
}
|
||||
|
||||
static bfd_boolean
|
||||
@ -982,8 +983,10 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
|
||||
if (info->relocatable)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (is_s390_elf (abfd));
|
||||
|
||||
htab = elf_s390_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
|
||||
@ -1429,7 +1432,7 @@ elf_s390_gc_sweep_hook (bfd *abfd,
|
||||
|
||||
elf_section_data (sec)->local_dynrel = NULL;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
|
||||
@ -2019,7 +2022,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
|
||||
Elf_Internal_Shdr *symtab_hdr;
|
||||
asection *srela;
|
||||
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
|
||||
if (! is_s390_elf (ibfd))
|
||||
continue;
|
||||
|
||||
for (s = ibfd->sections; s != NULL; s = s->next)
|
||||
@ -2050,7 +2053,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
|
||||
if (!local_got)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
locsymcount = symtab_hdr->sh_info;
|
||||
end_local_got = local_got + locsymcount;
|
||||
local_tls_type = elf_s390_local_got_tls_type (ibfd);
|
||||
@ -2269,8 +2272,10 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
Elf_Internal_Rela *rel;
|
||||
Elf_Internal_Rela *relend;
|
||||
|
||||
BFD_ASSERT (is_s390_elf (input_bfd));
|
||||
|
||||
htab = elf_s390_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
local_got_offsets = elf_local_got_offsets (input_bfd);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Renesas / SuperH SH specific support for 32-bit ELF
|
||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
2006, 2007 Free Software Foundation, Inc.
|
||||
2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
Contributed by Ian Lance Taylor, Cygnus Support.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
@ -487,7 +487,7 @@ sh_elf_relax_section (bfd *abfd, asection *sec,
|
||||
}
|
||||
#endif
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
|
||||
internal_relocs = (_bfd_elf_link_read_relocs
|
||||
(abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
|
||||
@ -852,7 +852,7 @@ sh_elf_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr,
|
||||
unsigned int symcount;
|
||||
asection *o;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
|
||||
|
||||
sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
|
||||
@ -2154,20 +2154,19 @@ struct sh_elf_obj_tdata
|
||||
#define sh_elf_local_got_tls_type(abfd) \
|
||||
(sh_elf_tdata (abfd)->local_got_tls_type)
|
||||
|
||||
#define is_sh_elf(bfd) \
|
||||
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
|
||||
&& elf_tdata (bfd) != NULL \
|
||||
&& elf_object_id (bfd) == SH_ELF_TDATA)
|
||||
|
||||
/* Override the generic function because we need to store sh_elf_obj_tdata
|
||||
as the specific tdata. */
|
||||
|
||||
static bfd_boolean
|
||||
sh_elf_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct sh_elf_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct sh_elf_obj_tdata),
|
||||
SH_ELF_TDATA);
|
||||
}
|
||||
|
||||
/* sh ELF linker hash table. */
|
||||
@ -2958,7 +2957,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
Elf_Internal_Shdr *symtab_hdr;
|
||||
asection *srel;
|
||||
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
|
||||
if (! is_sh_elf (ibfd))
|
||||
continue;
|
||||
|
||||
for (s = ibfd->sections; s != NULL; s = s->next)
|
||||
@ -2992,7 +2991,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
if (!local_got)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
locsymcount = symtab_hdr->sh_info;
|
||||
#ifdef INCLUDE_SHMEDIA
|
||||
/* Count datalabel local GOT. */
|
||||
@ -3168,8 +3167,10 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
||||
asection *sreloc;
|
||||
asection *srelgot;
|
||||
|
||||
BFD_ASSERT (is_sh_elf (input_bfd));
|
||||
|
||||
htab = sh_elf_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
dynobj = htab->root.dynobj;
|
||||
local_got_offsets = elf_local_got_offsets (input_bfd);
|
||||
@ -4427,7 +4428,7 @@ sh_elf_get_relocated_section_contents (bfd *output_bfd,
|
||||
relocatable,
|
||||
symbols);
|
||||
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
|
||||
memcpy (data, elf_section_data (input_section)->this_hdr.contents,
|
||||
(size_t) input_section->size);
|
||||
@ -4569,7 +4570,7 @@ sh_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
|
||||
|
||||
elf_section_data (sec)->local_dynrel = NULL;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
|
||||
@ -4859,7 +4860,9 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
|
||||
if (info->relocatable)
|
||||
return TRUE;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
BFD_ASSERT (is_sh_elf (abfd));
|
||||
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
|
||||
htab = sh_elf_hash_table (info);
|
||||
@ -5358,13 +5361,12 @@ sh_elf_set_private_flags (bfd *abfd, flagword flags)
|
||||
static bfd_boolean
|
||||
sh_elf_copy_private_data (bfd * ibfd, bfd * obfd)
|
||||
{
|
||||
if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|
||||
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
|
||||
return TRUE;
|
||||
|
||||
/* Copy object attributes. */
|
||||
_bfd_elf_copy_obj_attributes (ibfd, obfd);
|
||||
|
||||
if (! is_sh_elf (ibfd) || ! is_sh_elf (obfd))
|
||||
return TRUE;
|
||||
|
||||
return sh_elf_set_private_flags (obfd, elf_elfheader (ibfd)->e_flags);
|
||||
}
|
||||
#endif /* not sh_elf_copy_private_data */
|
||||
@ -5391,8 +5393,7 @@ sh_elf_merge_private_data (bfd *ibfd, bfd *obfd)
|
||||
{
|
||||
extern bfd_boolean sh_merge_bfd_arch (bfd *, bfd *);
|
||||
|
||||
if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|
||||
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
|
||||
if (! is_sh_elf (ibfd) || ! is_sh_elf (obfd))
|
||||
return TRUE;
|
||||
|
||||
if (! elf_flags_init (obfd))
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Alpha specific support for 64-bit ELF
|
||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
2006, 2007 Free Software Foundation, Inc.
|
||||
2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
Contributed by Richard Henderson <rth@tamu.edu>.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
@ -324,17 +324,16 @@ struct alpha_elf_obj_tdata
|
||||
#define alpha_elf_tdata(abfd) \
|
||||
((struct alpha_elf_obj_tdata *) (abfd)->tdata.any)
|
||||
|
||||
#define is_alpha_elf(bfd) \
|
||||
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
|
||||
&& elf_tdata (bfd) != NULL \
|
||||
&& elf_object_id (bfd) == ALPHA_ELF_TDATA)
|
||||
|
||||
static bfd_boolean
|
||||
elf64_alpha_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct alpha_elf_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct alpha_elf_obj_tdata),
|
||||
ALPHA_ELF_TDATA);
|
||||
}
|
||||
|
||||
static bfd_boolean
|
||||
@ -1234,6 +1233,9 @@ elf64_alpha_create_got_section (bfd *abfd,
|
||||
flagword flags;
|
||||
asection *s;
|
||||
|
||||
if (! is_alpha_elf (abfd))
|
||||
return FALSE;
|
||||
|
||||
flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
|
||||
| SEC_LINKER_CREATED);
|
||||
s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
|
||||
@ -1260,6 +1262,9 @@ elf64_alpha_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
|
||||
flagword flags;
|
||||
struct elf_link_hash_entry *h;
|
||||
|
||||
if (! is_alpha_elf (abfd))
|
||||
return FALSE;
|
||||
|
||||
/* We need to create .plt, .rela.plt, .got, and .rela.got sections. */
|
||||
|
||||
flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS | SEC_IN_MEMORY
|
||||
@ -1761,14 +1766,16 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
if ((sec->flags & SEC_ALLOC) == 0)
|
||||
return TRUE;
|
||||
|
||||
dynobj = elf_hash_table(info)->dynobj;
|
||||
BFD_ASSERT (is_alpha_elf (abfd));
|
||||
|
||||
dynobj = elf_hash_table (info)->dynobj;
|
||||
if (dynobj == NULL)
|
||||
elf_hash_table(info)->dynobj = dynobj = abfd;
|
||||
elf_hash_table (info)->dynobj = dynobj = abfd;
|
||||
|
||||
sreloc = NULL;
|
||||
rel_sec_name = NULL;
|
||||
symtab_hdr = &elf_tdata(abfd)->symtab_hdr;
|
||||
sym_hashes = alpha_elf_sym_hashes(abfd);
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = alpha_elf_sym_hashes (abfd);
|
||||
|
||||
relend = relocs + sec->reloc_count;
|
||||
for (rel = relocs; rel < relend; ++rel)
|
||||
@ -2390,7 +2397,12 @@ elf64_alpha_size_got_sections (struct bfd_link_info *info)
|
||||
{
|
||||
for (i = info->input_bfds; i ; i = i->link_next)
|
||||
{
|
||||
bfd *this_got = alpha_elf_tdata (i)->gotobj;
|
||||
bfd *this_got;
|
||||
|
||||
if (! is_alpha_elf (i))
|
||||
continue;
|
||||
|
||||
this_got = alpha_elf_tdata (i)->gotobj;
|
||||
if (this_got == NULL)
|
||||
continue;
|
||||
|
||||
@ -2421,6 +2433,9 @@ elf64_alpha_size_got_sections (struct bfd_link_info *info)
|
||||
}
|
||||
|
||||
cur_got_obj = got_list;
|
||||
if (cur_got_obj == NULL)
|
||||
return FALSE;
|
||||
|
||||
i = alpha_elf_tdata(cur_got_obj)->got_link_next;
|
||||
while (i != NULL)
|
||||
{
|
||||
@ -3612,6 +3627,8 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec,
|
||||
|| sec->reloc_count == 0)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (is_alpha_elf (abfd));
|
||||
|
||||
/* Make sure our GOT and PLT tables are up-to-date. */
|
||||
if (alpha_elf_hash_table(link_info)->relax_trip != link_info->relax_trip)
|
||||
{
|
||||
@ -3628,7 +3645,7 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec,
|
||||
}
|
||||
}
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
local_got_entries = alpha_elf_tdata(abfd)->local_got_entries;
|
||||
|
||||
/* Load the relocations for this section. */
|
||||
@ -3935,7 +3952,7 @@ elf64_alpha_relocate_section_r (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
struct elf_link_hash_entry **sym_hashes;
|
||||
bfd_boolean ret_val = TRUE;
|
||||
|
||||
symtab_hdr_sh_info = elf_tdata (input_bfd)->symtab_hdr.sh_info;
|
||||
symtab_hdr_sh_info = elf_symtab_hdr (input_bfd).sh_info;
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
|
||||
relend = relocs + input_section->reloc_count;
|
||||
@ -4023,6 +4040,8 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
||||
struct alpha_elf_got_entry **local_got_entries;
|
||||
bfd_boolean ret_val;
|
||||
|
||||
BFD_ASSERT (is_alpha_elf (input_bfd));
|
||||
|
||||
/* Handle relocatable links with a smaller loop. */
|
||||
if (info->relocatable)
|
||||
return elf64_alpha_relocate_section_r (output_bfd, info, input_bfd,
|
||||
@ -4033,7 +4052,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
||||
|
||||
ret_val = TRUE;
|
||||
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
|
||||
dynobj = elf_hash_table (info)->dynobj;
|
||||
if (dynobj)
|
||||
@ -5043,15 +5062,11 @@ elf64_alpha_final_link (bfd *abfd, struct bfd_link_info *info)
|
||||
input_section = p->u.indirect.section;
|
||||
input_bfd = input_section->owner;
|
||||
|
||||
if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour
|
||||
|| (get_elf_backend_data (input_bfd)
|
||||
->elf_backend_ecoff_debug_swap) == NULL)
|
||||
{
|
||||
/* I don't know what a non ALPHA ELF bfd would be
|
||||
doing with a .mdebug section, but I don't really
|
||||
want to deal with it. */
|
||||
continue;
|
||||
}
|
||||
if (! is_alpha_elf (input_bfd))
|
||||
/* I don't know what a non ALPHA ELF bfd would be
|
||||
doing with a .mdebug section, but I don't really
|
||||
want to deal with it. */
|
||||
continue;
|
||||
|
||||
input_swap = (get_elf_backend_data (input_bfd)
|
||||
->elf_backend_ecoff_debug_swap);
|
||||
|
@ -2430,14 +2430,8 @@ struct ppc64_elf_obj_tdata
|
||||
static bfd_boolean
|
||||
ppc64_elf_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct ppc64_elf_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
|
||||
PPC64_ELF_TDATA);
|
||||
}
|
||||
|
||||
/* Return 1 if target is one of ours. */
|
||||
@ -3888,6 +3882,9 @@ create_got_section (bfd *abfd, struct bfd_link_info *info)
|
||||
flagword flags;
|
||||
struct ppc_link_hash_table *htab = ppc_hash_table (info);
|
||||
|
||||
if (! is_ppc64_elf_target (abfd->xvec))
|
||||
return FALSE;
|
||||
|
||||
if (!htab->got)
|
||||
{
|
||||
if (! _bfd_elf_create_got_section (htab->elf.dynobj, info))
|
||||
@ -4425,8 +4422,10 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
if ((sec->flags & SEC_ALLOC) == 0)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (is_ppc64_elf_target (abfd->xvec));
|
||||
|
||||
htab = ppc_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
sym_hashes_end = (sym_hashes
|
||||
@ -4989,6 +4988,8 @@ opd_entry_value (asection *opd_sec,
|
||||
return val;
|
||||
}
|
||||
|
||||
BFD_ASSERT (is_ppc64_elf_target (opd_bfd->xvec));
|
||||
|
||||
relocs = ppc64_elf_tdata (opd_bfd)->opd_relocs;
|
||||
if (relocs == NULL)
|
||||
relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
|
||||
@ -5007,7 +5008,8 @@ opd_entry_value (asection *opd_sec,
|
||||
hi = look;
|
||||
else
|
||||
{
|
||||
Elf_Internal_Shdr *symtab_hdr = &elf_tdata (opd_bfd)->symtab_hdr;
|
||||
Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
|
||||
|
||||
if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
|
||||
&& ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
|
||||
{
|
||||
@ -5265,7 +5267,7 @@ ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
|
||||
elf_section_data (sec)->local_dynrel = NULL;
|
||||
|
||||
htab = ppc_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_ents = elf_local_got_ents (abfd);
|
||||
|
||||
@ -6005,7 +6007,7 @@ get_sym_h (struct elf_link_hash_entry **hp,
|
||||
unsigned long r_symndx,
|
||||
bfd *ibfd)
|
||||
{
|
||||
Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
|
||||
if (r_symndx >= symtab_hdr->sh_info)
|
||||
{
|
||||
@ -6369,7 +6371,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info,
|
||||
continue;
|
||||
|
||||
local_syms = NULL;
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
sym_hashes = elf_sym_hashes (ibfd);
|
||||
|
||||
/* Read the relocations. */
|
||||
@ -6837,7 +6839,7 @@ ppc64_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
|
||||
if (toc_ref != NULL)
|
||||
free (toc_ref);
|
||||
if (locsyms != NULL
|
||||
&& (elf_tdata (ibfd)->symtab_hdr.contents
|
||||
&& (elf_symtab_hdr (ibfd).contents
|
||||
!= (unsigned char *) locsyms))
|
||||
free (locsyms);
|
||||
return FALSE;
|
||||
@ -7019,7 +7021,7 @@ ppc64_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
|
||||
unsigned long r_symndx2;
|
||||
struct elf_link_hash_entry *h2;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
|
||||
/* The next instruction should be a call to
|
||||
__tls_get_addr. Peek at the reloc to be sure. */
|
||||
@ -7161,13 +7163,12 @@ ppc64_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
|
||||
free (toc_ref);
|
||||
|
||||
if (locsyms != NULL
|
||||
&& (elf_tdata (ibfd)->symtab_hdr.contents
|
||||
!= (unsigned char *) locsyms))
|
||||
&& (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
|
||||
{
|
||||
if (!info->keep_memory)
|
||||
free (locsyms);
|
||||
else
|
||||
elf_tdata (ibfd)->symtab_hdr.contents = (unsigned char *) locsyms;
|
||||
elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
@ -7255,7 +7256,7 @@ ppc64_elf_edit_toc (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
|
||||
continue;
|
||||
|
||||
local_syms = NULL;
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
sym_hashes = elf_sym_hashes (ibfd);
|
||||
|
||||
/* Look at sections dropped from the final link. */
|
||||
@ -7748,6 +7749,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (! is_ppc64_elf_target (gent->owner->xvec))
|
||||
continue;
|
||||
|
||||
s = ppc64_elf_tdata (gent->owner)->got;
|
||||
gent->got.offset = s->size;
|
||||
s->size
|
||||
@ -7956,7 +7960,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
if (!lgot_ents)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
locsymcount = symtab_hdr->sh_info;
|
||||
end_lgot_ents = lgot_ents + locsymcount;
|
||||
lgot_masks = (char *) end_lgot_ents;
|
||||
@ -9092,8 +9096,7 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
|
||||
}
|
||||
|
||||
if (local_syms != NULL
|
||||
&& (elf_tdata (isec->owner)->symtab_hdr.contents
|
||||
!= (unsigned char *) local_syms))
|
||||
&& (elf_symtab_hdr (isec->owner).contents != (unsigned char *) local_syms))
|
||||
free (local_syms);
|
||||
if (elf_section_data (isec)->relocs != relstart)
|
||||
free (relstart);
|
||||
@ -9311,7 +9314,7 @@ ppc64_elf_size_stubs (bfd *output_bfd,
|
||||
continue;
|
||||
|
||||
/* We'll need the symbol table in a second. */
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
if (symtab_hdr->sh_info == 0)
|
||||
continue;
|
||||
|
||||
@ -9958,9 +9961,11 @@ ppc64_elf_relocate_section (bfd *output_bfd,
|
||||
if (input_section->owner == htab->stub_bfd)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (is_ppc64_elf_target (input_bfd->xvec));
|
||||
|
||||
local_got_ents = elf_local_got_ents (input_bfd);
|
||||
TOCstart = elf_gp (output_bfd);
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* IBM S/390-specific support for 64-bit ELF
|
||||
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
||||
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
Free Software Foundation, Inc.
|
||||
Contributed Martin Schwidefsky (schwidefsky@de.ibm.com).
|
||||
|
||||
@ -629,11 +629,13 @@ struct elf_s390_link_hash_entry
|
||||
#define elf_s390_hash_entry(ent) \
|
||||
((struct elf_s390_link_hash_entry *)(ent))
|
||||
|
||||
/* NOTE: Keep this structure in sync with
|
||||
the one declared in elf32-s390.c. */
|
||||
struct elf_s390_obj_tdata
|
||||
{
|
||||
struct elf_obj_tdata root;
|
||||
|
||||
/* tls_type for each local got entry. */
|
||||
/* TLS type for each local got entry. */
|
||||
char *local_got_tls_type;
|
||||
};
|
||||
|
||||
@ -643,17 +645,16 @@ struct elf_s390_obj_tdata
|
||||
#define elf_s390_local_got_tls_type(abfd) \
|
||||
(elf_s390_tdata (abfd)->local_got_tls_type)
|
||||
|
||||
#define is_s390_elf(bfd) \
|
||||
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
|
||||
&& elf_tdata (bfd) != NULL \
|
||||
&& elf_object_id (bfd) == S390_ELF_TDATA)
|
||||
|
||||
static bfd_boolean
|
||||
elf_s390_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct elf_s390_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct elf_s390_obj_tdata),
|
||||
S390_ELF_TDATA);
|
||||
}
|
||||
|
||||
static bfd_boolean
|
||||
@ -937,8 +938,10 @@ elf_s390_check_relocs (abfd, info, sec, relocs)
|
||||
if (info->relocatable)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (is_s390_elf (abfd));
|
||||
|
||||
htab = elf_s390_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
|
||||
@ -1397,7 +1400,7 @@ elf_s390_gc_sweep_hook (bfd *abfd,
|
||||
|
||||
elf_section_data (sec)->local_dynrel = NULL;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
|
||||
@ -1993,7 +1996,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
|
||||
Elf_Internal_Shdr *symtab_hdr;
|
||||
asection *srela;
|
||||
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
|
||||
if (! is_s390_elf (ibfd))
|
||||
continue;
|
||||
|
||||
for (s = ibfd->sections; s != NULL; s = s->next)
|
||||
@ -2024,7 +2027,7 @@ elf_s390_size_dynamic_sections (output_bfd, info)
|
||||
if (!local_got)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
locsymcount = symtab_hdr->sh_info;
|
||||
end_local_got = local_got + locsymcount;
|
||||
local_tls_type = elf_s390_local_got_tls_type (ibfd);
|
||||
@ -2243,8 +2246,10 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
Elf_Internal_Rela *rel;
|
||||
Elf_Internal_Rela *relend;
|
||||
|
||||
BFD_ASSERT (is_s390_elf (input_bfd));
|
||||
|
||||
htab = elf_s390_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
local_got_offsets = elf_local_got_offsets (input_bfd);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* X86-64 specific support for 64-bit ELF
|
||||
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
||||
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Jan Hubicka <jh@suse.cz>.
|
||||
|
||||
@ -457,6 +457,18 @@ struct elf64_x86_64_obj_tdata
|
||||
#define elf64_x86_64_local_tlsdesc_gotent(abfd) \
|
||||
(elf64_x86_64_tdata (abfd)->local_tlsdesc_gotent)
|
||||
|
||||
#define is_x86_64_elf(bfd) \
|
||||
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
|
||||
&& elf_tdata (bfd) != NULL \
|
||||
&& elf_object_id (bfd) == X86_64_ELF_TDATA)
|
||||
|
||||
static bfd_boolean
|
||||
elf64_x86_64_mkobject (bfd *abfd)
|
||||
{
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct elf64_x86_64_obj_tdata),
|
||||
X86_64_ELF_TDATA);
|
||||
}
|
||||
|
||||
/* x86-64 ELF linker hash table. */
|
||||
|
||||
struct elf64_x86_64_link_hash_table
|
||||
@ -692,19 +704,6 @@ elf64_x86_64_copy_indirect_symbol (struct bfd_link_info *info,
|
||||
_bfd_elf_link_hash_copy_indirect (info, dir, ind);
|
||||
}
|
||||
|
||||
static bfd_boolean
|
||||
elf64_x86_64_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct elf64_x86_64_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
}
|
||||
|
||||
static bfd_boolean
|
||||
elf64_x86_64_elf_object_p (bfd *abfd)
|
||||
{
|
||||
@ -990,8 +989,10 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
if (info->relocatable)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (is_x86_64_elf (abfd));
|
||||
|
||||
htab = elf64_x86_64_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
|
||||
sreloc = NULL;
|
||||
@ -1430,7 +1431,7 @@ elf64_x86_64_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
|
||||
|
||||
elf_section_data (sec)->local_dynrel = NULL;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
|
||||
@ -1972,7 +1973,7 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
Elf_Internal_Shdr *symtab_hdr;
|
||||
asection *srel;
|
||||
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
|
||||
if (! is_x86_64_elf (ibfd))
|
||||
continue;
|
||||
|
||||
for (s = ibfd->sections; s != NULL; s = s->next)
|
||||
@ -2007,7 +2008,7 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
|
||||
if (!local_got)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
locsymcount = symtab_hdr->sh_info;
|
||||
end_local_got = local_got + locsymcount;
|
||||
local_tls_type = elf64_x86_64_local_got_tls_type (ibfd);
|
||||
@ -2310,8 +2311,10 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
|
||||
Elf_Internal_Rela *rel;
|
||||
Elf_Internal_Rela *relend;
|
||||
|
||||
BFD_ASSERT (is_x86_64_elf (input_bfd));
|
||||
|
||||
htab = elf64_x86_64_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
local_got_offsets = elf_local_got_offsets (input_bfd);
|
||||
local_tlsdesc_gotents = elf64_x86_64_local_tlsdesc_gotent (input_bfd);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* SPARC-specific support for ELF
|
||||
Copyright 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
Copyright 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
@ -510,17 +510,16 @@ struct _bfd_sparc_elf_obj_tdata
|
||||
#define _bfd_sparc_elf_local_got_tls_type(abfd) \
|
||||
(_bfd_sparc_elf_tdata (abfd)->local_got_tls_type)
|
||||
|
||||
#define is_sparc_elf(bfd) \
|
||||
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
|
||||
&& elf_tdata (bfd) != NULL \
|
||||
&& elf_object_id (bfd) == SPARC_ELF_TDATA)
|
||||
|
||||
bfd_boolean
|
||||
_bfd_sparc_elf_mkobject (bfd *abfd)
|
||||
{
|
||||
if (abfd->tdata.any == NULL)
|
||||
{
|
||||
bfd_size_type amt = sizeof (struct _bfd_sparc_elf_obj_tdata);
|
||||
abfd->tdata.any = bfd_zalloc (abfd, amt);
|
||||
if (abfd->tdata.any == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
return bfd_elf_mkobject (abfd);
|
||||
return bfd_elf_allocate_object (abfd, sizeof (struct _bfd_sparc_elf_obj_tdata),
|
||||
SPARC_ELF_TDATA);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1090,7 +1089,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
return TRUE;
|
||||
|
||||
htab = _bfd_sparc_elf_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_offsets = elf_local_got_offsets (abfd);
|
||||
|
||||
@ -1100,6 +1099,9 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
num_relocs = NUM_SHDR_ENTRIES (& elf_section_data (sec)->rel_hdr);
|
||||
else
|
||||
num_relocs = sec->reloc_count;
|
||||
|
||||
BFD_ASSERT (is_sparc_elf (abfd) || num_relocs == 0);
|
||||
|
||||
rel_end = relocs + num_relocs;
|
||||
for (rel = relocs; rel < rel_end; rel++)
|
||||
{
|
||||
@ -1566,10 +1568,12 @@ _bfd_sparc_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
|
||||
if (info->relocatable)
|
||||
return TRUE;
|
||||
|
||||
BFD_ASSERT (is_sparc_elf (abfd) || sec->reloc_count == 0);
|
||||
|
||||
elf_section_data (sec)->local_dynrel = NULL;
|
||||
|
||||
htab = _bfd_sparc_elf_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (abfd);
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
local_got_refcounts = elf_local_got_refcounts (abfd);
|
||||
|
||||
@ -2157,7 +2161,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
|
||||
Elf_Internal_Shdr *symtab_hdr;
|
||||
asection *srel;
|
||||
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
|
||||
if (! is_sparc_elf (ibfd))
|
||||
continue;
|
||||
|
||||
for (s = ibfd->sections; s != NULL; s = s->next)
|
||||
@ -2188,7 +2192,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
|
||||
if (!local_got)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (ibfd);
|
||||
locsymcount = symtab_hdr->sh_info;
|
||||
end_local_got = local_got + locsymcount;
|
||||
local_tls_type = _bfd_sparc_elf_local_got_tls_type (ibfd);
|
||||
@ -2486,7 +2490,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd,
|
||||
int num_relocs;
|
||||
|
||||
htab = _bfd_sparc_elf_hash_table (info);
|
||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||
symtab_hdr = &elf_symtab_hdr (input_bfd);
|
||||
sym_hashes = elf_sym_hashes (input_bfd);
|
||||
local_got_offsets = elf_local_got_offsets (input_bfd);
|
||||
|
||||
|
@ -269,7 +269,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef bfd_elfNN_mkobject
|
||||
#define bfd_elfNN_mkobject bfd_elf_mkobject
|
||||
#define bfd_elfNN_mkobject bfd_elf_make_generic_object
|
||||
#endif
|
||||
|
||||
#ifndef bfd_elfNN_mkcorefile
|
||||
|
Loading…
Reference in New Issue
Block a user