decompiler 1.0.0
Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
TypePointer Class Reference

Datatype object representing a pointer. More...

#include <type.hh>

Inheritance diagram for TypePointer:
Datatype TypePointerRel

Public Member Functions

 TypePointer (const TypePointer &op)
 Construct from another TypePointer.
 
 TypePointer (int4 s, Datatype *pt, uint4 ws)
 Construct from a size, pointed-to type, and wordsize.
 
DatatypegetPtrTo (void) const
 Get the pointed-to Datatype.
 
uint4 getWordSize (void) const
 Get the wordsize of the pointer.
 
virtual void printRaw (ostream &s) const
 Print a description of the type to stream. More...
 
virtual int4 numDepend (void) const
 Return number of component sub-types. More...
 
virtual DatatypegetDepend (int4 index) const
 Return the i-th component sub-type. More...
 
virtual void printNameBase (ostream &s) const
 Print name as short prefix. More...
 
virtual int4 compare (const Datatype &op, int4 level) const
 Order types for propagation. More...
 
virtual int4 compareDependency (const Datatype &op) const
 Compare for storage in tree structure. More...
 
virtual Datatypeclone (void) const
 Clone the data-type. More...
 
virtual void saveXml (ostream &s) const
 Serialize the data-type to XML. More...
 
virtual TypePointerdownChain (uintb &off, TypePointer *&par, uintb &parOff, bool allowArrayWrap, TypeFactory &typegrp)
 Find a sub-type pointer given an offset into this. More...
 
virtual bool isPtrsubMatching (uintb off) const
 Is this data-type suitable as input to a CPUI_PTRSUB op. More...
 
- Public Member Functions inherited from Datatype
 Datatype (const Datatype &op)
 Construct the base data-type copying low-level properties of another.
 
 Datatype (int4 s, type_metatype m)
 Construct the base data-type providing size and meta-type.
 
virtual ~Datatype (void)
 Destructor.
 
bool isCoreType (void) const
 Is this a core data-type.
 
bool isCharPrint (void) const
 Does this print as a 'char'.
 
bool isEnumType (void) const
 Is this an enumerated type.
 
bool isPowerOfTwo (void) const
 Is this a flag-based enumeration.
 
bool isASCII (void) const
 Does this print as an ASCII 'char'.
 
bool isUTF16 (void) const
 Does this print as UTF16 'wchar'.
 
bool isUTF32 (void) const
 Does this print as UTF32 'wchar'.
 
bool isVariableLength (void) const
 Is this a variable length structure.
 
bool hasSameVariableBase (const Datatype *ct) const
 Are these the same variable length data-type. More...
 
bool isOpaqueString (void) const
 Is this an opaquely encoded string.
 
bool isPointerRel (void) const
 Is this a TypePointerRel.
 
bool isFormalPointerRel (void) const
 Is this a non-ephemeral TypePointerRel.
 
bool hasStripped (void) const
 Return true if this has a stripped form.
 
bool isIncomplete (void) const
 Is this an incompletely defined data-type.
 
uint4 getInheritable (void) const
 Get properties pointers inherit.
 
type_metatype getMetatype (void) const
 Get the type meta-type.
 
sub_metatype getSubMeta (void) const
 Get the sub-metatype.
 
uint8 getId (void) const
 Get the type id.
 
int4 getSize (void) const
 Get the type size.
 
const string & getName (void) const
 Get the type name.
 
DatatypegetTypedef (void) const
 Get the data-type immediately typedefed by this (or null)
 
virtual void printRaw (ostream &s) const
 Print a description of the type to stream. More...
 
virtual DatatypegetSubType (uintb off, uintb *newoff) const
 Recover component data-type one-level down. More...
 
virtual DatatypenearestArrayedComponentForward (uintb off, uintb *newoff, int4 *elSize) const
 
virtual DatatypenearestArrayedComponentBackward (uintb off, uintb *newoff, int4 *elSize) const
 
virtual int4 numDepend (void) const
 Return number of component sub-types. More...
 
virtual DatatypegetDepend (int4 index) const
 Return the i-th component sub-type. More...
 
virtual void printNameBase (ostream &s) const
 Print name as short prefix. More...
 
virtual int4 compare (const Datatype &op, int4 level) const
 Order types for propagation. More...
 
virtual int4 compareDependency (const Datatype &op) const
 Compare for storage in tree structure. More...
 
virtual void saveXml (ostream &s) const
 Serialize the data-type to XML. More...
 
virtual bool isPtrsubMatching (uintb off) const
 Is this data-type suitable as input to a CPUI_PTRSUB op. More...
 
virtual DatatypegetStripped (void) const
 Get a stripped version of this for formal use in formal declarations. More...
 
int4 typeOrder (const Datatype &op) const
 Order this with -op- datatype.
 
int4 typeOrderBool (const Datatype &op) const
 Order this with -op-, treating bool data-type as special. More...
 
void saveXmlRef (ostream &s) const
 Write an XML reference of this to stream. More...
 

Protected Member Functions

void restoreXml (const Element *el, TypeFactory &typegrp)
 Restore this pointer data-type from an XML element. More...
 
void calcSubmeta (void)
 Pointers to structures may require a specific submeta. More...
 
 TypePointer (void)
 Internal constructor for use with restoreXml.
 
- Protected Member Functions inherited from Datatype
void restoreXmlBasic (const Element *el)
 Recover basic data-type properties. More...
 
void saveXmlBasic (type_metatype meta, ostream &s) const
 Save basic data-type properties. More...
 
void saveXmlTypedef (ostream &s) const
 Write this as a typedef tag to stream. More...
 
void markComplete (void)
 Mark this data-type as completely defined.
 
virtual Datatypeclone (void) const =0
 Clone the data-type. More...
 

Protected Attributes

Datatypeptrto
 Type being pointed to.
 
uint4 wordsize
 What size unit does the pointer address.
 
- Protected Attributes inherited from Datatype
int4 size
 Size (of variable holding a value of this type)
 
string name
 Name of type.
 
type_metatype metatype
 Meta-type - type disregarding size.
 
sub_metatype submeta
 Sub-type of of the meta-type, for comparisons.
 
uint4 flags
 Boolean properties of the type.
 
uint8 id
 A unique id for the type (or 0 if an id is not assigned)
 
DatatypetypedefImm
 The immediate data-type being typedefed by this.
 

Friends

class TypeFactory
 

Additional Inherited Members

- Protected Types inherited from Datatype
enum  {
  coretype = 1 , chartype = 2 , enumtype = 4 , poweroftwo = 8 ,
  utf16 = 16 , utf32 = 32 , opaque_string = 64 , variable_length = 128 ,
  has_stripped = 0x100 , is_ptrrel = 0x200 , type_incomplete = 0x400
}
 Boolean properties of datatypes. More...
 
- Static Protected Member Functions inherited from Datatype
static uint8 hashName (const string &nm)
 Produce a data-type id by hashing the type name. More...
 
static uint8 hashSize (uint8 id, int4 size)
 Reversibly hash size into id. More...
 
- Static Protected Attributes inherited from Datatype
static sub_metatype base2sub [13]
 

Detailed Description

Datatype object representing a pointer.

Member Function Documentation

◆ calcSubmeta()

void TypePointer::calcSubmeta ( void  )
protected

Pointers to structures may require a specific submeta.

Calculate specific submeta for this pointer

Referenced by TypePointer().

◆ clone()

virtual Datatype * TypePointer::clone ( void  ) const
inlinevirtual

Clone the data-type.

Implements Datatype.

Reimplemented in TypePointerRel.

References TypePointer().

◆ compare()

int4 TypePointer::compare ( const Datatype op,
int4  level 
) const
virtual

Order types for propagation.

Order this with another data-type, in a way suitable for the type propagation algorithm. Bigger types come earlier. More specific types come earlier.

Parameters
opis the data-type to compare with this
levelis maximum level to descend when recursively comparing
Returns
negative, 0, positive depending on ordering of types

Reimplemented from Datatype.

References Datatype::compare(), Datatype::getId(), ptrto, and wordsize.

◆ compareDependency()

int4 TypePointer::compareDependency ( const Datatype op) const
virtual

Compare for storage in tree structure.

Sort data-types for the main TypeFactory container. The sort needs to be based on the data-type structure so that an example data-type, constructed outside the factory, can be used to find the equivalent object inside the factory. This means the comparison should not examine the data-type id. In practice, the comparison only needs to go down one level in the component structure before just comparing component pointers.

Parameters
opis the data-type to compare with this
Returns
negative, 0, positive depending on ordering of types

Reimplemented from Datatype.

Reimplemented in TypePointerRel.

References Datatype::getSize(), Datatype::getSubMeta(), ptrto, Datatype::size, Datatype::submeta, and wordsize.

◆ downChain()

TypePointer * TypePointer::downChain ( uintb &  off,
TypePointer *&  par,
uintb &  parOff,
bool  allowArrayWrap,
TypeFactory typegrp 
)
virtual

Find a sub-type pointer given an offset into this.

Add a constant offset to this pointer. If there is a valid component at that offset, return a pointer to the data-type of the component or NULL otherwise. This routine only goes down one level at most. Pass back the renormalized offset relative to the new data-type. If this is a pointer to (into) a container, the data-type of the container is passed back, with the offset into the container.

Parameters
offis a reference to the offset to add
paris used to pass back the container
parOffis used to pass back the offset into the container
allowArrayWrapis true if the pointer should be treated as a pointer to an array
typegrpis the factory producing the (possibly new) data-type
Returns
a pointer datatype for the component or NULL

Reimplemented in TypePointerRel.

Referenced by TypePointerRel::downChain(), TypeOpPtrsub::getOutputToken(), and ActionInferTypes::propagateAddIn2Out().

◆ getDepend()

virtual Datatype * TypePointer::getDepend ( int4  index) const
inlinevirtual

Return the i-th component sub-type.

Reimplemented from Datatype.

References ptrto.

◆ isPtrsubMatching()

bool TypePointer::isPtrsubMatching ( uintb  off) const
virtual

Is this data-type suitable as input to a CPUI_PTRSUB op.

A CPUI_PTRSUB must act on a pointer data-type where the given offset addresses a component. Perform this check.

Parameters
offis the given offset
Returns
true if this is a suitable PTRSUB data-type

Reimplemented from Datatype.

Reimplemented in TypePointerRel.

References AddrSpace::addressToByte(), AddrSpace::addressToByteInt(), Datatype::getMetatype(), Datatype::getSize(), Datatype::getSubType(), ptrto, TYPE_ARRAY, TYPE_SPACEBASE, TYPE_STRUCT, and wordsize.

Referenced by TypePointerRel::isPtrsubMatching().

◆ numDepend()

virtual int4 TypePointer::numDepend ( void  ) const
inlinevirtual

Return number of component sub-types.

Reimplemented from Datatype.

◆ printNameBase()

virtual void TypePointer::printNameBase ( ostream &  s) const
inlinevirtual

Print name as short prefix.

Reimplemented from Datatype.

References Datatype::printNameBase(), and ptrto.

◆ printRaw()

void TypePointer::printRaw ( ostream &  s) const
virtual

Print a description of the type to stream.

Print a raw description of the type to stream. Intended for debugging. Not intended to produce parsable C.

Parameters
sis the output stream

Reimplemented from Datatype.

Reimplemented in TypePointerRel.

References Datatype::printRaw(), and ptrto.

◆ restoreXml()

void TypePointer::restoreXml ( const Element el,
TypeFactory typegrp 
)
protected

Restore this pointer data-type from an XML element.

Parse a <type> tag with a child describing the data-type being pointed to

Parameters
elis the root XML element
typegrpis the factory owning this data-type

Referenced by TypeFactory::restoreXmlTypeNoRef().

◆ saveXml()

void TypePointer::saveXml ( ostream &  s) const
virtual

Serialize the data-type to XML.

Write out a formal description of the data-type as an XML <type> tag. For composite data-types, the description goes down one level, describing the component types only by reference.

Parameters
sis the stream to write to

Reimplemented from Datatype.

Reimplemented in TypePointerRel.

References a_v_i(), Datatype::metatype, Datatype::saveXmlBasic(), Datatype::saveXmlTypedef(), Datatype::typedefImm, and wordsize.


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