diff options
author | Peter Collingbourne <pcc@google.com> | 2019-10-29 17:19:33 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-10-29 17:19:33 +0000 |
commit | 609d6ec4162aeea66ead0e8eb2afd9b5bd4a7155 (patch) | |
tree | 0e14d042b9df53a290c191395b79057102f77aa8 /linker/linker.cpp | |
parent | dbe72ca7a1e58506ec7b054c0ceb8f477d570261 (diff) | |
parent | e949195f6489653ee3771535951ed06973246c3e (diff) |
Merge "Adopt GNU calling convention for ifunc resolvers."
Diffstat (limited to 'linker/linker.cpp')
-rw-r--r-- | linker/linker.cpp | 7 |
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; } |