diff options
| author | Pavel Labath <labath@google.com> | 2016-02-23 13:56:30 +0000 |
|---|---|---|
| committer | Pavel Labath <labath@google.com> | 2016-02-23 13:56:30 +0000 |
| commit | 605b51b84e622ce64ee77b066599c7b16d9d2c9d (patch) | |
| tree | 0ca0c82ebce807499af82ea3c4cd2cd23fb6ff9c /lldb/source/Plugins/Process/Linux/NativeProcessLinux.h | |
| parent | 0231f1649bd0d74828db9b41481421a67f469a6a (diff) | |
| download | llvm-605b51b84e622ce64ee77b066599c7b16d9d2c9d.zip llvm-605b51b84e622ce64ee77b066599c7b16d9d2c9d.tar.gz llvm-605b51b84e622ce64ee77b066599c7b16d9d2c9d.tar.bz2 | |
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
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/NativeProcessLinux.h')
| -rw-r--r-- | lldb/source/Plugins/Process/Linux/NativeProcessLinux.h | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h index 7bac1dc..c4c4a4a 100644 --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h @@ -127,6 +127,9 @@ namespace process_linux { size_t data_size = 0, long *result = nullptr); + bool + SupportHardwareSingleStepping() const; + protected: // --------------------------------------------------------------------- // NativeProcessProtocol protected interface @@ -239,9 +242,6 @@ namespace process_linux { void MonitorSignal(const siginfo_t &info, NativeThreadLinux &thread, bool exited); - bool - SupportHardwareSingleStepping() const; - Error SetupSoftwareSingleStepping(NativeThreadLinux &thread); @@ -285,16 +285,6 @@ namespace process_linux { Error GetEventMessage(lldb::tid_t tid, unsigned long *message); - /// Resumes the given thread. If @p signo is anything but - /// LLDB_INVALID_SIGNAL_NUMBER, deliver that signal to the thread. - Error - Resume(lldb::tid_t tid, uint32_t signo); - - /// Single steps the given thread. If @p signo is anything but - /// LLDB_INVALID_SIGNAL_NUMBER, deliver that signal to the thread. - Error - SingleStep(lldb::tid_t tid, uint32_t signo); - void NotifyThreadDeath (lldb::tid_t tid); |
