Reproduce by running SPECjbb2005 with FullAdaptiveMarkSweep.
This crash can be solved by removing the annotation adding from BigDecimal.valueOf methods in AnnotationAdder.java. However I suspect this is just because SPECjbb2005 uses this method as the method is logically pure: there may be a more widespread issue with Pure methods here.
This has been a reliable failure since r13674 (September 07).
Description
Reproduce by running SPECjbb2005 with FullAdaptiveMarkSweep.
This crash can be solved by removing the annotation adding from BigDecimal.valueOf methods in AnnotationAdder.java. However I suspect this is just because SPECjbb2005 uses this method as the method is logically pure: there may be a more widespread issue with Pure methods here.
This has been a reliable failure since r13674 (September 07).
This bug relates to object constants being unmoving with the mark sweep garbage collector. I suspect when we generate their address as an IntConstant we're getting it wrong via Magic.objectAsAddress. The code dies in:
137 EG ia32_call EAX(Ljava/math/BigDecimal AF CF OF PF ZF ESP = <[EBX(Lorg/jikesrvm/objectmodel/TIB;)]+92>DW (<TRUEGUARD>),
where I believe the loaded TIB from the literal has become junk. The error can be reproduced with:
Ian Rogers added a comment - 08/Jul/08 11:28 AM This bug relates to object constants being unmoving with the mark sweep garbage collector. I suspect when we generate their address as an IntConstant we're getting it wrong via Magic.objectAsAddress. The code dies in:
137 EG ia32_call EAX(Ljava/math/BigDecimal AF CF OF PF ZF ESP = <[EBX(Lorg/jikesrvm/objectmodel/TIB;)]+92>DW (<TRUEGUARD>),
where I believe the loaded TIB from the literal has become junk. The error can be reproduced with:
rvm -gdb -X:aos:enable_recompilation=false -Xms400m -Xmx600m -classpath jbb.jar:check.jar org.jikesrvm.tools.oth.OptTestHarness -oc:O2 -oc:print_all_ir=true -methodBase java.math.BigDecimal valueOf - -methodOpt spec.jbb.Order processLines - -main spec.jbb.JBBmain -propfile SPECjbb.props
In the case a literal didn't move we optimized its address to a constant without ensuring it was kept alive. r14680 ensures the value is kept alive by placing it in the JTOC. We could, however, place the object anywhere that would be traced.
Ian Rogers added a comment - 08/Jul/08 03:53 PM In the case a literal didn't move we optimized its address to a constant without ensuring it was kept alive. r14680 ensures the value is kept alive by placing it in the JTOC. We could, however, place the object anywhere that would be traced.
137 EG ia32_call EAX(Ljava/math/BigDecimal
AF CF OF PF ZF ESP = <[EBX(Lorg/jikesrvm/objectmodel/TIB;)]+92>DW (<TRUEGUARD>),
where I believe the loaded TIB from the literal has become junk. The error can be reproduced with:
rvm -gdb -X:aos:enable_recompilation=false -Xms400m -Xmx600m -classpath jbb.jar:check.jar org.jikesrvm.tools.oth.OptTestHarness -oc:O2 -oc:print_all_ir=true -methodBase java.math.BigDecimal valueOf - -methodOpt spec.jbb.Order processLines - -main spec.jbb.JBBmain -propfile SPECjbb.props