Bug 1968209 - wasm: correctly handle OOMs related to BaseCompiler::patchHotnessCheck. a=RyanVM.
In BaseCompiler::emitEnd, for LabelKind::Loop, don't try to patch the loop-head hotness check if we are in an OOM state. Original Revision: https://phabricator.services.mozilla.com/D251467 Differential Revision: https://phabricator.services.mozilla.com/D252187
This commit is contained in:
committed by
rvandermeulen@mozilla.com
parent
43782ec4ba
commit
2b681a7411
@@ -1189,6 +1189,7 @@ void BaseCompiler::patchHotnessCheck(CodeOffset offset, uint32_t step) {
|
||||
// Zero makes the hotness check pointless. Above 127 is not representable in
|
||||
// the short-form Intel encoding.
|
||||
MOZ_RELEASE_ASSERT(step > 0 && step <= 127);
|
||||
MOZ_ASSERT(!masm.oom());
|
||||
masm.patchSub32FromMemAndBranchIfNegative(offset, Imm32(step));
|
||||
}
|
||||
|
||||
@@ -4186,6 +4187,11 @@ bool BaseCompiler::emitEnd() {
|
||||
size_t loopBytecodeSize =
|
||||
iter_.lastOpcodeOffset() - controlItem().loopBytecodeStart;
|
||||
uint32_t step = BlockSizeToDownwardsStep(loopBytecodeSize);
|
||||
// Don't try to patch the check if we've OOM'd, since the check might
|
||||
// not actually exist.
|
||||
if (masm.oom()) {
|
||||
return false;
|
||||
}
|
||||
patchHotnessCheck(controlItem().offsetOfCtrDec, step);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user