GP-2157 Marshaling refactor. Decompiler side.

This commit is contained in:
caheckman 2022-05-17 16:15:21 -04:00
parent 672c1f11e2
commit d8c10bf229
97 changed files with 5313 additions and 3733 deletions

View file

@ -30,6 +30,12 @@ class Funcdata;
class SymbolEntry;
class ValueSet;
extern AttributeId ATTRIB_ADDRTIED; ///< Marshaling attribute "addrtied"
extern AttributeId ATTRIB_GRP; ///< Marshaling attribute "grp"
extern AttributeId ATTRIB_INPUT; ///< Marshaling attribute "input"
extern AttributeId ATTRIB_PERSISTS; ///< Marshaling attribute "persists"
extern AttributeId ATTRIB_UNAFF; ///< Marshaling attribute "unaff"
/// \brief Compare two Varnode pointers by location then definition
struct VarnodeCompareLocDef {
bool operator()(const Varnode *a,const Varnode *b) const; ///< Functional comparison operator
@ -315,7 +321,7 @@ public:
void setLongPrint(void) { addlflags |= Varnode::longprint; } ///< Force \b this to be printed as a \e long token
void setStopUpPropagation(void) { addlflags |= Varnode::stop_uppropagation; } ///< Stop up-propagation thru \b this
void clearStopUpPropagation(void) { addlflags &= ~Varnode::stop_uppropagation; } ///< Stop up-propagation thru \b this
void setImpliedField(void) { addlflags |= Varnode::has_implied_field; } ///< Mark \this as having an implied field
void setImpliedField(void) { addlflags |= Varnode::has_implied_field; } ///< Mark \b this as having an implied field
bool updateType(Datatype *ct,bool lock,bool override); ///< (Possibly) set the Datatype given various restrictions
void setStackStore(void) { addlflags |= Varnode::stack_store; } ///< Mark as produced by explicit CPUI_STORE
void setLockedInput(void) { addlflags |= Varnode::locked_input; } ///< Mark as existing input, even if unused
@ -323,10 +329,9 @@ public:
void copySymbolIfValid(const Varnode *vn); ///< Copy symbol info from \b vn if constant value matches
Datatype *getLocalType(bool &blockup) const; ///< Calculate type of Varnode based on local information
bool copyShadow(const Varnode *op2) const; ///< Are \b this and \b op2 copied from the same source?
void saveXml(ostream &s) const; ///< Save a description of \b this as an XML tag
void encode(Encoder &encoder) const; ///< Encode a description of \b this to a stream
static bool comparePointers(const Varnode *a,const Varnode *b) { return (*a < *b); } ///< Compare Varnodes as pointers
static void printRaw(ostream &s,const Varnode *vn); ///< Print raw info about a Varnode to stream
// static Varnode *restoreXml(const Element *el,Funcdata &fd,bool coderef);
};
/// \brief A container for Varnode objects from a specific function