This is an archive of the discontinued LLVM Phabricator instance.

[lldb/testsuite] Fix TestInlineStepping on arm64 with newer compilers
ClosedPublic

Authored by friss on Mar 18 2020, 9:09 PM.

Details

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.

Any other (better) idea how to deal with this?

Diff Detail

Event Timeline

friss created this revision.Mar 18 2020, 9:09 PM
Herald added a project: Restricted Project. · View Herald TranscriptMar 18 2020, 9:09 PM
labath accepted this revision.Mar 19 2020, 1:12 AM

This doesn't sound too bad. I am not sure if "nop" is a valid opcode on all targets, but if it isn't we could try hiding it in a macro, or replace it with an increment of a volatile/atomic variable or a call to a noinline function (the latter would probably require changes in test expectations.

This revision is now accepted and ready to land.Mar 19 2020, 1:12 AM
This revision was automatically updated to reflect the committed changes.