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