[vmkit-commits] [vmkit] r180327 - Merging master changes into this branch. Preparing to merge this branch into the master.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 09:57:02 PDT 2013


Author: peter.senna
Date: Thu Apr 25 11:55:30 2013
New Revision: 180327

URL: http://llvm.org/viewvc/llvm-project?rev=180327&view=rev
Log:
Merging master changes into this branch. Preparing to merge this branch into the master.
(cherry picked from commit b9620707e867f01da30232d16b3343014a9d055e)

Modified:
    vmkit/trunk/README.TXT
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
    vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
    vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
    vmkit/trunk/tools/precompiler/trainer/Makefile

Modified: vmkit/trunk/README.TXT
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180327&r1=180326&r2=180327&view=diff
==============================================================================
--- vmkit/trunk/README.TXT (original)
+++ vmkit/trunk/README.TXT Thu Apr 25 11:55:30 2013
@@ -3,7 +3,7 @@ Requirements:
 =============
 
 * Install required packages (Debian):
-apt-get install ant libgconf2-dev libgtk2.0-dev
+apt-get install ant libgconf2-dev libgtk2.0-dev sharutils
 
 * Install required packages (SUSE):
 zypper install ant gconf2-devel gtk2-devel
@@ -15,9 +15,9 @@ apt-get install default-jre default-jdk
 GNU Classpath:
 ==============
 
-wget http://ftp.gnu.org/gnu/classpath/classpath-0.97.2.tar.gz
-tar zxf classpath-0.97.2.tar.gz
-ln -s classpath-0.97.2 classpath
+wget http://ftp.gnu.org/gnu/classpath/classpath-0.99.tar.gz
+tar zxf classpath-0.99.tar.gz
+ln -s classpath-0.99 classpath
 cd classpath
 ./configure --disable-plugin --disable-examples --disable-Werror
 make -j12
@@ -33,8 +33,8 @@ ln -sf ../native/jni/java-util/.libs/lib
 
 * Go root
 cd classpath
-make install
-ldconfig
+sudo make install
+sudo ldconfig
 
 =====
 LLVM:
@@ -91,7 +91,7 @@ svn co http://llvm.org/svn/llvm-project/
 
 * Make it (debug mode):
 
-./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/home/koutheir/PhD/VMKit/classpath/lib --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip
+./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/usr/local/classpath/lib/classpath --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip
 make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1
 
 =============

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h?rev=180327&r1=180326&r2=180327&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathReflect.h Thu Apr 25 11:55:30 2013
@@ -71,70 +71,131 @@ public:
   static int getModifiers(JavaObjectClass* Cl);
 };
 
+class JavaObjectVMField : public JavaObject {
+private:
+	JavaObjectClass* declaringClass;
+	JavaObject* name;
+	uint32 slot;
+	// others
+public:
+	static void staticTracer(JavaObjectVMField* obj, word_t closure) {
+		vmkit::Collector::markAndTrace(obj, &obj->name, closure);
+		vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure);
+	}
+
+	static JavaField* getInternalField(JavaObjectVMField* self) {
+		llvm_gcroot(self, 0);
+		UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+		return &(cls->asClass()->virtualFields[self->slot]);
+	}
+
+	static UserClass* getClass(JavaObjectVMField* self) {
+		llvm_gcroot(self, 0);
+		UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+		return cls->asClass();
+	}
+};
+
 class JavaObjectField : public JavaObject {
 private:
   uint8 flag;
-  JavaObjectClass* declaringClass;
-  JavaObject* name;
-  uint32 slot;
+  JavaObject* p;
+  JavaObjectVMField* vmField;
 
 public:
 
   static void staticTracer(JavaObjectField* obj, word_t closure) {
-    vmkit::Collector::markAndTrace(obj, &obj->name, closure);
-    vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure);
+    vmkit::Collector::markAndTrace(obj, &obj->p, closure);
+    vmkit::Collector::markAndTrace(obj, &obj->vmField, closure);
   }
 
   static JavaField* getInternalField(JavaObjectField* self) {
     llvm_gcroot(self, 0);
-    UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); 
-    return &(cls->asClass()->virtualFields[self->slot]);
+    return JavaObjectVMField::getInternalField(self->vmField);
   }
 
   static UserClass* getClass(JavaObjectField* self) {
     llvm_gcroot(self, 0);
-    UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); 
-    return cls->asClass();
+    return JavaObjectVMField::getClass(self->vmField);
   }
 
   static JavaObjectField* createFromInternalField(JavaField* field, int i);
 };
 
+class JavaObjectVMMethod : public JavaObject {
+public:
+	JavaObjectClass* declaringClass;
+	JavaString* name;
+	uint32 slot;
+public:
+  	static void staticTracer(JavaObjectVMMethod* obj, word_t closure) {
+  		vmkit::Collector::markAndTrace(obj, &obj->name, closure);
+  		vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure);
+	}
+
+	static JavaMethod* getInternalMethod(JavaObjectVMMethod* self);
+
+	static UserClass* getClass(JavaObjectVMMethod* self) {
+		llvm_gcroot(self, 0);
+		UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+		return cls->asClass();
+	}
+};
+
 class JavaObjectMethod : public JavaObject {
 private:
   uint8 flag;
-  JavaObjectClass* declaringClass;
-  JavaObject* name;
-  uint32 slot;
+  JavaObject* p;
+  JavaObjectVMMethod* vmMethod;
 
 public:
   
   static void staticTracer(JavaObjectMethod* obj, word_t closure) {
-    vmkit::Collector::markAndTrace(obj, &obj->name, closure);
-    vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure);
+    vmkit::Collector::markAndTrace(obj, &obj->p, closure);
+    vmkit::Collector::markAndTrace(obj, &obj->vmMethod, closure);
   }
   
   static JavaMethod* getInternalMethod(JavaObjectMethod* self);
   
   static UserClass* getClass(JavaObjectMethod* self) {
     llvm_gcroot(self, 0);
-    UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass); 
-    return cls->asClass();
+    return JavaObjectVMMethod::getClass(self->vmMethod);
   }
 
   static JavaObjectMethod* createFromInternalMethod(JavaMethod* meth, int i);
 };
 
-class JavaObjectConstructor : public JavaObject {
+
+class JavaObjectVMConstructor : public JavaObject {
 private:
-  uint8 flag;
   JavaObjectClass* declaringClass;
   uint32 slot;
 
 public:
-  static void staticTracer(JavaObjectConstructor* obj, word_t closure) {
+  static void staticTracer(JavaObjectVMConstructor* obj, word_t closure) {
     vmkit::Collector::markAndTrace(obj, &obj->declaringClass, closure);
   }
+
+  static JavaMethod* getInternalMethod(JavaObjectVMConstructor* self);
+
+  static UserClass* getClass(JavaObjectVMConstructor* self) {
+    llvm_gcroot(self, 0);
+    UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+    return cls->asClass();
+  }
+};
+
+class JavaObjectConstructor : public JavaObject {
+private:
+  uint8 flag;
+  JavaObject* p;
+  JavaObjectVMConstructor* vmCons;
+
+public:
+  static void staticTracer(JavaObjectConstructor* obj, word_t closure) {
+    vmkit::Collector::markAndTrace(obj, &obj->p, closure);
+    vmkit::Collector::markAndTrace(obj, &obj->vmCons, closure);
+  }
   
   static JavaMethod* getInternalMethod(JavaObjectConstructor* self);
   
@@ -157,7 +218,6 @@ public:
   static void setVmdata(JavaObjectVMThread* vmthread,
                         JavaThread* internal_thread) {
     llvm_gcroot(vmthread, 0);
-    assert(internal_thread && "Invalid internal thread");
     vmthread->vmdata = internal_thread;
   }
 

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc?rev=180327&r1=180326&r2=180327&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc Thu Apr 25 11:55:30 2013
@@ -56,6 +56,13 @@ void start(JavaThread* thread) {
   
   javaThread = thread->javaThread;
   assert(javaThread && "Didn't fix the javaThread of a j3 thread");
+  // If the thread is not a daemon, it is added to the list of threads to
+  // wait until exit.
+  bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread);
+
+  if (!isDaemon) {
+    vm->threadSystem.enter();
+  }
  
   assert(vmThread->getVirtualTable());
   assert(javaThread->getVirtualTable());
@@ -63,7 +70,6 @@ void start(JavaThread* thread) {
   vm->upcalls->runVMThread->invokeIntSpecial(vm, vmthClass, vmThread);
  
   // Remove the thread from the list.
-  bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread);
   if (!isDaemon) {
     vm->threadSystem.leave();
   }
@@ -89,15 +95,6 @@ JavaObject* vmThread, sint64 stackSize)
  
   JavaThread* th = new JavaThread(vm);
   if (!th) vm->outOfMemoryError();
-
-  // If the thread is not a daemon, it is added to the list of threads to
-  // wait until exit.
-  bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread);
-
-  if (!isDaemon) {
-    vm->threadSystem.enter();
-  }
-
   th->start((void (*)(vmkit::Thread*))start);
   // Now that the thread has been created, initialise its object fields.
   th->initialise(javaThread, vmThread);

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=180327&r1=180326&r2=180327&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 11:55:30 2013
@@ -535,6 +535,14 @@ void start(JavaThread* thread) {
   javaThread = thread->javaThread;
   assert(javaThread && "Didn't fix the javaThread of a j3 thread");
 
+  // If the thread is not a daemon, it is added to the list of threads to
+  // wait until exit.
+  bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread);
+
+  if (!isDaemon) {
+    vm->threadSystem.enter();
+  }
+
   assert(javaThread->getVirtualTable());
 
   // Get the class for this Thread
@@ -584,7 +592,6 @@ void start(JavaThread* thread) {
   JavaObject::release(javaThread);
 
   // Remove the thread from the list.
-  bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread);
   if (!isDaemon) {
     vm->threadSystem.leave();
   }
@@ -619,14 +626,6 @@ JVM_StartThread(JNIEnv *env, jobject _th
   // Set the eetop field
   vm->upcalls->eetop->setInstanceLongField(thread, (long)newTh);
 
-  // If the thread is not a daemon, it is added to the list of threads to
-  // wait until exit.
-  bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread);
-
-  if (!isDaemon) {
-    vm->threadSystem.enter();
-  }
-
   newTh->start((void (*)(vmkit::Thread*))start);
 
   newTh->initialise(thread, sleepObject);

Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180327&r1=180326&r2=180327&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 11:55:30 2013
@@ -18,6 +18,7 @@
 #include "JavaArray.h"
 #include "JavaClass.h"
 #include "JavaCompiler.h"
+#include "JavaString.h"
 #include "JavaConstantPool.h"
 #include "JavaObject.h"
 #include "JavaThread.h"
@@ -29,6 +30,15 @@
 
 #include <cstring>
 
+#if 0
+using namespace vmkit;
+#define dprintf(...) do { printf("JavaClass: "); printf(__VA_ARGS__); } while(0)
+#define ddprintf(...) do { printf(__VA_ARGS__); } while(0)
+#else
+#define dprintf(...)
+#define ddprintf(...)
+#endif
+
 using namespace j3;
 using namespace std;
 
@@ -333,6 +343,8 @@ JavaMethod* Class::lookupSpecialMethodDo
 JavaMethod* Class::lookupMethodDontThrow(const UTF8* name, const UTF8* type,
                                          bool isStatic, bool recurse,
                                          Class** methodCl) {
+  // This is a dirty hack because of a dirty usage pattern. See UPCALL_METHOD macro...
+  if (this == NULL) return NULL;
   
   JavaMethod* methods = 0;
   uint32 nb = 0;
@@ -1710,6 +1722,15 @@ void AnnotationReader::readAnnotation()
   AnnotationNameIndex = typeIndex;
 }
 
+void AnnotationReader::readAnnotationElementValues() {
+  uint16 numPairs = reader.readU2();
+
+  for (uint16 j = 0; j < numPairs; ++j) {
+    reader.readU2();
+    readElementValue();
+  }
+}
+
 void AnnotationReader::readElementValue() {
   uint8 tag = reader.readU1();
   if ((tag == 'B') || (tag == 'C') || (tag == 'D') || (tag == 'F') ||
@@ -1731,6 +1752,135 @@ void AnnotationReader::readElementValue(
   }
 }
 
+JavaObject* AnnotationReader::createElementValue() {
+  uint8 tag = reader.readU1();
+  JavaObject* res = 0;
+  JavaObject* tmp = 0;
+  llvm_gcroot(res, 0);
+  llvm_gcroot(tmp, 0);
+	
+	Jnjvm* vm = JavaThread::get()->getJVM();
+  Classpath* upcalls = JavaThread::get()->getJVM()->upcalls;
+  ddprintf("value:");
+
+  if (tag == 'B') {
+    uint32 val = cl->ctpInfo->IntegerAt(reader.readU2());
+    ddprintf("B=%d", val);
+    res = upcalls->boolClass->doNew(vm);
+    upcalls->boolValue->setInstanceInt8Field(res, val);
+
+  } else if (tag == 'C') {
+    uint32 val = cl->ctpInfo->IntegerAt(reader.readU2());
+    ddprintf("C=%c", val);
+    res = upcalls->intClass->doNew(vm);
+    upcalls->intValue->setInstanceInt32Field(res, val);
+
+  } else if (tag == 'D') {
+    double val = cl->ctpInfo->DoubleAt(reader.readU2());
+    ddprintf("D=%f", val);
+    res = upcalls->doubleClass->doNew(vm);
+    upcalls->doubleValue->setInstanceDoubleField(res, val);
+
+  } else if (tag == 'F') {
+    float val = cl->ctpInfo->FloatAt(reader.readU2());
+    ddprintf("F=%f", val);
+    res = upcalls->floatClass->doNew(vm);
+    upcalls->floatValue->setInstanceFloatField(res, val);
+
+  } else if (tag == 'J') {
+    sint64 val = cl->ctpInfo->LongAt(reader.readU2());
+    ddprintf("J=%lld", val);
+    res = upcalls->longClass->doNew(vm);
+    upcalls->longValue->setInstanceLongField(res, val);
+
+  } else if (tag == 'S') {
+    uint32 val = cl->ctpInfo->IntegerAt(reader.readU2());
+    ddprintf("S=%d", val);
+    res = upcalls->shortClass->doNew(vm);
+    upcalls->shortValue->setInstanceInt16Field(res, val);
+    
+  } else if (tag == 'I') {
+    uint32 val = cl->ctpInfo->IntegerAt(reader.readU2());
+    ddprintf("I=%d", val);
+    res = upcalls->intClass->doNew(vm);
+    upcalls->intValue->setInstanceInt32Field(res, val);
+
+  } else if (tag == 'Z') {
+    bool val = cl->ctpInfo->IntegerAt(reader.readU2());
+    ddprintf("Z=%d", val);
+    res = upcalls->boolClass->doNew(vm);
+    upcalls->boolValue->setInstanceInt8Field(res, val);
+
+  } else if (tag == 's') {
+    const UTF8* s = cl->ctpInfo->UTF8At(reader.readU2());
+    ddprintf("s=%s", PrintBuffer(s).cString());
+    res = JavaString::internalToJava(s, JavaThread::get()->getJVM());
+
+  } else if (tag == 'e') {
+    // Element_value Enumeration not implemented
+    const UTF8* n = cl->ctpInfo->UTF8At(reader.readU2());
+    ddprintf("%s", PrintBuffer(n).cString());
+    const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2());
+    ddprintf("%s", PrintBuffer(m).cString());
+    fprintf(stderr, "Annotation not supported for %c type\n", tag);
+    abort();
+
+  } else if (tag == 'c') {
+    ddprintf("class=");
+    const UTF8* m = cl->ctpInfo->UTF8At(reader.readU2());
+    ddprintf("%s", PrintBuffer(m).cString());
+
+  } else if (tag == '[') {
+    uint16 numValues = reader.readU2();
+    UserClassArray* array = upcalls->annotationArrayClass;
+    res = array->doNew(numValues, vm);
+
+    ddprintf("Tableau de %d elements\n", numValues);
+    for (uint32 i = 0; i < numValues; ++i) {
+      tmp = createElementValue();
+      ArrayObject::setElement((ArrayObject *)res, tmp, i);
+    }
+    ddprintf("Fin du Tableau");
+  } else {
+    // Element_value Annotation not implemented
+    fprintf(stderr, "Annotation not supported for %c type\n", tag);
+    abort();
+  }
+  ddprintf("\n");
+
+  return res;
+}
+
+JavaObject* AnnotationReader::createAnnotationMapValues() {
+  std::pair<JavaObject*, JavaObject*> pair;
+  JavaObject* tmp = 0;
+  JavaString* str = 0;
+  JavaObject* newHashMap = 0;
+  llvm_gcroot(tmp, 0);
+  llvm_gcroot(str, 0);
+  llvm_gcroot(newHashMap, 0);
+
+	Jnjvm * vm = JavaThread::get()->getJVM();
+  Classpath* upcalls = vm->upcalls;
+  UserClass* HashMap = upcalls->newHashMap;
+  newHashMap = HashMap->doNew(vm);
+  upcalls->initHashMap->invokeIntSpecial(vm, HashMap, newHashMap);
+
+  uint16 numPairs = reader.readU2();
+  dprintf("numPairs:%d\n", numPairs);
+  for (uint16 j = 0; j < numPairs; ++j) {
+    uint16 nameIndex = reader.readU2();
+    const UTF8* key = cl->ctpInfo->UTF8At(nameIndex);
+    dprintf("keyAn:%s|", PrintBuffer(key).cString());
+
+    tmp = createElementValue();
+    str = JavaString::internalToJava(key, JavaThread::get()->getJVM());
+    upcalls->putHashMap->invokeJavaObjectVirtual(vm, HashMap, newHashMap, &str, &tmp);
+  }
+
+  return newHashMap;
+}
+
 uint16 JavaMethod::lookupLineNumber(vmkit::FrameInfo* info) {
   JavaAttribute* codeAtt = lookupAttribute(JavaAttribute::codeAttribute);      
   if (codeAtt == NULL) return 0;

Modified: vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp?rev=180327&r1=180326&r2=180327&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-alloc/Selected.cpp Thu Apr 25 11:55:30 2013
@@ -55,13 +55,40 @@ extern "C" void JnJVM_org_j3_bindings_Bi
   
 extern "C" void JnJVM_org_j3_bindings_Bindings_nonHeapWriteBarrier__Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(gc** ptr, gc* value) ALWAYS_INLINE;
 
-extern "C" void* JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(
-    int sz, void* VT) ALWAYS_INLINE;
+extern "C" void* JnJVM_org_j3_bindings_Bindings_prealloc__I(int sz) ALWAYS_INLINE;
 
-extern "C" void* gcmalloc(uint32_t sz, void* VT) {
+extern "C" void* JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(
+		void* object, void* type, int sz) ALWAYS_INLINE;
+
+extern "C" void* prealloc(uint32_t size) {
+	gc* res = 0;
+  gcHeader* head = 0;
+  size = llvm::RoundUpToAlignment(size, sizeof(void*));
+  head = (gcHeader*) JnJVM_org_j3_bindings_Bindings_prealloc__I(size);
+  res = head->toReference();
+  return res;
+}
+
+extern "C" void postalloc(gc* obj, void* type, uint32_t size) {
+	vmkit::Thread::get()->MyVM->setType(obj->toHeader(), type);
+	JnJVM_org_j3_bindings_Bindings_postalloc__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_ObjectReference_2I(obj, type, size);
+}
+
+extern "C" void* gcmalloc(uint32_t sz, void* type) {
+  gc* res = 0;
+  llvm_gcroot(res, 0);
 	sz += gcHeader::hiddenHeaderSize();
-  sz = llvm::RoundUpToAlignment(sz, sizeof(void*));
-  return ((gcHeader*)JnJVM_org_j3_bindings_Bindings_gcmalloc__ILorg_vmmagic_unboxed_ObjectReference_2(sz, VT))->toReference();
+	res = (gc*) prealloc(sz);
+	postalloc(res, type, sz);
+	return res;
+}
+
+extern "C" void* gcmallocUnresolved(uint32_t sz, void* type) {
+  gc* res = 0;
+  llvm_gcroot(res, 0);
+  res = (gc*)gcmalloc(sz, type);
+	vmkit::Thread::get()->MyVM->addFinalizationCandidate(res);
+  return res;
 }
 
 extern "C" void addFinalizationCandidate(gc* obj) __attribute__((always_inline));
@@ -71,13 +98,6 @@ extern "C" void addFinalizationCandidate
   vmkit::Thread::get()->MyVM->addFinalizationCandidate(obj);
 }
 
-extern "C" void* gcmallocUnresolved(uint32_t sz, VirtualTable* VT) {
-  gc* res = 0;
-  llvm_gcroot(res, 0);
-  res = (gc*)gcmalloc(sz, VT);
-  if (VT->hasDestructor()) addFinalizationCandidate(res);
-  return res;
-}
 
 extern "C" void arrayWriteBarrier(void* ref, void** ptr, void* value) {
   JnJVM_org_j3_bindings_Bindings_arrayWriteBarrier__Lorg_vmmagic_unboxed_ObjectReference_2Lorg_vmmagic_unboxed_Address_2Lorg_vmmagic_unboxed_ObjectReference_2(

Modified: vmkit/trunk/tools/precompiler/trainer/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/trainer/Makefile?rev=180327&r1=180326&r2=180327&view=diff
==============================================================================
--- vmkit/trunk/tools/precompiler/trainer/Makefile (original)
+++ vmkit/trunk/tools/precompiler/trainer/Makefile Thu Apr 25 11:55:30 2013
@@ -19,7 +19,7 @@ include $(LEVEL)/Makefile.common
 PRECOMPILER := $(ToolDir)/precompiler$(EXEEXT)
 
 ifndef VERBOSE
-#  J3.Flags := > /dev/null
+  J3.Flags := > /dev/null
 endif
 
 HelloWorld.class: HelloWorld.java





More information about the vmkit-commits mailing list