| Index: src/x64/builtins-x64.cc
 | 
| diff --git a/src/x64/builtins-x64.cc b/src/x64/builtins-x64.cc
 | 
| index d34e4f70d9a9c0a425e6cf2db99acf22768a42f7..2200813c3d3c919e9db39574cf6b5b1e11e2eace 100644
 | 
| --- a/src/x64/builtins-x64.cc
 | 
| +++ b/src/x64/builtins-x64.cc
 | 
| @@ -59,9 +59,9 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm,
 | 
|    int num_extra_args = 0;
 | 
|    if (extra_args == NEEDS_CALLED_FUNCTION) {
 | 
|      num_extra_args = 1;
 | 
| -    __ pop(kScratchRegister);  // Save return address.
 | 
| +    __ PopReturnAddressTo(kScratchRegister);
 | 
|      __ push(rdi);
 | 
| -    __ push(kScratchRegister);  // Restore return address.
 | 
| +    __ PushReturnAddressFrom(kScratchRegister);
 | 
|    } else {
 | 
|      ASSERT(extra_args == NO_EXTRA_ARGUMENTS);
 | 
|    }
 | 
| @@ -429,10 +429,10 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm,
 | 
|    }
 | 
|  
 | 
|    // Remove caller arguments from the stack and return.
 | 
| -  __ pop(rcx);
 | 
| +  __ PopReturnAddressTo(rcx);
 | 
|    SmiIndex index = masm->SmiToIndex(rbx, rbx, kPointerSizeLog2);
 | 
|    __ lea(rsp, Operand(rsp, index.reg, index.scale, 1 * kPointerSize));
 | 
| -  __ push(rcx);
 | 
| +  __ PushReturnAddressFrom(rcx);
 | 
|    Counters* counters = masm->isolate()->counters();
 | 
|    __ IncrementCounter(counters->constructed_objects(), 1);
 | 
|    __ ret(0);
 | 
| @@ -772,9 +772,9 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
 | 
|    { Label done;
 | 
|      __ testq(rax, rax);
 | 
|      __ j(not_zero, &done);
 | 
| -    __ pop(rbx);
 | 
| +    __ PopReturnAddressTo(rbx);
 | 
|      __ Push(masm->isolate()->factory()->undefined_value());
 | 
| -    __ push(rbx);
 | 
| +    __ PushReturnAddressFrom(rbx);
 | 
|      __ incq(rax);
 | 
|      __ bind(&done);
 | 
|    }
 | 
| @@ -895,9 +895,9 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
 | 
|      __ cmpq(rdx, Immediate(1));
 | 
|      __ j(not_equal, &non_proxy);
 | 
|  
 | 
| -    __ pop(rdx);   // return address
 | 
| +    __ PopReturnAddressTo(rdx);
 | 
|      __ push(rdi);  // re-add proxy object as additional argument
 | 
| -    __ push(rdx);
 | 
| +    __ PushReturnAddressFrom(rdx);
 | 
|      __ incq(rax);
 | 
|      __ GetBuiltinEntry(rdx, Builtins::CALL_FUNCTION_PROXY);
 | 
|      __ jmp(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(),
 | 
| @@ -1182,9 +1182,9 @@ void Builtins::Generate_StringConstructCode(MacroAssembler* masm) {
 | 
|    __ testq(rax, rax);
 | 
|    __ j(zero, &no_arguments);
 | 
|    __ movq(rbx, Operand(rsp, rax, times_pointer_size, 0));
 | 
| -  __ pop(rcx);
 | 
| +  __ PopReturnAddressTo(rcx);
 | 
|    __ lea(rsp, Operand(rsp, rax, times_pointer_size, kPointerSize));
 | 
| -  __ push(rcx);
 | 
| +  __ PushReturnAddressFrom(rcx);
 | 
|    __ movq(rax, rbx);
 | 
|  
 | 
|    // Lookup the argument in the number to string cache.
 | 
| @@ -1268,9 +1268,9 @@ void Builtins::Generate_StringConstructCode(MacroAssembler* masm) {
 | 
|    // stack, and jump back to the case where the argument is a string.
 | 
|    __ bind(&no_arguments);
 | 
|    __ LoadRoot(rbx, Heap::kempty_stringRootIndex);
 | 
| -  __ pop(rcx);
 | 
| +  __ PopReturnAddressTo(rcx);
 | 
|    __ lea(rsp, Operand(rsp, kPointerSize));
 | 
| -  __ push(rcx);
 | 
| +  __ PushReturnAddressFrom(rcx);
 | 
|    __ jmp(&argument_is_string);
 | 
|  
 | 
|    // At this point the argument is already a string. Call runtime to
 | 
| @@ -1313,10 +1313,10 @@ static void LeaveArgumentsAdaptorFrame(MacroAssembler* masm) {
 | 
|    __ pop(rbp);
 | 
|  
 | 
|    // Remove caller arguments from the stack.
 | 
| -  __ pop(rcx);
 | 
| +  __ PopReturnAddressTo(rcx);
 | 
|    SmiIndex index = masm->SmiToIndex(rbx, rbx, kPointerSizeLog2);
 | 
|    __ lea(rsp, Operand(rsp, index.reg, index.scale, 1 * kPointerSize));
 | 
| -  __ push(rcx);
 | 
| +  __ PushReturnAddressFrom(rcx);
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |