harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vera Petrashkova (JIRA)" <j...@apache.org>
Subject [jira] Created: (HARMONY-3999) drlvm][jit][jvmti] Jitrino does not send ExceptionCatch event
Date Wed, 30 May 2007 13:55:15 GMT
drlvm][jit][jvmti] Jitrino does not send ExceptionCatch event
-------------------------------------------------------------

                 Key: HARMONY-3999
                 URL: https://issues.apache.org/jira/browse/HARMONY-3999
             Project: Harmony
          Issue Type: Bug
          Components: DRLVM
         Environment: Windows and Linux
            Reporter: Vera Petrashkova
            Priority: Minor
         Attachments: ExcpCatch.zip

According to J2SE JVMTI specification
Exception catch events are generated whenever a thrown exception is caught. 
If the exception is caught in a Java programming language method, 
the event is generated when the catch clause is reached.

But VM does not send Exception catch event in jit mode.
The following test demonstrates this issue.
It passes on RI and on DRLVM interpreter, but it fails on Jitrino.
--------------------EC.java----------------------
public class EC {

    public static void main(String args[]) {
        String s = null;
        try {
            System.err.println(s.length());

        } catch (NullPointerException e ) {
            System.err.println("catch: " + e);
            e.printStackTrace(System.err);
        }
    }
}
-------------------EC.cpp---------------------------
#include "evnts_.h"
#include "utils.h"

static bool test = false;
static long counter = 0;

void EC()
{
}


JNIEXPORT jint JNICALL Agent_OnLoad(prms_AGENT_ONLOAD)
{

    Callbacks CB;

    cb_exccatch;
    cb_death;
    AGENT_FOR_EVENTS_TESTS_PART_I; /* evnts_.h */
    jvmtiEvent events[] = { JVMTI_EVENT_EXCEPTION_CATCH, JVMTI_EVENT_VM_DEATH };
    AGENT_FOR_EVENTS_TESTS_PART_II;
    fprintf(stderr, "\n-------------test EC is started\n{\n");
    fflush(stderr);

    return JNI_OK;
}

void JNICALL callbackExceptionCatch(prms_EXCPT_CATCH)
{
    char* name = NULL;
    char* signature = NULL;
    char* generic = NULL;
    jvmtiError result;

    result = jvmti_env->GetMethodName(method, &name, &signature, &generic);
    if (result != JVMTI_ERROR_NONE) return;
    counter++;
	fprintf(stderr,"\tMethod name: %s  counter: %d\n", name, counter);
	if (strcmp(name, "main")) return;	
    fprintf(stderr, "\tException (prms) jvmti_env      is %p\n", jvmti_env);
    fprintf(stderr, "\tException (prms) jni_env        is %p\n", jni_env);
    fprintf(stderr, "\tException (prms) thread         is %p\n", thread);
    fprintf(stderr, "\tException (prms) method         is %p\n", method);
    fprintf(stderr, "\tException (prms) location       is %lld\n", location);
    fprintf(stderr, "\tException (prms) exception      is %p\n", exception);
    fflush(stderr);
    test = true;
}

void JNICALL callbackVMDeath(prms_VMDEATH)
{

    fprintf(stderr, "\n\tTest of event ExceptionCatch   : ");

    if ((counter > 0) && (test))
        fprintf(stderr, " passed %d %d \n", counter, test);
    else
        fprintf(stderr, " failed %d %d \n", counter, test);

    fprintf(stderr, "\n} --------------test EC is finished\n");
    fflush(stderr);
}
--------------------------------------
Additional source files and library are in attachment.
Run test

java -showversion -cp . -agentlib:EC EC
and
java -showversion -Xint -cp . -agentlib:EC EC

Output on RI
=============
-------------test EC is started
{
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)

        Method name: loadClass  counter: 1
        Method name: findClass  counter: 2
        Method name: loadClass  counter: 3
        Method name: main  counter: 4
        Exception (prms) jvmti_env      is 00036EE0
        Exception (prms) jni_env        is 00037A20
        Exception (prms) thread         is 00A877E0
        Exception (prms) method         is 00034969
        Exception (prms) location       is 15
        Exception (prms) exception      is 00A877E4
catch: java.lang.NullPointerException
java.lang.NullPointerException
        at EC.main(EC.java:6)

        Test of event ExceptionCatch   :  passed 4 1

} --------------test EC is finished

Ouput on DRLVM interpreter
=====================
Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors,
as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r542118, (May 28 2007), Windows/ia32/msvc 1310, release build
http://incubator.apache.org/harmony

-------------test EC is started
{
        Method name: main  counter: 1
        Exception (prms) jvmti_env      is 011A4B98
        Exception (prms) jni_env        is 011A2D60
        Exception (prms) thread         is 01D22768
        Exception (prms) method         is 01D67944
        Exception (prms) location       is 15
        Exception (prms) exception      is 01D22764
catch: java.lang.NullPointerException
java.lang.NullPointerException
        at EC.main(EC.java:6)

        Test of event ExceptionCatch   :  passed 1 1

} --------------test EC is finished

Ouput on DRLVM jitrino
===================
Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors,
as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r542118, (May 28 2007), Windows/ia32/msvc 1310, release build
http://incubator.apache.org/harmony

-------------test EC is started
{
catch: java.lang.NullPointerException
java.lang.NullPointerException
        at EC.main(EC.java:6)

        Test of event ExceptionCatch   :  failed 0 0

} --------------test EC is finished


This bug causes the failure of the test
vm.jvmti.events.ExceptionCatch.ExceptionCatch0101.ExceptionCatch0101
from  DRLVM Validation Test suite (http://issues.apache.org/jira/browse/HARMONY-3206)


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message