[vmkit-commits] [vmkit] r86374 - in /vmkit/trunk: include/mvm/GC/GC.h include/mvm/MethodInfo.h include/mvm/VirtualMachine.h lib/JnJVM/VMCore/JavaClass.cpp lib/JnJVM/VMCore/JavaClass.h lib/JnJVM/VMCore/JavaThread.cpp lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/Mvm/Compiler/JIT.cpp lib/Mvm/Runtime/MethodInfo.cpp lib/Mvm/Runtime/Object.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sat Nov 7 06:34:51 PST 2009
Author: geoffray
Date: Sat Nov 7 08:34:50 2009
New Revision: 86374
URL: http://llvm.org/viewvc/llvm-project?rev=86374&view=rev
Log:
Use the MethodInfo class to walk the stack.
Modified:
vmkit/trunk/include/mvm/GC/GC.h
vmkit/trunk/include/mvm/MethodInfo.h
vmkit/trunk/include/mvm/VirtualMachine.h
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp
vmkit/trunk/lib/Mvm/Runtime/Object.cpp
Modified: vmkit/trunk/include/mvm/GC/GC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/GC/GC.h?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/GC/GC.h (original)
+++ vmkit/trunk/include/mvm/GC/GC.h Sat Nov 7 08:34:50 2009
@@ -11,18 +11,9 @@
#ifndef MVM_GC_H
#define MVM_GC_H
-#include <dlfcn.h>
#include <stdint.h>
#include <map>
-
-#if defined(__MACH__)
-#define SELF_HANDLE RTLD_DEFAULT
-#else
-#define SELF_HANDLE 0
-#endif
-
-
struct VirtualTable {
uintptr_t destructor;
uintptr_t operatorDelete;
@@ -61,38 +52,6 @@
}
};
-class CamlFrame {
-public:
- void* ReturnAddress;
- uint16_t FrameSize;
- uint16_t NumLiveOffsets;
- int16_t LiveOffsets[1];
-};
-
-class StaticGCMap {
-public:
- std::map<void*, void*> GCInfos;
-
- StaticGCMap() {
- CamlFrame* currentFrame =
- (CamlFrame*)dlsym(SELF_HANDLE, "camlVmkitoptimized__frametable");
-
- if (currentFrame) {
- while (true) {
-
- if (!currentFrame->ReturnAddress) break;
- GCInfos.insert(std::make_pair(currentFrame->ReturnAddress,
- currentFrame));
-
- currentFrame = (CamlFrame*) ((char*)currentFrame +
- (currentFrame->NumLiveOffsets % 2) * sizeof(uint16_t) +
- currentFrame->NumLiveOffsets * sizeof(uint16_t) +
- sizeof(void*) + sizeof(uint16_t) + sizeof(uint16_t));
- }
- }
- }
-};
-
namespace mvm {
class Thread;
Modified: vmkit/trunk/include/mvm/MethodInfo.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/MethodInfo.h?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/MethodInfo.h (original)
+++ vmkit/trunk/include/mvm/MethodInfo.h Sat Nov 7 08:34:50 2009
@@ -32,18 +32,27 @@
}
};
+class CamlFrame {
+public:
+ void* ReturnAddress;
+ uint16_t FrameSize;
+ uint16_t NumLiveOffsets;
+ int16_t LiveOffsets[1];
+};
+
class CamlMethodInfo : public MethodInfo {
CamlFrame* CF;
public:
virtual void scan(void* TL, void* ip, void* addr);
- CamlMethodInfo(CamlFrame* C) : CF(C) {}
+ CamlMethodInfo(CamlFrame* C, void* ip);
};
class StaticCamlMethodInfo : public CamlMethodInfo {
const char* name;
public:
virtual void print(void* ip, void* addr);
- StaticCamlMethodInfo(CamlFrame* CF, const char* n) : CamlMethodInfo(CF) {
+ StaticCamlMethodInfo(CamlFrame* CF, void* ip, const char* n) :
+ CamlMethodInfo(CF, ip) {
name = n;
}
};
Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Sat Nov 7 08:34:50 2009
@@ -95,6 +95,13 @@
};
+class SharedStartFunctionMap : public StartFunctionMap {
+public:
+ static BumpPtrAllocator StaticAllocator;
+ SharedStartFunctionMap();
+};
+
+
// Same values than JikesRVM
#define INITIAL_QUEUE_SIZE 256
@@ -263,8 +270,6 @@
static CompilationUnit* initialiseCLIVM();
static VirtualMachine* createCLIVM(CompilationUnit* C = 0);
- static StaticGCMap GCMap;
-
private:
/// WeakReferencesQueue - The queue of weak references.
///
@@ -481,6 +486,7 @@
StartEndFunctionMap RuntimeFunctions;
static StartEndFunctionMap SharedRuntimeFunctions;
StartFunctionMap StaticFunctions;
+ static SharedStartFunctionMap SharedStaticFunctions;
MethodInfo* IPToMethodInfo(void* ip);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Sat Nov 7 08:34:50 2009
@@ -335,7 +335,7 @@
Jnjvm* vm = JavaThread::get()->getJVM();
JavaStaticMethodInfo* MI =
new (classDef->classLoader->allocator, "JavaStaticMethodInfo")
- JavaStaticMethodInfo(0, this);
+ JavaStaticMethodInfo(0, code, this);
vm->StaticFunctions.addMethodInfo(MI, code);
classDef->classLoader->getCompiler()->setMethod(this, ptr, name);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Sat Nov 7 08:34:50 2009
@@ -958,8 +958,8 @@
public:
virtual void print(void* ip, void* addr);
- JavaStaticMethodInfo(CamlFrame* CF, JavaMethod* M) :
- mvm::CamlMethodInfo(CF) {
+ JavaStaticMethodInfo(mvm::CamlFrame* CF, void* ip, JavaMethod* M) :
+ mvm::CamlMethodInfo(CF, ip) {
meth = M;
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp Sat Nov 7 08:34:50 2009
@@ -306,27 +306,11 @@
for (std::vector<void*>::iterator i = vals.begin(), e = vals.end();
i != e; ++i) {
mvm::MethodInfo* MI = vm->IPToMethodInfo(*i);
- JavaMethod* meth = (JavaMethod*)MI->getMetaInfo();
- assert(meth && "Wrong stack");
- fprintf(stderr, "; %p in %s.%s\n", *i,
- UTF8Buffer(meth->classDef->name).cString(),
- UTF8Buffer(meth->name).cString());
+ MI->print(*i, 0);
}
}
-#include <dlfcn.h>
-
-static void printFunctionInfo(Jnjvm* vm, void* ip) {
- Dl_info info;
- int res = dladdr(ip, &info);
- if (res != 0) {
- fprintf(stderr, "; %p in %s\n", ip, info.dli_sname);
- } else {
- fprintf(stderr, "; %p in Unknown method\n", ip);
- }
-}
-
void JavaThread::printBacktrace() {
std::vector<void*>::iterator it = addresses.end();
Jnjvm* vm = getJVM();
@@ -347,7 +331,8 @@
// Until we hit the last Java frame.
do {
void* ip = FRAME_IP(addr);
- printFunctionInfo(vm, ip);
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->print(ip, addr);
oldAddr = addr;
addr = (void**)addr[0];
} while (oldAddr != (void**)*it && addr != (void**)*it);
@@ -362,7 +347,8 @@
--it;
if (*it == 0) {
void* ip = FRAME_IP(addr);
- printFunctionInfo(vm, ip);
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->print(ip, addr);
addr = (void**)addr[0];
continue;
}
@@ -372,14 +358,8 @@
void* ip = FRAME_IP(addr);
bool isStub = ((unsigned char*)ip)[0] == 0xCE;
if (isStub) ip = addr[2];
- mvm::MethodInfo* MI = getJVM()->IPToMethodInfo(ip);
- JavaMethod* meth = (JavaMethod*)MI->getMetaInfo();
- assert(meth && "Wrong stack");
- fprintf(stderr, "; %p in %s.%s", ip,
- UTF8Buffer(meth->classDef->name).cString(),
- UTF8Buffer(meth->name).cString());
- if (isStub) fprintf(stderr, " (from stub)");
- fprintf(stderr, "\n");
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->print(ip, addr);
addr = (void**)addr[0];
// End walking the stack when we cross a native -> Java call. Here
// the iterator points to a native -> Java call. We dereference addr twice
@@ -389,7 +369,8 @@
while (addr < baseSP && addr < addr[0]) {
void* ip = FRAME_IP(addr);
- printFunctionInfo(vm, ip);
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->print(ip, addr);
addr = (void**)addr[0];
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Sat Nov 7 08:34:50 2009
@@ -1078,7 +1078,7 @@
JavaMethod& meth = C->virtualMethods[i];
if (!isAbstract(meth.access) && meth.code) {
JavaStaticMethodInfo* MI = new (allocator, "JavaStaticMethodInfo")
- JavaStaticMethodInfo(0, &meth);
+ JavaStaticMethodInfo(0, meth.code, &meth);
vm->StaticFunctions.addMethodInfo(MI, meth.code);
M->setMethod(&meth, meth.code, "");
}
@@ -1088,7 +1088,7 @@
JavaMethod& meth = C->staticMethods[i];
if (!isAbstract(meth.access) && meth.code) {
JavaStaticMethodInfo* MI = new (allocator, "JavaStaticMethodInfo")
- JavaStaticMethodInfo(0, &meth);
+ JavaStaticMethodInfo(0, meth.code, &meth);
vm->StaticFunctions.addMethodInfo(MI, meth.code);
M->setMethod(&meth, meth.code, "");
}
Modified: vmkit/trunk/lib/Mvm/Compiler/JIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Compiler/JIT.cpp?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Compiler/JIT.cpp (original)
+++ vmkit/trunk/lib/Mvm/Compiler/JIT.cpp Sat Nov 7 08:34:50 2009
@@ -561,15 +561,8 @@
// Until we hit the last Java frame.
do {
void* ip = FRAME_IP(addr);
- CamlFrame* CF = (CamlFrame*)VirtualMachine::GCMap.GCInfos[ip];
- if (CF) {
- //char* spaddr = (char*)addr + CF->FrameSize + sizeof(void*);
- uintptr_t spaddr = (uintptr_t)addr[0];
- for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
- }
- }
-
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->scan(0, ip, addr);
oldAddr = addr;
addr = (void**)addr[0];
} while (oldAddr != (void**)*it && addr != (void**)*it);
@@ -584,14 +577,8 @@
--it;
if (*it == 0) {
void* ip = FRAME_IP(addr);
- CamlFrame* CF = (CamlFrame*)VirtualMachine::GCMap.GCInfos[ip];
- if (CF) {
- //char* spaddr = (char*)addr + CF->FrameSize + sizeof(void*);
- uintptr_t spaddr = (uintptr_t)addr[0];
- for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
- }
- }
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->scan(0, ip, addr);
addr = (void**)addr[0];
continue;
}
@@ -601,30 +588,8 @@
void* ip = FRAME_IP(addr);
bool isStub = ((unsigned char*)ip)[0] == 0xCE;
if (isStub) ip = addr[2];
- CamlFrame* CF = (CamlFrame*)VirtualMachine::GCMap.GCInfos[ip];
- if (CF) {
- //uintptr_t spaddr = (uintptr_t)addr + CF->FrameSize + sizeof(void*);
- uintptr_t spaddr = (uintptr_t)addr[0];
- for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
- }
- } else {
- llvm::GCFunctionInfo* GFI = IPToGCFunctionInfo(vm, ip);
-
- if (GFI) {
- DEBUG(llvm::errs() << GFI->getFunction().getName() << '\n');
- // All safe points have the same informations currently in LLVM.
- llvm::GCFunctionInfo::iterator J = GFI->begin();
- //uintptr_t spaddr = (uintptr_t)addr + GFI->getFrameSize() + sizeof(void*);
- uintptr_t spaddr = (uintptr_t)addr[0];
- for (llvm::GCFunctionInfo::live_iterator K = GFI->live_begin(J),
- KE = GFI->live_end(J); K != KE; ++K) {
- intptr_t obj = *(intptr_t*)(spaddr + K->StackOffset);
- // Verify that obj does not come from a JSR bytecode.
- if (!(obj & 1)) Collector::scanObject((void**)(spaddr + K->StackOffset));
- }
- }
- }
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->scan(0, ip, addr);
addr = (void**)addr[0];
// End walking the stack when we cross a native -> Java call. Here
@@ -635,14 +600,8 @@
while (addr < th->baseSP && addr < addr[0]) {
void* ip = FRAME_IP(addr);
- CamlFrame* CF = (CamlFrame*)VirtualMachine::GCMap.GCInfos[ip];
- if (CF) {
- //uintptr_t spaddr = (uintptr_t)addr + CF->FrameSize + sizeof(void*);
- uintptr_t spaddr = (uintptr_t)addr[0];
- for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
- }
- }
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->scan(0, ip, addr);
addr = (void**)addr[0];
}
Modified: vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp Sat Nov 7 08:34:50 2009
@@ -13,13 +13,21 @@
#include <dlfcn.h>
+#if defined(__MACH__)
+#define SELF_HANDLE RTLD_DEFAULT
+#else
+#define SELF_HANDLE 0
+#endif
+
using namespace mvm;
void CamlMethodInfo::scan(void* TL, void* ip, void* addr) {
- //uintptr_t spaddr = (uintptr_t)addr + CF->FrameSize + sizeof(void*);
- uintptr_t spaddr = ((uintptr_t*)addr)[0];
- for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
+ if (CF) {
+ //uintptr_t spaddr = (uintptr_t)addr + CF->FrameSize + sizeof(void*);
+ uintptr_t spaddr = ((uintptr_t*)addr)[0];
+ for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
+ Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
+ }
}
}
@@ -63,6 +71,10 @@
// on something that belongs to our code.
Functions.insert(std::make_pair(ip, MI));
}
+ } else {
+ // The method is jitted, and no-one has intercepted its compilation.
+ // Just return the Default MethodInfo object.
+ MI = &DefaultMethodInfo::DM;
}
} else {
MI = I->second;
@@ -79,5 +91,64 @@
if (MI) return MI;
MI = StaticFunctions.IPToMethodInfo(ip);
+ if (MI != &DefaultMethodInfo::DM) return MI;
+
+ MI = SharedStaticFunctions.IPToMethodInfo(ip);
return MI;
}
+
+
+BumpPtrAllocator SharedStartFunctionMap::StaticAllocator;
+
+SharedStartFunctionMap::SharedStartFunctionMap() {
+ CamlFrame* currentFrame =
+ (CamlFrame*)dlsym(SELF_HANDLE, "camlVmkitoptimized__frametable");
+
+ Dl_info info;
+ void* previousPtr = 0;
+ const char* previousName = 0;
+ CamlFrame* previousFrame = currentFrame;
+
+ if (currentFrame) {
+ while (true) {
+ if (!currentFrame->ReturnAddress) break;
+ int res = dladdr(currentFrame->ReturnAddress, &info);
+ if (res) {
+ if (previousPtr) {
+ if (info.dli_saddr == previousPtr) {
+ previousFrame = currentFrame;
+ } else {
+ StaticCamlMethodInfo* MI =
+ new(StaticAllocator, "StaticCamlMethodInfo")
+ StaticCamlMethodInfo(previousFrame, previousPtr, previousName);
+ previousName = info.dli_sname;
+ previousFrame = currentFrame;
+ previousPtr = info.dli_saddr;
+ addMethodInfo(MI, previousPtr);
+ }
+ } else {
+ previousName = info.dli_sname;
+ previousFrame = currentFrame;
+ }
+ }
+
+ currentFrame = (CamlFrame*) ((char*)currentFrame +
+ (currentFrame->NumLiveOffsets % 2) * sizeof(uint16_t) +
+ currentFrame->NumLiveOffsets * sizeof(uint16_t) +
+ sizeof(void*) + sizeof(uint16_t) + sizeof(uint16_t));
+ }
+ }
+}
+
+CamlMethodInfo::CamlMethodInfo(CamlFrame* C, void* ip) {
+ if (!C) {
+ MethodInfo* MI = VirtualMachine::SharedStaticFunctions.IPToMethodInfo(ip);
+ if (MI) {
+ C = ((CamlMethodInfo*)MI)->CF;
+ }
+ }
+ CF = C;
+}
+
+StartEndFunctionMap VirtualMachine::SharedRuntimeFunctions;
+SharedStartFunctionMap VirtualMachine::SharedStaticFunctions;
Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=86374&r1=86373&r2=86374&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Sat Nov 7 08:34:50 2009
@@ -261,9 +261,8 @@
return free(obj);
}
-StaticGCMap VirtualMachine::GCMap;
-
void CamlStackScanner::scanStack(mvm::Thread* th) {
+ VirtualMachine* vm = th->MyVM;
std::vector<void*>::iterator it = th->addresses.end();
void** addr = mvm::Thread::get() == th ? (void**)FRAME_PTR() :
@@ -277,14 +276,8 @@
// Until we hit the last Java frame.
do {
void* ip = FRAME_IP(addr);
- CamlFrame* CF = (CamlFrame*)VirtualMachine::GCMap.GCInfos[ip];
- if (CF) {
- //char* spaddr = (char*)addr + CF->FrameSize + sizeof(void*);
- uintptr_t spaddr = (uintptr_t)addr[0];
- for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
- }
- }
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->scan(0, ip, addr);
oldAddr = addr;
addr = (void**)addr[0];
} while (oldAddr != (void**)*it && addr != (void**)*it);
@@ -299,14 +292,8 @@
--it;
if (*it == 0) {
void* ip = FRAME_IP(addr);
- CamlFrame* CF = (CamlFrame*)VirtualMachine::GCMap.GCInfos[ip];
- if (CF) {
- //char* spaddr = (char*)addr + CF->FrameSize + sizeof(void*);
- uintptr_t spaddr = (uintptr_t)addr[0];
- for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
- }
- }
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->scan(0, ip, addr);
addr = (void**)addr[0];
continue;
}
@@ -316,14 +303,8 @@
void* ip = FRAME_IP(addr);
bool isStub = ((unsigned char*)ip)[0] == 0xCE;
if (isStub) ip = addr[2];
- CamlFrame* CF = (CamlFrame*)VirtualMachine::GCMap.GCInfos[ip];
- if (CF) {
- //uintptr_t spaddr = (uintptr_t)addr + CF->FrameSize + sizeof(void*);
- uintptr_t spaddr = (uintptr_t)addr[0];
- for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
- }
- }
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->scan(0, ip, addr);
addr = (void**)addr[0];
// End walking the stack when we cross a native -> Java call. Here
@@ -334,14 +315,8 @@
while (addr < th->baseSP && addr < addr[0]) {
void* ip = FRAME_IP(addr);
- CamlFrame* CF = (CamlFrame*)VirtualMachine::GCMap.GCInfos[ip];
- if (CF) {
- //uintptr_t spaddr = (uintptr_t)addr + CF->FrameSize + sizeof(void*);
- uintptr_t spaddr = (uintptr_t)addr[0];
- for (uint16 i = 0; i < CF->NumLiveOffsets; ++i) {
- Collector::scanObject((void**)(spaddr + CF->LiveOffsets[i]));
- }
- }
+ mvm::MethodInfo* MI = vm->IPToMethodInfo(ip);
+ MI->scan(0, ip, addr);
addr = (void**)addr[0];
}
}
@@ -359,5 +334,3 @@
for(; cur<max; cur++) Collector::scanObject((void**)cur);
}
}
-
-StartEndFunctionMap VirtualMachine::SharedRuntimeFunctions;
More information about the vmkit-commits
mailing list