[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