Ghidra Decompiler Analysis Engine
Public Member Functions | List of all members
UserOpManage Class Reference

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...
 
UserPcodeOpgetOp (int4 i) const
 
UserPcodeOpgetOp (const string &nm) const
 Retrieve description by name. More...
 
SegmentOpgetSegmentOp (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...
 

Detailed Description

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.

Member Function Documentation

◆ getOp() [1/2]

UserPcodeOp * UserOpManage::getOp ( const string &  nm) const

Retrieve description by name.

Parameters
nmis the low-level operation name
Returns
the matching description object or NULL

◆ getOp() [2/2]

UserPcodeOp* UserOpManage::getOp ( int4  i) const
inline

Retrieve a user-op description object by index

Parameters
iis the index
Returns
the indicated user-op description

◆ getSegmentOp()

SegmentOp* UserOpManage::getSegmentOp ( int4  i) const
inline

Retrieve a segment-op description object by index

Parameters
iis the index
Returns
the indicated segment-op description

◆ initialize()

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.

Parameters
glbis the Architecture from which to draw user defined operations

◆ manualCallOtherFixup()

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.

Parameters
useropnameis the name of the user defined op
outnameis the name of the output variable in the snippet
innameis the list of input variable names in the snippet
snippetis the raw p-code source snippet
glbis the owning Architecture

◆ parseCallOtherFixup()

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.

Parameters
elis the root <callotherfixup> element
glbis the owning Architecture

◆ parseJumpAssist()

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.

Parameters
elis the root <jumpassist> element
glbis the owning Architecture

◆ parseSegmentOp()

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.

Parameters
elis the root <segmentop> element
glbis the owning Architecture

◆ parseVolatile()

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.

Parameters
elis the root <volatile> element
glbis the owning Architecture

◆ setDefaults()

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.

Parameters
glbis the owning Architecture

The documentation for this class was generated from the following files: