mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 02:09:44 +02:00
Allow splitting of free varnodes
This commit is contained in:
parent
ce0ab31576
commit
babc6d4d9b
2 changed files with 12 additions and 6 deletions
|
@ -523,6 +523,9 @@ bool Funcdata::fillinReadOnly(Varnode *vn)
|
||||||
return false; // No change was made
|
return false; // No change was made
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vn->getSize() > sizeof(uintb))
|
||||||
|
return false; // Constant will exceed precision
|
||||||
|
|
||||||
uintb res;
|
uintb res;
|
||||||
uint1 bytes[32];
|
uint1 bytes[32];
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1937,18 +1937,21 @@ TransformVar *LaneDivide::setReplacement(Varnode *vn,int4 numLanes,int4 skipLane
|
||||||
return newSplit(vn,description, numLanes, skipLanes);
|
return newSplit(vn,description, numLanes, skipLanes);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vn->isFree())
|
// Allow free varnodes to be split
|
||||||
return (TransformVar *)0; // Abort
|
// if (vn->isFree())
|
||||||
|
// return (TransformVar *)0;
|
||||||
|
|
||||||
if (vn->isTypeLock())
|
if (vn->isTypeLock())
|
||||||
return (TransformVar *)0;
|
return (TransformVar *)0;
|
||||||
|
|
||||||
vn->setMark();
|
vn->setMark();
|
||||||
TransformVar *res = newSplit(vn, description, numLanes, skipLanes);
|
TransformVar *res = newSplit(vn, description, numLanes, skipLanes);
|
||||||
|
if (!vn->isFree()) {
|
||||||
workList.push_back(WorkNode());
|
workList.push_back(WorkNode());
|
||||||
workList.back().lanes = res;
|
workList.back().lanes = res;
|
||||||
workList.back().numLanes = numLanes;
|
workList.back().numLanes = numLanes;
|
||||||
workList.back().skipLanes = skipLanes;
|
workList.back().skipLanes = skipLanes;
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue