Work around a stepping bug in arm64 android M
authorPavel Labath <labath@google.com>
Tue, 23 Feb 2016 13:56:30 +0000 (13:56 +0000)
committerPavel Labath <labath@google.com>
Tue, 23 Feb 2016 13:56:30 +0000 (13:56 +0000)
commit605b51b84e622ce64ee77b066599c7b16d9d2c9d
tree0ca0c82ebce807499af82ea3c4cd2cd23fb6ff9c
parent0231f1649bd0d74828db9b41481421a67f469a6a
Work around a stepping bug in arm64 android M

Summary:
On arm64, linux<=4.4 and Android<=M there is a bug, which prevents single-stepping from working when
the system comes back from suspend, because of incorrectly initialized CPUs. This did not really
affect Android<M, because it did not use software suspend, but it is a problem for M, which uses
suspend (doze) quite extensively.  Fortunately, it seems that the first CPU is not affected by
this bug, so this commit implements a workaround by forcing the inferior to execute on the first
cpu whenever we are doing single stepping.

While inside, I have moved the implementations of Resume() and SingleStep() to the thread class
(instead of process).

Reviewers: tberghammer, ovyalov

Subscribers: aemerson, rengolin, tberghammer, danalbert, srhines, lldb-commits

Differential Revision: http://reviews.llvm.org/D17509

llvm-svn: 261636
lldb/source/Plugins/Process/Linux/CMakeLists.txt
lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
lldb/source/Plugins/Process/Linux/NativeProcessLinux.h
lldb/source/Plugins/Process/Linux/NativeThreadLinux.cpp
lldb/source/Plugins/Process/Linux/NativeThreadLinux.h
lldb/source/Plugins/Process/Linux/SingleStepCheck.cpp [new file with mode: 0644]
lldb/source/Plugins/Process/Linux/SingleStepCheck.h [new file with mode: 0644]