Index: runtime/vm/code_patcher_ia32.cc |
diff --git a/runtime/vm/code_patcher_ia32.cc b/runtime/vm/code_patcher_ia32.cc |
index de3f74c493d55ecd4132d462bbbf3717fbc6d9dd..db04cdf5bd8555c5b6f466729df706a1748ab34b 100644 |
--- a/runtime/vm/code_patcher_ia32.cc |
+++ b/runtime/vm/code_patcher_ia32.cc |
@@ -177,8 +177,13 @@ void CodePatcher::PatchStaticCallAt(uword return_address, |
} |
-void CodePatcher::InsertDeoptimizationCallAt(uword start) { |
- UNREACHABLE(); |
+void CodePatcher::InsertDeoptimizationCallAt(uword start, uword target) { |
+ // The inserted call should not overlap the lazy deopt jump code. |
+ ASSERT(start + CallPattern::pattern_length_in_bytes() <= target); |
+ *reinterpret_cast<uint8_t*>(start) = 0xE8; |
+ CallPattern call(start); |
+ call.SetTargetAddress(target); |
+ CPU::FlushICache(start, CallPattern::pattern_length_in_bytes()); |
} |