Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 55751 invoked from network); 31 Jan 2007 13:41:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 31 Jan 2007 13:41:33 -0000 Received: (qmail 4339 invoked by uid 500); 31 Jan 2007 13:41:39 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 4243 invoked by uid 500); 31 Jan 2007 13:41:39 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 4234 invoked by uid 99); 31 Jan 2007 13:41:38 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 31 Jan 2007 05:41:38 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 31 Jan 2007 05:41:32 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id 304F31A981A; Wed, 31 Jan 2007 05:41:12 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r501839 - in /harmony/enhanced/drlvm/trunk/vm/vmcore/src: init/parse_arguments.cpp verifier/Verifier.cpp verifier/ver_dataflow.cpp verifier/ver_utils.cpp Date: Wed, 31 Jan 2007 13:41:11 -0000 To: commits@harmony.apache.org From: gshimansky@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070131134112.304F31A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: gshimansky Date: Wed Jan 31 05:41:10 2007 New Revision: 501839 URL: http://svn.apache.org/viewvc?view=rev&rev=501839 Log: Applied HARMONY-2905 [drlvm][jvmti] java.lang.VerifyError is thrown for instrumented class Tests passed on Ubuntu6 x86, Windows 2003 server x86 and SuSE9 x86_64 Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/Verifier.cpp harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_dataflow.cpp harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp?view=diff&rev=501839&r1=501838&r2=501839 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/parse_arguments.cpp Wed Jan 31 05:41:10 2007 @@ -455,6 +455,10 @@ p_env->verify_all = true; p_env->verify_strict = true; } + else if (strcmp(option, "-Xverify:strict") == 0) { + p_env->verify_all = true; + p_env->verify_strict = true; + } else if (strcmp(option, "-verify") == 0) { p_env->verify_all = true; } Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/Verifier.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/Verifier.cpp?view=diff&rev=501839&r1=501838&r2=501839 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/Verifier.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/Verifier.cpp Wed Jan 31 05:41:10 2007 @@ -5496,7 +5496,7 @@ *message = context.m_error; #if _VERIFY_DEBUG if( result != VER_OK ) { - VERIFY_DEBUG( "VerifyError: " << (context.m_error ? context.m_error : "NULL") ); + TRACE2("verifier", "VerifyError: " << (context.m_error ? context.m_error : "NULL") ); } #endif // _VERIFY_DEBUG Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_dataflow.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_dataflow.cpp?view=diff&rev=501839&r1=501838&r2=501839 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_dataflow.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_dataflow.cpp Wed Jan 31 05:41:10 2007 @@ -460,14 +460,20 @@ // check initialization if( source->m_type == SM_UNINITIALIZED && target->m_type != SM_UNINITIALIZED) { if( (source->m_new == 0 && target->m_ctype == VF_CHECK_ACCESS_FIELD) - || (local_init == false && target->m_ctype == VF_CHECK_UNINITIALIZED_THIS) ) + || (local_init == false && target->m_ctype == VF_CHECK_UNINITIALIZED_THIS) + || (!ctex->m_dump.m_verify && source->m_new == 0 + && target->m_ctype == VF_CHECK_UNINITIALIZED_THIS) ) { // 1. In initialization method instance fields of this // that are declared in the current class may be assigned - // before calling any instance initialization method + // before calling any instance initialization method. // 2. Uninitialized class instance can be stored in // a local variable if no backward branch is taken or // the code isn't protected by exception handler. + // 3. In default mode (without any verifier control options) + // uninitiliazed class reference in initialization method + // can be stored in a local variable if backward branch is + // taken or the code is protected by exception handler. } else { VERIFY_REPORT( ctex, "(class: " << class_get_name( ctex->m_class ) << ", method: " << method_get_name( ctex->m_method ) @@ -715,16 +721,16 @@ * Function clears stack map vector. */ static inline void -vf_clear_stack( vf_MapVector_t *vector ) // stack map vector +vf_clear_stack( vf_MapVector_t *vector ) // map vector { - unsigned short index; vf_MapEntry_t zero_entry = {0}; // zero stack vector - for( index = 0; index < vector->m_deep; index++ ) { + for( unsigned index = 0; index < vector->m_deep; index++ ) { vector->m_stack[index] = zero_entry; } vector->m_deep = 0; + return; } // vf_clear_stack @@ -915,12 +921,7 @@ instr->m_inlen, ctex ); return VER_OK; } else if( vf_is_instruction_has_flags( instr, VF_FLAG_THROW ) ) { - // clear stack - unsigned deep = invector->m_deep; - vf_clear_stack( invector ); // set result vector stack deep - invector->m_deep = (unsigned short)(deep + instr->m_stack); - // set out vector invector->m_stack->m_type = SM_TERMINATE; return VER_OK; } @@ -1131,7 +1132,11 @@ if( !memcmp( method_get_name( ctex->m_method ), "", 7 ) && ctex->m_vtype.m_class != ctex->m_vtype.m_object ) { - if( invector->m_local->m_type == SM_UNINITIALIZED ) { + if( invector->m_local->m_type != SM_UNINITIALIZED + && invector->m_local->m_vtype == ctex->m_vtype.m_class) + { + // constructor returns initialized reference of a given class + } else { VERIFY_REPORT( ctex, "(class: " << class_get_name( ctex->m_class ) << ", method: " << method_get_name( ctex->m_method ) << method_get_descriptor( ctex->m_method ) Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp?view=diff&rev=501839&r1=501838&r2=501839 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp (original) +++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/verifier/ver_utils.cpp Wed Jan 31 05:41:10 2007 @@ -1292,7 +1292,7 @@ return VER_OK; } if( method_is_protected( method ) ) { - if( instance_name[0] == '[' && !memcmp( method_get_name( method ), "clone", 7 ) ) { + if( instance_name[0] == '[' && !memcmp( method_get_name( method ), "clone", 6 ) ) { // for arrays function clone is public } else { need_check = true;