Fix elf_x86_64_reloc_type_class
This commit is contained in:
parent
28215275a6
commit
897463b12b
|
@ -6001,21 +6001,27 @@ elf_x86_64_reloc_type_class (const struct bfd_link_info *info,
|
|||
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
||||
struct elf_x86_64_link_hash_table *htab = elf_x86_64_hash_table (info);
|
||||
|
||||
if ((int) ELF32_R_TYPE (rela->r_info) == R_X86_64_IRELATIVE)
|
||||
return reloc_class_ifunc;
|
||||
|
||||
if (htab->elf.dynsym != NULL
|
||||
&& htab->elf.dynsym->contents != NULL)
|
||||
{
|
||||
/* Check relocation against STT_GNU_IFUNC symbol if there are
|
||||
dynamic symbols. */
|
||||
unsigned long r_symndx = htab->r_sym (rela->r_info);
|
||||
Elf_Internal_Sym sym;
|
||||
if (!bed->s->swap_symbol_in (abfd,
|
||||
(htab->elf.dynsym->contents
|
||||
+ r_symndx * bed->s->sizeof_sym),
|
||||
0, &sym))
|
||||
abort ();
|
||||
if (r_symndx != STN_UNDEF)
|
||||
{
|
||||
Elf_Internal_Sym sym;
|
||||
if (!bed->s->swap_symbol_in (abfd,
|
||||
(htab->elf.dynsym->contents
|
||||
+ r_symndx * bed->s->sizeof_sym),
|
||||
0, &sym))
|
||||
abort ();
|
||||
|
||||
if (ELF_ST_TYPE (sym.st_info) == STT_GNU_IFUNC)
|
||||
return reloc_class_ifunc;
|
||||
if (ELF_ST_TYPE (sym.st_info) == STT_GNU_IFUNC)
|
||||
return reloc_class_ifunc;
|
||||
}
|
||||
}
|
||||
|
||||
switch ((int) ELF32_R_TYPE (rela->r_info))
|
||||
|
|
Loading…
Reference in New Issue