Ghidra 11.3.2
Ghidra internal decompiler documentation.
|
An action that assigns an Address to a function prototype parameter. More...
#include <modelrules.hh>
Public Types | |
enum | { success , fail , no_assignment , hiddenret_ptrparam , hiddenret_specialreg , hiddenret_specialreg_void } |
Public Member Functions | |
AssignAction (const ParamListStandard *res) | |
Constructor. | |
bool | canAffectFillinOutput (void) const |
Return true if fillinOutputMap is active. | |
virtual AssignAction * | clone (const ParamListStandard *newResource) const =0 |
Make a copy of this action. | |
virtual uint4 | assignAddress (Datatype *dt, const PrototypePieces &proto, int4 pos, TypeFactory &tlist, vector< int4 > &status, ParameterPieces &res) const =0 |
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)=0 |
Configure any details of how this action should behave from the stream. | |
Static Public Member Functions | |
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. | |
Protected Attributes | |
const ParamListStandard * | resource |
Resources to which this action applies. | |
bool | fillinOutputActive |
If true, fillinOutputMap is active. | |
An action that assigns an Address to a function prototype parameter.
A request for the address of either return storage or an input parameter is made through the assignAddress() method, which is given full information about the function prototype. Details about how the action performs is configured through the decode() method.
anonymous enum |
Enumerator | |
---|---|
success | Data-type is fully assigned. |
fail | Action could not be applied. |
no_assignment | Do not assign storage for this parameter. |
hiddenret_ptrparam | Hidden return pointer as first input parameter. |
hiddenret_specialreg | Hidden return pointer in dedicated input register. |
hiddenret_specialreg_void | Hidden return pointer, but no normal return. |
|
pure 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 |
Implemented in ghidra::GotoStack, ghidra::ConvertToPointer, ghidra::MultiSlotAssign, ghidra::MultiMemberAssign, ghidra::MultiSlotDualAssign, ghidra::ConsumeAs, ghidra::HiddenReturnAssign, and ghidra::ConsumeExtra.
Referenced by ghidra::ModelRule::assignAddress().
|
pure virtual |
Make a copy of this action.
newResource | is the new resource object that will own the clone |
Implemented in ghidra::GotoStack, ghidra::ConvertToPointer, ghidra::MultiSlotAssign, ghidra::MultiMemberAssign, ghidra::MultiSlotDualAssign, ghidra::ConsumeAs, ghidra::HiddenReturnAssign, and ghidra::ConsumeExtra.
Referenced by ghidra::ModelRule::ModelRule(), and ghidra::ModelRule::ModelRule().
|
pure virtual |
Configure any details of how this action should behave from the stream.
decoder | is the given stream decoder |
Implemented in ghidra::GotoStack, ghidra::ConvertToPointer, ghidra::MultiSlotAssign, ghidra::MultiMemberAssign, ghidra::MultiSlotDualAssign, ghidra::ConsumeAs, ghidra::HiddenReturnAssign, and ghidra::ConsumeExtra.
Referenced by decodeAction(), and decodeSideeffect().
|
static |
Read the next model rule action element from the stream.
Allocate the action object corresponding to the element and configure it. If the next element is not an action, throw an exception.
decoder | is the stream decoder |
res | is the resource set for the new action |
References decode(), ghidra::ParamListStandard::getSpacebase(), hiddenret_specialreg, ghidra::AddrSpace::isBigEndian(), ghidra::Decoder::peekElement(), and ghidra::TYPECLASS_GENERAL.
Referenced by ghidra::ModelRule::decode().
|
static |
Read the next model rule sideeffect element from the stream.
Allocate the sideeffect object corresponding to the element and configure it. If the next element is not a sideeffect, throw an exception.
decoder | is the stream decoder |
res | is the resource set for the new sideeffect |
References decode(), and ghidra::Decoder::peekElement().
Referenced by ghidra::ModelRule::decode().
|
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 in ghidra::GotoStack, ghidra::MultiSlotAssign, ghidra::MultiMemberAssign, ghidra::MultiSlotDualAssign, and ghidra::ConsumeAs.
Referenced by ghidra::ModelRule::fillinOutputMap().