PPC/s390: [wasm] Do not use setjmp/longjmp in cctests.
Port 79570f87a1
Original Commit Message:
The use of setjmp/longjmp makes the cctests in test-run-wasm and
test-run-wasm-64 flaky on Windows, and I think that it is better not
to use it. With this CL I replace it as follows:
Similar to the setjmp/longjmp implementation we still call a C
function when a trap happens. However, instead of calling longjmp in
this C function we just set a flag which indicates that a trap
happened and then return. After we return from the C function we leave
the frame of the current wasm function and return with a RET
instruction. At the end of a test the wasm test runner checks the flag
to see if a trap happened.
Please take a special look at the LeaveFrame function on arm64.
R=ahaas@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=
LOG=N
Review-Url: https://codereview.chromium.org/2685303003
Cr-Commit-Position: refs/heads/master@{#43110}
This commit is contained in:
parent
218e3ed09f
commit
13042c9a19
@ -2038,9 +2038,6 @@ void CodeGenerator::AssembleArchTrap(Instruction* instr,
|
||||
if (frame_elided_) {
|
||||
__ set_has_frame(old_has_frame);
|
||||
}
|
||||
if (FLAG_debug_code) {
|
||||
__ stop(GetBailoutReason(kUnexpectedReturnFromWasmTrap));
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
@ -2054,15 +2051,20 @@ void CodeGenerator::AssembleArchTrap(Instruction* instr,
|
||||
__ CallCFunction(
|
||||
ExternalReference::wasm_call_trap_callback_for_testing(isolate()),
|
||||
0);
|
||||
__ LeaveFrame(StackFrame::WASM_COMPILED);
|
||||
__ Ret();
|
||||
} else {
|
||||
__ Move(cp, Smi::kZero);
|
||||
gen_->AssembleSourcePosition(instr_);
|
||||
__ CallRuntime(trap_id);
|
||||
ReferenceMap* reference_map =
|
||||
new (gen_->zone()) ReferenceMap(gen_->zone());
|
||||
gen_->RecordSafepoint(reference_map, Safepoint::kSimple, 0,
|
||||
Safepoint::kNoLazyDeopt);
|
||||
if (FLAG_debug_code) {
|
||||
__ stop(GetBailoutReason(kUnexpectedReturnFromWasmTrap));
|
||||
}
|
||||
}
|
||||
ReferenceMap* reference_map =
|
||||
new (gen_->zone()) ReferenceMap(gen_->zone());
|
||||
gen_->RecordSafepoint(reference_map, Safepoint::kSimple, 0,
|
||||
Safepoint::kNoLazyDeopt);
|
||||
}
|
||||
|
||||
bool frame_elided_;
|
||||
|
@ -2281,9 +2281,6 @@ void CodeGenerator::AssembleArchTrap(Instruction* instr,
|
||||
if (frame_elided_) {
|
||||
__ set_has_frame(old_has_frame);
|
||||
}
|
||||
if (FLAG_debug_code) {
|
||||
__ stop(GetBailoutReason(kUnexpectedReturnFromWasmTrap));
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
@ -2297,15 +2294,20 @@ void CodeGenerator::AssembleArchTrap(Instruction* instr,
|
||||
__ CallCFunction(
|
||||
ExternalReference::wasm_call_trap_callback_for_testing(isolate()),
|
||||
0);
|
||||
__ LeaveFrame(StackFrame::WASM_COMPILED);
|
||||
__ Ret();
|
||||
} else {
|
||||
__ Move(cp, Smi::kZero);
|
||||
gen_->AssembleSourcePosition(instr_);
|
||||
__ CallRuntime(trap_id);
|
||||
ReferenceMap* reference_map =
|
||||
new (gen_->zone()) ReferenceMap(gen_->zone());
|
||||
gen_->RecordSafepoint(reference_map, Safepoint::kSimple, 0,
|
||||
Safepoint::kNoLazyDeopt);
|
||||
if (FLAG_debug_code) {
|
||||
__ stop(GetBailoutReason(kUnexpectedReturnFromWasmTrap));
|
||||
}
|
||||
}
|
||||
ReferenceMap* reference_map =
|
||||
new (gen_->zone()) ReferenceMap(gen_->zone());
|
||||
gen_->RecordSafepoint(reference_map, Safepoint::kSimple, 0,
|
||||
Safepoint::kNoLazyDeopt);
|
||||
}
|
||||
|
||||
bool frame_elided_;
|
||||
|
Loading…
Reference in New Issue
Block a user