| Index: src/x64/assembler-x64-inl.h
|
| diff --git a/src/x64/assembler-x64-inl.h b/src/x64/assembler-x64-inl.h
|
| index 1fe9eed4daca02dbefac7538a10c2af1c6578a29..70b40e07c8ff00005a836867fe0781e2a14354a5 100644
|
| --- a/src/x64/assembler-x64-inl.h
|
| +++ b/src/x64/assembler-x64-inl.h
|
| @@ -199,8 +199,10 @@ void RelocInfo::apply(intptr_t delta) {
|
| if (IsInternalReference(rmode_)) {
|
| // absolute code pointer inside code object moves with the code object.
|
| Memory::Address_at(pc_) += static_cast<int32_t>(delta);
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| } else if (IsCodeTarget(rmode_)) {
|
| Memory::int32_at(pc_) -= static_cast<int32_t>(delta);
|
| + CPU::FlushICache(pc_, sizeof(int32_t));
|
| }
|
| }
|
|
|
| @@ -236,6 +238,7 @@ void RelocInfo::set_target_address(Address target) {
|
| Assembler::set_target_address_at(pc_, target);
|
| } else {
|
| Memory::Address_at(pc_) = target;
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| }
|
| }
|
|
|
| @@ -271,6 +274,7 @@ Address* RelocInfo::target_reference_address() {
|
| void RelocInfo::set_target_object(Object* target) {
|
| ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
|
| *reinterpret_cast<Object**>(pc_) = target;
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| }
|
|
|
|
|
| @@ -295,6 +299,7 @@ void RelocInfo::set_target_cell(JSGlobalPropertyCell* cell) {
|
| ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
|
| Address address = cell->address() + JSGlobalPropertyCell::kValueOffset;
|
| Memory::Address_at(pc_) = address;
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| }
|
|
|
|
|
| @@ -331,6 +336,8 @@ void RelocInfo::set_call_address(Address target) {
|
| (IsDebugBreakSlot(rmode()) && IsPatchedDebugBreakSlotSequence()));
|
| Memory::Address_at(pc_ + Assembler::kRealPatchReturnSequenceAddressOffset) =
|
| target;
|
| + CPU::FlushICache(pc_ + Assembler::kRealPatchReturnSequenceAddressOffset,
|
| + sizeof(Address));
|
| }
|
|
|
|
|
| @@ -356,10 +363,12 @@ void RelocInfo::Visit(ObjectVisitor* visitor) {
|
| RelocInfo::Mode mode = rmode();
|
| if (mode == RelocInfo::EMBEDDED_OBJECT) {
|
| visitor->VisitPointer(target_object_address());
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| } else if (RelocInfo::IsCodeTarget(mode)) {
|
| visitor->VisitCodeTarget(this);
|
| } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
|
| visitor->VisitExternalReference(target_reference_address());
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| #ifdef ENABLE_DEBUGGER_SUPPORT
|
| } else if (Debug::has_break_points() &&
|
| ((RelocInfo::IsJSReturn(mode) &&
|
| @@ -379,10 +388,12 @@ void RelocInfo::Visit() {
|
| RelocInfo::Mode mode = rmode();
|
| if (mode == RelocInfo::EMBEDDED_OBJECT) {
|
| StaticVisitor::VisitPointer(target_object_address());
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| } else if (RelocInfo::IsCodeTarget(mode)) {
|
| StaticVisitor::VisitCodeTarget(this);
|
| } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
|
| StaticVisitor::VisitExternalReference(target_reference_address());
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| #ifdef ENABLE_DEBUGGER_SUPPORT
|
| } else if (Debug::has_break_points() &&
|
| ((RelocInfo::IsJSReturn(mode) &&
|
|
|