Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/test/runtime/6929067/invoke.c
32284 views
1
#include <assert.h>
2
#include <jni.h>
3
#include <alloca.h>
4
5
#include <pthread.h>
6
7
union env_union
8
{
9
void *void_env;
10
JNIEnv *jni_env;
11
};
12
13
union env_union tmp;
14
JNIEnv* env;
15
JavaVM* jvm;
16
JavaVMInitArgs vm_args;
17
JavaVMOption options[1];
18
jclass class_id;
19
jmethodID method_id;
20
jint result;
21
22
long product(unsigned long n, unsigned long m) {
23
if (m == 1) {
24
return n;
25
} else {
26
int *p = alloca(sizeof (int));
27
*p = n;
28
return product (n, m-1) + *p;
29
}
30
}
31
32
void *
33
floobydust (void *p)
34
{
35
(*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
36
env = tmp.jni_env;
37
38
class_id = (*env)->FindClass (env, "T");
39
assert (class_id);
40
41
method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
42
assert (method_id);
43
44
(*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
45
46
(*jvm)->DetachCurrentThread(jvm);
47
48
printf("%ld\n", product(5000,5000));
49
50
(*jvm)->AttachCurrentThread(jvm, &tmp.void_env, NULL);
51
env = tmp.jni_env;
52
53
class_id = (*env)->FindClass (env, "T");
54
assert (class_id);
55
56
method_id = (*env)->GetStaticMethodID (env, class_id, "printIt", "()V");
57
assert (method_id);
58
59
(*env)->CallStaticVoidMethod (env, class_id, method_id, NULL);
60
61
(*jvm)->DetachCurrentThread(jvm);
62
63
printf("%ld\n", product(5000,5000));
64
65
return NULL;
66
}
67
68
int
69
main (int argc, const char** argv)
70
{
71
options[0].optionString = "-Xss320k";
72
73
vm_args.version = JNI_VERSION_1_2;
74
vm_args.ignoreUnrecognized = JNI_TRUE;
75
vm_args.options = options;
76
vm_args.nOptions = 1;
77
78
result = JNI_CreateJavaVM (&jvm, &tmp.void_env, &vm_args);
79
assert (result >= 0);
80
81
env = tmp.jni_env;
82
83
floobydust (NULL);
84
85
pthread_t thr;
86
pthread_create (&thr, NULL, floobydust, NULL);
87
pthread_join (thr, NULL);
88
89
return 0;
90
}
91
92