test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t002/bi01t002.cpp
changeset 52081 ca7ddf0a1d47
parent 51774 79dc492c00ab
child 52284 1f402d1f630f
equal deleted inserted replaced
52080:a2c72b476c9f 52081:ca7ddf0a1d47
    52                         jobject o, jint ind, jbyteArray byteCode) {
    52                         jobject o, jint ind, jbyteArray byteCode) {
    53 
    53 
    54     jbyte* elements;
    54     jbyte* elements;
    55     jboolean isCopy;
    55     jboolean isCopy;
    56 
    56 
    57     if (!NSK_JNI_VERIFY(jni_env, (newClassSize[ind] =
    57     if (!NSK_JNI_VERIFY(jni_env, (newClassSize[ind] = jni_env->GetArrayLength(byteCode)) > 0)) {
    58             NSK_CPP_STUB2(GetArrayLength, jni_env, byteCode)) > 0)) {
       
    59         nsk_jvmti_setFailStatus();
    58         nsk_jvmti_setFailStatus();
    60         return NSK_FALSE;
    59         return NSK_FALSE;
    61     }
    60     }
    62     NSK_DISPLAY1("\t... got array size: %d\n", newClassSize[ind]);
    61     NSK_DISPLAY1("\t... got array size: %d\n", newClassSize[ind]);
    63 
    62 
    64     if (!NSK_JNI_VERIFY(jni_env, (elements =
    63     if (!NSK_JNI_VERIFY(jni_env, (elements =
    65             NSK_CPP_STUB3(GetByteArrayElements, jni_env, byteCode,
    64             jni_env->GetByteArrayElements(byteCode, &isCopy)) != NULL)) {
    66                                                         &isCopy)) != NULL)) {
       
    67         nsk_jvmti_setFailStatus();
    65         nsk_jvmti_setFailStatus();
    68         return NSK_FALSE;
    66         return NSK_FALSE;
    69     }
    67     }
    70     NSK_DISPLAY1("\t... got elements list: 0x%p\n", (void*)elements);
    68     NSK_DISPLAY1("\t... got elements list: 0x%p\n", (void*)elements);
    71 
    69 
    72     if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(Allocate, jvmti,
    70     if (!NSK_JVMTI_VERIFY(jvmti->Allocate(newClassSize[ind], &newClassBytes[ind]))) {
    73                                 newClassSize[ind], &newClassBytes[ind]))) {
       
    74         nsk_jvmti_setFailStatus();
    71         nsk_jvmti_setFailStatus();
    75         return NSK_FALSE;
    72         return NSK_FALSE;
    76     }
    73     }
    77     NSK_DISPLAY1("\t... created bytes array: 0x%p\n", (void*)newClassBytes[ind]);
    74     NSK_DISPLAY1("\t... created bytes array: 0x%p\n", (void*)newClassBytes[ind]);
    78 
    75 
    82             newClassBytes[ind][j] = (unsigned char)elements[j];
    79             newClassBytes[ind][j] = (unsigned char)elements[j];
    83     }
    80     }
    84     NSK_DISPLAY1("\t... copied bytecode: %d bytes\n", (int)newClassSize[ind]);
    81     NSK_DISPLAY1("\t... copied bytecode: %d bytes\n", (int)newClassSize[ind]);
    85 
    82 
    86     NSK_DISPLAY1("\t... release elements list: 0x%p\n", (void*)elements);
    83     NSK_DISPLAY1("\t... release elements list: 0x%p\n", (void*)elements);
    87     NSK_TRACE(NSK_CPP_STUB4(ReleaseByteArrayElements, jni_env, byteCode, elements, JNI_ABORT));
    84     NSK_TRACE(jni_env->ReleaseByteArrayElements(byteCode, elements, JNI_ABORT));
    88     NSK_DISPLAY0("\t... released\n");
    85     NSK_DISPLAY0("\t... released\n");
    89     return NSK_TRUE;
    86     return NSK_TRUE;
    90 }
    87 }
    91 
    88 
    92 /* ============================================================================= */
    89 /* ============================================================================= */
    98 JNIEXPORT void JNICALL
    95 JNIEXPORT void JNICALL
    99 Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t002_setClass(JNIEnv *jni_env,
    96 Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t002_setClass(JNIEnv *jni_env,
   100                         jobject o, jint ind, jclass cls) {
    97                         jobject o, jint ind, jclass cls) {
   101 
    98 
   102     if (!NSK_JNI_VERIFY(jni_env, (oldClassDef[ind].klass = (jclass)
    99     if (!NSK_JNI_VERIFY(jni_env, (oldClassDef[ind].klass = (jclass)
   103              NSK_CPP_STUB2(NewGlobalRef, jni_env, cls)) != NULL)) {
   100              jni_env->NewGlobalRef(cls)) != NULL)) {
   104         nsk_jvmti_setFailStatus();
   101         nsk_jvmti_setFailStatus();
   105     }
   102     }
   106 }
   103 }
   107 
   104 
   108 /* ============================================================================= */
   105 /* ============================================================================= */
   129         /*store original byte code, it will be used to do final redefinition*/
   126         /*store original byte code, it will be used to do final redefinition*/
   130         int j;
   127         int j;
   131         unsigned char *arr;
   128         unsigned char *arr;
   132 
   129 
   133         oldClassDef[clsLoadedIdx].class_byte_count = class_data_len;
   130         oldClassDef[clsLoadedIdx].class_byte_count = class_data_len;
   134         if (!NSK_JVMTI_VERIFY(
   131         if (!NSK_JVMTI_VERIFY(jvmti_env->Allocate(class_data_len, &arr))) {
   135                 NSK_CPP_STUB3(Allocate, jvmti_env, class_data_len,
       
   136                                 &arr))) {
       
   137             nsk_jvmti_setFailStatus();
   132             nsk_jvmti_setFailStatus();
   138             return;
   133             return;
   139         }
   134         }
   140         for (j = 0; j < class_data_len; j++) {
   135         for (j = 0; j < class_data_len; j++) {
   141             arr[j] = class_data[j];
   136             arr[j] = class_data[j];
   187     NSK_DISPLAY0("Wait for debuggee to check instrumentation code works nsk_jvmti_waitForSync#3\n");
   182     NSK_DISPLAY0("Wait for debuggee to check instrumentation code works nsk_jvmti_waitForSync#3\n");
   188     if (!nsk_jvmti_waitForSync(timeout))
   183     if (!nsk_jvmti_waitForSync(timeout))
   189         return;
   184         return;
   190 
   185 
   191     NSK_DISPLAY0("Notification disabled for CLASS_FILE_LOAD_HOOK event\n");
   186     NSK_DISPLAY0("Notification disabled for CLASS_FILE_LOAD_HOOK event\n");
   192     if (!NSK_JVMTI_VERIFY(
   187     if (!NSK_JVMTI_VERIFY(jvmti->SetEventNotificationMode(JVMTI_DISABLE,
   193             NSK_CPP_STUB4(SetEventNotificationMode, jvmti, JVMTI_DISABLE,
   188                                                           JVMTI_EVENT_CLASS_FILE_LOAD_HOOK,
   194                                 JVMTI_EVENT_CLASS_FILE_LOAD_HOOK, NULL))) {
   189                                                           NULL))) {
   195         nsk_jvmti_setFailStatus();
   190         nsk_jvmti_setFailStatus();
   196         return;
   191         return;
   197     }
   192     }
   198 
   193 
   199     if (!nsk_jvmti_resumeSync())
   194     if (!nsk_jvmti_resumeSync())
   214         if (nsk_getVerboseMode()) {
   209         if (nsk_getVerboseMode()) {
   215             nsk_printHexBytes("   ", 16, oldClassDef[i].class_byte_count,
   210             nsk_printHexBytes("   ", 16, oldClassDef[i].class_byte_count,
   216                                     oldClassDef[i].class_bytes);
   211                                     oldClassDef[i].class_bytes);
   217         }
   212         }
   218     }
   213     }
   219     if (!NSK_JVMTI_VERIFY(
   214     if (!NSK_JVMTI_VERIFY(jvmti->RedefineClasses(TOTAL_INSTRUMENTED_CLASSES, oldClassDef))) {
   220             NSK_CPP_STUB3(RedefineClasses, jvmti, TOTAL_INSTRUMENTED_CLASSES,
       
   221                             oldClassDef))) {
       
   222         nsk_jvmti_setFailStatus();
   215         nsk_jvmti_setFailStatus();
   223         return;
   216         return;
   224     }
   217     }
   225 
   218 
   226     if (!nsk_jvmti_resumeSync())
   219     if (!nsk_jvmti_resumeSync())
   230     NSK_DISPLAY0("Wait for debuggee to check old byte code works nsk_jvmti_waitForSync#5\n");
   223     NSK_DISPLAY0("Wait for debuggee to check old byte code works nsk_jvmti_waitForSync#5\n");
   231     if (!nsk_jvmti_waitForSync(timeout))
   224     if (!nsk_jvmti_waitForSync(timeout))
   232         return;
   225         return;
   233 
   226 
   234     for (i = 0; i < TOTAL_INSTRUMENTED_CLASSES; i++) {
   227     for (i = 0; i < TOTAL_INSTRUMENTED_CLASSES; i++) {
   235         NSK_CPP_STUB2(DeleteGlobalRef, agentJNI, oldClassDef[i].klass);
   228         agentJNI->DeleteGlobalRef(oldClassDef[i].klass);
   236     }
   229     }
   237 
   230 
   238     NSK_DISPLAY0("Let debuggee to finish\n");
   231     NSK_DISPLAY0("Let debuggee to finish\n");
   239     if (!nsk_jvmti_resumeSync())
   232     if (!nsk_jvmti_resumeSync())
   240         return;
   233         return;
   268     {
   261     {
   269         jvmtiCapabilities caps;
   262         jvmtiCapabilities caps;
   270         memset(&caps, 0, sizeof(caps));
   263         memset(&caps, 0, sizeof(caps));
   271 
   264 
   272         caps.can_redefine_classes = 1;
   265         caps.can_redefine_classes = 1;
   273         if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, jvmti, &caps)))
   266         if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps)))
   274             return JNI_ERR;
   267             return JNI_ERR;
   275     }
   268     }
   276 
   269 
   277     NSK_DISPLAY0("Set callback for CLASS_FILE_LOAD_HOOK event\n");
   270     NSK_DISPLAY0("Set callback for CLASS_FILE_LOAD_HOOK event\n");
   278     {
   271     {
   279         jvmtiEventCallbacks callbacks;
   272         jvmtiEventCallbacks callbacks;
   280         jint size = (jint)sizeof(callbacks);
   273         jint size = (jint)sizeof(callbacks);
   281 
   274 
   282         memset(&callbacks, 0, size);
   275         memset(&callbacks, 0, size);
   283         callbacks.ClassFileLoadHook = cbClassFileLoadHook;
   276         callbacks.ClassFileLoadHook = cbClassFileLoadHook;
   284         if (!NSK_JVMTI_VERIFY(
   277         if (!NSK_JVMTI_VERIFY(jvmti->SetEventCallbacks(&callbacks, size))) {
   285                 NSK_CPP_STUB3(SetEventCallbacks, jvmti, &callbacks, size))) {
       
   286             return JNI_ERR;
   278             return JNI_ERR;
   287         }
   279         }
   288     }
   280     }
   289 
   281 
   290     NSK_DISPLAY0("Set notification enabled for CLASS_FILE_LOAD_HOOK event\n");
   282     NSK_DISPLAY0("Set notification enabled for CLASS_FILE_LOAD_HOOK event\n");
   291     if (!NSK_JVMTI_VERIFY(
   283     if (!NSK_JVMTI_VERIFY(jvmti->SetEventNotificationMode(JVMTI_ENABLE,
   292             NSK_CPP_STUB4(SetEventNotificationMode, jvmti, JVMTI_ENABLE,
   284                                                           JVMTI_EVENT_CLASS_FILE_LOAD_HOOK,
   293                                 JVMTI_EVENT_CLASS_FILE_LOAD_HOOK, NULL))) {
   285                                                           NULL))) {
   294         nsk_jvmti_setFailStatus();
   286         nsk_jvmti_setFailStatus();
   295         return NSK_FALSE;
   287         return NSK_FALSE;
   296     }
   288     }
   297 
   289 
   298     if (!NSK_VERIFY(nsk_jvmti_setAgentProc(agentProc, NULL)))
   290     if (!NSK_VERIFY(nsk_jvmti_setAgentProc(agentProc, NULL)))