| //===-- PlatformRemoteGDBServer.h ----------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef liblldb_PlatformRemoteGDBServer_h_ |
| #define liblldb_PlatformRemoteGDBServer_h_ |
| |
| // C Includes |
| // C++ Includes |
| #include <string> |
| |
| // Other libraries and framework includes |
| // Project includes |
| #include "lldb/Target/Platform.h" |
| #include "../../Process/gdb-remote/GDBRemoteCommunicationClient.h" |
| #include "Plugins/Process/Utility/GDBRemoteSignals.h" |
| |
| namespace lldb_private { |
| namespace platform_gdb_server { |
| |
| class PlatformRemoteGDBServer : public Platform |
| { |
| public: |
| |
| static void |
| Initialize (); |
| |
| static void |
| Terminate (); |
| |
| static lldb::PlatformSP |
| CreateInstance (bool force, const ArchSpec *arch); |
| |
| static ConstString |
| GetPluginNameStatic(); |
| |
| static const char * |
| GetDescriptionStatic(); |
| |
| |
| PlatformRemoteGDBServer (); |
| |
| virtual |
| ~PlatformRemoteGDBServer(); |
| |
| //------------------------------------------------------------ |
| // lldb_private::PluginInterface functions |
| //------------------------------------------------------------ |
| ConstString |
| GetPluginName() override |
| { |
| return GetPluginNameStatic(); |
| } |
| |
| uint32_t |
| GetPluginVersion() override |
| { |
| return 1; |
| } |
| |
| |
| //------------------------------------------------------------ |
| // lldb_private::Platform functions |
| //------------------------------------------------------------ |
| Error |
| ResolveExecutable (const ModuleSpec &module_spec, |
| lldb::ModuleSP &module_sp, |
| const FileSpecList *module_search_paths_ptr) override; |
| |
| bool |
| GetModuleSpec (const FileSpec& module_file_spec, |
| const ArchSpec& arch, |
| ModuleSpec &module_spec) override; |
| |
| const char * |
| GetDescription () override; |
| |
| Error |
| GetFileWithUUID (const FileSpec &platform_file, |
| const UUID *uuid_ptr, |
| FileSpec &local_file) override; |
| |
| bool |
| GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo &proc_info) override; |
| |
| uint32_t |
| FindProcesses (const ProcessInstanceInfoMatch &match_info, |
| ProcessInstanceInfoList &process_infos) override; |
| |
| Error |
| LaunchProcess (ProcessLaunchInfo &launch_info) override; |
| |
| Error |
| KillProcess (const lldb::pid_t pid) override; |
| |
| lldb::ProcessSP |
| DebugProcess (ProcessLaunchInfo &launch_info, |
| Debugger &debugger, |
| Target *target, // Can be NULL, if NULL create a new target, else use existing one |
| Error &error) override; |
| |
| lldb::ProcessSP |
| Attach (ProcessAttachInfo &attach_info, |
| Debugger &debugger, |
| Target *target, // Can be NULL, if NULL create a new target, else use existing one |
| Error &error) override; |
| |
| bool |
| GetSupportedArchitectureAtIndex (uint32_t idx, ArchSpec &arch) override; |
| |
| size_t |
| GetSoftwareBreakpointTrapOpcode (Target &target, BreakpointSite *bp_site) override; |
| |
| bool |
| GetRemoteOSVersion () override; |
| |
| bool |
| GetRemoteOSBuildString (std::string &s) override; |
| |
| bool |
| GetRemoteOSKernelDescription (std::string &s) override; |
| |
| // Remote Platform subclasses need to override this function |
| ArchSpec |
| GetRemoteSystemArchitecture () override; |
| |
| FileSpec |
| GetRemoteWorkingDirectory() override; |
| |
| bool |
| SetRemoteWorkingDirectory(const FileSpec &working_dir) override; |
| |
| // Remote subclasses should override this and return a valid instance |
| // name if connected. |
| const char * |
| GetHostname () override; |
| |
| const char * |
| GetUserName (uint32_t uid) override; |
| |
| const char * |
| GetGroupName (uint32_t gid) override; |
| |
| bool |
| IsConnected () const override; |
| |
| Error |
| ConnectRemote (Args& args) override; |
| |
| Error |
| DisconnectRemote () override; |
| |
| Error |
| MakeDirectory(const FileSpec &file_spec, uint32_t file_permissions) override; |
| |
| Error |
| GetFilePermissions(const FileSpec &file_spec, uint32_t &file_permissions) override; |
| |
| Error |
| SetFilePermissions(const FileSpec &file_spec, uint32_t file_permissions) override; |
| |
| |
| lldb::user_id_t |
| OpenFile (const FileSpec& file_spec, uint32_t flags, uint32_t mode, Error &error) override; |
| |
| bool |
| CloseFile (lldb::user_id_t fd, Error &error) override; |
| |
| uint64_t |
| ReadFile (lldb::user_id_t fd, |
| uint64_t offset, |
| void *data_ptr, |
| uint64_t len, |
| Error &error) override; |
| |
| uint64_t |
| WriteFile (lldb::user_id_t fd, |
| uint64_t offset, |
| const void* data, |
| uint64_t len, |
| Error &error) override; |
| |
| lldb::user_id_t |
| GetFileSize (const FileSpec& file_spec) override; |
| |
| Error |
| PutFile (const FileSpec& source, |
| const FileSpec& destination, |
| uint32_t uid = UINT32_MAX, |
| uint32_t gid = UINT32_MAX) override; |
| |
| Error |
| CreateSymlink(const FileSpec &src, const FileSpec &dst) override; |
| |
| bool |
| GetFileExists (const FileSpec& file_spec) override; |
| |
| Error |
| Unlink(const FileSpec &path) override; |
| |
| Error |
| RunShellCommand(const char *command, // Shouldn't be NULL |
| const FileSpec &working_dir, // Pass empty FileSpec to use the current working directory |
| int *status_ptr, // Pass NULL if you don't want the process exit status |
| int *signo_ptr, // Pass NULL if you don't want the signal that caused the process to exit |
| std::string *command_output, // Pass NULL if you don't want the command output |
| uint32_t timeout_sec) override; // Timeout in seconds to wait for shell program to finish |
| |
| void |
| CalculateTrapHandlerSymbolNames () override; |
| |
| const lldb::UnixSignalsSP & |
| GetRemoteUnixSignals() override; |
| |
| lldb::ProcessSP |
| ConnectProcess (const char* connect_url, |
| const char* plugin_name, |
| lldb_private::Debugger &debugger, |
| lldb_private::Target *target, |
| lldb_private::Error &error) override; |
| |
| size_t |
| ConnectToWaitingProcesses(lldb_private::Debugger& debugger, lldb_private::Error& error) override; |
| |
| virtual size_t |
| GetPendingGdbServerList(std::vector<std::string>& connection_urls); |
| |
| protected: |
| process_gdb_remote::GDBRemoteCommunicationClient m_gdb_client; |
| std::string m_platform_description; // After we connect we can get a more complete description of what we are connected to |
| std::string m_platform_scheme; |
| std::string m_platform_hostname; |
| |
| lldb::UnixSignalsSP m_remote_signals_sp; |
| |
| // Launch the debug server on the remote host - caller connects to launched |
| // debug server using connect_url. |
| // Subclasses should override this method if they want to do extra actions before or |
| // after launching the debug server. |
| virtual bool |
| LaunchGDBServer (lldb::pid_t &pid, std::string &connect_url); |
| |
| virtual bool |
| KillSpawnedProcess (lldb::pid_t pid); |
| |
| virtual std::string |
| MakeUrl(const char* scheme, |
| const char* hostname, |
| uint16_t port, |
| const char* path); |
| |
| private: |
| std::string |
| MakeGdbServerUrl(const std::string &platform_scheme, |
| const std::string &platform_hostname, |
| uint16_t port, |
| const char* socket_name); |
| |
| DISALLOW_COPY_AND_ASSIGN (PlatformRemoteGDBServer); |
| |
| }; |
| |
| } // namespace platform_gdb_server |
| } // namespace lldb_private |
| |
| #endif // liblldb_PlatformRemoteGDBServer_h_ |