14b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen//===-- PlatformFreeBSD.h -----------------------------------------*- C++ -*-===// 24b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// 34b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// The LLVM Compiler Infrastructure 44b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// 54b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// This file is distributed under the University of Illinois Open Source 64b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// License. See LICENSE.TXT for details. 74b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// 84b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen//===----------------------------------------------------------------------===// 94b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen 104b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen#ifndef liblldb_PlatformFreeBSD_h_ 114b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen#define liblldb_PlatformFreeBSD_h_ 124b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen 134b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// C Includes 144b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// C++ Includes 154b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// Other libraries and framework includes 164b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen// Project includes 174b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen#include "lldb/Target/Platform.h" 184b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen 1901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chenclass PlatformFreeBSD : public lldb_private::Platform 2001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen{ 2101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chenpublic: 2201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen // Mostly taken from PlatformDarwin and PlatformMacOSX 234b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen 2401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen //------------------------------------------------------------ 2501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen // Class functions 2601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen //------------------------------------------------------------ 2701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen static lldb_private::Platform* 28b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton CreateInstance (bool force, const lldb_private::ArchSpec *arch); 2901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 3001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen static void 3101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen Initialize (); 3201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 3301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen static void 3401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen Terminate (); 3501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 360e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton static lldb_private::ConstString 370e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton GetPluginNameStatic (bool is_host); 3801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 3901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen static const char * 400e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton GetDescriptionStatic (bool is_host); 4101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 4201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen //------------------------------------------------------------ 4301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen // Class Methods 4401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen //------------------------------------------------------------ 4501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen PlatformFreeBSD (bool is_host); 4601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 4701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual 4801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen ~PlatformFreeBSD(); 4901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 5001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen //------------------------------------------------------------ 5101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen // lldb_private::PluginInterface functions 5201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen //------------------------------------------------------------ 530e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton virtual lldb_private::ConstString 5401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetPluginName() 5501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen { 560e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton return GetPluginNameStatic (IsHost()); 5701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen } 5801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 5901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual uint32_t 6001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetPluginVersion() 6101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen { 6201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen return 1; 6301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen } 6401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 6501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual const char * 6601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetDescription () 674b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen { 6801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen return GetDescriptionStatic(IsHost()); 6901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen } 7001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 7101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen //------------------------------------------------------------ 7201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen // lldb_private::Platform functions 7301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen //------------------------------------------------------------ 7401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual lldb_private::Error 7501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen ResolveExecutable (const lldb_private::FileSpec &exe_file, 7601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen const lldb_private::ArchSpec &arch, 772b737df3a92e30bb66aec108cb4d09ec1c1e86feGreg Clayton lldb::ModuleSP &module_sp, 782b737df3a92e30bb66aec108cb4d09ec1c1e86feGreg Clayton const lldb_private::FileSpecList *module_search_paths_ptr); 7901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 8001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual size_t 8101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetSoftwareBreakpointTrapOpcode (lldb_private::Target &target, 8201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb_private::BreakpointSite *bp_site); 8301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 8401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual bool 8501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetRemoteOSVersion (); 8601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 8701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual bool 8801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetRemoteOSBuildString (std::string &s); 8901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 9001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual bool 9101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetRemoteOSKernelDescription (std::string &s); 9201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 9301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen // Remote Platform subclasses need to override this function 9401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual lldb_private::ArchSpec 9501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetRemoteSystemArchitecture (); 9601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 9701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual bool 9801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen IsConnected () const; 9901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 10001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual lldb_private::Error 10101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen ConnectRemote (lldb_private::Args& args); 10201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 10301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual lldb_private::Error 10401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen DisconnectRemote (); 10501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 10601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual const char * 10701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetHostname (); 10801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 10901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual const char * 11001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetUserName (uint32_t uid); 11101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 11201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual const char * 11301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetGroupName (uint32_t gid); 11401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 11501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual bool 11601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetProcessInfo (lldb::pid_t pid, 11701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb_private::ProcessInstanceInfo &proc_info); 11801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 11901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual uint32_t 12001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info, 12101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb_private::ProcessInstanceInfoList &process_infos); 12201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 12301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual lldb_private::Error 12401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen LaunchProcess (lldb_private::ProcessLaunchInfo &launch_info); 12501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 12601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual lldb::ProcessSP 1277e9964783acae183c23a7ea470cedd64472eb233Johnny Chen Attach(lldb_private::ProcessAttachInfo &attach_info, 12801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb_private::Debugger &debugger, 12901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb_private::Target *target, 13001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb_private::Listener &listener, 13101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb_private::Error &error); 13201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 1337e9964783acae183c23a7ea470cedd64472eb233Johnny Chen // FreeBSD processes can not be launched by spawning and attaching. 1347e9964783acae183c23a7ea470cedd64472eb233Johnny Chen virtual bool 1357e9964783acae183c23a7ea470cedd64472eb233Johnny Chen CanDebugProcess () { return false; } 1367e9964783acae183c23a7ea470cedd64472eb233Johnny Chen 13701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen // Only on PlatformMacOSX: 13801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual lldb_private::Error 13901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetFile (const lldb_private::FileSpec &platform_file, 14001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen const lldb_private::UUID* uuid, lldb_private::FileSpec &local_file); 14101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 14201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb_private::Error 1432b737df3a92e30bb66aec108cb4d09ec1c1e86feGreg Clayton GetSharedModule (const lldb_private::ModuleSpec &module_spec, 14401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb::ModuleSP &module_sp, 1452b737df3a92e30bb66aec108cb4d09ec1c1e86feGreg Clayton const lldb_private::FileSpecList *module_search_paths_ptr, 14601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb::ModuleSP *old_module_sp_ptr, 14701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen bool *did_create_ptr); 14801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 14901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual bool 15001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch); 15101b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 15201b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen virtual void 15301b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen GetStatus (lldb_private::Stream &strm); 15401b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 15501b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chenprotected: 15601b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen lldb::PlatformSP m_remote_platform_sp; // Allow multiple ways to connect to a remote freebsd OS 15701b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen 15801b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chenprivate: 15901b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen DISALLOW_COPY_AND_ASSIGN (PlatformFreeBSD); 16001b79d26bdaa340aea156bb7fbf3ad8e13321819Johnny Chen}; 1614b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen 1624b66329ac82b5f3d939bd31b4d1498da9257d85aJohnny Chen#endif // liblldb_PlatformFreeBSD_h_ 163