93 void *val = NULL; 94 jvmtiError err = (*jvmti)->GetThreadLocalStorage(jvmti, thread, &val); 95 check_jvmti_error(jvmti, "GetThreadLocalStorage", err); 96 return (intptr_t)val; 97 } 98 99 static void set_thread_local(jvmtiEnv *jvmti, jthread thread, intptr_t x) { 100 void *val = (void*)x; 101 jvmtiError err = (*jvmti)->SetThreadLocalStorage(jvmti, thread, val); 102 check_jvmti_error(jvmti, "SetThreadLocalStorage", err); 103 } 104 105 static void print_class_status(jvmtiEnv *jvmti, jclass klass) { 106 jint status = 0; 107 jvmtiError err = (*jvmti)->GetClassStatus(jvmti, klass, &status); 108 109 check_jvmti_error(jvmti, "GetClassStatus", err); 110 // This function is only used in a ClassPrepare event context 111 if ((status & JVMTI_CLASS_STATUS_VERIFIED) == 0 || 112 (status & JVMTI_CLASS_STATUS_PREPARED) == 0 || 113 (status & JVMTI_CLASS_STATUS_INITIALIZED) == 1 || 114 (status & JVMTI_CLASS_STATUS_ERROR) == 1) { 115 printf(" ## Error: unexpected class status: 0x%08x\n", status); 116 } 117 printf(" Class status: 0x%08x\n", status); 118 } 119 120 static void print_class_signature(jvmtiEnv *jvmti, jclass klass) { 121 char* name = NULL; 122 jvmtiError err = (*jvmti)->GetClassSignature(jvmti, klass, &name, NULL); 123 124 check_jvmti_error(jvmti, "GetClassSignature", err); 125 if (name != NULL) { 126 printf(" class: '%s'\n", name); 127 deallocate(jvmti, name); 128 } 129 } 130 131 static void print_class_source_file_name(jvmtiEnv *jvmti, jclass klass) { 132 char* name = NULL; 133 jvmtiError err = (*jvmti)->GetSourceFileName(jvmti, klass, &name); 134 | 93 void *val = NULL; 94 jvmtiError err = (*jvmti)->GetThreadLocalStorage(jvmti, thread, &val); 95 check_jvmti_error(jvmti, "GetThreadLocalStorage", err); 96 return (intptr_t)val; 97 } 98 99 static void set_thread_local(jvmtiEnv *jvmti, jthread thread, intptr_t x) { 100 void *val = (void*)x; 101 jvmtiError err = (*jvmti)->SetThreadLocalStorage(jvmti, thread, val); 102 check_jvmti_error(jvmti, "SetThreadLocalStorage", err); 103 } 104 105 static void print_class_status(jvmtiEnv *jvmti, jclass klass) { 106 jint status = 0; 107 jvmtiError err = (*jvmti)->GetClassStatus(jvmti, klass, &status); 108 109 check_jvmti_error(jvmti, "GetClassStatus", err); 110 // This function is only used in a ClassPrepare event context 111 if ((status & JVMTI_CLASS_STATUS_VERIFIED) == 0 || 112 (status & JVMTI_CLASS_STATUS_PREPARED) == 0 || 113 (status & JVMTI_CLASS_STATUS_INITIALIZED) != 0 || 114 (status & JVMTI_CLASS_STATUS_ERROR) != 0) { 115 printf(" ## Error: unexpected class status: 0x%08x\n", status); 116 } 117 printf(" Class status: 0x%08x\n", status); 118 } 119 120 static void print_class_signature(jvmtiEnv *jvmti, jclass klass) { 121 char* name = NULL; 122 jvmtiError err = (*jvmti)->GetClassSignature(jvmti, klass, &name, NULL); 123 124 check_jvmti_error(jvmti, "GetClassSignature", err); 125 if (name != NULL) { 126 printf(" class: '%s'\n", name); 127 deallocate(jvmti, name); 128 } 129 } 130 131 static void print_class_source_file_name(jvmtiEnv *jvmti, jclass klass) { 132 char* name = NULL; 133 jvmtiError err = (*jvmti)->GetSourceFileName(jvmti, klass, &name); 134 |