From 30e9eadcf921577166aff9a52ee1acd5cadaa7e8 Mon Sep 17 00:00:00 2001 From: kotori0 Date: Mon, 4 Jan 2021 21:02:16 +0800 Subject: [PATCH] Revert "Let compiler handle ABI" This reverts commit ebe9f19daec8dfc5a6883fc15195dde82972e720. --- .../cpp/main/include/art/runtime/thread.h | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/edxp-core/src/main/cpp/main/include/art/runtime/thread.h b/edxp-core/src/main/cpp/main/include/art/runtime/thread.h index 4526fcc5..e407f85f 100644 --- a/edxp-core/src/main/cpp/main/include/art/runtime/thread.h +++ b/edxp-core/src/main/cpp/main/include/art/runtime/thread.h @@ -6,13 +6,29 @@ namespace art { class Thread : public edxp::HookedObject { - struct ObjPtr { void *data; ObjPtr(ObjPtr const &) = delete; } ; - CREATE_FUNC_SYMBOL_ENTRY(ObjPtr, DecodeJObject, void *thiz, jobject obj) { + +#ifdef __i386__ + typedef void (*DecodeJObjectType)(void **, void *thiz, jobject obj); + inline static void (*DecodeJObjectSym)(void **, void *thiz, jobject obj); + static void *DecodeJObject(void *thiz, jobject obj) { + if (LIKELY(DecodeJObjectSym)) { + // Special call conversion + void *ret = nullptr; + DecodeJObjectSym(&ret, thiz, obj); + // Stack unbalanced since we faked return value as 1st param + __asm__("sub $0x4, %esp"); + return ret; + } else + return nullptr; + } +#else + CREATE_FUNC_SYMBOL_ENTRY(void *, DecodeJObject, void *thiz, jobject obj) { if (DecodeJObjectSym) return DecodeJObjectSym(thiz, obj); else - return ObjPtr{nullptr}; + return nullptr; } +#endif public: Thread(void *thiz) : HookedObject(thiz) {} @@ -24,7 +40,7 @@ namespace art { void *DecodeJObject(jobject obj) { if (thiz_ && DecodeJObjectSym) { - return DecodeJObject(thiz_, obj).data; + return DecodeJObject(thiz_, obj); } return nullptr; }