PlatformFreeBSD.h revision 269024
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
19class PlatformFreeBSD : public lldb_private::Platform
20{
21public:
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    RunShellCommand (const char *command,
76                     const char *working_dir,
77                     int *status_ptr,
78                     int *signo_ptr,
79                     std::string *command_output,
80                     uint32_t timeout_sec);
81
82    virtual lldb_private::Error
83    ResolveExecutable (const lldb_private::FileSpec &exe_file,
84                       const lldb_private::ArchSpec &arch,
85                       lldb::ModuleSP &module_sp,
86                       const lldb_private::FileSpecList *module_search_paths_ptr);
87
88    virtual size_t
89    GetSoftwareBreakpointTrapOpcode (lldb_private::Target &target,
90                                     lldb_private::BreakpointSite *bp_site);
91
92    virtual bool
93    GetRemoteOSVersion ();
94
95    virtual bool
96    GetRemoteOSBuildString (std::string &s);
97
98    virtual bool
99    GetRemoteOSKernelDescription (std::string &s);
100
101    // Remote Platform subclasses need to override this function
102    virtual lldb_private::ArchSpec
103    GetRemoteSystemArchitecture ();
104
105    virtual bool
106    IsConnected () const;
107
108    virtual lldb_private::Error
109    ConnectRemote (lldb_private::Args& args);
110
111    virtual lldb_private::Error
112    DisconnectRemote ();
113
114    virtual const char *
115    GetHostname ();
116
117    virtual const char *
118    GetUserName (uint32_t uid);
119
120    virtual const char *
121    GetGroupName (uint32_t gid);
122
123    virtual bool
124    GetProcessInfo (lldb::pid_t pid,
125                    lldb_private::ProcessInstanceInfo &proc_info);
126
127    virtual uint32_t
128    FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info,
129                   lldb_private::ProcessInstanceInfoList &process_infos);
130
131    virtual lldb_private::Error
132    LaunchProcess (lldb_private::ProcessLaunchInfo &launch_info);
133
134    virtual lldb::ProcessSP
135    Attach(lldb_private::ProcessAttachInfo &attach_info,
136           lldb_private::Debugger &debugger,
137           lldb_private::Target *target,
138           lldb_private::Listener &listener,
139           lldb_private::Error &error);
140
141    // FreeBSD processes can not be launched by spawning and attaching.
142    virtual bool
143    CanDebugProcess () { return false; }
144
145    // Only on PlatformMacOSX:
146    virtual lldb_private::Error
147    GetFileWithUUID (const lldb_private::FileSpec &platform_file,
148                     const lldb_private::UUID* uuid, lldb_private::FileSpec &local_file);
149
150    lldb_private::Error
151    GetSharedModule (const lldb_private::ModuleSpec &module_spec,
152                     lldb::ModuleSP &module_sp,
153                     const lldb_private::FileSpecList *module_search_paths_ptr,
154                     lldb::ModuleSP *old_module_sp_ptr,
155                     bool *did_create_ptr);
156
157    virtual bool
158    GetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch);
159
160    virtual void
161    GetStatus (lldb_private::Stream &strm);
162
163    virtual void
164    CalculateTrapHandlerSymbolNames ();
165
166protected:
167    lldb::PlatformSP m_remote_platform_sp; // Allow multiple ways to connect to a remote freebsd OS
168
169private:
170    DISALLOW_COPY_AND_ASSIGN (PlatformFreeBSD);
171};
172
173#endif  // liblldb_PlatformFreeBSD_h_
174