[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