Index: src/mark-compact.cc |
diff --git a/src/mark-compact.cc b/src/mark-compact.cc |
index f065da1f94fb6ac507d0443bbd066f7c460a62bf..e5646f4bdda24ddb9abf01ef6357e8f22c02d000 100644 |
--- a/src/mark-compact.cc |
+++ b/src/mark-compact.cc |
@@ -2758,7 +2758,9 @@ void MarkCompactCollector::MigrateObject(Address dst, |
if (heap_->InNewSpace(value)) { |
heap_->store_buffer()->Mark(dst_slot); |
- } else if (value->IsHeapObject() && IsOnEvacuationCandidate(value)) { |
+ } else if (value->IsHeapObject() && |
+ !IsCodeEntry(src, value) && |
+ IsOnEvacuationCandidate(value)) { |
SlotsBuffer::AddTo(&slots_buffer_allocator_, |
&migration_slots_buffer_, |
reinterpret_cast<Object**>(dst_slot), |
@@ -2830,7 +2832,7 @@ class PointersUpdatingVisitor: public ObjectVisitor { |
Object* old_target = target; |
VisitPointer(&target); |
if (target != old_target) { |
- rinfo->set_target_address(Code::cast(target)->instruction_start()); |
+ rinfo->set_target_address(Code::cast(target)->entry()); |
} |
} |
@@ -2851,7 +2853,7 @@ class PointersUpdatingVisitor: public ObjectVisitor { |
rinfo->IsPatchedDebugBreakSlotSequence())); |
Object* target = Code::GetCodeFromTargetAddress(rinfo->call_address()); |
VisitPointer(&target); |
- rinfo->set_call_address(Code::cast(target)->instruction_start()); |
+ rinfo->set_call_address(Code::cast(target)->entry()); |
} |
static inline void UpdateSlot(Heap* heap, Object** slot) { |