Skip to content

[LLDB] si (step instruction) stops multiple times at the same PC starting from LLDB 21 #160219

@patryk4815

Description

@patryk4815

Starting with LLDB 21, the si (step instruction) command may stop multiple times at the same program counter (PC).
This behavior was not present in earlier releases (e.g. LLDB 16-20), where only a single stop event would occur.

Compile bug binary

cat << EOF > bug.S
.section .text
.global _start
_start:
mov x1, 1
foo:
mov x1, 2
bar:
mov x1, 3
EOF

zig cc -target aarch64-freestanding bug.S -o bug.elf

Repro

$ lldb ./bug.elf
(lldb) target create "./bug.elf"
Current executable set to '/Users/psondej/projekty/pwndbg/bug.elf' (aarch64).
(lldb) version
lldb version 21.1.1
(lldb) b foo
Breakpoint 1: where = bug.elf`foo, address = 0x0000000001010124
(lldb) b bar
Breakpoint 2: where = bug.elf`bar, address = 0x0000000001010128
(lldb) process launch -s
Process 353436 stopped
* thread #1, name = 'bug.elf', stop reason = signal SIGSTOP
    frame #0: 0x0000000001010120 bug.elf`_start at bug.S:4
   1   	.section .text
   2   	.global _start
   3   	_start:
-> 4   	mov x1, 1
   5   	foo:
   6   	mov x1, 2
   7   	bar:
Process 353436 launched: '/Users/psondej/projekty/pwndbg/bug.elf' (aarch64)
(lldb) si
Process 353436 stopped
* thread #1, name = 'bug.elf', stop reason = instruction step into
    frame #0: 0x0000000001010124 bug.elf`foo at bug.S:6
   3   	_start:
   4   	mov x1, 1
   5   	foo:
-> 6   	mov x1, 2
   7   	bar:
   8   	mov x1, 3
(lldb) si
Process 353436 stopped
* thread #1, name = 'bug.elf', stop reason = breakpoint 1.1
    frame #0: 0x0000000001010124 bug.elf`foo at bug.S:6
   3   	_start:
   4   	mov x1, 1
   5   	foo:
-> 6   	mov x1, 2
   7   	bar:
   8   	mov x1, 3
>>>

Actual behavior:

The debugger stops multiple times at the same instruction:

  • once due to the step
  • once again due to the breakpoint at the same address

Expected

Im not sure what is expected. Maybe si should trigger a stop only once per instruction, not multiple times at the same PC.

Maybe related with:

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions