36
37 /* scaffold objects */
38 static jlong timeout = 0;
39
40 /* event counts */
41 static int SingleStepEventsCount = 0;
42
43 /* ========================================================================== */
44
45 /** callback functions **/
46
47 static void JNICALL
48 SingleStep(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread,
49 jmethodID method, jlocation location) {
50 char *name = NULL;
51 char *signature = NULL;
52 char buffer[32];
53
54 SingleStepEventsCount++;
55
56 NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode,
57 jvmti_env, JVMTI_DISABLE, JVMTI_EVENT_SINGLE_STEP, NULL));
58
59 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB5(GetMethodName,
60 jvmti_env, method, &name, &signature, NULL))) {
61 nsk_jvmti_setFailStatus();
62 return;
63 }
64 NSK_DISPLAY3("SingleStep event: %s%s, location=%s\n", name, signature,
65 jlong_to_string(location, buffer));
66 if (name != NULL)
67 NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)name);
68 if (signature != NULL)
69 NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)signature);
70 }
71
72 /* ========================================================================== */
73
74 /** Agent algorithm. */
75 static void JNICALL
76 agentProc(jvmtiEnv* jvmti, JNIEnv* jni, void* arg) {
77
78 if (!nsk_jvmti_waitForSync(timeout))
79 return;
80
81 /* resume debugee and wait for sync */
82 if (!nsk_jvmti_resumeSync())
83 return;
84 if (!nsk_jvmti_waitForSync(timeout))
85 return;
86
87 NSK_DISPLAY1("SingleStep events received: %d\n",
88 SingleStepEventsCount);
89 if (!NSK_VERIFY(SingleStepEventsCount == 0))
111 jvmtiEnv* jvmti = NULL;
112 jvmtiCapabilities caps;
113 jvmtiEventCallbacks callbacks;
114
115 NSK_DISPLAY0("Agent_OnLoad\n");
116
117 if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
118 return JNI_ERR;
119
120 timeout = nsk_jvmti_getWaitTime() * 60 * 1000;
121
122 if (!NSK_VERIFY((jvmti =
123 nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL))
124 return JNI_ERR;
125
126 if (!NSK_VERIFY(nsk_jvmti_setAgentProc(agentProc, NULL)))
127 return JNI_ERR;
128
129 memset(&caps, 0, sizeof(caps));
130 caps.can_generate_single_step_events = 1;
131 if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, jvmti, &caps))) {
132 return JNI_ERR;
133 }
134
135 memset(&callbacks, 0, sizeof(callbacks));
136 callbacks.SingleStep = &SingleStep;
137 if (!NSK_VERIFY(nsk_jvmti_init_MA(&callbacks)))
138 return JNI_ERR;
139
140 return JNI_OK;
141 }
142
143 /* ========================================================================== */
144
145 }
|
36
37 /* scaffold objects */
38 static jlong timeout = 0;
39
40 /* event counts */
41 static int SingleStepEventsCount = 0;
42
43 /* ========================================================================== */
44
45 /** callback functions **/
46
47 static void JNICALL
48 SingleStep(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread,
49 jmethodID method, jlocation location) {
50 char *name = NULL;
51 char *signature = NULL;
52 char buffer[32];
53
54 SingleStepEventsCount++;
55
56 NSK_JVMTI_VERIFY(jvmti_env->SetEventNotificationMode(JVMTI_DISABLE, JVMTI_EVENT_SINGLE_STEP, NULL));
57
58 if (!NSK_JVMTI_VERIFY(jvmti_env->GetMethodName(method, &name, &signature, NULL))) {
59 nsk_jvmti_setFailStatus();
60 return;
61 }
62 NSK_DISPLAY3("SingleStep event: %s%s, location=%s\n", name, signature,
63 jlong_to_string(location, buffer));
64 if (name != NULL)
65 jvmti_env->Deallocate((unsigned char*)name);
66 if (signature != NULL)
67 jvmti_env->Deallocate((unsigned char*)signature);
68 }
69
70 /* ========================================================================== */
71
72 /** Agent algorithm. */
73 static void JNICALL
74 agentProc(jvmtiEnv* jvmti, JNIEnv* jni, void* arg) {
75
76 if (!nsk_jvmti_waitForSync(timeout))
77 return;
78
79 /* resume debugee and wait for sync */
80 if (!nsk_jvmti_resumeSync())
81 return;
82 if (!nsk_jvmti_waitForSync(timeout))
83 return;
84
85 NSK_DISPLAY1("SingleStep events received: %d\n",
86 SingleStepEventsCount);
87 if (!NSK_VERIFY(SingleStepEventsCount == 0))
109 jvmtiEnv* jvmti = NULL;
110 jvmtiCapabilities caps;
111 jvmtiEventCallbacks callbacks;
112
113 NSK_DISPLAY0("Agent_OnLoad\n");
114
115 if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
116 return JNI_ERR;
117
118 timeout = nsk_jvmti_getWaitTime() * 60 * 1000;
119
120 if (!NSK_VERIFY((jvmti =
121 nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL))
122 return JNI_ERR;
123
124 if (!NSK_VERIFY(nsk_jvmti_setAgentProc(agentProc, NULL)))
125 return JNI_ERR;
126
127 memset(&caps, 0, sizeof(caps));
128 caps.can_generate_single_step_events = 1;
129 if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps))) {
130 return JNI_ERR;
131 }
132
133 memset(&callbacks, 0, sizeof(callbacks));
134 callbacks.SingleStep = &SingleStep;
135 if (!NSK_VERIFY(nsk_jvmti_init_MA(&callbacks)))
136 return JNI_ERR;
137
138 return JNI_OK;
139 }
140
141 /* ========================================================================== */
142
143 }
|