diff options
author | Ed Maste <emaste@FreeBSD.org> | 2015-02-06 22:25:21 +0000 |
---|---|---|
committer | Ed Maste <emaste@FreeBSD.org> | 2015-02-06 22:25:21 +0000 |
commit | 7aa51b7949660007cdf82cd56e16df87703f9319 (patch) | |
tree | 5e5b6a0774e0d93bb4cfa2f9f83b9c41b38c4448 /contrib/llvm/tools/lldb/source/Plugins/Disassembler | |
parent | bd9cc051b34cdcd5148e03e92ed404a0587bacff (diff) | |
parent | 205afe679855a4ce8149cdaa94d3f0868ce796dc (diff) |
Update LLDB snapshot to upstream r225923 (git 2b588ecd)
Sponsored by: DARPA, AFRL
Notes
Notes:
svn path=/projects/clang360-import/; revision=278334
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Plugins/Disassembler')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp | 37 |
1 files changed, 11 insertions, 26 deletions
diff --git a/contrib/llvm/tools/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp b/contrib/llvm/tools/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp index c14371d0589c..97ddbef0e307 100644 --- a/contrib/llvm/tools/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp +++ b/contrib/llvm/tools/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp @@ -21,7 +21,6 @@ #include "llvm/MC/MCRelocationInfo.h" #include "llvm/MC/MCSubtargetInfo.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/MemoryObject.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/TargetSelect.h" #include "llvm/ADT/SmallString.h" @@ -489,41 +488,19 @@ DisassemblerLLVMC::LLVMCDisassembler::~LLVMCDisassembler() { } -namespace { - // This is the memory object we use in GetInstruction. - class LLDBDisasmMemoryObject : public llvm::MemoryObject { - const uint8_t *m_bytes; - uint64_t m_size; - uint64_t m_base_PC; - public: - LLDBDisasmMemoryObject(const uint8_t *bytes, uint64_t size, uint64_t basePC) : - m_bytes(bytes), m_size(size), m_base_PC(basePC) {} - - uint64_t getBase() const { return m_base_PC; } - uint64_t getExtent() const { return m_size; } - - int readByte(uint64_t addr, uint8_t *byte) const { - if (addr - m_base_PC >= m_size) - return -1; - *byte = m_bytes[addr - m_base_PC]; - return 0; - } - }; -} // End Anonymous Namespace - uint64_t DisassemblerLLVMC::LLVMCDisassembler::GetMCInst (const uint8_t *opcode_data, size_t opcode_data_len, lldb::addr_t pc, llvm::MCInst &mc_inst) { - LLDBDisasmMemoryObject memory_object (opcode_data, opcode_data_len, pc); + llvm::ArrayRef<uint8_t> data(opcode_data, opcode_data_len); llvm::MCDisassembler::DecodeStatus status; uint64_t new_inst_size; status = m_disasm_ap->getInstruction(mc_inst, new_inst_size, - memory_object, + data, pc, llvm::nulls(), llvm::nulls()); @@ -832,11 +809,19 @@ const char *DisassemblerLLVMC::SymbolLookup (uint64_t value, value_so_addr.Dump (&ss, target, - Address::DumpStyleResolvedDescriptionNoModule, + Address::DumpStyleResolvedDescriptionNoFunctionArguments, Address::DumpStyleSectionNameOffset); if (!ss.GetString().empty()) { + // If Address::Dump returned a multi-line description, most commonly seen when we + // have multiple levels of inlined functions at an address, only show the first line. + std::string &str(ss.GetString()); + size_t first_eol_char = str.find_first_of ("\r\n"); + if (first_eol_char != std::string::npos) + { + str.erase (first_eol_char); + } m_inst->AppendComment(ss.GetString()); } } |