[vmkit-commits] [vmkit] r76552 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaRuntimeJIT.cpp JavaString.cpp JavaThread.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jul 21 01:52:21 PDT 2009
Author: geoffray
Date: Tue Jul 21 03:52:02 2009
New Revision: 76552
URL: http://llvm.org/viewvc/llvm-project?rev=76552&view=rev
Log:
Add llvm_gcroot's.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=76552&r1=76551&r2=76552&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Tue Jul 21 03:52:02 2009
@@ -28,6 +28,8 @@
// Throws if the method is not found.
extern "C" void* jnjvmInterfaceLookup(CacheNode* cache, JavaObject *obj) {
+ llvm_gcroot(obj, 0);
+
void* res = 0;
BEGIN_NATIVE_EXCEPTION(1)
@@ -285,6 +287,7 @@
// Calls Java code.
extern "C" JavaObject* jnjvmRuntimeDelegatee(UserCommonClass* cl) {
JavaObject* res = 0;
+ llvm_gcroot(res, 0);
BEGIN_NATIVE_EXCEPTION(1)
Jnjvm* vm = JavaThread::get()->getJVM();
@@ -303,9 +306,14 @@
static JavaArray* multiCallNewIntern(UserClassArray* cl, uint32 len,
sint32* dims, Jnjvm* vm) {
assert(len > 0 && "Negative size given by VMKit");
+
JavaArray* _res = cl->doNew(dims[0], vm);
+ ArrayObject* res = 0;
+ llvm_gcroot(_res, 0);
+ llvm_gcroot(res, 0);
+
if (len > 1) {
- ArrayObject* res = (ArrayObject*)_res;
+ res = (ArrayObject*)_res;
UserCommonClass* _base = cl->baseClass();
assert(_base->isArray() && "Base class not an array");
UserClassArray* base = (UserClassArray*)_base;
@@ -327,6 +335,7 @@
// Throws if one of the dimension is negative.
extern "C" JavaArray* jnjvmMultiCallNew(UserClassArray* cl, uint32 len, ...) {
JavaArray* res = 0;
+ llvm_gcroot(res, 0);
BEGIN_NATIVE_EXCEPTION(1)
@@ -414,11 +423,13 @@
// Never throws.
extern "C" void jnjvmJavaObjectAquire(JavaObject* obj) {
+ llvm_gcroot(obj, 0);
obj->acquire();
}
// Never throws.
extern "C" void jnjvmJavaObjectRelease(JavaObject* obj) {
+ llvm_gcroot(obj, 0);
obj->release();
}
@@ -537,6 +548,9 @@
extern "C" JavaObject* jnjvmClassCastException(JavaObject* obj,
UserCommonClass* cl) {
JavaObject *exc = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(exc, 0);
+
JavaThread *th = JavaThread::get();
BEGIN_NATIVE_EXCEPTION(1)
@@ -558,6 +572,9 @@
extern "C" JavaObject* jnjvmIndexOutOfBoundsException(JavaObject* obj,
sint32 index) {
JavaObject *exc = 0;
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(exc, 0);
+
JavaThread *th = JavaThread::get();
BEGIN_NATIVE_EXCEPTION(1)
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp?rev=76552&r1=76551&r2=76552&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp Tue Jul 21 03:52:02 2009
@@ -20,6 +20,8 @@
JavaVirtualTable* JavaString::internStringVT = 0;
JavaString* JavaString::stringDup(const ArrayUInt16*& array, Jnjvm* vm) {
+ llvm_gcroot(array, 0);
+
UserClass* cl = vm->upcalls->newString;
JavaString* res = (JavaString*)cl->doNew(vm);
@@ -47,6 +49,8 @@
}
const ArrayUInt16* JavaString::strToArray(Jnjvm* vm) {
+ llvm_gcroot(this, 0);
+
assert(value && "String without an array?");
if (offset || (count != value->size)) {
ArrayUInt16* array =
@@ -63,14 +67,20 @@
}
void JavaString::stringDestructor(JavaString* str) {
+ llvm_gcroot(str, 0);
+
Jnjvm* vm = JavaThread::get()->getJVM();
assert(vm && "No vm when destroying a string");
if (str->value) vm->hashStr.removeUnlocked(str->value, str);
}
JavaString* JavaString::internalToJava(const UTF8* name, Jnjvm* vm) {
- ArrayUInt16* array =
- (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(name->size, vm);
+
+ ArrayUInt16* array = 0;
+ llvm_gcroot(this, 0);
+ llvm_gcroot(array, 0);
+
+ array = (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(name->size, vm);
uint16* java = array->elements;
for (sint32 i = 0; i < name->size; i++) {
@@ -83,6 +93,8 @@
}
const UTF8* JavaString::javaToInternal(UTF8Map* map) const {
+ llvm_gcroot(this, 0);
+
uint16* java = (uint16*)alloca(sizeof(uint16) * count);
for (sint32 i = 0; i < count; ++i) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp?rev=76552&r1=76551&r2=76552&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaThread.cpp Tue Jul 21 03:52:02 2009
@@ -24,6 +24,9 @@
const unsigned int JavaThread::StateInterrupted = 2;
JavaThread::JavaThread(JavaObject* thread, JavaObject* vmth, Jnjvm* isolate) {
+ llvm_gcroot(thread, 0);
+ llvm_gcroot(vmth, 0);
+
javaThread = thread;
vmThread = vmth;
MyVM = isolate;
@@ -58,6 +61,7 @@
extern "C" void __cxa_throw(void*, void*, void*);
void JavaThread::throwException(JavaObject* obj) {
+ llvm_gcroot(obj, 0);
JavaThread* th = JavaThread::get();
assert(th->pendingException == 0 && "pending exception already there?");
th->pendingException = obj;
@@ -195,6 +199,10 @@
}
JavaObject* JavaThread::getNonNullClassLoader() {
+
+ JavaObject* obj = 0;
+ llvm_gcroot(obj, 0);
+
std::vector<void*>::iterator it = addresses.end();
// Loop until we cross the first Java frame.
@@ -210,7 +218,7 @@
void* ip = FRAME_IP(addr);
JavaMethod* meth = getJVM()->IPToMethod<JavaMethod>(ip);
JnjvmClassLoader* loader = meth->classDef->classLoader;
- JavaObject* obj = loader->getJavaClassLoader();
+ obj = loader->getJavaClassLoader();
if (obj) return obj;
addr = (void**)addr[0];
// We end walking the stack when we cross a native -> Java call. Here
@@ -298,6 +306,8 @@
JavaObject** JNILocalReferences::addJNIReference(JavaThread* th,
JavaObject* obj) {
+ llvm_gcroot(obj, 0);
+
if (length == MAXIMUM_REFERENCES) {
JNILocalReferences* next = new JNILocalReferences();
th->localJNIRefs = next;
More information about the vmkit-commits
mailing list