FULL PRODUCT VERSION :
1.6.0-rc-b64
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
All OS.
A DESCRIPTION OF THE PROBLEM :
the static void write_instruction(MethodImage *mi) C functions has two bugs :
at line 1428 :
case JVM_OPC_goto:
new_opcode = JVM_OPC_jsr_w;
has to be replaced by
case JVM_OPC_goto:
new_opcode = JVM_OPC_goto_w;
At line 1493 when writing the new goto offset :
writeU4(ci, new_delta); /* write new and wide delta */
must be replaced by
writeU4(ci, new_delta - 3); /* write new and wide delta */
since the correct new offset is now new_delta - 3 and not new_delta.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
One easy way to reproduce the bug is to modify the line 1282 (adjust_instruction function).
For example replace
if ((new_delta < -32768) || (new_delta > 32767)) {
by
if ((new_delta < -16) || (new_delta > 15)) {
to force call to widen() function.
REPRODUCIBILITY :
This bug can be reproduced always.
CUSTOMER SUBMITTED WORKAROUND :
See description<