+ JArray<jclass> *classes = (JArray<jclass> *)
+ _Jv_NewObjectArray (trace_data.length, &::java::lang::Class::class$, NULL);
+ jclass *c = elements (classes);
+
+ for (int i = 0, j = 0; i < state.pos; i++)
+ {
+ _Jv_StackFrame *frame = &state.frames[i];
+ if (!frame->klass || !frame->meth)
+ continue;
+ c[j] = frame->klass;
+ j++;
+ }
+
+ jobjectArray result =
+ (jobjectArray) _Jv_NewObjectArray (2, &::java::lang::Object::class$,
+ NULL);
+ jobject *r = elements (result);
+ r[0] = (jobject) classes;
+ r[1] = (jobject) new Boolean (trace_data.privileged);
+
+ return result;
+}
+
+JArray<jclass> *
+_Jv_StackTrace::GetStackWalkerStack ()
+{
+ int trace_size = 100;
+ _Jv_StackFrame frames[trace_size];
+ _Jv_UnwindState state (trace_size);
+ state.frames = (_Jv_StackFrame *) &frames;
+
+ UpdateNCodeMap ();
+ _Unwind_Backtrace (UnwindTraceFn, &state);
+
+ int num_frames = 0, start_frame = -1;
+ enum
+ {
+ VMSW_GETCLASSCONTEXT,
+ JLRM_INVOKE_OR_USER_FN,
+ USER_FN
+ }
+ expect = VMSW_GETCLASSCONTEXT;