summaryrefslogtreecommitdiff
path: root/linker/linker.cpp
diff options
context:
space:
mode:
authorPeter Collingbourne <pcc@google.com>2019-10-29 17:19:33 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-10-29 17:19:33 +0000
commit609d6ec4162aeea66ead0e8eb2afd9b5bd4a7155 (patch)
tree0e14d042b9df53a290c191395b79057102f77aa8 /linker/linker.cpp
parentdbe72ca7a1e58506ec7b054c0ceb8f477d570261 (diff)
parente949195f6489653ee3771535951ed06973246c3e (diff)
Merge "Adopt GNU calling convention for ifunc resolvers."
Diffstat (limited to 'linker/linker.cpp')
-rw-r--r--linker/linker.cpp7
1 files changed, 3 insertions, 4 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 3c30e73b3..f4fccac1e 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -68,6 +68,7 @@
#include "linker_tls.h"
#include "linker_utils.h"
+#include "private/bionic_call_ifunc_resolver.h"
#include "private/bionic_globals.h"
#include "android-base/macros.h"
#include "android-base/strings.h"
@@ -2689,11 +2690,9 @@ bool link_namespaces_all_libs(android_namespace_t* namespace_from,
ElfW(Addr) call_ifunc_resolver(ElfW(Addr) resolver_addr) {
if (g_is_ldd) return 0;
- typedef ElfW(Addr) (*ifunc_resolver_t)(void);
- ifunc_resolver_t ifunc_resolver = reinterpret_cast<ifunc_resolver_t>(resolver_addr);
- ElfW(Addr) ifunc_addr = ifunc_resolver();
+ ElfW(Addr) ifunc_addr = __bionic_call_ifunc_resolver(resolver_addr);
TRACE_TYPE(RELO, "Called ifunc_resolver@%p. The result is %p",
- ifunc_resolver, reinterpret_cast<void*>(ifunc_addr));
+ reinterpret_cast<void *>(resolver_addr), reinterpret_cast<void*>(ifunc_addr));
return ifunc_addr;
}