]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/POSIX/POSIXThread.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / source / Plugins / Process / POSIX / POSIXThread.h
1 //===-- POSIXThread.h -------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_POSIXThread_H_
11 #define liblldb_POSIXThread_H_
12
13 // C Includes
14 // C++ Includes
15 #include <memory>
16 #include <string>
17
18 // Other libraries and framework includes
19 #include "lldb/Target/Thread.h"
20 #include "RegisterContextPOSIX.h"
21
22 class ProcessMessage;
23 class ProcessMonitor;
24 class RegisterContextPOSIX;
25
26 //------------------------------------------------------------------------------
27 // @class POSIXThread
28 // @brief Abstraction of a POSIX thread.
29 class POSIXThread
30     : public lldb_private::Thread
31 {
32 public:
33     POSIXThread(lldb_private::Process &process, lldb::tid_t tid);
34
35     virtual ~POSIXThread();
36
37     void
38     RefreshStateAfterStop();
39
40     virtual void
41     WillResume(lldb::StateType resume_state);
42
43     // This notifies the thread when a private stop occurs.
44     virtual void
45     DidStop ();
46
47     const char *
48     GetInfo();
49
50     void
51     SetName (const char *name);
52
53     const char *
54     GetName ();
55
56     virtual lldb::RegisterContextSP
57     GetRegisterContext();
58
59     virtual lldb::RegisterContextSP
60     CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
61
62     //--------------------------------------------------------------------------
63     // These functions provide a mapping from the register offset
64     // back to the register index or name for use in debugging or log
65     // output.
66
67     unsigned
68     GetRegisterIndexFromOffset(unsigned offset);
69
70     const char *
71     GetRegisterName(unsigned reg);
72
73     const char *
74     GetRegisterNameFromOffset(unsigned offset);
75
76     //--------------------------------------------------------------------------
77     // These methods form a specialized interface to POSIX threads.
78     //
79     bool Resume();
80
81     void Notify(const ProcessMessage &message);
82
83     //--------------------------------------------------------------------------
84     // These methods provide an interface to watchpoints
85     //
86     bool EnableHardwareWatchpoint(lldb_private::Watchpoint *wp);
87
88     bool DisableHardwareWatchpoint(lldb_private::Watchpoint *wp);
89
90     uint32_t NumSupportedHardwareWatchpoints();
91
92     uint32_t FindVacantWatchpointIndex();
93
94 protected:
95     RegisterContextPOSIX *
96     GetRegisterContextPOSIX ()
97     {
98         if (!m_reg_context_sp)
99             m_reg_context_sp = GetRegisterContext();
100 #if 0
101         return dynamic_cast<RegisterContextPOSIX*>(m_reg_context_sp.get());
102 #endif
103         return (RegisterContextPOSIX *)m_reg_context_sp.get();
104     }
105     
106     std::unique_ptr<lldb_private::StackFrame> m_frame_ap;
107
108     lldb::BreakpointSiteSP m_breakpoint;
109
110     bool m_thread_name_valid;
111     std::string m_thread_name;
112
113     ProcessMonitor &
114     GetMonitor();
115
116     virtual bool
117     CalculateStopInfo();
118
119     void BreakNotify(const ProcessMessage &message);
120     void WatchNotify(const ProcessMessage &message);
121     virtual void TraceNotify(const ProcessMessage &message);
122     void LimboNotify(const ProcessMessage &message);
123     void SignalNotify(const ProcessMessage &message);
124     void SignalDeliveredNotify(const ProcessMessage &message);
125     void CrashNotify(const ProcessMessage &message);
126     void ThreadNotify(const ProcessMessage &message);
127     void ExitNotify(const ProcessMessage &message);
128
129     lldb_private::Unwind *
130     GetUnwinder();
131 };
132
133 #endif // #ifndef liblldb_POSIXThread_H_