[vmkit-commits] [vmkit] r120941 - in /vmkit/branches/multi-vm: include/mvm/Threads/Thread.h lib/J3/VMCore/JavaThread.cpp lib/J3/VMCore/JavaThread.h lib/J3/VMCore/Jnjvm.cpp lib/Mvm/CommonThread/VMThreadData.cpp lib/Mvm/CommonThread/ctthread.cpp
Gael Thomas
gael.thomas at lip6.fr
Sun Dec 5 07:45:20 PST 2010
Author: gthomas
Date: Sun Dec 5 09:45:20 2010
New Revision: 120941
URL: http://llvm.org/viewvc/llvm-project?rev=120941&view=rev
Log:
attach a vm specific data by changing the active vm
Modified:
vmkit/branches/multi-vm/include/mvm/Threads/Thread.h
vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp
vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h
vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp
vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.cpp
Modified: vmkit/branches/multi-vm/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/include/mvm/Threads/Thread.h?rev=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/include/mvm/Threads/Thread.h (original)
+++ vmkit/branches/multi-vm/include/mvm/Threads/Thread.h Sun Dec 5 09:45:20 2010
@@ -129,26 +129,25 @@
class ExceptionBuffer;
-class MutatorThread;
+class Thread;
class VMKit;
// WARNING: if you modify this class, you must also change mvm-runtime.ll
class VMThreadData {
public:
/// mut - The associated thread mutator
- MutatorThread* mut;
+ Thread* mut;
+
/// vm - The associated virtual machine
VirtualMachine* vm;
- VMThreadData(MutatorThread* m, VirtualMachine *v) {
+ VMThreadData(VirtualMachine *v, Thread* m) {
this->mut = m;
this->vm = v;
}
virtual void tracer(uintptr_t closure) = 0;
- void attach();
-
virtual ~VMThreadData() {} // force the construction of a VT
};
@@ -381,6 +380,10 @@
/// must be protected by rendezvous.threadLock
///
void reallocAllVmsData(int old, int n);
+
+ /// attach - attach the vm specific data of the given virtual machine
+ ///
+ void attach(VirtualMachine* vm);
};
#ifndef RUNTIME_DWARF_EXCEPTIONS
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp?rev=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp Sun Dec 5 09:45:20 2010
@@ -19,9 +19,8 @@
using namespace j3;
-JavaThread::JavaThread(mvm::MutatorThread* mut, Jnjvm* isolate)
- : mvm::VMThreadData(mut, isolate) {
- jniEnv = isolate->jniEnv;
+JavaThread::JavaThread(Jnjvm* vm, mvm::Thread* mut) : mvm::VMThreadData(vm, mut) {
+ jniEnv = vm->jniEnv;
localJNIRefs = new JNILocalReferences();
currentAddedReferences = NULL;
javaThread = NULL;
@@ -30,8 +29,8 @@
#ifdef SERVICE
eipIndex = 0;
replacedEIPs = new void*[100];
- if (isolate->upcalls->newThrowable) {
- ServiceException = isolate->upcalls->newThrowable->doNew(isolate);
+ if (vm->upcalls->newThrowable) {
+ ServiceException = vm->upcalls->newThrowable->doNew(vm);
}
#endif
}
@@ -40,10 +39,11 @@
return (JavaThread*)mut->vmData;
}
-JavaThread *JavaThread::create(Jnjvm* isolate) {
- mvm::MutatorThread *mut = new mvm::MutatorThread(isolate->vmkit);
- JavaThread *th = new JavaThread(mut, isolate);
- th->attach();
+JavaThread *JavaThread::create(Jnjvm* vm) {
+ mvm::Thread *mut = new mvm::MutatorThread(vm->vmkit);
+ JavaThread *th = new JavaThread(vm, mut);
+ mut->allVmsData[vm->vmID] = th;
+ mut->attach(vm);
return th;
}
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h?rev=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h Sun Dec 5 09:45:20 2010
@@ -116,11 +116,11 @@
/// JavaThread - Creates a Java thread.
///
- JavaThread(mvm::MutatorThread*, Jnjvm* isolate);
+ JavaThread(Jnjvm* vm, mvm::Thread*mut);
/// create - Creates a Java thread and a mutator thread.
///
- static JavaThread* create(Jnjvm* isolate);
+ static JavaThread* create(Jnjvm* vm);
/// j3Thread - gives the JavaThread associated with the mutator thread
///
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp?rev=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp Sun Dec 5 09:45:20 2010
@@ -1070,14 +1070,16 @@
// First create system threads.
finalizerThread = new FinalizerThread(this);
- javaFinalizerThread = new JavaThread(finalizerThread, this);
- javaFinalizerThread->attach();
+ javaFinalizerThread = new JavaThread(this, finalizerThread);
+ finalizerThread->allVmsData[vmID] = javaFinalizerThread;
+ finalizerThread->attach(this);
finalizerThread->start(
(void (*)(mvm::Thread*))FinalizerThread::finalizerStart);
referenceThread = new ReferenceThread(this);
- javaReferenceThread = new JavaThread(referenceThread, this);
- javaReferenceThread->attach();
+ javaReferenceThread = new JavaThread(this, referenceThread);
+ referenceThread->allVmsData[vmID] = javaReferenceThread;
+ referenceThread->attach(this);
referenceThread->start(
(void (*)(mvm::Thread*))ReferenceThread::enqueueStart);
Modified: vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp?rev=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp (original)
+++ vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp Sun Dec 5 09:45:20 2010
@@ -2,8 +2,3 @@
#include "MutatorThread.h"
using namespace mvm;
-
-void VMThreadData::attach() {
- mut->vmData = this;
- mut->MyVM = vm;
-}
Modified: vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.cpp?rev=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.cpp (original)
+++ vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.cpp Sun Dec 5 09:45:20 2010
@@ -48,6 +48,16 @@
vmkit()->unregisterPreparedThread(this);
}
+void Thread::attach(VirtualMachine* vm) {
+ MyVM = vm;
+ vmData = allVmsData[vm->vmID];
+
+ if(!vmData) {
+ printf("should not happen yet\n");
+ abort();
+ }
+}
+
// must be protected by rendezvous.threadLock
void Thread::reallocAllVmsData(int old, int n) {
VMThreadData **newData = new VMThreadData*[n];
More information about the vmkit-commits
mailing list