v8/test/mjsunit/regress/wasm/regress-1308333.js
Thibaud Michaud d36f596e8a [sim] Increase the simulator's stack limit margin
The current safety margin between the JS stack limit and the actual
boundary of the stack space reserved by the simulator can be overrun by
a large frame.
Raise this margin to 4KiB, corresponding to the "large frame" threshold.
This ensures that the stack check is executed before the frame is
allocated if the frame is larger than this margin.

R=clemensb@chromium.org

Bug: chromium:1308333
Change-Id: I3e1a51bb36c630c7e37e58679971392dada2a83e
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3560435
Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
Commit-Queue: Thibaud Michaud <thibaudm@chromium.org>
Cr-Commit-Position: refs/heads/main@{#79711}
2022-04-01 12:01:14 +00:00

261 lines
8.9 KiB
JavaScript

// Copyright 2022 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.
// Flags: --wasm-staging --experimental-wasm-gc
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
const builder = new WasmModuleBuilder();
builder.addType(makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32]));
builder.addMemory(16, 32, false);
// Generate function 1 (out of 1).
builder.addFunction(undefined, 0 /* sig */)
.addBodyWithEnd([
// signature: i_iii
// body:
kExprI32Const, 0xe2, 0x80, 0xae, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32And, // i32.and
kExprCallFunction, 0x00, // call function #0: i_iii
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32And, // i32.and
kExprCallFunction, 0x00, // call function #0: i_iii
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Xor, // i32.xor
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32And, // i32.and
kExprCallFunction, 0x00, // call function #0: i_iii
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32And, // i32.and
kExprCallFunction, 0x00, // call function #0: i_iii
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32And, // i32.and
kExprCallFunction, 0x00, // call function #0: i_iii
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32And, // i32.and
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32And, // i32.and
kExprCallFunction, 0x00, // call function #0: i_iii
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32And, // i32.and
kExprCallFunction, 0x00, // call function #0: i_iii
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x78, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x10, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32And, // i32.and
kExprCallFunction, 0x00, // call function #0: i_iii
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x7c, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprI32Const, 0x73, // i32.const
kExprUnreachable, // unreachable
kExprEnd // end @353
]).exportAs("main");
let instance = builder.instantiate();
assertThrows(() => instance.exports.main(1, 2, 3));