Commit e043dcb5 authored by zhengxing.li's avatar zhengxing.li Committed by Commit bot

X87: [builtins] Add receiver to builtin exit frames.

  port f59a2335 (r37500)

  original commit message:
  Stack trace generation requires access to the receiver; and while the
  receiver is already on the stack, we cannot determine its position
  during stack trace generation (it's stored in argv[0], and argc is only
  stored in a callee-saved register).

  This patch grants access to the receiver by pushing argc onto builtin
  exit frames as an extra argument. Compared to simply pushing the
  receiver, this requires an additional dereference during stack trace
  generation, but one fewer during builtin calls.

BUG=

Review-Url: https://codereview.chromium.org/2118413002
Cr-Commit-Position: refs/heads/master@{#37511}
parent 47f54330
......@@ -36,17 +36,20 @@ void Builtins::Generate_Adaptor(MacroAssembler* masm, CFunctionId id,
// ordinary functions).
__ mov(esi, FieldOperand(edi, JSFunction::kContextOffset));
// JumpToExternalReference expects eax to contain the number of arguments
// including the receiver and the extra arguments.
const int num_extra_args = 3;
__ add(eax, Immediate(num_extra_args + 1));
// Insert extra arguments.
const int num_extra_args = 2;
__ PopReturnAddressTo(ecx);
__ SmiTag(eax);
__ Push(eax);
__ SmiUntag(eax);
__ Push(edi);
__ Push(edx);
__ PushReturnAddressFrom(ecx);
// JumpToExternalReference expects eax to contain the number of arguments
// including the receiver and the extra arguments.
__ add(eax, Immediate(num_extra_args + 1));
__ JumpToExternalReference(ExternalReference(id, masm->isolate()),
exit_frame_type == BUILTIN_EXIT);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment