ROSE 0.11.145.192
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState Class Referenceabstract

Description

Cell-based memory state.

This is the base class for cell-based memory states.

Definition at line 21 of file BaseSemantics/MemoryCellState.h.

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

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

Public Types

using Super = MemoryState
 Base type.
 
using Ptr = MemoryCellStatePtr
 Shared-ownership pointer.
 
- Public Types inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState
typedef MemoryStatePtr Ptr
 Shared-ownership pointer.
 
- Public Types inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace
using Ptr = AddressSpacePtr
 Shared-ownership pointer.
 
using Purpose = AddressSpacePurpose
 Purpose for the address space.
 

Public Member Functions

virtual void clear () override
 Clear memory.
 
virtual AddressSet getWritersUnion (const SValuePtr &addr, size_t nBits, RiscOperators *addrOps, RiscOperators *valOps)=0
 Writers for an address.
 
virtual AddressSet getWritersIntersection (const SValuePtr &addr, size_t nBits, RiscOperators *addrOps, RiscOperators *valOps)=0
 Writers for an address.
 
virtual std::vector< MemoryCellPtrmatchingCells (MemoryCell::Predicate &) const =0
 Find all matching cells.
 
virtual std::vector< MemoryCellPtrleadingCells (MemoryCell::Predicate &) const =0
 Find leading matching cells.
 
virtual void eraseMatchingCells (MemoryCell::Predicate &)=0
 Remove all matching cells.
 
virtual void eraseLeadingCells (MemoryCell::Predicate &)=0
 Remove leading matching cells.
 
virtual void traverse (MemoryCell::Visitor &)=0
 Traverse and modify cells.
 
virtual void updateReadProperties (const CellList &)
 Adjust I/O properties after reading memory.
 
virtual void updateWriteProperties (const CellList &, InputOutputPropertySet)
 Adjust I/O properties after writing memory.
 
void eraseNonWritten ()
 Erase cells that have no writers.
 
std::vector< MemoryCellPtrallCells () const
 All cells.
 
virtual MemoryCellPtr latestWrittenCell () const
 Property: Cell most recently written.
 
virtual void latestWrittenCell (const MemoryCellPtr &)
 Property: Cell most recently written.
 
- Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState
virtual MemoryStatePtr create (const SValuePtr &addrProtoval, const SValuePtr &valProtoval) const =0
 Virtual allocating constructor.
 
SValuePtr get_addr_protoval () const
 Return the address protoval.
 
SValuePtr get_val_protoval () const
 Return the value protoval.
 
virtual SValuePtr readMemory (const SValuePtr &address, const SValuePtr &dflt, RiscOperators *addrOps, RiscOperators *valOps)=0
 Read a value from memory.
 
virtual SValuePtr peekMemory (const SValuePtr &address, const SValuePtr &dflt, RiscOperators *addrOps, RiscOperators *valOps)=0
 Read a value from memory without side effects.
 
virtual void writeMemory (const SValuePtr &addr, const SValuePtr &value, RiscOperators *addrOps, RiscOperators *valOps)=0
 Write a value to memory.
 
MergerPtr merger () const
 Property: Merger.
 
void merger (const MergerPtr &)
 Property: Merger.
 
bool byteRestricted () const
 Indicates whether memory cell values are required to be eight bits wide.
 
void byteRestricted (bool)
 Indicates whether memory cell values are required to be eight bits wide.
 
ByteOrder::Endianness get_byteOrder () const
 Memory byte order.
 
void set_byteOrder (ByteOrder::Endianness)
 Memory byte order.
 
- Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace
virtual Ptr clone () const =0
 Deep-copy of this address space.
 
virtual SValuePtr read (const AddressSpaceAddress &, const SValuePtr &dflt, RiscOperators &addrOps, RiscOperators &valOps)
 Read a value from the address space.
 
virtual SValuePtr peek (const AddressSpaceAddress &, const SValuePtr &dflt, RiscOperators &addrOps, RiscOperators &valOps)
 Read without causing side effects.
 
virtual void write (const AddressSpaceAddress &, const SValuePtr &value, RiscOperators &addrOps, RiscOperators &valOps)
 Write a value to an address space.
 
virtual void hash (Combinatorics::Hasher &, RiscOperators *addrOps, RiscOperators *valOps) const =0
 Hash this address space.
 
virtual bool merge (const AddressSpacePtr &other, RiscOperators *addrOps, RiscOperators *valOps)=0
 Merge address spaces for data flow analysis.
 
std::string printableName () const
 Printable name for this address space.
 
Purpose purpose () const
 Property: Purpose of this address space.
 
void purpose (Purpose)
 Property: Purpose of this address space.
 
const std::string & name () const
 Property: Name for this address space.
 
void name (const std::string &)
 Property: Name for this address space.
 
void print (std::ostream &, const std::string &prefix="") const
 Print an address space.
 
virtual void print (std::ostream &, Formatter &) const =0
 Print an address space.
 
WithFormatter with_format (Formatter &)
 Used for printing address spaces with formatting.
 
WithFormatter operator+ (Formatter &)
 Used for printing address spaces with formatting.
 
WithFormatter operator+ (const std::string &linePrefix)
 Used for printing address spaces with formatting.
 

Static Public Member Functions

static MemoryCellStatePtr promote (const BaseSemantics::AddressSpacePtr &)
 Promote a base address space pointer to a BaseSemantics::MemoryCellState pointer.
 
- Static Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState
static MemoryStatePtr promote (const AddressSpacePtr &)
 

Protected Member Functions

 MemoryCellState (const MemoryCellPtr &protocell)
 
 MemoryCellState (const SValuePtr &addrProtoval, const SValuePtr &valProtoval)
 
 MemoryCellState (const MemoryCellState &other)
 
- Protected Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState
 MemoryState (const SValuePtr &addrProtoval, const SValuePtr &valProtoval)
 
 MemoryState (const MemoryStatePtr &other)
 
- Protected Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace
 AddressSpace (Purpose, const std::string &name)
 
 AddressSpace (const AddressSpace &)
 
AddressSpaceoperator= (const AddressSpace &)=delete
 

Protected Attributes

MemoryCellPtr protocell
 
MemoryCellPtr latestWrittenCell_
 

Member Typedef Documentation

◆ Super

Base type.

Definition at line 24 of file BaseSemantics/MemoryCellState.h.

◆ Ptr

Shared-ownership pointer.

Definition at line 27 of file BaseSemantics/MemoryCellState.h.

Member Function Documentation

◆ promote()

static MemoryCellStatePtr Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::promote ( const BaseSemantics::AddressSpacePtr )
static

Promote a base address space pointer to a BaseSemantics::MemoryCellState pointer.

The memory state m must have a BaseSemantics::MemoryCellState dynamic type.

◆ clear()

virtual void Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::clear ( )
overridevirtual

◆ getWritersUnion()

virtual AddressSet Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::getWritersUnion ( const SValuePtr addr,
size_t  nBits,
RiscOperators addrOps,
RiscOperators valOps 
)
pure virtual

Writers for an address.

Returns the set of all writers that wrote to the specified address or any address that might alias the specified address. Memory states that don't normally compute aliases (e.g., MemoryCellMap) return only the writers for the specified address, not any aliases, and in this case getWritersUnion and getWritersIntersection return the same set.

Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.

◆ getWritersIntersection()

virtual AddressSet Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::getWritersIntersection ( const SValuePtr addr,
size_t  nBits,
RiscOperators addrOps,
RiscOperators valOps 
)
pure virtual

Writers for an address.

Returns the set of all writers that wrote to the specified address and any address that might alias the specified address. Memory states that don't normally compute aliases (e.g., MemoryCellMap) return only the writers for the specified address, not any aliases, and in this case getWritersUnion and getWritersIntersection return the same set.

Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.

◆ matchingCells()

virtual std::vector< MemoryCellPtr > Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::matchingCells ( MemoryCell::Predicate ) const
pure virtual

Find all matching cells.

Returns a vector of cells for which the predicate returns true.

Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.

◆ leadingCells()

virtual std::vector< MemoryCellPtr > Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::leadingCells ( MemoryCell::Predicate ) const
pure virtual

Find leading matching cells.

Returns the vector of cells obtained by invoking the predicate on each cell and returning those leading cells for which the predicate is true. The first cell for which the predicate is false terminates the traversal and does not appear in the return value.

Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.

◆ eraseMatchingCells()

virtual void Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::eraseMatchingCells ( MemoryCell::Predicate )
pure virtual

Remove all matching cells.

Traverses the memory cells and removes those for which the predicate returns true.

Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.

◆ eraseLeadingCells()

virtual void Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::eraseLeadingCells ( MemoryCell::Predicate )
pure virtual

Remove leading matching cells.

Traverses the memory cells and removes those for which the predicate returns true. The traversal is terminated the first time the predicate returns false.

Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.

◆ traverse()

virtual void Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::traverse ( MemoryCell::Visitor )
pure virtual

◆ updateReadProperties()

virtual void Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::updateReadProperties ( const CellList )
virtual

Adjust I/O properties after reading memory.

Adjust I/O properties in the specified cells to make it look like they were just read. This adds the READ property and may also add READ_AFTER_WRITE, READ_BEFORE_WRITE, and/or READ_UNINITIALIZED. This should be called automatically by each BaseSemantics::MemoryState::readMemory implementation.

◆ updateWriteProperties()

virtual void Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::updateWriteProperties ( const CellList ,
InputOutputPropertySet   
)
virtual

Adjust I/O properties after writing memory.

Adjust I/O properties in the specified cells to make it look like they were just read. This adds the specified properties to the list of I/O properties for the cell.

Member Data Documentation

◆ protocell

MemoryCellPtr Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::protocell
protected

Definition at line 30 of file BaseSemantics/MemoryCellState.h.

◆ latestWrittenCell_

MemoryCellPtr Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::latestWrittenCell_
protected

Definition at line 31 of file BaseSemantics/MemoryCellState.h.


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