diff --git a/include/llvm/System/Disassembler.h b/include/llvm/System/Disassembler.h index 37a87614990..fd08f2d42e9 100644 --- a/include/llvm/System/Disassembler.h +++ b/include/llvm/System/Disassembler.h @@ -21,6 +21,10 @@ namespace llvm { namespace sys { +/// This function returns true, if there is possible to use some external +/// disassembler library. False otherwise. +bool hasDisassembler(void); + /// This function provides some "glue" code to call external disassembler /// libraries. std::string disassembleBuffer(uint8_t* start, size_t length, uint64_t pc = 0); diff --git a/lib/ExecutionEngine/JIT/JITEmitter.cpp b/lib/ExecutionEngine/JIT/JITEmitter.cpp index a52ce86d6d3..99dd0c9a4d4 100644 --- a/lib/ExecutionEngine/JIT/JITEmitter.cpp +++ b/lib/ExecutionEngine/JIT/JITEmitter.cpp @@ -876,8 +876,9 @@ bool JITEmitter::finishFunction(MachineFunction &F) { Relocations.clear(); #ifndef NDEBUG - DOUT << "Disassembled code:\n" - << sys::disassembleBuffer(FnStart, FnEnd-FnStart, (uintptr_t)FnStart); + if (sys::hasDisassembler()) + DOUT << "Disassembled code:\n" + << sys::disassembleBuffer(FnStart, FnEnd-FnStart, (uintptr_t)FnStart); #endif return false; diff --git a/lib/System/Disassembler.cpp b/lib/System/Disassembler.cpp index 30d3fb7fcc0..4aec698022f 100644 --- a/lib/System/Disassembler.cpp +++ b/lib/System/Disassembler.cpp @@ -26,6 +26,16 @@ using namespace llvm; +bool llvm::sys::hasDisassembler(void) +{ +#if defined (__i386__) || defined (__amd64__) || defined (__x86_64__) + // We have option to enable udis86 library. + return true; +#else + return false; +#endif +} + std::string llvm::sys::disassembleBuffer(uint8_t* start, size_t length, uint64_t pc) { std::stringstream res;