forked from OSchip/llvm-project
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:
parent
eddeb3b96f
commit
1848afbbe8
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue