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