summaryrefslogtreecommitdiff
path: root/libjava/stacktrace.cc
diff options
context:
space:
mode:
authorgary <gary@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-28 10:54:11 +0000
committergary <gary@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-28 10:54:11 +0000
commit445973fa2b45ee4036e3cea6f3ce042d0c2b4675 (patch)
tree330a292f4d8ffc6685638990777d68888da955c8 /libjava/stacktrace.cc
parentfeaeaad1928e9377e41fc5ea4ee0ccb0a6794e70 (diff)
downloadgcc-445973fa2b45ee4036e3cea6f3ce042d0c2b4675.tar.gz
2006-07-28 Gary Benson <gbenson@redhat.com>
Casey Marshall <csm@gnu.org> PR libgcj/13604: * include/java-stack.h (GetClassMethodStack): Declare. * stacktrace.cc (GetClassMethodStack): New method. * java/security/AccessController.java: Removed. * java/security/VMAccessController.java: New file. * java/security/natVMAccessController.cc: Likewise. * Makefile.am (nat_source_files): Added the above. * sources.am, Makefile.in: Rebuilt. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115793 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/stacktrace.cc')
-rw-r--r--libjava/stacktrace.cc42
1 files changed, 42 insertions, 0 deletions
diff --git a/libjava/stacktrace.cc b/libjava/stacktrace.cc
index ba971ddc13e..843c5124e7e 100644
--- a/libjava/stacktrace.cc
+++ b/libjava/stacktrace.cc
@@ -534,3 +534,45 @@ _Jv_StackTrace::GetFirstNonSystemClassLoader ()
return NULL;
}
+
+JArray<jobjectArray> *
+_Jv_StackTrace::GetClassMethodStack (_Jv_StackTrace *trace)
+{
+ jint length = 0;
+
+ UpdateNCodeMap();
+ for (int i = 0; i < trace->length; i++)
+ {
+ _Jv_StackFrame *frame = &trace->frames[i];
+ FillInFrameInfo (frame);
+
+ if (frame->klass && frame->meth)
+ length++;
+ }
+
+ jclass array_class = _Jv_GetArrayClass (&::java::lang::Object::class$, NULL);
+ JArray<jobjectArray> *result =
+ (JArray<jobjectArray> *) _Jv_NewObjectArray (2, array_class, NULL);
+ JArray<jclass> *classes = (JArray<jclass> *)
+ _Jv_NewObjectArray (length, &::java::lang::Class::class$, NULL);
+ JArray<jstring> *methods = (JArray<jstring> *)
+ _Jv_NewObjectArray (length, &::java::lang::String::class$, NULL);
+ jclass *c = elements (classes);
+ jstring *m = elements (methods);
+
+ for (int i = 0, j = 0; i < trace->length; i++)
+ {
+ _Jv_StackFrame *frame = &trace->frames[i];
+ if (!frame->klass || !frame->meth)
+ continue;
+ c[j] = frame->klass;
+ m[j] = JvNewStringUTF (frame->meth->name->chars());
+ j++;
+ }
+
+ jobjectArray *elems = elements (result);
+ elems[0] = (jobjectArray) classes;
+ elems[1] = (jobjectArray) methods;
+
+ return result;
+}