Machine Code Generation for C++
Builder interface, nodes, and passes.
Both BaseBuilder and BaseCompiler interfaces describe emitters that emit into a representation that allows further processing. The code stored in such representation is completely safe to be patched, simplified, reordered, obfuscated, removed, injected, analyzed, or processed some other way. Each instruction, label, directive, or other building block is stored as BaseNode (or derived class like InstNode or LabelNode) and contains all the information necessary to pass that node later to the assembler.
BaseBuilder is an emitter that inherits from BaseEmitter interface. It was designed to provide a maximum compatibility with the existing BaseAssembler emitter so users can move from assembler to builder when needed, for example to implement post-processing, which is not possible with Assembler.
Invalid node (internal, don't use).
Node is SectionNode.
Node is LabelNode.
Node is AlignNode.
Node is EmbedDataNode.
Node is EmbedLabelNode.
Node is EmbedLabelDeltaNode.
Node is ConstPoolNode.
Node is CommentNode.
Node is SentinelNode.
Node is JumpNode (acts as InstNode).
Node is FuncNode (acts as LabelNode).
Node is FuncRetNode (acts as InstNode).
Node is InvokeNode (acts as InstNode).
First id of a user-defined node.
Node flags, specify what the node is and/or does.
Node is code that can be executed (instruction, label, align, etc...).
Node is data that cannot be executed (data, const-pool, etc...).
Node is informative, can be removed and ignored.
Node can be safely removed if unreachable.
Node does nothing when executed (label, align, explicit nop).
Node is an instruction or acts as it.
Node is a label or acts as it.
Node is active (part of the code).
Type of the sentinel (purery informative purpose).
Type of the sentinel is not known.
This is a sentinel used at the end of FuncNode.