24 #include <jvmti.h>
25 #include "agent_common.h"
26 #include <string.h>
27 #include "jvmti_tools.h"
28
29 extern "C" {
30
31 #define FILE_NAME "nsk/jvmti/scenarios/hotswap/HS302/hs302t006r/MyClass"
32 #define CLASS_NAME "Lnsk/jvmti/scenarios/hotswap/HS302/hs302t006r/MyClass;"
33
34 void JNICALL callbackClassPrepare(jvmtiEnv *jvmti_env,
35 JNIEnv* jni_env,
36 jthread thread,
37 jclass klass) {
38 char * className;
39 char * generic;
40 int redefineNumber=0;
41 jvmti_env->GetClassSignature(klass, &className, &generic);
42 if (strcmp(className,CLASS_NAME) == 0) {
43 char fileName[512];
44 nsk_jvmti_disableNotification(jvmti_env, JVMTI_EVENT_CLASS_PREPARE, NULL );
45 nsk_jvmti_getFileName(redefineNumber, FILE_NAME, fileName,
46 sizeof(fileName)/sizeof(char));
47 if ( nsk_jvmti_redefineClass(jvmti_env, klass, fileName) == NSK_TRUE ) {
48 nsk_printf("Redefine successful ..\n");
49 } else {
50 nsk_printf("# error :: Redefine failed..\n");
51 }
52 }
53 }
54
55 #ifdef STATIC_BUILD
56 JNIEXPORT jint JNICALL Agent_OnLoad_hs302t006(JavaVM *jvm, char *options, void *reserved) {
57 return Agent_Initialize(jvm, options, reserved);
58 }
59 JNIEXPORT jint JNICALL Agent_OnAttach_hs302t006(JavaVM *jvm, char *options, void *reserved) {
60 return Agent_Initialize(jvm, options, reserved);
61 }
62 JNIEXPORT jint JNI_OnLoad_hs302t006(JavaVM *jvm, char *options, void *reserved) {
63 return JNI_VERSION_1_8;
64 }
65 #endif
66 jint Agent_Initialize(JavaVM *vm, char *options, void *reserved) {
67 jint rc ;
68 jvmtiEnv * jvmti;
69 nsk_printf("Agent:: VM.. Started..\n");
70 rc=vm->GetEnv((void **)&jvmti, JVMTI_VERSION_1_1);
71 if ( rc!= JNI_OK ) {
72 nsk_printf("Agent:: Could not load JVMTI interface \n");
73 return JNI_ERR;
74 } else {
75 jvmtiCapabilities caps;
76 jvmtiEventCallbacks eventCallbacks;
77 if (nsk_jvmti_parseOptions(options) == NSK_FALSE ) {
78 nsk_printf("# error agent Failed to parse options \n");
79 return JNI_ERR;
80 }
81 memset(&caps, 0, sizeof(caps));
82 caps.can_redefine_classes = 1;
83 caps.can_generate_all_class_hook_events=1;
84 jvmti->AddCapabilities(&caps);
85 memset(&eventCallbacks, 0, sizeof(eventCallbacks));
86 eventCallbacks.ClassPrepare = &callbackClassPrepare;
87 rc=jvmti->SetEventCallbacks(&eventCallbacks, sizeof(eventCallbacks));
88 if (rc != JVMTI_ERROR_NONE) {
89 nsk_printf(" Agent:: Error occured while setting event call back \n");
90 return JNI_ERR;
91 }
92 if ( nsk_jvmti_enableNotification(jvmti, JVMTI_EVENT_CLASS_PREPARE, NULL) == NSK_TRUE ) {
93 nsk_printf(" Enabled. noftification..");
94 } else {
95 nsk_printf(" Failed to Enable ..");
96 }
97 }
98 return JNI_OK;
99 }
100
101 }
|
24 #include <jvmti.h>
25 #include "agent_common.h"
26 #include <string.h>
27 #include "jvmti_tools.h"
28
29 extern "C" {
30
31 #define FILE_NAME "nsk/jvmti/scenarios/hotswap/HS302/hs302t006r/MyClass"
32 #define CLASS_NAME "Lnsk/jvmti/scenarios/hotswap/HS302/hs302t006r/MyClass;"
33
34 void JNICALL callbackClassPrepare(jvmtiEnv *jvmti_env,
35 JNIEnv* jni_env,
36 jthread thread,
37 jclass klass) {
38 char * className;
39 char * generic;
40 int redefineNumber=0;
41 jvmti_env->GetClassSignature(klass, &className, &generic);
42 if (strcmp(className,CLASS_NAME) == 0) {
43 char fileName[512];
44 nsk_jvmti_disableNotification(jvmti_env, JVMTI_EVENT_CLASS_PREPARE, NULL);
45 nsk_jvmti_getFileName(redefineNumber, FILE_NAME, fileName,
46 sizeof(fileName)/sizeof(char));
47 if (nsk_jvmti_redefineClass(jvmti_env, klass, fileName) == NSK_TRUE) {
48 nsk_printf("Redefine successful ..\n");
49 } else {
50 nsk_printf("# error :: Redefine failed..\n");
51 }
52 }
53 }
54
55 #ifdef STATIC_BUILD
56 JNIEXPORT jint JNICALL Agent_OnLoad_hs302t006(JavaVM *jvm, char *options, void *reserved) {
57 return Agent_Initialize(jvm, options, reserved);
58 }
59 JNIEXPORT jint JNICALL Agent_OnAttach_hs302t006(JavaVM *jvm, char *options, void *reserved) {
60 return Agent_Initialize(jvm, options, reserved);
61 }
62 JNIEXPORT jint JNI_OnLoad_hs302t006(JavaVM *jvm, char *options, void *reserved) {
63 return JNI_VERSION_1_8;
64 }
65 #endif
66 jint Agent_Initialize(JavaVM *vm, char *options, void *reserved) {
67 jint rc ;
68 jvmtiEnv * jvmti;
69 nsk_printf("Agent:: VM.. Started..\n");
70 rc=vm->GetEnv((void **)&jvmti, JVMTI_VERSION_1_1);
71 if (rc!= JNI_OK) {
72 nsk_printf("Agent:: Could not load JVMTI interface \n");
73 return JNI_ERR;
74 } else {
75 jvmtiCapabilities caps;
76 jvmtiEventCallbacks eventCallbacks;
77 if (nsk_jvmti_parseOptions(options) == NSK_FALSE) {
78 nsk_printf("# error agent Failed to parse options \n");
79 return JNI_ERR;
80 }
81 memset(&caps, 0, sizeof(caps));
82 caps.can_redefine_classes = 1;
83 caps.can_generate_all_class_hook_events=1;
84 jvmti->AddCapabilities(&caps);
85 memset(&eventCallbacks, 0, sizeof(eventCallbacks));
86 eventCallbacks.ClassPrepare = &callbackClassPrepare;
87 rc=jvmti->SetEventCallbacks(&eventCallbacks, sizeof(eventCallbacks));
88 if (rc != JVMTI_ERROR_NONE) {
89 nsk_printf(" Agent:: Error occured while setting event call back \n");
90 return JNI_ERR;
91 }
92 if (nsk_jvmti_enableNotification(jvmti, JVMTI_EVENT_CLASS_PREPARE, NULL) == NSK_TRUE) {
93 nsk_printf(" Enabled. noftification..");
94 } else {
95 nsk_printf(" Failed to Enable ..");
96 }
97 }
98 return JNI_OK;
99 }
100
101 }
|