1#ifndef ROSE_BinaryAnalysis_InstructionSemantics_DataFlowSemantics_H
2#define ROSE_BinaryAnalysis_InstructionSemantics_DataFlowSemantics_H
3#include <featureTests.h>
4#ifdef ROSE_ENABLE_BINARY_ANALYSIS
6#include <Rose/BinaryAnalysis/AbstractLocation.h>
7#include <Rose/BinaryAnalysis/BasicTypes.h>
8#include <Rose/BinaryAnalysis/InstructionSemantics/MultiSemantics.h>
10#include <Sawyer/Assert.h>
11#include <Sawyer/Graph.h>
14namespace BinaryAnalysis {
15namespace InstructionSemantics {
16namespace DataFlowSemantics {
53typedef boost::shared_ptr<class RiscOperators> RiscOperatorsPtr;
69 using Ptr = RiscOperatorsPtr;
73 size_t innerDomainId_;
116 class TemporarilyDeactivate {
119 bool wasActive_, canceled_;
122 ~TemporarilyDeactivate();
void clearGraph()
Clear dataflow graph.
virtual void writeRegister(RegisterDescriptor reg, const BaseSemantics::SValuePtr &a_) override
Writes a value to a register.
virtual BaseSemantics::SValuePtr readRegister(RegisterDescriptor reg, const BaseSemantics::SValuePtr &dflt) override
Reads a value from a register.
virtual BaseSemantics::SValuePtr peekRegister(RegisterDescriptor reg, const BaseSemantics::SValuePtr &dflt) override
Obtain a register value without side effects.
RiscOperatorsPtr Ptr
Shared-ownership pointer.
virtual BaseSemantics::SValuePtr peekMemory(RegisterDescriptor segreg, const BaseSemantics::SValuePtr &addr_, const BaseSemantics::SValuePtr &dflt_) override
Read memory without side effects.
static RiscOperatorsPtr instance(const BaseSemantics::RiscOperatorsPtr &childOps)
Static allocating constructor.
const DataFlowGraph & getGraph() const
Return the dataflow graph.
virtual void writeMemory(RegisterDescriptor segreg, const BaseSemantics::SValuePtr &addr_, const BaseSemantics::SValuePtr &data_, const BaseSemantics::SValuePtr &cond) override
Writes a value to memory.
virtual BaseSemantics::SValuePtr readMemory(RegisterDescriptor segreg, const BaseSemantics::SValuePtr &addr_, const BaseSemantics::SValuePtr &dflt_, const BaseSemantics::SValuePtr &cond) override
Reads a value from memory.
static RiscOperatorsPtr promote(const BaseSemantics::RiscOperatorsPtr &)
Run-time promotion of a base RiscOperators pointer to operators for this domain.
Defines RISC operators for the MultiSemantics domain.
Describes (part of) a physical CPU register.
Graph containing user-defined vertices and edges.
boost::shared_ptr< RiscOperators > RiscOperatorsPtr
Shared-ownership pointer to a RISC operators object.
boost::shared_ptr< State > StatePtr
Shared-ownership pointer to a semantic state.
std::shared_ptr< SmtSolver > SmtSolverPtr
Reference counting pointer.
const size_t INVALID_INDEX
Invalid array index.
Information per dataflow edge.
EdgeType edgeType
Whether edge resets or augments previous flows to target.
size_t sequence
Edge sequence number unique and constant within graph.
EdgeType
Type of dataflow edge.
@ CLOBBER
This edge clobbers previous flows into the target.
@ AUGMENT
This edge augments previous flows into the target.