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 e407f85f..4526fcc5 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,29 +6,13 @@ namespace art { class Thread : public edxp::HookedObject { - -#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) { + struct ObjPtr { void *data; ObjPtr(ObjPtr const &) = delete; } ; + CREATE_FUNC_SYMBOL_ENTRY(ObjPtr, DecodeJObject, void *thiz, jobject obj) { if (DecodeJObjectSym) return DecodeJObjectSym(thiz, obj); else - return nullptr; + return ObjPtr{nullptr}; } -#endif public: Thread(void *thiz) : HookedObject(thiz) {} @@ -40,7 +24,7 @@ namespace art { void *DecodeJObject(jobject obj) { if (thiz_ && DecodeJObjectSym) { - return DecodeJObject(thiz_, obj); + return DecodeJObject(thiz_, obj).data; } return nullptr; }