-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Open
Labels
Description
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.elfRepro
$ 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: