summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins')
-rw-r--r--lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp47
-rw-r--r--lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h15
2 files changed, 41 insertions, 21 deletions
diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
index 0abfd93b112..340d90637b9 100644
--- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
+++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
@@ -100,19 +100,27 @@ void
DisassemblerLLVM::Instruction::Dump
(
Stream *s,
- lldb::addr_t base_address,
- DataExtractor *bytes,
+ lldb_private::Address *inst_addr_ptr,
+ const DataExtractor *bytes,
uint32_t bytes_offset,
- const lldb_private::ExecutionContext exe_ctx,
+ const lldb_private::ExecutionContext& exe_ctx,
bool raw
)
{
const size_t opcodeColumnWidth = 7;
const size_t operandColumnWidth = 25;
+ ExecutionContextScope *exe_scope = exe_ctx.GetBestExecutionContextScope();
// If we have an address, print it out
- if (base_address != LLDB_INVALID_ADDRESS)
- s->Printf("0x%llx: ", base_address);
+ if (inst_addr_ptr)
+ {
+ if (inst_addr_ptr->Dump (s,
+ exe_scope,
+ Address::DumpStyleLoadAddress,
+ Address::DumpStyleModuleWithFileAddress,
+ 0))
+ s->PutCString(": ");
+ }
// If we are supposed to show bytes, "bytes" will be non-NULL.
if (bytes)
@@ -131,9 +139,15 @@ DisassemblerLLVM::Instruction::Dump
int currentOpIndex = -1;
- RegisterReaderArg rra(base_address + EDInstByteSize(m_inst), m_disassembler);
-
lldb_private::Process *process = exe_ctx.process;
+ addr_t base_addr = LLDB_INVALID_ADDRESS;
+ if (process && process->IsAlive())
+ base_addr = inst_addr_ptr->GetLoadAddress (process);
+ if (base_addr == LLDB_INVALID_ADDRESS)
+ base_addr = inst_addr_ptr->GetFileAddress ();
+
+ RegisterReaderArg rra(base_addr + EDInstByteSize(m_inst), m_disassembler);
+
bool printTokenized = false;
@@ -228,13 +242,21 @@ DisassemblerLLVM::Instruction::Dump
}
lldb_private::Address so_addr;
- if (process)
+ if (process && process->IsAlive())
+ {
+ if (process->ResolveLoadAddress (operand_value, so_addr))
+ so_addr.Dump(&comment, exe_scope, Address::DumpStyleResolvedDescription, Address::DumpStyleSectionNameOffset);
+ }
+ else if (inst_addr_ptr)
{
- if (process->ResolveLoadAddress(operand_value, so_addr))
+ Module *module = inst_addr_ptr->GetModule();
+ if (module)
{
- so_addr.Dump(&comment, process, Address::DumpStyleResolvedDescription, Address::DumpStyleSectionNameOffset);
+ if (module->ResolveFileAddress (operand_value, so_addr))
+ so_addr.Dump(&comment, exe_scope, Address::DumpStyleResolvedDescription, Address::DumpStyleSectionNameOffset);
}
}
+
} // EDEvaluateOperand
} // EDOperandIsMemory
} // EDGetOperand
@@ -364,12 +386,11 @@ DisassemblerLLVM::~DisassemblerLLVM()
}
size_t
-DisassemblerLLVM::ParseInstructions
+DisassemblerLLVM::DecodeInstructions
(
const DataExtractor& data,
uint32_t data_offset,
- uint32_t num_instructions,
- lldb::addr_t base_addr
+ uint32_t num_instructions
)
{
size_t total_inst_byte_size = 0;
diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h
index 98166cb558c..7116e595233 100644
--- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h
+++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h
@@ -32,10 +32,10 @@ public:
void
Dump (lldb_private::Stream *s,
- lldb::addr_t base_address,
- lldb_private::DataExtractor *bytes,
+ lldb_private::Address *instr_addr_ptr,
+ const lldb_private::DataExtractor *bytes,
uint32_t bytes_offset,
- const lldb_private::ExecutionContext exe_ctx,
+ const lldb_private::ExecutionContext& exe_ctx,
bool raw);
bool
@@ -78,11 +78,10 @@ public:
~DisassemblerLLVM();
size_t
- ParseInstructions (const lldb_private::DataExtractor& data,
- uint32_t data_offset,
- uint32_t num_instructions,
- lldb::addr_t base_addr);
-
+ DecodeInstructions (const lldb_private::DataExtractor& data,
+ uint32_t data_offset,
+ uint32_t num_instructions);
+
//------------------------------------------------------------------
// PluginInterface protocol
//------------------------------------------------------------------
OpenPOWER on IntegriCloud