src/cpu/sparc/vm/runtime_sparc.cpp

changeset 1922
110501f54a99
parent 1162
6b2273dd6fa9
child 1934
e9ff18c4ace7
     1.1 --- a/src/cpu/sparc/vm/runtime_sparc.cpp	Mon May 24 14:15:14 2010 -0700
     1.2 +++ b/src/cpu/sparc/vm/runtime_sparc.cpp	Tue May 25 02:38:48 2010 -0700
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright 1998-2009 Sun Microsystems, Inc.  All Rights Reserved.
     1.6 + * Copyright 1998-2010 Sun Microsystems, Inc.  All Rights Reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -116,6 +116,11 @@
    1.11    __ mov(O0, G3_scratch);             // Move handler address to temp
    1.12    __ restore();
    1.13  
    1.14 +  // Restore SP from L7 if the exception PC is a MethodHandle call site.
    1.15 +  __ lduw(Address(G2_thread, JavaThread::is_method_handle_return_offset()), O7);
    1.16 +  __ tst(O7);
    1.17 +  __ movcc(Assembler::notZero, false, Assembler::icc, L7_mh_SP_save, SP);
    1.18 +
    1.19    // G3_scratch contains handler address
    1.20    // Since this may be the deopt blob we must set O7 to look like we returned
    1.21    // from the original pc that threw the exception

mercurial