< prev index next >

test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI01/bi01t002/bi01t002.cpp

Print this page
rev 52233 : 8212884: Remove the assignments in ifs for vmTestbase/[a-s]
Summary:
Reviewed-by:


  37 #define TOTAL_INSTRUMENTED_CLASSES 2
  38 
  39 static int clsLoadedIdx=0;
  40 static jint newClassSize[TOTAL_INSTRUMENTED_CLASSES];
  41 static unsigned char* newClassBytes[TOTAL_INSTRUMENTED_CLASSES];
  42 static jvmtiClassDefinition oldClassDef[TOTAL_INSTRUMENTED_CLASSES];
  43 
  44 /* ============================================================================= */
  45 /*
  46  * Class:     nsk_jvmti_scenarios_bcinstr_BI01_bi01t002
  47  * Method:    setNewByteCode
  48  * Signature: (I[B)Z
  49  */
  50 JNIEXPORT jboolean JNICALL
  51 Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t002_setNewByteCode(JNIEnv *jni_env,
  52                         jobject o, jint ind, jbyteArray byteCode) {
  53 
  54     jbyte* elements;
  55     jboolean isCopy;
  56 
  57     if (!NSK_JNI_VERIFY(jni_env, (newClassSize[ind] = jni_env->GetArrayLength(byteCode)) > 0)) {

  58         nsk_jvmti_setFailStatus();
  59         return NSK_FALSE;
  60     }
  61     NSK_DISPLAY1("\t... got array size: %d\n", newClassSize[ind]);
  62 
  63     if (!NSK_JNI_VERIFY(jni_env, (elements =
  64             jni_env->GetByteArrayElements(byteCode, &isCopy)) != NULL)) {
  65         nsk_jvmti_setFailStatus();
  66         return NSK_FALSE;
  67     }
  68     NSK_DISPLAY1("\t... got elements list: 0x%p\n", (void*)elements);
  69 
  70     if (!NSK_JVMTI_VERIFY(jvmti->Allocate(newClassSize[ind], &newClassBytes[ind]))) {
  71         nsk_jvmti_setFailStatus();
  72         return NSK_FALSE;
  73     }
  74     NSK_DISPLAY1("\t... created bytes array: 0x%p\n", (void*)newClassBytes[ind]);
  75 
  76     {
  77         int j;
  78         for (j = 0; j < newClassSize[ind]; j++)
  79             newClassBytes[ind][j] = (unsigned char)elements[j];
  80     }
  81     NSK_DISPLAY1("\t... copied bytecode: %d bytes\n", (int)newClassSize[ind]);
  82 
  83     NSK_DISPLAY1("\t... release elements list: 0x%p\n", (void*)elements);
  84     NSK_TRACE(jni_env->ReleaseByteArrayElements(byteCode, elements, JNI_ABORT));
  85     NSK_DISPLAY0("\t... released\n");
  86     return NSK_TRUE;
  87 }
  88 
  89 /* ============================================================================= */
  90 /*
  91  * Class:     nsk_jvmti_scenarios_bcinstr_BI01_bi01t002
  92  * Method:    setClass
  93  * Signature: (ILjava/lang/Class;)V
  94  */
  95 JNIEXPORT void JNICALL
  96 Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t002_setClass(JNIEnv *jni_env,
  97                         jobject o, jint ind, jclass cls) {
  98 
  99     if (!NSK_JNI_VERIFY(jni_env, (oldClassDef[ind].klass = (jclass)
 100              jni_env->NewGlobalRef(cls)) != NULL)) {
 101         nsk_jvmti_setFailStatus();
 102     }
 103 }
 104 
 105 /* ============================================================================= */
 106 
 107 /** Callback function for ClassFileLoadHook event. */
 108 JNIEXPORT void JNICALL
 109 cbClassFileLoadHook(jvmtiEnv *jvmti_env, JNIEnv* jni_env,
 110             jclass class_being_redefined, jobject loader, const char* name,
 111             jobject protection_domain, jint class_data_len,
 112             const unsigned char* class_data, jint* new_class_data_len,
 113             unsigned char** new_class_data) {
 114 
 115     if ( name == NULL || strcmp(name, TESTED_CLASS_NAME) ) {
 116         return;
 117     }
 118 
 119     NSK_DISPLAY3("CLASS_FILE_LOAD_HOOK event: %s\n\treceived bytecode: 0x%p:%d\n",
 120                         name, (void *)class_data, class_data_len);


 238 
 239 /** Agent library initialization. */
 240 #ifdef STATIC_BUILD
 241 JNIEXPORT jint JNICALL Agent_OnLoad_bi01t002(JavaVM *jvm, char *options, void *reserved) {
 242     return Agent_Initialize(jvm, options, reserved);
 243 }
 244 JNIEXPORT jint JNICALL Agent_OnAttach_bi01t002(JavaVM *jvm, char *options, void *reserved) {
 245     return Agent_Initialize(jvm, options, reserved);
 246 }
 247 JNIEXPORT jint JNI_OnLoad_bi01t002(JavaVM *jvm, char *options, void *reserved) {
 248     return JNI_VERSION_1_8;
 249 }
 250 #endif
 251 jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
 252 
 253     if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
 254         return JNI_ERR;
 255 
 256     timeout = nsk_jvmti_getWaitTime() * 60 * 1000;
 257 
 258     if (!NSK_VERIFY((jvmti = nsk_jvmti_createJVMTIEnv(jvm, reserved)) != NULL))

 259         return JNI_ERR;
 260 
 261     {
 262         jvmtiCapabilities caps;
 263         memset(&caps, 0, sizeof(caps));
 264 
 265         caps.can_redefine_classes = 1;
 266         if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps)))
 267             return JNI_ERR;
 268     }
 269 
 270     NSK_DISPLAY0("Set callback for CLASS_FILE_LOAD_HOOK event\n");
 271     {
 272         jvmtiEventCallbacks callbacks;
 273         jint size = (jint)sizeof(callbacks);
 274 
 275         memset(&callbacks, 0, size);
 276         callbacks.ClassFileLoadHook = cbClassFileLoadHook;
 277         if (!NSK_JVMTI_VERIFY(jvmti->SetEventCallbacks(&callbacks, size))) {
 278             return JNI_ERR;




  37 #define TOTAL_INSTRUMENTED_CLASSES 2
  38 
  39 static int clsLoadedIdx=0;
  40 static jint newClassSize[TOTAL_INSTRUMENTED_CLASSES];
  41 static unsigned char* newClassBytes[TOTAL_INSTRUMENTED_CLASSES];
  42 static jvmtiClassDefinition oldClassDef[TOTAL_INSTRUMENTED_CLASSES];
  43 
  44 /* ============================================================================= */
  45 /*
  46  * Class:     nsk_jvmti_scenarios_bcinstr_BI01_bi01t002
  47  * Method:    setNewByteCode
  48  * Signature: (I[B)Z
  49  */
  50 JNIEXPORT jboolean JNICALL
  51 Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t002_setNewByteCode(JNIEnv *jni_env,
  52                         jobject o, jint ind, jbyteArray byteCode) {
  53 
  54     jbyte* elements;
  55     jboolean isCopy;
  56 
  57     newClassSize[ind] = jni_env->GetArrayLength(byteCode);
  58     if (!NSK_JNI_VERIFY(jni_env, newClassSize[ind] > 0)) {
  59         nsk_jvmti_setFailStatus();
  60         return NSK_FALSE;
  61     }
  62     NSK_DISPLAY1("\t... got array size: %d\n", newClassSize[ind]);
  63 
  64     elements = jni_env->GetByteArrayElements(byteCode, &isCopy);
  65     if (!NSK_JNI_VERIFY(jni_env, elements != NULL)) {
  66         nsk_jvmti_setFailStatus();
  67         return NSK_FALSE;
  68     }
  69     NSK_DISPLAY1("\t... got elements list: 0x%p\n", (void*)elements);
  70 
  71     if (!NSK_JVMTI_VERIFY(jvmti->Allocate(newClassSize[ind], &newClassBytes[ind]))) {
  72         nsk_jvmti_setFailStatus();
  73         return NSK_FALSE;
  74     }
  75     NSK_DISPLAY1("\t... created bytes array: 0x%p\n", (void*)newClassBytes[ind]);
  76 
  77     {
  78         int j;
  79         for (j = 0; j < newClassSize[ind]; j++)
  80             newClassBytes[ind][j] = (unsigned char)elements[j];
  81     }
  82     NSK_DISPLAY1("\t... copied bytecode: %d bytes\n", (int)newClassSize[ind]);
  83 
  84     NSK_DISPLAY1("\t... release elements list: 0x%p\n", (void*)elements);
  85     NSK_TRACE(jni_env->ReleaseByteArrayElements(byteCode, elements, JNI_ABORT));
  86     NSK_DISPLAY0("\t... released\n");
  87     return NSK_TRUE;
  88 }
  89 
  90 /* ============================================================================= */
  91 /*
  92  * Class:     nsk_jvmti_scenarios_bcinstr_BI01_bi01t002
  93  * Method:    setClass
  94  * Signature: (ILjava/lang/Class;)V
  95  */
  96 JNIEXPORT void JNICALL
  97 Java_nsk_jvmti_scenarios_bcinstr_BI01_bi01t002_setClass(JNIEnv *jni_env,
  98                         jobject o, jint ind, jclass cls) {
  99 
 100     oldClassDef[ind].klass = (jclass) jni_env->NewGlobalRef(cls);
 101     if (!NSK_JNI_VERIFY(jni_env, oldClassDef[ind].klass != NULL)) {
 102         nsk_jvmti_setFailStatus();
 103     }
 104 }
 105 
 106 /* ============================================================================= */
 107 
 108 /** Callback function for ClassFileLoadHook event. */
 109 JNIEXPORT void JNICALL
 110 cbClassFileLoadHook(jvmtiEnv *jvmti_env, JNIEnv* jni_env,
 111             jclass class_being_redefined, jobject loader, const char* name,
 112             jobject protection_domain, jint class_data_len,
 113             const unsigned char* class_data, jint* new_class_data_len,
 114             unsigned char** new_class_data) {
 115 
 116     if ( name == NULL || strcmp(name, TESTED_CLASS_NAME) ) {
 117         return;
 118     }
 119 
 120     NSK_DISPLAY3("CLASS_FILE_LOAD_HOOK event: %s\n\treceived bytecode: 0x%p:%d\n",
 121                         name, (void *)class_data, class_data_len);


 239 
 240 /** Agent library initialization. */
 241 #ifdef STATIC_BUILD
 242 JNIEXPORT jint JNICALL Agent_OnLoad_bi01t002(JavaVM *jvm, char *options, void *reserved) {
 243     return Agent_Initialize(jvm, options, reserved);
 244 }
 245 JNIEXPORT jint JNICALL Agent_OnAttach_bi01t002(JavaVM *jvm, char *options, void *reserved) {
 246     return Agent_Initialize(jvm, options, reserved);
 247 }
 248 JNIEXPORT jint JNI_OnLoad_bi01t002(JavaVM *jvm, char *options, void *reserved) {
 249     return JNI_VERSION_1_8;
 250 }
 251 #endif
 252 jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
 253 
 254     if (!NSK_VERIFY(nsk_jvmti_parseOptions(options)))
 255         return JNI_ERR;
 256 
 257     timeout = nsk_jvmti_getWaitTime() * 60 * 1000;
 258 
 259     jvmti = nsk_jvmti_createJVMTIEnv(jvm, reserved);
 260     if (!NSK_VERIFY(jvmti != NULL))
 261         return JNI_ERR;
 262 
 263     {
 264         jvmtiCapabilities caps;
 265         memset(&caps, 0, sizeof(caps));
 266 
 267         caps.can_redefine_classes = 1;
 268         if (!NSK_JVMTI_VERIFY(jvmti->AddCapabilities(&caps)))
 269             return JNI_ERR;
 270     }
 271 
 272     NSK_DISPLAY0("Set callback for CLASS_FILE_LOAD_HOOK event\n");
 273     {
 274         jvmtiEventCallbacks callbacks;
 275         jint size = (jint)sizeof(callbacks);
 276 
 277         memset(&callbacks, 0, size);
 278         callbacks.ClassFileLoadHook = cbClassFileLoadHook;
 279         if (!NSK_JVMTI_VERIFY(jvmti->SetEventCallbacks(&callbacks, size))) {
 280             return JNI_ERR;


< prev index next >