[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