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
This commit is contained in:
Greg Clayton 2011-10-28 23:44:55 +00:00
parent eddeb3b96f
commit 1848afbbe8
2 changed files with 19 additions and 17 deletions

View File

@ -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;
}

View File

@ -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)
{