Code Review for 7090904

Prepared by:twisti on Wed Oct 19 08:37:12 PDT 2011
Workspace:/home/twisti/hsx/hotspot-comp/7090904
Compare against: /home/twisti/hsx/hotspot-comp/hotspot
Summary of changes: 61 lines changed: 37 ins; 7 del; 17 mod; 12870 unchg
Patch of changes: 7090904.patch
Printable review: 7090904.pdf
Author comments:
7090904: JSR 292: JRuby junit test crashes in PSScavengeRootsClosure::do_oop
Reviewed-by:

A couple of JRuby junit tests crash in various forms (mostly GC
related) when running on 64-bit Linux. Although it looks like a GC
related problem it actually is a deoptimization bug.

Tom already had a fix ready but we were unable to write a test case to
prove the correctness of the fix. An assert added in
AbstractInterpreter::layout_activation shows that the JRuby crashes
are indeed an incarnation of this deoptimization bug.

The bug itself is in the deoptimization logic that calculates the size
of parameter space in the caller frame. Method handle invokes may
involve fairly arbitrary chains of calls so it's impossible to know
how much actual space the caller has for locals.

The fix is to always assume zero parameters for method handle call
sites.

Extensive testing with JRuby junit tests.

Bug id: 7090904 JSR 292: JRuby junit test crashes in PSScavengeRootsClosure::do_oop
Legend: Modified file
Deleted file
New file

Cdiffs Udiffs Wdiffs Sdiffs Frames Old New Patch Raw src/share/vm/runtime/deoptimization.cpp

21 lines changed: 8 ins; 3 del; 10 mod; 1946 unchg

Cdiffs Udiffs Wdiffs Sdiffs Frames Old New Patch Raw src/cpu/x86/vm/templateInterpreter_x86_32.cpp

6 lines changed: 6 ins; 0 del; 0 mod; 1937 unchg

Cdiffs Udiffs Wdiffs Sdiffs Frames Old New Patch Raw src/cpu/x86/vm/templateInterpreter_x86_64.cpp

6 lines changed: 6 ins; 0 del; 0 mod; 1977 unchg

Cdiffs Udiffs Wdiffs Sdiffs Frames Old New Patch Raw src/share/vm/interpreter/bytecodeTracer.cpp

1 line changed: 0 ins; 0 del; 1 mod; 582 unchg

Cdiffs Udiffs Wdiffs Sdiffs Frames Old New Patch Raw src/share/vm/runtime/frame.cpp

25 lines changed: 17 ins; 4 del; 4 mod; 1483 unchg

Cdiffs Udiffs Wdiffs Sdiffs Frames Old New Patch Raw src/share/vm/runtime/frame.hpp

1 line changed: 0 ins; 0 del; 1 mod; 552 unchg

Cdiffs Udiffs Wdiffs Sdiffs Frames Old New Patch Raw src/share/vm/runtime/thread.cpp

1 line changed: 0 ins; 0 del; 1 mod; 4393 unchg

This code review page was prepared using /home/twisti/bin/webrev (vers 23.18-hg-never).