1 /* |
1 /* |
2 * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved. |
2 * Copyright 1998-2010 Sun Microsystems, Inc. All Rights Reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
808 fatal("Native mathod should not have path to exception handling"); |
808 fatal("Native mathod should not have path to exception handling"); |
809 } else { |
809 } else { |
810 // we are switching to old paradigm: search for exception handler in caller_frame |
810 // we are switching to old paradigm: search for exception handler in caller_frame |
811 // instead in exception handler of caller_frame.sender() |
811 // instead in exception handler of caller_frame.sender() |
812 |
812 |
813 if (JvmtiExport::can_post_exceptions()) { |
813 if (JvmtiExport::can_post_on_exceptions()) { |
814 // "Full-speed catching" is not necessary here, |
814 // "Full-speed catching" is not necessary here, |
815 // since we're notifying the VM on every catch. |
815 // since we're notifying the VM on every catch. |
816 // Force deoptimization and the rest of the lookup |
816 // Force deoptimization and the rest of the lookup |
817 // will be fine. |
817 // will be fine. |
818 deoptimize_caller_frame(thread, true); |
818 deoptimize_caller_frame(thread, true); |
973 RegisterMap reg_map(thread); |
973 RegisterMap reg_map(thread); |
974 frame stub_frame = thread->last_frame(); |
974 frame stub_frame = thread->last_frame(); |
975 assert(stub_frame.is_runtime_frame() || exception_blob()->contains(stub_frame.pc()), "sanity check"); |
975 assert(stub_frame.is_runtime_frame() || exception_blob()->contains(stub_frame.pc()), "sanity check"); |
976 frame caller_frame = stub_frame.sender(®_map); |
976 frame caller_frame = stub_frame.sender(®_map); |
977 |
977 |
978 VM_DeoptimizeFrame deopt(thread, caller_frame.id()); |
978 // bypass VM_DeoptimizeFrame and deoptimize the frame directly |
979 VMThread::execute(&deopt); |
979 Deoptimization::deoptimize_frame(thread, caller_frame.id()); |
980 } |
980 } |
981 } |
981 } |
982 |
982 |
983 |
983 |
984 const TypeFunc *OptoRuntime::register_finalizer_Type() { |
984 const TypeFunc *OptoRuntime::register_finalizer_Type() { |