27 #include "JVMTITools.h"
28 #include "agent_common.h"
29
30 extern "C" {
31
32 /* ============================================================================= */
33
34 static jvmtiEnv *jvmti = NULL;
35 static jvmtiCapabilities caps;
36 static jvmtiEventCallbacks callbacks;
37
38 /* ============================================================================= */
39
40 JNIEXPORT jboolean JNICALL
41 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_suspendThread (
42 JNIEnv *env
43 , jclass cls
44 , jobject earlyReturnThread
45 )
46 {
47 if (!NSK_JVMTI_VERIFY(
48 jvmti ->SuspendThread (earlyReturnThread )
49 )
50 )
51 return JNI_FALSE;
52
53 return JNI_TRUE;
54 }
55
56 /* ============================================================================= */
57
58 JNIEXPORT jboolean JNICALL
59 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_resumeThread (
60 JNIEnv *env
61 , jclass klass
62 , jobject earlyReturnThread
63 )
64 {
65 if (!NSK_JVMTI_VERIFY(
66 jvmti ->ResumeThread (earlyReturnThread )
67 )
68 )
69 return JNI_FALSE;
70
71 return JNI_TRUE;
72 }
73
74 /* ============================================================================= */
75
76 JNIEXPORT jboolean JNICALL
77 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnObject (
78 JNIEnv *env
79 , jclass klass
80 , jthread earlyReturnThread
81 , jobject valueToReturn
82 )
83 {
84 if (!NSK_JVMTI_VERIFY(
85 jvmti ->ForceEarlyReturnObject (earlyReturnThread , valueToReturn )
86 )
87 )
88 return JNI_FALSE;
89
90 return JNI_TRUE;
91 }
92
93 /* ============================================================================= */
94
95 JNIEXPORT jboolean JNICALL
96 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnInt(
97 JNIEnv *env
98 , jclass klass
99 , jthread earlyReturnThread
100 , jint valueToReturn
101 )
102 {
103 if (!NSK_JVMTI_VERIFY(
104 jvmti ->ForceEarlyReturnInt (earlyReturnThread , valueToReturn )
105 )
106 )
107 return JNI_FALSE;
108
109 return JNI_TRUE;
110 }
111
112 /* ============================================================================= */
113
114 JNIEXPORT jboolean JNICALL
115 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnLong (
116 JNIEnv *env
117 , jclass klass
118 , jthread earlyReturnThread
119 , jlong valueToReturn
120 )
121 {
122 if (!NSK_JVMTI_VERIFY(
123 jvmti ->ForceEarlyReturnLong (earlyReturnThread , valueToReturn )
124 )
125 )
126 return JNI_FALSE;
127
128 return JNI_TRUE;
129 }
130
131 /* ============================================================================= */
132
133 JNIEXPORT jboolean JNICALL
134 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnFloat (
135 JNIEnv *env
136 , jclass klass
137 , jthread earlyReturnThread
138 , jfloat valueToReturn
139 )
140 {
141 if (!NSK_JVMTI_VERIFY(
142 jvmti ->ForceEarlyReturnFloat (earlyReturnThread , valueToReturn )
143 )
144 )
145 return JNI_FALSE;
146
147 return JNI_TRUE;
148 }
149
150 /* ============================================================================= */
151
152 JNIEXPORT jboolean JNICALL
153 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnDouble (
154 JNIEnv *env
155 , jclass klass
156 , jthread earlyReturnThread
157 , jdouble valueToReturn
158 )
159 {
160 if (!NSK_JVMTI_VERIFY(
161 jvmti ->ForceEarlyReturnDouble (earlyReturnThread , valueToReturn )
162 )
163 )
164 return JNI_FALSE;
165
166 return JNI_TRUE;
167 }
168
169 /* ============================================================================= */
170
171 JNIEXPORT jboolean JNICALL
172 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnVoid (
173 JNIEnv *env
174 , jclass klass
175 , jthread earlyReturnThread
176 )
177 {
178 if (!NSK_JVMTI_VERIFY(
179 jvmti ->ForceEarlyReturnVoid (earlyReturnThread )
180 )
181 )
182 return JNI_FALSE;
183
184 return JNI_TRUE;
185 }
186
187 /* ============================================================================= */
188
189 /* Agent initialization procedure */
190 #ifdef STATIC_BUILD
191 JNIEXPORT jint JNICALL Agent_OnLoad_ForceEarlyReturn001(JavaVM *jvm, char *options, void *reserved) {
192 return Agent_Initialize(jvm, options, reserved);
193 }
194 JNIEXPORT jint JNICALL Agent_OnAttach_ForceEarlyReturn001(JavaVM *jvm, char *options, void *reserved) {
195 return Agent_Initialize(jvm, options, reserved);
196 }
197 JNIEXPORT jint JNI_OnLoad_ForceEarlyReturn001(JavaVM *jvm, char *options, void *reserved) {
198 return JNI_VERSION_1_8;
199 }
200 #endif
201 jint Agent_Initialize(JavaVM *vm, char *options, void *reserved)
202 {
203 jvmtiCapabilities caps;
204
205 if (!NSK_VERIFY(
206 (jvmti = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL
207 )
208 )
209 return JNI_ERR;
210
211 if (!NSK_JVMTI_VERIFY(jvmti ->GetCapabilities (&caps)
212 )
213 )
214 return JNI_ERR;
215
216 // Register all necessary JVM capabilities
217 caps.can_force_early_return = 1;
218 caps.can_suspend = 1;
219
220 if (!NSK_JVMTI_VERIFY(jvmti ->AddCapabilities (&caps)
221 )
222 )
223 return JNI_ERR;
224
225 return JNI_OK;
226 }
227
228 }
|
27 #include "JVMTITools.h"
28 #include "agent_common.h"
29
30 extern "C" {
31
32 /* ============================================================================= */
33
34 static jvmtiEnv *jvmti = NULL;
35 static jvmtiCapabilities caps;
36 static jvmtiEventCallbacks callbacks;
37
38 /* ============================================================================= */
39
40 JNIEXPORT jboolean JNICALL
41 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_suspendThread (
42 JNIEnv *env
43 , jclass cls
44 , jobject earlyReturnThread
45 )
46 {
47 if (!NSK_JVMTI_VERIFY(jvmti->SuspendThread(earlyReturnThread)))
48 return JNI_FALSE;
49
50 return JNI_TRUE;
51 }
52
53 /* ============================================================================= */
54
55 JNIEXPORT jboolean JNICALL
56 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_resumeThread (
57 JNIEnv *env
58 , jclass klass
59 , jobject earlyReturnThread
60 )
61 {
62 if (!NSK_JVMTI_VERIFY(jvmti->ResumeThread(earlyReturnThread)))
63 return JNI_FALSE;
64
65 return JNI_TRUE;
66 }
67
68 /* ============================================================================= */
69
70 JNIEXPORT jboolean JNICALL
71 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnObject (
72 JNIEnv *env
73 , jclass klass
74 , jthread earlyReturnThread
75 , jobject valueToReturn
76 )
77 {
78 if (!NSK_JVMTI_VERIFY(jvmti->ForceEarlyReturnObject(earlyReturnThread, valueToReturn)))
79 return JNI_FALSE;
80
81 return JNI_TRUE;
82 }
83
84 /* ============================================================================= */
85
86 JNIEXPORT jboolean JNICALL
87 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnInt(
88 JNIEnv *env
89 , jclass klass
90 , jthread earlyReturnThread
91 , jint valueToReturn
92 )
93 {
94 if (!NSK_JVMTI_VERIFY(jvmti->ForceEarlyReturnInt(earlyReturnThread, valueToReturn)))
95 return JNI_FALSE;
96
97 return JNI_TRUE;
98 }
99
100 /* ============================================================================= */
101
102 JNIEXPORT jboolean JNICALL
103 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnLong (
104 JNIEnv *env
105 , jclass klass
106 , jthread earlyReturnThread
107 , jlong valueToReturn
108 )
109 {
110 if (!NSK_JVMTI_VERIFY(jvmti->ForceEarlyReturnLong(earlyReturnThread, valueToReturn)))
111 return JNI_FALSE;
112
113 return JNI_TRUE;
114 }
115
116 /* ============================================================================= */
117
118 JNIEXPORT jboolean JNICALL
119 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnFloat (
120 JNIEnv *env
121 , jclass klass
122 , jthread earlyReturnThread
123 , jfloat valueToReturn
124 )
125 {
126 if (!NSK_JVMTI_VERIFY(jvmti->ForceEarlyReturnFloat(earlyReturnThread, valueToReturn)))
127 return JNI_FALSE;
128
129 return JNI_TRUE;
130 }
131
132 /* ============================================================================= */
133
134 JNIEXPORT jboolean JNICALL
135 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnDouble (
136 JNIEnv *env
137 , jclass klass
138 , jthread earlyReturnThread
139 , jdouble valueToReturn
140 )
141 {
142 if (!NSK_JVMTI_VERIFY(jvmti->ForceEarlyReturnDouble(earlyReturnThread, valueToReturn)))
143 return JNI_FALSE;
144
145 return JNI_TRUE;
146 }
147
148 /* ============================================================================= */
149
150 JNIEXPORT jboolean JNICALL
151 Java_nsk_jvmti_ForceEarlyReturn_ForceEarlyReturn001_doForceEarlyReturnVoid (
152 JNIEnv *env
153 , jclass klass
154 , jthread earlyReturnThread
155 )
156 {
157 if (!NSK_JVMTI_VERIFY(jvmti->ForceEarlyReturnVoid(earlyReturnThread)))
158 return JNI_FALSE;
159
160 return JNI_TRUE;
161 }
162
163 /* ============================================================================= */
164
165 /* Agent initialization procedure */
166 #ifdef STATIC_BUILD
167 JNIEXPORT jint JNICALL Agent_OnLoad_ForceEarlyReturn001(JavaVM *jvm, char *options, void *reserved) {
168 return Agent_Initialize(jvm, options, reserved);
169 }
170 JNIEXPORT jint JNICALL Agent_OnAttach_ForceEarlyReturn001(JavaVM *jvm, char *options, void *reserved) {
171 return Agent_Initialize(jvm, options, reserved);
172 }
173 JNIEXPORT jint JNI_OnLoad_ForceEarlyReturn001(JavaVM *jvm, char *options, void *reserved) {
174 return JNI_VERSION_1_8;
175 }
176 #endif
177 jint Agent_Initialize(JavaVM *vm, char *options, void *reserved)
178 {
179 jvmtiCapabilities caps;
180
181 if (!NSK_VERIFY((jvmti = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL))
182 return JNI_ERR;
183
184 if (!NSK_JVMTI_VERIFY(jvmti->GetCapabilities(&caps)))
185 return JNI_ERR;
186
187 // Register all necessary JVM capabilities
188 caps.can_force_early_return = 1;
189 caps.can_suspend = 1;
190
191 if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps)))
192 return JNI_ERR;
193
194 return JNI_OK;
195 }
196
197 }
|