1 //===-- PlatformAndroidRemoteGDBServer.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_PlatformAndroidRemoteGDBServer_h_
11 #define liblldb_PlatformAndroidRemoteGDBServer_h_
12 
13 #include <map>
14 #include <utility>
15 
16 #include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
17 
18 #include "llvm/ADT/Optional.h"
19 
20 #include "AdbClient.h"
21 
22 namespace lldb_private {
23 namespace platform_android {
24 
25 class PlatformAndroidRemoteGDBServer
26     : public platform_gdb_server::PlatformRemoteGDBServer {
27 public:
28   PlatformAndroidRemoteGDBServer();
29 
30   ~PlatformAndroidRemoteGDBServer() override;
31 
32   Status ConnectRemote(Args &args) override;
33 
34   Status DisconnectRemote() override;
35 
36   lldb::ProcessSP ConnectProcess(llvm::StringRef connect_url,
37                                  llvm::StringRef plugin_name,
38                                  lldb_private::Debugger &debugger,
39                                  lldb_private::Target *target,
40                                  lldb_private::Status &error) override;
41 
42 protected:
43   std::string m_device_id;
44   std::map<lldb::pid_t, uint16_t> m_port_forwards;
45   llvm::Optional<AdbClient::UnixSocketNamespace> m_socket_namespace;
46 
47   bool LaunchGDBServer(lldb::pid_t &pid, std::string &connect_url) override;
48 
49   bool KillSpawnedProcess(lldb::pid_t pid) override;
50 
51   void DeleteForwardPort(lldb::pid_t pid);
52 
53   Status MakeConnectURL(const lldb::pid_t pid, const uint16_t remote_port,
54                         llvm::StringRef remote_socket_name,
55                         std::string &connect_url);
56 
57 private:
58   DISALLOW_COPY_AND_ASSIGN(PlatformAndroidRemoteGDBServer);
59 };
60 
61 } // namespace platform_android
62 } // namespace lldb_private
63 
64 #endif // liblldb_PlatformAndroidRemoteGDBServer_h_
65