diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-01-06 20:12:03 +0000 | 
| commit | 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch) | |
| tree | dd2a1ddf0476664c2b823409c36cbccd52662ca7 /source/Plugins/Process/Linux/NativeThreadLinux.h | |
| parent | 3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff) | |
Notes
Diffstat (limited to 'source/Plugins/Process/Linux/NativeThreadLinux.h')
| -rw-r--r-- | source/Plugins/Process/Linux/NativeThreadLinux.h | 120 | 
1 files changed, 120 insertions, 0 deletions
| diff --git a/source/Plugins/Process/Linux/NativeThreadLinux.h b/source/Plugins/Process/Linux/NativeThreadLinux.h new file mode 100644 index 000000000000..bf6b00a78cfd --- /dev/null +++ b/source/Plugins/Process/Linux/NativeThreadLinux.h @@ -0,0 +1,120 @@ +//===-- NativeThreadLinux.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_NativeThreadLinux_H_ +#define liblldb_NativeThreadLinux_H_ + +#include "lldb/lldb-private-forward.h" +#include "lldb/Host/common/NativeThreadProtocol.h" + +#include <map> +#include <memory> +#include <string> + +namespace lldb_private { +namespace process_linux { + +    class NativeProcessLinux; + +    class NativeThreadLinux : public NativeThreadProtocol +    { +        friend class NativeProcessLinux; + +    public: +        NativeThreadLinux (NativeProcessLinux *process, lldb::tid_t tid); + +        // --------------------------------------------------------------------- +        // NativeThreadProtocol Interface +        // --------------------------------------------------------------------- +        std::string +        GetName() override; + +        lldb::StateType +        GetState () override; + +        bool +        GetStopReason (ThreadStopInfo &stop_info, std::string& description) override; + +        NativeRegisterContextSP +        GetRegisterContext () override; + +        Error +        SetWatchpoint (lldb::addr_t addr, size_t size, uint32_t watch_flags, bool hardware) override; + +        Error +        RemoveWatchpoint (lldb::addr_t addr) override; + +    private: +        // --------------------------------------------------------------------- +        // Interface for friend classes +        // --------------------------------------------------------------------- +        void +        SetRunning (); + +        void +        SetStepping (); + +        void +        SetStoppedBySignal(uint32_t signo, const siginfo_t *info = nullptr); + +        /// Return true if the thread is stopped. +        /// If stopped by a signal, indicate the signo in the signo argument. +        /// Otherwise, return LLDB_INVALID_SIGNAL_NUMBER. +        bool +        IsStopped (int *signo); + +        void +        SetStoppedByExec (); + +        void +        SetStoppedByBreakpoint (); + +        void +        SetStoppedByWatchpoint (uint32_t wp_index); + +        bool +        IsStoppedAtBreakpoint (); + +        bool +        IsStoppedAtWatchpoint (); + +        void +        SetStoppedByTrace (); + +        void +        SetStoppedWithNoReason (); + +        void +        SetExited (); + +        Error +        RequestStop (); + +        // --------------------------------------------------------------------- +        // Private interface +        // --------------------------------------------------------------------- +        void +        MaybeLogStateChange (lldb::StateType new_state); + +        // --------------------------------------------------------------------- +        // Member Variables +        // --------------------------------------------------------------------- +        lldb::StateType m_state; +        ThreadStopInfo m_stop_info; +        NativeRegisterContextSP m_reg_context_sp; +        std::string m_stop_description; +        using WatchpointIndexMap = std::map<lldb::addr_t, uint32_t>; +        WatchpointIndexMap m_watchpoint_index_map; +    }; + +    typedef std::shared_ptr<NativeThreadLinux> NativeThreadLinuxSP; +} // namespace process_linux +} // namespace lldb_private + +#endif // #ifndef liblldb_NativeThreadLinux_H_ | 
