diff options
| author | Greg Clayton <gclayton@apple.com> | 2011-10-28 23:44:55 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2011-10-28 23:44:55 +0000 |
| commit | 1848afbbe8b70f54d546e50ea46f84f70cff7e10 (patch) | |
| tree | 550da19381643d68c7be36b188f7889849b18ec9 | |
| parent | eddeb3b96fbba466d8a630757fad063b54ee1f76 (diff) | |
| download | bcm5719-llvm-1848afbbe8b70f54d546e50ea46f84f70cff7e10.tar.gz bcm5719-llvm-1848afbbe8b70f54d546e50ea46f84f70cff7e10.zip | |
Fixed the continuation dumping of instructions to properly advance the
previous address only by the number of bytes consumed by the disassembly:
(lldb) x/4i 0x0000000100000ea9
0x100000ea9: 66 c7 45 fa 10 00 movw $16, -6(%rbp)
0x100000eaf: c7 45 f4 20 00 00 00 movl $32, -12(%rbp)
0x100000eb6: e8 47 00 00 00 callq 0x0000000100000f02 ; void f<nullptr_t>(nullptr_t)
0x100000ebb: 8b 45 fc movl -4(%rbp), %eax
(lldb)
0x100000ebe: 48 83 c4 10 addq $16, %rsp
0x100000ec2: 5d popq %rbp
0x100000ec3: c3 ret
0x100000ec4: 90 nop
(lldb)
0x100000ec5: 90 nop
0x100000ec6: 90 nop
0x100000ec7: 90 nop
0x100000ec8: 90 nop
(lldb)
0x100000ec9: 90 nop
0x100000eca: 90 nop
0x100000ecb: 90 nop
0x100000ecc: 90 nop
(lldb)
0x100000ecd: 90 nop
0x100000ece: 90 nop
0x100000ecf: 90 nop
0x100000ed0: 55 pushq %rbp
llvm-svn: 143254
| -rw-r--r-- | lldb/source/Commands/CommandObjectMemory.cpp | 21 | ||||
| -rw-r--r-- | lldb/source/Core/DataExtractor.cpp | 15 |
2 files changed, 19 insertions, 17 deletions
diff --git a/lldb/source/Commands/CommandObjectMemory.cpp b/lldb/source/Commands/CommandObjectMemory.cpp index 7a16a60bc0e..1a0c165429f 100644 --- a/lldb/source/Commands/CommandObjectMemory.cpp +++ b/lldb/source/Commands/CommandObjectMemory.cpp @@ -726,16 +726,17 @@ public: assert (output_stream); - data.Dump (output_stream, - 0, - m_format_options.GetFormat(), - item_byte_size, - item_count, - num_per_line, - addr, - 0, - 0, - exe_scope); + uint32_t bytes_dumped = data.Dump (output_stream, + 0, + m_format_options.GetFormat(), + item_byte_size, + item_count, + num_per_line, + addr, + 0, + 0, + exe_scope); + m_next_addr = addr + bytes_dumped; output_stream->EOL(); return true; } diff --git a/lldb/source/Core/DataExtractor.cpp b/lldb/source/Core/DataExtractor.cpp index ff2d293781a..aa60b03b775 100644 --- a/lldb/source/Core/DataExtractor.cpp +++ b/lldb/source/Core/DataExtractor.cpp @@ -1319,16 +1319,14 @@ DataExtractor::Dump (Stream *s, if (s == NULL) return start_offset; - uint32_t offset; - uint32_t count; - uint32_t line_start_offset; - if (item_format == eFormatPointer) { if (item_byte_size != 4 && item_byte_size != 8) item_byte_size = s->GetAddressByteSize(); } + uint32_t offset = start_offset; + if (item_format == eFormatInstruction) { Target *target = NULL; @@ -1347,8 +1345,11 @@ DataExtractor::Dump (Stream *s, so_addr.SetSection(NULL); } - if (disassembler_sp->DecodeInstructions (so_addr, *this, start_offset, item_count, false)) + size_t bytes_consumed = disassembler_sp->DecodeInstructions (so_addr, *this, start_offset, item_count, false); + + if (bytes_consumed) { + offset += bytes_consumed; const bool show_address = base_addr != LLDB_INVALID_ADDRESS; const bool show_bytes = true; ExecutionContext exe_ctx; @@ -1366,8 +1367,8 @@ DataExtractor::Dump (Stream *s, if ((item_format == eFormatOSType || item_format == eFormatAddressInfo) && item_byte_size > 8) item_format = eFormatHex; - - for (offset = start_offset, line_start_offset = start_offset, count = 0; ValidOffset(offset) && count < item_count; ++count) + uint32_t line_start_offset = start_offset; + for (uint32_t count = 0; ValidOffset(offset) && count < item_count; ++count) { if ((count % num_per_line) == 0) { |

