| Index: src/x64/debug-x64.cc
|
| diff --git a/src/x64/debug-x64.cc b/src/x64/debug-x64.cc
|
| index 94a50eb53e7731246dc135242ca92e889d975e90..1b29e58d59bdb496d62631dc97685634aca7a43f 100644
|
| --- a/src/x64/debug-x64.cc
|
| +++ b/src/x64/debug-x64.cc
|
| @@ -91,7 +91,7 @@ void BreakLocationIterator::ClearDebugBreakAtSlot() {
|
| rinfo()->PatchCode(original_rinfo()->pc(), Assembler::kDebugBreakSlotLength);
|
| }
|
|
|
| -const bool Debug::FramePaddingLayout::kIsSupported = false;
|
| +const bool Debug::FramePaddingLayout::kIsSupported = true;
|
|
|
|
|
| #define __ ACCESS_MASM(masm)
|
| @@ -105,6 +105,12 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
|
| {
|
| FrameScope scope(masm, StackFrame::INTERNAL);
|
|
|
| + // Load padding words on stack.
|
| + for (int i = 0; i < Debug::FramePaddingLayout::kInitialSize; i++) {
|
| + __ Push(Smi::FromInt(Debug::FramePaddingLayout::kPaddingValue));
|
| + }
|
| + __ Push(Smi::FromInt(Debug::FramePaddingLayout::kInitialSize));
|
| +
|
| // Store the registers containing live values on the expression stack to
|
| // make sure that these are correctly updated during GC. Non object values
|
| // are stored as as two smis causing it to be untouched by GC.
|
| @@ -159,6 +165,11 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
|
| }
|
| }
|
|
|
| + // Read current padding counter and skip corresponding number of words.
|
| + __ pop(kScratchRegister);
|
| + __ SmiToInteger32(kScratchRegister, kScratchRegister);
|
| + __ lea(rsp, Operand(rsp, kScratchRegister, times_pointer_size, 0));
|
| +
|
| // Get rid of the internal frame.
|
| }
|
|
|
|
|