[vmkit-commits] [vmkit] r197867 - * Define a guard to explore the stack
Gael Thomas
gael.thomas at lip6.fr
Sat Dec 21 10:25:45 PST 2013
Author: gthomas
Date: Sat Dec 21 12:25:44 2013
New Revision: 197867
URL: http://llvm.org/viewvc/llvm-project?rev=197867&view=rev
Log:
* Define a guard to explore the stack
* Keep a ObjectReference from the loader instead of the thread
Modified:
vmkit/branches/mcjit/include/vmkit/thread.h
vmkit/branches/mcjit/lib/j3/vm/j3.cc
vmkit/branches/mcjit/lib/j3/vm/j3class.cc
vmkit/branches/mcjit/lib/j3/vm/j3options.cc
vmkit/branches/mcjit/lib/vmkit/compiler.cc
vmkit/branches/mcjit/lib/vmkit/thread.cc
Modified: vmkit/branches/mcjit/include/vmkit/thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/thread.h?rev=197867&r1=197866&r2=197867&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/thread.h (original)
+++ vmkit/branches/mcjit/include/vmkit/thread.h Sat Dec 21 12:25:44 2013
@@ -9,6 +9,7 @@ namespace vmkit {
class Thread : protected PermanentObject {
BumpAllocator* _allocator;
VMKit* _vm;
+ void* _baseFramePointer;
protected:
Thread(VMKit* vm, BumpAllocator* allocator);
@@ -16,6 +17,9 @@ namespace vmkit {
public:
static void destroy(Thread* thread);
+ void setBaseFramePointer(void* fp) { _baseFramePointer = fp; }
+ void* baseFramePointer() { return _baseFramePointer; }
+
VMKit* vm() { return _vm; }
BumpAllocator* allocator() { return _allocator; }
@@ -33,6 +37,7 @@ namespace vmkit {
bool next(uint32_t nbPop=1);
void* ip();
+ void* fp() { return framePointer; }
};
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=197867&r1=197866&r2=197867&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sat Dec 21 12:25:44 2013
@@ -13,6 +13,7 @@
#include "llvm/IR/DerivedTypes.h"
#include "vmkit/safepoint.h"
+#include "vmkit/system.h"
using namespace j3;
@@ -60,7 +61,11 @@ void J3::introspect() {
void J3::start(int argc, char** argv) {
_options.process(argc, argv);
- vmkitBootstrap(J3Thread::create(this), options()->selfBitCodePath);
+ J3Thread* thread = J3Thread::create(this);
+
+ thread->setBaseFramePointer(vmkit::System::current_fp());
+
+ vmkitBootstrap(thread, options()->selfBitCodePath);
introspect();
Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=197867&r1=197866&r2=197867&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Sat Dec 21 12:25:44 2013
@@ -141,18 +141,15 @@ J3ObjectType* J3ObjectType::nativeClass(
}
J3ObjectHandle* J3ObjectType::javaClass() {
- fprintf(stderr, "javaClass: %p %p %ls\n", _javaClass, this, name()->cStr());
if(!_javaClass) {
lock();
if(!_javaClass) {
J3ObjectHandle* prev = J3Thread::get()->tell();
_javaClass = J3ObjectHandle::doNewObject(loader()->vm()->classClass);
- loader()->fixedPoint()->syncPush(_javaClass);
+ _javaClass = loader()->fixedPoint()->syncPush(_javaClass);
J3Thread::get()->restore(prev);
_javaClass->setLong(loader()->vm()->classVMData, (int64_t)(uintptr_t)this);
- fprintf(stderr, " -> native class is %p\n", nativeClass(_javaClass));
loader()->vm()->classInit->invokeSpecial(_javaClass);
- fprintf(stderr, " %p -> native class is %p\n", _javaClass, nativeClass(_javaClass));
}
unlock();
}
Modified: vmkit/branches/mcjit/lib/j3/vm/j3options.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3options.cc?rev=197867&r1=197866&r2=197867&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3options.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3options.cc Sat Dec 21 12:25:44 2013
@@ -15,7 +15,7 @@ J3Options::J3Options() {
debugEnterIndent = 1;
- debugExecute = 2;
+ debugExecute = 0;
debugLoad = 0;
debugResolve = 0;
debugIniting = 0;
Modified: vmkit/branches/mcjit/lib/vmkit/compiler.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/compiler.cc?rev=197867&r1=197866&r2=197867&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/compiler.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/compiler.cc Sat Dec 21 12:25:44 2013
@@ -59,9 +59,13 @@ CompilationUnit::CompilationUnit(BumpAll
pm = new llvm::PassManager();
//pm->add(new llvm::TargetData(*ee->getTargetData()));
+#if 0
pm->add(llvm::createBasicAliasAnalysisPass());
+#endif
pm->add(llvm::createCFGSimplificationPass()); // Clean up disgusting code
+
+#if 0
pm->add(llvm::createPromoteMemoryToRegisterPass());// Kill useless allocas
pm->add(llvm::createInstructionCombiningPass()); // Cleanup for scalarrepl.
pm->add(llvm::createScalarReplAggregatesPass()); // Break up aggregate allocas
@@ -91,6 +95,7 @@ CompilationUnit::CompilationUnit(BumpAll
pm->add(llvm::createDeadStoreEliminationPass()); // Delete dead stores
pm->add(llvm::createAggressiveDCEPass()); // Delete dead instructions
pm->add(llvm::createCFGSimplificationPass()); // Merge & remove BBs
+#endif
}
CompilationUnit::~CompilationUnit() {
Modified: vmkit/branches/mcjit/lib/vmkit/thread.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/thread.cc?rev=197867&r1=197866&r2=197867&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/thread.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/thread.cc Sat Dec 21 12:25:44 2013
@@ -8,6 +8,7 @@ __thread Thread* Thread::_thread = 0;
Thread::Thread(VMKit* vm, BumpAllocator* allocator) {
_allocator = allocator;
_vm = vm;
+ _baseFramePointer = 0;
}
void Thread::destroy(Thread* thread) {
@@ -21,10 +22,10 @@ StackWalker::StackWalker(uint32_t initia
bool StackWalker::next(uint32_t nbPop) {
while(nbPop--) {
- void** next = (void**)System::fp_to_next_fp(framePointer);
- if(!next || !System::fp_to_next_fp(next))
+ fprintf(stderr, "%p and %p => %p\n", framePointer, Thread::get()->baseFramePointer(), ip());
+ if(framePointer == Thread::get()->baseFramePointer())
return 0;
- framePointer = next;
+ framePointer = (void**)System::fp_to_next_fp(framePointer);
}
return 1;
}
More information about the vmkit-commits
mailing list