Index: src/ia32/deoptimizer-ia32.cc |
=================================================================== |
--- src/ia32/deoptimizer-ia32.cc (revision 9327) |
+++ src/ia32/deoptimizer-ia32.cc (working copy) |
@@ -116,7 +116,7 @@ |
new_reloc->GetDataStartAddress() + padding, 0); |
intptr_t comment_string |
= reinterpret_cast<intptr_t>(RelocInfo::kFillerCommentString); |
- RelocInfo rinfo(0, RelocInfo::COMMENT, comment_string); |
+ RelocInfo rinfo(0, RelocInfo::COMMENT, comment_string, NULL); |
for (int i = 0; i < additional_comments; ++i) { |
#ifdef DEBUG |
byte* pos_before = reloc_info_writer.pos(); |
@@ -174,7 +174,8 @@ |
// We use RUNTIME_ENTRY for deoptimization bailouts. |
RelocInfo rinfo(curr_address + 1, // 1 after the call opcode. |
RelocInfo::RUNTIME_ENTRY, |
- reinterpret_cast<intptr_t>(deopt_entry)); |
+ reinterpret_cast<intptr_t>(deopt_entry), |
+ NULL); |
reloc_info_writer.Write(&rinfo); |
ASSERT_GE(reloc_info_writer.pos(), |
reloc_info->address() + ByteArray::kHeaderSize); |
@@ -221,7 +222,8 @@ |
} |
-void Deoptimizer::PatchStackCheckCodeAt(Address pc_after, |
+void Deoptimizer::PatchStackCheckCodeAt(Code* unoptimized_code, |
+ Address pc_after, |
Code* check_code, |
Code* replacement_code) { |
Address call_target_address = pc_after - kIntSize; |
@@ -250,6 +252,13 @@ |
*(call_target_address - 2) = 0x90; // nop |
Assembler::set_target_address_at(call_target_address, |
replacement_code->entry()); |
+ |
+ RelocInfo rinfo(call_target_address, |
+ RelocInfo::CODE_TARGET, |
+ NULL, |
+ unoptimized_code); |
+ unoptimized_code->GetHeap()->incremental_marking()->RecordWriteIntoCode( |
+ unoptimized_code, &rinfo, replacement_code); |
} |
@@ -268,6 +277,9 @@ |
*(call_target_address - 2) = 0x07; // offset |
Assembler::set_target_address_at(call_target_address, |
check_code->entry()); |
+ |
+ check_code->GetHeap()->incremental_marking()-> |
+ RecordCodeTargetPatch(call_target_address, check_code); |
} |