<br><br><div class="gmail_quote">On Thu, Nov 3, 2011 at 3:25 PM, Will Dietz <span dir="ltr"><<a href="mailto:wdietz2@illinois.edu">wdietz2@illinois.edu</a>></span> wrote:<br><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 27a8b66190db992968e8674d3832bb6176cd9b35 Mon Sep 17 00:00:00 2001<br>
From: Will Dietz <<a href="mailto:w@wdtz.org">w@wdtz.org</a>><br>
Date: Wed, 2 Nov 2011 20:36:57 -0500<br>
Subject: [PATCH 04/17] Impl JVM_GetClassContext<br>
<br>
---<br>
lib/J3/ClassLib/OpenJDK/OpenJDK.inc | 32 +++++++++++++++++++++++++++++++-<br>
1 files changed, 31 insertions(+), 1 deletions(-)<br>
<br>
diff --git a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
index 30a670f..9305e66 100644<br>
--- a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
+++ b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc<br>
@@ -742,7 +742,37 @@ JVM_CurrentClassLoader(JNIEnv *env) {<br>
<br>
JNIEXPORT jobjectArray JNICALL<br>
JVM_GetClassContext(JNIEnv *env) {<br>
- NYI();<br>
+ ArrayObject* result = NULL;<br>
+ JavaObject* delegatee = NULL;<br>
+ llvm_gcroot(result, 0);<br>
+ llvm_gcroot(delegatee, 0);<br>
+<br>
+ BEGIN_JNI_EXCEPTION<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>This should not be a stackTraceArray but a classArrayClass, right? You're storing java.lang.Class in the lines above.</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>
+ RETURN_FROM_JNI((jobjectArray)th->pushJNIRef(result));<br>
+<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>