Index: src/compiler/wasm-compiler.cc |
diff --git a/src/compiler/wasm-compiler.cc b/src/compiler/wasm-compiler.cc |
index 45929b34dd846782097b260561047314ebde42df..40f3ef9e7903a88fed91c2dd3c1f1804c06494f2 100644 |
--- a/src/compiler/wasm-compiler.cc |
+++ b/src/compiler/wasm-compiler.cc |
@@ -3009,7 +3009,9 @@ Node* WasmGraphBuilder::StoreMem(MachineType memtype, Node* index, |
Node* store; |
// WASM semantics throw on OOB. Introduce explicit bounds check. |
- BoundsCheckMem(memtype, index, offset, position); |
+ if (!FLAG_wasm_trap_handler) { |
bradnelson
2016/11/22 02:02:36
The fuzzers are going to throw up a lot of issues
titzer
2016/11/22 10:33:20
I think we should (eventually) implement Protected
Eric Holk
2016/11/22 23:16:25
I actually added something similar in the guard pa
|
+ BoundsCheckMem(memtype, index, offset, position); |
+ } |
StoreRepresentation rep(memtype.representation(), kNoWriteBarrier); |
bool aligned = static_cast<int>(alignment) >= |
@@ -3021,11 +3023,21 @@ Node* WasmGraphBuilder::StoreMem(MachineType memtype, Node* index, |
if (aligned || |
jsgraph()->machine()->UnalignedStoreSupported(memtype, alignment)) { |
- StoreRepresentation rep(memtype.representation(), kNoWriteBarrier); |
- store = |
- graph()->NewNode(jsgraph()->machine()->Store(rep), MemBuffer(offset), |
- index, val, *effect_, *control_); |
+ if (FLAG_wasm_trap_handler) { |
+ Node* context = HeapConstant(module_->instance->context); |
+ Node* position_node = jsgraph()->Int32Constant(position); |
+ store = graph()->NewNode( |
+ jsgraph()->machine()->ProtectedStore(memtype.representation()), |
+ MemBuffer(offset), index, val, context, position_node, *effect_, |
+ *control_); |
+ } else { |
+ StoreRepresentation rep(memtype.representation(), kNoWriteBarrier); |
+ store = |
+ graph()->NewNode(jsgraph()->machine()->Store(rep), MemBuffer(offset), |
+ index, val, *effect_, *control_); |
+ } |
} else { |
+ DCHECK(!FLAG_wasm_trap_handler); |
bradnelson
2016/11/22 02:02:36
A TODO to support this?
Eric Holk
2016/11/22 23:16:25
Done, and for ProtectedLoad.
|
UnalignedStoreRepresentation rep(memtype.representation()); |
store = |
graph()->NewNode(jsgraph()->machine()->UnalignedStore(rep), |