ROSE 0.11.145.147
Public Types | Static Public Member Functions | List of all members
Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::Merger Class Reference

Description

Controls state merge operations.

This is the base class for objects that control the details of merge operations. A merge of two semantic values or semantic states happens when control flow joins together in data-flow analysis, and perhaps other operations. An optional Merger object is passed as an argument into the merge functions and contains settings and other details that might be necessary during the merge operation.

The base classes for register state and memory state allow an optional Merger object to be stored in the state. Whenever a state is copied, its merger object pointer is also copied (shallow copy of merger). The merger object is passed as an argument to each call of SValue::createMerged or SValue::createOptionalMerge. The user-defined versions of these functions can access the merger object to decide how to merge. For example, the symbolic domain defines a merger that controls whether merging two different semantic values results in bottom or a set containing both values.

Merger objects are allocated on the heap and have shared ownership like most other instruction semantics objects. Therefore they have no public C++ constructors but instead use factory methods named "instance". Users should not explicitly delete these objects – they will be deleted automatically.

Definition at line 33 of file Merger.h.

#include <Rose/BinaryAnalysis/InstructionSemantics/BaseSemantics/Merger.h>

Inheritance diagram for Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::Merger:
Inheritance graph
[legend]
Collaboration diagram for Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::Merger:
Collaboration graph
[legend]

Public Types

typedef MergerPtr Ptr
 Shared ownership pointer for Merger.
 

Public Member Functions

bool memoryAddressesMayAlias () const
 Whether memory addresses can alias one another.
 
void memoryAddressesMayAlias (bool b)
 Whether memory addresses can alias one another.
 
bool memoryMergeDebugging () const
 Turn on output for memory merge debugging.
 
void memoryMergeDebugging (bool b)
 Turn on output for memory merge debugging.
 
- Public Member Functions inherited from Sawyer::SharedObject
 SharedObject ()
 Default constructor.
 
 SharedObject (const SharedObject &)
 Copy constructor.
 
virtual ~SharedObject ()
 Virtual destructor.
 
SharedObjectoperator= (const SharedObject &)
 Assignment.
 

Static Public Member Functions

static Ptr instance ()
 Allocating constructor.
 

Member Typedef Documentation

◆ Ptr

Shared ownership pointer for Merger.

Definition at line 36 of file Merger.h.

Member Function Documentation

◆ memoryAddressesMayAlias() [1/2]

bool Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::Merger::memoryAddressesMayAlias ( ) const
inline

Whether memory addresses can alias one another.

If true and the memory state supports it, then merging of two states will check for addresses that can alias one another and adjust the merge accordingly.

Definition at line 57 of file Merger.h.

◆ memoryAddressesMayAlias() [2/2]

void Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::Merger::memoryAddressesMayAlias ( bool  b)
inline

Whether memory addresses can alias one another.

If true and the memory state supports it, then merging of two states will check for addresses that can alias one another and adjust the merge accordingly.

Definition at line 58 of file Merger.h.

◆ memoryMergeDebugging() [1/2]

bool Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::Merger::memoryMergeDebugging ( ) const
inline

Turn on output for memory merge debugging.

If set and the Rose::BinaryAnalysis::InstructionSemantics diagnostic stream is also enabled, then memory merge operations produce debugging diagnostics to that stream. Memory merge debugging is not normally enabled even if the stream is enabled because it can produce a very large amount of output.

Definition at line 68 of file Merger.h.

◆ memoryMergeDebugging() [2/2]

void Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::Merger::memoryMergeDebugging ( bool  b)
inline

Turn on output for memory merge debugging.

If set and the Rose::BinaryAnalysis::InstructionSemantics diagnostic stream is also enabled, then memory merge operations produce debugging diagnostics to that stream. Memory merge debugging is not normally enabled even if the stream is enabled because it can produce a very large amount of output.

Definition at line 69 of file Merger.h.


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