Example #1
0
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);
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;

}