[wasm][arm] Emit MaybeCheckConstPool in the trap code generation

Without the check it happened that the builtin call in the trap code
was too far away from the constant pool and therefore crashed.

BUG=v8:6054
R=bmeurer@chromium.org, v8-arm-ports@googlegroups.com

Review-Url: https://codereview.chromium.org/2738683003
Cr-Commit-Position: refs/heads/master@{#43928}
This commit is contained in:
ahaas 2017-03-20 02:52:04 -07:00 committed by Commit bot
parent 086ec2bd8d
commit ab97fd76ef
2 changed files with 346 additions and 5 deletions

View File

@ -102,6 +102,8 @@ void MacroAssembler::Call(Address target,
RelocInfo::Mode rmode,
Condition cond,
TargetAddressStorageMode mode) {
// Check if we have to emit the constant pool before we block it.
MaybeCheckConstPool();
// Block constant pool for the call instruction sequence.
BlockConstPoolScope block_const_pool(this);
Label start;
@ -147,11 +149,8 @@ int MacroAssembler::CallSize(Handle<Code> code,
return CallSize(reinterpret_cast<Address>(code.location()), rmode, cond);
}
void MacroAssembler::Call(Handle<Code> code,
RelocInfo::Mode rmode,
TypeFeedbackId ast_id,
Condition cond,
void MacroAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode,
TypeFeedbackId ast_id, Condition cond,
TargetAddressStorageMode mode) {
Label start;
bind(&start);

View File

@ -0,0 +1,342 @@
// Copyright 2017 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.
load('test/mjsunit/wasm/wasm-constants.js');
load('test/mjsunit/wasm/wasm-module-builder.js');
(function() {
var builder = new WasmModuleBuilder();
builder.addMemory(16, 32, false);
builder.addFunction('test', kSig_i_i)
.addBodyWithEnd([
kExprI32Const, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprI32LoadMem8S, 0x00, 0x00,
kExprEnd, // @44
])
.exportFunc();
var module = builder.instantiate();
assertEquals(0, module.exports.test(1));
})();