[vmkit-commits] [vmkit] r144090 - in /vmkit/trunk/lib/J3/ClassLib: ClassContext.inc GNUClasspath/ClasspathVMStackWalker.inc OpenJDK/OpenJDK.inc
Will Dietz
wdietz2 at illinois.edu
Tue Nov 8 09:33:57 PST 2011
Author: wdietz2
Date: Tue Nov 8 11:33:56 2011
New Revision: 144090
URL: http://llvm.org/viewvc/llvm-project?rev=144090&view=rev
Log:
Impl JVM_GetClassContext, refactor existing code into shared ClassContext.inc.
Also, fix ClassContext creation of wrong array type.
Added:
vmkit/trunk/lib/J3/ClassLib/ClassContext.inc
Modified:
vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc
vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
Added: vmkit/trunk/lib/J3/ClassLib/ClassContext.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/ClassContext.inc?rev=144090&view=auto
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/ClassContext.inc (added)
+++ vmkit/trunk/lib/J3/ClassLib/ClassContext.inc Tue Nov 8 11:33:56 2011
@@ -0,0 +1,36 @@
+//===------------ ClassContext.inc -- Implement GetClassContext -----------===//
+//
+// The VMKit project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+ArrayObject* GetClassContext() {
+ ArrayObject* result = NULL;
+ JavaObject* delegatee = NULL;
+ llvm_gcroot(result, 0);
+ llvm_gcroot(delegatee, 0);
+
+ JavaThread* th = JavaThread::get();
+ Jnjvm* vm = th->getJVM();
+ uint32 length = th->getFrameContextLength();
+
+ mvm::ThreadAllocator allocator;
+ uintptr_t* buffer = (uintptr_t*)allocator.Allocate(length * sizeof(uintptr_t));
+
+ uint32 finalSize = th->getJavaFrameContext((void**)buffer);
+
+ result = (ArrayObject*)
+ vm->upcalls->classArrayClass->doNew(finalSize, vm);
+
+ for (uint32 i = 0; i != finalSize; ++i) {
+ JavaMethod* meth = ((JavaMethod**)buffer)[i];
+ assert(meth && "Wrong stack trace");
+ delegatee = meth->classDef->getClassDelegatee(vm);;
+ ArrayObject::setElement(result, delegatee, i);
+ }
+
+ return result;
+}
Modified: vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc?rev=144090&r1=144089&r2=144090&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc Tue Nov 8 11:33:56 2011
@@ -19,6 +19,8 @@
#include "JavaUpcalls.h"
#include "Jnjvm.h"
+#include "ClassContext.inc"
+
using namespace j3;
extern "C" {
@@ -31,31 +33,12 @@
) {
ArrayObject* result = NULL;
- JavaObject* delegatee = NULL;
llvm_gcroot(result, 0);
- llvm_gcroot(delegatee, 0);
BEGIN_NATIVE_EXCEPTION(0)
- JavaThread* th = JavaThread::get();
- Jnjvm* vm = th->getJVM();
- uint32 length = th->getFrameContextLength();
-
- mvm::ThreadAllocator allocator;
- uintptr_t* buffer = (uintptr_t*)allocator.Allocate(length * sizeof(uintptr_t));
-
- uint32 finalSize = th->getJavaFrameContext((void**)buffer);
-
- result = (ArrayObject*)
- vm->upcalls->stackTraceArray->doNew(finalSize, vm);
-
- for (uint32 i = 0; i != finalSize; ++i) {
- JavaMethod* meth = ((JavaMethod**)buffer)[i];
- assert(meth && "Wrong stack trace");
- delegatee = meth->classDef->getClassDelegatee(vm);;
- ArrayObject::setElement(result, delegatee, i);
- }
-
+ result = GetClassContext();
+
END_NATIVE_EXCEPTION
return result;
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=144090&r1=144089&r2=144090&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/J3/ClassLib/OpenJDK/OpenJDK.inc Tue Nov 8 11:33:56 2011
@@ -8,9 +8,11 @@
#include "jvm.h"
-#include "ArrayCopy.inc"
#include "JavaConstantPool.h"
#include "Reader.h"
+
+#include "ArrayCopy.inc"
+#include "ClassContext.inc"
#include "SetProperties.inc"
#include <errno.h>
@@ -734,7 +736,16 @@
JNIEXPORT jobjectArray JNICALL
JVM_GetClassContext(JNIEnv *env) {
- NYI();
+ ArrayObject * res = 0;
+ llvm_gcroot(res, 0);
+ BEGIN_JNI_EXCEPTION
+
+ res = GetClassContext();
+
+ RETURN_FROM_JNI((jobjectArray)th->pushJNIRef(res));
+ END_JNI_EXCEPTION
+
+ return 0;
}
JNIEXPORT jint JNICALL
More information about the vmkit-commits
mailing list