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. |
} |