mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-21 14:47:31 +09:00
Add rematerialized frames to the table on JitActivation after rematerialization succeeds.
This commit is contained in:
parent
fbab5890eb
commit
c9717cf3d1
2 changed files with 71 additions and 8 deletions
65
js/src/jit-test/tests/debug/bug1353356.js
Normal file
65
js/src/jit-test/tests/debug/bug1353356.js
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
// |jit-test| allow-oom; --fuzzing-safe
|
||||||
|
|
||||||
|
var lfLogBuffer = `
|
||||||
|
//corefuzz-dcd-endofdata
|
||||||
|
//corefuzz-dcd-endofdata
|
||||||
|
//corefuzz-dcd-endofdata
|
||||||
|
setJitCompilerOption("ion.warmup.trigger", 4);
|
||||||
|
var g = newGlobal();
|
||||||
|
g.debuggeeGlobal = this;
|
||||||
|
g.eval("(" + function () {
|
||||||
|
dbg = new Debugger(debuggeeGlobal);
|
||||||
|
dbg.onExceptionUnwind = function (frame, exc) {
|
||||||
|
var s = '!';
|
||||||
|
for (var f = frame; f; f = f.older)
|
||||||
|
debuggeeGlobal.log += s;
|
||||||
|
};
|
||||||
|
} + ")();");
|
||||||
|
j('Number.prototype.toSource.call([])');
|
||||||
|
//corefuzz-dcd-endofdata
|
||||||
|
//corefuzz-dcd-endofdata
|
||||||
|
//corefuzz-dcd-endofdata
|
||||||
|
//corefuzz-dcd-selectmode 4
|
||||||
|
//corefuzz-dcd-endofdata
|
||||||
|
}
|
||||||
|
//corefuzz-dcd-endofdata
|
||||||
|
//corefuzz-dcd-selectmode 5
|
||||||
|
//corefuzz-dcd-endofdata
|
||||||
|
oomTest(() => i({
|
||||||
|
new : (true ),
|
||||||
|
thisprops: true
|
||||||
|
}));
|
||||||
|
`;
|
||||||
|
lfLogBuffer = lfLogBuffer.split('\n');
|
||||||
|
var lfRunTypeId = -1;
|
||||||
|
var lfCodeBuffer = "";
|
||||||
|
while (true) {
|
||||||
|
var line = lfLogBuffer.shift();
|
||||||
|
if (line == null) {
|
||||||
|
break;
|
||||||
|
} else if (line == "//corefuzz-dcd-endofdata") {
|
||||||
|
loadFile(lfCodeBuffer);
|
||||||
|
lfCodeBuffer = "";
|
||||||
|
loadFile(line);
|
||||||
|
} else {
|
||||||
|
lfCodeBuffer += line + "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lfCodeBuffer) loadFile(lfCodeBuffer);
|
||||||
|
function loadFile(lfVarx) {
|
||||||
|
try {
|
||||||
|
if (lfVarx.indexOf("//corefuzz-dcd-selectmode ") === 0) {
|
||||||
|
lfRunTypeId = parseInt(lfVarx.split(" ")[1]) % 6;
|
||||||
|
} else {
|
||||||
|
switch (lfRunTypeId) {
|
||||||
|
case 4:
|
||||||
|
oomTest(function() {
|
||||||
|
let m = parseModule(lfVarx);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
evaluate(lfVarx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (lfVare) {}
|
||||||
|
}
|
||||||
|
|
@ -1517,11 +1517,7 @@ jit::JitActivation::getRematerializedFrame(JSContext* cx, const JitFrameIterator
|
||||||
uint8_t* top = iter.fp();
|
uint8_t* top = iter.fp();
|
||||||
RematerializedFrameTable::AddPtr p = rematerializedFrames_->lookupForAdd(top);
|
RematerializedFrameTable::AddPtr p = rematerializedFrames_->lookupForAdd(top);
|
||||||
if (!p) {
|
if (!p) {
|
||||||
RematerializedFrameVector empty(cx);
|
RematerializedFrameVector frames(cx);
|
||||||
if (!rematerializedFrames_->add(p, top, Move(empty))) {
|
|
||||||
ReportOutOfMemory(cx);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The unit of rematerialization is an uninlined frame and its inlined
|
// The unit of rematerialization is an uninlined frame and its inlined
|
||||||
// frames. Since inlined frames do not exist outside of snapshots, it
|
// frames. Since inlined frames do not exist outside of snapshots, it
|
||||||
|
|
@ -1536,9 +1532,11 @@ jit::JitActivation::getRematerializedFrame(JSContext* cx, const JitFrameIterator
|
||||||
// be in the activation's compartment.
|
// be in the activation's compartment.
|
||||||
AutoCompartment ac(cx, compartment_);
|
AutoCompartment ac(cx, compartment_);
|
||||||
|
|
||||||
if (!RematerializedFrame::RematerializeInlineFrames(cx, top, inlineIter, recover,
|
if (!RematerializedFrame::RematerializeInlineFrames(cx, top, inlineIter, recover, frames))
|
||||||
p->value()))
|
return nullptr;
|
||||||
{
|
|
||||||
|
if (!rematerializedFrames_->add(p, top, Move(frames))) {
|
||||||
|
ReportOutOfMemory(cx);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue