1cb8977d726be451df9978a74088435667fa37da2Greg Clayton//===-- PlatformRemoteGDBServer.h ----------------------------------------*- C++ -*-===// 2cb8977d726be451df9978a74088435667fa37da2Greg Clayton// 3cb8977d726be451df9978a74088435667fa37da2Greg Clayton// The LLVM Compiler Infrastructure 4cb8977d726be451df9978a74088435667fa37da2Greg Clayton// 5cb8977d726be451df9978a74088435667fa37da2Greg Clayton// This file is distributed under the University of Illinois Open Source 6cb8977d726be451df9978a74088435667fa37da2Greg Clayton// License. See LICENSE.TXT for details. 7cb8977d726be451df9978a74088435667fa37da2Greg Clayton// 8cb8977d726be451df9978a74088435667fa37da2Greg Clayton//===----------------------------------------------------------------------===// 9cb8977d726be451df9978a74088435667fa37da2Greg Clayton 10cb8977d726be451df9978a74088435667fa37da2Greg Clayton#ifndef liblldb_PlatformRemoteGDBServer_h_ 11cb8977d726be451df9978a74088435667fa37da2Greg Clayton#define liblldb_PlatformRemoteGDBServer_h_ 12cb8977d726be451df9978a74088435667fa37da2Greg Clayton 13cb8977d726be451df9978a74088435667fa37da2Greg Clayton// C Includes 14cb8977d726be451df9978a74088435667fa37da2Greg Clayton// C++ Includes 15cb8977d726be451df9978a74088435667fa37da2Greg Clayton#include <string> 16cb8977d726be451df9978a74088435667fa37da2Greg Clayton 17cb8977d726be451df9978a74088435667fa37da2Greg Clayton// Other libraries and framework includes 18cb8977d726be451df9978a74088435667fa37da2Greg Clayton// Project includes 19cb8977d726be451df9978a74088435667fa37da2Greg Clayton#include "lldb/Target/Platform.h" 20cb8977d726be451df9978a74088435667fa37da2Greg Clayton#include "../../Process/gdb-remote/GDBRemoteCommunicationClient.h" 21cb8977d726be451df9978a74088435667fa37da2Greg Clayton 2224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonclass PlatformRemoteGDBServer : public lldb_private::Platform 2324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton{ 2424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonpublic: 25cb8977d726be451df9978a74088435667fa37da2Greg Clayton 2624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton static void 2724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Initialize (); 2824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 2924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton static void 3024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton Terminate (); 3124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 3224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton static lldb_private::Platform* 33b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton CreateInstance (bool force, const lldb_private::ArchSpec *arch); 3424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 350e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton static lldb_private::ConstString 360e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton GetPluginNameStatic(); 3724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 3824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton static const char * 3924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetDescriptionStatic(); 4024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 4124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 4224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton PlatformRemoteGDBServer (); 4324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 4424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual 4524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ~PlatformRemoteGDBServer(); 4624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 4724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------ 4824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // lldb_private::PluginInterface functions 4924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------ 500e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton virtual lldb_private::ConstString 5124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetPluginName() 5224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 530e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton return GetPluginNameStatic(); 5424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 5524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 5624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual uint32_t 5724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetPluginVersion() 5824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton { 5924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton return 1; 6024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton } 6124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 62cb8977d726be451df9978a74088435667fa37da2Greg Clayton 6324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------ 6424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // lldb_private::Platform functions 6524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton //------------------------------------------------------------ 6624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual lldb_private::Error 6724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ResolveExecutable (const lldb_private::FileSpec &exe_file, 6824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton const lldb_private::ArchSpec &arch, 699ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton lldb::ModuleSP &module_sp, 709ce953807eb814a93b449dc243de4f7bf32c3115Greg Clayton const lldb_private::FileSpecList *module_search_paths_ptr); 71cb8977d726be451df9978a74088435667fa37da2Greg Clayton 7224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual const char * 7324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetDescription (); 74cb8977d726be451df9978a74088435667fa37da2Greg Clayton 7524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual lldb_private::Error 7624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetFile (const lldb_private::FileSpec &platform_file, 7724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton const lldb_private::UUID *uuid_ptr, 7824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton lldb_private::FileSpec &local_file); 79cb8977d726be451df9978a74088435667fa37da2Greg Clayton 8024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual bool 81b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton GetProcessInfo (lldb::pid_t pid, 82b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb_private::ProcessInstanceInfo &proc_info); 83cb8977d726be451df9978a74088435667fa37da2Greg Clayton 8424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual uint32_t 85b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info, 86b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb_private::ProcessInstanceInfoList &process_infos); 87b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 88b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton virtual lldb_private::Error 89b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton LaunchProcess (lldb_private::ProcessLaunchInfo &launch_info); 90b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton 91b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton virtual lldb::ProcessSP 92527154d8e532f27f25af226c9e1dac607c48b5d1Greg Clayton Attach (lldb_private::ProcessAttachInfo &attach_info, 93b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb_private::Debugger &debugger, 94b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb_private::Target *target, // Can be NULL, if NULL create a new target, else use existing one 95b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb_private::Listener &listener, 96b72d0f098e45936fa72e26b1a026c603e17e2d6cGreg Clayton lldb_private::Error &error); 9724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 9824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual bool 9924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch); 10024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 10124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual size_t 10224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetSoftwareBreakpointTrapOpcode (lldb_private::Target &target, 10324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton lldb_private::BreakpointSite *bp_site); 10424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 10524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual bool 10624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetRemoteOSVersion (); 10724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 10824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual bool 10924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetRemoteOSBuildString (std::string &s); 11024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 11124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual bool 11224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetRemoteOSKernelDescription (std::string &s); 11324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 11424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // Remote Platform subclasses need to override this function 11524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual lldb_private::ArchSpec 11624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetRemoteSystemArchitecture (); 11724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 11824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // Remote subclasses should override this and return a valid instance 11924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton // name if connected. 12024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual const char * 12124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetHostname (); 12224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 12324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual const char * 12424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetUserName (uint32_t uid); 12524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 12624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual const char * 12724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GetGroupName (uint32_t gid); 12824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 12924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual bool 13024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton IsConnected () const; 13124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 13224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual lldb_private::Error 13324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton ConnectRemote (lldb_private::Args& args); 13424bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 13524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton virtual lldb_private::Error 13624bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton DisconnectRemote (); 13724bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 13824bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonprotected: 13924bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton GDBRemoteCommunicationClient m_gdb_client; 14024bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton std::string m_platform_description; // After we connect we can get a more complete description of what we are connected to 14124bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton 14224bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Claytonprivate: 14324bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton DISALLOW_COPY_AND_ASSIGN (PlatformRemoteGDBServer); 144cb8977d726be451df9978a74088435667fa37da2Greg Clayton 14524bc5d9bfad2a1c562c27e7cf37e1c56d85c45e7Greg Clayton}; 146cb8977d726be451df9978a74088435667fa37da2Greg Clayton 147cb8977d726be451df9978a74088435667fa37da2Greg Clayton#endif // liblldb_PlatformRemoteGDBServer_h_ 148