SBProcess.cpp revision 5c4c746a3a83c1aad411c6cdc5f9525a4fc2d17e
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBProcess.cpp -------------------------------------------*- 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
107a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBProcess.h"
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-defines.h"
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-types.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1584cdc15005983e5244d665fa779e33c2b6fac95fJim Ingham#include "lldb/Interpreter/Args.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataBufferHeap.h"
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataExtractor.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/State.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StreamFile.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h"
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/RegisterContext.h"
2363094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Target/Target.h"
2463094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "lldb/Target/Thread.h"
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
287a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBBroadcaster.h"
297a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBDebugger.h"
307a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBCommandReturnObject.h"
317a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBEvent.h"
327a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBThread.h"
3398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h"
347a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "lldb/API/SBStringList.h"
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb;
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private;
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::SBProcess () :
4263094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_sp()
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// SBProcess constructor
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::SBProcess (const SBProcess& rhs) :
5263094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_sp (rhs.m_opaque_sp)
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::SBProcess (const lldb::ProcessSP &process_sp) :
5863094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_sp (process_sp)
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::~SBProcess()
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::SetProcess (const ProcessSP &process_sp)
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7263094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_sp = process_sp;
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Clear ()
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
7863094e0bb161580564954dee512955c1c79d3476Greg Clayton    m_opaque_sp.reset();
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::IsValid() const
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
8563094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_sp.get() != NULL;
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetNumThreads ()
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
9263094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const bool can_update = true;
9563094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->GetThreadList().GetSize(can_update);
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return 0;
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBThread
101c833295baeec641086f536e78050388af36784f8Jim InghamSBProcess::GetSelectedThread () const
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBThread sb_thread;
10463094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
105c833295baeec641086f536e78050388af36784f8Jim Ingham        sb_thread.SetThread (m_opaque_sp->GetThreadList().GetSelectedThread());
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_thread;
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBTarget
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetTarget() const
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBTarget sb_target;
11363094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
11463094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_target = m_opaque_sp->GetTarget().GetSP();
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_target;
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::PutSTDIN (const char *src, size_t src_len)
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
12263094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        Error error;
12563094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->PutSTDIN (src, src_len, error);
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return 0;
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetSTDOUT (char *dst, size_t dst_len) const
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
13463094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        Error error;
13763094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->GetSTDOUT (dst, dst_len, error);
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return 0;
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetSTDERR (char *dst, size_t dst_len) const
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
14663094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        Error error;
14963094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->GetSTDERR (dst, dst_len, error);
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return 0;
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
156c833295baeec641086f536e78050388af36784f8Jim InghamSBProcess::ReportEventState (const SBEvent &event, FILE *out) const
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (out == NULL)
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return;
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16163094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const StateType event_state = SBProcess::GetStateFromEvent (event);
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        char message[1024];
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        int message_len = ::snprintf (message,
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                      sizeof (message),
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                      "Process %d %s\n",
16863094e0bb161580564954dee512955c1c79d3476Greg Clayton                                      m_opaque_sp->GetID(),
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                      SBDebugger::StateAsCString (event_state));
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        if (message_len > 0)
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            ::fwrite (message, 1, message_len, out);
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid
177c833295baeec641086f536e78050388af36784f8Jim InghamSBProcess::AppendEventStateReport (const SBEvent &event, SBCommandReturnObject &result)
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
17963094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const StateType event_state = SBProcess::GetStateFromEvent (event);
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        char message[1024];
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        ::snprintf (message,
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    sizeof (message),
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    "Process %d %s\n",
18663094e0bb161580564954dee512955c1c79d3476Greg Clayton                    m_opaque_sp->GetID(),
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    SBDebugger::StateAsCString (event_state));
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        result.AppendMessage (message);
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
194c833295baeec641086f536e78050388af36784f8Jim InghamSBProcess::SetSelectedThread (const SBThread &thread)
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
19663094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
197c833295baeec641086f536e78050388af36784f8Jim Ingham        return m_opaque_sp->GetThreadList().SetSelectedThreadByID (thread.GetThreadID());
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return false;
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
202c833295baeec641086f536e78050388af36784f8Jim InghamSBProcess::SetSelectedThreadByID (uint32_t tid)
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
20463094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
205c833295baeec641086f536e78050388af36784f8Jim Ingham        return m_opaque_sp->GetThreadList().SetSelectedThreadByID (tid);
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return false;
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBThread
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetThreadAtIndex (size_t index)
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBThread thread;
21363094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
21463094e0bb161580564954dee512955c1c79d3476Greg Clayton        thread.SetThread (m_opaque_sp->GetThreadList().GetThreadAtIndex(index));
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return thread;
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerStateType
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetState ()
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
22163094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
22263094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->GetState();
22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return eStateInvalid;
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetExitStatus ()
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
23163094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
23263094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->GetExitStatus ();
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return 0;
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char *
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetExitDescription ()
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
24063094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp != NULL)
24163094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->GetExitDescription ();
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return NULL;
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::pid_t
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetProcessID ()
24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
24963094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
25063094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->GetID();
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return LLDB_INVALID_PROCESS_ID;
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetAddressByteSize () const
25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
25863094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
25963094e0bb161580564954dee512955c1c79d3476Greg Clayton        return m_opaque_sp->GetAddressByteSize();
26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return 0;
26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::WaitUntilProcessHasStopped (SBCommandReturnObject &result)
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool state_changed = false;
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (IsValid())
27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        EventSP event_sp;
27263094e0bb161580564954dee512955c1c79d3476Greg Clayton        StateType state = m_opaque_sp->WaitForStateChangedEvents (NULL, event_sp);
27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        while (StateIsStoppedState (state))
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        {
27663094e0bb161580564954dee512955c1c79d3476Greg Clayton            state = m_opaque_sp->WaitForStateChangedEvents (NULL, event_sp);
27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            SBEvent event (event_sp);
278c833295baeec641086f536e78050388af36784f8Jim Ingham            AppendEventStateReport (event, result);
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            state_changed = true;
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        }
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return state_changed;
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError
28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Continue ()
28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError sb_error;
28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (IsValid())
29063094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_error.SetError(m_opaque_sp->Resume());
29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetErrorString ("SBProcess is invalid");
29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_error;
29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError
29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Destroy ()
30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError sb_error;
30263094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
30363094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_error.SetError(m_opaque_sp->Destroy());
30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetErrorString ("SBProcess is invalid");
30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_error;
30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError
31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Stop ()
31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError sb_error;
31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (IsValid())
31663094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_error.SetError (m_opaque_sp->Halt());
31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetErrorString ("SBProcess is invalid");
31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_error;
32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError
32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Kill ()
32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError sb_error;
32663094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
32763094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_error.SetError (m_opaque_sp->Destroy());
32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetErrorString ("SBProcess is invalid");
33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_error;
33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError
33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::AttachByName (const char *name, bool wait_for_launch)
33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError sb_error;
33863094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
33963094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_error.SetError (m_opaque_sp->Attach (name, wait_for_launch));
34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetErrorString ("SBProcess is invalid");
34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_error;
34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::pid_t
346dfc91c368886f961b5cac95efc9adfe9be05cf73Caroline TiceSBProcess::AttachByPID (lldb::pid_t attach_pid) // DEPRECATED: will be removed in a few builds in favor of SBError AttachByPID(pid_t)
34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Attach (attach_pid);
34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return GetProcessID();
35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
352dfc91c368886f961b5cac95efc9adfe9be05cf73Caroline Tice
35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError
35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Attach (lldb::pid_t attach_pid)
35524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError sb_error;
35763094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
35863094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_error.SetError  (m_opaque_sp->Attach (attach_pid));
35924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetErrorString ("SBProcess is invalid");
36124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_error;
36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
36424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError
36524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Detach ()
36624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
36724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError sb_error;
36863094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
36963094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_error.SetError (m_opaque_sp->Detach());
37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetErrorString ("SBProcess is invalid");
37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_error;
37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBError
37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::Signal (int signal)
37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError sb_error;
38063094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
38163094e0bb161580564954dee512955c1c79d3476Greg Clayton        sb_error.SetError (m_opaque_sp->Signal (signal));
38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetErrorString ("SBProcess is invalid");
38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return sb_error;
38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBThread
38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetThreadByID (tid_t sb_thread_id)
38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBThread thread;
39163094e0bb161580564954dee512955c1c79d3476Greg Clayton    if (m_opaque_sp)
39263094e0bb161580564954dee512955c1c79d3476Greg Clayton        thread.SetThread (m_opaque_sp->GetThreadList().FindThreadByID ((tid_t) sb_thread_id));
39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return thread;
39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
39524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerStateType
39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetStateFromEvent (const SBEvent &event)
39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
39963094e0bb161580564954dee512955c1c79d3476Greg Clayton    return Process::ProcessEventData::GetStateFromEvent (event.get());
40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool
40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetRestartedFromEvent (const SBEvent &event)
40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
40563094e0bb161580564954dee512955c1c79d3476Greg Clayton    return Process::ProcessEventData::GetRestartedFromEvent (event.get());
40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
40824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess
40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetProcessFromEvent (const SBEvent &event)
41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
41163094e0bb161580564954dee512955c1c79d3476Greg Clayton    SBProcess process(Process::ProcessEventData::GetProcessFromEvent (event.get()));
41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return process;
41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBBroadcaster
41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::GetBroadcaster () const
41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
41963094e0bb161580564954dee512955c1c79d3476Greg Clayton    SBBroadcaster broadcaster(m_opaque_sp.get(), false);
42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return broadcaster;
42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::Process *
42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::operator->() const
42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
42663094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_sp.get();
42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::ReadMemory (addr_t addr, void *dst, size_t dst_len, SBError &sb_error)
43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t bytes_read = 0;
43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (IsValid())
43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        Error error;
43763094e0bb161580564954dee512955c1c79d3476Greg Clayton        bytes_read = m_opaque_sp->ReadMemory (addr, dst, dst_len, error);
43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetError (error);
43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
44024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    else
44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
44224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetErrorString ("SBProcess is invalid");
44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
44424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
44524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return bytes_read;
44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
44724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
44824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnersize_t
44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::WriteMemory (addr_t addr, const void *src, size_t src_len, SBError &sb_error)
45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t bytes_written = 0;
45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    if (IsValid())
45424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        Error error;
45663094e0bb161580564954dee512955c1c79d3476Greg Clayton        bytes_written = m_opaque_sp->WriteMemory (addr, src, src_len, error);
45724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        sb_error.SetError (error);
45824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
45924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
46024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    return bytes_written;
46124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
46224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
46324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Mimic shared pointer...
46424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb_private::Process *
46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBProcess::get() const
46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
46763094e0bb161580564954dee512955c1c79d3476Greg Clayton    return m_opaque_sp.get();
46824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
47098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool
47198f930f429160f9777f626c3ac6aa609f4e965d2Caroline TiceSBProcess::GetDescription (SBStream &description)
47298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice{
47398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    if (m_opaque_sp)
47498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    {
47598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        char path[PATH_MAX];
47698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        GetTarget().GetExecutable().GetPath (path, sizeof(path));
4775c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton        Module *exe_module = m_opaque_sp->GetTarget().GetExecutableModule ().get();
4785c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton        const char *exe_name = NULL;
4795c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton        if (exe_module)
4805c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton            exe_name = exe_module->GetFileSpec().GetFilename().AsCString();
4815c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton
4825c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton        description.Printf ("Process {pid: %d, state: %s, threads: %d%s%s}",
4835c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton                            m_opaque_sp->GetID(),
48498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice                            SBDebugger::StateAsCString (GetState()),
4855c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton                            GetNumThreads(),
4865c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton                            exe_name ? ", executable: " : "",
4875c4c746a3a83c1aad411c6cdc5f9525a4fc2d17eGreg Clayton                            exe_name ? exe_name : "");
48898f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    }
48998f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    else
49098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice        description.Printf ("No value");
49198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
49298f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    return true;
49398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice}
494