1061da546Spatrick //===-- PlatformAndroidRemoteGDBServer.h ------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H 10dda28197Spatrick #define LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H 11061da546Spatrick 12061da546Spatrick #include <map> 13*f6aab3d8Srobert #include <optional> 14061da546Spatrick #include <utility> 15061da546Spatrick 16061da546Spatrick #include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h" 17061da546Spatrick 18061da546Spatrick 19061da546Spatrick #include "AdbClient.h" 20061da546Spatrick 21061da546Spatrick namespace lldb_private { 22061da546Spatrick namespace platform_android { 23061da546Spatrick 24061da546Spatrick class PlatformAndroidRemoteGDBServer 25061da546Spatrick : public platform_gdb_server::PlatformRemoteGDBServer { 26061da546Spatrick public: 27*f6aab3d8Srobert PlatformAndroidRemoteGDBServer() = default; 28061da546Spatrick 29061da546Spatrick ~PlatformAndroidRemoteGDBServer() override; 30061da546Spatrick 31061da546Spatrick Status ConnectRemote(Args &args) override; 32061da546Spatrick 33061da546Spatrick Status DisconnectRemote() override; 34061da546Spatrick 35061da546Spatrick lldb::ProcessSP ConnectProcess(llvm::StringRef connect_url, 36061da546Spatrick llvm::StringRef plugin_name, 37061da546Spatrick lldb_private::Debugger &debugger, 38061da546Spatrick lldb_private::Target *target, 39061da546Spatrick lldb_private::Status &error) override; 40061da546Spatrick 41061da546Spatrick protected: 42061da546Spatrick std::string m_device_id; 43061da546Spatrick std::map<lldb::pid_t, uint16_t> m_port_forwards; 44*f6aab3d8Srobert std::optional<AdbClient::UnixSocketNamespace> m_socket_namespace; 45061da546Spatrick 46061da546Spatrick bool LaunchGDBServer(lldb::pid_t &pid, std::string &connect_url) override; 47061da546Spatrick 48061da546Spatrick bool KillSpawnedProcess(lldb::pid_t pid) override; 49061da546Spatrick 50061da546Spatrick void DeleteForwardPort(lldb::pid_t pid); 51061da546Spatrick 52*f6aab3d8Srobert Status MakeConnectURL(const lldb::pid_t pid, const uint16_t local_port, 53*f6aab3d8Srobert const uint16_t remote_port, 54061da546Spatrick llvm::StringRef remote_socket_name, 55061da546Spatrick std::string &connect_url); 56061da546Spatrick 57061da546Spatrick private: 58dda28197Spatrick PlatformAndroidRemoteGDBServer(const PlatformAndroidRemoteGDBServer &) = 59dda28197Spatrick delete; 60dda28197Spatrick const PlatformAndroidRemoteGDBServer & 61dda28197Spatrick operator=(const PlatformAndroidRemoteGDBServer &) = delete; 62061da546Spatrick }; 63061da546Spatrick 64061da546Spatrick } // namespace platform_android 65061da546Spatrick } // namespace lldb_private 66061da546Spatrick 67dda28197Spatrick #endif // LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H 68