124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Host.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 liblldb_Host_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Host_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#if defined(__cplusplus)
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
140b862e488d2fab178b48dc1ea6b1e94b3ef8c7e2Greg Clayton#include <stdarg.h>
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16c350e13fd3351613345141bee7d8b2543df54636Matt Kopec#include <map>
176f0165b3dc0ecc689f565c792e53dd3397b4a432Greg Clayton#include <string>
186f0165b3dc0ecc689f565c792e53dd3397b4a432Greg Clayton
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
207508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham#include "lldb/Core/StringList.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class Host Host.h "lldb/Host/Host.h"
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A class that provides host computer information.
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner///
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Host is a class that answers information about the host operating
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// system.
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Host
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef bool (*MonitorChildProcessCallback) (void *callback_baton,
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                 lldb::pid_t pid,
361c4642c6ab741d85c98d4288cf922c9a2ef77007Greg Clayton                                                 bool exited,
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                 int signal,    // Zero for no signal
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                                 int status);   // Exit value of process if signal is zero
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Start monitoring a child process.
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Allows easy monitoring of child processes. \a callback will be
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// called when the child process exits or if it gets a signal. The
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// callback will only be called with signals if \a monitor_signals
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// is \b true. \a callback will usually be called from another
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// thread so the callback function must be thread safe.
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// When the callback gets called, the return value indicates if
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// minotoring should stop. If \b true is returned from \a callback
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// the information will be removed. If \b false is returned then
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// monitoring will continue. If the child process exits, the
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// monitoring will automatically stop after the callback returned
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// ragardless of the callback return value.
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] callback
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A function callback to call when a child receives a signal
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     (if \a monitor_signals is true) or a child exits.
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] callback_baton
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A void * of user data that will be pass back when
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \a callback is called.
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] pid
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The process ID of a child process to monitor, -1 for all
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     processes.
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] monitor_signals
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     If \b true the callback will get called when the child
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     process gets a signal. If \b false, the callback will only
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     get called if the child process exits.
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
7475ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton    ///     A thread handle that can be used to cancel the thread that
7575ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton    ///     was spawned to monitor \a pid.
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see static void Host::StopMonitoringChildProcess (uint32_t)
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7975ccf50c3371d8c8e293af25461705b86fb10a46Greg Clayton    static lldb::thread_t
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    StartMonitoringChildProcess (MonitorChildProcessCallback callback,
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 void *callback_baton,
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 lldb::pid_t pid,
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                 bool monitor_signals);
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get the host page size.
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The size in bytes of a VM page on the host system.
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static size_t
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPageSize();
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Returns the endianness of the host system.
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns the endianness of the host system as a lldb::ByteOrder
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     enumeration.
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static lldb::ByteOrder
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetByteOrder ();
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
104132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton    //------------------------------------------------------------------
105132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton    /// Returns the number of CPUs on this current host.
106132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton    ///
107132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton    /// @return
108132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton    ///     Number of CPUs on this current host, or zero if the number
109132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton    ///     of CPUs can't be determined on this host.
110132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton    //------------------------------------------------------------------
111132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton    static uint32_t
112132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton    GetNumberCPUS ();
113132c49a1c94927a2e1da9e7b383a2512af3b75eeGreg Clayton
114b1888f24fa181489840b9acf193e224d125d0776Greg Clayton    static bool
115b1888f24fa181489840b9acf193e224d125d0776Greg Clayton    GetOSVersion (uint32_t &major,
116b1888f24fa181489840b9acf193e224d125d0776Greg Clayton                  uint32_t &minor,
117b1888f24fa181489840b9acf193e224d125d0776Greg Clayton                  uint32_t &update);
118b1888f24fa181489840b9acf193e224d125d0776Greg Clayton
11958e26e0935138225477fd61283215ceff2068899Greg Clayton    static bool
12058e26e0935138225477fd61283215ceff2068899Greg Clayton    GetOSBuildString (std::string &s);
12158e26e0935138225477fd61283215ceff2068899Greg Clayton
12258e26e0935138225477fd61283215ceff2068899Greg Clayton    static bool
12358e26e0935138225477fd61283215ceff2068899Greg Clayton    GetOSKernelDescription (std::string &s);
12458e26e0935138225477fd61283215ceff2068899Greg Clayton
12558e26e0935138225477fd61283215ceff2068899Greg Clayton    static bool
12658e26e0935138225477fd61283215ceff2068899Greg Clayton    GetHostname (std::string &s);
12758e26e0935138225477fd61283215ceff2068899Greg Clayton
12824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    static const char *
12924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetUserName (uint32_t uid, std::string &user_name);
13024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton
13124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    static const char *
13224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton    GetGroupName (uint32_t gid, std::string &group_name);
133d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong
134d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    static uint32_t
135d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    GetUserID ();
136d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong
137d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    static uint32_t
138d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    GetGroupID ();
139d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong
140d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    static uint32_t
141d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    GetEffectiveUserID ();
142d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong
143d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    static uint32_t
144d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong    GetEffectiveGroupID ();
145d1040dd360c07305a30d33b5d4501cb9dfb03114Han Ming Ong
146df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton
147df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    enum SystemLogType
148df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    {
149df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton        eSystemLogWarning,
150df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton        eSystemLogError
151df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    };
152df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton
153df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    static void
154df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    SystemLog (SystemLogType type, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
155df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton
156df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    static void
157df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton    SystemLog (SystemLogType type, const char *format, va_list args);
158df6dc88322f103b263092d752db4490e628a1cbdGreg Clayton
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
160395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton    /// Gets the host architecture.
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
163395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton    ///     A const architecture object that represents the host
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     architecture.
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
166395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton    enum SystemDefaultArchitecture
167395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton    {
168395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton        eSystemDefaultArchitecture,     // The overall default architecture that applications will run on this host
169395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton        eSystemDefaultArchitecture32,   // If this host supports 32 bit programs, return the default 32 bit arch
170395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton        eSystemDefaultArchitecture64    // If this host supports 64 bit programs, return the default 64 bit arch
171395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton    };
172395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const ArchSpec &
174395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton    GetArchitecture (SystemDefaultArchitecture arch_kind = eSystemDefaultArchitecture);
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Gets the host vendor string.
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A const string object containing the host vendor name.
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const ConstString &
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetVendorString ();
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Gets the host Operating System (OS) string.
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A const string object containing the host OS name.
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const ConstString &
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetOSString ();
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Gets the host target triple as a const string.
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A const string object containing the host target triple.
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const ConstString &
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetTargetTriple ();
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get the process ID for the calling process.
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The process ID for the current process.
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static lldb::pid_t
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetCurrentProcessID ();
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get the thread ID for the calling thread in the current process.
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The thread ID for the calling thread in the current process.
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2188f3b21daa0d509ac49b2b82f45aaed35f6874502Greg Clayton    static lldb::tid_t
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetCurrentThreadID ();
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2211831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham    //------------------------------------------------------------------
2221831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham    /// Get the thread token (the one returned by ThreadCreate when the thread was created) for the
2231831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham    /// calling thread in the current process.
2241831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham    ///
2251831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham    /// @return
2261831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham    ///     The thread token for the calling thread in the current process.
2271831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham    //------------------------------------------------------------------
2281831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham    static lldb::thread_t
2291831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham    GetCurrentThread ();
2301831e78a6253392fca1c99e555e7adaa3f372647Jim Ingham
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static const char *
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSignalAsCString (int signo);
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static void
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WillTerminate ();
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Host specific thread created function call.
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// This function call lets the current host OS do any thread
24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// specific initialization that it needs, including naming the
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// thread. No cleanup routine is exptected to be called
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] name
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The current thread's name in the current process.
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static void
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadCreated (const char *name);
24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static lldb::thread_t
25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadCreate (const char *name,
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  lldb::thread_func_t function,
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  lldb::thread_arg_t thread_arg,
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  Error *err);
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadCancel (lldb::thread_t thread,
25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  Error *error);
25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadDetach (lldb::thread_t thread,
26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  Error *error);
26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ThreadJoin (lldb::thread_t thread,
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                lldb::thread_result_t *thread_result_ptr,
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                Error *error);
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Gets the name of a thread in a process.
26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// This function will name a thread in a process using it's own
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// thread name pool, and also will attempt to set a thread name
27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// using any supported host OS APIs.
27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] pid
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The process ID in which we are trying to get the name of
27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     a thread.
27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] tid
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The thread ID for which we are trying retrieve the name of.
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
2826f0165b3dc0ecc689f565c792e53dd3397b4a432Greg Clayton    ///     A std::string containing the thread name.
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2846f0165b3dc0ecc689f565c792e53dd3397b4a432Greg Clayton    static std::string
28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetThreadName (lldb::pid_t pid, lldb::tid_t tid);
28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Sets the name of a thread in the current process.
28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] pid
29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The process ID in which we are trying to name a thread.
29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] tid
29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The thread ID which we are trying to name.
29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] name
29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The current thread's name in the current process to \a name.
29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \b true if the thread name was able to be set, \b false
30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     otherwise.
30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
303024497728739eedffc9b79c28337fba22f07f8b4Matt Kopec    static bool
30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetThreadName (lldb::pid_t pid, lldb::tid_t tid, const char *name);
30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
307f476592805f813aa7a94f7d6770481503140aae2Ed Maste    /// Sets a shortened name of a thread in the current process.
308f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///
309f476592805f813aa7a94f7d6770481503140aae2Ed Maste    /// @param[in] pid
310f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///     The process ID in which we are trying to name a thread.
311f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///
312f476592805f813aa7a94f7d6770481503140aae2Ed Maste    /// @param[in] tid
313f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///     The thread ID which we are trying to name.
314f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///
315f476592805f813aa7a94f7d6770481503140aae2Ed Maste    /// @param[in] name
316f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///     The current thread's name in the current process to \a name.
317f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///
318f476592805f813aa7a94f7d6770481503140aae2Ed Maste    /// @param[in] len
319f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///     The maximum length for the thread's shortened name.
320f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///
321f476592805f813aa7a94f7d6770481503140aae2Ed Maste    /// @return
322f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///     \b true if the thread name was able to be set, \b false
323f476592805f813aa7a94f7d6770481503140aae2Ed Maste    ///     otherwise.
324f476592805f813aa7a94f7d6770481503140aae2Ed Maste    static bool
325f476592805f813aa7a94f7d6770481503140aae2Ed Maste    SetShortThreadName (lldb::pid_t pid, lldb::tid_t tid, const char *name, size_t len);
326f476592805f813aa7a94f7d6770481503140aae2Ed Maste
327f476592805f813aa7a94f7d6770481503140aae2Ed Maste    //------------------------------------------------------------------
32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Gets the FileSpec of the current process (the process that
32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// that is running the LLDB code).
33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \b A file spec with the program name.
33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static FileSpec
33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetProgramFileSpec ();
33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Given an address in the current process (the process that
33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// is running the LLDB code), return the name of the module that
34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// it comes from. This can be useful when you need to know the
34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// path to the shared library that your code is running in for
34224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// loading resources that are relative to your binary.
34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] host_addr
34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The pointer to some code in the current process.
34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \b A file spec with the module that contains \a host_addr,
34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     which may be invalid if \a host_addr doesn't fall into
35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     any valid module address range.
35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static FileSpec
35324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetModuleFileSpecForHostAddress (const void *host_addr);
35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
35524b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton
3569ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton
3579ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    //------------------------------------------------------------------
3589ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    /// If you have an executable that is in a bundle and want to get
3599ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    /// back to the bundle directory from the path itself, this
3609ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    /// function will change a path to a file within a bundle to the
3619ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    /// bundle directory itself.
3629ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ///
3639ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    /// @param[in] file
3649ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ///     A file spec that might point to a file in a bundle.
3659ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ///
3669ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    /// @param[out] bundle_directory
3679ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ///     An object will be filled in with the bundle directory for
3689ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ///     the bundle when \b true is returned. Otherwise \a file is
3699ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ///     left untouched and \b false is returned.
3709ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ///
3719ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    /// @return
3729ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ///     \b true if \a file was resolved in \a bundle_directory,
3739ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    ///     \b false otherwise.
3749ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    //------------------------------------------------------------------
3759ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    static bool
3769ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton    GetBundleDirectory (const FileSpec &file, FileSpec &bundle_directory);
3779ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton
37824b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    //------------------------------------------------------------------
37924b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// When executable files may live within a directory, where the
38024b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// directory represents an executable bundle (like the MacOSX
38124b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// app bundles), the locate the executable within the containing
38224b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// bundle.
38324b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///
38424b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// @param[in,out] file
38524b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     A file spec that currently points to the bundle that will
38624b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     be filled in with the executable path within the bundle
38724b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     if \b true is returned. Otherwise \a file is left untouched.
38824b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///
38924b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// @return
39024b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     \b true if \a file was resolved, \b false if this function
39124b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     was not able to resolve the path.
39224b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    //------------------------------------------------------------------
39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
39424b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ResolveExecutableInBundle (FileSpec &file);
39524b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton
39624b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    //------------------------------------------------------------------
39724b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// Find a resource files that are related to LLDB.
39824b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///
39924b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// Operating systems have different ways of storing shared
40024b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// libraries and related resources. This function abstracts the
40124b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// access to these paths.
40224b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///
40324b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// @param[in] path_type
40424b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     The type of LLDB resource path you are looking for. If the
40524b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     enumeration ends with "Dir", then only the \a file_spec's
40624b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     directory member gets filled in.
40724b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///
40824b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// @param[in] file_spec
40924b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     A file spec that gets filled in with the appriopriate path.
41024b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///
41124b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    /// @return
41224b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    ///     \b true if \a resource_path was resolved, \a false otherwise.
41324b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    //------------------------------------------------------------------
41424b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    static bool
415b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton    GetLLDBPath (PathType path_type,
41624b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton                 FileSpec &file_spec);
417eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice
418e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    //------------------------------------------------------------------
419e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    /// Set a string that can be displayed if host application crashes.
420e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    ///
421e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    /// Some operating systems have the ability to print a description
422e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    /// for shared libraries when a program crashes. If the host OS
423e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    /// supports such a mechanism, it should be implemented to help
424e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    /// with crash triage.
425e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    ///
426e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    /// @param[in] format
427e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    ///     A printf format that will be used to form a new crash
428e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    ///     description string.
429e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    //------------------------------------------------------------------
430e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    static void
4317e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda    SetCrashDescriptionWithFormat (const char *format, ...)  __attribute__ ((format (printf, 1, 2)));
432e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton
433e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    static void
434e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton    SetCrashDescription (const char *description);
435e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton
4367508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham    static uint32_t
437b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    FindProcesses (const ProcessInstanceInfoMatch &match_info,
438b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton                   ProcessInstanceInfoList &proc_infos);
439c350e13fd3351613345141bee7d8b2543df54636Matt Kopec
440c350e13fd3351613345141bee7d8b2543df54636Matt Kopec    typedef std::map<lldb::pid_t, bool> TidMap;
441c350e13fd3351613345141bee7d8b2543df54636Matt Kopec    typedef std::pair<lldb::pid_t, bool> TidPair;
442c350e13fd3351613345141bee7d8b2543df54636Matt Kopec    static bool
443c350e13fd3351613345141bee7d8b2543df54636Matt Kopec    FindProcessThreads (const lldb::pid_t pid, TidMap &tids_to_attach);
444c350e13fd3351613345141bee7d8b2543df54636Matt Kopec
445e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    static bool
446b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo &proc_info);
44774989e88af7e04f3fe0bb3a800163113d7e0ca12Jim Ingham
4484b40711e7950310afb74835820eb669004cd8c44Greg Clayton    static lldb::pid_t
44924b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton    LaunchApplication (const FileSpec &app_file_spec);
45024b48ff28b7c60dd4598212c3e77935a0fc1142dGreg Clayton
451b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    static Error
452b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton    LaunchProcess (ProcessLaunchInfo &launch_info);
4537e9964783acae183c23a7ea470cedd64472eb233Johnny Chen
45497471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton    static Error
45597471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton    RunShellCommand (const char *command,           // Shouldn't be NULL
45697471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton                     const char *working_dir,       // Pass NULL to use the current working directory
45797471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton                     int *status_ptr,               // Pass NULL if you don't want the process exit status
45897471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton                     int *signo_ptr,                // Pass NULL if you don't want the signal that caused the process to exit
45997471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton                     std::string *command_output,   // Pass NULL if you don't want the command output
460b924eb6c5250a9909dc55ac736d231f7ccae423bGreg Clayton                     uint32_t timeout_sec,
461b924eb6c5250a9909dc55ac736d231f7ccae423bGreg Clayton                     const char *shell = "/bin/bash");
46297471184b8823c949bc68bbf54ea3edf3845a750Greg Clayton
4637e9964783acae183c23a7ea470cedd64472eb233Johnny Chen    static lldb::DataBufferSP
4647e9964783acae183c23a7ea470cedd64472eb233Johnny Chen    GetAuxvData (lldb_private::Process *process);
4657e9964783acae183c23a7ea470cedd64472eb233Johnny Chen
466f35a96c63732a1b3adf875ea44c7d3d7de6f8eecSean Callanan    static lldb::TargetSP
467f35a96c63732a1b3adf875ea44c7d3d7de6f8eecSean Callanan    GetDummyTarget (Debugger &debugger);
468f35a96c63732a1b3adf875ea44c7d3d7de6f8eecSean Callanan
46974989e88af7e04f3fe0bb3a800163113d7e0ca12Jim Ingham    static bool
47052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton    OpenFileInExternalEditor (const FileSpec &file_spec,
47152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton                              uint32_t line_no);
4727508e732818c32e1cfeaaf7d1d507fe3834ce9d2Jim Ingham
473b749a265a2b97f9cef71c362dfd6dae26c8f2973Greg Clayton    static void
474b749a265a2b97f9cef71c362dfd6dae26c8f2973Greg Clayton    Backtrace (Stream &strm, uint32_t max_frames);
475638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton
476638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton    static size_t
477638351aee118e89c658ca295cb4e9d1db7849befGreg Clayton    GetEnvironment (StringList &env);
47852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton
47914ef59fe5728d862c040cf5a6b99c384229a34eeGreg Clayton    enum DynamicLibraryOpenOptions
48014ef59fe5728d862c040cf5a6b99c384229a34eeGreg Clayton    {
48114ef59fe5728d862c040cf5a6b99c384229a34eeGreg Clayton        eDynamicLibraryOpenOptionLazy           = (1u << 0),  // Lazily resolve symbols in this dynamic library
48214ef59fe5728d862c040cf5a6b99c384229a34eeGreg Clayton        eDynamicLibraryOpenOptionLocal          = (1u << 1),  // Only open a shared library with local access (hide it from the global symbol namespace)
48314ef59fe5728d862c040cf5a6b99c384229a34eeGreg Clayton        eDynamicLibraryOpenOptionLimitGetSymbol = (1u << 2)   // DynamicLibraryGetSymbol calls on this handle will only return matches from this shared library
48414ef59fe5728d862c040cf5a6b99c384229a34eeGreg Clayton    };
48552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton    static void *
48652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton    DynamicLibraryOpen (const FileSpec &file_spec,
48714ef59fe5728d862c040cf5a6b99c384229a34eeGreg Clayton                        uint32_t options,
48852fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton                        Error &error);
48952fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton
49052fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton    static Error
49152fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton    DynamicLibraryClose (void *dynamic_library_handle);
49252fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton
49352fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton    static void *
49452fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton    DynamicLibraryGetSymbol (void *dynamic_library_handle,
49552fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton                             const char *symbol_name,
49652fd984f7e67c3a0ab18d5565f40356bcfa84822Greg Clayton                             Error &error);
49724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
49924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
50024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
50124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // #if defined(__cplusplus)
50224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_Host_h_
503