forked from OSchip/llvm-project
[lldb/testsuite] Fix TestInlineStepping on arm64 with newer compilers
Summary: TestInlineStepping tests LLDB's ability to step in the presence of inline frames. The testcase source has a number of functions and some of them are marked `always_inline`. The test is built around the assumption that the inline function will be fully represented once inlined, but this is not true with the current arm64 code generation. For example: void caller() { always_inline_function(); // Step here } When stppeing into `caller()` above, you might immediatly end up in the inlines frame for `always_inline_function()`, because there might literally be no code associated with `caller()` itself. This patch hacks around the issue by adding an `asm volatile("nop")` on some lines with inlined calls where we expect to be able to step. Like so: void caller() { asm volatile("nop"); always_inline_function(); // Step here } This guarantees there is always going to be one instruction for this line in the caller. Reviewers: labath, jingham Subscribers: kristof.beyls, danielkiss, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D76406
This commit is contained in:
parent
e154cbb124
commit
ecc6c42697
|
@ -75,7 +75,7 @@ caller_trivial_1 ()
|
|||
void
|
||||
caller_trivial_2 ()
|
||||
{
|
||||
inline_trivial_1 (); // In caller_trivial_2.
|
||||
asm volatile ("nop"); inline_trivial_1 (); // In caller_trivial_2.
|
||||
inline_value += 1; // At increment in caller_trivial_2.
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ called_by_inline_trivial ()
|
|||
void
|
||||
inline_trivial_1 ()
|
||||
{
|
||||
inline_trivial_2(); // In inline_trivial_1.
|
||||
asm volatile ("nop"); inline_trivial_2(); // In inline_trivial_1.
|
||||
inline_value += 1; // At increment in inline_trivial_1.
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue