Revert "Let compiler handle ABI"

This reverts commit ebe9f19dae.
This commit is contained in:
kotori0 2021-01-04 21:02:16 +08:00
parent ebe9f19dae
commit 30e9eadcf9
No known key found for this signature in database
GPG Key ID: 3FEE57ED0385A6B2
1 changed files with 20 additions and 4 deletions

View File

@ -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;
}