[vmkit-commits] [vmkit] r180318 - Removed gcmalloc from Bindings and splitted it into pre-post/alloc. Made VirtualTable generic for setting VM objets type. Now affecting type is delegated to VirtualMachine.
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 09:56:06 PDT 2013
Author: peter.senna
Date: Thu Apr 25 11:54:35 2013
New Revision: 180318
URL: http://llvm.org/viewvc/llvm-project?rev=180318&view=rev
Log:
Removed gcmalloc from Bindings and splitted it into pre-post/alloc. Made VirtualTable generic for setting VM objets type. Now affecting type is delegated to VirtualMachine.
(cherry picked from commit ce85ab001873eb33c5714f88688dd1e41db3c35c)
Modified:
vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h
vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:54:35 2013
@@ -1379,7 +1379,12 @@ void Jnjvm::scanFinalizationQueue(word_t
void Jnjvm::addFinalizationCandidate(gc* object) {
llvm_gcroot(object, 0);
- finalizerThread->addFinalizationCandidate(object);
+ if (object->getVirtualTable()->hasDestructor())
+ finalizerThread->addFinalizationCandidate(object);
+}
+
+void Jnjvm::setType(gcHeader* header, void* type) {
+ header->toReference()->setVirtualTable((VirtualTable*)type);
}
// This method is called during GC so no llvm_gcroot needed.
Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.cpp Thu Apr 25 11:54:35 2013
@@ -19,31 +19,40 @@ static vmkit::SpinLock lock;
std::set<gc*> __InternalSet__;
int Collector::verbose = 0;
-extern "C" void* gcmalloc(uint32_t sz, void* _VT) {
- gc* res = 0;
+extern "C" void* prealloc(uint32_t sz) {
+ gc* res = 0;
gcHeader* head = 0;
- VirtualTable* VT = (VirtualTable*)_VT;
- sz += gcHeader::hiddenHeaderSize();
+
sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
- head = (gcHeader*)malloc(sz);
+ head = (gcHeader*) malloc(sz);
memset((void*)head, 0, sz);
res = head->toReference();
lock.acquire();
__InternalSet__.insert(res);
lock.release();
-
- res->setVirtualTable(VT);
+
return res;
}
-extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT) {
- gc* res = (gc*)gcmalloc(sz, VT);
- if (VT->hasDestructor())
- vmkit::Thread::get()->MyVM->addFinalizationCandidate(res);
+extern "C" void postalloc(gc* obj, void* type, uint32_t size) {
+ vmkit::Thread::get()->MyVM->setType(obj->toHeader(), type);
+}
+
+extern "C" void* gcmalloc(uint32_t sz, void* type) {
+ gc* res = 0;
+ sz += gcHeader::hiddenHeaderSize();
+ res = (gc*) prealloc(sz);
+ postalloc(res, type, sz);
return res;
}
+extern "C" void* gcmallocUnresolved(uint32_t sz, void* type) {
+ gc* res = (gc*)gcmalloc(sz, type);
+ vmkit::Thread::get()->MyVM->addFinalizationCandidate(res);
+ return res;
+}
+
extern "C" void addFinalizationCandidate(gc* obj) {
vmkit::Thread::get()->MyVM->addFinalizationCandidate(obj);
}
Modified: vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h (original)
+++ vmkit/trunk/lib/vmkit/MMTk/VmkitGC.h Thu Apr 25 11:54:35 2013
@@ -52,8 +52,8 @@ class VirtualTable {
static void emptyTracer(void*) {}
};
-extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT);
-extern "C" void* gcmalloc(uint32_t sz, void* VT);
+extern "C" void* gcmallocUnresolved(uint32_t sz, void* type);
+extern "C" void* gcmalloc(uint32_t sz, void* type);
class gc : public gcRoot {
public:
Modified: vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java (original)
+++ vmkit/trunk/mmtk/java/src/org/j3/bindings/Bindings.java Thu Apr 25 11:54:35 2013
@@ -38,15 +38,20 @@ import org.vmutil.options.StringOption;
public final class Bindings {
- @Inline
- private static Address gcmalloc(int size, ObjectReference virtualTable) {
- Selected.Mutator mutator = Selected.Mutator.get();
- int allocator = mutator.checkAllocator(size, 0, 0);
- Address res = mutator.alloc(size, 0, 0, allocator, 0);
- setVT(res, virtualTable);
- mutator.postAlloc(res.toObjectReference(), virtualTable, size, allocator);
- return res;
- }
+ @Inline
+ private static Address prealloc(int size) {
+ Selected.Mutator mutator = Selected.Mutator.get();
+ int allocator = mutator.checkAllocator(size, 0, 0);
+ Address res = mutator.alloc(size, 0, 0, allocator, 0);
+ return res;
+ }
+
+ @Inline
+ private static void postalloc(ObjectReference object, ObjectReference type, int size) {
+ Selected.Mutator mutator = Selected.Mutator.get();
+ int allocator = mutator.checkAllocator(size, 0, 0);
+ mutator.postAlloc(object, type, size, allocator);
+ }
@Inline
private static boolean isLive(TraceLocal closure, ObjectReference obj) {
@@ -132,9 +137,6 @@ public final class Bindings {
}
@Inline
- private static native void setVT(Address addr , ObjectReference virtualTable);
-
- @Inline
private static native int hiddenHeaderSize();
@Inline
Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180318&r1=180317&r2=180318&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:54:35 2013
@@ -62,21 +62,12 @@ Java_org_j3_mmtk_ObjectModel_attemptAvai
return (val == oldValue);
}
-extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(
- gcHeader* header, VirtualTable* VT) ALWAYS_INLINE;
-
-extern "C" void Java_org_j3_bindings_Bindings_setVT__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(
- gcHeader* header, VirtualTable* VT) {
- header->toReference()->setVirtualTable(VT);
-}
-
extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() ALWAYS_INLINE;
extern "C" int Java_org_j3_bindings_Bindings_hiddenHeaderSize__() {
return gcHeader::hiddenHeaderSize();
}
-
extern "C" void Java_org_j3_bindings_Bindings_memcpy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(
void* res, void* src, int size) ALWAYS_INLINE;
More information about the vmkit-commits
mailing list