[Lldb-commits] [PATCH] Initial Assembly profiler for mips64

Zachary Turner zturner at google.com
Wed Feb 18 20:54:01 PST 2015


I agree that unwinding is probably a hard thing to write tests for.  But
right now it has basically 0 coverage, so I really hope we can improve
that.  I'll be the first to admit that I am *not* an expert in this area,
but just looking at the patch description "This is initial implementation
of assembly profiler which only scans prologue/epilogue assembly
instructions to create CFI instructions" I feel like this is something that
would be a great candidate for unit tests.  Since a unit test is written in
C++, it need not be written against the public API.  You could just feed
the profiler sequences of bytes that represent prologues / epilogues, and
verify that the CFI instructions are correct.  (I hope that even makes
sense, again I'm not an expert on this, just trying to make guesses based
on the patch description).

You wouldn't even need to have an input binary to make this work.  Just
encode some prologues and epilogues into the unit test, and verify that the
profiler does the right thing.

On Wed Feb 18 2015 at 8:46:07 PM Jason Molenda <jmolenda at apple.com> wrote:

> For what it's worth, an example of a test file for this code would be a
> driver program written in C for simplicity which calls under1() written in
> assembly, which in turn calls under2().  lldb would stop in under2(), go up
> the stack to under1() and try to print a register that was preserved.
>
> Some utterly invalid syntax for a test file would look like:
>
> int main()
>  {
>
>   under1();
>
> }
>
> .asm("
> under1:
>
>   mov r16, 1
>   call under2
>
> under2:
>
>   sd r16(sp)       # I have no idea if that is right -- save contents of
> r16 on the local stack frame
>   mov r16, 5
>   call puts          ## whatever, stop at a breakpoint here
>
> ");
>
> If lldb could select frame 1 and see that r16 has the value 1, that's a
> simple test case.
>
> But this test could only be run on a mips64 system.
>
> I want to add test cases like this for x86 but it might take some fiddling
> to get assembly that would work on all the Unix x86 systems at least
> (nevermind Windows! ;) and I've never gotten around to it.  I should start
> with at least simple x86 unwinder test cases that work correctly on Mac as
> a step 0.
>
>
> REPOSITORY
>   rL LLVM
>
> http://reviews.llvm.org/D7696
>
> EMAIL PREFERENCES
>   http://reviews.llvm.org/settings/panel/emailpreferences/
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150219/88b62bd1/attachment.html>


More information about the lldb-commits mailing list