GP-6538 Don't assume slot == 1 in for RETURN

This commit is contained in:
caheckman
2026-03-05 18:55:32 +00:00
parent 2d416f1071
commit 741b69d909
@@ -336,16 +336,15 @@ void ConditionalExecution::doReplacement(PcodeOp *op)
if (readop->code() == CPUI_MULTIEQUAL) {
rvn = getMultiequalRead(op, readop, slot);
}
else if (readop->code() == CPUI_RETURN) { // Cannot replace input of RETURN directly, create COPY to hold input
Varnode *retvn = readop->getIn(1);
else if (readop->code() == CPUI_RETURN && slot > 0) { // Cannot replace input of RETURN directly, create COPY to hold input
PcodeOp *newcopyop = fd->newOp(1,readop->getAddr());
fd->opSetOpcode(newcopyop,CPUI_COPY);
Varnode *outvn = fd->newVarnodeOut(retvn->getSize(),retvn->getAddr(),newcopyop); // Preserve the CPUI_RETURN storage address
fd->opSetInput(readop,outvn,1);
Varnode *outvn = fd->newVarnodeOut(vn->getSize(),vn->getAddr(),newcopyop); // Preserve the Varnode's storage address
fd->opSetInput(readop,outvn,slot);
fd->opInsertBefore(newcopyop,readop);
readop = newcopyop;
slot = 0;
rvn = getReplacementRead(op,bl);
rvn = getReplacementRead(op,bl); // COPY gets the replacement read
}
else
rvn = getReplacementRead(op,bl);