[vmkit-commits] [vmkit] r198213 - Preserve the java thread handle directly in the J3Thread structure

Gael Thomas gael.thomas at lip6.fr
Mon Dec 30 08:05:59 PST 2013


Author: gthomas
Date: Mon Dec 30 10:05:59 2013
New Revision: 198213

URL: http://llvm.org/viewvc/llvm-project?rev=198213&view=rev
Log:
Preserve the java thread handle directly in the J3Thread structure

Modified:
    vmkit/branches/mcjit/include/j3/j3object.h
    vmkit/branches/mcjit/include/j3/j3thread.h
    vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc
    vmkit/branches/mcjit/lib/j3/vm/j3class.cc
    vmkit/branches/mcjit/lib/j3/vm/j3thread.cc

Modified: vmkit/branches/mcjit/include/j3/j3object.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3object.h?rev=198213&r1=198212&r2=198213&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3object.h (original)
+++ vmkit/branches/mcjit/include/j3/j3object.h Mon Dec 30 10:05:59 2013
@@ -151,6 +151,8 @@ namespace j3 {
 		J3VirtualTable*     vt()    { return obj()->vt(); }
 		uint32_t            arrayLength() { return array()->length(); }
 
+		J3ObjectHandle& operator=(const J3ObjectHandle& h) { _obj = h._obj; return *this; }
+
 		static J3ObjectHandle* allocate(J3VirtualTable* vt, size_t n);
 		static J3ObjectHandle* doNewObject(J3Class* cl);
 		static J3ObjectHandle* doNewArray(J3ArrayClass* cl, uint32_t length);

Modified: vmkit/branches/mcjit/include/j3/j3thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3thread.h?rev=198213&r1=198212&r2=198213&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3thread.h (original)
+++ vmkit/branches/mcjit/include/j3/j3thread.h Mon Dec 30 10:05:59 2013
@@ -24,7 +24,7 @@ namespace j3 {
 		JNIEnv                     _jniEnv;
 		J3LocalReferences          _localReferences;
 		J3ObjectHandle*            _pendingException;
-		J3ObjectHandle*            _javaThread;
+		J3ObjectHandle             _javaThread;
 
 		virtual void run();
 		static void doRun();
@@ -34,7 +34,7 @@ namespace j3 {
 		~J3Thread();
 
 		void               assocJavaThread(J3ObjectHandle* javaThread);
-		J3ObjectHandle*    javaThread() { return _javaThread; }
+		J3ObjectHandle*    javaThread() { return &_javaThread; }
 		static J3Thread*   nativeThread(J3ObjectHandle* handle);
 
 		J3Method*          getJavaCaller(uint32_t level=0);

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc?rev=198213&r1=198212&r2=198213&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3lib.cc Mon Dec 30 10:05:59 2013
@@ -43,7 +43,7 @@ void J3Lib::bootstrap(J3* vm) {
 																															L"java/lang/Thread",
 																															J3Cst::initName,
 																															L"(Ljava/lang/ThreadGroup;Ljava/lang/String;)V");
-	J3ObjectHandle* mainThread = vm->initialClassLoader->globalReferences()->add(J3ObjectHandle::doNewObject(threadInit->cl()));
+	J3ObjectHandle* mainThread = J3ObjectHandle::doNewObject(threadInit->cl());
 
 	J3Thread::get()->assocJavaThread(mainThread);
 	mainThread->setInteger(threadInit->cl()->findVirtualField(vm->names()->get(L"priority"), vm->typeInteger), 5);

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=198213&r1=198212&r2=198213&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Mon Dec 30 10:05:59 2013
@@ -158,7 +158,7 @@ J3ObjectType::J3ObjectType(J3ClassLoader
 }
 
 J3Method* J3ObjectType::findVirtualMethod(const vmkit::Name* name, const vmkit::Name* sign, bool error) {
-	J3::internalError(L"should not happen");
+	J3::internalError(L"should not happe: %ls::%ls\n", J3ObjectType::name()->cStr(), name->cStr());
 }
 
 J3Method* J3ObjectType::findStaticMethod(const vmkit::Name* name, const vmkit::Name* sign, bool error) {

Modified: vmkit/branches/mcjit/lib/j3/vm/j3thread.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3thread.cc?rev=198213&r1=198212&r2=198213&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3thread.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3thread.cc Mon Dec 30 10:05:59 2013
@@ -21,6 +21,7 @@ J3Thread::~J3Thread() {
 
 void J3Thread::doRun() {
 	J3ObjectHandle* handle = get()->javaThread();
+	fprintf(stderr, " *** target is %ls\n", handle->vt()->type()->name()->cStr());
 	get()->vm()->threadRun->invokeVirtual(handle);
 }
 
@@ -30,11 +31,11 @@ void J3Thread::run() {
 }
 
 void J3Thread::start(J3ObjectHandle* handle) {
+	fprintf(stderr, " start %ls\n", handle->vt()->type()->name()->cStr());
 	vmkit::BumpAllocator* allocator = vmkit::BumpAllocator::create();
 	J3Thread* thread = new J3Thread(get()->vm());
 	thread->assocJavaThread(handle);
 	thread->Thread::start();
-	while(1);
 }
 
 J3Method* J3Thread::getJavaCaller(uint32_t level) {
@@ -67,8 +68,8 @@ J3Thread* J3Thread::nativeThread(J3Objec
 }
 
 void J3Thread::assocJavaThread(J3ObjectHandle* javaThread) {
-	_javaThread = javaThread;
-	_javaThread->setLong(vm()->threadVMData, (int64_t)(uintptr_t)this);
+	_javaThread = *javaThread;
+	_javaThread.setLong(vm()->threadVMData, (int64_t)(uintptr_t)this);
 }
 
 J3ObjectHandle* J3Thread::push(J3ObjectHandle* handle) { 





More information about the vmkit-commits mailing list