[all-commits] [llvm/llvm-project] 64df8f: [lldb][test] Fix TestEmptyFuncThreadStepOut.py (#1...

Igor Kudrin via All-commits all-commits at lists.llvm.org
Tue Oct 21 20:01:29 PDT 2025


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 64df8f83fe293b6c08477975cbb4451c76b51c54
      https://github.com/llvm/llvm-project/commit/64df8f83fe293b6c08477975cbb4451c76b51c54
  Author: Igor Kudrin <ikudrin at accesssoftek.com>
  Date:   2025-10-21 (Tue, 21 Oct 2025)

  Changed paths:
    M lldb/test/API/functionalities/thread/finish-from-empty-func/TestEmptyFuncThreadStepOut.py
    M lldb/test/API/functionalities/thread/finish-from-empty-func/main.c

  Log Message:
  -----------
  [lldb][test] Fix TestEmptyFuncThreadStepOut.py (#161788)

The test did not work as intended when the empty function `done()`
contained prologue/epilogue code, because a breakpoint was set before
the last instruction of the function, which caused the test to pass even
with the fix from #126838 having been reverted.

The test is intended to check a case when a breakpoint is set on a
return instruction, which is the very last instruction of a function.
When stepping out from this breakpoint, there is interaction between
`ThreadPlanStepOut` and `ThreadPlanStepOverBreakpoint` that could lead
to missing the stop location in the outer frame; the detailed
explanation can be found in #126838.

On `Linux/AArch64`, the source is compiled into:
```
> objdump -d main.o
0000000000000000 <done>:
   0:   d65f03c0        ret
```
So, when the command `bt set -n done` from the original test sets a
breakpoint to the first instruction of `done()`, this instruction
luckily also happens to be the last one.

On `Linux/x86_64`, it compiles into:
```
> objdump -d main.o
0000000000000000 <done>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   5d                      pop    %rbp
   5:   c3                      ret
```
In this case, setting a breakpoint by function name means setting it
several instructions before `ret`, which does not provoke the
interaction between `ThreadPlanStepOut` and
`ThreadPlanStepOverBreakpoint`.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list