aboutsummaryrefslogtreecommitdiff
path: root/libexec/rtld-elf
diff options
context:
space:
mode:
authorLeandro Lupori <luporl@FreeBSD.org>2020-07-06 11:57:59 +0000
committerLeandro Lupori <luporl@FreeBSD.org>2020-07-06 11:57:59 +0000
commita5467d6ca20e0b95b873a2767b0ccd21c4c98437 (patch)
treed3796c61f366606d2121468c667f541d219fac41 /libexec/rtld-elf
parent2c566d312fd0875efd200a8f488d1fda9f8c3d85 (diff)
Notes
Diffstat (limited to 'libexec/rtld-elf')
-rw-r--r--libexec/rtld-elf/rtld.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index 0ab26acd1fa60..e15aee68ace69 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -3111,7 +3111,8 @@ resolve_object_ifunc(Obj_Entry *obj, bool bind_now, int flags,
return (0);
obj->ifuncs_resolved = true;
if (!obj->irelative && !obj->irelative_nonplt &&
- !((obj->bind_now || bind_now) && obj->gnu_ifunc))
+ !((obj->bind_now || bind_now) && obj->gnu_ifunc) &&
+ !obj->non_plt_gnu_ifunc)
return (0);
if (obj_disable_relro(obj) == -1 ||
(obj->irelative && reloc_iresolve(obj, lockstate) == -1) ||
@@ -3119,6 +3120,8 @@ resolve_object_ifunc(Obj_Entry *obj, bool bind_now, int flags,
lockstate) == -1) ||
((obj->bind_now || bind_now) && obj->gnu_ifunc &&
reloc_gnu_ifunc(obj, flags, lockstate) == -1) ||
+ (obj->non_plt_gnu_ifunc && reloc_non_plt(obj, &obj_rtld,
+ flags | SYMLOOK_IFUNC, lockstate) == -1) ||
obj_enforce_relro(obj) == -1)
return (-1);
return (0);