void JNICALL callbackException(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread, jmethodID method, jlocation location, jobject exception, jmethodID catch_method, jlocation catch_location) { check_EXCPT; if (flag) return; /* * Function separate all other exceptions in all other method */ if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY, "special_method", DEBUG_OUT)) return; flag = true; util = true; fprintf(stderr, "agent... \n"); SLEEP_UNIVERSAL(300); ////////////////////ncai env get jvmtiError err; ncaiError ncai_err; jvmtiExtensionFunctionInfo* ext_info = NULL; jint ext_count = 0; err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } fprintf(stderr, "agent... \n"); if (ext_count == 0 || ext_info == NULL) { fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n"); test = false; return; } jvmtiExtensionFunction get_ncai_func = NULL; fprintf(stderr, "agent... \n"); for (int k = 0; k < ext_count; k++) { if (strcmp(ext_info[k].id, "org.apache.harmony.vm.GetExtensionEnv") == 0) { get_ncai_func = ext_info[k].func; break; } } fprintf(stderr, "agent... \n"); if (get_ncai_func == NULL) { fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n"); test = false; return; } ncaiEnv* ncai_env = NULL; fprintf(stderr, "agent... \n"); err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } if (ncai_env == NULL) { fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n"); test = false; return; } fprintf(stderr, "agent... \n"); /////////////////////////////////// /* fprintf(stderr, "calling ncai->GetThreadHandle()...\n"); ncai_err = ncai_env->GetThreadHandle(g_thread_jthread, &ncai_thread); if (ncai_err != NCAI_ERROR_NONE) { fprintf(stderr, "ncai->GetThreadHandle() returned error: %d", ncai_err); test = false; return; } */ ncaiThread* threads; jint threads_returned; while(!g_resume_agent_thread) SLEEP_UNIVERSAL(200); g_resume_agent_thread = 0; test = true; ncai_err = ncai_env->GetAllThreads(&threads_returned, &threads); if (ncai_err != NCAI_ERROR_NONE) { fprintf(stderr, "ncai->GetAllThreads() returned error: %d,\n", ncai_err); test = false; g_stop_thread = 1; return; } int check = 0; for(int h = 0; h < threads_returned; h++) { ncaiThreadInfo info; ncai_err = ncai_env->GetThreadInfo(threads[h], &info); if (ncai_err != NCAI_ERROR_NONE) { fprintf(stderr, "ncai->GetThreadInfo() returned error: %d,\n", ncai_err); test = false; g_stop_thread = 1; return; } fprintf(stderr, "\nthreads: %d - %s(%d)", h, info.name, info.kind); if((strcmp(info.name, "java_thread1") == 0) || (strcmp(info.name, "java_thread2") == 0) || (strcmp(info.name, "java_thread3") == 0)) { check++; fprintf(stderr, " <--"); } } if(check != 3) test = false; g_stop_thread = 1; SLEEP_UNIVERSAL(500); }
void JNICALL callbackException(prms_EXCPT) { check_EXCPT; if (flag) return; /* * Function separate all other exceptions in all other method */ if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY, "special_method", DEBUG_OUT)) return; flag = true; util = true; jvmtiError err; ncaiError ncai_err; jvmtiExtensionFunctionInfo* ext_info = NULL; jint ext_count = 0; err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } if (ext_count == 0 || ext_info == NULL) { fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n"); test = false; return; } jvmtiExtensionFunction get_ncai_func = NULL; for (int i = 0; i < ext_count; i++) { if (strcmp(ext_info[i].id, "org.apache.harmony.vm.GetExtensionEnv") == 0) { get_ncai_func = ext_info[i].func; break; } } if (get_ncai_func == NULL) { fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n"); test = false; return; } ncaiEnv* ncai_env = NULL; err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } if (ncai_env == NULL) { fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n"); test = false; return; } char buf[] = "1234567890qwerty"; char out_buf[100]; ncai_err = ncai_env->ReadMemory(&buf, 16, &out_buf); if(ncai_err != NCAI_ERROR_NONE) { test = false; return; } for(int k = 0; k < 16; k++) { if(out_buf[k] != buf[k]) { test = false; return; } } test = true; }
void JNICALL callbackException(prms_EXCPT) { check_EXCPT; if (flag) return; /* * Function separate all other exceptions in all other method */ if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY, "special_method", DEBUG_OUT)) return; flag = true; util = true; jvmtiError err; ncaiError ncai_err; jvmtiExtensionFunctionInfo* ext_info = NULL; jint ext_count = 0; err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } if (ext_count == 0 || ext_info == NULL) { fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n"); test = false; return; } jvmtiExtensionFunction get_ncai_func = NULL; for (int i = 0; i < ext_count; i++) { if (strcmp(ext_info[i].id, "org.apache.harmony.vm.GetExtensionEnv") == 0) { get_ncai_func = ext_info[i].func; break; } } if (get_ncai_func == NULL) { fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n"); test = false; return; } ncaiEnv* ncai_env = NULL; err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } if (ncai_env == NULL) { fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n"); test = false; return; } printf("test_function: ncaiEnv obtained successfully\n"); ncaiModule* modules; jint tcount = 0; jint j = 0; ncai_env->GetAllLoadedModules(&tcount, &modules); fprintf(stderr, "MethodExit: GetAllLoadedModules(), count = %d\n", tcount); for (j = 0; j < tcount; j++) { ncai_err = ncai_env->GetModuleInfo(modules[j], NULL); if (ncai_err == NCAI_ERROR_NONE) { fprintf(stderr, "ncai_env->GetModuleInfo() didn't return an error"); test = false; return; } fprintf(stderr, "ncai_env->GetModuleInfo() returned an error: %d\n", ncai_err); } test = true; }
void JNICALL callbackException(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread, jmethodID method, jlocation location, jobject exception, jmethodID catch_method, jlocation catch_location) { check_EXCPT; if (flag) return; /* * Function separate all other exceptions in all other method */ if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY, "special_method", DEBUG_OUT)) return; flag = true; util = true; fprintf(stderr, "agent... \n"); ////////////////////ncai env get jvmtiError err; ncaiError ncai_err; jvmtiExtensionFunctionInfo* ext_info = NULL; jint ext_count = 0; err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } fprintf(stderr, "agent... \n"); if (ext_count == 0 || ext_info == NULL) { fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n"); test = false; return; } jvmtiExtensionFunction get_ncai_func = NULL; fprintf(stderr, "agent... \n"); for (int k = 0; k < ext_count; k++) { if (strcmp(ext_info[k].id, "org.apache.harmony.vm.GetExtensionEnv") == 0) { get_ncai_func = ext_info[k].func; break; } } fprintf(stderr, "agent... \n"); if (get_ncai_func == NULL) { fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n"); test = false; return; } ncaiEnv* ncai_env = NULL; fprintf(stderr, "agent... \n"); err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } if (ncai_env == NULL) { fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n"); test = false; return; } fprintf(stderr, "agent... \n"); /////////////////////////////////// ncaiThread ncai_thread; fprintf(stderr, "calling ncai->GetThreadHandle()...\n"); ncai_err = ncai_env->GetThreadHandle(g_thread_jthread, &ncai_thread); if (ncai_err != NCAI_ERROR_NONE) { fprintf(stderr, "ncai->GetThreadHandle() returned error: %d", ncai_err); test = false; return; } fprintf(stderr, "counter... %d\n", counter); while (!g_resume_agent_thread) // Waiting for resume signal from Test3 SLEEP_UNIVERSAL(100); g_resume_agent_thread = 0; test = CheckSuspend(ncai_env, ncai_thread); g_stop_thread = 1; // Resume execution of java_thread in Test3 while (!g_resume_agent_thread) // Waiting for resume signal from TestFunction1 SLEEP_UNIVERSAL(100); g_resume_agent_thread = 0; test = test && CheckSuspend(ncai_env, ncai_thread); g_stop_thread = 0; // Resume execution of java_thread in TestFunction1 while (!g_resume_agent_thread) // Waiting for resume signal from test_java_func3 SLEEP_UNIVERSAL(100); g_resume_agent_thread = 0; test = test && CheckSuspend(ncai_env, ncai_thread); g_stop_thread = 1; // Resume execution of java_thread in test_java_func3 while (!g_resume_agent_thread) // Waiting for resume signal from test_java_func3 SLEEP_UNIVERSAL(100); if(counter != 3) test = false; }
void JNICALL callbackException(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread, jmethodID method, jlocation location, jobject exception, jmethodID catch_method, jlocation catch_location) { check_EXCPT; if (flag) return; /* * Function separate all other exceptions in all other method */ if (!check_phase_and_method_debug(jvmti_env, method, SPP_LIVE_ONLY, "special_method", DEBUG_OUT)) return; flag = true; util = true; fprintf(stderr, "agent... \n"); SLEEP_UNIVERSAL(300); ////////////////////ncai env get jvmtiError err; ncaiError ncai_err; jvmtiExtensionFunctionInfo* ext_info = NULL; jint ext_count = 0; err = jvmti_env->GetExtensionFunctions(&ext_count, &ext_info); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: GetExtensionFunctions() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } fprintf(stderr, "agent... \n"); if (ext_count == 0 || ext_info == NULL) { fprintf(stderr, "test_function: GetExtensionFunctions() returned no extensions\n"); test = false; return; } jvmtiExtensionFunction get_ncai_func = NULL; fprintf(stderr, "agent... \n"); for (int k = 0; k < ext_count; k++) { if (strcmp(ext_info[k].id, "org.apache.harmony.vm.GetExtensionEnv") == 0) { get_ncai_func = ext_info[k].func; break; } } fprintf(stderr, "agent... \n"); if (get_ncai_func == NULL) { fprintf(stderr, "test_function: GetNCAIEnvironment() nas not been found among JVMTI extensions\n"); test = false; return; } ncaiEnv* ncai_env = NULL; fprintf(stderr, "agent... \n"); err = get_ncai_func(jvmti_env, &ncai_env, NCAI_VERSION_1_0); if (err != JVMTI_ERROR_NONE) { fprintf(stderr, "test_function: get_ncai_func() returned error: %d, '%s'\n", err, get_jvmti_eror_text(err)); test = false; return; } if (ncai_env == NULL) { fprintf(stderr, "test_function: get_ncai_func() returned NULL environment\n"); test = false; return; } fprintf(stderr, "agent... \n"); /////////////////////////////////// SLEEP_UNIVERSAL(500); while(!g_resume_agent_thread) SLEEP_UNIVERSAL(200); g_resume_agent_thread = 0; ncaiThread ncai_thread; fprintf(stderr, "calling ncai->GetThreadHandle()...\n"); ncai_err = ncai_env->GetThreadHandle(g_thread_jthread, &ncai_thread); if (ncai_err != NCAI_ERROR_NONE) { fprintf(stderr, "ncai->GetThreadHandle() returned error: %d", ncai_err); test = false; return; } ncaiFrameInfo* frames1; ncaiFrameInfo* frames2; jint frames_returned1, frames_returned2; test = CheckFrames(ncai_env, ncai_thread, &frames1, &frames_returned1); g_stop_thread = 1; SLEEP_UNIVERSAL(500); while(!g_resume_agent_thread) SLEEP_UNIVERSAL(200); g_resume_agent_thread = 0; test = test && CheckFrames(ncai_env, ncai_thread, &frames2, &frames_returned2); if (frames_returned1 - frames_returned2 != 3) { fprintf(stderr, "\nincorrect frames difference\n"); test = false; g_stop_thread = 0; return; } int java_frames_count = 0; for(int g = 1; g <= frames_returned2; g++) { if(frames1[frames_returned1 - g].java_frame_depth != frames2[frames_returned2 - g].java_frame_depth || frames1[frames_returned1 - g].return_address != frames2[frames_returned2 - g].return_address || frames1[frames_returned1 - g].frame_address != frames2[frames_returned2 - g].frame_address) { fprintf(stderr, "\nframes inconsistency: %d - %d(%d),\n %p - %p(%d),\n %p - %p(%d),\n", frames1[frames_returned1 - g].java_frame_depth, frames2[frames_returned2 - g].java_frame_depth, frames1[frames_returned1 - g].java_frame_depth == (int)frames2[frames_returned2 - g].java_frame_depth, frames1[frames_returned1 - g].return_address, frames2[frames_returned2 - g].return_address, frames1[frames_returned1 - g].return_address == frames2[frames_returned2 - g].return_address, frames1[frames_returned1 - g].frame_address, frames2[frames_returned2 - g].frame_address, frames1[frames_returned1 - g].frame_address == frames2[frames_returned2 - g].frame_address); test = false; g_stop_thread = 0; return; } if(frames1[frames_returned1 - g].java_frame_depth != -1) java_frames_count++; if(frames1[frames_returned1 - g].java_frame_depth == 0) break; } if(java_frames_count != 7 || frames1[frames_returned1 - 1].return_address != NULL) { fprintf(stderr, "\nincorrect frames count\n"); test = false; g_stop_thread = 0; return; } g_stop_thread = 0; }