[kaffe] Re: Bug Status of Kaffe
robilad at kaffe.org
Fri Jan 2 13:37:02 PST 2004
Hi Mark, hi all,
Mark Wielaard wrote:
> On Thu, 2003-12-25 at 03:12, Ben Burton wrote:
>>>>#210716 jython causes kaffe to fail with assert error
>>>> | Version: 1:1.1.1-1
>>>> | > After removing the JNI lines from jython shell script (see
>>>> | > issue #207998) kaffe dies with kaffe-bin: machine.c:620:
>>>> | > installMethodCode: Assertion `e->start_pc <= e->end_pc'
>>>> | > failed.
>>But this crash is not a debian-specific bug. The bug here is that jython
>>causes kaffe to crash on startup *after* all of the required classes have
>>been found - it has nothing to do with the library path.
>>This is where this crash comes up. Once you have kaffe finding all of the
>>JNI libraries that it should (including the ones used with jython and the
>>kaffe bootstrap classes), it then crashes with 'e->start_pc <= e->end_pc'
>>So this is definitely a kaffe issue, not a debian-specific issue or a JNI
> Seen the same crash when using the CVS view from Eclipse 3.0M4 on kaffe.
> I just removed the assert.
> The problem is actually the byte code generated by the compiler since it
> should not generate an exception table entry whose start_pc is smaller
> (or equal - the assert is actually wrong) to end_pc.
So basically, jython has been compiled by a buggy compiler ;) The JVM
Spec 2nd Edition says in $4.7.3 'The Code Attribute' :
Each entry in the exception_table array describes one exception
handler in the code array. The order of the handlers in the
exception_table array is significant. See Section 3.10 for more details.
Each exception_table entry contains the following four items:
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. The value of
start_pc must be less than the value of end_pc.
for an online version.
I think the proper way to fix that bug is to recompile jython with
another java compiler.
> The attached patch turns the assert into a printf WARNING which can help
> debug the byte code. In my eclipse case it says:
> WARNING start_pc=164661273 end_pc=164661236 in
> WARNING start_pc=164661775 end_pc=164661236 in
> WARNING start_pc=161990681 end_pc=161990644 in
> WARNING start_pc=161991183 end_pc=161990644 in
I'll check it into kaffe's CVS as the current assert is not very user
friendly. I'll change the warning message, though, to
WARNING Bad bytecode! Illegal exception table: start_pc=sth not lower
than end_pc=sth in method something_else().
See Java Virtual Machine Specification 2nd Edition $4.7.3 for details.
Please report this bug to the developers of the application you're
running on kaffe. A simple fix might be to use another java compiler.
More information about the kaffe