mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 02:39:44 +02:00
stress testing fixes
This commit is contained in:
parent
e738f515d0
commit
518522adc8
1 changed files with 3 additions and 13 deletions
|
@ -1686,9 +1686,6 @@ TransformVar *SubfloatFlow::setReplacement(Varnode *vn)
|
||||||
bool SubfloatFlow::traceForward(TransformVar *rvn)
|
bool SubfloatFlow::traceForward(TransformVar *rvn)
|
||||||
|
|
||||||
{
|
{
|
||||||
int4 dcount = 0;
|
|
||||||
int4 hcount = 0;
|
|
||||||
|
|
||||||
list<PcodeOp *>::const_iterator iter,enditer;
|
list<PcodeOp *>::const_iterator iter,enditer;
|
||||||
Varnode *vn = rvn->getOriginal();
|
Varnode *vn = rvn->getOriginal();
|
||||||
iter = vn->beginDescend();
|
iter = vn->beginDescend();
|
||||||
|
@ -1698,7 +1695,6 @@ bool SubfloatFlow::traceForward(TransformVar *rvn)
|
||||||
Varnode *outvn = op->getOut();
|
Varnode *outvn = op->getOut();
|
||||||
if ((outvn!=(Varnode *)0)&&(outvn->isMark()))
|
if ((outvn!=(Varnode *)0)&&(outvn->isMark()))
|
||||||
continue;
|
continue;
|
||||||
dcount += 1; // Count this descendant
|
|
||||||
int4 slot = op->getSlot(vn);
|
int4 slot = op->getSlot(vn);
|
||||||
switch(op->code()) {
|
switch(op->code()) {
|
||||||
case CPUI_COPY:
|
case CPUI_COPY:
|
||||||
|
@ -1719,7 +1715,6 @@ bool SubfloatFlow::traceForward(TransformVar *rvn)
|
||||||
if (outrvn == (TransformVar *)0) return false;
|
if (outrvn == (TransformVar *)0) return false;
|
||||||
opSetInput(rop,rvn,slot);
|
opSetInput(rop,rvn,slot);
|
||||||
opSetOutput(rop,outrvn);
|
opSetOutput(rop,outrvn);
|
||||||
hcount += 1; // Dealt with this descendant
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CPUI_FLOAT_FLOAT2FLOAT:
|
case CPUI_FLOAT_FLOAT2FLOAT:
|
||||||
|
@ -1728,7 +1723,6 @@ bool SubfloatFlow::traceForward(TransformVar *rvn)
|
||||||
return false;
|
return false;
|
||||||
TransformOp *rop = newPreexistingOp(1, (outvn->getSize() == precision) ? CPUI_COPY : CPUI_FLOAT_FLOAT2FLOAT, op);
|
TransformOp *rop = newPreexistingOp(1, (outvn->getSize() == precision) ? CPUI_COPY : CPUI_FLOAT_FLOAT2FLOAT, op);
|
||||||
opSetInput(rop,rvn,0);
|
opSetInput(rop,rvn,0);
|
||||||
hcount += 1; // Dealt with this descendant
|
|
||||||
terminatorCount += 1;
|
terminatorCount += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1748,7 +1742,6 @@ bool SubfloatFlow::traceForward(TransformVar *rvn)
|
||||||
opSetInput(rop,rvn2,0);
|
opSetInput(rop,rvn2,0);
|
||||||
opSetInput(rop,rvn,1);
|
opSetInput(rop,rvn,1);
|
||||||
}
|
}
|
||||||
hcount += 1; // Dealt with this descendant
|
|
||||||
terminatorCount += 1;
|
terminatorCount += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1757,7 +1750,6 @@ bool SubfloatFlow::traceForward(TransformVar *rvn)
|
||||||
{
|
{
|
||||||
TransformOp *rop = newPreexistingOp(1,op->code(), op);
|
TransformOp *rop = newPreexistingOp(1,op->code(), op);
|
||||||
opSetInput(rop,rvn,0);
|
opSetInput(rop,rvn,0);
|
||||||
hcount += 1;
|
|
||||||
terminatorCount += 1;
|
terminatorCount += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1765,10 +1757,6 @@ bool SubfloatFlow::traceForward(TransformVar *rvn)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dcount != hcount) {
|
|
||||||
// Must account for all descendants of an input
|
|
||||||
if (vn->isInput()) return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1810,6 +1798,7 @@ bool SubfloatFlow::traceBackward(TransformVar *rvn)
|
||||||
newvar = setReplacement(op->getIn(i));
|
newvar = setReplacement(op->getIn(i));
|
||||||
if (newvar == (TransformVar *)0)
|
if (newvar == (TransformVar *)0)
|
||||||
return false;
|
return false;
|
||||||
|
opSetInput(rop,newvar,i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -1903,6 +1892,7 @@ bool SubfloatFlow::doTrace(void)
|
||||||
{
|
{
|
||||||
if (format == (const FloatFormat *)0)
|
if (format == (const FloatFormat *)0)
|
||||||
return false;
|
return false;
|
||||||
|
terminatorCount = 0; // Have seen no terminators
|
||||||
bool retval = true;
|
bool retval = true;
|
||||||
while(!worklist.empty()) {
|
while(!worklist.empty()) {
|
||||||
if (!processNextWork()) {
|
if (!processNextWork()) {
|
||||||
|
@ -1914,6 +1904,6 @@ bool SubfloatFlow::doTrace(void)
|
||||||
clearVarnodeMarks();
|
clearVarnodeMarks();
|
||||||
|
|
||||||
if (!retval) return false;
|
if (!retval) return false;
|
||||||
if (terminatorCount == 0) return false;
|
if (terminatorCount == 0) return false; // Must see at least 1 terminator
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue