ROSE  0.11.51.0
BasicBlockUnit.h
1 #ifndef ROSE_BinaryAnalysis_ModelChecker_BasicBlockUnit_H
2 #define ROSE_BinaryAnalysis_ModelChecker_BasicBlockUnit_H
3 #include <featureTests.h>
4 #ifdef ROSE_ENABLE_BINARY_ANALYSIS
5 
6 #include <Rose/BinaryAnalysis/ModelChecker/ExecutionUnit.h>
7 #include <Rose/BinaryAnalysis/Partitioner2/BasicTypes.h>
8 
9 namespace Rose {
10 namespace BinaryAnalysis {
11 namespace ModelChecker {
12 
17 public:
18  using Ptr = BasicBlockUnitPtr;
19 
20 private:
21  const Partitioner2::Partitioner &partitioner_;
23 
24 protected:
25  BasicBlockUnit() = delete;
27 public:
28  ~BasicBlockUnit();
29 
30 public:
37 
38 public:
46 
47 public:
48  virtual std::string printableName() const override;
49  virtual void printSteps(const SettingsPtr&, std::ostream&, const std::string &prefix,
50  size_t stepOrigin, size_t maxSteps) const override;
51  virtual void toYamlHeader(const SettingsPtr&, std::ostream&, const std::string &prefix) const override;
52  virtual void toYamlSteps(const SettingsPtr&, std::ostream&, const std::string &prefix,
53  size_t stepOrigin, size_t maxSteps) const override;
54  virtual size_t nSteps() const override;
55  virtual Sawyer::Optional<rose_addr_t> address() const override;
56  virtual bool containsUnknownInsn() const override;
57 
58  virtual std::vector<TagPtr>
59  execute(const SettingsPtr&, const SemanticCallbacksPtr&,
61 };
62 
63 
64 } // namespace
65 } // namespace
66 } // namespace
67 
68 #endif
69 #endif
boost::shared_ptr< RiscOperators > RiscOperatorsPtr
Shared-ownership pointer to a RISC operators object.
virtual bool containsUnknownInsn() const override
Predicate to test for unknown instructions.
virtual std::vector< TagPtr > execute(const SettingsPtr &, const SemanticCallbacksPtr &, const InstructionSemantics2::BaseSemantics::RiscOperatorsPtr &) override
Execute the unit to create a new state.
virtual void toYamlHeader(const SettingsPtr &, std::ostream &, const std::string &prefix) const override
Print the header information in YAML format.
virtual Sawyer::Optional< rose_addr_t > address() const override
Property: Address if it has one.
Main namespace for the ROSE library.
virtual void toYamlSteps(const SettingsPtr &, std::ostream &, const std::string &prefix, size_t stepOrigin, size_t maxSteps) const override
Print the steps for this execution unit in YAML format.
Partitioner2::BasicBlockPtr basicBlock() const
Property: Basic block.
virtual size_t nSteps() const override
Property: Number of steps required to execute this unit.
An execution unit for a basic block.
Partitions instructions into basic blocks and functions.
Definition: Partitioner.h:290
virtual void printSteps(const SettingsPtr &, std::ostream &, const std::string &prefix, size_t stepOrigin, size_t maxSteps) const override
Print the steps for this execution unit.
virtual std::string printableName() const override
Property: Printable name.
static Ptr instance(const Partitioner2::Partitioner &, const Partitioner2::BasicBlockPtr &)
Allocating constructor.