mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
Merge remote-tracking branch 'origin/GP-2568_PtrsubZeroResolve'
(Closes #4508)
This commit is contained in:
commit
947de197d2
5 changed files with 26 additions and 38 deletions
|
@ -909,39 +909,22 @@ void Funcdata::forceFacingType(Datatype *parent,int4 fieldNum,PcodeOp *op,int4 s
|
|||
setUnionField(parent, op, slot, resolve);
|
||||
}
|
||||
|
||||
/// \brief Copy a Varnode's read facing resolve to another PcodeOp
|
||||
///
|
||||
/// \param op is the new PcodeOp reading the Varnode
|
||||
/// \param slot is the new read slot
|
||||
/// \param oldOp is the PcodeOp to inherit the resolve from
|
||||
/// \param oldSlot is the old read slot
|
||||
void Funcdata::inheritReadResolution(const PcodeOp *op,int4 slot,PcodeOp *oldOp,int4 oldSlot)
|
||||
|
||||
{
|
||||
Datatype *ct = op->getIn(slot)->getType();
|
||||
if (!ct->needsResolution()) return;
|
||||
map<ResolveEdge,ResolvedUnion>::const_iterator iter;
|
||||
ResolveEdge edge(ct,oldOp,oldSlot);
|
||||
iter = unionMap.find(edge);
|
||||
if (iter == unionMap.end()) return;
|
||||
setUnionField(ct,op,slot,(*iter).second);
|
||||
}
|
||||
|
||||
/// \brief Copy any write facing for a specific data-type from one PcodeOp to another
|
||||
/// \brief Copy a read/write facing resolution for a specific data-type from one PcodeOp to another
|
||||
///
|
||||
/// \param parent is the data-type that needs resolution
|
||||
/// \param op is the destination PcodeOp
|
||||
/// \param oldOp is the source PcodeOp
|
||||
/// \return the resolution index that was copied or -1 if there was no resolution
|
||||
int4 Funcdata::inheritWriteResolution(Datatype *parent,const PcodeOp *op,PcodeOp *oldOp)
|
||||
/// \param op is the new reading PcodeOp
|
||||
/// \param slot is the new slot (-1 for write, >=0 for read)
|
||||
/// \param oldOp is the PcodeOp to inherit the resolution from
|
||||
/// \param oldSlot is the old slot (-1 for write, >=0 for read)
|
||||
int4 Funcdata::inheritResolution(Datatype *parent,const PcodeOp *op,int4 slot,PcodeOp *oldOp,int4 oldSlot)
|
||||
|
||||
{
|
||||
map<ResolveEdge,ResolvedUnion>::const_iterator iter;
|
||||
ResolveEdge edge(parent,oldOp,-1);
|
||||
ResolveEdge edge(parent,oldOp,oldSlot);
|
||||
iter = unionMap.find(edge);
|
||||
if (iter == unionMap.end())
|
||||
return -1;
|
||||
setUnionField(parent,op,-1,(*iter).second);
|
||||
setUnionField(parent,op,slot,(*iter).second);
|
||||
return (*iter).second.getFieldNum();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue