df8548cd5b
On Windows, expanding the stack by more than 4 KB at a time can cause access violations. This change fixes a few known cases (and includes unit tests for those), and attempts to make stack expansion more consistent overall by using the AllocateStackSpace helper method everywhere we can, even when the offset is a small constant. On arm64, there was already a consistent method for stack pointer manipulation using the Claim and Drop methods, so Claim is updated to touch every page. Bug: v8:9017 Change-Id: I2dbbceeebbdefaf45803e9b621fe83f52234a395 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1570666 Commit-Queue: Seth Brenith <seth.brenith@microsoft.com> Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> Reviewed-by: Clemens Hammacher <clemensh@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#61186}
16 lines
605 B
JavaScript
16 lines
605 B
JavaScript
// Copyright 2019 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Call a recursive function that uses large numbers of bound arguments. If we
|
|
// are failing to touch consecutive guard pages on Windows when extending the
|
|
// stack for bound arguments, then this would crash.
|
|
|
|
const frameSize = 4096 * 5;
|
|
const numValues = frameSize / 4;
|
|
const arr = new Array(numValues);
|
|
let counter = 10;
|
|
function f() { --counter; return 1 + (counter > 0 ? bound() : 0); }
|
|
const bound = f.bind.apply(f, arr);
|
|
bound();
|