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

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Sep 15 22:40:42 PDT 2008


Author: geoffray
Date: Tue Sep 16 00:40:42 2008
New Revision: 56239

URL: http://llvm.org/viewvc/llvm-project?rev=56239&view=rev
Log:
Fix getting the backtrace in an 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=56239&r1=56238&r2=56239&view=diff

==============================================================================
--- vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp (original)
+++ vmkit/branches/isolate/lib/JnJVM/VMCore/JavaBacktrace.cpp Tue Sep 16 00:40:42 2008
@@ -104,22 +104,44 @@
   return 0;
 }
 #else
+
 UserClass* JavaJIT::getCallingClass() {
+  Class* res = 0;
+
+  int* ips[10];
+  int real_size = mvm::jit::getBacktrace((void**)(void*)ips, 10);
+  int n = 0;
+  int i = 0;
+  while (n < real_size) {
+    mvm::Code* code = mvm::jit::getCodeFromPointer(ips[n++]);
+    if (code) {
+      JavaMethod* meth = (JavaMethod*)code->getMetaInfo();
+      if (meth) {
+        if (i == 1) {
+          res = meth->classDef;
+          break;
+        } else {
+          ++i;
+        }
+      }
+    }
+  }
+
+  if (!res) return 0;
+
   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);
+    void* obj = (void*)(*cur);
     obj = Collector::begOf(obj);
     if (obj && ((mvm::Object*)obj)->getVirtualTable() == UserConstantPool::VT) {
-      if (i == 4) {
-        return ((UserConstantPool*)obj)->getClass();
+      UserConstantPool* ctp = (UserConstantPool*)obj;
+      UserClass* cl = ctp->getClass();
+      if (cl->classDef == res) {
+        return cl;
       }
-      ++i;
     }
   }
   return 0;





More information about the vmkit-commits mailing list