diff options
Diffstat (limited to 'runtime/verifier/method_verifier.cc')
-rw-r--r-- | runtime/verifier/method_verifier.cc | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index 29bc40c30c..742f50dec8 100644 --- a/runtime/verifier/method_verifier.cc +++ b/runtime/verifier/method_verifier.cc @@ -5107,12 +5107,12 @@ MethodVerifier::FailureData MethodVerifier::VerifyMethod(Thread* self, ArtMethod* method, uint32_t method_access_flags, CompilerCallbacks* callbacks, + VerifierCallback* verifier_callback, bool allow_soft_failures, HardFailLogMode log_level, bool need_precise_constants, uint32_t api_level, bool aot_mode, - bool allow_suspension, std::string* hard_failure_msg) { if (VLOG_IS_ON(verifier_debug)) { return VerifyMethod<true>(self, @@ -5127,12 +5127,12 @@ MethodVerifier::FailureData MethodVerifier::VerifyMethod(Thread* self, method, method_access_flags, callbacks, + verifier_callback, allow_soft_failures, log_level, need_precise_constants, api_level, aot_mode, - allow_suspension, hard_failure_msg); } else { return VerifyMethod<false>(self, @@ -5147,12 +5147,12 @@ MethodVerifier::FailureData MethodVerifier::VerifyMethod(Thread* self, method, method_access_flags, callbacks, + verifier_callback, allow_soft_failures, log_level, need_precise_constants, api_level, aot_mode, - allow_suspension, hard_failure_msg); } } @@ -5170,12 +5170,12 @@ MethodVerifier::FailureData MethodVerifier::VerifyMethod(Thread* self, ArtMethod* method, uint32_t method_access_flags, CompilerCallbacks* callbacks, + VerifierCallback* verifier_callback, bool allow_soft_failures, HardFailLogMode log_level, bool need_precise_constants, uint32_t api_level, bool aot_mode, - bool allow_suspension, std::string* hard_failure_msg) { MethodVerifier::FailureData result; uint64_t start_ns = kTimeVerifyMethod ? NanoTime() : 0; @@ -5186,8 +5186,8 @@ MethodVerifier::FailureData MethodVerifier::VerifyMethod(Thread* self, dex_file, code_item, method_idx, - /* can_load_classes= */ allow_suspension, - /* allow_thread_suspension= */ allow_suspension, + /* can_load_classes= */ true, + /* allow_thread_suspension= */ true, allow_soft_failures, aot_mode, dex_cache, @@ -5209,6 +5209,7 @@ MethodVerifier::FailureData MethodVerifier::VerifyMethod(Thread* self, callbacks->MethodVerified(&verifier); } + bool set_dont_compile = false; if (verifier.failures_.size() != 0) { if (VLOG_IS_ON(verifier)) { verifier.DumpFailures(VLOG_STREAM(verifier) << "Soft verification failures in " @@ -5221,12 +5222,12 @@ MethodVerifier::FailureData MethodVerifier::VerifyMethod(Thread* self, result.kind = FailureKind::kSoftFailure; if (method != nullptr && !CanCompilerHandleVerificationFailure(verifier.encountered_failure_types_)) { - method->SetDontCompile(); + set_dont_compile = true; } } if (method != nullptr) { if (verifier.HasInstructionThatWillThrow()) { - method->SetDontCompile(); + set_dont_compile = true; if (aot_mode && (callbacks != nullptr) && !callbacks->IsBootImage()) { // When compiling apps, make HasInstructionThatWillThrow a soft error to trigger // re-verification at runtime. @@ -5240,9 +5241,12 @@ MethodVerifier::FailureData MethodVerifier::VerifyMethod(Thread* self, result.kind = FailureKind::kSoftFailure; } } + bool must_count_locks = false; if ((verifier.encountered_failure_types_ & VerifyError::VERIFY_ERROR_LOCKING) != 0) { - method->SetMustCountLocks(); + must_count_locks = true; } + verifier_callback->SetDontCompile(method, set_dont_compile); + verifier_callback->SetMustCountLocks(method, must_count_locks); } } else { // Bad method data. |