[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