diff options
author | Sean Callanan <scallanan@apple.com> | 2010-07-23 02:19:15 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2010-07-23 02:19:15 +0000 |
commit | 6dde30e964aa65c5173c00dd72ae70c31d052ab6 (patch) | |
tree | 9633c6c7906bae41ac3cd340d8e4892871ada96f /lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp | |
parent | 318e40360d7778c3cd2a4aa737bef9a08e62080e (diff) | |
download | bcm5719-llvm-6dde30e964aa65c5173c00dd72ae70c31d052ab6.tar.gz bcm5719-llvm-6dde30e964aa65c5173c00dd72ae70c31d052ab6.zip |
Added extensive logging of the code that is actually going
to be executed by the inferior. This required explicit support
from RecordingMemoryManager for finding the address range
belonging to a particular function.
Also fixed a bug in DisassemblerLLVM where the disassembler
assumed there was an AddressRange available even when it was
NULL.
llvm-svn: 109209
Diffstat (limited to 'lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp')
-rw-r--r-- | lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp index 945ef871d68..ba98cb5a450 100644 --- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp +++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp @@ -140,14 +140,18 @@ DisassemblerLLVM::Instruction::Dump int currentOpIndex = -1; 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); - + std::auto_ptr<RegisterReaderArg> rra; + + if (!raw) + { + 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 (); + + rra.reset(new RegisterReaderArg(base_addr + EDInstByteSize(m_inst), m_disassembler)); + } bool printTokenized = false; @@ -228,7 +232,7 @@ DisassemblerLLVM::Instruction::Dump { uint64_t operand_value; - if (!EDEvaluateOperand(&operand_value, operand, IPRegisterReader, &rra)) + if (!EDEvaluateOperand(&operand_value, operand, IPRegisterReader, rra.get())) { if (EDInstIsBranch(m_inst)) { |