[vmkit-commits] [vmkit] r180284 - Modified header access. Debug version mode, have to modify llvm intrinsics constants
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 09:49:00 PDT 2013
Author: peter.senna
Date: Thu Apr 25 11:47:23 2013
New Revision: 180284
URL: http://llvm.org/viewvc/llvm-project?rev=180284&view=rev
Log:
Modified header access. Debug version mode, have to modify llvm intrinsics constants
(cherry picked from commit 52f0a707b6cb7503c47f665cce1c09e429fab50e)
Modified:
vmkit/trunk/include/vmkit/GC.h
vmkit/trunk/include/vmkit/System.h
vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h
vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp
vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
vmkit/trunk/lib/j3/VMCore/Jni.cpp
vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h
vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp
vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h
vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
Modified: vmkit/trunk/include/vmkit/GC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/GC.h?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/GC.h (original)
+++ vmkit/trunk/include/vmkit/GC.h Thu Apr 25 11:47:23 2013
@@ -33,7 +33,7 @@ public:
virtual ~gcRoot() {}
virtual void tracer(word_t closure) {}
- word_t& header(){return _header; }
+ word_t& header(){return toHeader()->_header; }
inline gcHeader* toHeader() { return (gcHeader*)((uintptr_t)this - gcHeader::hiddenHeaderSize()); }
Modified: vmkit/trunk/include/vmkit/System.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/System.h?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/System.h (original)
+++ vmkit/trunk/include/vmkit/System.h Thu Apr 25 11:47:23 2013
@@ -203,9 +203,9 @@ public:
static uint8_t* GetLastBytePtr(word_t ptr) {
#if ARCH_PPC
- return ((uint8_t*)ptr) + 2 * vmkit::kWordSize - 1;
+ return ((uint8_t*)ptr) + vmkit::kWordSize - 1;
#else
- return ((uint8_t*)ptr) + vmkit::kWordSize;
+ return ((uint8_t*)ptr);
#endif
}
Modified: vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/VMStaticInstance.h Thu Apr 25 11:47:23 2013
@@ -36,7 +36,8 @@ public:
llvm_gcroot(Class, 0);
res = (VMStaticInstance*)gc::operator new(sizeof(VMStaticInstance), &VT);
res->OwningClass = Class;
-
+ printf("VMStaticInstance operator new @%p\n", res);
+ fflush(NULL);
return res;
}
Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:47:23 2013
@@ -1915,7 +1915,7 @@ void JavaJIT::invokeNew(uint16 index) {
Class* cl = 0;
Value* Cl = getResolvedClass(index, true, true, &cl);
-
+
Value* VT = 0;
Value* Size = 0;
Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:47:23 2013
@@ -12,6 +12,8 @@
#include "debug.h"
#include "types.h"
+#include "vmkit/System.h"
+
#include "ClasspathReflect.h"
#include "JavaArray.h"
#include "JavaClass.h"
@@ -270,6 +272,8 @@ JavaObject* UserClassArray::doNew(sint32
uint32 size = sizeof(JavaObject) + sizeof(ssize_t) + (n << logSize);
res = (JavaObject*)gc::operator new(size, VT);
JavaArray::setSize(res, n);
+ printf("UserClassArray operator new @%p\n", res);
+ fflush(NULL);
return res;
}
@@ -451,7 +455,8 @@ JavaObject* UserClass::doNew(Jnjvm* vm,
&& "Uninitialized class when allocating.");
assert(getVirtualVT() && "No VT\n");
res = (JavaObject*)gc::operator new(getVirtualSize(), getVirtualVT());
-
+ printf("UserClass operator new @%p\n", res);
+ fflush(NULL);
return res;
}
Modified: vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaConstantPool.cpp Thu Apr 25 11:47:23 2013
@@ -159,7 +159,10 @@ JavaConstantPool::operator new(size_t sz
uint32 ctpSize) {
// NOTICE: 'size' is not the final size of the object, as it does more allocations in the constructor
uint32 size = sz + ctpSize * (sizeof(void*) + sizeof(sint32) + sizeof(uint8));
- return allocator.Allocate(size, "Constant pool");
+ void* res = allocator.Allocate(size, "Constant pool");
+ printf("JavaConstantPool operator new @%p\n", res);
+ fflush(NULL);
+ return res;
}
JavaConstantPool::JavaConstantPool(Class* cl, Reader& reader, uint32 size) {
Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 11:47:23 2013
@@ -74,6 +74,9 @@ void JavaObject::waitIntern(
vmkit::LockSystem& table = thread->getJVM()->lockSystem;
if (!owner(self)) {
+ printf("IN JavaObject.cpp: 77 EXCEPTION\n");
+ thread->printBacktrace();
+ thread->getJVM()->exit();
thread->getJVM()->illegalMonitorStateException(self);
UNREACHABLE();
}
@@ -128,6 +131,12 @@ void JavaObject::notify(JavaObject* self
vmkit::LockSystem& table = thread->getJVM()->lockSystem;
if (!owner(self)) {
+ fflush(NULL);
+ printf("IN JavaObject.cpp: 128 EXCEPTION\n");
+ thread->printBacktrace();
+ fflush(NULL);
+ thread->getJVM()->exit();
+
thread->getJVM()->illegalMonitorStateException(self);
UNREACHABLE();
}
@@ -140,6 +149,10 @@ void JavaObject::notifyAll(JavaObject* s
vmkit::LockSystem& table = thread->getJVM()->lockSystem;
if (!owner(self)) {
+ printf("IN JavaObject.cpp: 140 EXCEPTION\n");
+ thread->printBacktrace();
+ thread->getJVM()->exit();
+
thread->getJVM()->illegalMonitorStateException(self);
UNREACHABLE();
}
Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Thu Apr 25 11:47:23 2013
@@ -3851,6 +3851,7 @@ jint MonitorExit(JNIEnv *env, jobject _o
if (Obj != NULL) {
if (!JavaObject::owner(Obj)) {
+ printf("IN Jni.cpp: 3854 EXCEPTION\n");
JavaThread::get()->getJVM()->illegalMonitorStateException(Obj);
}
Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.cpp Thu Apr 25 11:47:23 2013
@@ -1122,6 +1122,7 @@ void Jnjvm::loadBootstrap() {
(void (*)(vmkit::Thread*))FinalizerThread::finalizerStart);
referenceThread = new ReferenceThread(this);
+ printf("Reference Thread is @%p\n", referenceThread);
referenceThread->start(
(void (*)(vmkit::Thread*))ReferenceThread::enqueueStart);
Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:47:23 2013
@@ -483,6 +483,8 @@ public:
VMClassLoader* res = 0;
llvm_gcroot(res, 0);
res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT);
+ printf("VMClassLoader operator new @%p\n", res);
+ fflush(NULL);
return res;
}
Modified: vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h (original)
+++ vmkit/trunk/lib/j3/VMCore/ReferenceQueue.h Thu Apr 25 11:47:23 2013
@@ -40,7 +40,12 @@ public:
ReferenceQueue(uint8_t s) {
+ printf("Allocating ReferenceQueue !\n");
References = new gc*[INITIAL_QUEUE_SIZE];
+ if(*((gc**)0x5000B030)){
+ printf("HEADER OF EXCEPTION OBJ : %08llX\n", ((gc*)(0x5000B030))->header());
+ }
+ printf("ReferenceQueue (initial size = %d\trange : start @%p - end @%p\n", INITIAL_QUEUE_SIZE, References, References + INITIAL_QUEUE_SIZE);
memset(References, 0, INITIAL_QUEUE_SIZE * sizeof(gc*));
QueueLength = INITIAL_QUEUE_SIZE;
CurrentIndex = 0;
Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 11:47:23 2013
@@ -19,6 +19,9 @@
#include <sys/time.h>
#include <pthread.h>
+#include "../../j3/VMCore/JavaObject.h"
+#include "../../j3/VMCore/JavaClass.h"
+#include "../../j3/VMCore/UTF8.h"
namespace vmkit {
@@ -189,6 +192,7 @@ void ThinLock::acquire(gc* object, LockS
}
assert(owner(object, table) && "Not owner after quitting acquire!");
+ printf("LOCK ACQUIRED curThread = %08llX, OWNER of object @%p on ThreadIDMask = %08llX\n", id, object, object->header() & System::GetThreadIDMask());
}
/// release - Release the lock.
@@ -199,6 +203,7 @@ void ThinLock::release(gc* object, LockS
word_t oldValue = 0;
word_t newValue = 0;
word_t yieldedValue = 0;
+
if ((object->header() & ~NonLockBitsMask) == id) {
do {
oldValue = object->header();
@@ -218,6 +223,9 @@ void ThinLock::release(gc* object, LockS
yieldedValue = __sync_val_compare_and_swap(&(object->header()), oldValue, newValue);
} while ((object->header() & ThinCountMask) == count);
}
+
+ printf("LOCK RELEASED curThread = %08llX, OWNER of object @%p on ThreadIDMask = %08llX\n", id, object, object->header() & System::GetThreadIDMask());
+
}
/// owner - Returns true if the curren thread is the owner of this object's
@@ -225,11 +233,19 @@ void ThinLock::release(gc* object, LockS
bool ThinLock::owner(gc* object, LockSystem& table) {
llvm_gcroot(object, 0);
if (object->header() & FatMask) {
+ printf("OWNER on FatMask\n");
FatLock* obj = table.getFatLockFromID(object->header());
if (obj != NULL) return obj->owner();
} else {
+ bool res = false;
uint64 id = vmkit::Thread::get()->getThreadID();
- if ((object->header() & System::GetThreadIDMask()) == id) return true;
+ res = ((object->header() & System::GetThreadIDMask()) == id);
+ printf("CHECK OWNER curThread = %08llX, OWNER of object @%p (header @%p) on ThreadIDMask = %08llX\n", id, object, &object->header(), object->header() & System::GetThreadIDMask());
+ fflush(NULL);
+ if (res)
+ return true;
+ else
+ printf("THREAD IS NOT THE OWNER OF OBJECT %p OF TYPE %s\n", object, j3::UTF8Buffer(((j3::JavaVirtualTable*)(object->getVirtualTable()))->cl->getName()).cString());
}
return false;
}
Modified: vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ctthread.cpp Thu Apr 25 11:47:23 2013
@@ -525,6 +525,8 @@ void* Thread::operator new(size_t sz) {
void* res = (void*)TheStackManager.allocate();
// Make sure the thread information is cleared.
if (res != NULL) memset(res, 0, sz);
+ printf("Thread operator new @%p\n", res);
+ fflush(NULL);
return res;
}
Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:47:23 2013
@@ -210,8 +210,8 @@ void Collector::initialise(int argc, cha
}
extern "C" void* MMTkMutatorAllocate(uint32_t size, VirtualTable* VT) {
- void* val = MutatorThread::get()->Allocator.Allocate(size);
- ((void**)val)[0] = VT;
+ gc* val = (gc*)MutatorThread::get()->Allocator.Allocate(size);
+ val->setVirtualTable(VT);
return val;
}
Modified: vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h (original)
+++ vmkit/trunk/mmtk/mmtk-j3/MMTkObject.h Thu Apr 25 11:47:23 2013
@@ -28,7 +28,7 @@ struct MMTkVirtualTable : public Virtual
struct MMTkObject {
MMTkVirtualTable* virtualTable;
- word_t header;
+ gcHeader header;
};
struct MMTkArray : public MMTkObject {
Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=180284&r1=180283&r2=180284&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Thu Apr 25 11:47:23 2013
@@ -19,7 +19,7 @@ extern "C" word_t Java_org_j3_mmtk_Objec
}
extern "C" word_t Java_org_j3_mmtk_ObjectModel_GC_1HEADER_1OFFSET__ (MMTkObject* OM) {
- return gcHeader::hiddenHeaderSize() + sizeof(void*);
+ return 0;
}
extern "C" word_t Java_org_j3_mmtk_ObjectModel_readAvailableBitsWord__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
@@ -35,16 +35,16 @@ extern "C" gcHeader* Java_org_j3_mmtk_Ob
return obj ? obj->toHeader() : 0;
}
-extern "C" gcHeader* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
- return obj ? obj->toHeader() : 0;
+extern "C" gc* Java_org_j3_mmtk_ObjectModel_refToAddress__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
+ return obj;
}
extern "C" uint8_t Java_org_j3_mmtk_ObjectModel_readAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
- return *vmkit::System::GetLastBytePtr(reinterpret_cast<word_t>(obj));
+ return *vmkit::System::GetLastBytePtr(reinterpret_cast<word_t>(&(obj->header())));
}
extern "C" void Java_org_j3_mmtk_ObjectModel_writeAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2B (MMTkObject* OM, gc* obj, uint8_t val) {
- *vmkit::System::GetLastBytePtr(reinterpret_cast<word_t>(obj)) = val;
+ *vmkit::System::GetLastBytePtr(reinterpret_cast<word_t>(&(obj->header()))) = val;
}
extern "C" gc* Java_org_j3_mmtk_ObjectModel_getObjectFromStartAddress__Lorg_vmmagic_unboxed_Address_2 (MMTkObject* OM, gcHeader* obj) {
@@ -88,10 +88,10 @@ extern "C" word_t Java_org_j3_mmtk_Objec
MMTkObject* OM, gc* src, int allocator) {
size_t size = vmkit::Thread::get()->MyVM->getObjectSize(src);
size = llvm::RoundUpToAlignment(size, sizeof(void*));
- word_t res = JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(
+ gc* res = (gc*)JnJVM_org_j3_bindings_Bindings_copy__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2II(
src, src->getVirtualTable(), size, allocator);
- assert((((word_t*)res)[1] & ~vmkit::GCBitMask) == (((word_t*)src)[1] & ~vmkit::GCBitMask));
- return res;
+ assert((res->header() & ~vmkit::GCBitMask) == (src->header() & ~vmkit::GCBitMask));
+ return (word_t)res;
}
extern "C" void Java_org_j3_mmtk_ObjectModel_copyTo__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2 (
More information about the vmkit-commits
mailing list