Request for reviews (L): 7012914: JSR 292 MethodHandlesTest C1: frame::verify_return_pc(return_address) failed: must be a return pc
Tom Rodriguez
tom.rodriguez at oracle.com
Mon Feb 21 11:05:07 PST 2011
On Feb 21, 2011, at 9:15 AM, Christian Thalinger wrote:
> http://cr.openjdk.java.net/~twisti/7012914/webrev.01/
>
> 7012914: JSR 292 MethodHandlesTest C1: frame::verify_return_pc(return_address) failed: must be a return pc
> Reviewed-by:
>
> The changes of 7007377 changed the way
> MethodHandlesImpl.raiseException is called from the raise_exception
> method handle adapter as it calls the C2I adapter. Since
> MethodHandlesImpl.raiseException has three arguments, on 32-bit x86 we
> need to pass one argument on the stack. This additional word on the
> stack needs to be removed when we return to the actual callee during
> unwinding.
>
> Since the call site that triggers the exception is a method handle
> call site we just need to restore the saved SP from BP.
>
> Right now this is only a problem on 32-bit x86 because of the way we
> implement the raise_exception method handle adapter. But I assume
> it's not impossible that in the future there are stack manipulations
> before we throw an exception. So a fix for all architectures seems
> reasonable.
>
> This change removes some unused code in
> StubGenerator::generate_forward_exception as this stub is only used
> for runtime calls with a pending exception and runtime calls can't be
> method handle call sites. It also removes the unused
> ExceptionCache::_unwind_handler.
>
> Additionally there is a small cleanup of
> SharedRuntime::raw_exception_handler_for_return_address to not call
> CodeCache::find_blob twice.
Isn't the second call unreachable? If nm != null then we will already have returned. So can't the whole block be replaced with:
guarantee(blob == NULL || !blob->is_runtime_stub(), "caller should have skipped stub");
Otherwise it looks fine.
tom
More information about the hotspot-compiler-dev
mailing list