<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>