[vmkit-commits] [vmkit] r61862 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaThread.cpp JavaThread.h JavaUpcalls.cpp Jni.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Jan 7 08:51:56 PST 2009


Author: geoffray
Date: Wed Jan  7 10:51:55 2009
New Revision: 61862

URL: http://llvm.org/viewvc/llvm-project?rev=61862&view=rev
Log:
A JNI call to getCallingClass gets the first Java frame, not the second.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp?rev=61862&r1=61861&r2=61862&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp Wed Jan  7 10:51:55 2009
@@ -96,13 +96,14 @@
   addresses.push_back(cur);
 }
 
-UserClass* JavaThread::getCallingClass() {
+UserClass* JavaThread::getCallingClass(uint32 level) {
   // I'm a native function, so try to look at the last Java method.
   // First Get the caller of this method.
   void** addr = (void**)addresses.back();
 
   // Get the caller of the Java getCallingClass method.
-  addr = (void**)addr[0];
+  if (level)
+    addr = (void**)addr[0];
   void* ip = FRAME_IP(addr);
 
   JavaMethod* meth = getJVM()->IPToMethod<JavaMethod>(ip);
@@ -136,6 +137,7 @@
 void JavaThread::printJavaBacktrace() {
   Jnjvm* vm = getJVM();
   std::vector<void*> vals;
+  getJavaFrameContext(vals);
   for (std::vector<void*>::iterator i = vals.begin(), e = vals.end(); 
        i != e; ++i) {
     JavaMethod* meth = vm->IPToMethod<JavaMethod>(*i);

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h?rev=61862&r1=61861&r2=61862&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Wed Jan  7 10:51:55 2009
@@ -243,7 +243,7 @@
   /// getCallingClass - Get the Java method that called the last Java
   /// method on the stack.
   ///
-  UserClass* getCallingClass();
+  UserClass* getCallingClass(uint32 level);
     
   /// printBacktrace - Prints the backtrace of this thread.
   ///

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=61862&r1=61861&r2=61862&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Wed Jan  7 10:51:55 2009
@@ -256,7 +256,7 @@
   BEGIN_NATIVE_EXCEPTION(0)
 
   JavaThread* th = JavaThread::get();
-  UserClass* cl = th->getCallingClass();
+  UserClass* cl = th->getCallingClass(1);
   if (cl) res = cl->getClassDelegatee(th->getJVM());
 
   END_NATIVE_EXCEPTION
@@ -270,7 +270,7 @@
   
   BEGIN_NATIVE_EXCEPTION(0)
   JavaThread* th = JavaThread::get();
-  UserClass* cl = th->getCallingClass();
+  UserClass* cl = th->getCallingClass(1);
   res = cl->classLoader->getJavaClassLoader();  
   END_NATIVE_EXCEPTION
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp?rev=61862&r1=61861&r2=61862&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Wed Jan  7 10:51:55 2009
@@ -66,7 +66,7 @@
   JnjvmClassLoader* loader = 0;
   JavaThread* th = JavaThread::get();
   Jnjvm* vm = th->getJVM();
-  UserClass* currentClass = th->getCallingClass();
+  UserClass* currentClass = th->getCallingClass(0);
   if (currentClass) loader = currentClass->classLoader;
   else loader = vm->bootstrapLoader;
 





More information about the vmkit-commits mailing list