Mercurial > hg > graal-jvmci-8
diff src/share/vm/runtime/deoptimization.cpp @ 1204:18a389214829
6921352: JSR 292 needs its own deopt handler
Summary: We need to introduce a new MH deopt handler so we can easily determine if the deopt happened at a MH call site or not.
Reviewed-by: never, jrose
author | twisti |
---|---|
date | Mon, 01 Feb 2010 19:29:46 +0100 |
parents | 24128c2ffa87 |
children | 87684f1a88b5 |
line wrap: on
line diff
--- a/src/share/vm/runtime/deoptimization.cpp Fri Jan 29 22:51:41 2010 -0800 +++ b/src/share/vm/runtime/deoptimization.cpp Mon Feb 01 19:29:46 2010 +0100 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2010 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -235,6 +235,12 @@ assert(cb->frame_size() >= 0, "Unexpected frame size"); intptr_t* unpack_sp = stub_frame.sp() + cb->frame_size(); + // If the deopt call site is a MethodHandle invoke call site we have + // to adjust the unpack_sp. + nmethod* deoptee_nm = deoptee.cb()->as_nmethod_or_null(); + if (deoptee_nm != NULL && deoptee_nm->is_method_handle_return(deoptee.pc())) + unpack_sp = deoptee.unextended_sp(); + #ifdef ASSERT assert(cb->is_deoptimization_stub() || cb->is_uncommon_trap_stub(), "just checking"); Events::log("fetch unroll sp " INTPTR_FORMAT, unpack_sp);