diff options
Diffstat (limited to 'lib/MC/MCDisassembler/Disassembler.cpp')
| -rw-r--r-- | lib/MC/MCDisassembler/Disassembler.cpp | 26 | 
1 files changed, 8 insertions, 18 deletions
| diff --git a/lib/MC/MCDisassembler/Disassembler.cpp b/lib/MC/MCDisassembler/Disassembler.cpp index ced57e8ca2de..6e636f07f1d1 100644 --- a/lib/MC/MCDisassembler/Disassembler.cpp +++ b/lib/MC/MCDisassembler/Disassembler.cpp @@ -6,11 +6,10 @@  // License. See LICENSE.TXT for details.  //  //===----------------------------------------------------------------------===// +  #include "Disassembler.h" -#include <stdio.h>  #include "llvm-c/Disassembler.h" -#include <string>  #include "llvm/MC/MCAsmInfo.h"  #include "llvm/MC/MCDisassembler.h"  #include "llvm/MC/MCInst.h" @@ -27,17 +26,12 @@ class Target;  } // namespace llvm  using namespace llvm; -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -//  // LLVMCreateDisasm() creates a disassembler for the TripleName.  Symbolic  // disassembly is supported by passing a block of information in the DisInfo -// parameter and specifing the TagType and call back functions as described in +// parameter and specifying the TagType and callback functions as described in  // the header llvm-c/Disassembler.h .  The pointer to the block and the  -// functions can all be passed as NULL.  If successful this returns a -// disassembler context if not it returns NULL. +// functions can all be passed as NULL.  If successful, this returns a +// disassembler context.  If not, it returns NULL.  //  LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo,                                        int TagType, LLVMOpInfoCallback GetOpInfo, @@ -108,7 +102,6 @@ namespace {  // The memory object created by LLVMDisasmInstruction().  //  class DisasmMemoryObject : public MemoryObject { -private:    uint8_t *Bytes;    uint64_t Size;    uint64_t BasePC; @@ -126,7 +119,7 @@ public:      return 0;    }  }; -} // namespace +} // end anonymous namespace  //  // LLVMDisasmInstruction() disassembles a single instruction using the @@ -154,18 +147,15 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,    if (!DisAsm->getInstruction(Inst, Size, MemoryObject, PC, /*REMOVE*/ nulls()))      return 0; -  std::string InsnStr; -  raw_string_ostream OS(InsnStr); +  SmallVector<char, 64> InsnStr; +  raw_svector_ostream OS(InsnStr);    IP->printInst(&Inst, OS);    OS.flush(); +  assert(OutStringSize != 0 && "Output buffer cannot be zero size");    size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());    std::memcpy(OutString, InsnStr.data(), OutputSize);    OutString[OutputSize] = '\0'; // Terminate string.    return Size;  } - -#ifdef __cplusplus -} -#endif // __cplusplus | 
