mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-05 23:38:38 +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();
|
||||
RematerializedFrameTable::AddPtr p = rematerializedFrames_->lookupForAdd(top);
|
||||
if (!p) {
|
||||
RematerializedFrameVector empty(cx);
|
||||
if (!rematerializedFrames_->add(p, top, Move(empty))) {
|
||||
ReportOutOfMemory(cx);
|
||||
return nullptr;
|
||||
}
|
||||
RematerializedFrameVector frames(cx);
|
||||
|
||||
// The unit of rematerialization is an uninlined frame and its inlined
|
||||
// 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.
|
||||
AutoCompartment ac(cx, compartment_);
|
||||
|
||||
if (!RematerializedFrame::RematerializeInlineFrames(cx, top, inlineIter, recover,
|
||||
p->value()))
|
||||
{
|
||||
if (!RematerializedFrame::RematerializeInlineFrames(cx, top, inlineIter, recover, frames))
|
||||
return nullptr;
|
||||
|
||||
if (!rematerializedFrames_->add(p, top, Move(frames))) {
|
||||
ReportOutOfMemory(cx);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue