67
68 } /* heapReferenceCallback */
69
70
71 jint JNICALL primitiveFieldCallback(
72 jvmtiHeapReferenceKind reference_kind,
73 const jvmtiHeapReferenceInfo* reference_info,
74 jlong class_tag,
75 jlong* tag_ptr,
76 jvalue value,
77 jvmtiPrimitiveType value_type,
78 void* user_data)
79 {
80 CHECK_USER_DATA(user_data);
81
82 printf(" primitiveFieldCallback: ref=%s,"
83 " class_tag=%-3ld, tag=%-3ld, type=%c\n",
84 g_refKindStr[reference_kind],
85 (long) class_tag,
86 (long) DEREF(tag_ptr),
87 (int ) value_type);
88
89 fflush(0);
90
91 markTagVisited(DEREF(tag_ptr));
92
93 return JVMTI_VISIT_OBJECTS;
94
95 } /* primitiveFieldCallback */
96
97
98 jint JNICALL arrayPrimitiveValueCallback(
99 jlong class_tag,
100 jlong size,
101 jlong* tag_ptr,
102 jint element_count,
103 jvmtiPrimitiveType element_type,
104 const void* elements,
105 void* user_data)
106 {
107 CHECK_USER_DATA(user_data);
108
109 printf(" arrayPrimitiveValueCallback: class_tag=%-3ld, tag=%-3ld, len=%d, type=%c\n",
110 (long) class_tag,
111 (long) DEREF(tag_ptr),
112 (int ) element_count,
113 (int ) element_type);
114 fflush(0);
115
116 markTagVisited(DEREF(tag_ptr));
117
118 return JVMTI_VISIT_OBJECTS;
119
120 } /* arrayPrimitiveValueCallback */
121
122
123 jint JNICALL stringPrimitiveValueCallback(
124 jlong class_tag,
125 jlong size,
126 jlong* tag_ptr,
127 const jchar* value,
128 jint value_length,
129 void* user_data)
130 {
131 printf("stringPrimitiveValueCallback: class_tag=%-3ld, tag=%-3ld, len=%d\n",
132 (long) class_tag,
133 (long) DEREF(tag_ptr),
134 (int ) value_length);
135 fflush(0);
136
137 markTagVisited(DEREF(tag_ptr));
138
139 return JVMTI_VISIT_OBJECTS;
140
141 } /* stringPrimitiveValueCallback */
142
143 /* ============================================================================= */
144
145 static void createGlobalRefs(JNIEnv * jni)
146 {
147 jclass klass;
148
149 if ( ! NSK_JNI_VERIFY(jni, (klass = NSK_CPP_STUB2(FindClass, jni, JAVA_LANG_STRING_CLASS_NAME)) != NULL) ) {
150 nsk_jvmti_setFailStatus();
151 return;
152 }
153
154 if ( ! NSK_JNI_VERIFY(jni, (g_jniGlobalRef = NSK_CPP_STUB2(NewGlobalRef, jni, klass)) != NULL) ) {
155 nsk_jvmti_setFailStatus();
156 }
157
158 if ( ! NSK_JNI_VERIFY(jni, (g_jniWeakGlobalRef = NSK_CPP_STUB2(NewWeakGlobalRef, jni, klass)) != NULL) ) {
159 nsk_jvmti_setFailStatus();
160 }
161
162 } /* createGlobalRefs */
163
164 /** Agent algorithm. */
165
166 static void JNICALL agentProc(jvmtiEnv* jvmti, JNIEnv* jni, void* arg)
167 {
168 jvmtiError retCode;
169
170 printf(">>> Sync with Java code\n");
171 fflush(0);
172
173 if (!NSK_VERIFY(nsk_jvmti_waitForSync(g_timeout))) {
174 return;
175 }
176
177 printf(">>> Create JNI global references\n");
178 fflush(0);
179
180 createGlobalRefs(jni);
181
182 retCode = NSK_CPP_STUB6(FollowReferences,
183 jvmti,
184 (jint) 0, /* heap filter */
185 NULL, /* class */
186 NULL, /* inital object */
187 &g_heapCallbacks,
188 (const void *) &g_fakeUserData);
189
190 if ( ! NSK_VERIFY(retCode == JVMTI_ERROR_NONE) ) {
191 nsk_jvmti_setFailStatus();
192 }
193
194 checkThatAllTagsVisited();
195
196 printf(">>> Let debugee to finish\n");
197 fflush(0);
198
199 if (!NSK_VERIFY(nsk_jvmti_resumeSync())) {
200 return;
201 }
202
203 } /* agentProc */
204
205
206 /* ============================================================================= */
207
208 /** Agent library initialization. */
209
210 #ifdef STATIC_BUILD
|
67
68 } /* heapReferenceCallback */
69
70
71 jint JNICALL primitiveFieldCallback(
72 jvmtiHeapReferenceKind reference_kind,
73 const jvmtiHeapReferenceInfo* reference_info,
74 jlong class_tag,
75 jlong* tag_ptr,
76 jvalue value,
77 jvmtiPrimitiveType value_type,
78 void* user_data)
79 {
80 CHECK_USER_DATA(user_data);
81
82 printf(" primitiveFieldCallback: ref=%s,"
83 " class_tag=%-3ld, tag=%-3ld, type=%c\n",
84 g_refKindStr[reference_kind],
85 (long) class_tag,
86 (long) DEREF(tag_ptr),
87 (int) value_type);
88
89 fflush(0);
90
91 markTagVisited(DEREF(tag_ptr));
92
93 return JVMTI_VISIT_OBJECTS;
94
95 } /* primitiveFieldCallback */
96
97
98 jint JNICALL arrayPrimitiveValueCallback(
99 jlong class_tag,
100 jlong size,
101 jlong* tag_ptr,
102 jint element_count,
103 jvmtiPrimitiveType element_type,
104 const void* elements,
105 void* user_data)
106 {
107 CHECK_USER_DATA(user_data);
108
109 printf(" arrayPrimitiveValueCallback: class_tag=%-3ld, tag=%-3ld, len=%d, type=%c\n",
110 (long) class_tag,
111 (long) DEREF(tag_ptr),
112 (int) element_count,
113 (int) element_type);
114 fflush(0);
115
116 markTagVisited(DEREF(tag_ptr));
117
118 return JVMTI_VISIT_OBJECTS;
119
120 } /* arrayPrimitiveValueCallback */
121
122
123 jint JNICALL stringPrimitiveValueCallback(
124 jlong class_tag,
125 jlong size,
126 jlong* tag_ptr,
127 const jchar* value,
128 jint value_length,
129 void* user_data)
130 {
131 printf("stringPrimitiveValueCallback: class_tag=%-3ld, tag=%-3ld, len=%d\n",
132 (long) class_tag,
133 (long) DEREF(tag_ptr),
134 (int) value_length);
135 fflush(0);
136
137 markTagVisited(DEREF(tag_ptr));
138
139 return JVMTI_VISIT_OBJECTS;
140
141 } /* stringPrimitiveValueCallback */
142
143 /* ============================================================================= */
144
145 static void createGlobalRefs(JNIEnv * jni)
146 {
147 jclass klass;
148
149 if (!NSK_JNI_VERIFY(jni, (klass = NSK_CPP_STUB2(FindClass, jni, JAVA_LANG_STRING_CLASS_NAME)) != NULL)) {
150 nsk_jvmti_setFailStatus();
151 return;
152 }
153
154 if (!NSK_JNI_VERIFY(jni, (g_jniGlobalRef = NSK_CPP_STUB2(NewGlobalRef, jni, klass)) != NULL)) {
155 nsk_jvmti_setFailStatus();
156 }
157
158 if (!NSK_JNI_VERIFY(jni, (g_jniWeakGlobalRef = NSK_CPP_STUB2(NewWeakGlobalRef, jni, klass)) != NULL)) {
159 nsk_jvmti_setFailStatus();
160 }
161
162 } /* createGlobalRefs */
163
164 /** Agent algorithm. */
165
166 static void JNICALL agentProc(jvmtiEnv* jvmti, JNIEnv* jni, void* arg)
167 {
168 jvmtiError retCode;
169
170 printf(">>> Sync with Java code\n");
171 fflush(0);
172
173 if (!NSK_VERIFY(nsk_jvmti_waitForSync(g_timeout))) {
174 return;
175 }
176
177 printf(">>> Create JNI global references\n");
178 fflush(0);
179
180 createGlobalRefs(jni);
181
182 retCode = NSK_CPP_STUB6(FollowReferences,
183 jvmti,
184 (jint) 0, /* heap filter */
185 NULL, /* class */
186 NULL, /* inital object */
187 &g_heapCallbacks,
188 (const void *) &g_fakeUserData);
189
190 if (!NSK_VERIFY(retCode == JVMTI_ERROR_NONE)) {
191 nsk_jvmti_setFailStatus();
192 }
193
194 checkThatAllTagsVisited();
195
196 printf(">>> Let debugee to finish\n");
197 fflush(0);
198
199 if (!NSK_VERIFY(nsk_jvmti_resumeSync())) {
200 return;
201 }
202
203 } /* agentProc */
204
205
206 /* ============================================================================= */
207
208 /** Agent library initialization. */
209
210 #ifdef STATIC_BUILD
|