diff options
author | dim <dim@FreeBSD.org> | 2014-11-24 17:02:24 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2014-11-24 17:02:24 +0000 |
commit | 2c8643c6396b0a3db33430cf9380e70bbb9efce0 (patch) | |
tree | 4df130b28021d86e13bf4565ef58c1c5a5e093b4 /contrib/llvm/lib/MC/MCDisassembler | |
parent | 678318cd20f7db4e6c6b85d83fe00fa327b04fca (diff) | |
parent | e27feadae0885aa074df58ebfda2e7a7f7a7d590 (diff) | |
download | FreeBSD-src-2c8643c6396b0a3db33430cf9380e70bbb9efce0.zip FreeBSD-src-2c8643c6396b0a3db33430cf9380e70bbb9efce0.tar.gz |
Merge llvm 3.5.0 release from ^/vendor/llvm/dist, resolve conflicts, and
preserve our customizations, where necessary.
Diffstat (limited to 'contrib/llvm/lib/MC/MCDisassembler')
-rw-r--r-- | contrib/llvm/lib/MC/MCDisassembler/Disassembler.cpp | 50 | ||||
-rw-r--r-- | contrib/llvm/lib/MC/MCDisassembler/Disassembler.h | 17 |
2 files changed, 31 insertions, 36 deletions
diff --git a/contrib/llvm/lib/MC/MCDisassembler/Disassembler.cpp b/contrib/llvm/lib/MC/MCDisassembler/Disassembler.cpp index a0066c8..0530c26 100644 --- a/contrib/llvm/lib/MC/MCDisassembler/Disassembler.cpp +++ b/contrib/llvm/lib/MC/MCDisassembler/Disassembler.cpp @@ -24,9 +24,6 @@ #include "llvm/Support/MemoryObject.h" #include "llvm/Support/TargetRegistry.h" -namespace llvm { -class Target; -} // namespace llvm using namespace llvm; // LLVMCreateDisasm() creates a disassembler for the TripleName. Symbolic @@ -44,20 +41,20 @@ LLVMDisasmContextRef LLVMCreateDisasmCPU(const char *Triple, const char *CPU, std::string Error; const Target *TheTarget = TargetRegistry::lookupTarget(Triple, Error); if (!TheTarget) - return 0; + return nullptr; const MCRegisterInfo *MRI = TheTarget->createMCRegInfo(Triple); if (!MRI) - return 0; + return nullptr; // Get the assembler info needed to setup the MCContext. const MCAsmInfo *MAI = TheTarget->createMCAsmInfo(*MRI, Triple); if (!MAI) - return 0; + return nullptr; const MCInstrInfo *MII = TheTarget->createMCInstrInfo(); if (!MII) - return 0; + return nullptr; // Package up features to be passed to target/subtarget std::string FeaturesStr; @@ -65,42 +62,40 @@ LLVMDisasmContextRef LLVMCreateDisasmCPU(const char *Triple, const char *CPU, const MCSubtargetInfo *STI = TheTarget->createMCSubtargetInfo(Triple, CPU, FeaturesStr); if (!STI) - return 0; + return nullptr; // Set up the MCContext for creating symbols and MCExpr's. - MCContext *Ctx = new MCContext(MAI, MRI, 0); + MCContext *Ctx = new MCContext(MAI, MRI, nullptr); if (!Ctx) - return 0; + return nullptr; // Set up disassembler. - MCDisassembler *DisAsm = TheTarget->createMCDisassembler(*STI); + MCDisassembler *DisAsm = TheTarget->createMCDisassembler(*STI, *Ctx); if (!DisAsm) - return 0; + return nullptr; - OwningPtr<MCRelocationInfo> RelInfo( - TheTarget->createMCRelocationInfo(Triple, *Ctx)); + std::unique_ptr<MCRelocationInfo> RelInfo( + TheTarget->createMCRelocationInfo(Triple, *Ctx)); if (!RelInfo) - return 0; + return nullptr; + + std::unique_ptr<MCSymbolizer> Symbolizer(TheTarget->createMCSymbolizer( + Triple, GetOpInfo, SymbolLookUp, DisInfo, Ctx, RelInfo.release())); + DisAsm->setSymbolizer(std::move(Symbolizer)); - OwningPtr<MCSymbolizer> Symbolizer( - TheTarget->createMCSymbolizer(Triple, GetOpInfo, SymbolLookUp, DisInfo, - Ctx, RelInfo.take())); - DisAsm->setSymbolizer(Symbolizer); - DisAsm->setupForSymbolicDisassembly(GetOpInfo, SymbolLookUp, DisInfo, - Ctx, RelInfo); // Set up the instruction printer. int AsmPrinterVariant = MAI->getAssemblerDialect(); MCInstPrinter *IP = TheTarget->createMCInstPrinter(AsmPrinterVariant, *MAI, *MII, *MRI, *STI); if (!IP) - return 0; + return nullptr; LLVMDisasmContext *DC = new LLVMDisasmContext(Triple, DisInfo, TagType, GetOpInfo, SymbolLookUp, TheTarget, MAI, MRI, STI, MII, Ctx, DisAsm, IP); if (!DC) - return 0; + return nullptr; DC->setCPU(CPU); return DC; @@ -132,11 +127,11 @@ class DisasmMemoryObject : public MemoryObject { public: DisasmMemoryObject(uint8_t *bytes, uint64_t size, uint64_t basePC) : Bytes(bytes), Size(size), BasePC(basePC) {} - - uint64_t getBase() const { return BasePC; } - uint64_t getExtent() const { return Size; } - int readByte(uint64_t Addr, uint8_t *Byte) const { + uint64_t getBase() const override { return BasePC; } + uint64_t getExtent() const override { return Size; } + + int readByte(uint64_t Addr, uint8_t *Byte) const override { if (Addr - BasePC >= Size) return -1; *Byte = Bytes[Addr - BasePC]; @@ -298,6 +293,7 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes, emitLatency(DC, Inst); emitComments(DC, FormattedOS); + OS.flush(); assert(OutStringSize != 0 && "Output buffer cannot be zero size"); size_t OutputSize = std::min(OutStringSize-1, InsnStr.size()); diff --git a/contrib/llvm/lib/MC/MCDisassembler/Disassembler.h b/contrib/llvm/lib/MC/MCDisassembler/Disassembler.h index 4855af2..d1d40cd 100644 --- a/contrib/llvm/lib/MC/MCDisassembler/Disassembler.h +++ b/contrib/llvm/lib/MC/MCDisassembler/Disassembler.h @@ -18,7 +18,6 @@ #define LLVM_MC_DISASSEMBLER_H #include "llvm-c/Disassembler.h" -#include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/SmallString.h" #include "llvm/Support/raw_ostream.h" #include <string> @@ -56,23 +55,23 @@ private: // LLVMDisasmInstruction(). // // The LLVM target corresponding to the disassembler. - // FIXME: using llvm::OwningPtr<const llvm::Target> causes a malloc error + // FIXME: using std::unique_ptr<const llvm::Target> causes a malloc error // when this LLVMDisasmContext is deleted. const Target *TheTarget; // The assembly information for the target architecture. - llvm::OwningPtr<const llvm::MCAsmInfo> MAI; + std::unique_ptr<const llvm::MCAsmInfo> MAI; // The register information for the target architecture. - llvm::OwningPtr<const llvm::MCRegisterInfo> MRI; + std::unique_ptr<const llvm::MCRegisterInfo> MRI; // The subtarget information for the target architecture. - llvm::OwningPtr<const llvm::MCSubtargetInfo> MSI; + std::unique_ptr<const llvm::MCSubtargetInfo> MSI; // The instruction information for the target architecture. - llvm::OwningPtr<const llvm::MCInstrInfo> MII; + std::unique_ptr<const llvm::MCInstrInfo> MII; // The assembly context for creating symbols and MCExprs. - llvm::OwningPtr<const llvm::MCContext> Ctx; + std::unique_ptr<const llvm::MCContext> Ctx; // The disassembler for the target architecture. - llvm::OwningPtr<const llvm::MCDisassembler> DisAsm; + std::unique_ptr<const llvm::MCDisassembler> DisAsm; // The instruction printer for the target architecture. - llvm::OwningPtr<llvm::MCInstPrinter> IP; + std::unique_ptr<llvm::MCInstPrinter> IP; // The options used to set up the disassembler. uint64_t Options; // The CPU string. |