[vmkit-commits] [vmkit] r120703 - in /vmkit/branches/multi-vm: include/mvm/GC.h lib/J3/Compiler/JavaAOTCompiler.cpp lib/J3/VMCore/Jnjvm.cpp lib/J3/VMCore/Jnjvm.h lib/J3/VMCore/JnjvmClassLoader.cpp lib/J3/VMCore/JnjvmClassLoader.h lib/J3/VMCore/VirtualTables.cpp lib/Mvm/GCMmap2/MvmGC.h lib/Mvm/MMTk/MvmGC.h
Gael Thomas
gael.thomas at lip6.fr
Thu Dec 2 04:59:46 PST 2010
Author: gthomas
Date: Thu Dec 2 06:59:46 2010
New Revision: 120703
URL: http://llvm.org/viewvc/llvm-project?rev=120703&view=rev
Log:
fill in the new field vm of virtualtable
Modified:
vmkit/branches/multi-vm/include/mvm/GC.h
vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp
vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h
vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp
vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h
vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp
vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h
vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h
Modified: vmkit/branches/multi-vm/include/mvm/GC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/include/mvm/GC.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/include/mvm/GC.h (original)
+++ vmkit/branches/multi-vm/include/mvm/GC.h Thu Dec 2 06:59:46 2010
@@ -51,15 +51,6 @@
return &destructor;
}
- CommonVirtualTable(uintptr_t d, uintptr_t o, uintptr_t t, VirtualMachine* v) {
- destructor = d;
- operatorDelete = o;
- tracer = t;
- vm = v;
- }
-
- CommonVirtualTable() {}
-
static int numberOfCommonEntries() { return 4; }
static void emptyTracer(void*) {}
@@ -73,11 +64,7 @@
class gc : public collectable {
};
- class VirtualTable : public GCVirtualTable {
- public:
- VirtualTable(uintptr_t d, uintptr_t o, uintptr_t t, VirtualMachine* v) : GCVirtualTable(d, o, t, v) {}
- VirtualTable() {}
- };
+ class VirtualTable : public GCVirtualTable {};
static const uint32_t HashBits = 8;
static const uint64_t GCBitMask = ((1 << GCBits) - 1);
Modified: vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp Thu Dec 2 06:59:46 2010
@@ -2224,7 +2224,7 @@
for (; I != E; ++I) {
JavaObject* obj = (JavaObject*)(*I);
- if (!VMClassLoader::isVMClassLoader(obj) && JavaObject::instanceOf(obj, cl)) {
+ if (!VMClassLoader::isVMClassLoader(cl->classLoader->getIsolate(), obj) && JavaObject::instanceOf(obj, cl)) {
if (currentClass != NULL) {
if (JavaObject::getClass(obj) != currentClass) {
return 0;
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=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp Thu Dec 2 06:59:46 2010
@@ -1346,7 +1346,12 @@
}
Jnjvm::Jnjvm(mvm::BumpPtrAllocator& Alloc, mvm::VMKit* vmkit, JnjvmBootstrapLoader* loader) :
- VirtualMachine(Alloc, vmkit), lockSystem(Alloc) {
+ VirtualMachine(Alloc, vmkit),
+ lockSystem(Alloc) {
+
+ loader->isolate = this;
+
+ initialiseInternalVTs();
classpath = getenv("CLASSPATH");
if (!classpath) classpath = ".";
@@ -1433,7 +1438,7 @@
// in this case.
size_t size = 0;
JavaObject* src = (JavaObject*)object;
- if (VMClassLoader::isVMClassLoader(src)) {
+ if (VMClassLoader::isVMClassLoader(this, src)) {
size = sizeof(VMClassLoader);
} else {
CommonClass* cl = JavaObject::getClass(src);
@@ -1455,7 +1460,7 @@
const char* Jnjvm::getObjectTypeName(mvm::gc* object) {
JavaObject* src = (JavaObject*)object;
- if (VMClassLoader::isVMClassLoader(src)) {
+ if (VMClassLoader::isVMClassLoader(this, src)) {
return "VMClassLoader";
} else {
CommonClass* cl = JavaObject::getClass(src);
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h Thu Dec 2 06:59:46 2010
@@ -258,7 +258,11 @@
/// javaReferenceThread - the java reference thread
JavaThread* javaReferenceThread;
-
+
+
+ mvm::VirtualTable* VMClassLoader__VT;
+
+ void initialiseInternalVTs();
public:
/// CreateExceptions - These are the runtime exceptions thrown by Java code
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.cpp Thu Dec 2 06:59:46 2010
@@ -884,13 +884,13 @@
Classpath* upcalls = vm->bootstrapLoader->upcalls;
vmdata =
(VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader));
-
+
if (vmdata == NULL) {
JavaObject::acquire(loader);
vmdata =
(VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader));
if (!vmdata) {
- vmdata = VMClassLoader::allocate();
+ vmdata = VMClassLoader::allocate(vm);
mvm::BumpPtrAllocator* A = new mvm::BumpPtrAllocator();
JCL = new(*A, "Class loader") JnjvmClassLoader(*A, *vm->bootstrapLoader,
loader, vmdata, vm);
@@ -1197,6 +1197,7 @@
extern "C" void vmjcAddPreCompiledClass(JnjvmClassLoader* JCL,
CommonClass* cl) {
cl->classLoader = JCL;
+ cl->virtualVT->vm = JCL->getIsolate();
JCL->hashUTF8->insert(cl->name);
@@ -1269,6 +1270,19 @@
return res;
}
+VMClassLoader* VMClassLoader::allocate(Jnjvm *vm) {
+ VMClassLoader* res = 0;
+ llvm_gcroot(res, 0);
+ res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), vm->VMClassLoader__VT);
+ return res;
+}
+
+bool VMClassLoader::isVMClassLoader(Jnjvm *vm, JavaObject* obj) {
+ llvm_gcroot(obj, 0);
+ // not safe: must verify that obj belongs to a jvm
+ return obj->getVirtualTable() == vm->VMClassLoader__VT;
+}
+
extern "C" void staticCallback() {
fprintf(stderr, "Implement me");
abort();
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JnjvmClassLoader.h Thu Dec 2 06:59:46 2010
@@ -87,6 +87,7 @@
protected:
+ friend class Jnjvm;
JnjvmClassLoader(mvm::BumpPtrAllocator& Alloc) : allocator(Alloc) {}
/// TheCompiler - The Java compiler for this class loader.
@@ -443,23 +444,13 @@
public:
- static VMClassLoader* allocate() {
- VMClassLoader* res = 0;
- llvm_gcroot(res, 0);
- res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT);
- return res;
- }
-
- /// VT - The VirtualTable for this GC-class.
+ /// Allocate a VMClassLoader
///
- static mvm::VirtualTable VT;
+ static VMClassLoader* allocate(Jnjvm *vm);
/// Is the object a VMClassLoader object?
///
- static bool isVMClassLoader(JavaObject* obj) {
- llvm_gcroot(obj, 0);
- return obj->getVirtualTable() == &VT;
- }
+ static bool isVMClassLoader(Jnjvm *vm, JavaObject* obj);
/// staticTracer - Trace the internal class loader.
///
Modified: vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/VirtualTables.cpp Thu Dec 2 06:59:46 2010
@@ -53,10 +53,13 @@
// Classpath with the vmdata field).
//===----------------------------------------------------------------------===//
-mvm::VirtualTable VMClassLoader::VT((uintptr_t)VMClassLoader::staticDestructor,
- (uintptr_t)VMClassLoader::staticDestructor,
- (uintptr_t)VMClassLoader::staticTracer,
- 0);
+void Jnjvm::initialiseInternalVTs() {
+ VMClassLoader__VT = (mvm::VirtualTable*)allocator.Allocate(sizeof(mvm::VirtualTable), "Virtual table");
+ VMClassLoader__VT->destructor = (uintptr_t)VMClassLoader::staticDestructor;
+ VMClassLoader__VT->operatorDelete = 0;
+ VMClassLoader__VT->tracer = (uintptr_t)VMClassLoader::staticTracer;
+ VMClassLoader__VT->vm = this;
+}
//===----------------------------------------------------------------------===//
// Trace methods for Java objects. There are four types of objects:
Modified: vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/branches/multi-vm/lib/Mvm/GCMmap2/MvmGC.h Thu Dec 2 06:59:46 2010
@@ -32,9 +32,6 @@
static uint32_t numberOfSpecializedTracers() {
return 0;
}
-
- GCVirtualTable(uintptr_t d, uintptr_t o, uintptr_t t, VirtualMachine *v) : CommonVirtualTable(d, o, t, v) {}
- GCVirtualTable() {}
};
class Collector {
Modified: vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h?rev=120703&r1=120702&r2=120703&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h (original)
+++ vmkit/branches/multi-vm/lib/Mvm/MMTk/MvmGC.h Thu Dec 2 06:59:46 2010
@@ -28,9 +28,6 @@
static uint32_t numberOfSpecializedTracers() {
return 1;
}
-
- GCVirtualTable(uintptr_t d, uintptr_t o, uintptr_t t, VirtualMachine* v) : CommonVirtualTable(d, o, t, v) {}
- GCVirtualTable() {}
};
extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT);
More information about the vmkit-commits
mailing list