blob: 65d6aa5d95fb289b3613b14373d7d6ff93015796 [file] [log] [blame]
Chris Lattner30fdc8d2010-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 Lattner30fdc8d2010-06-08 16:52:24 +000017
18class StringExtractor;
19class ProcessGDBRemote;
20
21class ThreadGDBRemote : public lldb_private::Thread
22{
23public:
Jim Ingham4f465cf2012-10-10 18:32:14 +000024 ThreadGDBRemote (lldb_private::Process &process, lldb::tid_t tid);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000025
26 virtual
27 ~ThreadGDBRemote ();
28
Greg Clayton160c9d82013-05-01 21:54:04 +000029 virtual void
Chris Lattner30fdc8d2010-06-08 16:52:24 +000030 WillResume (lldb::StateType resume_state);
31
32 virtual void
33 RefreshStateAfterStop();
34
35 virtual const char *
Chris Lattner30fdc8d2010-06-08 16:52:24 +000036 GetName ();
37
38 virtual const char *
39 GetQueueName ();
40
Jason Molenda3dc4f442013-10-18 05:55:24 +000041 virtual lldb::queue_id_t
42 GetQueueID ();
43
Jason Molenda2dd5deb2014-04-25 00:02:11 +000044 virtual lldb::QueueSP
45 GetQueue ();
46
Jason Molendaaac16e02014-03-13 02:54:54 +000047 lldb::addr_t
48 GetQueueLibdispatchQueueAddress ();
49
Greg Clayton5ccbd292011-01-06 22:15:06 +000050 virtual lldb::RegisterContextSP
Chris Lattner30fdc8d2010-06-08 16:52:24 +000051 GetRegisterContext ();
52
Greg Clayton5ccbd292011-01-06 22:15:06 +000053 virtual lldb::RegisterContextSP
Jason Molendab57e4a12013-11-04 09:33:30 +000054 CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000055
Chris Lattner30fdc8d2010-06-08 16:52:24 +000056 void
57 Dump (lldb_private::Log *log, uint32_t index);
58
59 static bool
60 ThreadIDIsValid (lldb::tid_t thread);
61
62 bool
63 ShouldStop (bool &step_more);
64
65 const char *
66 GetBasicInfoAsString ();
67
Chris Lattner30fdc8d2010-06-08 16:52:24 +000068 void
Chris Lattner30fdc8d2010-06-08 16:52:24 +000069 SetName (const char *name)
70 {
71 if (name && name[0])
72 m_thread_name.assign (name);
73 else
74 m_thread_name.clear();
75 }
76
77 lldb::addr_t
78 GetThreadDispatchQAddr ()
79 {
80 return m_thread_dispatch_qaddr;
81 }
82
83 void
84 SetThreadDispatchQAddr (lldb::addr_t thread_dispatch_qaddr)
85 {
86 m_thread_dispatch_qaddr = thread_dispatch_qaddr;
87 }
88
89protected:
Greg Clayton3e06bd92011-01-09 21:07:35 +000090
91 friend class ProcessGDBRemote;
92
Greg Claytone576ab22011-02-15 00:19:15 +000093 bool
Greg Clayton3e06bd92011-01-09 21:07:35 +000094 PrivateSetRegisterValue (uint32_t reg,
95 StringExtractor &response);
96
Chris Lattner30fdc8d2010-06-08 16:52:24 +000097 //------------------------------------------------------------------
98 // Member variables.
99 //------------------------------------------------------------------
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000100 std::string m_thread_name;
101 std::string m_dispatch_queue_name;
102 lldb::addr_t m_thread_dispatch_qaddr;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000103 //------------------------------------------------------------------
104 // Member variables.
105 //------------------------------------------------------------------
106
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000107 void
108 SetStopInfoFromPacket (StringExtractor &stop_packet, uint32_t stop_id);
109
Greg Clayton6e0ff1a2013-05-09 01:55:29 +0000110 virtual bool
111 CalculateStopInfo ();
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000112
113
114};
115
116#endif // liblldb_ThreadGDBRemote_h_