Skip to content

Erroneous Dissassembly obtained when breakpoint is inserted #23987

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
llvmbot opened this issue May 21, 2015 · 4 comments
Closed

Erroneous Dissassembly obtained when breakpoint is inserted #23987

llvmbot opened this issue May 21, 2015 · 4 comments
Labels
bugzilla Issues migrated from bugzilla lldb

Comments

@llvmbot
Copy link
Member

llvmbot commented May 21, 2015

Bugzilla Link 23613
Resolution FIXED
Resolved on May 22, 2015 03:49
Version unspecified
OS Linux
Attachments C++ source file
Reporter LLVM Bugzilla Contributor
CC @labath

Extended Description

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"
@labath
Copy link
Collaborator

labath commented May 21, 2015

This bug should be fixed in the SVN. If it still persists with the latest version of lldb, please reopen.

@llvmbot
Copy link
Member Author

llvmbot commented May 21, 2015

Is the fix also available in the git repository ? when merged into the git repository please inform me , I will check again.

@labath
Copy link
Collaborator

labath commented May 21, 2015

The git repository is automatically synced with SVN. Are you saying this still happens with the latest git?

@llvmbot
Copy link
Member Author

llvmbot commented May 22, 2015

Ok, I checked with the updated LLDB, this issue is fixed. I wasn't aware of the frequency of the synchronization between GIT and SVN.

@llvmbot llvmbot transferred this issue from llvm/llvm-bugzilla-archive Dec 10, 2021
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugzilla Issues migrated from bugzilla lldb
Projects
None yet
Development

No branches or pull requests

2 participants