mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			89 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			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;
 | |
|       }
 | |
|   }
 | |
| }
 |