You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Alexei Fedotov (JIRA)" <ji...@apache.org> on 2007/06/14 14:28:26 UTC
[jira] Commented: (HARMONY-4053) [drlvm][verifier] Unexpected
VerifyError is thrown if end_pc from exception table of code attribute is
equal to the length of the code array
[ https://issues.apache.org/jira/browse/HARMONY-4053?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12504688 ]
Alexei Fedotov commented on HARMONY-4053:
-----------------------------------------
The bug is fixed. I will report when a test run finishes.
> [drlvm][verifier] Unexpected VerifyError is thrown if end_pc from exception table of code attribute is equal to the length of the code array
> --------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: HARMONY-4053
> URL: https://issues.apache.org/jira/browse/HARMONY-4053
> Project: Harmony
> Issue Type: Bug
> Components: DRLVM
> Reporter: Elena Sayapina
> Attachments: fix_one_if.patch, reproduce.zip, test.patch
>
>
> Unexpected VerifyError is thrown if end_pc from exception table of code attribute is equal to the length of the code array
> This issue caused the failures of 11 test cases from Geronimo unit test suite.
> Affected tests:
> org.apache.geronimo.gjndi.JavaCompContextTest
> org.apache.geronimo.gjndi.JavaCompGBeanTest
> org.apache.geronimo.gjndi.KernelContextGBeanTest
> According J2SE VM specification:
> "4.7.3 The Code Attribute
> ...
> Each exception_table entry contains the following four items:
> start_pc, end_pc
> The values of the two items start_pc and end_pc indicate the ranges in the code array at which the exception handler is active. The value of start_pc must be a valid index into the code array of the opcode of an instruction. The value of end_pc either must be a valid index into the code array of the opcode of an instruction or must be equal to code_length, the length of the code array ... "
> But DRLVM throws VerifyError if ending point in exception table is equal to the length of the code array.
> Please, use the code below for reproducing:
> ------------------------------------- Verify.java --------------------------------------
> public class Verify {
> public static void main(String[] args) throws ClassNotFoundException {
> try {
> Class cl = Class.forName("test");
> System.out.println("TEST PASSED");
> } catch (Throwable e) {
> System.out.println("TEST FAILED: unexpected " + e);
> }
> }
> }
> ------------------------------------- test.ccode--------------------------------------
> magic = xCAFEBABE
> minor_version = 3
> major_version = 45
> constant_pool_count = 13
> constant_pool {
> /* #1 */ Method = #12 #6
> /* #2 */ UTF8 = "java/lang/Object"
> /* #3 */ UTF8 = "SourceFile"
> /* #4 */ UTF8 = "<init>"
> /* #5 */ Class = #11
> /* #6 */ NameAndType = #4 #10
> /* #7 */ UTF8 = "Code"
> /* #8 */ UTF8 = "test.ccode"
> /* #9 */ UTF8 = "test"
> /* #10 */ UTF8 = "()V"
> /* #11 */ UTF8 = "test"
> /* #12 */ Class = #2
> }
> access_flags = PUBLIC SUPER // x21
> this_class = #5 // "test"
> super_class = #12 // "java/lang/Object"
> interfaces_count = 0
> interfaces {
> }
> fields_count = 0
> methods_count = 2
> methods {
> method {
> access_flag = PUBLIC // x01
> name_index = #4 // "<init>"
> descriptor_index = #10 // "()V"
> attributes_count = 1
> attributes {
> attribute Code {
> attribute_name_index = #7 // "Code"
> attribute_length = 17
> max_stack = 1
> max_locals = 1
> code_length = 5
> code asm {
> 0: aload_0
> 1: invokespecial #1
> 4: return
> }
> exception_table_length = 0
> attributes_count = 0
> }
> }
> }
> // Test method
> method {
> access_flag = PUBLIC // x01
> name_index = #9 // "test"
> descriptor_index = #10 // "()V"
> attributes_count = 1
> attributes {
> attribute Code {
> attribute_name_index = #7 // "Code"
> attribute_length = 35
> max_stack = 2
> max_locals = 2
> code_length = 15
> code asm {
> 0: sipush 1
> 3: pop
> 4: return
> 5: sipush 2
> 8: pop
> 9: return
> 10: sipush 3
> 13: pop
> 14: return
> }
> exception_table_length = 1
> exception_table {
> // start_pc end_pc handler_pc catch_type
> 0 15 10 0 // end_pc is equal to code_length
> }
> attributes_count = 0
> }
> }
> }
> }
> attributes_count = 1
> attributes {
> attribute SourceFile {
> attribute_name_index = #3 // "SourceFile"
> attribute_length = 2
> sourcefile_index = #8 // "test.ccode"
> }
> }
> -----------------------------------------------------------------------------------------------
> test class file can be created using VMTT tool from http://issues.apache.org/jira/browse/HARMONY-3206
> reproduce.zip contains test and Verify class files.
> Output on Harmony-r544727:
> 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 = r544727, (Jun 6 2007), Windows/ia32/msvc 1310, release build
> http://harmony.apache.org
> TEST FAILED: unexpected java.lang.VerifyError: (class: test, method: test()V) At least one of except
> ion handler parameters [0, 15, 10] are out of instruction set
> Output on RI:
> java version "1.5.0_11"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
> Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode)
> TEST PASSED
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.