blob: bf708485d7374ee44c455fe181123645f5c40627 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- ThreadGDBRemote.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_ThreadGDBRemote_h_
11#define liblldb_ThreadGDBRemote_h_
12
13#include <string>
14
15#include "lldb/Target/Process.h"
16#include "lldb/Target/Thread.h"
Chris Lattner24943d22010-06-08 16:52:24 +000017
18class StringExtractor;
19class ProcessGDBRemote;
20
21class ThreadGDBRemote : public lldb_private::Thread
22{
23public:
24 ThreadGDBRemote (ProcessGDBRemote &process, lldb::tid_t tid);
25
26 virtual
27 ~ThreadGDBRemote ();
28
29 virtual bool
30 WillResume (lldb::StateType resume_state);
31
32 virtual void
33 RefreshStateAfterStop();
34
35 virtual const char *
36 GetInfo ();
37
38 virtual const char *
39 GetName ();
40
41 virtual const char *
42 GetQueueName ();
43
Greg Clayton08d7d3a2011-01-06 22:15:06 +000044 virtual lldb::RegisterContextSP
Chris Lattner24943d22010-06-08 16:52:24 +000045 GetRegisterContext ();
46
Greg Clayton08d7d3a2011-01-06 22:15:06 +000047 virtual lldb::RegisterContextSP
Chris Lattner24943d22010-06-08 16:52:24 +000048 CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
49
Chris Lattner24943d22010-06-08 16:52:24 +000050 virtual void
51 ClearStackFrames ();
52
53 ProcessGDBRemote &
54 GetGDBProcess ()
55 {
56 return (ProcessGDBRemote &)m_process;
57 }
58
59 const ProcessGDBRemote &
60 GetGDBProcess () const
61 {
62 return (ProcessGDBRemote &)m_process;
63 }
64
65 void
66 Dump (lldb_private::Log *log, uint32_t index);
67
68 static bool
69 ThreadIDIsValid (lldb::tid_t thread);
70
71 bool
72 ShouldStop (bool &step_more);
73
74 const char *
75 GetBasicInfoAsString ();
76
Chris Lattner24943d22010-06-08 16:52:24 +000077 void
Chris Lattner24943d22010-06-08 16:52:24 +000078 SetName (const char *name)
79 {
80 if (name && name[0])
81 m_thread_name.assign (name);
82 else
83 m_thread_name.clear();
84 }
85
86 lldb::addr_t
87 GetThreadDispatchQAddr ()
88 {
89 return m_thread_dispatch_qaddr;
90 }
91
92 void
93 SetThreadDispatchQAddr (lldb::addr_t thread_dispatch_qaddr)
94 {
95 m_thread_dispatch_qaddr = thread_dispatch_qaddr;
96 }
97
98protected:
Greg Claytona875b642011-01-09 21:07:35 +000099
100 friend class ProcessGDBRemote;
101
Jim Ingham15dcb7c2011-01-20 02:03:18 +0000102 virtual bool
103 SaveFrameZeroState (RegisterCheckpoint &checkpoint);
104
105 virtual bool
106 RestoreSaveFrameZero (const RegisterCheckpoint &checkpoint);
107
Greg Claytona875b642011-01-09 21:07:35 +0000108 void
109 PrivateSetRegisterValue (uint32_t reg,
110 StringExtractor &response);
111
Chris Lattner24943d22010-06-08 16:52:24 +0000112 //------------------------------------------------------------------
113 // Member variables.
114 //------------------------------------------------------------------
Chris Lattner24943d22010-06-08 16:52:24 +0000115 std::string m_thread_name;
116 std::string m_dispatch_queue_name;
117 lldb::addr_t m_thread_dispatch_qaddr;
Chris Lattner24943d22010-06-08 16:52:24 +0000118 //------------------------------------------------------------------
119 // Member variables.
120 //------------------------------------------------------------------
121
Jim Ingham71219082010-08-12 02:14:28 +0000122 virtual lldb_private::Unwind *
Chris Lattner24943d22010-06-08 16:52:24 +0000123 GetUnwinder ();
124
125 void
126 SetStopInfoFromPacket (StringExtractor &stop_packet, uint32_t stop_id);
127
Greg Clayton643ee732010-08-04 01:40:35 +0000128 virtual lldb::StopInfoSP
129 GetPrivateStopReason ();
Chris Lattner24943d22010-06-08 16:52:24 +0000130
131
132};
133
134#endif // liblldb_ThreadGDBRemote_h_