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_) {
|
if (frame_elided_) {
|
||||||
__ set_has_frame(old_has_frame);
|
__ set_has_frame(old_has_frame);
|
||||||
}
|
}
|
||||||
if (FLAG_debug_code) {
|
|
||||||
__ stop(GetBailoutReason(kUnexpectedReturnFromWasmTrap));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -2054,15 +2051,20 @@ void CodeGenerator::AssembleArchTrap(Instruction* instr,
|
|||||||
__ CallCFunction(
|
__ CallCFunction(
|
||||||
ExternalReference::wasm_call_trap_callback_for_testing(isolate()),
|
ExternalReference::wasm_call_trap_callback_for_testing(isolate()),
|
||||||
0);
|
0);
|
||||||
|
__ LeaveFrame(StackFrame::WASM_COMPILED);
|
||||||
|
__ Ret();
|
||||||
} else {
|
} else {
|
||||||
__ Move(cp, Smi::kZero);
|
__ Move(cp, Smi::kZero);
|
||||||
gen_->AssembleSourcePosition(instr_);
|
gen_->AssembleSourcePosition(instr_);
|
||||||
__ CallRuntime(trap_id);
|
__ 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_;
|
bool frame_elided_;
|
||||||
|
@ -2281,9 +2281,6 @@ void CodeGenerator::AssembleArchTrap(Instruction* instr,
|
|||||||
if (frame_elided_) {
|
if (frame_elided_) {
|
||||||
__ set_has_frame(old_has_frame);
|
__ set_has_frame(old_has_frame);
|
||||||
}
|
}
|
||||||
if (FLAG_debug_code) {
|
|
||||||
__ stop(GetBailoutReason(kUnexpectedReturnFromWasmTrap));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -2297,15 +2294,20 @@ void CodeGenerator::AssembleArchTrap(Instruction* instr,
|
|||||||
__ CallCFunction(
|
__ CallCFunction(
|
||||||
ExternalReference::wasm_call_trap_callback_for_testing(isolate()),
|
ExternalReference::wasm_call_trap_callback_for_testing(isolate()),
|
||||||
0);
|
0);
|
||||||
|
__ LeaveFrame(StackFrame::WASM_COMPILED);
|
||||||
|
__ Ret();
|
||||||
} else {
|
} else {
|
||||||
__ Move(cp, Smi::kZero);
|
__ Move(cp, Smi::kZero);
|
||||||
gen_->AssembleSourcePosition(instr_);
|
gen_->AssembleSourcePosition(instr_);
|
||||||
__ CallRuntime(trap_id);
|
__ 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_;
|
bool frame_elided_;
|
||||||
|
Loading…
Reference in New Issue
Block a user