Follow up of the introduction of MCSymbolizer.
[oota-llvm.git] / include / llvm / MC / MCDisassembler.h
index 5ad2d98019f6c723568443927fcb1f0f8112c739..e82b0c12291393ac2d677ee7d7475f3c524fb7ea 100644 (file)
@@ -56,7 +56,9 @@ public:
   };
 
   /// Constructor     - Performs initial setup for the disassembler.
-  MCDisassembler(const MCSubtargetInfo &STI) : STI(STI), Symbolizer(0),
+  MCDisassembler(const MCSubtargetInfo &STI) : GetOpInfo(0), SymbolLookUp(0),
+                                               DisInfo(0), Ctx(0),
+                                               STI(STI), Symbolizer(0),
                                                CommentStream(0) {}
 
   virtual ~MCDisassembler();
@@ -83,12 +85,23 @@ public:
                                        uint64_t address,
                                        raw_ostream &vStream,
                                        raw_ostream &cStream) const = 0;
+private:
+  //
+  // Hooks for symbolic disassembly via the public 'C' interface.
+  //
+  // The function to get the symbolic information for operands.
+  LLVMOpInfoCallback GetOpInfo;
+  // The function to lookup a symbol name.
+  LLVMSymbolLookupCallback SymbolLookUp;
+  // The pointer to the block of symbolic information for above call back.
+  void *DisInfo;
+  // The assembly context for creating symbols and MCExprs in place of
+  // immediate operands when there is symbolic information.
+  MCContext *Ctx;
 
 protected:
   // Subtarget information, for instruction decoding predicates if required.
   const MCSubtargetInfo &STI;
-
-private:
   OwningPtr<MCSymbolizer> Symbolizer;
 
 public:
@@ -111,6 +124,13 @@ public:
                                    MCContext *Ctx,
                                    OwningPtr<MCRelocationInfo> &RelInfo);
 
+  LLVMOpInfoCallback getLLVMOpInfoCallback() const { return GetOpInfo; }
+  LLVMSymbolLookupCallback getLLVMSymbolLookupCallback() const {
+    return SymbolLookUp;
+  }
+  void *getDisInfoBlock() const { return DisInfo; }
+  MCContext *getMCContext() const { return Ctx; }
+
   // Marked mutable because we cache it inside the disassembler, rather than
   // having to pass it around as an argument through all the autogenerated code.
   mutable raw_ostream *CommentStream;