<span style="background-color: transparent; ">On Mon, Nov 7, 2011 at 3:58 AM, Will Dietz </span><span dir="ltr" style="background-color: transparent; "><<a href="mailto:wdietz2@illinois.edu">wdietz2@illinois.edu</a>></span><span style="background-color: transparent; "> wrote:</span><br>
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Inlined below.<br>
<br>
~Will<br>
<br>
>From 4c7de028f511bf52c3601ce57beb02ffcb939420 Mon Sep 17 00:00:00 2001<br>
From: Will Dietz <<a href="mailto:w@wdtz.org">w@wdtz.org</a>><br>
Date: Sat, 5 Nov 2011 20:47:15 -0500<br>
Subject: [PATCH 2/8] Impl JVM_GetClassContext, refactor existing code into<br>
shared ClassContext.inc.<br>
<br>
Also, fix ClassContext creation of wrong array type.<br>
---<br>
lib/J3/ClassLib/ClassContext.inc | 36 ++++++++++++++++++++<br>
.../GNUClasspath/ClasspathVMStackWalker.inc | 25 ++-----------<br>
lib/J3/ClassLib/OpenJDK/OpenJDK.inc | 12 ++++++-<br>
3 files changed, 51 insertions(+), 22 deletions(-)<br>
create mode 100644 lib/J3/ClassLib/ClassContext.inc<br>
<br>
diff --git a/lib/J3/ClassLib/ClassContext.inc b/lib/J3/ClassLib/ClassContext.inc<br>
new file mode 100644<br>
index 0000000..71c17d7<br>
--- /dev/null<br>
+++ b/lib/J3/ClassLib/ClassContext.inc<br>
@@ -0,0 +1,36 @@<br>
+//===------------ ClassContext.inc -- Implement GetClassContext<br>
-----------===//<br>
+//<br>
+// The VMKit project<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+ArrayObject* GetClassContext() {<br>
+ ArrayObject* result = NULL;<br>
+ JavaObject* delegatee = NULL;<br>
+ llvm_gcroot(result, 0);<br>
+ llvm_gcroot(delegatee, 0);<br>
+<br>
+ JavaThread* th = JavaThread::get();<br>
+ Jnjvm* vm = th->getJVM();<br>
+ uint32 length = th->getFrameContextLength();<br>
+<br>
+ mvm::ThreadAllocator allocator;<br>
+ uintptr_t* buffer = (uintptr_t*)allocator.Allocate(length *<br>
sizeof(uintptr_t));<br>
+<br>
+ uint32 finalSize = th->getJavaFrameContext((void**)buffer);<br>
+<br>
+ result = (ArrayObject*)<br>
+ vm->upcalls->classArrayClass->doNew(finalSize, vm);<br>
+<br>
+ for (uint32 i = 0; i != finalSize; ++i) {<br>
+ JavaMethod* meth = ((JavaMethod**)buffer)[i];<br>
+ assert(meth && "Wrong stack trace");<br>
+ delegatee = meth->classDef->getClassDelegatee(vm);;<br>
+ ArrayObject::setElement(result, delegatee, i);<br>
+ }<br>
+<br>
+ return result;<br>
+}<br>
diff --git a/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc<br>
b/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc<br>
index b0c94e5..c51a246 100644<br>
--- a/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc<br>
+++ b/lib/J3/ClassLib/GNUClasspath/ClasspathVMStackWalker.inc<br>
@@ -19,6 +19,8 @@<br>
#include "JavaUpcalls.h"<br>
#include "Jnjvm.h"<br>
<br>
+#include "ClassContext.inc"<br>
+<br>
using namespace j3;<br>
<br>
extern "C" {<br>
@@ -31,31 +33,12 @@ jclass clazz,<br>
) {<br>
<br>
ArrayObject* result = NULL;<br>
- JavaObject* delegatee = NULL;<br>
llvm_gcroot(result, 0);<br>
- llvm_gcroot(delegatee, 0);<br>
<br>
BEGIN_NATIVE_EXCEPTION(0)<br>
<br>
- JavaThread* th = JavaThread::get();<br>
- Jnjvm* vm = th->getJVM();<br>
- uint32 length = th->getFrameContextLength();<br>
-<br>
- mvm::ThreadAllocator allocator;<br>
- uintptr_t* buffer = (uintptr_t*)allocator.Allocate(length *<br>
sizeof(uintptr_t));<br>
-<br>
- uint32 finalSize = th->getJavaFrameContext((void**)buffer);<br>
-<br>
- result = (ArrayObject*)<br>
- vm->upcalls->stackTraceArray->doNew(finalSize, vm);<br></blockquote><div><br></div><div>Wow, just realized I'm the one to blame for that stackTrace array bug :) Thanks Will for fixing it. Please apply!</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
-<br>
- for (uint32 i = 0; i != finalSize; ++i) {<br>
- JavaMethod* meth = ((JavaMethod**)buffer)[i];<br>
- assert(meth && "Wrong stack trace");<br>
- delegatee = meth->classDef->getClassDelegatee(vm);;<br>
- ArrayObject::setElement(result, delegatee, i);<br>
- }<br>
-<br>
+ result = GetClassContext();<br>
+<br>
END_NATIVE_EXCEPTION<br>
<br>
return result;<br>
diff --git a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
index 947b7d3..012b021 100644<br>
--- a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
+++ b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
@@ -12,6 +12,7 @@<br>
#include "Reader.h"<br>
<br>
#include "ArrayCopy.inc"<br>
+#include "ClassContext.inc"<br>
#include "SetProperties.inc"<br>
#include "Object.inc"<br>
<br>
@@ -672,7 +673,16 @@ JVM_CurrentClassLoader(JNIEnv *env) {<br>
<br>
JNIEXPORT jobjectArray JNICALL<br>
JVM_GetClassContext(JNIEnv *env) {<br>
- NYI();<br>
+ ArrayObject * res = 0;<br>
+ llvm_gcroot(res, 0);<br>
+ BEGIN_JNI_EXCEPTION<br>
+<br>
+ res = GetClassContext();<br>
+<br>
+ RETURN_FROM_JNI((jobjectArray)th->pushJNIRef(res));<br>
+ END_JNI_EXCEPTION<br>
+<br>
+ return 0;<br>
}<br>
<br>
JNIEXPORT jint JNICALL<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.5.1<br>
_______________________________________________<br>
vmkit-commits mailing list<br>
<a href="mailto:vmkit-commits@cs.uiuc.edu">vmkit-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits</a><br>
</font></span></blockquote></div><br>