mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-01 10:06:57 +03:00
elf: Do not run IFUNC resolvers for LD_DEBUG=unused [BZ #24214]
This commit adds missing skip_ifunc checks to aarch64, arm, i386, sparc, and x86_64. A new test case ensures that IRELATIVE IFUNC resolvers do not run in various diagnostic modes of the dynamic loader. Reviewed-By: Szabolcs Nagy <szabolcs.nagy@arm.com>
This commit is contained in:
@ -425,11 +425,13 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
|
||||
*reloc_addr = value;
|
||||
break;
|
||||
case R_SPARC_IRELATIVE:
|
||||
value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap));
|
||||
if (__glibc_likely (!skip_ifunc))
|
||||
value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap));
|
||||
*reloc_addr = value;
|
||||
break;
|
||||
case R_SPARC_JMP_IREL:
|
||||
value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap));
|
||||
if (__glibc_likely (!skip_ifunc))
|
||||
value = ((Elf32_Addr (*) (int)) value) (GLRO(dl_hwcap));
|
||||
/* Fall thru */
|
||||
case R_SPARC_JMP_SLOT:
|
||||
{
|
||||
|
@ -450,11 +450,13 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
|
||||
*reloc_addr = value;
|
||||
break;
|
||||
case R_SPARC_IRELATIVE:
|
||||
value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap));
|
||||
if (__glibc_likely (!skip_ifunc))
|
||||
value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap));
|
||||
*reloc_addr = value;
|
||||
break;
|
||||
case R_SPARC_JMP_IREL:
|
||||
value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap));
|
||||
if (__glibc_likely (!skip_ifunc))
|
||||
value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap));
|
||||
/* 'high' is always zero, for large PLT entries the linker
|
||||
emits an R_SPARC_IRELATIVE. */
|
||||
#ifdef RESOLVE_CONFLICT_FIND_MAP
|
||||
|
Reference in New Issue
Block a user