]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / Platform / gdb-server / PlatformRemoteGDBServer.h
1 //===-- PlatformRemoteGDBServer.h ----------------------------------------*- C++
2 //-*-===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #ifndef liblldb_PlatformRemoteGDBServer_h_
12 #define liblldb_PlatformRemoteGDBServer_h_
13
14 #include <string>
15
16 #include "Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h"
17 #include "Plugins/Process/Utility/GDBRemoteSignals.h"
18 #include "lldb/Target/Platform.h"
19
20 namespace lldb_private {
21 namespace platform_gdb_server {
22
23 class PlatformRemoteGDBServer : public Platform {
24 public:
25   static void Initialize();
26
27   static void Terminate();
28
29   static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
30
31   static ConstString GetPluginNameStatic();
32
33   static const char *GetDescriptionStatic();
34
35   PlatformRemoteGDBServer();
36
37   virtual ~PlatformRemoteGDBServer();
38
39   //------------------------------------------------------------
40   // lldb_private::PluginInterface functions
41   //------------------------------------------------------------
42   ConstString GetPluginName() override { return GetPluginNameStatic(); }
43
44   uint32_t GetPluginVersion() override { return 1; }
45
46   //------------------------------------------------------------
47   // lldb_private::Platform functions
48   //------------------------------------------------------------
49   Status
50   ResolveExecutable(const ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
51                     const FileSpecList *module_search_paths_ptr) override;
52
53   bool GetModuleSpec(const FileSpec &module_file_spec, const ArchSpec &arch,
54                      ModuleSpec &module_spec) override;
55
56   const char *GetDescription() override;
57
58   Status GetFileWithUUID(const FileSpec &platform_file, const UUID *uuid_ptr,
59                          FileSpec &local_file) override;
60
61   bool GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &proc_info) override;
62
63   uint32_t FindProcesses(const ProcessInstanceInfoMatch &match_info,
64                          ProcessInstanceInfoList &process_infos) override;
65
66   Status LaunchProcess(ProcessLaunchInfo &launch_info) override;
67
68   Status KillProcess(const lldb::pid_t pid) override;
69
70   lldb::ProcessSP DebugProcess(ProcessLaunchInfo &launch_info,
71                                Debugger &debugger,
72                                Target *target, // Can be NULL, if NULL create a
73                                                // new target, else use existing
74                                                // one
75                                Status &error) override;
76
77   lldb::ProcessSP Attach(ProcessAttachInfo &attach_info, Debugger &debugger,
78                          Target *target, // Can be NULL, if NULL create a new
79                                          // target, else use existing one
80                          Status &error) override;
81
82   bool GetSupportedArchitectureAtIndex(uint32_t idx, ArchSpec &arch) override;
83
84   size_t GetSoftwareBreakpointTrapOpcode(Target &target,
85                                          BreakpointSite *bp_site) override;
86
87   bool GetRemoteOSVersion() override;
88
89   bool GetRemoteOSBuildString(std::string &s) override;
90
91   bool GetRemoteOSKernelDescription(std::string &s) override;
92
93   // Remote Platform subclasses need to override this function
94   ArchSpec GetRemoteSystemArchitecture() override;
95
96   FileSpec GetRemoteWorkingDirectory() override;
97
98   bool SetRemoteWorkingDirectory(const FileSpec &working_dir) override;
99
100   // Remote subclasses should override this and return a valid instance
101   // name if connected.
102   const char *GetHostname() override;
103
104   const char *GetUserName(uint32_t uid) override;
105
106   const char *GetGroupName(uint32_t gid) override;
107
108   bool IsConnected() const override;
109
110   Status ConnectRemote(Args &args) override;
111
112   Status DisconnectRemote() override;
113
114   Status MakeDirectory(const FileSpec &file_spec,
115                        uint32_t file_permissions) override;
116
117   Status GetFilePermissions(const FileSpec &file_spec,
118                             uint32_t &file_permissions) override;
119
120   Status SetFilePermissions(const FileSpec &file_spec,
121                             uint32_t file_permissions) override;
122
123   lldb::user_id_t OpenFile(const FileSpec &file_spec, uint32_t flags,
124                            uint32_t mode, Status &error) override;
125
126   bool CloseFile(lldb::user_id_t fd, Status &error) override;
127
128   uint64_t ReadFile(lldb::user_id_t fd, uint64_t offset, void *data_ptr,
129                     uint64_t len, Status &error) override;
130
131   uint64_t WriteFile(lldb::user_id_t fd, uint64_t offset, const void *data,
132                      uint64_t len, Status &error) override;
133
134   lldb::user_id_t GetFileSize(const FileSpec &file_spec) override;
135
136   Status PutFile(const FileSpec &source, const FileSpec &destination,
137                  uint32_t uid = UINT32_MAX, uint32_t gid = UINT32_MAX) override;
138
139   Status CreateSymlink(const FileSpec &src, const FileSpec &dst) override;
140
141   bool GetFileExists(const FileSpec &file_spec) override;
142
143   Status Unlink(const FileSpec &path) override;
144
145   Status RunShellCommand(
146       const char *command,         // Shouldn't be NULL
147       const FileSpec &working_dir, // Pass empty FileSpec to use the current
148                                    // working directory
149       int *status_ptr, // Pass NULL if you don't want the process exit status
150       int *signo_ptr,  // Pass NULL if you don't want the signal that caused the
151                        // process to exit
152       std::string
153           *command_output, // Pass NULL if you don't want the command output
154       const lldb_private::Timeout<std::micro> &timeout) override;
155
156   void CalculateTrapHandlerSymbolNames() override;
157
158   const lldb::UnixSignalsSP &GetRemoteUnixSignals() override;
159
160   lldb::ProcessSP ConnectProcess(llvm::StringRef connect_url,
161                                  llvm::StringRef plugin_name,
162                                  lldb_private::Debugger &debugger,
163                                  lldb_private::Target *target,
164                                  lldb_private::Status &error) override;
165
166   size_t ConnectToWaitingProcesses(lldb_private::Debugger &debugger,
167                                    lldb_private::Status &error) override;
168
169   virtual size_t
170   GetPendingGdbServerList(std::vector<std::string> &connection_urls);
171
172 protected:
173   process_gdb_remote::GDBRemoteCommunicationClient m_gdb_client;
174   std::string m_platform_description; // After we connect we can get a more
175                                       // complete description of what we are
176                                       // connected to
177   std::string m_platform_scheme;
178   std::string m_platform_hostname;
179
180   lldb::UnixSignalsSP m_remote_signals_sp;
181
182   // Launch the debug server on the remote host - caller connects to launched
183   // debug server using connect_url.
184   // Subclasses should override this method if they want to do extra actions
185   // before or
186   // after launching the debug server.
187   virtual bool LaunchGDBServer(lldb::pid_t &pid, std::string &connect_url);
188
189   virtual bool KillSpawnedProcess(lldb::pid_t pid);
190
191   virtual std::string MakeUrl(const char *scheme, const char *hostname,
192                               uint16_t port, const char *path);
193
194 private:
195   std::string MakeGdbServerUrl(const std::string &platform_scheme,
196                                const std::string &platform_hostname,
197                                uint16_t port, const char *socket_name);
198
199   DISALLOW_COPY_AND_ASSIGN(PlatformRemoteGDBServer);
200 };
201
202 } // namespace platform_gdb_server
203 } // namespace lldb_private
204
205 #endif // liblldb_PlatformRemoteGDBServer_h_