Ghidra Decompiler Analysis Engine
|
Manager/container for description objects (UserPcodeOp) of user defined p-code ops. More...
#include <userop.hh>
Public Member Functions | |
UserOpManage (void) | |
Construct an empty manager. | |
~UserOpManage (void) | |
Destructor. | |
void | initialize (Architecture *glb) |
Initialize description objects for all user defined ops. More... | |
void | setDefaults (Architecture *glb) |
Create any required operations if they weren't explicitly defined. More... | |
UserPcodeOp * | getOp (int4 i) const |
UserPcodeOp * | getOp (const string &nm) const |
Retrieve description by name. More... | |
SegmentOp * | getSegmentOp (int4 i) const |
void | parseSegmentOp (const Element *el, Architecture *glb) |
Parse a <segmentop> XML tag. More... | |
void | parseVolatile (const Element *el, Architecture *glb) |
Parse a <volatile> XML tag. More... | |
void | parseCallOtherFixup (const Element *el, Architecture *glb) |
Parse a <callotherfixup> XML tag. More... | |
void | parseJumpAssist (const Element *el, Architecture *glb) |
Parse a <jumpassist> XML tag. More... | |
void | manualCallOtherFixup (const string &useropname, const string &outname, const vector< string > &inname, const string &snippet, Architecture *glb) |
Manually install an InjectedUserOp given just names of the user defined op and the p-code snippet. More... | |
Manager/container for description objects (UserPcodeOp) of user defined p-code ops.
The description objects are referenced by the CALLOTHER constant id, (or by name during initialization). During initialize(), every user defined p-code op presented by the Architecture is assigned a default UnspecializedPcodeOp description. Further processing of the .cspec or .pspec may reassign a more specialized description object by parsing specific tags using on of this class's parse* methods.
UserPcodeOp * UserOpManage::getOp | ( | const string & | nm | ) | const |
Retrieve description by name.
nm | is the low-level operation name |
|
inline |
Retrieve a user-op description object by index
i | is the index |
|
inline |
Retrieve a segment-op description object by index
i | is the index |
void UserOpManage::initialize | ( | Architecture * | glb | ) |
Initialize description objects for all user defined ops.
Every user defined p-code op is initially assigned an UnspecializedPcodeOp description, which may get overridden later.
glb | is the Architecture from which to draw user defined operations |
void UserOpManage::manualCallOtherFixup | ( | const string & | useropname, |
const string & | outname, | ||
const vector< string > & | inname, | ||
const string & | snippet, | ||
Architecture * | glb | ||
) |
Manually install an InjectedUserOp given just names of the user defined op and the p-code snippet.
An alternate way to attach a call-fixup to user defined p-code ops, without using XML. The p-code to inject is presented as a raw string to be handed to the p-code parser.
useropname | is the name of the user defined op |
outname | is the name of the output variable in the snippet |
inname | is the list of input variable names in the snippet |
snippet | is the raw p-code source snippet |
glb | is the owning Architecture |
void UserOpManage::parseCallOtherFixup | ( | const Element * | el, |
Architecture * | glb | ||
) |
Parse a <callotherfixup> XML tag.
Create an InjectedUserOp description object based on the XML description and register it with this manager.
el | is the root <callotherfixup> element |
glb | is the owning Architecture |
void UserOpManage::parseJumpAssist | ( | const Element * | el, |
Architecture * | glb | ||
) |
Parse a <jumpassist> XML tag.
Create a JumpAssistOp description object based on the XML description and register it with this manager.
el | is the root <jumpassist> element |
glb | is the owning Architecture |
void UserOpManage::parseSegmentOp | ( | const Element * | el, |
Architecture * | glb | ||
) |
Parse a <segmentop> XML tag.
Create a SegmentOp description object based on the tag details and register it with this manager.
el | is the root <segmentop> element |
glb | is the owning Architecture |
void UserOpManage::parseVolatile | ( | const Element * | el, |
Architecture * | glb | ||
) |
Parse a <volatile> XML tag.
Create either a VolatileReadOp or VolatileWriteOp description object based on the XML details and register it with this manager.
el | is the root <volatile> element |
glb | is the owning Architecture |
void UserOpManage::setDefaults | ( | Architecture * | glb | ) |
Create any required operations if they weren't explicitly defined.
Establish defaults for necessary operators not already defined. Currently this forces volatile read/write operations to exist.
glb | is the owning Architecture |