summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/arm64/builtins-arm64.cc
diff options
context:
space:
mode:
authorMyles Borins <mylesborins@google.com>2019-09-24 11:56:38 -0400
committerMyles Borins <myles.borins@gmail.com>2019-10-07 03:19:23 -0400
commitf7f6c928c1c9c136b7926f892b8a2fda11d8b4b2 (patch)
treef5edbccb3ffda2573d70a6e291e7157f290e0ae0 /deps/v8/src/builtins/arm64/builtins-arm64.cc
parentffd22e81983056d09c064c59343a0e488236272d (diff)
downloadnode-new-f7f6c928c1c9c136b7926f892b8a2fda11d8b4b2.tar.gz
deps: update V8 to 7.8.279.9
PR-URL: https://github.com/nodejs/node/pull/29694 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com>
Diffstat (limited to 'deps/v8/src/builtins/arm64/builtins-arm64.cc')
-rw-r--r--deps/v8/src/builtins/arm64/builtins-arm64.cc53
1 files changed, 47 insertions, 6 deletions
diff --git a/deps/v8/src/builtins/arm64/builtins-arm64.cc b/deps/v8/src/builtins/arm64/builtins-arm64.cc
index bcee8f0b5d..4e159a69b7 100644
--- a/deps/v8/src/builtins/arm64/builtins-arm64.cc
+++ b/deps/v8/src/builtins/arm64/builtins-arm64.cc
@@ -24,6 +24,10 @@
#include "src/runtime/runtime.h"
#include "src/wasm/wasm-objects.h"
+#if defined(V8_OS_WIN)
+#include "src/diagnostics/unwinding-info-win64.h"
+#endif // V8_OS_WIN
+
namespace v8 {
namespace internal {
@@ -85,6 +89,17 @@ static void GenerateTailCallToReturnedCode(MacroAssembler* masm,
namespace {
+void LoadRealStackLimit(MacroAssembler* masm, Register destination) {
+ DCHECK(masm->root_array_available());
+ Isolate* isolate = masm->isolate();
+ ExternalReference limit = ExternalReference::address_of_real_jslimit(isolate);
+ DCHECK(TurboAssembler::IsAddressableThroughRootRegister(isolate, limit));
+
+ intptr_t offset =
+ TurboAssembler::RootRegisterOffsetForExternalReference(isolate, limit);
+ __ Ldr(destination, MemOperand(kRootRegister, offset));
+}
+
void Generate_StackOverflowCheck(MacroAssembler* masm, Register num_args,
Label* stack_overflow) {
UseScratchRegisterScope temps(masm);
@@ -94,7 +109,7 @@ void Generate_StackOverflowCheck(MacroAssembler* masm, Register num_args,
// We are not trying to catch interruptions (e.g. debug break and
// preemption) here, so the "real stack limit" is checked.
- __ LoadRoot(scratch, RootIndex::kRealStackLimit);
+ LoadRealStackLimit(masm, scratch);
// Make scratch the space we have left. The stack might already be overflowed
// here which will cause scratch to become negative.
__ Sub(scratch, sp, scratch);
@@ -476,7 +491,8 @@ void Builtins::Generate_ResumeGeneratorTrampoline(MacroAssembler* masm) {
// Check the stack for overflow. We are not trying to catch interruptions
// (i.e. debug break and preemption) here, so check the "real stack limit".
Label stack_overflow;
- __ CompareRoot(sp, RootIndex::kRealStackLimit);
+ LoadRealStackLimit(masm, x10);
+ __ Cmp(sp, x10);
__ B(lo, &stack_overflow);
// Get number of arguments for generator function.
@@ -623,6 +639,23 @@ void Generate_JSEntryVariant(MacroAssembler* masm, StackFrame::Type type,
// will have no effect on the model or real hardware.
__ EnableInstrumentation();
+#if defined(V8_OS_WIN)
+ // Windows ARM64 relies on a frame pointer (fp/x29 which are aliases to each
+ // other) chain to do stack unwinding, but JSEntry breaks that by setting fp
+ // to point to bad_frame_pointer below. To fix unwind information for this
+ // case, JSEntry registers the offset (from current fp to the caller's fp
+ // saved by PushCalleeSavedRegisters on stack) to xdata_encoder which then
+ // emits the offset value as part of result unwind data accordingly. The
+ // current offset is kFramePointerOffset which includes bad_frame_pointer
+ // saved below plus kFramePointerOffsetInPushCalleeSavedRegisters.
+ const int kFramePointerOffset =
+ kFramePointerOffsetInPushCalleeSavedRegisters + kSystemPointerSize;
+ win64_unwindinfo::XdataEncoder* xdata_encoder = masm->GetXdataEncoder();
+ if (xdata_encoder) {
+ xdata_encoder->onFramePointerAdjustment(kFramePointerOffset);
+ }
+#endif
+
__ PushCalleeSavedRegisters();
// Set up the reserved register for 0.0.
@@ -1223,7 +1256,12 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
// Do a stack check to ensure we don't go over the limit.
Label ok;
__ Sub(x10, sp, Operand(x11));
- __ CompareRoot(x10, RootIndex::kRealStackLimit);
+ {
+ UseScratchRegisterScope temps(masm);
+ Register scratch = temps.AcquireX();
+ LoadRealStackLimit(masm, scratch);
+ __ Cmp(x10, scratch);
+ }
__ B(hs, &ok);
__ CallRuntime(Runtime::kThrowStackOverflow);
__ Bind(&ok);
@@ -2469,7 +2507,7 @@ void Generate_PushBoundArguments(MacroAssembler* masm) {
// (i.e. debug break and preemption) here, so check the "real stack
// limit".
Label done;
- __ LoadRoot(x10, RootIndex::kRealStackLimit);
+ LoadRealStackLimit(masm, x10);
// Make x10 the space we have left. The stack might already be overflowed
// here which will cause x10 to become negative.
__ Sub(x10, sp, x10);
@@ -3031,9 +3069,12 @@ void Builtins::Generate_WasmCompileLazy(MacroAssembler* masm) {
// function.
__ Push(kWasmInstanceRegister, kWasmCompileLazyFuncIndexRegister);
// Load the correct CEntry builtin from the instance object.
+ __ Ldr(x2, FieldMemOperand(kWasmInstanceRegister,
+ WasmInstanceObject::kIsolateRootOffset));
+ auto centry_id =
+ Builtins::kCEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit;
__ LoadTaggedPointerField(
- x2, FieldMemOperand(kWasmInstanceRegister,
- WasmInstanceObject::kCEntryStubOffset));
+ x2, MemOperand(x2, IsolateData::builtin_slot_offset(centry_id)));
// Initialize the JavaScript context with 0. CEntry will use it to
// set the current context on the isolate.
__ Mov(cp, Smi::zero());