Share is_x86_elf in elf32-i386.c and elf64-x86-64.c.
* elf32-i386.c (is_i386_elf): Removed.
(elf_i386_check_relocs): Replace is_i386_elf with is_x86_elf.
(elf_i386_size_dynamic_sections): Likewise.
(elf_i386_relocate_section): Likewise.
* elf64-x86-64.c (is_x86_64_elf): Removed.
(elf_x86_64_check_relocs): Replace is_x86_64_elf with
is_x86_elf.
(elf_x86_64_size_dynamic_sections): Likewise.
(elf_x86_64_relocate_section): Likewise.
* elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Initialize
target_id.
* elfxx-x86.h (elf_x86_link_hash_table): Add target_id.
(is_x86_elf): New.
+2017-09-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf32-i386.c (is_i386_elf): Removed.
+ (elf_i386_check_relocs): Replace is_i386_elf with is_x86_elf.
+ (elf_i386_size_dynamic_sections): Likewise.
+ (elf_i386_relocate_section): Likewise.
+ * elf64-x86-64.c (is_x86_64_elf): Removed.
+ (elf_x86_64_check_relocs): Replace is_x86_64_elf with
+ is_x86_elf.
+ (elf_x86_64_size_dynamic_sections): Likewise.
+ (elf_x86_64_relocate_section): Likewise.
+ * elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Initialize
+ target_id.
+ * elfxx-x86.h (elf_x86_link_hash_table): Add target_id.
+ (is_x86_elf): New.
+
2017-09-02 H.J. Lu <hongjiu.lu@intel.com>
* elf32-i386.c (elf_i386_compute_jump_table_size): Removed.
#define elf_backend_arch_data &elf_i386_arch_bed
-#define is_i386_elf(bfd) \
- (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
- && elf_tdata (bfd) != NULL \
- && elf_object_id (bfd) == I386_ELF_DATA)
-
/* Return TRUE if the TLS access code sequence support transition
from R_TYPE. */
if ((sec->flags & SEC_ALLOC) == 0)
return TRUE;
- BFD_ASSERT (is_i386_elf (abfd));
-
htab = elf_x86_hash_table (info, I386_ELF_DATA);
if (htab == NULL)
{
return FALSE;
}
+ BFD_ASSERT (is_x86_elf (abfd, htab));
+
/* Get the section contents. */
if (elf_section_data (sec)->this_hdr.contents != NULL)
contents = elf_section_data (sec)->this_hdr.contents;
Elf_Internal_Shdr *symtab_hdr;
asection *srel;
- if (! is_i386_elf (ibfd))
+ if (! is_x86_elf (ibfd, htab))
continue;
for (s = ibfd->sections; s != NULL; s = s->next)
bfd_boolean is_vxworks_tls;
unsigned plt_entry_size;
- BFD_ASSERT (is_i386_elf (input_bfd));
-
/* Skip if check_relocs failed. */
if (input_section->check_relocs_failed)
return FALSE;
htab = elf_x86_hash_table (info, I386_ELF_DATA);
if (htab == NULL)
return FALSE;
+
+ BFD_ASSERT (is_x86_elf (input_bfd, htab));
+
symtab_hdr = &elf_symtab_hdr (input_bfd);
sym_hashes = elf_sym_hashes (input_bfd);
local_got_offsets = elf_local_got_offsets (input_bfd);
#define elf_backend_arch_data &elf_x86_64_arch_bed
-#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_DATA)
-
static bfd_boolean
elf64_x86_64_elf_object_p (bfd *abfd)
{
if ((sec->flags & SEC_ALLOC) == 0)
return TRUE;
- BFD_ASSERT (is_x86_64_elf (abfd));
-
htab = elf_x86_hash_table (info, X86_64_ELF_DATA);
if (htab == NULL)
{
return FALSE;
}
+ BFD_ASSERT (is_x86_elf (abfd, htab));
+
/* Get the section contents. */
if (elf_section_data (sec)->this_hdr.contents != NULL)
contents = elf_section_data (sec)->this_hdr.contents;
Elf_Internal_Shdr *symtab_hdr;
asection *srel;
- if (! is_x86_64_elf (ibfd))
+ if (! is_x86_elf (ibfd, htab))
continue;
for (s = ibfd->sections; s != NULL; s = s->next)
Elf_Internal_Rela *relend;
unsigned int plt_entry_size;
- BFD_ASSERT (is_x86_64_elf (input_bfd));
-
/* Skip if check_relocs failed. */
if (input_section->check_relocs_failed)
return FALSE;
htab = elf_x86_hash_table (info, X86_64_ELF_DATA);
if (htab == NULL)
return FALSE;
+
+ BFD_ASSERT (is_x86_elf (input_bfd, htab));
+
plt_entry_size = htab->plt.plt_entry_size;
symtab_hdr = &elf_symtab_hdr (input_bfd);
sym_hashes = elf_sym_hashes (input_bfd);
ret->tls_get_addr = "___tls_get_addr";
}
}
+ ret->target_id = bed->target_id;
ret->loc_hash_table = htab_try_create (1024,
_bfd_x86_elf_local_htab_hash,
bfd_vma (*r_info) (bfd_vma, bfd_vma);
bfd_vma (*r_sym) (bfd_vma);
+ enum elf_target_id target_id;
unsigned int sizeof_reloc;
unsigned int got_entry_size;
unsigned int pointer_r_type;
#define elf_x86_compute_jump_table_size(htab) \
((htab)->elf.srelplt->reloc_count * (htab)->got_entry_size)
+#define is_x86_elf(bfd, htab) \
+ (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
+ && elf_tdata (bfd) != NULL \
+ && elf_object_id (bfd) == (htab)->target_id)
+
extern bfd_boolean _bfd_x86_elf_mkobject
(bfd *);