Index: src/ia32/assembler-ia32-inl.h |
diff --git a/src/ia32/assembler-ia32-inl.h b/src/ia32/assembler-ia32-inl.h |
index 0c3519720ff3e0efb72fce05af1c9413db00af6a..8022f0592bf01e8b982074c2d27f2e5b00483bf2 100644 |
--- a/src/ia32/assembler-ia32-inl.h |
+++ b/src/ia32/assembler-ia32-inl.h |
@@ -85,7 +85,7 @@ void RelocInfo::apply(intptr_t delta) { |
Address RelocInfo::target_address() { |
ASSERT(IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_)); |
- return Assembler::target_address_at(pc_); |
+ return Assembler::target_address_at(pc_, host_); |
} |
@@ -109,7 +109,7 @@ int RelocInfo::target_address_size() { |
void RelocInfo::set_target_address(Address target, WriteBarrierMode mode) { |
- Assembler::set_target_address_at(pc_, target); |
+ Assembler::set_target_address_at(pc_, host_, target); |
ASSERT(IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_)); |
if (mode == UPDATE_WRITE_BARRIER && host() != NULL && IsCodeTarget(rmode_)) { |
Object* target_code = Code::GetCodeFromTargetAddress(target); |
@@ -202,28 +202,28 @@ Code* RelocInfo::code_age_stub() { |
ASSERT(rmode_ == RelocInfo::CODE_AGE_SEQUENCE); |
ASSERT(*pc_ == kCallOpcode); |
return Code::GetCodeFromTargetAddress( |
- Assembler::target_address_at(pc_ + 1)); |
+ Assembler::target_address_at(pc_ + 1, host_)); |
} |
void RelocInfo::set_code_age_stub(Code* stub) { |
ASSERT(*pc_ == kCallOpcode); |
ASSERT(rmode_ == RelocInfo::CODE_AGE_SEQUENCE); |
- Assembler::set_target_address_at(pc_ + 1, stub->instruction_start()); |
+ Assembler::set_target_address_at(pc_ + 1, host_, stub->instruction_start()); |
} |
Address RelocInfo::call_address() { |
ASSERT((IsJSReturn(rmode()) && IsPatchedReturnSequence()) || |
(IsDebugBreakSlot(rmode()) && IsPatchedDebugBreakSlotSequence())); |
- return Assembler::target_address_at(pc_ + 1); |
+ return Assembler::target_address_at(pc_ + 1, host_); |
} |
void RelocInfo::set_call_address(Address target) { |
ASSERT((IsJSReturn(rmode()) && IsPatchedReturnSequence()) || |
(IsDebugBreakSlot(rmode()) && IsPatchedDebugBreakSlotSequence())); |
- Assembler::set_target_address_at(pc_ + 1, target); |
+ Assembler::set_target_address_at(pc_ + 1, host_, target); |
if (host() != NULL) { |
Object* target_code = Code::GetCodeFromTargetAddress(target); |
host()->GetHeap()->incremental_marking()->RecordWriteIntoCode( |
@@ -254,7 +254,7 @@ void RelocInfo::WipeOut() { |
Memory::Address_at(pc_) = NULL; |
} else if (IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_)) { |
// Effectively write zero into the relocation. |
- Assembler::set_target_address_at(pc_, pc_ + sizeof(int32_t)); |
+ Assembler::set_target_address_at(pc_, host_, pc_ + sizeof(int32_t)); |
} else { |
UNREACHABLE(); |
} |
@@ -445,12 +445,15 @@ void Assembler::emit_w(const Immediate& x) { |
} |
-Address Assembler::target_address_at(Address pc) { |
+Address Assembler::target_address_at(Address pc, |
+ ConstantPoolArray* constant_pool) { |
return pc + sizeof(int32_t) + *reinterpret_cast<int32_t*>(pc); |
} |
-void Assembler::set_target_address_at(Address pc, Address target) { |
+void Assembler::set_target_address_at(Address pc, |
+ ConstantPoolArray* constant_pool, |
+ Address target) { |
int32_t* p = reinterpret_cast<int32_t*>(pc); |
*p = target - (pc + sizeof(int32_t)); |
CPU::FlushICache(p, sizeof(int32_t)); |