77 if (tag != TAG_VALUE) {
78 success = 0;
79 NSK_COMPLAIN2("%s: unexpected tag value, expected is %ld\n", agentName, TAG_VALUE);
80 } else {
81 success = 1;
82 }
83
84 /*
85 * Can't use JNI functions from ObjectFree event handler, in this test target application calls
86 * function nsk_aod_agentFinished
87 */
88 }
89
90 int registerNativeMethods(JNIEnv* jni) {
91 jclass appClass;
92 JNINativeMethod nativeMethods[] = {
93 {(char*) "setTagFor", (char*) "(Ljava/lang/Object;)Z", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_setTagFor},
94 {(char*) "shutdownAgent", (char*) "()V", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_shutdownAgent}};
95 jint nativeMethodsNumber = 2;
96
97 if (!NSK_JNI_VERIFY(jni, (appClass =
98 jni->FindClass(ATTACH021_TARGET_APP_CLASS_NAME)) != NULL)) {
99 return NSK_FALSE;
100 }
101
102 if (!NSK_JNI_VERIFY(jni,
103 (jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber) == 0))) {
104 return NSK_FALSE;
105 }
106
107 return NSK_TRUE;
108 }
109
110 #ifdef STATIC_BUILD
111 JNIEXPORT jint JNI_OnLoad_attach021Agent00(JavaVM *jvm, char *options, void *reserved) {
112 return JNI_VERSION_1_8;
113 }
114 #endif
115
116 JNIEXPORT jint JNICALL
117 #ifdef STATIC_BUILD
118 Agent_OnAttach_attach021Agent00(JavaVM *vm, char *optionsString, void *reserved)
119 #else
120 Agent_OnAttach(JavaVM *vm, char *optionsString, void *reserved)
121 #endif
122 {
123 jvmtiEventCallbacks eventCallbacks;
124 jvmtiCapabilities caps;
125 JNIEnv* jni;
126
127 if (!NSK_VERIFY((options = (Options*) nsk_aod_createOptions(optionsString)) != NULL))
128 return JNI_ERR;
129
130 agentName = nsk_aod_getOptionValue(options, NSK_AOD_AGENT_NAME_OPTION);
131
132 if ((jni = (JNIEnv*) nsk_aod_createJNIEnv(vm)) == NULL)
133 return JNI_ERR;
134
135 if (!NSK_VERIFY((jvmti = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL))
136 return JNI_ERR;
137
138 if (!NSK_VERIFY(registerNativeMethods(jni))) {
139 return JNI_ERR;
140 }
141
142 memset(&caps, 0, sizeof(caps));
143 caps.can_tag_objects = 1;
144 caps.can_generate_object_free_events = 1;
145 if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps))) {
146 return JNI_ERR;
147 }
148
149 memset(&eventCallbacks,0, sizeof(eventCallbacks));
150 eventCallbacks.ObjectFree = objectFreeHandler;
151 if (!NSK_JVMTI_VERIFY(jvmti->SetEventCallbacks(&eventCallbacks, sizeof(eventCallbacks)))) {
152 return JNI_ERR;
153 }
154
155 if (!(nsk_jvmti_aod_enableEvent(jvmti, JVMTI_EVENT_OBJECT_FREE))) {
|
77 if (tag != TAG_VALUE) {
78 success = 0;
79 NSK_COMPLAIN2("%s: unexpected tag value, expected is %ld\n", agentName, TAG_VALUE);
80 } else {
81 success = 1;
82 }
83
84 /*
85 * Can't use JNI functions from ObjectFree event handler, in this test target application calls
86 * function nsk_aod_agentFinished
87 */
88 }
89
90 int registerNativeMethods(JNIEnv* jni) {
91 jclass appClass;
92 JNINativeMethod nativeMethods[] = {
93 {(char*) "setTagFor", (char*) "(Ljava/lang/Object;)Z", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_setTagFor},
94 {(char*) "shutdownAgent", (char*) "()V", (void*) Java_nsk_jvmti_AttachOnDemand_attach021_attach021Target_shutdownAgent}};
95 jint nativeMethodsNumber = 2;
96
97 appClass = jni->FindClass(ATTACH021_TARGET_APP_CLASS_NAME);
98 if (!NSK_JNI_VERIFY(jni, appClass != NULL)) {
99 return NSK_FALSE;
100 }
101
102 if (!NSK_JNI_VERIFY(jni,
103 (jni->RegisterNatives(appClass, nativeMethods, nativeMethodsNumber) == 0))) {
104 return NSK_FALSE;
105 }
106
107 return NSK_TRUE;
108 }
109
110 #ifdef STATIC_BUILD
111 JNIEXPORT jint JNI_OnLoad_attach021Agent00(JavaVM *jvm, char *options, void *reserved) {
112 return JNI_VERSION_1_8;
113 }
114 #endif
115
116 JNIEXPORT jint JNICALL
117 #ifdef STATIC_BUILD
118 Agent_OnAttach_attach021Agent00(JavaVM *vm, char *optionsString, void *reserved)
119 #else
120 Agent_OnAttach(JavaVM *vm, char *optionsString, void *reserved)
121 #endif
122 {
123 jvmtiEventCallbacks eventCallbacks;
124 jvmtiCapabilities caps;
125 JNIEnv* jni;
126
127 options = (Options*) nsk_aod_createOptions(optionsString);
128 if (!NSK_VERIFY(options != NULL))
129 return JNI_ERR;
130
131 agentName = nsk_aod_getOptionValue(options, NSK_AOD_AGENT_NAME_OPTION);
132
133 jni = (JNIEnv*) nsk_aod_createJNIEnv(vm);
134 if (jni == NULL)
135 return JNI_ERR;
136
137 jvmti = nsk_jvmti_createJVMTIEnv(vm, reserved);
138 if (!NSK_VERIFY(jvmti != NULL))
139 return JNI_ERR;
140
141 if (!NSK_VERIFY(registerNativeMethods(jni))) {
142 return JNI_ERR;
143 }
144
145 memset(&caps, 0, sizeof(caps));
146 caps.can_tag_objects = 1;
147 caps.can_generate_object_free_events = 1;
148 if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps))) {
149 return JNI_ERR;
150 }
151
152 memset(&eventCallbacks,0, sizeof(eventCallbacks));
153 eventCallbacks.ObjectFree = objectFreeHandler;
154 if (!NSK_JVMTI_VERIFY(jvmti->SetEventCallbacks(&eventCallbacks, sizeof(eventCallbacks)))) {
155 return JNI_ERR;
156 }
157
158 if (!(nsk_jvmti_aod_enableEvent(jvmti, JVMTI_EVENT_OBJECT_FREE))) {
|