From 0aa7a5a6a7bc350b79351f52e26c97747e927acf Mon Sep 17 00:00:00 2001 From: Alex Light Date: Wed, 10 Oct 2018 15:58:14 +0000 Subject: Revert^4 "JVMTI PopFrame support" This reverts commit 202b617acf477e8e8e11915f467120a0bd518e74. This unreverts commit 202b617acf. This unreverts commit 88a2a9d7a1. There were several bugs with the implementation of pop-frame related to interactions between the jit, exception handling, class-loading, and deoptimization. - We were instrumenting the target thread stack in cases where it was unnecessary which caused the exception handler to incorrectly determine that a method was not deoptimizable. This caused the pop-frame to be ignored. - We were incorrectly sending ExceptionCatch events if an exception suppressed by pop-frame would have been caught in the current frame. - We were allowing pop-frame to be used on threads suspended in the ClassLoad or ClassPrepare events despite having surprising semantics in that situation (see b/117615146). Needed to modify test 1953 slightly for inclusion in CTS. I needed to make the CTS entrypoint not run the class-load tests (since the cts configuration means the classes are loaded by the verifier and not the interpreter). I updated the expected.txt and check script to reflect this. Reason for revert: Fixed issue causing Exception events to sometimes eat PopFrame and other issues. Test: ./test.py --host Test: ./art/tools/run-libjdwp-tests.sh --mode=host Bug: 73255278 Bug: 111357976 Bug: 117533193 Bug: 117615146 Change-Id: I655c4fe769938cf41d7589f931d6710cf2001506 --- runtime/quick_exception_handler.cc | 2 ++ 1 file changed, 2 insertions(+) (limited to 'runtime/quick_exception_handler.cc') diff --git a/runtime/quick_exception_handler.cc b/runtime/quick_exception_handler.cc index e882e7370a..36a6b7fc47 100644 --- a/runtime/quick_exception_handler.cc +++ b/runtime/quick_exception_handler.cc @@ -402,6 +402,8 @@ class DeoptimizeStackVisitor final : public StackVisitor { bool VisitFrame() override REQUIRES_SHARED(Locks::mutator_lock_) { exception_handler_->SetHandlerFrameDepth(GetFrameDepth()); ArtMethod* method = GetMethod(); + VLOG(deopt) << "Deoptimizing stack: depth: " << GetFrameDepth() + << " at method " << ArtMethod::PrettyMethod(method); if (method == nullptr || single_frame_done_) { FinishStackWalk(); return false; // End stack walk. -- cgit v1.2.3-59-g8ed1b