32 #define FILE_NAME "nsk/jvmti/scenarios/hotswap/HS301/hs301t001/MyClass"
33 #define DIR_NAME "newclass"
34 #define PATH_FORMAT "%s%02d/%s"
35 #define SEARCH_NAME "nsk/jvmti/scenarios/hotswap/HS301/hs301t001/MyClass"
36 #define CLASS_NAME "Lnsk/jvmti/scenarios/hotswap/HS301/hs301t001/MyClass;"
37 static jvmtiEnv * jvmti;
38
39 #ifdef STATIC_BUILD
40 JNIEXPORT jint JNICALL Agent_OnLoad_hs301t001(JavaVM *jvm, char *options, void *reserved) {
41 return Agent_Initialize(jvm, options, reserved);
42 }
43 JNIEXPORT jint JNICALL Agent_OnAttach_hs301t001(JavaVM *jvm, char *options, void *reserved) {
44 return Agent_Initialize(jvm, options, reserved);
45 }
46 JNIEXPORT jint JNI_OnLoad_hs301t001(JavaVM *jvm, char *options, void *reserved) {
47 return JNI_VERSION_1_8;
48 }
49 #endif
50 jint Agent_Initialize(JavaVM *vm, char *options, void *reserved) {
51 nsk_printf("Agent:: Agent_OnLoad .\n");
52 if ( ! NSK_VERIFY ( JNI_OK == NSK_CPP_STUB3(GetEnv, vm,
53 (void **)&jvmti, JVMTI_VERSION_1_1) ) ) {
54 nsk_printf("Agent:: Could not load JVMTI interface.\n");
55 return JNI_ERR;
56 } else {
57 jvmtiCapabilities caps;
58 jvmtiEventCallbacks eventCallbacks;
59 if (nsk_jvmti_parseOptions(options) == NSK_FALSE ) {
60 nsk_printf("# error agent Failed to parse options.\n");
61 return JNI_ERR;
62 }
63 memset(&caps, 0, sizeof(caps));
64 caps.can_redefine_classes = 1;
65 if (! NSK_JVMTI_VERIFY ( NSK_CPP_STUB2(AddCapabilities, jvmti, &caps) )) {
66 nsk_printf(" Agent:: Error occured while adding capabilities.\n");
67 return JNI_ERR;
68 }
69 memset(&eventCallbacks, 0, sizeof(eventCallbacks));
70 if (!NSK_JVMTI_VERIFY(
71 NSK_CPP_STUB3(SetEventCallbacks, jvmti,
72 &eventCallbacks, sizeof(eventCallbacks)))) {
73 nsk_printf(" Agent:: Error occured while setting event call back.\n");
74 return JNI_ERR;
75 }
76 }
77 return JNI_OK;
78 }
79
80 JNIEXPORT jboolean JNICALL
81 Java_nsk_jvmti_scenarios_hotswap_HS301_hs301t001_hs301t001_redefine(JNIEnv * jni, jobject jboj) {
82 jclass cls;
83 jboolean ret;
84 char fileName[512];
85 int redefineNumber;
86
87
88 redefineNumber=0;
89 //cls= NSK_CPP_STUB2(FindClass, jni, SEARCH_NAME);
90 if (! NSK_JNI_VERIFY(jni, (cls = NSK_CPP_STUB2(FindClass, jni, SEARCH_NAME)) != NULL) ) {
91 nsk_printf("Agent:: (*JNI)->FindClass(jni, %s) returns `null`.\n",SEARCH_NAME);
92 return NSK_FALSE;
93 }
94 ret = JNI_FALSE;
95 nsk_jvmti_getFileName(redefineNumber, FILE_NAME, fileName, sizeof(fileName)/sizeof(char));
96 if ( nsk_jvmti_redefineClass(jvmti, cls, fileName) == NSK_TRUE ) {
97 nsk_printf("Agent:: Redefine successful.\n");
98 ret = JNI_TRUE;
99 } else {
100 nsk_printf("#error Agent :: Redefine failed.\n");
101 }
102 return ret;
103 }
104
105 }
|
32 #define FILE_NAME "nsk/jvmti/scenarios/hotswap/HS301/hs301t001/MyClass"
33 #define DIR_NAME "newclass"
34 #define PATH_FORMAT "%s%02d/%s"
35 #define SEARCH_NAME "nsk/jvmti/scenarios/hotswap/HS301/hs301t001/MyClass"
36 #define CLASS_NAME "Lnsk/jvmti/scenarios/hotswap/HS301/hs301t001/MyClass;"
37 static jvmtiEnv * jvmti;
38
39 #ifdef STATIC_BUILD
40 JNIEXPORT jint JNICALL Agent_OnLoad_hs301t001(JavaVM *jvm, char *options, void *reserved) {
41 return Agent_Initialize(jvm, options, reserved);
42 }
43 JNIEXPORT jint JNICALL Agent_OnAttach_hs301t001(JavaVM *jvm, char *options, void *reserved) {
44 return Agent_Initialize(jvm, options, reserved);
45 }
46 JNIEXPORT jint JNI_OnLoad_hs301t001(JavaVM *jvm, char *options, void *reserved) {
47 return JNI_VERSION_1_8;
48 }
49 #endif
50 jint Agent_Initialize(JavaVM *vm, char *options, void *reserved) {
51 nsk_printf("Agent:: Agent_OnLoad .\n");
52 if ( ! NSK_VERIFY ( JNI_OK == vm->GetEnv((void **)&jvmti, JVMTI_VERSION_1_1) ) ) {
53 nsk_printf("Agent:: Could not load JVMTI interface.\n");
54 return JNI_ERR;
55 } else {
56 jvmtiCapabilities caps;
57 jvmtiEventCallbacks eventCallbacks;
58 if (nsk_jvmti_parseOptions(options) == NSK_FALSE ) {
59 nsk_printf("# error agent Failed to parse options.\n");
60 return JNI_ERR;
61 }
62 memset(&caps, 0, sizeof(caps));
63 caps.can_redefine_classes = 1;
64 if (! NSK_JVMTI_VERIFY (jvmti->AddCapabilities(&caps) )) {
65 nsk_printf(" Agent:: Error occured while adding capabilities.\n");
66 return JNI_ERR;
67 }
68 memset(&eventCallbacks, 0, sizeof(eventCallbacks));
69 if (!NSK_JVMTI_VERIFY(jvmti->SetEventCallbacks(&eventCallbacks, sizeof(eventCallbacks)))) {
70 nsk_printf(" Agent:: Error occured while setting event call back.\n");
71 return JNI_ERR;
72 }
73 }
74 return JNI_OK;
75 }
76
77 JNIEXPORT jboolean JNICALL
78 Java_nsk_jvmti_scenarios_hotswap_HS301_hs301t001_hs301t001_redefine(JNIEnv * jni, jobject jboj) {
79 jclass cls;
80 jboolean ret;
81 char fileName[512];
82 int redefineNumber;
83
84
85 redefineNumber=0;
86 cls = jni->FindClass(SEARCH_NAME);
87 if (! NSK_JNI_VERIFY(jni, cls != NULL) ) {
88 nsk_printf("Agent:: (*JNI)->FindClass(jni, %s) returns `null`.\n",SEARCH_NAME);
89 return NSK_FALSE;
90 }
91 ret = JNI_FALSE;
92 nsk_jvmti_getFileName(redefineNumber, FILE_NAME, fileName, sizeof(fileName)/sizeof(char));
93 if ( nsk_jvmti_redefineClass(jvmti, cls, fileName) == NSK_TRUE ) {
94 nsk_printf("Agent:: Redefine successful.\n");
95 ret = JNI_TRUE;
96 } else {
97 nsk_printf("#error Agent :: Redefine failed.\n");
98 }
99 return ret;
100 }
101
102 }
|