RVM

BigDecimal Pure annotations causes crash on SPECjbb2005 for FullAdaptiveMarkSweep

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Critical Critical
  • Resolution: Fixed
  • Affects Version/s: None
  • Fix Version/s: 3.0
  • Component/s: None
  • Labels:
    None
  • Number of attachments :
    0

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).

Activity

Hide
Ian Rogers added a comment -

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

Show
Ian Rogers added a comment - 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
Hide
Ian Rogers added a comment -

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.

Show
Ian Rogers added a comment - 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.

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: