ROSE
0.11.21.0
|
Values in the NullSemantics domain.
Values are essentially void.
Definition at line 27 of file NullSemantics2.h.
#include <NullSemantics2.h>
Public Member Functions | |
virtual BaseSemantics::SValuePtr | bottom_ (size_t nBits) const ROSE_OVERRIDE |
Data-flow bottom value. More... | |
virtual BaseSemantics::SValuePtr | undefined_ (size_t nBits) const ROSE_OVERRIDE |
Create a new undefined semantic value. More... | |
virtual BaseSemantics::SValuePtr | unspecified_ (size_t nBits) const ROSE_OVERRIDE |
Create a new unspecified semantic value. More... | |
virtual BaseSemantics::SValuePtr | number_ (size_t nBits, uint64_t number) const ROSE_OVERRIDE |
Create a new concrete semantic value. More... | |
virtual BaseSemantics::SValuePtr | copy (size_t new_width=0) const ROSE_OVERRIDE |
Create a new value from an existing value, changing the width if new_width is non-zero. More... | |
virtual Sawyer::Optional< BaseSemantics::SValuePtr > | createOptionalMerge (const BaseSemantics::SValuePtr &other, const BaseSemantics::MergerPtr &, const SmtSolverPtr &) const ROSE_OVERRIDE |
Possibly create a new value by merging two existing values. More... | |
virtual bool | isBottom () const ROSE_OVERRIDE |
Determines whether a value is a data-flow bottom. More... | |
virtual bool | is_number () const ROSE_OVERRIDE |
Determines if the value is a concrete number. More... | |
virtual uint64_t | get_number () const ROSE_OVERRIDE |
Return the concrete number for this value. More... | |
virtual bool | may_equal (const BaseSemantics::SValuePtr &other, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE |
Returns true if two values could be equal. More... | |
virtual bool | must_equal (const BaseSemantics::SValuePtr &other, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE |
Returns true if two values must be equal. More... | |
virtual void | print (std::ostream &stream, BaseSemantics::Formatter &) const ROSE_OVERRIDE |
Print a value to a stream using default format. More... | |
![]() | |
virtual SValuePtr | boolean_ (bool value) const |
Create a new, Boolean value. More... | |
SValuePtr | createMerged (const SValuePtr &other, const MergerPtr &merger, const SmtSolverPtr &solver) const |
Create a new value by merging two existing values. More... | |
bool | isTrue () const |
Returns true if concrete non-zero. More... | |
bool | isFalse () const |
Returns true if concrete zero. More... | |
virtual size_t | get_width () const |
Accessor for value width. | |
virtual void | set_width (size_t nbits) |
Accessor for value width. | |
void | print (std::ostream &) const |
Print a value to a stream using default format. More... | |
WithFormatter | with_format (Formatter &fmt) |
Used for printing values with formatting. More... | |
WithFormatter | operator+ (Formatter &fmt) |
Used for printing values with formatting. More... | |
WithFormatter | operator+ (const std::string &linePrefix) |
Used for printing values with formatting. More... | |
virtual std::string | get_comment () const |
Some subclasses support the ability to add comments to values. More... | |
virtual void | set_comment (const std::string &) const |
Some subclasses support the ability to add comments to values. More... | |
![]() | |
SharedObject () | |
Default constructor. More... | |
SharedObject (const SharedObject &) | |
Copy constructor. More... | |
virtual | ~SharedObject () |
Virtual destructor. More... | |
SharedObject & | operator= (const SharedObject &) |
Assignment. More... | |
![]() | |
SharedPointer< SValue > | sharedFromThis () |
Create a shared pointer from this . More... | |
SharedPointer< const SValue > | sharedFromThis () const |
Create a shared pointer from this . More... | |
Static Public Member Functions | |
static SValuePtr | instance () |
Instantiate a new prototypical values. More... | |
static SValuePtr | instance (size_t nbits) |
Instantiate a new undefined value. More... | |
static SValuePtr | instance (size_t nbits, uint64_t number) |
Instantiate a new concrete value. More... | |
static SValuePtr | instance (const SValuePtr &other) |
Instantiate a new copy of an existing value. More... | |
static SValuePtr | promote (const BaseSemantics::SValuePtr &v) |
Promote a base value to a NullSemantics value. More... | |
![]() | |
static SValuePtr | promote (const SValuePtr &x) |
![]() | |
static SynchronizedPoolAllocator & | poolAllocator () |
Return the pool allocator for this class. More... | |
static void * | operator new (size_t size) |
static void | operator delete (void *ptr, size_t size) |
Protected Member Functions | |
SValue (size_t nbits) | |
![]() | |
SValue (size_t nbits) | |
SValue (const SValue &other) | |
Additional Inherited Members | |
![]() | |
typedef SValuePtr | Ptr |
Shared-ownership pointer for an SValue object. More... | |
![]() | |
size_t | width |
|
inlinestatic |
Instantiate a new prototypical values.
Prototypical values are only used for their virtual constructors.
Definition at line 38 of file NullSemantics2.h.
Referenced by bottom_(), number_(), undefined_(), and unspecified_().
|
inlinestatic |
Instantiate a new undefined value.
Definition at line 43 of file NullSemantics2.h.
|
inlinestatic |
Instantiate a new concrete value.
Definition at line 48 of file NullSemantics2.h.
|
inlinestatic |
Instantiate a new copy of an existing value.
Definition at line 53 of file NullSemantics2.h.
|
inlinevirtual |
Data-flow bottom value.
Returns a new value that represents bottom in a data-flow analysis. If a semantic domain can represent a bottom value then the isBottom predicate is true when invoked on this method's return value. If a semantic domain cannot support a bottom value, then it may return some other value.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 60 of file NullSemantics2.h.
References instance().
|
inlinevirtual |
Create a new undefined semantic value.
The new semantic value will have the same dynamic type as the value on which this virtual method is called. This is the most common way that a new value is created. The unspecified_ method is closely related.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 63 of file NullSemantics2.h.
References instance().
|
inlinevirtual |
Create a new unspecified semantic value.
The new semantic value will have the same dynamic type as the value on which this virtual method is called. Undefined (undefined_) and unspecified are closely related. Unspecified values are the same as undefined values except they're instantiated as the result of some machine instruction where the ISA documentation indicates that the value is unspecified (e.g., status flags for x86 shift and rotate instructions).
Most semantic domains make no distinction between undefined and unspecified.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 66 of file NullSemantics2.h.
References instance().
|
inlinevirtual |
Create a new concrete semantic value.
The new value will represent the specified concrete value and have the same dynamic type as the value on which this virtual method is called. This is the most common way that a new constant is created. The number
is truncated to contain nbits
bits (higher order bits are cleared).
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 69 of file NullSemantics2.h.
References instance().
|
inlinevirtual |
Create a new value from an existing value, changing the width if new_width
is non-zero.
Increasing the width logically adds zero bits to the most significant side of the value; decreasing the width logically removes bits from the most significant side of the value.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 72 of file NullSemantics2.h.
|
inlinevirtual |
Possibly create a new value by merging two existing values.
This method optionally returns a new semantic value as the data-flow merge of this
and other
. If the two inputs are "equal" in some sense of the dataflow implementation then nothing is returned, otherwise a new value is returned. Typical usage is like this:
If you always want a copy regardless of whether the merge is necessary, then use the createMerged convenience function instead.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 79 of file NullSemantics2.h.
|
inlinestatic |
Promote a base value to a NullSemantics value.
The value v
must have a NullSemantics::SValue dynamic type.
Definition at line 88 of file NullSemantics2.h.
References Sawyer::SharedPointer< T >::dynamicCast().
|
inlinevirtual |
Determines whether a value is a data-flow bottom.
Returns true if this value represents a bottom value for data-flow analysis. Any RiscOperation performed on an operand whose isBottom predicate returns true will itself return a bottom value. This includes operations like "xor x x" which would normally return zero.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 97 of file NullSemantics2.h.
|
inlinevirtual |
Determines if the value is a concrete number.
Concrete numbers can be created with the number_(), boolean_() virtual constructors, or by other means.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 101 of file NullSemantics2.h.
|
inlinevirtual |
Return the concrete number for this value.
Only values for which is_number() returns true are able to return a concrete value by this method.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 105 of file NullSemantics2.h.
|
inlinevirtual |
Returns true if two values could be equal.
The SMT solver is optional for many subclasses.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 111 of file NullSemantics2.h.
|
inlinevirtual |
Returns true if two values must be equal.
The SMT solver is optional for many subclasses.
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 116 of file NullSemantics2.h.
|
inlinevirtual |
Print a value to a stream using default format.
The value will normally occupy a single line and not contain leading space or line termination. See also, with_format().
Implements Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue.
Definition at line 121 of file NullSemantics2.h.
References Rose::BinaryAnalysis::InstructionSemantics2::BaseSemantics::SValue::get_width().