https://llvm.org/bugs/show_bug.cgi?id=23613
Bug ID: 23613 Summary: Erroneous Dissassembly obtained when breakpoint is inserted Product: lldb Version: unspecified Hardware: PC OS: Linux Status: NEW Severity: normal Priority: P Component: All Bugs Assignee: lldb-dev@cs.uiuc.edu Reporter: ravithejaw...@gmail.com Classification: Unclassified Created attachment 14356 --> https://llvm.org/bugs/attachment.cgi?id=14356&action=edit C++ source file When a breakpoint is inserted at an instruction, the subsequent instructions are erroneously decoded by LLDB. Possible reason could be that while decoding instructions (when a breakpoint is also inserted), LLDB should substitute the complete original instruction before decoding. Instead the dissassembly is decoded correctly till the breakpoint instruction but since the breakpoint instruction is basically modifying 1 byte of an already existing instruction, LLDB interprets the rest of the bytes as new instructions. Disassembly by GDB 0x0000000000400922 <+0>: push %rbp 0x0000000000400923 <+1>: mov %rsp,%rbp 0x0000000000400926 <+4>: sub $0x30,%rsp 0x000000000040092a <+8>: mov %rdi,-0x18(%rbp) 0x000000000040092e <+12>: mov %esi,-0x1c(%rbp) 0x0000000000400931 <+15>: mov %edx,-0x20(%rbp) 0x0000000000400934 <+18>: mov %ecx,-0x24(%rbp) => 0x0000000000400937 <+21>: mov -0x1c(%rbp),%eax 0x000000000040093a <+24>: cmp -0x20(%rbp),%eax 0x000000000040093d <+27>: jle 0x40094b <binary_search(int*, int, int, int)+41> 0x000000000040093f <+29>: movl $0xffffffff,-0x8(%rbp) 0x0000000000400946 <+36>: jmpq 0x4009d9 <binary_search(int*, int, int, int)+183> Corresponding Disassembly by LLDB 0x400922 <+0>: pushq %rbp 0x400923 <+1>: movq %rsp, %rbp 0x400926 <+4>: subq $0x30, %rsp 0x40092a <+8>: movq %rdi, -0x18(%rbp) 0x40092e <+12>: movl %esi, -0x1c(%rbp) 0x400931 <+15>: movl %edx, -0x20(%rbp) 0x400934 <+18>: movl %ecx, -0x24(%rbp) -> 0x400937 <+21>: int3 0x400938 <+22>: inb $0x3b, %al 0x40093b <+25>: loopne 0x4009bc ; <+154> at test.cpp:34 0x40093e <+28>: orb $-0x39, %al 0x400940 <+30>: clc As it can be seen in the disassembly by LLDB, after breakpoint at <+21> the instructions are not correctly decoded. Steps to reproduce 1) Compile attached source with g++ (with -g option) 2) Start debugging with LLDB 3) Insert breakpoint at binary_search (b binary_search) 4) Execute command "disassemble" -- You are receiving this mail because: You are the assignee for the bug.
_______________________________________________ lldb-dev mailing list lldb-dev@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev