[vmkit-commits] [vmkit] r86475 - in /vmkit/trunk/lib/JnJVM: Classpath/JavaUpcalls.cpp VMCore/JavaRuntimeJIT.cpp VMCore/JavaThread.cpp VMCore/JavaThread.h VMCore/Jni.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sun Nov 8 08:50:26 PST 2009
Author: geoffray
Date: Sun Nov 8 10:50:26 2009
New Revision: 86475
URL: http://llvm.org/viewvc/llvm-project?rev=86475&view=rev
Log:
Continue using the StackWalker class instead of using
the addresses field.
Modified:
vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
Modified: vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp?rev=86475&r1=86474&r2=86475&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/JavaUpcalls.cpp Sun Nov 8 10:50:26 2009
@@ -403,7 +403,7 @@
BEGIN_NATIVE_EXCEPTION(0)
JavaThread* th = JavaThread::get();
- UserClass* cl = th->getCallingClass(1);
+ UserClass* cl = th->getCallingClassLevel(2);
if (cl) res = cl->getClassDelegatee(th->getJVM());
END_NATIVE_EXCEPTION
@@ -419,7 +419,7 @@
BEGIN_NATIVE_EXCEPTION(0)
JavaThread* th = JavaThread::get();
- UserClass* cl = th->getCallingClass(1);
+ UserClass* cl = th->getCallingClassLevel(2);
res = cl->classLoader->getJavaClassLoader();
END_NATIVE_EXCEPTION
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=86475&r1=86474&r2=86475&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Sun Nov 8 10:50:26 2009
@@ -627,7 +627,7 @@
BEGIN_NATIVE_EXCEPTION(1)
- JavaMethod* meth = th->getCallingMethod();
+ JavaMethod* meth = th->getCallingMethodLevel(0);
exc = th->getJVM()->CreateUnsatisfiedLinkError(meth);
END_NATIVE_EXCEPTION
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp?rev=86475&r1=86474&r2=86475&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp Sun Nov 8 10:50:26 2009
@@ -111,44 +111,7 @@
}
-UserClass* JavaThread::getCallingClass(uint32 level) {
- // I'm a native function, so try to look at the last Java method.
- // First take the getCallingClass address.
- void** addr = (void**)addresses.back();
- // Caller of getCallingClass.
- addr = (void**)addr[0];
-
- // Get the caller of the caller of the Java getCallingClass method.
- if (level)
- addr = (void**)addr[0];
- void* ip = FRAME_IP(addr);
-
- mvm::MethodInfo* MI = getJVM()->IPToMethodInfo(ip);
- JavaMethod* meth = (JavaMethod*)MI->getMetaInfo();
-
- return meth->classDef;
-}
-
-JavaMethod* JavaThread::getCallingMethod() {
- mvm::StackWalker Walker(this);
-
- while (mvm::MethodInfo* MI = Walker.get()) {
- if (MI->MethodType == 1) {
- JavaMethod* meth = (JavaMethod*)MI->getMetaInfo();
- return meth;
- }
- ++Walker;
- }
- return 0;
-}
-
-UserClass* JavaThread::getCallingClassFromJNI() {
- JavaMethod* meth = getCallingMethod();
- if (meth) return meth->classDef;
- return 0;
-}
-
void JavaThread::getJavaFrameContext(std::vector<void*>& context) {
std::vector<void*>::iterator it = addresses.end();
@@ -185,15 +148,14 @@
}
}
-UserClass* JavaThread::getCallingClassLevel(uint32 level) {
+JavaMethod* JavaThread::getCallingMethodLevel(uint32 level) {
mvm::StackWalker Walker(this);
uint32 index = 0;
while (mvm::MethodInfo* MI = Walker.get()) {
if (MI->MethodType == 1) {
if (index == level) {
- JavaMethod* meth = (JavaMethod*)MI->getMetaInfo();
- return meth->classDef;
+ return (JavaMethod*)MI->getMetaInfo();
}
++index;
}
@@ -202,6 +164,12 @@
return 0;
}
+UserClass* JavaThread::getCallingClassLevel(uint32 level) {
+ JavaMethod* meth = getCallingMethodLevel(level);
+ if (meth) return meth->classDef;
+ return 0;
+}
+
JavaObject* JavaThread::getNonNullClassLoader() {
JavaObject* obj = 0;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h?rev=86475&r1=86474&r2=86475&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.h Sun Nov 8 10:50:26 2009
@@ -268,20 +268,11 @@
bool isInNative() {
return !(addresses.size() % 2);
}
- /// getCallingClass - Get the Java class that called the last Java
- /// method that called the Java getCallingClass method.
- ///
- UserClass* getCallingClass(uint32 level);
-
- /// getCallingClassFromJNI - Get the Java class that called the last Java
- /// method that called the FindClass JNI function.
- ///
- UserClass* getCallingClassFromJNI();
- /// getCallingMethod - Get the Java method that called the last Java
- /// method on the stack.
+ /// getCallingMethod - Get the Java method in the stack at the specified
+ /// level.
///
- JavaMethod* getCallingMethod();
+ JavaMethod* getCallingMethodLevel(uint32 level);
/// getCallingClassLevel - Get the Java method in the stack at the
/// specified level.
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp?rev=86475&r1=86474&r2=86475&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Sun Nov 8 10:50:26 2009
@@ -67,7 +67,7 @@
JnjvmClassLoader* loader = 0;
JavaThread* th = JavaThread::get();
Jnjvm* vm = th->getJVM();
- UserClass* currentClass = th->getCallingClassFromJNI();
+ UserClass* currentClass = th->getCallingClassLevel(0);
if (currentClass) loader = currentClass->classLoader;
else loader = vm->appClassLoader;
More information about the vmkit-commits
mailing list