//===-- SingleStepCheck.h ------------------------------------- -*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef liblldb_SingleStepCheck_H_ #define liblldb_SingleStepCheck_H_ namespace lldb_private { namespace process_linux { namespace impl { extern bool SingleStepWorkaroundNeeded(); } // arm64 linux had a bug which prevented single-stepping and watchpoints from working on non-boot // cpus, due to them being incorrectly initialized after coming out of suspend. This issue is // particularly affecting android M, which uses suspend ("doze mode") quite aggressively. This // code detects that situation and makes single-stepping work by doing all the step operations on // the boot cpu. // // The underlying issue has been fixed in android N and linux 4.4. This code can be removed once // these systems become obsolete. inline bool SingleStepWorkaroundNeeded() { static bool value = impl::SingleStepWorkaroundNeeded(); return value; } } // end namespace process_linux } // end namespace lldb_private #endif // #ifndef liblldb_SingleStepCheck_H_