[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