[Lldb-commits] [PATCH] D76406: [lldb/testsuite] Fix TestInlineStepping on arm64 with newer compilers
Frederic Riss via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Mar 18 21:10:01 PDT 2020
friss created this revision.
friss added reviewers: labath, jingham.
Herald added subscribers: danielkiss, kristof.beyls.
Herald added a project: LLDB.
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.
Any other (better) idea how to deal with this?
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D76406
Files:
lldb/test/API/functionalities/inline-stepping/calling.cpp
Index: lldb/test/API/functionalities/inline-stepping/calling.cpp
===================================================================
--- lldb/test/API/functionalities/inline-stepping/calling.cpp
+++ lldb/test/API/functionalities/inline-stepping/calling.cpp
@@ -75,7 +75,7 @@
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 @@
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.
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D76406.251265.patch
Type: text/x-patch
Size: 729 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20200319/c216aa86/attachment.bin>
More information about the lldb-commits
mailing list