| Index: src/x64/macro-assembler-x64.cc
|
| diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
|
| index 9c9b1620e586ce5872bbc46de2eaf515266716a0..fd64f3c6efead088686fa4911a7e07c7bcfeffec 100644
|
| --- a/src/x64/macro-assembler-x64.cc
|
| +++ b/src/x64/macro-assembler-x64.cc
|
| @@ -3895,6 +3895,8 @@ void MacroAssembler::Allocate(int object_size,
|
| ASSERT(kHeapObjectTag == 1);
|
| incq(result);
|
| }
|
| +
|
| + RecordObjectAllocation(isolate(), result, object_size);
|
| }
|
|
|
|
|
| @@ -3963,6 +3965,8 @@ void MacroAssembler::Allocate(Register object_size,
|
| if ((flags & TAG_OBJECT) != 0) {
|
| addq(result, Immediate(kHeapObjectTag));
|
| }
|
| +
|
| + RecordObjectAllocation(isolate(), result, object_size);
|
| }
|
|
|
|
|
| @@ -4698,6 +4702,50 @@ void MacroAssembler::TestJSArrayForAllocationMemento(
|
| }
|
|
|
|
|
| +void MacroAssembler::RecordObjectAllocation(Isolate* isolate,
|
| + Register object,
|
| + Register object_size) {
|
| + Label done;
|
| + cmpl(ExternalOperand(
|
| + ExternalReference::is_tracking_allocations_address(isolate)),
|
| + Immediate(0));
|
| + j(zero, &done, Label::kNear);
|
| + FrameScope frame(this, StackFrame::MANUAL);
|
| + PushSafepointRegisters();
|
| + PrepareCallCFunction(3);
|
| + // In case object is rdx
|
| + movq(kScratchRegister, object);
|
| + movq(rdx, object_size);
|
| + movq(rsi, kScratchRegister);
|
| + movq(rdi, isolate, RelocInfo::EXTERNAL_REFERENCE);
|
| + CallCFunction(
|
| + ExternalReference::record_object_allocation_function(isolate), 3);
|
| + PopSafepointRegisters();
|
| + bind(&done);
|
| +}
|
| +
|
| +
|
| +void MacroAssembler::RecordObjectAllocation(Isolate* isolate,
|
| + Register object,
|
| + int object_size) {
|
| + Label done;
|
| + cmpl(ExternalOperand(
|
| + ExternalReference::is_tracking_allocations_address(isolate)),
|
| + Immediate(0));
|
| + j(zero, &done, Label::kNear);
|
| + FrameScope frame(this, StackFrame::MANUAL);
|
| + PushSafepointRegisters();
|
| + PrepareCallCFunction(3);
|
| + movq(rsi, object);
|
| + movq(rdx, Immediate(object_size));
|
| + movq(rdi, isolate, RelocInfo::EXTERNAL_REFERENCE);
|
| + CallCFunction(
|
| + ExternalReference::record_object_allocation_function(isolate), 3);
|
| + PopSafepointRegisters();
|
| + bind(&done);
|
| +}
|
| +
|
| +
|
| } } // namespace v8::internal
|
|
|
| #endif // V8_TARGET_ARCH_X64
|
|
|