1 // jvmti.cc - JVMTI implementation
3 /* Copyright (C) 2006 Free Software Foundation
5 This file is part of libgcj.
7 This software is copyrighted work licensed under the terms of the
8 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
14 #include <java-threads.h>
18 #include <java/lang/Thread.h>
20 // Some commonly-used checks
22 #define THREAD_DEFAULT_TO_CURRENT(jthread) \
23 if (jthread == NULL) jthread = java::lang::Thread::currentThread ();
25 #define THREAD_CHECK_VALID(jthread) \
26 if (!java::lang::Thread::class$.isAssignableFrom (&(jthread->class$))) \
27 return JVMTI_ERROR_INVALID_THREAD;
29 #define THREAD_CHECK_IS_ALIVE(thread) \
30 if (!thread->isAlive ()) return JVMTI_ERROR_THREAD_NOT_ALIVE;
32 static jvmtiError JNICALL
33 _Jv_JVMTI_SuspendThread (MAYBE_UNUSED jvmtiEnv *env, jthread thread)
35 using namespace java::lang;
37 THREAD_DEFAULT_TO_CURRENT (thread);
38 THREAD_CHECK_VALID (thread);
40 Thread *t = reinterpret_cast<Thread *> (thread);
41 THREAD_CHECK_IS_ALIVE (t);
43 _Jv_Thread_t *data = _Jv_ThreadGetData (t);
44 _Jv_SuspendThread (data);
45 return JVMTI_ERROR_NONE;
48 static jvmtiError JNICALL
49 _Jv_JVMTI_ResumeThread (MAYBE_UNUSED jvmtiEnv *env, jthread thread)
51 using namespace java::lang;
53 THREAD_DEFAULT_TO_CURRENT (thread);
54 THREAD_CHECK_VALID (thread);
56 Thread *t = reinterpret_cast<Thread *> (thread);
57 THREAD_CHECK_IS_ALIVE (t);
59 _Jv_Thread_t *data = _Jv_ThreadGetData (t);
60 _Jv_ResumeThread (data);
61 return JVMTI_ERROR_NONE;
65 #define UNIMPLEMENTED NULL
67 static jvmtiError JNICALL
68 _Jv_JVMTI_DisposeEnvironment (jvmtiEnv *env)
70 // All we need to do is free memory allocated by _Jv_GetJVMTIEnv
72 return JVMTI_ERROR_NONE;
75 struct _Jv_jvmtiEnv _Jv_JVMTI_Interface =
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
234 _Jv_GetJVMTIEnv (void)
237 = (_Jv_JVMTIEnv *) _Jv_MallocUnchecked (sizeof (_Jv_JVMTIEnv));
238 env->p = &_Jv_JVMTI_Interface;