[vmkit-commits] [vmkit] r139532 - in /vmkit/trunk/lib/J3: Classpath/ClasspathVMClass.inc Classpath/JavaUpcalls.cpp Classpath/JavaUpcalls.h Compiler/JavaJITCompiler.cpp VMCore/JavaClass.cpp VMCore/JavaRuntimeJIT.cpp VMCore/Jnjvm.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Mon Sep 12 13:19:54 PDT 2011
Author: geoffray
Date: Mon Sep 12 15:19:54 2011
New Revision: 139532
URL: http://llvm.org/viewvc/llvm-project?rev=139532&view=rev
Log:
Some small compatibility fixes.
Modified:
vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc
vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp
vmkit/trunk/lib/J3/Classpath/JavaUpcalls.h
vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp
vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp
vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
Modified: vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc?rev=139532&r1=139531&r2=139532&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc (original)
+++ vmkit/trunk/lib/J3/Classpath/ClasspathVMClass.inc Mon Sep 12 15:19:54 2011
@@ -168,6 +168,7 @@
JavaMethod* meth = &realCl->virtualMethods[i];
bool pub = isPublic(meth->access);
if (!(meth->name->equals(classLoader->bootstrapLoader->initName)) &&
+ !(meth->name->equals(classLoader->bootstrapLoader->clinitName)) &&
(!publicOnly || pub)) {
++size;
}
@@ -182,6 +183,7 @@
JavaMethod* meth = &realCl->virtualMethods[i];
bool pub = isPublic(meth->access);
if (!(meth->name->equals(classLoader->bootstrapLoader->initName)) &&
+ !(meth->name->equals(classLoader->bootstrapLoader->clinitName)) &&
(!publicOnly || pub)) {
// TODO: check parameter types
UserClass* Meth = vm->upcalls->newMethod;
Modified: vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp?rev=139532&r1=139531&r2=139532&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp Mon Sep 12 15:19:54 2011
@@ -37,6 +37,7 @@
JavaField* Classpath::vmdataVMThread;
JavaMethod* Classpath::finaliseCreateInitialThread;
JavaMethod* Classpath::initVMThread;
+JavaMethod* Classpath::initThread;
JavaMethod* Classpath::groupAddThread;
JavaField* Classpath::threadName;
JavaField* Classpath::groupName;
@@ -48,6 +49,7 @@
Class* Classpath::threadGroup;
JavaField* Classpath::rootGroup;
JavaField* Classpath::vmThread;
+JavaMethod* Classpath::getUncaughtExceptionHandler;
JavaMethod* Classpath::uncaughtException;
Class* Classpath::inheritableThreadLocal;
@@ -240,10 +242,8 @@
myth->javaThread = th;
vmth = (JavaObjectVMThread*)newVMThread->doNew(vm);
name = vm->asciizToStr(thName);
-
- threadName->setInstanceObjectField(th, name);
- priority->setInstanceInt32Field(th, (uint32)1);
- daemon->setInstanceInt8Field(th, (uint32)0);
+
+ initThread->invokeIntSpecial(vm, newThread, th, &vmth, &name, 1, 0);
vmThread->setInstanceObjectField(th, vmth);
assocThread->setInstanceObjectField(vmth, th);
running->setInstanceInt8Field(vmth, (uint32)1);
@@ -862,6 +862,10 @@
UPCALL_METHOD(loader, "java/lang/InheritableThreadLocal", "newChildThread",
"(Ljava/lang/Thread;)V", ACC_STATIC);
+ initThread =
+ UPCALL_METHOD(loader, "java/lang/Thread", "<init>",
+ "(Ljava/lang/VMThread;Ljava/lang/String;IZ)V", ACC_VIRTUAL);
+
initVMThread =
UPCALL_METHOD(loader, "java/lang/VMThread", "<init>",
"(Ljava/lang/Thread;)V", ACC_VIRTUAL);
@@ -911,8 +915,13 @@
UPCALL_FIELD(loader, "java/lang/Thread", "vmThread",
"Ljava/lang/VMThread;", ACC_VIRTUAL);
+ getUncaughtExceptionHandler =
+ UPCALL_METHOD(loader, "java/lang/Thread", "getUncaughtExceptionHandler",
+ "()Ljava/lang/Thread$UncaughtExceptionHandler;", ACC_VIRTUAL);
+
uncaughtException =
- UPCALL_METHOD(loader, "java/lang/ThreadGroup", "uncaughtException",
+ UPCALL_METHOD(loader, "java/lang/Thread$UncaughtExceptionHandler",
+ "uncaughtException",
"(Ljava/lang/Thread;Ljava/lang/Throwable;)V", ACC_VIRTUAL);
Modified: vmkit/trunk/lib/J3/Classpath/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/JavaUpcalls.h?rev=139532&r1=139531&r2=139532&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/J3/Classpath/JavaUpcalls.h Mon Sep 12 15:19:54 2011
@@ -137,6 +137,7 @@
ISOLATE_STATIC JavaField* assocThread;
ISOLATE_STATIC JavaField* vmdataVMThread;
ISOLATE_STATIC JavaMethod* finaliseCreateInitialThread;
+ ISOLATE_STATIC JavaMethod* initThread;
ISOLATE_STATIC JavaMethod* initVMThread;
ISOLATE_STATIC JavaMethod* runVMThread;
ISOLATE_STATIC JavaMethod* groupAddThread;
@@ -150,6 +151,7 @@
ISOLATE_STATIC UserClass* threadGroup;
ISOLATE_STATIC JavaField* rootGroup;
ISOLATE_STATIC JavaField* vmThread;
+ ISOLATE_STATIC JavaMethod* getUncaughtExceptionHandler;
ISOLATE_STATIC JavaMethod* uncaughtException;
ISOLATE_STATIC UserClass* inheritableThreadLocal;
Modified: vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp?rev=139532&r1=139531&r2=139532&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp (original)
+++ vmkit/trunk/lib/J3/Compiler/JavaJITCompiler.cpp Mon Sep 12 15:19:54 2011
@@ -217,7 +217,28 @@
}
extern "C" void ThrowUnfoundInterface() {
- abort();
+ JavaThread *th = JavaThread::get();
+
+ BEGIN_NATIVE_EXCEPTION(1);
+
+ // Lookup the caller of this class.
+ mvm::StackWalker Walker(th);
+ mvm::FrameInfo* FI = Walker.get();
+ assert(FI->Metadata != NULL && "Wrong stack trace");
+ JavaMethod* meth = (JavaMethod*)FI->Metadata;
+
+ // Lookup the method info in the constant pool of the caller.
+ uint16 ctpIndex = meth->lookupCtpIndex(FI);
+ assert(ctpIndex && "No constant pool index");
+ JavaConstantPool* ctpInfo = meth->classDef->getConstantPool();
+ CommonClass* ctpCl = 0;
+ const UTF8* utf8 = 0;
+ Signdef* sign = 0;
+ ctpInfo->resolveMethod(ctpIndex, ctpCl, utf8, sign);
+
+ JavaThread::get()->getJVM()->abstractMethodError(ctpCl, utf8);
+
+ END_NATIVE_EXCEPTION
}
void JavaJITCompiler::makeIMT(Class* cl) {
Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=139532&r1=139531&r2=139532&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Mon Sep 12 15:19:54 2011
@@ -247,7 +247,8 @@
uint32 size = JavaVirtualTable::getBaseSize();
virtualVT = new(loader->allocator, size) JavaVirtualTable(this);
- access = ACC_FINAL | ACC_ABSTRACT | ACC_PUBLIC | JNJVM_ARRAY;
+ access = ACC_FINAL | ACC_ABSTRACT | JNJVM_ARRAY | base->getAccess();
+ access &= ~ACC_INTERFACE;
}
JavaObject* UserClassArray::doNew(sint32 n, Jnjvm* vm) {
Modified: vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp?rev=139532&r1=139531&r2=139532&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaRuntimeJIT.cpp Mon Sep 12 15:19:54 2011
@@ -579,6 +579,10 @@
UserClass* lookup = cl->isArray() ? cl->super : cl->asClass();
JavaMethod* Virt = lookup->lookupMethod(utf8, sign->keyName, false, true, 0);
+ if (isAbstract(Virt->access)) {
+ JavaThread::get()->getJVM()->abstractMethodError(Virt->classDef, Virt->name);
+ }
+
// Compile the found method.
result = Virt->compiledPtr();
@@ -678,6 +682,9 @@
if (!callee) {
th->getJVM()->noSuchMethodError(lookup, utf8);
}
+ if (isAbstract(callee->access)) {
+ JavaThread::get()->getJVM()->abstractMethodError(callee->classDef, callee->name);
+ }
// Compile the found method.
result = callee->compiledPtr();
Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=139532&r1=139531&r2=139532&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Mon Sep 12 15:19:54 2011
@@ -506,7 +506,7 @@
ArrayUInt16::setElement(msg, '.', i);
i++;
} else {
- ArrayUInt16::setElement(msg, cl->name->elements[i], i);
+ ArrayUInt16::setElement(msg, cl->name->elements[j], i);
i++;
}
}
@@ -1166,12 +1166,12 @@
void Jnjvm::executeClass(const char* className, ArrayObject* args) {
JavaObject* exc = NULL;
JavaObject* obj = NULL;
- JavaObject* group = NULL;
+ JavaObject* handler = NULL;
llvm_gcroot(args, 0);
llvm_gcroot(exc, 0);
llvm_gcroot(obj, 0);
- llvm_gcroot(group, 0);
+ llvm_gcroot(handler, 0);
TRY {
// First try to see if we are a self-contained executable.
@@ -1203,10 +1203,10 @@
JavaThread* th = JavaThread::get();
th->clearException();
obj = th->currentThread();
- group = upcalls->group->getInstanceObjectField(obj);
TRY {
- upcalls->uncaughtException->invokeIntSpecial(this, upcalls->threadGroup,
- group, &obj, &exc);
+ handler = upcalls->getUncaughtExceptionHandler->invokeJavaObjectVirtual(this, upcalls->newThread, obj);
+ verifyNull(handler);
+ upcalls->uncaughtException->invokeIntVirtual(this, upcalls->uncaughtException->classDef, handler, &obj, &exc);
} CATCH {
fprintf(stderr, "Exception in thread \"main\": "
"Can not print stack trace.\n");
More information about the vmkit-commits
mailing list