1 /*
2  * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 #include "jni.h"
24 #include <stdlib.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 #ifndef JNI_ENV_PTR
31 
32 #ifdef __cplusplus
33 #define JNI_ENV_ARG_2(x, y) y
34 #define JNI_ENV_ARG_3(x, y, z) y, z
35 #define JNI_ENV_ARG_4(x, y, z, a) y, z, a
36 #define JNI_ENV_PTR(x) x
37 #else
38 #define JNI_ENV_ARG_2(x,y) x, y
39 #define JNI_ENV_ARG_3(x, y, z) x, y, z
40 #define JNI_ENV_ARG_4(x, y, z, a) x, y, z, a
41 #define JNI_ENV_PTR(x) (*x)
42 #endif
43 
44 #endif
45 
logMessage(JNIEnv * env,jobject thisObject,jstring message)46 static void logMessage(JNIEnv *env, jobject thisObject, jstring message)
47 {
48         jclass klass;
49         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
50         JNI_ENV_PTR(env)->CallVoidMethod(
51         JNI_ENV_ARG_4(
52                 env,
53                 thisObject,
54                 JNI_ENV_PTR(env)->GetMethodID(JNI_ENV_ARG_4(env, klass, "log", "(Ljava/lang/String;)V")),
55                 message));
56 }
57 
58 JNIEXPORT void JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_VoidMethod(JNIEnv * env,jobject thisObject,jstring message)59 Java_nsk_share_jpda_NativeMethodsTestThread_VoidMethod(JNIEnv *env,
60         jobject thisObject, jstring message)
61 {
62         logMessage(env, thisObject, message);
63 }
64 
65 JNIEXPORT jboolean JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_BooleanMethod(JNIEnv * env,jobject thisObject,jstring message)66 Java_nsk_share_jpda_NativeMethodsTestThread_BooleanMethod(JNIEnv *env,
67         jobject thisObject, jstring message)
68 {
69         jclass klass;
70         jfieldID valueField;
71 
72         logMessage(env, thisObject, message);
73 
74         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
75 
76         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
77                 env,
78                 klass,
79                 "expectedBooleanValue",
80                 "Z"));
81 
82         return JNI_ENV_PTR(env)->GetStaticBooleanField(JNI_ENV_ARG_3(env, klass, valueField));
83 }
84 
85 JNIEXPORT jbyte JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ByteMethod(JNIEnv * env,jobject thisObject,jstring message)86 Java_nsk_share_jpda_NativeMethodsTestThread_ByteMethod(JNIEnv *env,
87         jobject thisObject, jstring message)
88 {
89         jclass klass;
90         jfieldID valueField;
91 
92         logMessage(env, thisObject, message);
93 
94         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
95 
96         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
97                 env,
98                 klass,
99                 "expectedByteValue",
100                 "B"));
101 
102         return JNI_ENV_PTR(env)->GetStaticByteField(JNI_ENV_ARG_3(env, klass, valueField));
103 }
104 
105 JNIEXPORT jshort JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ShortMethod(JNIEnv * env,jobject thisObject,jstring message)106 Java_nsk_share_jpda_NativeMethodsTestThread_ShortMethod(JNIEnv *env,
107         jobject thisObject, jstring message)
108 {
109         jclass klass;
110         jfieldID valueField;
111 
112         logMessage(env, thisObject, message);
113 
114         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
115 
116         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
117                 env,
118                 klass,
119                 "expectedShortValue",
120                 "S"));
121 
122         return JNI_ENV_PTR(env)->GetStaticShortField(JNI_ENV_ARG_3(env, klass, valueField));
123 }
124 
125 JNIEXPORT jchar JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_CharMethod(JNIEnv * env,jobject thisObject,jstring message)126 Java_nsk_share_jpda_NativeMethodsTestThread_CharMethod(JNIEnv *env,
127         jobject thisObject, jstring message)
128 {
129         jclass klass;
130         jfieldID valueField;
131 
132         logMessage(env, thisObject, message);
133 
134         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
135 
136         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
137                 env,
138                 klass,
139                 "expectedCharValue",
140                 "C"));
141 
142         return JNI_ENV_PTR(env)->GetStaticCharField(JNI_ENV_ARG_3(env, klass, valueField));
143 }
144 
145 JNIEXPORT jint JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_IntMethod(JNIEnv * env,jobject thisObject,jstring message)146 Java_nsk_share_jpda_NativeMethodsTestThread_IntMethod(JNIEnv *env,
147         jobject thisObject, jstring message)
148 {
149         jclass klass;
150         jfieldID valueField;
151 
152         logMessage(env, thisObject, message);
153 
154         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
155 
156         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
157                 env,
158                 klass,
159                 "expectedIntValue",
160                 "I"));
161 
162         return JNI_ENV_PTR(env)->GetStaticIntField(JNI_ENV_ARG_3(env, klass, valueField));
163 }
164 
165 JNIEXPORT jlong JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_LongMethod(JNIEnv * env,jobject thisObject,jstring message)166 Java_nsk_share_jpda_NativeMethodsTestThread_LongMethod(JNIEnv *env,
167         jobject thisObject, jstring message)
168 {
169         jclass klass;
170         jfieldID valueField;
171 
172         logMessage(env, thisObject, message);
173 
174         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
175 
176         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
177                 env,
178                 klass,
179                 "expectedLongValue",
180                 "J"));
181 
182         return JNI_ENV_PTR(env)->GetStaticLongField(JNI_ENV_ARG_3(env, klass, valueField));
183 }
184 
185 JNIEXPORT jfloat JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_FloatMethod(JNIEnv * env,jobject thisObject,jstring message)186 Java_nsk_share_jpda_NativeMethodsTestThread_FloatMethod(JNIEnv *env,
187         jobject thisObject, jstring message)
188 {
189         jclass klass;
190         jfieldID valueField;
191 
192         logMessage(env, thisObject, message);
193 
194         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
195 
196         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
197                 env,
198                 klass,
199                 "expectedFloatValue",
200                 "F"));
201 
202         return JNI_ENV_PTR(env)->GetStaticFloatField(JNI_ENV_ARG_3(env, klass, valueField));
203 }
204 
205 JNIEXPORT jdouble JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_DoubleMethod(JNIEnv * env,jobject thisObject,jstring message)206 Java_nsk_share_jpda_NativeMethodsTestThread_DoubleMethod(JNIEnv *env,
207         jobject thisObject, jstring message)
208 {
209         jclass klass;
210         jfieldID valueField;
211 
212         logMessage(env, thisObject, message);
213 
214         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
215 
216         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
217                 env,
218                 klass,
219                 "expectedDoubleValue",
220                 "D"));
221 
222         return JNI_ENV_PTR(env)->GetStaticDoubleField(JNI_ENV_ARG_3(env, klass, valueField));
223 }
224 
225 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ObjectArrayMethod(JNIEnv * env,jobject thisObject,jstring message)226 Java_nsk_share_jpda_NativeMethodsTestThread_ObjectArrayMethod(JNIEnv *env,
227         jobject thisObject, jstring message)
228 {
229         jclass klass;
230         jfieldID valueField;
231 
232         logMessage(env, thisObject, message);
233 
234         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
235 
236         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
237                 env,
238                 klass,
239                 "expectedObjectArrayValue",
240                 "[Ljava/lang/Object;"));
241 
242         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
243 }
244 
245 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_StringMethod(JNIEnv * env,jobject thisObject,jstring message)246 Java_nsk_share_jpda_NativeMethodsTestThread_StringMethod(JNIEnv *env,
247         jobject thisObject, jstring message)
248 {
249         jclass klass;
250         jfieldID valueField;
251 
252         logMessage(env, thisObject, message);
253 
254         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
255 
256         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
257                 env,
258                 klass,
259                 "expectedStringValue",
260                 "Ljava/lang/String;"));
261 
262         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
263 }
264 
265 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ThreadMethod(JNIEnv * env,jobject thisObject,jstring message)266 Java_nsk_share_jpda_NativeMethodsTestThread_ThreadMethod(JNIEnv *env,
267         jobject thisObject, jstring message)
268 {
269         jclass klass;
270         jfieldID valueField;
271 
272         logMessage(env, thisObject, message);
273 
274         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
275 
276         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
277                 env,
278                 klass,
279                 "expectedThreadValue",
280                 "Ljava/lang/Thread;"));
281 
282         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
283 }
284 
285 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ThreadGroupMethod(JNIEnv * env,jobject thisObject,jstring message)286 Java_nsk_share_jpda_NativeMethodsTestThread_ThreadGroupMethod(JNIEnv *env,
287         jobject thisObject, jstring message)
288 {
289         jclass klass;
290         jfieldID valueField;
291 
292         logMessage(env, thisObject, message);
293 
294         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
295 
296         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
297                 env,
298                 klass,
299                 "expectedThreadGroupValue",
300                 "Ljava/lang/ThreadGroup;"));
301 
302         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
303 }
304 
305 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ClassObjectMethod(JNIEnv * env,jobject thisObject,jstring message)306 Java_nsk_share_jpda_NativeMethodsTestThread_ClassObjectMethod(JNIEnv *env,
307         jobject thisObject, jstring message)
308 {
309         jclass klass;
310         jfieldID valueField;
311 
312         logMessage(env, thisObject, message);
313 
314         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
315 
316         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
317                 env,
318                 klass,
319                 "expectedClassObjectValue",
320                 "Ljava/lang/Class;"));
321 
322         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
323 }
324 
325 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ClassLoaderMethod(JNIEnv * env,jobject thisObject,jstring message)326 Java_nsk_share_jpda_NativeMethodsTestThread_ClassLoaderMethod(JNIEnv *env,
327         jobject thisObject, jstring message)
328 {
329         jclass klass;
330         jfieldID valueField;
331 
332         logMessage(env, thisObject, message);
333 
334         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
335 
336         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
337                 env,
338                 klass,
339                 "expectedClassLoaderValue",
340                 "Ljava/lang/ClassLoader;"));
341 
342         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
343 }
344 
345 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ObjectMethod(JNIEnv * env,jobject thisObject,jstring message)346 Java_nsk_share_jpda_NativeMethodsTestThread_ObjectMethod(JNIEnv *env,
347         jobject thisObject, jstring message)
348 {
349         jclass klass;
350         jfieldID valueField;
351 
352         logMessage(env, thisObject, message);
353 
354         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
355 
356         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
357                 env,
358                 klass,
359                 "expectedObjectValue",
360                 "Ljava/lang/Object;"));
361 
362         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
363 }
364 
365 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_BooleanWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)366 Java_nsk_share_jpda_NativeMethodsTestThread_BooleanWrapperMethod(JNIEnv *env,
367         jobject thisObject, jstring message)
368 {
369         jclass klass;
370         jfieldID valueField;
371 
372         logMessage(env, thisObject, message);
373 
374         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
375 
376         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
377                 env,
378                 klass,
379                 "expectedBooleanWrapperValue",
380                 "Ljava/lang/Boolean;"));
381 
382         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
383 }
384 
385 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ByteWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)386 Java_nsk_share_jpda_NativeMethodsTestThread_ByteWrapperMethod(JNIEnv *env,
387         jobject thisObject, jstring message)
388 {
389         jclass klass;
390         jfieldID valueField;
391 
392         logMessage(env, thisObject, message);
393 
394         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
395 
396         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
397                 env,
398                 klass,
399                 "expectedByteWrapperValue",
400                 "Ljava/lang/Byte;"));
401 
402         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
403 }
404 
405 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ShortWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)406 Java_nsk_share_jpda_NativeMethodsTestThread_ShortWrapperMethod(JNIEnv *env,
407         jobject thisObject, jstring message)
408 {
409         jclass klass;
410         jfieldID valueField;
411 
412         logMessage(env, thisObject, message);
413 
414         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
415 
416         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
417                 env,
418                 klass,
419                 "expectedShortWrapperValue",
420                 "Ljava/lang/Short;"));
421 
422         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
423 }
424 
425 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_CharWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)426 Java_nsk_share_jpda_NativeMethodsTestThread_CharWrapperMethod(JNIEnv *env,
427         jobject thisObject, jstring message)
428 {
429         jclass klass;
430         jfieldID valueField;
431 
432         logMessage(env, thisObject, message);
433 
434         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
435 
436         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
437                 env,
438                 klass,
439                 "expectedCharWrapperValue",
440                 "Ljava/lang/Character;"));
441 
442         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
443 }
444 
445 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_IntWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)446 Java_nsk_share_jpda_NativeMethodsTestThread_IntWrapperMethod(JNIEnv *env,
447         jobject thisObject, jstring message)
448 {
449         jclass klass;
450         jfieldID valueField;
451 
452         logMessage(env, thisObject, message);
453 
454         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
455 
456         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
457                 env,
458                 klass,
459                 "expectedIntWrapperValue",
460                 "Ljava/lang/Integer;"));
461 
462         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
463 }
464 
465 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_LongWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)466 Java_nsk_share_jpda_NativeMethodsTestThread_LongWrapperMethod(JNIEnv *env,
467         jobject thisObject, jstring message)
468 {
469         jclass klass;
470         jfieldID valueField;
471 
472         logMessage(env, thisObject, message);
473 
474         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
475 
476         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
477                 env,
478                 klass,
479                 "expectedLongWrapperValue",
480                 "Ljava/lang/Long;"));
481 
482         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
483 }
484 
485 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_FloatWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)486 Java_nsk_share_jpda_NativeMethodsTestThread_FloatWrapperMethod(JNIEnv *env,
487         jobject thisObject, jstring message)
488 {
489         jclass klass;
490         jfieldID valueField;
491 
492         logMessage(env, thisObject, message);
493 
494         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
495 
496         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
497                 env,
498                 klass,
499                 "expectedFloatWrapperValue",
500                 "Ljava/lang/Float;"));
501 
502         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
503 }
504 
505 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_DoubleWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)506 Java_nsk_share_jpda_NativeMethodsTestThread_DoubleWrapperMethod(JNIEnv *env,
507         jobject thisObject, jstring message)
508 {
509         jclass klass;
510         jfieldID valueField;
511 
512         logMessage(env, thisObject, message);
513 
514         klass = JNI_ENV_PTR(env)->GetObjectClass(JNI_ENV_ARG_2(env, thisObject));
515 
516         valueField = JNI_ENV_PTR(env)->GetStaticFieldID(JNI_ENV_ARG_4(
517                 env,
518                 klass,
519                 "expectedDoubleWrapperValue",
520                 "Ljava/lang/Double;"));
521 
522         return JNI_ENV_PTR(env)->GetStaticObjectField(JNI_ENV_ARG_3(env, klass, valueField));
523 }
524 
525 #ifdef __cplusplus
526 }
527 #endif
528