[vmkit-commits] [vmkit] r76561 - in /vmkit/trunk/lib/JnJVM/VMCore: JNIReferences.h JavaObject.h Jnjvm.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jul 21 03:34:05 PDT 2009
Author: geoffray
Date: Tue Jul 21 05:33:22 2009
New Revision: 76561
URL: http://llvm.org/viewvc/llvm-project?rev=76561&view=rev
Log:
Add more llvm_gcroot's.
Modified:
vmkit/trunk/lib/JnJVM/VMCore/JNIReferences.h
vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
Modified: vmkit/trunk/lib/JnJVM/VMCore/JNIReferences.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JNIReferences.h?rev=76561&r1=76560&r2=76561&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JNIReferences.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JNIReferences.h Tue Jul 21 05:33:22 2009
@@ -10,6 +10,8 @@
#ifndef JNI_REFERENCES_H
#define JNI_REFERENCES_H
+#include "mvm/Allocator.h"
+
namespace jnjvm {
class JavaObject;
@@ -58,6 +60,7 @@
}
JavaObject** addJNIReference(JavaObject* obj) {
+ llvm_gcroot(obj, 0);
if (length == MAXIMUM_REFERENCES) {
if (!next) {
next = new JNIGlobalReferences();
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h?rev=76561&r1=76560&r2=76561&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h Tue Jul 21 05:33:22 2009
@@ -49,6 +49,7 @@
/// acquire - Acquires the lock.
///
void acquire() {
+ llvm_gcroot(this, 0);
lock.lock();
}
@@ -60,6 +61,7 @@
/// acquireAll - Acquires the lock nb times.
void acquireAll(uint32 nb) {
+ llvm_gcroot(this, 0);
lock.lockAll(nb);
}
@@ -299,6 +301,7 @@
/// acquire - Acquire the lock on this object.
void acquire() {
+ llvm_gcroot(this, 0);
lock.acquire();
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=76561&r1=76560&r2=76561&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Tue Jul 21 05:33:22 2009
@@ -157,8 +157,11 @@
}
}
-#ifdef SERVICE
JavaObject* exc = 0;
+ JavaObject* obj = 0;
+ llvm_gcroot(exc, 0);
+ llvm_gcroot(obj, 0);
+#ifdef SERVICE
if (classLoader == classLoader->bootstrapLoader ||
classLoader->getIsolate() == vm) {
#endif
@@ -188,7 +191,6 @@
vm->bootstrapLoader->clinitType,
true, false, 0);
- JavaObject* exc = 0;
if (meth) {
try{
meth->invokeIntStatic(vm, cl);
@@ -226,7 +228,7 @@
Classpath* upcalls = classLoader->bootstrapLoader->upcalls;
UserClass* clExcp = upcalls->ExceptionInInitializerError;
Jnjvm* vm = self->getJVM();
- JavaObject* obj = clExcp->doNew(vm);
+ obj = clExcp->doNew(vm);
if (!obj) {
fprintf(stderr, "implement me");
abort();
@@ -251,6 +253,7 @@
void Jnjvm::errorWithExcp(UserClass* cl, JavaMethod* init,
const JavaObject* excp) {
JavaObject* obj = cl->doNew(this);
+ llvm_gcroot(obj, 0);
init->invokeIntSpecial(this, cl, obj, excp);
JavaThread::get()->throwException(obj);
}
@@ -435,6 +438,7 @@
Jnjvm* vm) {
ArrayUInt16* msg = (ArrayUInt16*)
vm->upcalls->ArrayOfChar->doNew(19 + cl->name->size + name->size, vm);
+
uint32 i = 0;
@@ -630,6 +634,7 @@
JavaString* Jnjvm::internalUTF8ToStr(const UTF8* utf8) {
uint32 size = utf8->size;
ArrayUInt16* tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this);
+ llvm_gcroot(tmp, 0);
uint16* buf = tmp->elements;
for (uint32 i = 0; i < size; i++) {
@@ -657,12 +662,18 @@
// Mimic what's happening in Classpath when creating a java.lang.Class object.
JavaObject* UserCommonClass::getClassDelegatee(Jnjvm* vm, JavaObject* pd) {
+ JavaObjectClass* delegatee = 0;
+ JavaObjectClass* base = 0;
+ llvm_gcroot(pd, 0);
+ llvm_gcroot(delegatee, 0);
+ llvm_gcroot(base, 0);
+
if (!getDelegatee()) {
UserClass* cl = vm->upcalls->newClass;
- JavaObjectClass* delegatee = (JavaObjectClass*)cl->doNew(vm);
+ delegatee = (JavaObjectClass*)cl->doNew(vm);
delegatee->vmdata = this;
if (!pd && isArray()) {
- JavaObjectClass* base = (JavaObjectClass*)
+ base = (JavaObjectClass*)
asArrayClass()->baseClass()->getClassDelegatee(vm, pd);
delegatee->pd = base->pd;
} else {
@@ -679,6 +690,11 @@
return getDelegateePtr();
}
+//===----------------------------------------------------------------------===//
+// The command line parsing tool does not manipulate any GC-allocated objects.
+//
+//===----------------------------------------------------------------------===//
+
#define PATH_MANIFEST "META-INF/MANIFEST.MF"
#define MAIN_CLASS "Main-Class: "
#define MAIN_LOWER_CLASS "Main-class: "
@@ -942,10 +958,12 @@
JnjvmClassLoader* Jnjvm::loadAppClassLoader() {
+ JavaObject* loader = 0;
+ llvm_gcroot(loader, 0);
+
if (appClassLoader == 0) {
UserClass* cl = upcalls->newClassLoader;
- JavaObject* loader =
- upcalls->getSystemClassLoader->invokeJavaObjectStatic(this, cl);
+ loader = upcalls->getSystemClassLoader->invokeJavaObjectStatic(this, cl);
appClassLoader = JnjvmClassLoader::getJnjvmLoaderFromJavaObject(loader,
this);
if (argumentsInfo.jarFile)
@@ -1072,6 +1090,15 @@
}
void Jnjvm::executeClass(const char* className, ArrayObject* args) {
+ JavaObject* exc = 0;
+ JavaObject* obj = 0;
+ JavaObject* group = 0;
+
+ llvm_gcroot(args, 0);
+ llvm_gcroot(ex, 0);
+ llvm_gcroot(obj, 0);
+ llvm_gcroot(group, 0);
+
try {
// First try to see if we are a self-contained executable.
@@ -1094,13 +1121,12 @@
}catch(...) {
}
- JavaObject* exc = JavaThread::get()->pendingException;
+ exc = JavaThread::get()->pendingException;
if (exc) {
JavaThread* th = JavaThread::get();
th->clearException();
- JavaObject* obj = th->currentThread();
- JavaObject* group =
- upcalls->group->getObjectField(obj);
+ obj = th->currentThread();
+ group = upcalls->group->getObjectField(obj);
try{
upcalls->uncaughtException->invokeIntSpecial(this, upcalls->threadGroup,
group, obj, exc);
@@ -1113,6 +1139,7 @@
void Jnjvm::executePremain(const char* className, JavaString* args,
JavaObject* instrumenter) {
+ llvm_gcroot(instrumenter, 0);
try {
const UTF8* name = appClassLoader->asciizConstructUTF8(className);
UserClass* cl = (UserClass*)appClassLoader->loadName(name, true, true);
@@ -1143,6 +1170,15 @@
}
void Jnjvm::mainJavaStart(JavaThread* thread) {
+
+ JavaString* str = 0;
+ JavaObject* instrumenter = 0;
+ ArrayObject* args = 0;
+
+ llvm_gcroot(str, 0);
+ llvm_gcroot(instrumenter, 0);
+ llvm_gcroot(args, 0);
+
Jnjvm* vm = thread->getJVM();
vm->mainThread = thread;
@@ -1156,17 +1192,17 @@
if (info.agents.size()) {
assert(0 && "implement me");
- JavaObject* instrumenter = 0;//createInstrumenter();
+ instrumenter = 0;//createInstrumenter();
for (std::vector< std::pair<char*, char*> >::iterator i =
info.agents.begin(),
e = info.agents.end(); i!= e; ++i) {
- JavaString* args = vm->asciizToStr(i->second);
- vm->executePremain(i->first, args, instrumenter);
+ str = vm->asciizToStr(i->second);
+ vm->executePremain(i->first, str, instrumenter);
}
}
UserClassArray* array = vm->bootstrapLoader->upcalls->ArrayOfString;
- ArrayObject* args = (ArrayObject*)array->doNew(info.argc - 2, vm);
+ args = (ArrayObject*)array->doNew(info.argc - 2, vm);
for (int i = 2; i < info.argc; ++i) {
args->elements[i - 2] = (JavaObject*)vm->asciizToStr(info.argv[i]);
}
More information about the vmkit-commits
mailing list