[vmkit-commits] [vmkit] r71154 - /vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu May 7 05:34:07 PDT 2009
Author: geoffray
Date: Thu May 7 07:33:59 2009
New Revision: 71154
URL: http://llvm.org/viewvc/llvm-project?rev=71154&view=rev
Log:
Bugfix when returning from native: never bypass the EXCEPTION
macros with a direct return.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=71154&r1=71153&r2=71154&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Thu May 7 07:33:59 2009
@@ -107,21 +107,22 @@
UserConstantPool* ctpInfo = caller->getConstantPool();
if (ctpInfo->ctpRes[index]) {
- return ctpInfo->ctpRes[index];
- }
+ res = ctpInfo->ctpRes[index];
+ } else {
- UserCommonClass* cl = 0;
- const UTF8* utf8 = 0;
- Typedef* sign = 0;
+ UserCommonClass* cl = 0;
+ const UTF8* utf8 = 0;
+ Typedef* sign = 0;
- ctpInfo->resolveField(index, cl, utf8, sign);
+ ctpInfo->resolveField(index, cl, utf8, sign);
- UserClass* lookup = cl->isArray() ? cl->super : cl->asClass();
- JavaField* field = lookup->lookupField(utf8, sign->keyName, false, true, 0);
+ UserClass* lookup = cl->isArray() ? cl->super : cl->asClass();
+ JavaField* field = lookup->lookupField(utf8, sign->keyName, false, true, 0);
- ctpInfo->ctpRes[index] = (void*)field->ptrOffset;
+ ctpInfo->ctpRes[index] = (void*)field->ptrOffset;
- res = (void*)field->ptrOffset;
+ res = (void*)field->ptrOffset;
+ }
END_NATIVE_EXCEPTION
@@ -143,29 +144,30 @@
UserConstantPool* ctpInfo = caller->getConstantPool();
if (ctpInfo->ctpRes[index]) {
- return ctpInfo->ctpRes[index];
- }
+ res = ctpInfo->ctpRes[index];
+ } else {
- UserCommonClass* cl = 0;
- UserClass* fieldCl = 0;
- const UTF8* utf8 = 0;
- Typedef* sign = 0;
+ UserCommonClass* cl = 0;
+ UserClass* fieldCl = 0;
+ const UTF8* utf8 = 0;
+ Typedef* sign = 0;
- ctpInfo->resolveField(index, cl, utf8, sign);
+ ctpInfo->resolveField(index, cl, utf8, sign);
- assert(cl->asClass() && "Lookup a field of something not an array");
- JavaField* field = cl->asClass()->lookupField(utf8, sign->keyName, true,
- true, &fieldCl);
-
- fieldCl->initialiseClass(JavaThread::get()->getJVM());
- void* obj = ((UserClass*)fieldCl)->getStaticInstance();
+ assert(cl->asClass() && "Lookup a field of something not an array");
+ JavaField* field = cl->asClass()->lookupField(utf8, sign->keyName, true,
+ true, &fieldCl);
+
+ fieldCl->initialiseClass(JavaThread::get()->getJVM());
+ void* obj = ((UserClass*)fieldCl)->getStaticInstance();
- assert(obj && "No static instance in static field lookup");
+ assert(obj && "No static instance in static field lookup");
- void* ptr = (void*)((uint64)obj + field->ptrOffset);
- ctpInfo->ctpRes[index] = ptr;
+ void* ptr = (void*)((uint64)obj + field->ptrOffset);
+ ctpInfo->ctpRes[index] = ptr;
- res = ptr;
+ res = ptr;
+ }
END_NATIVE_EXCEPTION
More information about the vmkit-commits
mailing list