SBProcess.h revision 1e4d8f06d77559e13844d116515412520b4713cc
1//===-- SBProcess.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 LLDB_SBProcess_h_
11#define LLDB_SBProcess_h_
12
13#include "lldb/API/SBDefines.h"
14#include "lldb/API/SBError.h"
15#include "lldb/API/SBTarget.h"
16#include <stdio.h>
17
18namespace lldb {
19
20class SBEvent;
21
22class SBProcess
23{
24public:
25    //------------------------------------------------------------------
26    /// Broadcaster event bits definitions.
27    //------------------------------------------------------------------
28    enum
29    {
30        eBroadcastBitStateChanged   = (1 << 0),
31        eBroadcastBitInterrupt      = (1 << 1),
32        eBroadcastBitSTDOUT         = (1 << 2),
33        eBroadcastBitSTDERR         = (1 << 3)
34    };
35
36    SBProcess ();
37
38    SBProcess (const lldb::SBProcess& rhs);
39
40    const lldb::SBProcess&
41    operator = (const lldb::SBProcess& rhs);
42
43    SBProcess (const lldb::ProcessSP &process_sp);
44
45    ~SBProcess();
46
47    static const char *
48    GetBroadcasterClassName ();
49
50    const char *
51    GetPluginName ();
52
53    const char *
54    GetShortPluginName ();
55
56    void
57    Clear ();
58
59    bool
60    IsValid() const;
61
62    lldb::SBTarget
63    GetTarget() const;
64
65    lldb::ByteOrder
66    GetByteOrder() const;
67
68    size_t
69    PutSTDIN (const char *src, size_t src_len);
70
71    size_t
72    GetSTDOUT (char *dst, size_t dst_len) const;
73
74    size_t
75    GetSTDERR (char *dst, size_t dst_len) const;
76
77    void
78    ReportEventState (const lldb::SBEvent &event, FILE *out) const;
79
80    void
81    AppendEventStateReport (const lldb::SBEvent &event, lldb::SBCommandReturnObject &result);
82
83    //------------------------------------------------------------------
84    /// Remote connection related functions. These will fail if the
85    /// process is not in eStateConnected. They are intended for use
86    /// when connecting to an externally managed debugserver instance.
87    //------------------------------------------------------------------
88    bool
89    RemoteAttachToProcessWithID (lldb::pid_t pid,
90                                 lldb::SBError& error);
91
92    bool
93    RemoteLaunch (char const **argv,
94                  char const **envp,
95                  const char *stdin_path,
96                  const char *stdout_path,
97                  const char *stderr_path,
98                  const char *working_directory,
99                  uint32_t launch_flags,
100                  bool stop_at_entry,
101                  lldb::SBError& error);
102
103    //------------------------------------------------------------------
104    // Thread related functions
105    //------------------------------------------------------------------
106    uint32_t
107    GetNumThreads ();
108
109    lldb::SBThread
110    GetThreadAtIndex (size_t index);
111
112    lldb::SBThread
113    GetThreadByID (lldb::tid_t sb_thread_id);
114
115    lldb::SBThread
116    GetThreadByIndexID (uint32_t index_id);
117
118    lldb::SBThread
119    GetSelectedThread () const;
120
121    bool
122    SetSelectedThread (const lldb::SBThread &thread);
123
124    bool
125    SetSelectedThreadByID (lldb::tid_t tid);
126
127    bool
128    SetSelectedThreadByIndexID (uint32_t index_id);
129
130    //------------------------------------------------------------------
131    // Stepping related functions
132    //------------------------------------------------------------------
133
134    lldb::StateType
135    GetState ();
136
137    int
138    GetExitStatus ();
139
140    const char *
141    GetExitDescription ();
142
143    lldb::pid_t
144    GetProcessID ();
145
146    uint32_t
147    GetAddressByteSize() const;
148
149    lldb::SBError
150    Destroy ();
151
152    lldb::SBError
153    Continue ();
154
155    lldb::SBError
156    Stop ();
157
158    lldb::SBError
159    Kill ();
160
161    lldb::SBError
162    Detach ();
163
164    lldb::SBError
165    Signal (int signal);
166
167    void
168    SendAsyncInterrupt();
169
170    size_t
171    ReadMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
172
173    size_t
174    WriteMemory (addr_t addr, const void *buf, size_t size, lldb::SBError &error);
175
176    size_t
177    ReadCStringFromMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
178
179    uint64_t
180    ReadUnsignedFromMemory (addr_t addr, uint32_t byte_size, lldb::SBError &error);
181
182    lldb::addr_t
183    ReadPointerFromMemory (addr_t addr, lldb::SBError &error);
184
185    // Events
186    static lldb::StateType
187    GetStateFromEvent (const lldb::SBEvent &event);
188
189    static bool
190    GetRestartedFromEvent (const lldb::SBEvent &event);
191
192    static lldb::SBProcess
193    GetProcessFromEvent (const lldb::SBEvent &event);
194
195    static bool
196    EventIsProcessEvent (const lldb::SBEvent &event);
197
198    lldb::SBBroadcaster
199    GetBroadcaster () const;
200
201    static const char *
202    GetBroadcasterClass ();
203
204    bool
205    GetDescription (lldb::SBStream &description);
206
207    uint32_t
208    GetNumSupportedHardwareWatchpoints (lldb::SBError &error) const;
209
210    uint32_t
211    LoadImage (lldb::SBFileSpec &image_spec, lldb::SBError &error);
212
213    lldb::SBError
214    UnloadImage (uint32_t image_token);
215
216protected:
217    friend class SBAddress;
218    friend class SBBreakpoint;
219    friend class SBBreakpointLocation;
220    friend class SBCommandInterpreter;
221    friend class SBDebugger;
222    friend class SBFunction;
223    friend class SBModule;
224    friend class SBTarget;
225    friend class SBThread;
226    friend class SBValue;
227
228    lldb::ProcessSP
229    GetSP() const;
230
231    void
232    SetSP (const lldb::ProcessSP &process_sp);
233
234    lldb::ProcessWP m_opaque_wp;
235};
236
237}  // namespace lldb
238
239#endif  // LLDB_SBProcess_h_
240