[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