Home | History | Annotate | Download | only in FreeBSD
      1 //===-- PlatformFreeBSD.h -----------------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef liblldb_PlatformFreeBSD_h_
     11 #define liblldb_PlatformFreeBSD_h_
     12 
     13 // C Includes
     14 // C++ Includes
     15 // Other libraries and framework includes
     16 // Project includes
     17 #include "lldb/Target/Platform.h"
     18 
     19 class PlatformFreeBSD : public lldb_private::Platform
     20 {
     21 public:
     22     // Mostly taken from PlatformDarwin and PlatformMacOSX
     23 
     24     //------------------------------------------------------------
     25     // Class functions
     26     //------------------------------------------------------------
     27     static lldb_private::Platform*
     28     CreateInstance (bool force, const lldb_private::ArchSpec *arch);
     29 
     30     static void
     31     Initialize ();
     32 
     33     static void
     34     Terminate ();
     35 
     36     static lldb_private::ConstString
     37     GetPluginNameStatic (bool is_host);
     38 
     39     static const char *
     40     GetDescriptionStatic (bool is_host);
     41 
     42     //------------------------------------------------------------
     43     // Class Methods
     44     //------------------------------------------------------------
     45     PlatformFreeBSD (bool is_host);
     46 
     47     virtual
     48     ~PlatformFreeBSD();
     49 
     50     //------------------------------------------------------------
     51     // lldb_private::PluginInterface functions
     52     //------------------------------------------------------------
     53     virtual lldb_private::ConstString
     54     GetPluginName()
     55     {
     56         return GetPluginNameStatic (IsHost());
     57     }
     58 
     59     virtual uint32_t
     60     GetPluginVersion()
     61     {
     62         return 1;
     63     }
     64 
     65     virtual const char *
     66     GetDescription ()
     67     {
     68         return GetDescriptionStatic(IsHost());
     69     }
     70 
     71     //------------------------------------------------------------
     72     // lldb_private::Platform functions
     73     //------------------------------------------------------------
     74     virtual lldb_private::Error
     75     ResolveExecutable (const lldb_private::FileSpec &exe_file,
     76                        const lldb_private::ArchSpec &arch,
     77                        lldb::ModuleSP &module_sp,
     78                        const lldb_private::FileSpecList *module_search_paths_ptr);
     79 
     80     virtual size_t
     81     GetSoftwareBreakpointTrapOpcode (lldb_private::Target &target,
     82                                      lldb_private::BreakpointSite *bp_site);
     83 
     84     virtual bool
     85     GetRemoteOSVersion ();
     86 
     87     virtual bool
     88     GetRemoteOSBuildString (std::string &s);
     89 
     90     virtual bool
     91     GetRemoteOSKernelDescription (std::string &s);
     92 
     93     // Remote Platform subclasses need to override this function
     94     virtual lldb_private::ArchSpec
     95     GetRemoteSystemArchitecture ();
     96 
     97     virtual bool
     98     IsConnected () const;
     99 
    100     virtual lldb_private::Error
    101     ConnectRemote (lldb_private::Args& args);
    102 
    103     virtual lldb_private::Error
    104     DisconnectRemote ();
    105 
    106     virtual const char *
    107     GetHostname ();
    108 
    109     virtual const char *
    110     GetUserName (uint32_t uid);
    111 
    112     virtual const char *
    113     GetGroupName (uint32_t gid);
    114 
    115     virtual bool
    116     GetProcessInfo (lldb::pid_t pid,
    117                     lldb_private::ProcessInstanceInfo &proc_info);
    118 
    119     virtual uint32_t
    120     FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info,
    121                    lldb_private::ProcessInstanceInfoList &process_infos);
    122 
    123     virtual lldb_private::Error
    124     LaunchProcess (lldb_private::ProcessLaunchInfo &launch_info);
    125 
    126     virtual lldb::ProcessSP
    127     Attach(lldb_private::ProcessAttachInfo &attach_info,
    128            lldb_private::Debugger &debugger,
    129            lldb_private::Target *target,
    130            lldb_private::Listener &listener,
    131            lldb_private::Error &error);
    132 
    133     // FreeBSD processes can not be launched by spawning and attaching.
    134     virtual bool
    135     CanDebugProcess () { return false; }
    136 
    137     // Only on PlatformMacOSX:
    138     virtual lldb_private::Error
    139     GetFile (const lldb_private::FileSpec &platform_file,
    140              const lldb_private::UUID* uuid, lldb_private::FileSpec &local_file);
    141 
    142     lldb_private::Error
    143     GetSharedModule (const lldb_private::ModuleSpec &module_spec,
    144                      lldb::ModuleSP &module_sp,
    145                      const lldb_private::FileSpecList *module_search_paths_ptr,
    146                      lldb::ModuleSP *old_module_sp_ptr,
    147                      bool *did_create_ptr);
    148 
    149     virtual bool
    150     GetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch);
    151 
    152     virtual void
    153     GetStatus (lldb_private::Stream &strm);
    154 
    155 protected:
    156     lldb::PlatformSP m_remote_platform_sp; // Allow multiple ways to connect to a remote freebsd OS
    157 
    158 private:
    159     DISALLOW_COPY_AND_ASSIGN (PlatformFreeBSD);
    160 };
    161 
    162 #endif  // liblldb_PlatformFreeBSD_h_
    163