Issue Details (XML | Word | Printable)

Key: RVM-571
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Critical Critical
Assignee: Ian Rogers
Reporter: Daniel Frampton
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
RVM

BigDecimal Pure annotations causes crash on SPECjbb2005 for FullAdaptiveMarkSweep

Created: 07/Jul/08 12:10 AM   Updated: 08/Jul/08 03:53 PM
Component/s: None
Affects Version/s: None
Fix Version/s: 3.0

Time Tracking:
Not Specified


 Description  « Hide
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).



 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
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


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.