summaryrefslogtreecommitdiff
path: root/runtime/common_dex_operations.h
diff options
context:
space:
mode:
author Alex Light <allight@google.com> 2018-10-05 23:42:12 +0000
committer Alex Light <allight@google.com> 2018-10-08 13:18:35 -0700
commit1c7b1fcf0ff29d83d13d38d0451a54474ccf5964 (patch)
treeb978817acd252f10bd4648d3582ac9459fc9a0f4 /runtime/common_dex_operations.h
parent59b950f53152c169464ba8c63d44102eeba1e594 (diff)
Revert^2 "JVMTI PopFrame support"
This reverts commit f67d0cbf2743b29aa6e1be7ae2f71762b8762785. Redefine-stress causes classes to be loaded at slightly different places due to the deep verification needed to redefine a class. This would cause the parts of tests 1953 and 1954 to fail due to classes loading at unexpected times. We changed the test to skip these test-cases when they cannot be correctly executed. Reason for revert: Fixed issue causing tests to fail under redefine-stress Test: ./test.py --host Test: ./art/tools/run-libjdwp-tests.sh --mode=host Test: ./test/testrunner/testrunner.py --host --redefine-stress Bug: 73255278 Bug: 111357976 Change-Id: I46fb4aed878bcc9398f2b73ad5040d7c97aec3ef
Diffstat (limited to 'runtime/common_dex_operations.h')
-rw-r--r--runtime/common_dex_operations.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/runtime/common_dex_operations.h b/runtime/common_dex_operations.h
index c29043e7c6..15ab5f0387 100644
--- a/runtime/common_dex_operations.h
+++ b/runtime/common_dex_operations.h
@@ -27,6 +27,7 @@
#include "dex/primitive.h"
#include "handle_scope-inl.h"
#include "instrumentation.h"
+#include "interpreter/interpreter.h"
#include "interpreter/shadow_frame.h"
#include "interpreter/unstarted_runtime.h"
#include "jvalue-inl.h"
@@ -172,6 +173,14 @@ ALWAYS_INLINE bool DoFieldPutCommon(Thread* self,
if (UNLIKELY(self->IsExceptionPending())) {
return false;
}
+ if (shadow_frame.GetForcePopFrame()) {
+ // We need to check this here since we expect that the FieldWriteEvent happens before the
+ // actual field write. If one pops the stack we should not modify the field. The next
+ // instruction will force a pop. Return true.
+ DCHECK(Runtime::Current()->AreNonStandardExitsEnabled());
+ DCHECK(interpreter::PrevFrameWillRetry(self, shadow_frame));
+ return true;
+ }
}
switch (field_type) {