1#ifndef ROSE_BinaryAnalysis_Unparser_Base_H
2#define ROSE_BinaryAnalysis_Unparser_Base_H
3#include <featureTests.h>
4#ifdef ROSE_ENABLE_BINARY_ANALYSIS
6#include <Rose/BinaryAnalysis/BasicTypes.h>
7#include <Rose/BinaryAnalysis/Partitioner2/BasicTypes.h>
8#include <Rose/BinaryAnalysis/Partitioner2/ControlFlowGraph.h>
9#include <Rose/BinaryAnalysis/Partitioner2/FunctionCallGraph.h>
10#include <Rose/BinaryAnalysis/Reachability.h>
11#include <Rose/BinaryAnalysis/RegisterNames.h>
12#include <Rose/BinaryAnalysis/Unparser/EdgeArrows.h>
13#include <Rose/BinaryAnalysis/Unparser/Settings.h>
14#include <Rose/BitFlags.h>
15#include <Rose/Progress.h>
17#include <Sawyer/Map.h>
18#include <Sawyer/Message.h>
19#include <Sawyer/SharedObject.h>
22namespace BinaryAnalysis {
26typedef std::map<uint64_t, std::string>
LabelMap;
32void initDiagnostics();
42 ROSE_DEPRECATED(
"not called by anything");
76 enum class End {Source, Target};
77 enum class Type {CfgEdge, CfgVertex};
83 CfgEndpoint(
const End end,
const Type type,
const size_t cfgId)
84 : end(end), type(type), cfgId(cfgId) {}
89 CfgEndpoint::Type srcType_;
90 CfgEndpoint::Type tgtType_;
91 std::map<CfgEndpoint, EdgeArrows::EndpointId> cfgToArrow_;
92 std::vector<EdgeArrows::EndpointId> orderedEndpoints_;
104 ArrowMargin(CfgEndpoint::Type srcEndpointType, CfgEndpoint::Type dstEndpointType);
178 std::vector<Style> stack_;
219 void merge(
const Style &style);
237 n_ = stack_.
push(style);
244 n_ = stack_.
push(first);
288 std::string nextInsnLabel_;
291 const Base &frontUnparser_;
292 std::vector<Reachability::ReasonFlags> cfgVertexReachability_;
298 bool isPostInstruction_ =
false;
429 const std::string& nextInsnLabel()
const;
430 void nextInsnLabel(
const std::string&);
438 bool isPostInstruction()
const;
439 void isPostInstruction(
bool);
508 virtual Ptr copy()
const = 0;
565 std::
string operator()(const Partitioner2::PartitionerConstPtr&,
SgAsmInstruction*) const ;
566 std::
string operator()(const Partitioner2::PartitionerConstPtr&,
SgAsmExpression*) const ;
567 std::
string operator()(const Partitioner2::PartitionerConstPtr&, const Partitioner2::BasicBlockPtr&) const ;
568 std::
string operator()(const Partitioner2::PartitionerConstPtr&, const Partitioner2::DataBlockPtr&) const ;
569 std::
string operator()(const Partitioner2::PartitionerConstPtr&, const Partitioner2::FunctionPtr&) const ;
582 void unparse(std::ostream&, const Partitioner2::PartitionerConstPtr&, const Partitioner2::BasicBlockPtr&) const ;
583 void unparse(std::ostream&, const Partitioner2::PartitionerConstPtr&, const Partitioner2::DataBlockPtr&) const ;
584 void unparse(std::ostream&, const Partitioner2::PartitionerConstPtr&, const Partitioner2::FunctionPtr&) const ;
591 std::
string unparse(const Partitioner2::PartitionerConstPtr&, const Partitioner2::BasicBlockPtr&) const ;
592 std::
string unparse(const Partitioner2::PartitionerConstPtr&, const Partitioner2::DataBlockPtr&) const ;
593 std::
string unparse(const Partitioner2::PartitionerConstPtr&, const Partitioner2::FunctionPtr&) const ;
676#ifdef ROSE_ENABLE_ASM_AARCH32
679#ifdef ROSE_ENABLE_ASM_AARCH64
680 virtual std::vector<std::string> emitAarch64AtOperand(std::ostream&, SgAsmAarch64AtOperand*,
State&)
const;
681 virtual std::vector<std::string> emitAarch64BarrierOperand(std::ostream&, SgAsmAarch64BarrierOperand*,
State&)
const;
682 virtual std::vector<std::string> emitAarch64CImmediateOperand(std::ostream&, SgAsmAarch64CImmediateOperand*,
State&)
const;
683 virtual std::vector<std::string> emitAarch64PrefetchOperand(std::ostream&, SgAsmAarch64PrefetchOperand*,
State&)
const;
684 virtual std::vector<std::string> emitAarch64PState(std::ostream&, SgAsmAarch64PState*,
State&)
const;
685 virtual std::vector<std::string> emitAarch64SysMoveOperand(std::ostream&, SgAsmAarch64SysMoveOperand*,
State&)
const;
720 bool isSigned)
const;
748 static std::string
leftJustify(
const std::string&,
size_t nchars);
755 static std::string
juxtaposeColumns(
const std::vector<std::string> &content,
const std::vector<size_t> &minWidths,
756 const std::vector<std::pair<std::string, std::string> > &colorEscapes,
757 const std::string &columnSeparator =
" ");
765 Partitioner2::ControlFlowGraph::ConstEdgeIterator b);
773 Partitioner2::ControlFlowGraph::ConstEdgeIterator b);
779 static std::vector<Partitioner2::ControlFlowGraph::ConstEdgeIterator>
786 static std::vector<Partitioner2::ControlFlowGraph::ConstEdgeIterator>
806#ifdef ROSE_ENABLE_PYTHON_API
813 explicit PythonBase(
const Base::Ptr &base)
815 ASSERT_not_null(base);
818 std::string unparse(
const Partitioner2::PartitionerConstPtr &p)
const {
819 return base_->unparse(p);
822 void print(
const Partitioner2::PartitionerConstPtr &p)
const {
823 base_->unparse(std::cout, p);
Function call information.
Reason
Predefined bit flags for why something is reachable.
Describes (part of) a physical CPU register.
Convert a register descriptor to a name.
State associated with printing arrows in the margin.
void computeLayout()
Compute where arrows go in the margins.
void maybeInsertEndpoint(EdgeArrows::EndpointId)
Insert an arrow endpoint into the ordered list of endpoints.
void maybeInsertArrow(EdgeArrows::EndpointId src, EdgeArrows::EndpointId tgt, size_t arrowId)
Insert an arrow into the graph if it isn't already there.
CfgEndpoint::End whichEnd(EdgeArrows::EndpointId) const
Test whether an endpoint is the source or target of an arrow.
void reset()
Reset the margin arrow state.
bool haveEndpointId(EdgeArrows::EndpointId) const
Test whether we have an endpoint ID.
void atPossibleEndpoint(CfgEndpoint::End, const Partitioner2::ControlFlowGraph::Edge &)
While generating output, indicate what line we're at.
void debug(std::ostream &, const Partitioner2::PartitionerConstPtr &) const
Show some debugging information.
void atPossibleEndpoint(CfgEndpoint::End, const Partitioner2::ControlFlowGraph::Vertex &)
While generating output, indicate what line we're at.
EdgeArrows::EndpointId getEndpoint(CfgEndpoint::End, const Partitioner2::ControlFlowGraph::Edge &)
Get an arrow endpoint.
std::string render()
Destructively render the arrows for a line of output.
CfgEndpoint makeCfgEndpoint(CfgEndpoint::End, const Partitioner2::ControlFlowGraph::Edge &)
Get an arrow endpoint.
Sawyer::Optional< EdgeArrows::EndpointId > findEndpoint(CfgEndpoint::End, const Partitioner2::ControlFlowGraph::Vertex &) const
Test whether we have an endpoint ID for a particular line of output given some info about what's on t...
void arrowStyle(EdgeArrows::ArrowStylePreset, EdgeArrows::ArrowSide)
Set arrow style.
Sawyer::Optional< EdgeArrows::EndpointId > findEndpoint(CfgEndpoint::End, const Partitioner2::ControlFlowGraph::Edge &) const
Test whether we have an endpoint ID for a particular line of output given some info about what's on t...
Abstract base class for unparsers.
virtual void emitFunctionStackDelta(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitExprListExp(std::ostream &, SgAsmExprListExp *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryPreupdate(std::ostream &, SgAsmBinaryPreupdate *, State &) const
Mid-level unparser function.
virtual Settings & settings()=0
Property: Settings associated with this unparser.
virtual std::vector< std::string > emitBinaryDivide(std::ostream &, SgAsmBinaryDivide *, State &) const
Mid-level unparser function.
virtual void emitInstructionPrologue(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual void emitBasicBlockSuccessors(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
void operator()(std::ostream &, const Partitioner2::PartitionerConstPtr &, SgAsmInstruction *) const
Emit the entity to an output stream.
virtual std::vector< std::string > emitFloatValueExpression(std::ostream &, SgAsmFloatValueExpression *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitIntegerValueExpression(std::ostream &, SgAsmIntegerValueExpression *, State &) const
Mid-level unparser function.
virtual void emitFunction(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
static bool ascendingSourceAddress(Partitioner2::ControlFlowGraph::ConstEdgeIterator a, Partitioner2::ControlFlowGraph::ConstEdgeIterator b)
Return true if edges are in order by source address.
void operator()(std::ostream &, const Partitioner2::PartitionerConstPtr &, const Partitioner2::BasicBlockPtr &) const
Emit the entity to an output stream.
virtual bool emitAddress(std::ostream &, const Sawyer::Container::BitVector &, State &, bool always=true) const
Mid-level unparser function.
virtual std::vector< std::string > emitInteger(std::ostream &, const Sawyer::Container::BitVector &, State &, bool isSigned) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryMod(std::ostream &, SgAsmBinaryMod *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryMultiply(std::ostream &, SgAsmBinaryMultiply *, State &) const
Mid-level unparser function.
void operator()(std::ostream &, const Partitioner2::PartitionerConstPtr &, SgAsmExpression *) const
Emit the entity to an output stream.
virtual std::vector< std::string > emitBinarySubtract(std::ostream &, SgAsmBinarySubtract *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitUnaryUnsignedExtend(std::ostream &, SgAsmUnaryUnsignedExtend *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitUnaryMinus(std::ostream &, SgAsmUnaryMinus *, State &) const
Mid-level unparser function.
virtual void emitDataBlockPrologue(std::ostream &, const Partitioner2::DataBlockPtr &, State &) const
Mid-level unparser function.
virtual void emitInstructionOperands(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryMsl(std::ostream &, SgAsmBinaryMsl *, State &) const
Mid-level unparser function.
virtual void emitInstructionFrameDelta(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual void emitFunctionReasons(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual void emitTypeName(std::ostream &, SgAsmType *, State &) const
Mid-level unparser function.
void operator()(std::ostream &, const Partitioner2::PartitionerConstPtr &, const Partitioner2::DataBlockPtr &) const
Emit the entity to an output stream.
virtual std::vector< std::string > emitUnaryTruncate(std::ostream &, SgAsmUnaryTruncate *, State &) const
Mid-level unparser function.
virtual void emitFunctionCallingConvention(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryLsl(std::ostream &, SgAsmBinaryLsl *, State &) const
Mid-level unparser function.
virtual void emitInstructionBody(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual void emitBasicBlockSharing(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
virtual void initializeState(State &) const
Finish initializing the unparser state.
virtual void emitFunctionPrologue(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual void emitDataBlock(std::ostream &, const Partitioner2::DataBlockPtr &, State &) const
Mid-level unparser function.
virtual const Settings & settings() const =0
Property: Settings associated with this unparser.
static bool ascendingTargetAddress(Partitioner2::ControlFlowGraph::ConstEdgeIterator a, Partitioner2::ControlFlowGraph::ConstEdgeIterator b)
Return true if edges are in order by target address.
virtual void emitDataBlockEpilogue(std::ostream &, const Partitioner2::DataBlockPtr &, State &) const
Mid-level unparser function.
virtual void emitInstructionEpilogue(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
void operator()(std::ostream &, SgAsmInstruction *) const
Emit the entity to an output stream.
virtual void emitCommentBlock(std::ostream &, const std::string &, State &, const std::string &prefix=";;; ") const
Mid-level unparser function.
virtual std::vector< std::string > emitSignedInteger(std::ostream &, const Sawyer::Container::BitVector &, State &) const
Mid-level unparser function.
void settings(const Settings &s)
Property: Settings associated with this unparser.
virtual void emitDataBlockBody(std::ostream &, const Partitioner2::DataBlockPtr &, State &) const
Mid-level unparser function.
virtual void emitBasicBlockComment(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
static std::vector< Partitioner2::ControlFlowGraph::ConstEdgeIterator > orderedBlockPredecessors(const Partitioner2::PartitionerConstPtr &, const Partitioner2::BasicBlockPtr &)
Ordered incoming CFG edges.
virtual bool emitAddress(std::ostream &, Address, State &, bool always=true) const
Mid-level unparser function.
virtual void emitInstructionBytes(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual void emitOperand(std::ostream &, SgAsmExpression *, State &) const
Mid-level unparser function.
virtual void emitLinePrefix(std::ostream &, State &) const
Mid-level unparser function.
virtual void emitInstructionAddress(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
Ptr nextUnparser() const
Property: Next parser in chain.
virtual std::vector< std::string > emitIndirectRegisterExpression(std::ostream &, SgAsmIndirectRegisterExpression *, State &) const
Mid-level unparser function.
void nextUnparser(Ptr next)
Property: Next parser in chain.
virtual void emitBasicBlockPrologue(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
virtual void emitBasicBlockReachability(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
void computeGutterArrows(const Partitioner2::FunctionPtr &, State &) const
Compute edge arrows shown in the left margin.
virtual std::vector< std::string > emitUnsignedInteger(std::ostream &, const Sawyer::Container::BitVector &, State &) const
Mid-level unparser function.
virtual bool suppressFallThroughEdge(const Partitioner2::ControlFlowGraph::Edge &, const Partitioner2::BasicBlockPtr &src, const Partitioner2::BasicBlockPtr &tgt, State &) const
Predicate to test whether a CFG edge is a suppressable fallthrough edge.
virtual std::vector< std::string > emitMemoryReferenceExpression(std::ostream &, SgAsmMemoryReferenceExpression *, State &) const
Mid-level unparser function.
virtual void emitOperandEpilogue(std::ostream &, SgAsmExpression *, State &) const
Mid-level unparser function.
virtual void emitFunctionMayReturn(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryPostupdate(std::ostream &, SgAsmBinaryPostupdate *, State &) const
Mid-level unparser function.
virtual void emitDataBlockSourceLocation(std::ostream &, const Partitioner2::DataBlockPtr &, State &) const
Mid-level unparser function.
virtual void emitBasicBlockEpilogue(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
void operator()(std::ostream &, const Partitioner2::PartitionerConstPtr &) const
Emit the entity to an output stream.
virtual void emitInstructionComment(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryAsr(std::ostream &, SgAsmBinaryAsr *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitRiscOperation(std::ostream &, SgAsmRiscOperation *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryAdd(std::ostream &, SgAsmBinaryAdd *, State &) const
Mid-level unparser function.
std::string operator()(const Partitioner2::PartitionerConstPtr &, const Progress::Ptr &=Progress::Ptr()) const
Emit the entity to a string.
virtual void emitExpression(std::ostream &, SgAsmExpression *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitUnarySignedExtend(std::ostream &, SgAsmUnarySignedExtend *, State &) const
Mid-level unparser function.
static std::vector< Partitioner2::ControlFlowGraph::ConstEdgeIterator > orderedBlockSuccessors(const Partitioner2::PartitionerConstPtr &, const Partitioner2::BasicBlockPtr &)
Ordered outgoing CFG edges.
void operator()(std::ostream &, const Partitioner2::PartitionerConstPtr &, const Partitioner2::FunctionPtr &) const
Emit the entity to an output stream.
virtual void emitInstructionStackDelta(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual void emitBasicBlock(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
virtual void emitBasicBlockPredecessors(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
virtual void emitRegister(std::ostream &, RegisterDescriptor, State &) const
Mid-level unparser function.
virtual void emitBasicBlockSourceLocation(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
virtual void emitFunctionCallers(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
static std::string juxtaposeColumns(const std::vector< std::string > &content, const std::vector< size_t > &minWidths, const std::vector< std::pair< std::string, std::string > > &colorEscapes, const std::string &columnSeparator=" ")
Render a table row.
virtual void emitBasicBlockSeparator(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
virtual void emitBasicBlockBody(std::ostream &, const Partitioner2::BasicBlockPtr &, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryConcat(std::ostream &, SgAsmBinaryConcat *, State &) const
Mid-level unparser function.
void unparse(std::ostream &, const Partitioner2::PartitionerConstPtr &, const Progress::Ptr &=Progress::Ptr()) const
High-level unparsing function.
virtual std::vector< std::string > emitBinaryLsr(std::ostream &, SgAsmBinaryLsr *, State &) const
Mid-level unparser function.
virtual void emitFunctionEpilogue(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual void emitInstruction(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitDirectRegisterExpression(std::ostream &, SgAsmDirectRegisterExpression *, State &) const
Mid-level unparser function.
virtual void emitFunctionBody(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitBinaryRor(std::ostream &, SgAsmBinaryRor *, State &) const
Mid-level unparser function.
Architecture::BaseConstPtr architecture() const
Property: Architecture.
virtual void emitInstructionMnemonic(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual void emitFunctionComment(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual void emitFunctionCallees(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual void emitFunctionSourceLocation(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitStackExpression(std::ostream &, SgAsmStackExpression *, State &) const
Mid-level unparser function.
virtual void emitInstructionSemantics(std::ostream &, SgAsmInstruction *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitRegisterNames(std::ostream &, SgAsmRegisterNames *, State &) const
Mid-level unparser function.
static std::string leftJustify(const std::string &, size_t nchars)
Render a string left justified.
virtual void emitOperandPrologue(std::ostream &, SgAsmExpression *, State &) const
Mid-level unparser function.
virtual std::vector< std::string > emitUnaryPlus(std::ostream &, SgAsmUnaryPlus *, State &) const
Mid-level unparser function.
virtual void updateIntraFunctionArrows(State &) const
Calculate intra-function arrows.
virtual void emitOperandBody(std::ostream &, SgAsmExpression *, State &) const
Mid-level unparser function.
virtual void emitFunctionNoopAnalysis(std::ostream &, const Partitioner2::FunctionPtr &, State &) const
Mid-level unparser function.
bool hasSuppressedFallThroughEdge(const Partitioner2::BasicBlockPtr &src, const Partitioner2::BasicBlockPtr &dst, State &) const
Test whether there are any fall-through edges between the two specified basic blocks.
virtual std::vector< std::string > emitByteOrder(std::ostream &, SgAsmByteOrder *, State &) const
Mid-level unparser function.
Renders textual margin arrows.
ArrowSide
Specifies on which side of the output the arrows appear.
size_t EndpointId
Endpoint identification number.
ArrowStylePreset
Arrow style presets.
OutputPart
Parts of the output.
Partitioner2::BasicBlockPtr previousBasicBlock() const
Points to a relevant basic block.
const std::vector< Reachability::ReasonFlags > cfgVertexReachability() const
Property: Reachability analysis results.
ArrowMargin & intraFunctionBlockArrows()
User-defined intra-function margin arrows.
ArrowMargin & globalBlockArrows()
User-defined arrows to basic blocks across entire output.
ArrowMargin & intraFunctionCfgArrows()
Control flow graph arrows within a function.
void previousBasicBlock(const Partitioner2::BasicBlockPtr &)
Points to a relevant basic block.
Partitioner2::BasicBlockPtr nextBasicBlock() const
Points to a relevant basic block.
std::string reachabilityName(Reachability::ReasonFlags value) const
Assign a reachability name to a reachability value.
Partitioner2::BasicBlockPtr currentBasicBlock() const
Points to a relevant basic block.
void currentBasicBlock(const Partitioner2::BasicBlockPtr &)
Points to a relevant basic block.
const Base & frontUnparser() const
First unparser in the chained list of unparsers.
Sawyer::Container::Map< Address, std::string > AddrString
Map from address to string.
void nextBasicBlock(const Partitioner2::BasicBlockPtr &)
Points to a relevant basic block.
const ArrowMargin & intraFunctionCfgArrows() const
Control flow graph arrows within a function.
void thisIsBasicBlockFirstInstruction()
Call this when you're about to output the first instruction of a basic block.
const StyleStack & styleStack() const
Property: Stack of styles.
Partitioner2::PartitionerConstPtr partitioner() const
Property: Partitioner, which may be null.
StyleStack & styleStack()
Property: Stack of styles.
Reachability::ReasonFlags isCfgVertexReachable(size_t vertexId) const
Returns reachability based on the cfgVertexReachability property.
void rotateBasicBlocks(const Partitioner2::BasicBlockPtr ¤t, const Partitioner2::BasicBlockPtr &next)
Rotate the basic block pointers.
void reachabilityName(Reachability::Reason value, const std::string &name)
Assign a reachability name to a reachability value.
const ArrowMargin & intraFunctionBlockArrows() const
User-defined intra-function margin arrows.
const Partitioner2::FunctionCallGraph & cg() const
Property: Call grap, which may be empty.
const ArrowMargin & globalBlockArrows() const
User-defined arrows to basic blocks across entire output.
void cfgVertexReachability(const std::vector< Reachability::ReasonFlags > &)
Property: Reachability analysis results.
void thisIsBasicBlockLastInstruction()
Call this when you're about to output the last instruction of a basic block.
Pushes a style and arranges for it to be popped later.
std::string render() const
Render style entry.
StyleGuard(StyleStack &stack, const Style &style)
Push style onto stack.
const Style & previous() const
Style before pushing.
std::string restore() const
Render style exit.
const Style & current() const
Current merged style.
size_t push(const Style &)
Push style onto stack.
const Style & current() const
Merged style.
size_t size() const
Number of styles on the stack.
void reset()
Clear the stack.
void colorization(const Color::Colorization c)
Property: Colorization settings.
Color::Colorization colorization() const
Property: Colorization settings.
void popTo(size_t)
Pop until stack is a certain size.
void pop()
Pop top style from stack.
A general, thread-safe way to report progress made on some task.
Container associating values with keys.
Holds a value or nothing.
Base class for reference counted objects.
Operand referencing a Co-processor.
Expression that adds two operands.
Expression that performs an arithmetic, sign-bit preserving right shift.
Expression that concatenates two values to form a wider value.
Expression that divides the first operand by the second.
Expression that performs a logical left shift operation.
Expression that performs a logical, sign-bit non-preserving right shift.
Expression that returns the remainder when dividing the first operand by the second.
Expression that performs a logical left shift operation filling low-order bits with one.
Expression that multiplies two operands.
Expression that represents an update to a storage location.
Expression that represents an update to a storage location.
Expression that performs a right rotate.
Expression that subtracts the second operand from the first.
Byte order specification.
Expression representing a machine register.
List of expression nodes.
Base class for expressions.
Registers accessed indirectly.
Base class for machine instructions.
Base class for integer values.
Reference to memory locations.
An ordered list of registers.
Static representation of instruction semantics.
Base class for references to a machine register.
Base class for binary types.
Expression represting negation.
Expression representing a (no-op) unary plus operation.
Expression representing sign extending.
Expression representing truncation.
Expression representing unsigned extending.
std::shared_ptr< const Base > BaseConstPtr
Reference counted pointer for Architecture::Base.
std::map< uint64_t, std::string > LabelMap
Map from address to label.
Sawyer::Message::Facility mlog
Diagnostic output for unparsing.
std::string invalidRegister(SgAsmInstruction *, RegisterDescriptor, const RegisterDictionaryPtr &)
Constructs a string to describe the invalid register.
std::uint64_t Address
Address.
Settings that control unparsing.
Control colored command output.