1 //===-- PlatformAndroidRemoteGDBServer.h ------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H 10 #define LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H 11 12 #include <map> 13 #include <utility> 14 15 #include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h" 16 17 #include "llvm/ADT/Optional.h" 18 19 #include "AdbClient.h" 20 21 namespace lldb_private { 22 namespace platform_android { 23 24 class PlatformAndroidRemoteGDBServer 25 : public platform_gdb_server::PlatformRemoteGDBServer { 26 public: 27 PlatformAndroidRemoteGDBServer(); 28 29 ~PlatformAndroidRemoteGDBServer() override; 30 31 Status ConnectRemote(Args &args) override; 32 33 Status DisconnectRemote() override; 34 35 lldb::ProcessSP ConnectProcess(llvm::StringRef connect_url, 36 llvm::StringRef plugin_name, 37 lldb_private::Debugger &debugger, 38 lldb_private::Target *target, 39 lldb_private::Status &error) override; 40 41 protected: 42 std::string m_device_id; 43 std::map<lldb::pid_t, uint16_t> m_port_forwards; 44 llvm::Optional<AdbClient::UnixSocketNamespace> m_socket_namespace; 45 46 bool LaunchGDBServer(lldb::pid_t &pid, std::string &connect_url) override; 47 48 bool KillSpawnedProcess(lldb::pid_t pid) override; 49 50 void DeleteForwardPort(lldb::pid_t pid); 51 52 Status MakeConnectURL(const lldb::pid_t pid, const uint16_t remote_port, 53 llvm::StringRef remote_socket_name, 54 std::string &connect_url); 55 56 private: 57 PlatformAndroidRemoteGDBServer(const PlatformAndroidRemoteGDBServer &) = 58 delete; 59 const PlatformAndroidRemoteGDBServer & 60 operator=(const PlatformAndroidRemoteGDBServer &) = delete; 61 }; 62 63 } // namespace platform_android 64 } // namespace lldb_private 65 66 #endif // LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H 67