blob: 5ec0d43f99d2ccb937019f154414e0b9abbd4ab5 [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"
19#include "RegisterContextLinux.h"
20
21class ProcessMonitor;
22
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
32 void
33 RefreshStateAfterStop();
34
35 bool
36 WillResume(lldb::StateType resume_state);
37
38 const char *
39 GetInfo();
40
Stephen Wilsonf6f40332010-07-24 02:19:04 +000041 RegisterContextLinux *
42 GetRegisterContext();
43
44 bool
45 SaveFrameZeroState(RegisterCheckpoint &checkpoint);
46
47 bool
48 RestoreSaveFrameZero(const RegisterCheckpoint &checkpoint);
49
50 RegisterContextLinux *
51 CreateRegisterContextForFrame(lldb_private::StackFrame *frame);
52
53 bool
54 GetRawStopReason(StopInfo *stop_info);
55
56 //--------------------------------------------------------------------------
57 // These methods form a specialized interface to linux threads.
58 //
59 bool Resume();
60
61 void BreakNotify();
62 void TraceNotify();
63 void ExitNotify();
64
65private:
66 std::auto_ptr<lldb_private::StackFrame> m_frame_ap;
67 std::auto_ptr<RegisterContextLinux> m_register_ap;
68
69 lldb::BreakpointSiteSP m_breakpoint;
70
71 enum Notification {
72 eNone,
73 eBreak,
74 eTrace,
75 eExit
76 };
77
78 Notification m_note;
79
80 ProcessMonitor &GetMonitor();
81};
82
83#endif // #ifndef liblldb_LinuxThread_H_