Code Review for 7045513

Prepared by:never on Tue May 17 16:00:43 PDT 2011
Workspace:/net/smite.us.oracle.com/export/ws/indy
Compare against: ssh://hg.openjdk.java.net/jdk7/hotspot-comp-gate/hotspot
Summary of changes: 335 lines changed: 277 ins; 8 del; 50 mod; 21338 unchg
Patch of changes: 7045513.patch
Author comments:
7045513: JSR 292 inlining causes crashes in methodHandleWalk.cpp
Reviewed-by:

Several issues with the MethodHandleWalk code were identified with
jruby and a stress mode was added that exposed quite a few more.
Method handles with void returns weren't being handled properly with
spreading. Constant ArgTokens weren't being handled in several
places. ArgToken didn't have enough asserts to guard against improper
use to handle could be mistakenly used as a local index. make_fetch
which was used by argument spreading wasn't implemented. Several of
the bytecodes didn't handle their proper u2 or u4 ranges. make_invoke
didn't sanity check the number of arguments passed. Dispatch through
invokeinterface was unimplemented. tail_call make_invokes didn't push
the result on the stack resulting in the max_stack on the method being
wrong. Currently I'm swallowing any exceptions thrown by the stress
logic but eventually those will need to be clean.

Tested with the java/lang/invoke regression tests with
StressMethodHandles turned on plus the failing jruby tests.

I fixed some ifdefs so that the optimized build works again.

I also added the richochet blob to the SA so that it can walk the code
cache. I had to add the AdapterBlobs as well.

Bug id: Bug Database
Legend: Modified file
Deleted file
New file

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

3 lines changed: 3 ins; 0 del; 0 mod; 3831 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/ci/ciMethodHandle.cpp

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

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/prims/methodHandleWalk.cpp

110 lines changed: 81 ins; 4 del; 25 mod; 1521 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/prims/methodHandleWalk.hpp

23 lines changed: 8 ins; 1 del; 14 mod; 430 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/prims/methodHandles.cpp

54 lines changed: 50 ins; 2 del; 2 mod; 3006 unchg

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

8 lines changed: 3 ins; 0 del; 5 mod; 575 unchg

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

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

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw src/share/vm/opto/idealGraphPrinter.cpp

2 lines changed: 2 ins; 0 del; 0 mod; 753 unchg

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

3 lines changed: 2 ins; 1 del; 0 mod; 4339 unchg

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

6 lines changed: 5 ins; 0 del; 1 mod; 2502 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java

6 lines changed: 5 ins; 0 del; 1 mod; 1467 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw agent/src/share/classes/sun/jvm/hotspot/code/CodeBlob.java

2 lines changed: 2 ins; 0 del; 0 mod; 221 unchg

Cdiffs Udiffs Sdiffs Frames Old New Patch Raw agent/src/share/classes/sun/jvm/hotspot/code/CodeCache.java

2 lines changed: 2 ins; 0 del; 0 mod; 204 unchg

------ ------ ------ ------ --- New Patch Raw agent/src/share/classes/sun/jvm/hotspot/code/AdapterBlob.java

58 lines changed: 58 ins; 0 del; 0 mod; 0 unchg

------ ------ ------ ------ --- New Patch Raw agent/src/share/classes/sun/jvm/hotspot/code/RicochetBlob.java

56 lines changed: 56 ins; 0 del; 0 mod; 0 unchg

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