SBProcess.h revision 5c4c746a3a83c1aad411c6cdc5f9525a4fc2d17e
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBProcess.h ---------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef LLDB_SBProcess_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBProcess_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
145f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBError.h"
155f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBTarget.h"
167884ab842f7f0be6c583eac2904f5763706816bcEli Friedman#include <stdio.h>
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBEvent;
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBProcess
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Broadcaster event bits definitions.
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    enum
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        eBroadcastBitStateChanged   = (1 << 0),
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        eBroadcastBitInterrupt      = (1 << 1),
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        eBroadcastBitSTDOUT         = (1 << 2),
33e28824e0b988221c7eedf8e3d212527d2bdac6a7Eli Friedman        eBroadcastBitSTDERR         = (1 << 3)
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBProcess ();
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBProcess (const lldb::SBProcess& rhs);
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~SBProcess();
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Clear ();
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValid() const;
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBTarget
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetTarget() const;
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    PutSTDIN (const char *src, size_t src_len);
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSTDOUT (char *dst, size_t dst_len) const;
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSTDERR (char *dst, size_t dst_len) const;
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
61c833295baeec641086f536e78050388af36784f8Jim Ingham    ReportEventState (const lldb::SBEvent &event, FILE *out) const;
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
64c833295baeec641086f536e78050388af36784f8Jim Ingham    AppendEventStateReport (const lldb::SBEvent &event, lldb::SBCommandReturnObject &result);
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Thread related functions
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumThreads ();
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBThread
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetThreadAtIndex (size_t index);
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBThread
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetThreadByID (lldb::tid_t sb_thread_id);
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBThread
79c833295baeec641086f536e78050388af36784f8Jim Ingham    GetSelectedThread () const;
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
82c833295baeec641086f536e78050388af36784f8Jim Ingham    SetSelectedThread (const lldb::SBThread &thread);
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
85c833295baeec641086f536e78050388af36784f8Jim Ingham    SetSelectedThreadByID (uint32_t tid);
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Stepping related functions
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::StateType
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetState ();
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetExitStatus ();
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetExitDescription ();
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::pid_t
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetProcessID ();
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetAddressByteSize() const;
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Destroy ();
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WaitUntilProcessHasStopped (lldb::SBCommandReturnObject &result);
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::pid_t
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AttachByPID (lldb::pid_t pid);  // DEPRECATED: will be removed in a few builds in favor of SBError AttachByPID(pid_t)
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Attach (lldb::pid_t pid);
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AttachByName (const char *name, bool wait_for_launch);
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Continue ();
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Stop ();
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Kill ();
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Detach ();
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Signal (int signal);
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ReadMemory (addr_t addr, void *buf, size_t size, SBError &error);
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WriteMemory (addr_t addr, const void *buf, size_t size, SBError &error);
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Events
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static lldb::StateType
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetStateFromEvent (const lldb::SBEvent &event);
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetRestartedFromEvent (const lldb::SBEvent &event);
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static lldb::SBProcess
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetProcessFromEvent (const lldb::SBEvent &event);
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::SBBroadcaster
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetBroadcaster () const;
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    bool
15698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    GetDescription (lldb::SBStream &description);
15798f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBAddress;
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBBreakpoint;
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBBreakpointLocation;
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBCommandInterpreter;
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBDebugger;
1645c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton    friend class SBFunction;
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBTarget;
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBThread;
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBValue;
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef SWIG
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Process *
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator->() const;
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Mimic shared pointer...
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Process *
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    get() const;
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBProcess (const lldb::ProcessSP &process_sp);
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetProcess (const lldb::ProcessSP &process_sp);
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18663094e0bb161580564954dee512955c1c79d3476Greg Clayton    lldb::ProcessSP m_opaque_sp;
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}  // namespace lldb
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // LLDB_SBProcess_h_
192