| Index: src/x64/macro-assembler-x64.cc
 | 
| diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
 | 
| index f41da95da76e9601bf11f96aed31cbb9ccfef601..bde32be47e584ceaa00de4f69ba72f7696f7fed8 100644
 | 
| --- a/src/x64/macro-assembler-x64.cc
 | 
| +++ b/src/x64/macro-assembler-x64.cc
 | 
| @@ -3757,7 +3757,7 @@ void MacroAssembler::EnterApiExitFrame(int arg_stack_space) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::LeaveExitFrame(bool save_doubles) {
 | 
| +void MacroAssembler::LeaveExitFrame(bool save_doubles, bool pop_arguments) {
 | 
|    // Registers:
 | 
|    // r15 : argv
 | 
|    if (save_doubles) {
 | 
| @@ -3769,15 +3769,21 @@ void MacroAssembler::LeaveExitFrame(bool save_doubles) {
 | 
|        movsd(reg, Operand(rbp, offset - ((i + 1) * kDoubleSize)));
 | 
|      }
 | 
|    }
 | 
| -  // Get the return address from the stack and restore the frame pointer.
 | 
| -  movp(rcx, Operand(rbp, kFPOnStackSize));
 | 
| -  movp(rbp, Operand(rbp, 0 * kPointerSize));
 | 
|  
 | 
| -  // Drop everything up to and including the arguments and the receiver
 | 
| -  // from the caller stack.
 | 
| -  leap(rsp, Operand(r15, 1 * kPointerSize));
 | 
| +  if (pop_arguments) {
 | 
| +    // Get the return address from the stack and restore the frame pointer.
 | 
| +    movp(rcx, Operand(rbp, kFPOnStackSize));
 | 
| +    movp(rbp, Operand(rbp, 0 * kPointerSize));
 | 
|  
 | 
| -  PushReturnAddressFrom(rcx);
 | 
| +    // Drop everything up to and including the arguments and the receiver
 | 
| +    // from the caller stack.
 | 
| +    leap(rsp, Operand(r15, 1 * kPointerSize));
 | 
| +
 | 
| +    PushReturnAddressFrom(rcx);
 | 
| +  } else {
 | 
| +    // Otherwise just leave the exit frame.
 | 
| +    leave();
 | 
| +  }
 | 
|  
 | 
|    LeaveExitFrameEpilogue(true);
 | 
|  }
 | 
| 
 |