blob: a204a917ecb3c823faaebd9466c4d2cc9a8a4197 [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
Jason Molenda705b1802014-06-13 02:37:02 +000015#include "lldb/Core/StructuredData.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000016#include "lldb/Target/Process.h"
17#include "lldb/Target/Thread.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000018
19class StringExtractor;
20class ProcessGDBRemote;
21
22class ThreadGDBRemote : public lldb_private::Thread
23{
24public:
Jim Ingham4f465cf2012-10-10 18:32:14 +000025 ThreadGDBRemote (lldb_private::Process &process, lldb::tid_t tid);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000026
27 virtual
28 ~ThreadGDBRemote ();
29
Greg Clayton160c9d82013-05-01 21:54:04 +000030 virtual void
Chris Lattner30fdc8d2010-06-08 16:52:24 +000031 WillResume (lldb::StateType resume_state);
32
33 virtual void
34 RefreshStateAfterStop();
35
36 virtual const char *
Chris Lattner30fdc8d2010-06-08 16:52:24 +000037 GetName ();
38
39 virtual const char *
40 GetQueueName ();
41
Jason Molenda3dc4f442013-10-18 05:55:24 +000042 virtual lldb::queue_id_t
43 GetQueueID ();
44
Jason Molenda2dd5deb2014-04-25 00:02:11 +000045 virtual lldb::QueueSP
46 GetQueue ();
47
Jason Molendaaac16e02014-03-13 02:54:54 +000048 lldb::addr_t
49 GetQueueLibdispatchQueueAddress ();
50
Greg Clayton5ccbd292011-01-06 22:15:06 +000051 virtual lldb::RegisterContextSP
Chris Lattner30fdc8d2010-06-08 16:52:24 +000052 GetRegisterContext ();
53
Greg Clayton5ccbd292011-01-06 22:15:06 +000054 virtual lldb::RegisterContextSP
Jason Molendab57e4a12013-11-04 09:33:30 +000055 CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000056
Chris Lattner30fdc8d2010-06-08 16:52:24 +000057 void
58 Dump (lldb_private::Log *log, uint32_t index);
59
60 static bool
61 ThreadIDIsValid (lldb::tid_t thread);
62
63 bool
64 ShouldStop (bool &step_more);
65
66 const char *
67 GetBasicInfoAsString ();
68
Chris Lattner30fdc8d2010-06-08 16:52:24 +000069 void
Chris Lattner30fdc8d2010-06-08 16:52:24 +000070 SetName (const char *name)
71 {
72 if (name && name[0])
73 m_thread_name.assign (name);
74 else
75 m_thread_name.clear();
76 }
77
78 lldb::addr_t
79 GetThreadDispatchQAddr ()
80 {
81 return m_thread_dispatch_qaddr;
82 }
83
84 void
85 SetThreadDispatchQAddr (lldb::addr_t thread_dispatch_qaddr)
86 {
87 m_thread_dispatch_qaddr = thread_dispatch_qaddr;
88 }
89
Jason Molenda705b1802014-06-13 02:37:02 +000090 lldb_private::StructuredData::ObjectSP
91 FetchThreadExtendedInfo ();
92
Chris Lattner30fdc8d2010-06-08 16:52:24 +000093protected:
Greg Clayton3e06bd92011-01-09 21:07:35 +000094
95 friend class ProcessGDBRemote;
96
Greg Claytone576ab22011-02-15 00:19:15 +000097 bool
Greg Clayton3e06bd92011-01-09 21:07:35 +000098 PrivateSetRegisterValue (uint32_t reg,
99 StringExtractor &response);
100
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000101 //------------------------------------------------------------------
102 // Member variables.
103 //------------------------------------------------------------------
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000104 std::string m_thread_name;
105 std::string m_dispatch_queue_name;
106 lldb::addr_t m_thread_dispatch_qaddr;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000107 //------------------------------------------------------------------
108 // Member variables.
109 //------------------------------------------------------------------
110
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000111 void
112 SetStopInfoFromPacket (StringExtractor &stop_packet, uint32_t stop_id);
113
Greg Clayton6e0ff1a2013-05-09 01:55:29 +0000114 virtual bool
115 CalculateStopInfo ();
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000116
117
118};
119
120#endif // liblldb_ThreadGDBRemote_h_