blob: c7f29ca9acbcb3834345431468780cd8aa4fd492 [file] [log] [blame]
Stephen Wilsonf6f40332010-07-24 02:19:04 +00001//===-- LinuxThread.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_LinuxThread_H_
11#define liblldb_LinuxThread_H_
12
13// C Includes
14// C++ Includes
15#include <memory>
16
17// Other libraries and framework includes
18#include "lldb/Target/Thread.h"
Stephen Wilsonf6f40332010-07-24 02:19:04 +000019
20class ProcessMonitor;
Greg Clayton90ccf882011-01-06 22:35:55 +000021class RegisterContextLinux;
Stephen Wilsonf6f40332010-07-24 02:19:04 +000022
23//------------------------------------------------------------------------------
24// @class LinuxThread
25// @brief Abstraction of a linux process (thread).
26class LinuxThread
27 : public lldb_private::Thread
28{
29public:
30 LinuxThread(lldb_private::Process &process, lldb::tid_t tid);
31
Stephen Wilsonb47794a2011-01-16 16:56:16 +000032 virtual ~LinuxThread();
33
Stephen Wilsonf6f40332010-07-24 02:19:04 +000034 void
35 RefreshStateAfterStop();
36
37 bool
38 WillResume(lldb::StateType resume_state);
39
40 const char *
41 GetInfo();
42
Greg Clayton90ccf882011-01-06 22:35:55 +000043 virtual lldb::RegisterContextSP
Stephen Wilsonf6f40332010-07-24 02:19:04 +000044 GetRegisterContext();
45
Greg Clayton90ccf882011-01-06 22:35:55 +000046 virtual bool
Stephen Wilsonf6f40332010-07-24 02:19:04 +000047 SaveFrameZeroState(RegisterCheckpoint &checkpoint);
48
Greg Clayton90ccf882011-01-06 22:35:55 +000049 virtual bool
Stephen Wilsonf6f40332010-07-24 02:19:04 +000050 RestoreSaveFrameZero(const RegisterCheckpoint &checkpoint);
51
Greg Clayton90ccf882011-01-06 22:35:55 +000052 virtual lldb::RegisterContextSP
Stephen Wilsonbc1418b2011-01-07 00:10:43 +000053 CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
Stephen Wilsonf6f40332010-07-24 02:19:04 +000054
Stephen Wilsonf6f40332010-07-24 02:19:04 +000055 //--------------------------------------------------------------------------
56 // These methods form a specialized interface to linux threads.
57 //
58 bool Resume();
59
60 void BreakNotify();
61 void TraceNotify();
62 void ExitNotify();
63
64private:
Greg Clayton90ccf882011-01-06 22:35:55 +000065
66 RegisterContextLinux *
67 GetRegisterContextLinux ()
68 {
69 if (!m_reg_context_sp)
70 GetRegisterContext();
Stephen Wilsonbc1418b2011-01-07 00:10:43 +000071 return (RegisterContextLinux *)m_reg_context_sp.get();
Greg Clayton90ccf882011-01-06 22:35:55 +000072 }
73
Stephen Wilsonf6f40332010-07-24 02:19:04 +000074 std::auto_ptr<lldb_private::StackFrame> m_frame_ap;
Stephen Wilsonf6f40332010-07-24 02:19:04 +000075
76 lldb::BreakpointSiteSP m_breakpoint;
Stephen Wilson140f69a2011-01-15 00:07:36 +000077 lldb::StopInfoSP m_stop_info;
78
79 // Cached process stop id. Used to ensure we do not recalculate stop
80 // information/state needlessly.
81 uint32_t m_stop_info_id;
Stephen Wilsonf6f40332010-07-24 02:19:04 +000082
83 enum Notification {
84 eNone,
85 eBreak,
86 eTrace,
87 eExit
88 };
89
90 Notification m_note;
91
92 ProcessMonitor &GetMonitor();
Stephen Wilsoned560022011-01-04 21:45:02 +000093
94 lldb::StopInfoSP
95 GetPrivateStopReason();
Stephen Wilsond61182d2011-01-04 21:45:57 +000096
Stephen Wilson140f69a2011-01-15 00:07:36 +000097 void
98 RefreshPrivateStopReason();
99
Stephen Wilsond61182d2011-01-04 21:45:57 +0000100 lldb_private::Unwind *
101 GetUnwinder();
Stephen Wilsonf6f40332010-07-24 02:19:04 +0000102};
103
104#endif // #ifndef liblldb_LinuxThread_H_