Ghidra 11.3.2
Ghidra internal decompiler documentation.
|
Consume multiple registers to pass a data-type. More...
#include <modelrules.hh>
Public Member Functions | |
MultiSlotAssign (const ParamListStandard *res) | |
Constructor for use with decode. | |
MultiSlotAssign (type_class store, bool stack, bool mostSig, bool align, bool justRight, const ParamListStandard *res) | |
Constructor. | |
virtual AssignAction * | clone (const ParamListStandard *newResource) const |
Make a copy of this action. | |
virtual uint4 | assignAddress (Datatype *dt, const PrototypePieces &proto, int4 pos, TypeFactory &tlist, vector< int4 > &status, ParameterPieces &res) const |
Assign an address and other meta-data for a specific parameter or for return storage in context. | |
virtual bool | fillinOutputMap (ParamActive *active) const |
Test if this action could produce return value storage matching the given set of trials. | |
virtual void | decode (Decoder &decoder) |
Configure any details of how this action should behave from the stream. | |
![]() | |
AssignAction (const ParamListStandard *res) | |
Constructor. | |
bool | canAffectFillinOutput (void) const |
Return true if fillinOutputMap is active. | |
Private Member Functions | |
void | initializeEntries (void) |
Cache specific ParamEntry needed by the action. | |
Private Attributes | |
type_class | resourceType |
Resource list from which to consume. | |
bool | consumeFromStack |
True if resources should be consumed from the stack. | |
bool | consumeMostSig |
True if resources are consumed starting with most significant bytes. | |
bool | enforceAlignment |
True if register resources are discarded to match alignment. | |
bool | justifyRight |
True if initial bytes are padding for odd data-type sizes. | |
const ParamEntry * | stackEntry |
The stack resource. | |
list< ParamEntry >::const_iterator | firstIter |
Iterator to first element in the resource list. | |
Additional Inherited Members | |
![]() | |
enum | { success , fail , no_assignment , hiddenret_ptrparam , hiddenret_specialreg , hiddenret_specialreg_void } |
![]() | |
static AssignAction * | decodeAction (Decoder &decoder, const ParamListStandard *res) |
Read the next model rule action element from the stream. | |
static AssignAction * | decodeSideeffect (Decoder &decoder, const ParamListStandard *res) |
Read the next model rule sideeffect element from the stream. | |
![]() | |
const ParamListStandard * | resource |
Resources to which this action applies. | |
bool | fillinOutputActive |
If true, fillinOutputMap is active. | |
Consume multiple registers to pass a data-type.
Available registers are consumed until the data-type is covered, and an appropriate join space address is assigned. Registers can be consumed from a specific resource list. Consumption can spill over onto the stack if desired.
ghidra::MultiSlotAssign::MultiSlotAssign | ( | const ParamListStandard * | res | ) |
Constructor for use with decode.
Set default configuration
res | is the new resource set to associate with this action |
References consumeFromStack, consumeMostSig, enforceAlignment, ghidra::AssignAction::fillinOutputActive, ghidra::ParamListStandard::getSpacebase(), ghidra::ParamListStandard::getType(), ghidra::AddrSpace::isBigEndian(), justifyRight, ghidra::ParamList::p_register_out, ghidra::ParamList::p_standard_out, resourceType, stackEntry, and ghidra::TYPECLASS_GENERAL.
|
virtual |
Assign an address and other meta-data for a specific parameter or for return storage in context.
The Address is assigned based on the data-type of the parameter, available register resources, and other details of the function prototype. Consumed resources are marked. This method returns a response code:
dt | is the data-type of the parameter or return value |
proto | is the high-level description of the function prototype |
pos | is the position of the parameter (pos>=0) or return storage (pos=-1) |
tlist | is a data-type factory for (possibly) transforming the data-type |
status | is the resource consumption array |
res | will hold the resulting description of the parameter |
Implements ghidra::AssignAction.
References ghidra::ParameterPieces::addr, ghidra::AddrSpaceManager::constructFloatExtensionAddress(), consumeFromStack, consumeMostSig, enforceAlignment, ghidra::AssignAction::fail, ghidra::AddrSpaceManager::findAddJoin(), firstIter, ghidra::ParameterPieces::flags, ghidra::VarnodeData::getAddr(), ghidra::ParamEntry::getAddrBySlot(), ghidra::Datatype::getAlignment(), ghidra::ParamEntry::getAllGroups(), ghidra::TypeFactory::getArch(), ghidra::ParamListStandard::getEntry(), ghidra::ParamEntry::getGroup(), ghidra::Address::getOffset(), ghidra::ParamEntry::getSize(), ghidra::Datatype::getSize(), ghidra::Address::getSpace(), ghidra::ParamEntry::getType(), ghidra::JoinRecord::getUnified(), ghidra::ParamEntry::isExclusion(), ghidra::Address::isInvalid(), justifyRight, ghidra::VarnodeData::offset, ghidra::AssignAction::resource, resourceType, ghidra::VarnodeData::size, ghidra::VarnodeData::space, stackEntry, ghidra::AssignAction::success, ghidra::ParameterPieces::type, and ghidra::TYPECLASS_FLOAT.
|
inlinevirtual |
Make a copy of this action.
newResource | is the new resource object that will own the clone |
Implements ghidra::AssignAction.
References consumeFromStack, consumeMostSig, enforceAlignment, justifyRight, and resourceType.
|
virtual |
Configure any details of how this action should behave from the stream.
decoder | is the given stream decoder |
Implements ghidra::AssignAction.
References ghidra::Decoder::closeElement(), consumeFromStack, enforceAlignment, ghidra::Decoder::getNextAttributeId(), initializeEntries(), justifyRight, ghidra::Decoder::openElement(), ghidra::Decoder::readBool(), ghidra::Decoder::readString(), and resourceType.
|
virtual |
Test if this action could produce return value storage matching the given set of trials.
If there is a return value data-type that could be assigned storage matching the trials by this action, return true. The trials have their matching ParamEntry and offset already set and are already sorted.
active | is the given set of trials |
Reimplemented from ghidra::AssignAction.
References consumeMostSig, ghidra::ParamTrial::getEntry(), ghidra::ParamEntry::getGroup(), ghidra::ParamActive::getNumTrials(), ghidra::ParamTrial::getOffset(), ghidra::ParamEntry::getSize(), ghidra::ParamTrial::getSize(), ghidra::ParamActive::getTrial(), ghidra::ParamEntry::getType(), ghidra::ParamEntry::isFirstInClass(), justifyRight, and resourceType.
|
private |
Cache specific ParamEntry needed by the action.
Find the first ParamEntry matching the resourceType, and the ParamEntry corresponding to the stack if consumeFromStack is set.
References consumeFromStack, firstIter, ghidra::ParamListStandard::getEntry(), ghidra::ParamListStandard::getFirstIter(), ghidra::ParamListStandard::getStackEntry(), ghidra::AssignAction::resource, resourceType, and stackEntry.
Referenced by decode(), and MultiSlotAssign().