35 #define FILE_NAME "nsk/jvmti/scenarios/hotswap/HS301/hs301t002/MyClass"
36 #define DIR_NAME "newclass"
37 #define PATH_FORMAT "%s%02d/%s"
38 #define SEARCH_NAME "nsk/jvmti/scenarios/hotswap/HS301/hs301t002/MyClass"
39
40 static jvmtiEnv * jvmti;
41
42 #ifdef STATIC_BUILD
43 JNIEXPORT jint JNICALL Agent_OnLoad_hs301t002(JavaVM *jvm, char *options, void *reserved) {
44 return Agent_Initialize(jvm, options, reserved);
45 }
46 JNIEXPORT jint JNICALL Agent_OnAttach_hs301t002(JavaVM *jvm, char *options, void *reserved) {
47 return Agent_Initialize(jvm, options, reserved);
48 }
49 JNIEXPORT jint JNI_OnLoad_hs301t002(JavaVM *jvm, char *options, void *reserved) {
50 return JNI_VERSION_1_8;
51 }
52 #endif
53 jint Agent_Initialize(JavaVM *vm, char *options, void *reserved) {
54 nsk_printf(" Agent:: VM Started.\n");
55 if ( ! NSK_VERIFY ( JNI_OK == NSK_CPP_STUB3(GetEnv, vm,
56 (void **)&jvmti, JVMTI_VERSION_1_1) ) ) {
57 nsk_printf(" Agent ::Agent failed to get jvmti env.\n");
58 return JNI_ERR;
59 } else {
60 jvmtiCapabilities caps;
61 if (nsk_jvmti_parseOptions(options) == NSK_FALSE ) {
62 nsk_printf(" Agent:: ## error agent Failed to parse options.\n");
63 return JNI_ERR;
64 }
65 memset(&caps, 0, sizeof(caps));
66 caps.can_redefine_classes = 1;
67 if ( ! NSK_JVMTI_VERIFY ( NSK_CPP_STUB2(AddCapabilities, jvmti, &caps) ) ) {
68 nsk_printf(" Agent:: Error occured while adding capabilities.\n");
69 return JNI_ERR;
70 }
71 }
72 return JNI_OK;
73 }
74
75 /**
76 * fixed JNI signature, and droped jclass clsa (paramter from here as it was not used).
77 *
78 */
79 JNIEXPORT jboolean JNICALL
80 Java_nsk_jvmti_scenarios_hotswap_HS301_hs301t002_hs301t002_redefine(JNIEnv * jni, jobject obj) {
81 jclass cls;
82 jboolean ret;
83 char fileName[512];
84 int redefineNumber ;
85
86 redefineNumber=0;
87 ret = JNI_FALSE;
88 if (!NSK_JNI_VERIFY(jni, (cls = NSK_CPP_STUB2(FindClass, jni, SEARCH_NAME)) != NULL)) {
89 nsk_printf("Agent:: (*JNI)->FindClass(jni, %s) returns `null`.\n", SEARCH_NAME);
90 return NSK_FALSE;
91 }
92 nsk_jvmti_getFileName(redefineNumber, FILE_NAME, fileName,
93 sizeof(fileName)/sizeof(char));
94 if ( nsk_jvmti_redefineClass(jvmti, cls, fileName) == NSK_TRUE) {
95 nsk_printf("Agent:: MyClass :: Successfully redefined.\n");
96 ret = JNI_TRUE;
97 } else {
98 nsk_printf("Agent:: MyClass :: Failed to redefine.\n");
99 }
100 return ret;
101 }
102
103 }
|
35 #define FILE_NAME "nsk/jvmti/scenarios/hotswap/HS301/hs301t002/MyClass"
36 #define DIR_NAME "newclass"
37 #define PATH_FORMAT "%s%02d/%s"
38 #define SEARCH_NAME "nsk/jvmti/scenarios/hotswap/HS301/hs301t002/MyClass"
39
40 static jvmtiEnv * jvmti;
41
42 #ifdef STATIC_BUILD
43 JNIEXPORT jint JNICALL Agent_OnLoad_hs301t002(JavaVM *jvm, char *options, void *reserved) {
44 return Agent_Initialize(jvm, options, reserved);
45 }
46 JNIEXPORT jint JNICALL Agent_OnAttach_hs301t002(JavaVM *jvm, char *options, void *reserved) {
47 return Agent_Initialize(jvm, options, reserved);
48 }
49 JNIEXPORT jint JNI_OnLoad_hs301t002(JavaVM *jvm, char *options, void *reserved) {
50 return JNI_VERSION_1_8;
51 }
52 #endif
53 jint Agent_Initialize(JavaVM *vm, char *options, void *reserved) {
54 nsk_printf(" Agent:: VM Started.\n");
55 if ( ! NSK_VERIFY ( JNI_OK == vm->GetEnv((void **)&jvmti, JVMTI_VERSION_1_1) ) ) {
56 nsk_printf(" Agent ::Agent failed to get jvmti env.\n");
57 return JNI_ERR;
58 } else {
59 jvmtiCapabilities caps;
60 if (nsk_jvmti_parseOptions(options) == NSK_FALSE ) {
61 nsk_printf(" Agent:: ## error agent Failed to parse options.\n");
62 return JNI_ERR;
63 }
64 memset(&caps, 0, sizeof(caps));
65 caps.can_redefine_classes = 1;
66 if ( ! NSK_JVMTI_VERIFY (jvmti->AddCapabilities(&caps) ) ) {
67 nsk_printf(" Agent:: Error occured while adding capabilities.\n");
68 return JNI_ERR;
69 }
70 }
71 return JNI_OK;
72 }
73
74 /**
75 * fixed JNI signature, and droped jclass clsa (paramter from here as it was not used).
76 *
77 */
78 JNIEXPORT jboolean JNICALL
79 Java_nsk_jvmti_scenarios_hotswap_HS301_hs301t002_hs301t002_redefine(JNIEnv * jni, jobject obj) {
80 jclass cls;
81 jboolean ret;
82 char fileName[512];
83 int redefineNumber ;
84
85 redefineNumber=0;
86 ret = JNI_FALSE;
87 if (!NSK_JNI_VERIFY(jni, (cls = jni->FindClass(SEARCH_NAME)) != NULL)) {
88 nsk_printf("Agent:: (*JNI)->FindClass(jni, %s) returns `null`.\n", SEARCH_NAME);
89 return NSK_FALSE;
90 }
91 nsk_jvmti_getFileName(redefineNumber, FILE_NAME, fileName,
92 sizeof(fileName)/sizeof(char));
93 if ( nsk_jvmti_redefineClass(jvmti, cls, fileName) == NSK_TRUE) {
94 nsk_printf("Agent:: MyClass :: Successfully redefined.\n");
95 ret = JNI_TRUE;
96 } else {
97 nsk_printf("Agent:: MyClass :: Failed to redefine.\n");
98 }
99 return ret;
100 }
101
102 }
|