gcc/libjava/testsuite/libjava.jvmti/interp/getstacktrace.java
Kyle Galloway 3927313117 java-interp.h: Added _Jv_Frame class and its two subclasses _Jv_InterpFrame and _Jv_NativeFrame.
2007-01-29  Kyle Galloway  <kgallowa@redhat.com>

	* include/java-interp.h:  Added _Jv_Frame class and its two
	subclasses _Jv_InterpFrame and _Jv_NativeFrame.  Also moved
	_Jv_FrameType from java-stack.h.
	* include/java-stack.h: Removed _Jv_FrameType.
	* java/lang/Thread.java: Added frame member to hold new
	composite frame stack.
	* java/lang/Thread.h: Regenerated.
	* java/lang/Thread.class: Rebuilt.
	* jni.cc (_Jv_JNIMethod::call): Push a frame onto the stack when
	calling a JNI method.
	* jvmti.cc (_Jv_JVMTI_GetStackTrace): New Method.
	(_Jv_JVMTI_GetFrameCount): New method.
	* stacktrace.cc (UnwindTraceFn): Modified to use new _Jv_Frame
	classes.
	* testsuite/libjava.jvmti/interp/getstacktrace.jar: New test.
	* testsuite/libjava.jvmti/interp/natgetstacktrace.cc: New test.
	* testsuite/libjava.jvmti/interp/getstacktrace.h: New test.
	* testsuite/libjava.jvmti/interp/getstacktrace.jar: New test.
	* testsuite/libjava.jvmti/interp/getstacktrace.out: Output file
	for test.

From-SVN: r121314
2007-01-29 22:05:56 +00:00

89 lines
1.7 KiB
Java

public class getstacktrace
extends Thread
{
public boolean done = false;
// num_frames is the number of frames > the original run () call so if
// num_frames = 1, the thread will have 2 frames, the original Thread.run
// call, plus one additional
public int num_frames, thread_num;
public static int num_threads = 1;
static
{
System.loadLibrary("natgetstacktrace");
}
public void run ()
{
thread_num = num_threads++;
num_frames = thread_num;
if (num_frames <= 1)
{
natRunner ();
}
else
{
if (thread_num % 2 == 0)
natPlaceholder ();
else
placeholder ();
}
}
public void placeholder ()
{
num_frames--;
if (num_frames <= 1)
{
if (thread_num % 2 == 1)
natRunner ();
else
runner ();
}
else
{
if (thread_num % 2 == 0)
natPlaceholder ();
else
placeholder ();
}
}
public void runner ()
{
done = true;
while (done)
yield ();
}
public native void natPlaceholder ();
public native void natRunner ();
public static native int do_getstacktrace_tests (Thread[] threads);
public static void main (String[] args)
{
System.out.println ("JVMTI GetStackTrace Interpreted Test");
getstacktrace[] threads = new getstacktrace[10];
for (int i = 0; i < threads.length; i++)
{
threads[i] = new getstacktrace ();
threads[i].start ();
while (!threads[i].done)
yield ();
}
do_getstacktrace_tests (threads);
for (int i = 0; i < threads.length; i++)
{
threads[i].done = false;
}
}
}