| Index: src/objects-debug.cc
|
| diff --git a/src/objects-debug.cc b/src/objects-debug.cc
|
| index 3a2ec3e559a16863db44acfcbce63a72cc9762aa..de7b06f670c6874ad5f1c95f0d22469b931c1ef7 100644
|
| --- a/src/objects-debug.cc
|
| +++ b/src/objects-debug.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "src/v8.h"
|
|
|
| +#include "src/bootstrapper.h"
|
| #include "src/disasm.h"
|
| #include "src/disassembler.h"
|
| #include "src/heap/objects-visiting.h"
|
| @@ -1281,9 +1282,11 @@ void Code::VerifyEmbeddedObjects(VerifyMode mode) {
|
| void Code::VerifyRecompiledCode(Code* old_code, Code* new_code) {
|
| if (old_code->kind() != FUNCTION) return;
|
| if (new_code->kind() != FUNCTION) return;
|
| - static const int mask = RelocInfo::kCodeTargetMask;
|
| -
|
| Isolate* isolate = old_code->GetIsolate();
|
| + // Do not verify during bootstrapping. We may replace code using %SetCode.
|
| + if (isolate->bootstrapper()->IsActive()) return;
|
| +
|
| + static const int mask = RelocInfo::kCodeTargetMask;
|
| RelocIterator old_it(old_code, mask);
|
| RelocIterator new_it(new_code, mask);
|
| Code* stack_check = isolate->builtins()->builtin(Builtins::kStackCheck);
|
| @@ -1316,7 +1319,10 @@ void Code::VerifyRecompiledCode(Code* old_code, Code* new_code) {
|
| Code* new_target =
|
| Code::GetCodeFromTargetAddress(new_it.rinfo()->target_address());
|
| CHECK_EQ(old_target->kind(), new_target->kind());
|
| - if (!old_target->is_handler() && !old_target->is_inline_cache_stub()) {
|
| + // Check call target for equality unless it's an IC or an interrupt check.
|
| + // In both cases they may be patched to be something else.
|
| + if (!old_target->is_handler() && !old_target->is_inline_cache_stub() &&
|
| + new_target == isolate->builtins()->builtin(Builtins::kInterruptCheck)) {
|
| CHECK_EQ(old_target, new_target);
|
| }
|
| old_it.next();
|
|
|