aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm/tools/lldb/source/Plugins/Disassembler
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2015-02-06 22:25:21 +0000
committerEd Maste <emaste@FreeBSD.org>2015-02-06 22:25:21 +0000
commit7aa51b7949660007cdf82cd56e16df87703f9319 (patch)
tree5e5b6a0774e0d93bb4cfa2f9f83b9c41b38c4448 /contrib/llvm/tools/lldb/source/Plugins/Disassembler
parentbd9cc051b34cdcd5148e03e92ed404a0587bacff (diff)
parent205afe679855a4ce8149cdaa94d3f0868ce796dc (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.cpp37
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());
}
}