1254721Semaste//===-- PlatformRemoteGDBServer.h ----------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#ifndef liblldb_PlatformRemoteGDBServer_h_
11254721Semaste#define liblldb_PlatformRemoteGDBServer_h_
12254721Semaste
13254721Semaste// C Includes
14254721Semaste// C++ Includes
15254721Semaste#include <string>
16254721Semaste
17254721Semaste// Other libraries and framework includes
18254721Semaste// Project includes
19254721Semaste#include "lldb/Target/Platform.h"
20254721Semaste#include "../../Process/gdb-remote/GDBRemoteCommunicationClient.h"
21254721Semaste
22254721Semasteclass PlatformRemoteGDBServer : public lldb_private::Platform
23254721Semaste{
24254721Semastepublic:
25254721Semaste
26254721Semaste    static void
27254721Semaste    Initialize ();
28254721Semaste
29254721Semaste    static void
30254721Semaste    Terminate ();
31254721Semaste
32254721Semaste    static lldb_private::Platform*
33254721Semaste    CreateInstance (bool force, const lldb_private::ArchSpec *arch);
34254721Semaste
35254721Semaste    static lldb_private::ConstString
36254721Semaste    GetPluginNameStatic();
37254721Semaste
38254721Semaste    static const char *
39254721Semaste    GetDescriptionStatic();
40254721Semaste
41254721Semaste
42254721Semaste    PlatformRemoteGDBServer ();
43254721Semaste
44254721Semaste    virtual
45254721Semaste    ~PlatformRemoteGDBServer();
46254721Semaste
47254721Semaste    //------------------------------------------------------------
48254721Semaste    // lldb_private::PluginInterface functions
49254721Semaste    //------------------------------------------------------------
50254721Semaste    virtual lldb_private::ConstString
51254721Semaste    GetPluginName()
52254721Semaste    {
53254721Semaste        return GetPluginNameStatic();
54254721Semaste    }
55254721Semaste
56254721Semaste    virtual uint32_t
57254721Semaste    GetPluginVersion()
58254721Semaste    {
59254721Semaste        return 1;
60254721Semaste    }
61254721Semaste
62254721Semaste
63254721Semaste    //------------------------------------------------------------
64254721Semaste    // lldb_private::Platform functions
65254721Semaste    //------------------------------------------------------------
66254721Semaste    virtual lldb_private::Error
67254721Semaste    ResolveExecutable (const lldb_private::FileSpec &exe_file,
68254721Semaste                       const lldb_private::ArchSpec &arch,
69254721Semaste                       lldb::ModuleSP &module_sp,
70254721Semaste                       const lldb_private::FileSpecList *module_search_paths_ptr);
71254721Semaste
72254721Semaste    virtual const char *
73254721Semaste    GetDescription ();
74254721Semaste
75254721Semaste    virtual lldb_private::Error
76269024Semaste    GetFileWithUUID (const lldb_private::FileSpec &platform_file,
77269024Semaste                     const lldb_private::UUID *uuid_ptr,
78269024Semaste                     lldb_private::FileSpec &local_file);
79254721Semaste
80254721Semaste    virtual bool
81254721Semaste    GetProcessInfo (lldb::pid_t pid,
82254721Semaste                    lldb_private::ProcessInstanceInfo &proc_info);
83254721Semaste
84254721Semaste    virtual uint32_t
85254721Semaste    FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info,
86254721Semaste                   lldb_private::ProcessInstanceInfoList &process_infos);
87254721Semaste
88254721Semaste    virtual lldb_private::Error
89254721Semaste    LaunchProcess (lldb_private::ProcessLaunchInfo &launch_info);
90254721Semaste
91254721Semaste    virtual lldb::ProcessSP
92263367Semaste    DebugProcess (lldb_private::ProcessLaunchInfo &launch_info,
93263367Semaste                  lldb_private::Debugger &debugger,
94263367Semaste                  lldb_private::Target *target,       // Can be NULL, if NULL create a new target, else use existing one
95263367Semaste                  lldb_private::Listener &listener,
96263367Semaste                  lldb_private::Error &error);
97263367Semaste
98263367Semaste    virtual lldb::ProcessSP
99254721Semaste    Attach (lldb_private::ProcessAttachInfo &attach_info,
100254721Semaste            lldb_private::Debugger &debugger,
101254721Semaste            lldb_private::Target *target,       // Can be NULL, if NULL create a new target, else use existing one
102254721Semaste            lldb_private::Listener &listener,
103254721Semaste            lldb_private::Error &error);
104254721Semaste
105254721Semaste    virtual bool
106254721Semaste    GetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch);
107254721Semaste
108254721Semaste    virtual size_t
109254721Semaste    GetSoftwareBreakpointTrapOpcode (lldb_private::Target &target,
110254721Semaste                                     lldb_private::BreakpointSite *bp_site);
111254721Semaste
112254721Semaste    virtual bool
113254721Semaste    GetRemoteOSVersion ();
114254721Semaste
115254721Semaste    virtual bool
116254721Semaste    GetRemoteOSBuildString (std::string &s);
117254721Semaste
118254721Semaste    virtual bool
119254721Semaste    GetRemoteOSKernelDescription (std::string &s);
120254721Semaste
121254721Semaste    // Remote Platform subclasses need to override this function
122254721Semaste    virtual lldb_private::ArchSpec
123254721Semaste    GetRemoteSystemArchitecture ();
124254721Semaste
125263367Semaste    virtual lldb_private::ConstString
126263367Semaste    GetRemoteWorkingDirectory();
127263367Semaste
128263367Semaste    virtual bool
129263367Semaste    SetRemoteWorkingDirectory(const lldb_private::ConstString &path);
130263367Semaste
131263367Semaste
132254721Semaste    // Remote subclasses should override this and return a valid instance
133254721Semaste    // name if connected.
134254721Semaste    virtual const char *
135254721Semaste    GetHostname ();
136254721Semaste
137254721Semaste    virtual const char *
138254721Semaste    GetUserName (uint32_t uid);
139254721Semaste
140254721Semaste    virtual const char *
141254721Semaste    GetGroupName (uint32_t gid);
142254721Semaste
143254721Semaste    virtual bool
144254721Semaste    IsConnected () const;
145254721Semaste
146254721Semaste    virtual lldb_private::Error
147254721Semaste    ConnectRemote (lldb_private::Args& args);
148254721Semaste
149254721Semaste    virtual lldb_private::Error
150254721Semaste    DisconnectRemote ();
151263363Semaste
152263367Semaste    virtual lldb_private::Error
153263367Semaste    MakeDirectory (const char *path, uint32_t file_permissions);
154263363Semaste
155263367Semaste    virtual lldb_private::Error
156263367Semaste    GetFilePermissions (const char *path, uint32_t &file_permissions);
157263367Semaste
158263367Semaste    virtual lldb_private::Error
159263367Semaste    SetFilePermissions (const char *path, uint32_t file_permissions);
160263367Semaste
161263367Semaste
162263363Semaste    virtual lldb::user_id_t
163263363Semaste    OpenFile (const lldb_private::FileSpec& file_spec,
164263363Semaste              uint32_t flags,
165263367Semaste              uint32_t mode,
166263363Semaste              lldb_private::Error &error);
167263363Semaste
168263363Semaste    virtual bool
169263363Semaste    CloseFile (lldb::user_id_t fd,
170263363Semaste               lldb_private::Error &error);
171263363Semaste
172263363Semaste    virtual uint64_t
173263363Semaste    ReadFile (lldb::user_id_t fd,
174263363Semaste              uint64_t offset,
175263363Semaste              void *data_ptr,
176263363Semaste              uint64_t len,
177263363Semaste              lldb_private::Error &error);
178263363Semaste
179263363Semaste    virtual uint64_t
180263363Semaste    WriteFile (lldb::user_id_t fd,
181263363Semaste               uint64_t offset,
182263363Semaste               const void* data,
183263363Semaste               uint64_t len,
184263363Semaste               lldb_private::Error &error);
185254721Semaste
186263363Semaste    virtual lldb::user_id_t
187263363Semaste    GetFileSize (const lldb_private::FileSpec& file_spec);
188263363Semaste
189263363Semaste    virtual lldb_private::Error
190263363Semaste    PutFile (const lldb_private::FileSpec& source,
191263363Semaste             const lldb_private::FileSpec& destination,
192263363Semaste             uint32_t uid = UINT32_MAX,
193263363Semaste             uint32_t gid = UINT32_MAX);
194263363Semaste
195263367Semaste    virtual lldb_private::Error
196263367Semaste    CreateSymlink (const char *src, const char *dst);
197263367Semaste
198263363Semaste    virtual bool
199263363Semaste    GetFileExists (const lldb_private::FileSpec& file_spec);
200263363Semaste
201263363Semaste    virtual lldb_private::Error
202263367Semaste    Unlink (const char *path);
203263367Semaste
204263367Semaste    virtual lldb_private::Error
205263363Semaste    RunShellCommand (const char *command,           // Shouldn't be NULL
206263363Semaste                     const char *working_dir,       // Pass NULL to use the current working directory
207263363Semaste                     int *status_ptr,               // Pass NULL if you don't want the process exit status
208263363Semaste                     int *signo_ptr,                // Pass NULL if you don't want the signal that caused the process to exit
209263363Semaste                     std::string *command_output,   // Pass NULL if you don't want the command output
210263363Semaste                     uint32_t timeout_sec);         // Timeout in seconds to wait for shell program to finish
211263363Semaste
212269024Semaste    virtual void
213269024Semaste    CalculateTrapHandlerSymbolNames ();
214269024Semaste
215254721Semasteprotected:
216254721Semaste    GDBRemoteCommunicationClient m_gdb_client;
217254721Semaste    std::string m_platform_description; // After we connect we can get a more complete description of what we are connected to
218254721Semaste
219254721Semasteprivate:
220254721Semaste    DISALLOW_COPY_AND_ASSIGN (PlatformRemoteGDBServer);
221254721Semaste
222254721Semaste};
223254721Semaste
224254721Semaste#endif  // liblldb_PlatformRemoteGDBServer_h_
225