OSDN Git Service

2006-07-23 Mohan Embar <gnustuff@thisiscool.com>
[pf3gnuchains/gcc-fork.git] / libjava / jvmti.cc
1 // jvmti.cc - JVMTI implementation
2
3 /* Copyright (C) 2006 Free Software Foundation
4
5    This file is part of libgcj.
6
7 This software is copyrighted work licensed under the terms of the
8 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
9 details.  */
10
11 #include <config.h>
12
13 #include <jvm.h>
14 #include <java-threads.h>
15 #include <java-gc.h>
16 #include <jvmti.h>
17
18 #include <java/lang/Thread.h>
19
20 // Some commonly-used checks
21
22 #define THREAD_DEFAULT_TO_CURRENT(jthread)                              \
23   if (jthread == NULL) jthread = java::lang::Thread::currentThread ();
24
25 #define THREAD_CHECK_VALID(jthread)                                     \
26   if (!java::lang::Thread::class$.isAssignableFrom (&(jthread->class$))) \
27     return JVMTI_ERROR_INVALID_THREAD;
28
29 #define THREAD_CHECK_IS_ALIVE(thread)                           \
30   if (!thread->isAlive ()) return JVMTI_ERROR_THREAD_NOT_ALIVE;
31
32 static jvmtiError JNICALL
33 _Jv_JVMTI_SuspendThread (MAYBE_UNUSED jvmtiEnv *env, jthread thread)
34 {
35   using namespace java::lang;
36
37   THREAD_DEFAULT_TO_CURRENT (thread);
38   THREAD_CHECK_VALID (thread);
39
40   Thread *t = reinterpret_cast<Thread *> (thread);
41   THREAD_CHECK_IS_ALIVE (t);
42
43   _Jv_Thread_t *data = _Jv_ThreadGetData (t);
44   _Jv_SuspendThread (data);
45   return JVMTI_ERROR_NONE;
46 }
47
48 static jvmtiError JNICALL
49 _Jv_JVMTI_ResumeThread (MAYBE_UNUSED jvmtiEnv *env, jthread thread)
50 {
51   using namespace java::lang;
52
53   THREAD_DEFAULT_TO_CURRENT (thread);
54   THREAD_CHECK_VALID (thread);
55
56   Thread *t = reinterpret_cast<Thread *> (thread);
57   THREAD_CHECK_IS_ALIVE (t);
58
59   _Jv_Thread_t *data = _Jv_ThreadGetData (t);
60   _Jv_ResumeThread (data);
61   return JVMTI_ERROR_NONE;
62 }
63
64 #define RESERVED NULL
65 #define UNIMPLEMENTED NULL
66
67 static jvmtiError JNICALL
68 _Jv_JVMTI_DisposeEnvironment (jvmtiEnv *env)
69 {
70   // All we need to do is free memory allocated by _Jv_GetJVMTIEnv
71   _Jv_Free (env);
72   return JVMTI_ERROR_NONE;
73 }
74
75 struct _Jv_jvmtiEnv _Jv_JVMTI_Interface =
76 {
77   RESERVED,                     // reserved1
78   UNIMPLEMENTED,                // SetEventNotification
79   RESERVED,                     // reserved3
80   UNIMPLEMENTED,                // GetAllThreads
81   _Jv_JVMTI_SuspendThread,      // SuspendThread
82   _Jv_JVMTI_ResumeThread,       // ResumeThread
83   UNIMPLEMENTED,                // StopThread
84   UNIMPLEMENTED,                // InterruptThread
85   UNIMPLEMENTED,                // GetThreadInfo
86   UNIMPLEMENTED,                // GetOwnedMonitorInfo
87   UNIMPLEMENTED,                // GetCurrentContendedMonitor
88   UNIMPLEMENTED,                // RunAgentThread
89   UNIMPLEMENTED,                // GetTopThreadGroups
90   UNIMPLEMENTED,                // GetThreadGroupInfo
91   UNIMPLEMENTED,                // GetThreadGroupChildren
92   UNIMPLEMENTED,                // GetFrameCount
93   UNIMPLEMENTED,                // GetThreadState
94   RESERVED,                     // reserved18
95   UNIMPLEMENTED,                // GetFrameLocation
96   UNIMPLEMENTED,                // NotifyPopFrame
97   UNIMPLEMENTED,                // GetLocalObject
98   UNIMPLEMENTED,                // GetLocalInt
99   UNIMPLEMENTED,                // GetLocalLong
100   UNIMPLEMENTED,                // GetLocalFloat
101   UNIMPLEMENTED,                // GetLocalDouble
102   UNIMPLEMENTED,                // SetLocalObject
103   UNIMPLEMENTED,                // SetLocalInt
104   UNIMPLEMENTED,                // SetLocalLong
105   UNIMPLEMENTED,                // SetLocalFloat
106   UNIMPLEMENTED,                // SetLocalDouble
107   UNIMPLEMENTED,                // CreateRawMonitor
108   UNIMPLEMENTED,                // DestroyRawMonitor
109   UNIMPLEMENTED,                // RawMonitorEnter
110   UNIMPLEMENTED,                // RawMonitorExit
111   UNIMPLEMENTED,                // RawMonitorWait
112   UNIMPLEMENTED,                // RawMonitorNotify
113   UNIMPLEMENTED,                // RawMonitorNotifyAll
114   UNIMPLEMENTED,                // SetBreakpoint
115   UNIMPLEMENTED,                // CleareBreakpoint
116   RESERVED,                     // reserved40
117   UNIMPLEMENTED,                // SetFieldAccessWatch
118   UNIMPLEMENTED,                // ClearFieldAccessWatch
119   UNIMPLEMENTED,                // SetFieldModificationWatch
120   UNIMPLEMENTED,                // ClearFieldModificationWatch
121   RESERVED,                     // reserved45
122   UNIMPLEMENTED,                // Allocate
123   UNIMPLEMENTED,                // Deallocate
124   UNIMPLEMENTED,                // GetClassSignature
125   UNIMPLEMENTED,                // GetClassStatus
126   UNIMPLEMENTED,                // GetSourceFileName
127   UNIMPLEMENTED,                // GetClassModifiers
128   UNIMPLEMENTED,                // GetClassMethods
129   UNIMPLEMENTED,                // GetClassFields
130   UNIMPLEMENTED,                // GetImplementedInterfaces
131   UNIMPLEMENTED,                // IsInterface
132   UNIMPLEMENTED,                // IsArrayClass
133   UNIMPLEMENTED,                // GetClassLoader
134   UNIMPLEMENTED,                // GetObjectHashCode
135   UNIMPLEMENTED,                // GetObjectMonitorUsage
136   UNIMPLEMENTED,                // GetFieldName
137   UNIMPLEMENTED,                // GetFieldDeclaringClass
138   UNIMPLEMENTED,                // GetFieldModifiers
139   UNIMPLEMENTED,                // IsFieldSynthetic
140   UNIMPLEMENTED,                // GetMethodName
141   UNIMPLEMENTED,                // GetMethodDeclaringClass
142   UNIMPLEMENTED,                // GetMethodModiifers
143   RESERVED,                     // reserved67
144   UNIMPLEMENTED,                // GetMaxLocals
145   UNIMPLEMENTED,                // GetArgumentsSize
146   UNIMPLEMENTED,                // GetLineNumberTable
147   UNIMPLEMENTED,                // GetMethodLocation
148   UNIMPLEMENTED,                // GetLocalVariableTable
149   RESERVED,                     // reserved73
150   RESERVED,                     // reserved74
151   UNIMPLEMENTED,                // GetBytecodes
152   UNIMPLEMENTED,                // IsMethodNative
153   UNIMPLEMENTED,                // IsMethodSynthetic
154   UNIMPLEMENTED,                // GetLoadedClasses
155   UNIMPLEMENTED,                // GetClassLoaderClasses
156   UNIMPLEMENTED,                // PopFrame
157   RESERVED,                     // reserved81
158   RESERVED,                     // reserved82
159   RESERVED,                     // reserved83
160   RESERVED,                     // reserved84
161   RESERVED,                     // reserved85
162   RESERVED,                     // reserved86
163   UNIMPLEMENTED,                // RedefineClasses
164   UNIMPLEMENTED,                // GetVersionNumber
165   UNIMPLEMENTED,                // GetCapabilities
166   UNIMPLEMENTED,                // GetSourceDebugExtension
167   UNIMPLEMENTED,                // IsMethodObsolete
168   UNIMPLEMENTED,                // SuspendThreadList
169   UNIMPLEMENTED,                // ResumeThreadList
170   RESERVED,                     // reserved94
171   RESERVED,                     // reserved95
172   RESERVED,                     // reserved96
173   RESERVED,                     // reserved97
174   RESERVED,                     // reserved98
175   RESERVED,                     // reserved99
176   UNIMPLEMENTED,                // GetAllStackTraces
177   UNIMPLEMENTED,                // GetThreadListStackTraces
178   UNIMPLEMENTED,                // GetThreadLocalStorage
179   UNIMPLEMENTED,                // SetThreadLocalStorage
180   UNIMPLEMENTED,                // GetStackTrace
181   RESERVED,                     // reserved105
182   UNIMPLEMENTED,                // GetTag
183   UNIMPLEMENTED,                // SetTag
184   UNIMPLEMENTED,                // ForceGarbageCollection
185   UNIMPLEMENTED,                // IterateOverObjectsReachable
186   UNIMPLEMENTED,                // IterateOverReachableObjects
187   UNIMPLEMENTED,                // IterateOverHeap
188   UNIMPLEMENTED,                // IterateOverInstanceOfClass
189   RESERVED,                     // reserved113
190   UNIMPLEMENTED,                // GetObjectsWithTags
191   RESERVED,                     // reserved115
192   RESERVED,                     // reserved116
193   RESERVED,                     // reserved117
194   RESERVED,                     // reserved118
195   RESERVED,                     // reserved119
196   UNIMPLEMENTED,                // SetJNIFunctionTable
197   UNIMPLEMENTED,                // GetJNIFunctionTable
198   UNIMPLEMENTED,                // SetEventCallbacks
199   UNIMPLEMENTED,                // GenerateEvents
200   UNIMPLEMENTED,                // GetExtensionFunctions
201   UNIMPLEMENTED,                // GetExtensionEvents
202   UNIMPLEMENTED,                // SetExtensionEventCallback
203   _Jv_JVMTI_DisposeEnvironment, // DisposeEnvironment
204   UNIMPLEMENTED,                // GetErrorName
205   UNIMPLEMENTED,                // GetJLocationFormat
206   UNIMPLEMENTED,                // GetSystemProperties
207   UNIMPLEMENTED,                // GetSystemProperty
208   UNIMPLEMENTED,                // SetSystemProperty
209   UNIMPLEMENTED,                // GetPhase
210   UNIMPLEMENTED,                // GetCurrentThreadCpuTimerInfo
211   UNIMPLEMENTED,                // GetCurrentThreadCpuTime
212   UNIMPLEMENTED,                // GetThreadCpuTimerInfo
213   UNIMPLEMENTED,                // GetThreadCpuTime
214   UNIMPLEMENTED,                // GetTimerInfo
215   UNIMPLEMENTED,                // GetTime
216   UNIMPLEMENTED,                // GetPotentialCapabilities
217   RESERVED,                     // reserved141
218   UNIMPLEMENTED,                // AddCapabilities
219   UNIMPLEMENTED,                // RelinquishCapabilities
220   UNIMPLEMENTED,                // GetAvailableProcessors
221   RESERVED,                     // reserved145
222   RESERVED,                     // reserved146
223   UNIMPLEMENTED,                // GetEnvironmentLocalStorage
224   UNIMPLEMENTED,                // SetEnvironmentLocalStorage
225   UNIMPLEMENTED,                // AddToBootstrapClassLoaderSearch
226   UNIMPLEMENTED,                // SetVerboseFlag
227   RESERVED,                     // reserved151
228   RESERVED,                     // reserved152
229   RESERVED,                     // reserved153
230   UNIMPLEMENTED                 // GetObjectSize
231 };
232
233 _Jv_JVMTIEnv *
234 _Jv_GetJVMTIEnv (void)
235 {
236   _Jv_JVMTIEnv *env
237     = (_Jv_JVMTIEnv *) _Jv_MallocUnchecked (sizeof (_Jv_JVMTIEnv));
238   env->p = &_Jv_JVMTI_Interface;
239   return env;
240 }