Whilst testing Java 2D on the 64 bit WS I have found what appears to be a
a Hotspot compiler bug in B47 on Solaris 2.7 (system rincewind.eng)
It doesn't happen with B47 if I run in interpreted mode (-Xint).
Also it doesn't happen at all if I plug-in an earlier version of Hotspot (B44)
into the build, so I think its more likely a hotspot bug than a 2D bug.
Also the stack trace below seems to point in that direction too.
Happens with optimized and debug builds.
To reproduce you need to run the Font2DTest that's part of the JDK demos.
in demo/jfc/Font2DTest. (You may need to bring over the latest version of the
64 bit merlin ws).
% java -jar Font2DTest.jar
Redrawing using outlines seems to be the key to the crash.
The simplest way to reproduce is to select the option
"Method : textlayout.getoutline + draw" and then force the tool to redraw
by some means such as repeatedly selecting the "Transform : NONE" option.
About 10 redraws is usually all that's needed to provoke a crash.
Here's a stack trace obtained from one of these when running under dbx.
Usually the back trace was less informative than this, I may have just
got lucky.
ERROR: spill copies type float but must produce result in register [R_D32L]
#
# HotSpot Virtual Machine Error, assertion failure
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# assert(verify_output_regclass(*_out, _type), "bad regclass in copy")
#
# Error ID:
/net/mersparc.eng/usr/re/hotspot/hotspot1.4/ws/src/share/vm/opto/connode.cpp,
723 [ Patched ]
#
# Problematic Thread: prio=5 tid=0x100204408 nid=0xc runnable
#
Dumping core....
t@12 (l@9) signal ABRT (Abort) in __sigprocmask at 0xffffffff7f51d468
0xffffffff7f51d468: __sigprocmask+0x0008: retl
(/opt/SUNWspro/bin/../WS5.0/bin/sparcv9/dbx) where
current thread: t@12
=>[1] __sigprocmask(0x0, 0xffffffff7e602690, 0x0, 0xffffffff7e605d30,
0xffffffff7f79c118, 0xffffffff7e6026ac), at 0xffffffff7f51d468
[2] _resetsig(0xffffffff7f5202f8, 0x1, 0x0, 0xffffffff7e602680,
0xffffffff7e605ca0, 0xffffffff7e605d44), at 0xffffffff7f512360
[3] _sigon(0xffffffff7f629040, 0xffffffff7e605ca0, 0xffffffff7e605d30,
0xffffffff7e60280c, 0xffffffff7e605ca0, 0xffffffff7f6207e8), at
0xffffffff7f511a5c
[4] _thrp_kill(0x0, 0xc, 0xffffffff7f6207e8, 0xffffffff7e605ca0, 0x0, 0xc), at
0xffffffff7f514c30
[5] abort(0xffffffff7f4affb8, 0xffffffff7e6029b0, 0x0, 0xfffffffffffffff8,
0x4, 0xffffffff7e6029d1), at 0xffffffff7f34115c
[6] os::abort(0x1, 0xffffffff7daaf540, 0xffffffff7e6032d4, 0x100,
0xfffffffffffffff8, 0x1001deb68), at 0xffffffff7d333c80
[7] report_error(0x1, 0xffffffff7dc17b60, 0x2d3, 0xffffffff7daaf390,
0xffffffff7daaf3a4, 0xffffffff7dc17b38), at 0xffffffff7cffca68
[8] report_assertion_failure(0xffffffff7dc17b38, 0xffffffff7dc17b60, 0x2d3,
0xffffffff7dc17bb0, 0x1, 0x100643fb8), at 0xffffffff7cffbe40
[9] SpillCopyNode::make_copy(0x100647690, 0x1006449f0, 0x1, 0x100643fb8, 0x0,
0x1007e6c01), at 0xffffffff7d7db204
[10] PhaseChaitin::fixup_spills(0xffffffff7e603ed0, 0x0, 0xffffffff7def17d0,
0x0, 0x0, 0x1007e6130), at 0xffffffff7d784c28
[11] PhaseChaitin::Register_Allocate(0xffffffff7e603ed0, 0x0,
0xffffffff7def17a0, 0x0, 0x0, 0x1002a24d0), at 0xffffffff7d78012c
[12] Compile::Code_Gen(0xffffffff7e604d80, 0x0, 0xffffffff2ce12868,
0x1002a2c30, 0x100806170, 0x0), at 0xffffffff7d7b924c
[13] Compile::Compile(0x0, 0x1, 0x1, 0x1, 0x0, 0xffffffff7defe328), at
0xffffffff7d7b5540
[14] C2Compiler::compile_method(0x10010f058, 0xffffffff7e6055b8, 0x0,
0x100806170, 0xffffffffffffffff, 0x0), at 0xffffffff7d753994
[15] CompileBroker::invoke_compiler_on_method(0x1003022f8, 0xffffffff384a20f0,
0x0, 0x0, 0x0, 0x0), at 0xffffffff7d5a89c4
[16] CompileBroker::compiler_thread_loop(0x0, 0x5, 0x0, 0x1, 0x0,
0xffffffff7e605d60), at 0xffffffff7d5a83f0
[17] compiler_thread_entry(0x100204408, 0x100204408, 0x1, 0x0, 0x0, 0x0), at
0xffffffff7d466a50
[18] JavaThread::thread_main_inner(0x100204408, 0x1001f60c8, 0x6, 0x0, 0x0,
0x0), at 0xffffffff7d46187c
[19] JavaThread::run(0x100204408, 0x0, 0x0, 0x0, 0x0, 0x0), at
0xffffffff7d461698
[20] _start(0x100204408, 0xffffffff7e605ca0, 0x0, 0xffffffff7f626db1, 0x0,
0xffffffff3a181ca0), at 0xffffffff7d331008
(/opt/SUNWspro/bin/../WS5.0/bin/sparcv9/dbx)
a Hotspot compiler bug in B47 on Solaris 2.7 (system rincewind.eng)
It doesn't happen with B47 if I run in interpreted mode (-Xint).
Also it doesn't happen at all if I plug-in an earlier version of Hotspot (B44)
into the build, so I think its more likely a hotspot bug than a 2D bug.
Also the stack trace below seems to point in that direction too.
Happens with optimized and debug builds.
To reproduce you need to run the Font2DTest that's part of the JDK demos.
in demo/jfc/Font2DTest. (You may need to bring over the latest version of the
64 bit merlin ws).
% java -jar Font2DTest.jar
Redrawing using outlines seems to be the key to the crash.
The simplest way to reproduce is to select the option
"Method : textlayout.getoutline + draw" and then force the tool to redraw
by some means such as repeatedly selecting the "Transform : NONE" option.
About 10 redraws is usually all that's needed to provoke a crash.
Here's a stack trace obtained from one of these when running under dbx.
Usually the back trace was less informative than this, I may have just
got lucky.
ERROR: spill copies type float but must produce result in register [R_D32L]
#
# HotSpot Virtual Machine Error, assertion failure
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# assert(verify_output_regclass(*_out, _type), "bad regclass in copy")
#
# Error ID:
/net/mersparc.eng/usr/re/hotspot/hotspot1.4/ws/src/share/vm/opto/connode.cpp,
723 [ Patched ]
#
# Problematic Thread: prio=5 tid=0x100204408 nid=0xc runnable
#
Dumping core....
t@12 (l@9) signal ABRT (Abort) in __sigprocmask at 0xffffffff7f51d468
0xffffffff7f51d468: __sigprocmask+0x0008: retl
(/opt/SUNWspro/bin/../WS5.0/bin/sparcv9/dbx) where
current thread: t@12
=>[1] __sigprocmask(0x0, 0xffffffff7e602690, 0x0, 0xffffffff7e605d30,
0xffffffff7f79c118, 0xffffffff7e6026ac), at 0xffffffff7f51d468
[2] _resetsig(0xffffffff7f5202f8, 0x1, 0x0, 0xffffffff7e602680,
0xffffffff7e605ca0, 0xffffffff7e605d44), at 0xffffffff7f512360
[3] _sigon(0xffffffff7f629040, 0xffffffff7e605ca0, 0xffffffff7e605d30,
0xffffffff7e60280c, 0xffffffff7e605ca0, 0xffffffff7f6207e8), at
0xffffffff7f511a5c
[4] _thrp_kill(0x0, 0xc, 0xffffffff7f6207e8, 0xffffffff7e605ca0, 0x0, 0xc), at
0xffffffff7f514c30
[5] abort(0xffffffff7f4affb8, 0xffffffff7e6029b0, 0x0, 0xfffffffffffffff8,
0x4, 0xffffffff7e6029d1), at 0xffffffff7f34115c
[6] os::abort(0x1, 0xffffffff7daaf540, 0xffffffff7e6032d4, 0x100,
0xfffffffffffffff8, 0x1001deb68), at 0xffffffff7d333c80
[7] report_error(0x1, 0xffffffff7dc17b60, 0x2d3, 0xffffffff7daaf390,
0xffffffff7daaf3a4, 0xffffffff7dc17b38), at 0xffffffff7cffca68
[8] report_assertion_failure(0xffffffff7dc17b38, 0xffffffff7dc17b60, 0x2d3,
0xffffffff7dc17bb0, 0x1, 0x100643fb8), at 0xffffffff7cffbe40
[9] SpillCopyNode::make_copy(0x100647690, 0x1006449f0, 0x1, 0x100643fb8, 0x0,
0x1007e6c01), at 0xffffffff7d7db204
[10] PhaseChaitin::fixup_spills(0xffffffff7e603ed0, 0x0, 0xffffffff7def17d0,
0x0, 0x0, 0x1007e6130), at 0xffffffff7d784c28
[11] PhaseChaitin::Register_Allocate(0xffffffff7e603ed0, 0x0,
0xffffffff7def17a0, 0x0, 0x0, 0x1002a24d0), at 0xffffffff7d78012c
[12] Compile::Code_Gen(0xffffffff7e604d80, 0x0, 0xffffffff2ce12868,
0x1002a2c30, 0x100806170, 0x0), at 0xffffffff7d7b924c
[13] Compile::Compile(0x0, 0x1, 0x1, 0x1, 0x0, 0xffffffff7defe328), at
0xffffffff7d7b5540
[14] C2Compiler::compile_method(0x10010f058, 0xffffffff7e6055b8, 0x0,
0x100806170, 0xffffffffffffffff, 0x0), at 0xffffffff7d753994
[15] CompileBroker::invoke_compiler_on_method(0x1003022f8, 0xffffffff384a20f0,
0x0, 0x0, 0x0, 0x0), at 0xffffffff7d5a89c4
[16] CompileBroker::compiler_thread_loop(0x0, 0x5, 0x0, 0x1, 0x0,
0xffffffff7e605d60), at 0xffffffff7d5a83f0
[17] compiler_thread_entry(0x100204408, 0x100204408, 0x1, 0x0, 0x0, 0x0), at
0xffffffff7d466a50
[18] JavaThread::thread_main_inner(0x100204408, 0x1001f60c8, 0x6, 0x0, 0x0,
0x0), at 0xffffffff7d46187c
[19] JavaThread::run(0x100204408, 0x0, 0x0, 0x0, 0x0, 0x0), at
0xffffffff7d461698
[20] _start(0x100204408, 0xffffffff7e605ca0, 0x0, 0xffffffff7f626db1, 0x0,
0xffffffff3a181ca0), at 0xffffffff7d331008
(/opt/SUNWspro/bin/../WS5.0/bin/sparcv9/dbx)