[vmkit-commits] [vmkit] r56146 - /vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Fri Sep 12 06:42:03 PDT 2008


Author: geoffray
Date: Fri Sep 12 08:42:01 2008
New Revision: 56146

URL: http://llvm.org/viewvc/llvm-project?rev=56146&view=rev
Log:
Implement getCallingClass for isolate environment.


Modified:
    vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp

Modified: vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp?rev=56146&r1=56145&r2=56146&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp Fri Sep 12 08:42:01 2008
@@ -104,13 +104,29 @@
   return 0;
 }
 #else
-UserClass* JavaJIT::getCallingClassWalker() {
-  fprintf(stderr, "implement me");
-  abort();
-}
 UserClass* JavaJIT::getCallingClass() {
-  fprintf(stderr, "implement me");
-  abort();
+  unsigned int* top;
+  register unsigned int  **cur = ⊤
+  register unsigned int  **max = (unsigned int**)mvm::Thread::get()->baseSP;
+    
+  void* obj = 0;
+  int i = 0;
+    
+  for(; cur<max; cur++) {
+    obj = (void*)(*cur);
+    obj = Collector::begOf(obj);
+    if (obj && ((mvm::Object*)obj)->getVirtualTable() == UserConstantPool::VT) {
+      if (i == 1) {
+        return ((UserConstantPool*)obj)->getClass();
+      }
+      ++i;
+    }
+  }
+  return 0;
+}
+
+UserClass* JavaJIT::getCallingClassWalker() {
+  return getCallingClass();
 }
 #endif
 





More information about the vmkit-commits mailing list