1269f91e066c5991a4d4aa2945ea2c285f8589b12Greg Clayton//===-- ProcessKDP.h --------------------------------------------*- C++ -*-===//
2363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton//
3363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton//                     The LLVM Compiler Infrastructure
4363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton//
5363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton// This file is distributed under the University of Illinois Open Source
6363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton// License. See LICENSE.TXT for details.
7363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton//
8363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton//===----------------------------------------------------------------------===//
9363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
10363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#ifndef liblldb_ProcessKDP_h_
11363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#define liblldb_ProcessKDP_h_
12363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
13363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton// C Includes
14363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
15363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton// C++ Includes
16363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include <list>
17363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include <vector>
18363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
19363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton// Other libraries and framework includes
20363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "lldb/Core/ArchSpec.h"
21363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "lldb/Core/Broadcaster.h"
22f0c0882ff3fd98456c1814b495888092da2f13f6Jason Molenda#include "lldb/Core/ConstString.h"
23363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "lldb/Core/Error.h"
24363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "lldb/Core/InputReader.h"
25363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "lldb/Core/StreamString.h"
26363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "lldb/Core/StringList.h"
27363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "lldb/Core/ThreadSafeValue.h"
28363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "lldb/Target/Process.h"
29363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "lldb/Target/Thread.h"
30363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
31363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "CommunicationKDP.h"
32363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#include "Utility/StringExtractor.h"
33363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
34363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Claytonclass ThreadKDP;
35363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
36363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Claytonclass ProcessKDP : public lldb_private::Process
37363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton{
38363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Claytonpublic:
39363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
40363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Constructors and Destructors
41363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
4246c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    static lldb::ProcessSP
4346c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton    CreateInstance (lldb_private::Target& target,
4446c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton                    lldb_private::Listener &listener,
4546c9a355af9b39db78c006b2a5cbf97d3c58d947Greg Clayton                    const lldb_private::FileSpec *crash_file_path);
46363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
47363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    static void
48363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    Initialize();
49363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
50363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    static void
5197abb6ddae805a91ccf28a3a91fa68252dcf1fe2Greg Clayton    DebuggerInitialize (lldb_private::Debugger &debugger);
5297abb6ddae805a91ccf28a3a91fa68252dcf1fe2Greg Clayton
5397abb6ddae805a91ccf28a3a91fa68252dcf1fe2Greg Clayton    static void
54363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    Terminate();
55363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
560e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    static lldb_private::ConstString
57363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    GetPluginNameStatic();
58363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
59363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    static const char *
60363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    GetPluginDescriptionStatic();
61363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
62363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
63363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Constructors and Destructors
64363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
65363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    ProcessKDP(lldb_private::Target& target, lldb_private::Listener &listener);
66363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
67363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual
68363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    ~ProcessKDP();
69363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
70363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
71363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Check if a given Process
72363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
73363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual bool
748d2ea2888a4acb7f140f9af64ddd2b16b2dee870Greg Clayton    CanDebug (lldb_private::Target &target,
758d2ea2888a4acb7f140f9af64ddd2b16b2dee870Greg Clayton              bool plugin_specified_by_name);
76363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
77307c7fdc58d19f734991a176db972cc61d9ada16Greg Clayton    virtual lldb_private::CommandObject *
78307c7fdc58d19f734991a176db972cc61d9ada16Greg Clayton    GetPluginCommandObject();
79363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
80363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
81363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Creating a new process, or attaching to an existing one
82363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
83363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
84363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    WillLaunch (lldb_private::Module* module);
85363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
86363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
8736bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton    DoLaunch (lldb_private::Module *exe_module,
8836bc5ea5a48c19421d44f559e2165c105657b809Greg Clayton              const lldb_private::ProcessLaunchInfo &launch_info);
89363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
90363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
91363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    WillAttachToProcessWithID (lldb::pid_t pid);
92363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
93363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
94363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    WillAttachToProcessWithName (const char *process_name, bool wait_for_launch);
95363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
96363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
97fac2e62f08719ba800a440b7ad0d5a55a26dc620Jason Molenda    DoConnectRemote (lldb_private::Stream *strm, const char *remote_url);
98363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
99363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
100363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DoAttachToProcessWithID (lldb::pid_t pid);
101363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
102363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
103d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    DoAttachToProcessWithID (lldb::pid_t pid, const lldb_private::ProcessAttachInfo &attach_info);
104d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong
105d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    virtual lldb_private::Error
106d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    DoAttachToProcessWithName (const char *process_name, bool wait_for_launch, const lldb_private::ProcessAttachInfo &attach_info);
107363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
108363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual void
109363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DidAttach ();
110363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
111b46937c86ca4551b2fc9813d848b1a0a2bf2e636Jason Molenda    lldb::addr_t
112b46937c86ca4551b2fc9813d848b1a0a2bf2e636Jason Molenda    GetImageInfoAddress();
113b46937c86ca4551b2fc9813d848b1a0a2bf2e636Jason Molenda
114b46937c86ca4551b2fc9813d848b1a0a2bf2e636Jason Molenda    lldb_private::DynamicLoader *
115b46937c86ca4551b2fc9813d848b1a0a2bf2e636Jason Molenda    GetDynamicLoader ();
116b46937c86ca4551b2fc9813d848b1a0a2bf2e636Jason Molenda
117363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
118363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // PluginInterface protocol
119363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
1200e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton    virtual lldb_private::ConstString
121363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    GetPluginName();
122363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
123363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual uint32_t
124363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    GetPluginVersion();
125363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
126363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
127363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Process Control
128363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
129363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
130363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    WillResume ();
131363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
132363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
133363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DoResume ();
134363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
135363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
136363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DoHalt (bool &caused_stop);
137363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
138363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
139761afb822b18c46b2ad84be03f372e90ac1e6143Jim Ingham    DoDetach (bool keep_stopped);
140363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
141363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
142363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DoSignal (int signal);
143363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
144363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
145363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DoDestroy ();
146363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
147363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual void
148363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    RefreshStateAfterStop();
149363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
150363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
151363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Process Queries
152363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
153363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual bool
154363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    IsAlive ();
155363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
156363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
157363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Process Memory
158363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
159363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual size_t
160363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DoReadMemory (lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error);
161363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
162363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual size_t
163363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DoWriteMemory (lldb::addr_t addr, const void *buf, size_t size, lldb_private::Error &error);
164363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
165363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb::addr_t
166363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DoAllocateMemory (size_t size, uint32_t permissions, lldb_private::Error &error);
167363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
168363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
169363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DoDeallocateMemory (lldb::addr_t ptr);
170363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
171363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //----------------------------------------------------------------------
172363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Process Breakpoints
173363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //----------------------------------------------------------------------
174363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
175efb4aeba2bd8411ac0aee9934f08959094d50711Jim Ingham    EnableBreakpointSite (lldb_private::BreakpointSite *bp_site);
176363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
177363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
178efb4aeba2bd8411ac0aee9934f08959094d50711Jim Ingham    DisableBreakpointSite (lldb_private::BreakpointSite *bp_site);
179363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
180363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //----------------------------------------------------------------------
181363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Process Watchpoints
182363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //----------------------------------------------------------------------
183363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
1849c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham    EnableWatchpoint (lldb_private::Watchpoint *wp, bool notify = true);
185363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
186363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    virtual lldb_private::Error
1879c970a371511a0e31ba9360aa841d445792c1ab0Jim Ingham    DisableWatchpoint (lldb_private::Watchpoint *wp, bool notify = true);
188363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
1890fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    CommunicationKDP &
1900fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    GetCommunication()
1910fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
1920fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        return m_comm;
1930fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    }
1940fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
195363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Claytonprotected:
196363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    friend class ThreadKDP;
197363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    friend class CommunicationKDP;
198363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
199363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //----------------------------------------------------------------------
200363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // Accessors
201363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //----------------------------------------------------------------------
202363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    bool
203363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    IsRunning ( lldb::StateType state )
204363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    {
205363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton        return    state == lldb::eStateRunning || IsStepping(state);
206363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    }
207363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
208363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    bool
209363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    IsStepping ( lldb::StateType state)
210363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    {
211363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton        return    state == lldb::eStateStepping;
212363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    }
213363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
214363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    bool
215363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    CanResume ( lldb::StateType state)
216363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    {
217363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton        return state == lldb::eStateStopped;
218363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    }
219363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
220363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    bool
221363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    HasExited (lldb::StateType state)
222363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    {
223363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton        return state == lldb::eStateExited;
224363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    }
225363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
226363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    bool
227363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    ProcessIDIsValid ( ) const;
228363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
229363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    void
230363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    Clear ( );
231363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
232ae932359b80098532f3c3766fa9e6527352fbb67Greg Clayton    virtual bool
23337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    UpdateThreadList (lldb_private::ThreadList &old_thread_list,
23437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton                      lldb_private::ThreadList &new_thread_list);
235363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
236363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    enum
237363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    {
238363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton        eBroadcastBitAsyncContinue                  = (1 << 0),
239363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton        eBroadcastBitAsyncThreadShouldExit          = (1 << 1)
240363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    };
241e76f8c408632e2479cbaa1abdcd10a7958fa4846Greg Clayton
2423acaa926c8f0d32da48db61a5fcb95276e6a4006Greg Clayton    lldb::ThreadSP
2434e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor    GetKernelThread ();
244363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
245363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
246363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    /// Broadcaster event bits definitions.
247363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
248363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    CommunicationKDP m_comm;
249363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    lldb_private::Broadcaster m_async_broadcaster;
250363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    lldb::thread_t m_async_thread;
251f0c0882ff3fd98456c1814b495888092da2f13f6Jason Molenda    lldb_private::ConstString m_dyld_plugin_name;
252b46937c86ca4551b2fc9813d848b1a0a2bf2e636Jason Molenda    lldb::addr_t m_kernel_load_addr;
253307c7fdc58d19f734991a176db972cc61d9ada16Greg Clayton    lldb::CommandObjectSP m_command_sp;
2544e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor    lldb::ThreadWP m_kernel_thread_wp;
255307c7fdc58d19f734991a176db972cc61d9ada16Greg Clayton
256363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
257363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    bool
258363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    StartAsyncThread ();
259363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
260363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    void
261363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    StopAsyncThread ();
262363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
263363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    static void *
264363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    AsyncThread (void *arg);
265363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
266363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Claytonprivate:
267363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
268363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    // For ProcessKDP only
269363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    //------------------------------------------------------------------
270363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
271363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton    DISALLOW_COPY_AND_ASSIGN (ProcessKDP);
272363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
273363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton};
274363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton
275363be3fc515bea8baf2c5031f3c62f6326d9e1b8Greg Clayton#endif  // liblldb_ProcessKDP_h_
276