[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