[vmkit-commits] [vmkit] r120221 - in /vmkit/trunk: include/mvm/VirtualMachine.h lib/J3/VMCore/Jnjvm.cpp lib/J3/VMCore/Jnjvm.h mmtk/mmtk-j3/MMTkObject.h mmtk/mmtk-j3/ObjectModel.cpp mmtk/mmtk-j3/RuntimeHelpers.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sat Nov 27 07:12:30 PST 2010
Author: geoffray
Date: Sat Nov 27 09:12:30 2010
New Revision: 120221
URL: http://llvm.org/viewvc/llvm-project?rev=120221&view=rev
Log:
Remove all references to JavaObject in mmtk-j3, making virtual methods in VirtualMachine.
Modified:
vmkit/trunk/include/mvm/VirtualMachine.h
vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
vmkit/trunk/lib/J3/VMCore/Jnjvm.h
vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h
vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp
Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=120221&r1=120220&r2=120221&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Sat Nov 27 09:12:30 2010
@@ -157,6 +157,15 @@
///
virtual void tracer(uintptr_t closure) {}
+ /// getObjectSize - Get the size of this object. Used by copying collectors.
+ ///
+ virtual size_t getObjectSize(gc* object) = 0;
+
+ /// getObjectTypeName - Get the type of this object. Used by the GC for
+ /// debugging purposes.
+ ///
+ virtual const char* getObjectTypeName(gc* object) { return "An object"; }
+
/// rendezvous - The rendezvous implementation for garbage collection.
///
#ifdef WITH_LLVM_GCC
Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=120221&r1=120220&r2=120221&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Sat Nov 27 09:12:30 2010
@@ -1414,6 +1414,45 @@
finalizerThread->addFinalizationCandidate(object);
}
+size_t Jnjvm::getObjectSize(gc* object) {
+ // TODO: because this is called during GC, there is no need to do
+ // llvm_gcroot. For clarity, it may be useful to have a special type
+ // in this case.
+ size_t size = 0;
+ JavaObject* src = (JavaObject*)object;
+ VirtualTable* VT = src->getVirtualTable();
+ if (VMClassLoader::isVMClassLoader(src)) {
+ size = sizeof(VMClassLoader);
+ } else {
+ CommonClass* cl = JavaObject::getClass(src);
+ if (cl->isArray()) {
+ UserClassArray* array = cl->asArrayClass();
+ UserCommonClass* base = array->baseClass();
+ uint32 logSize = base->isPrimitive() ?
+ base->asPrimitiveClass()->logSize : (sizeof(JavaObject*) == 8 ? 3 : 2);
+
+ size = sizeof(JavaObject) + sizeof(ssize_t) +
+ (JavaArray::getSize(src) << logSize);
+ } else {
+ assert(cl->isClass() && "Not a class!");
+ size = cl->asClass()->getVirtualSize();
+ }
+ }
+ return size;
+}
+
+const char* Jnjvm::getObjectTypeName(gc* object) {
+ JavaObject* src = (JavaObject*)object;
+ if (VMClassLoader::isVMClassLoader(src)) {
+ return "VMClassLoader";
+ } else {
+ CommonClass* cl = JavaObject::getClass(src);
+ // This code is only used for debugging on a fatal error. It is fine to
+ // allocate in the C++ heap.
+ return (new UTF8Buffer(cl->name))->cString();
+ }
+}
+
// Helper function to run J3 without JIT.
extern "C" int StartJnjvmWithoutJIT(int argc, char** argv, char* mainClass) {
mvm::Collector::initialise();
Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.h?rev=120221&r1=120220&r2=120221&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.h Sat Nov 27 09:12:30 2010
@@ -135,6 +135,8 @@
virtual void scanPhantomReferencesQueue(uintptr_t closure);
virtual void scanFinalizationQueue(uintptr_t closure);
virtual void addFinalizationCandidate(gc* obj);
+ virtual size_t getObjectSize(gc* obj);
+ virtual const char* getObjectTypeName(gc* obj);
/// CreateError - Creates a Java object of the specified exception class
/// and calling its <init> function.
Modified: vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h?rev=120221&r1=120220&r2=120221&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h (original)
+++ vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h Sat Nov 27 09:12:30 2010
@@ -12,11 +12,22 @@
#include <stdint.h>
#include "MutatorThread.h"
+#include "MvmGC.h"
namespace mmtk {
+class MMTkObject;
+
+struct MMTkClass {
+ MMTkObject* delegatee;
+};
+
+struct MMTkVirtualTable : public VirtualTable {
+ MMTkClass* cl;
+};
+
struct MMTkObject {
- uintptr_t virtual_table;
+ MMTkVirtualTable* virtualTable;
uintptr_t header;
};
Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=120221&r1=120220&r2=120221&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Sat Nov 27 09:12:30 2010
@@ -7,18 +7,14 @@
//
//===----------------------------------------------------------------------===//
-#include "JavaArray.h"
-#include "JavaClass.h"
-#include "JavaObject.h"
-
+#include "mvm/VirtualMachine.h"
#include "MMTkObject.h"
-
#include "debug.h"
namespace mmtk {
extern "C" intptr_t Java_org_j3_mmtk_ObjectModel_getArrayBaseOffset__ (MMTkObject* OM) {
- return sizeof(j3::JavaObject) + sizeof(ssize_t);
+ return sizeof(MMTkObject) + sizeof(ssize_t);
}
extern "C" intptr_t Java_org_j3_mmtk_ObjectModel_GC_1HEADER_1OFFSET__ (MMTkObject* OM) {
@@ -89,27 +85,10 @@
extern "C" uintptr_t Java_org_j3_mmtk_ObjectModel_copy__Lorg_vmmagic_unboxed_ObjectReference_2I (
MMTkObject* OM, gc* src, int allocator) {
- size_t size = 0;
- VirtualTable* VT = src->getVirtualTable();
- if (j3::VMClassLoader::isVMClassLoader((j3::JavaObject*)src)) {
- size = sizeof(j3::VMClassLoader);
- } else {
- j3::CommonClass* cl = j3::JavaObject::getClass((j3::JavaObject*)src);
- if (cl->isArray()) {
- j3::UserClassArray* array = cl->asArrayClass();
- j3::UserCommonClass* base = array->baseClass();
- uint32 logSize = base->isPrimitive() ?
- base->asPrimitiveClass()->logSize : (sizeof(j3::JavaObject*) == 8 ? 3 : 2);
-
- size = sizeof(j3::JavaObject) + sizeof(ssize_t) +
- (j3::JavaArray::getSize((j3::JavaObject*)src) << logSize);
- } else {
- assert(cl->isClass() && "Not a class!");
- size = cl->asClass()->getVirtualSize();
- }
- }
+ size_t size = mvm::Thread::get()->MyVM->getObjectSize(src);
size = llvm::RoundUpToAlignment(size, sizeof(void*));
- uintptr_t res = JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(src, VT, size, allocator);
+ uintptr_t res = JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(
+ src, src->getVirtualTable(), size, allocator);
assert((((uintptr_t*)res)[1] & ~mvm::GCBitMask) == (((uintptr_t*)src)[1] & ~mvm::GCBitMask));
return res;
}
@@ -151,13 +130,6 @@
elements[i] = name[i];
}
}
-
- FakeByteArray(const j3::UTF8* name) {
- length = name->size;
- for (uint32 i = 0; i < length; i++) {
- elements[i] = name->elements[i];
- }
- }
private:
size_t length;
uint8_t elements[1];
@@ -165,15 +137,12 @@
extern "C" FakeByteArray* Java_org_j3_mmtk_ObjectModel_getTypeDescriptor__Lorg_vmmagic_unboxed_ObjectReference_2 (
MMTkObject* OM, gc* src) {
- if (j3::VMClassLoader::isVMClassLoader((j3::JavaObject*)src)) {
- return new (14) FakeByteArray("VMClassLoader");
- } else {
- j3::CommonClass* cl = j3::JavaObject::getClass((j3::JavaObject*)src);
- return new (cl->name->size) FakeByteArray(cl->name);
- }
+ const char* name = mvm::Thread::get()->MyVM->getObjectTypeName(src);
+ // This code is only used for debugging on a fatal error. It is fine to
+ // allocate in the C++ heap.
+ return new (strlen(name)) FakeByteArray(name);
}
-
extern "C" void Java_org_j3_mmtk_ObjectModel_getArrayLength__Lorg_vmmagic_unboxed_ObjectReference_2 (
MMTkObject* OM, uintptr_t object) { UNIMPLEMENTED(); }
Modified: vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp?rev=120221&r1=120220&r2=120221&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/RuntimeHelpers.cpp Sat Nov 27 09:12:30 2010
@@ -8,8 +8,6 @@
//===----------------------------------------------------------------------===//
#include "MMTkObject.h"
-#include "JavaObject.h"
-#include "JavaClass.h"
namespace mmtk {
@@ -17,8 +15,8 @@
return str->value->elements[index];
}
-extern "C" j3::JavaObject* MMTkGetClass(j3::JavaObject* obj) {
- return ((j3::JavaVirtualTable*)obj->getVirtualTable())->cl->delegatee[0];
+extern "C" MMTkObject* MMTkGetClass(MMTkObject* obj) {
+ return obj->virtualTable->cl->delegatee;
}
}
More information about the vmkit-commits
mailing list