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