100e305d2STamas Berghammer //===-- PlatformAndroidRemoteGDBServer.h ------------------------*- C++ -*-===// 200e305d2STamas Berghammer // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 600e305d2STamas Berghammer // 700e305d2STamas Berghammer //===----------------------------------------------------------------------===// 800e305d2STamas Berghammer 9cdc514e4SJonas Devlieghere #ifndef LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H 10cdc514e4SJonas Devlieghere #define LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H 1100e305d2STamas Berghammer 1200e305d2STamas Berghammer #include <map> 1300e305d2STamas Berghammer #include <utility> 1400e305d2STamas Berghammer 1500e305d2STamas Berghammer #include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h" 1600e305d2STamas Berghammer 17e7df5f5dSOleksiy Vyalov #include "llvm/ADT/Optional.h" 18e7df5f5dSOleksiy Vyalov 19e7df5f5dSOleksiy Vyalov #include "AdbClient.h" 20e7df5f5dSOleksiy Vyalov 21db264a6dSTamas Berghammer namespace lldb_private { 22db264a6dSTamas Berghammer namespace platform_android { 23db264a6dSTamas Berghammer 24b9c1b51eSKate Stone class PlatformAndroidRemoteGDBServer 25b9c1b51eSKate Stone : public platform_gdb_server::PlatformRemoteGDBServer { 2600e305d2STamas Berghammer public: 27*4977da2cSPavel Labath PlatformAndroidRemoteGDBServer() = default; 2800e305d2STamas Berghammer 29222b937cSEugene Zelenko ~PlatformAndroidRemoteGDBServer() override; 3000e305d2STamas Berghammer 3197206d57SZachary Turner Status ConnectRemote(Args &args) override; 3200e305d2STamas Berghammer 3397206d57SZachary Turner Status DisconnectRemote() override; 3400e305d2STamas Berghammer 353165945aSZachary Turner lldb::ProcessSP ConnectProcess(llvm::StringRef connect_url, 363165945aSZachary Turner llvm::StringRef plugin_name, 37ccd6cffbSTamas Berghammer lldb_private::Debugger &debugger, 38ccd6cffbSTamas Berghammer lldb_private::Target *target, 3997206d57SZachary Turner lldb_private::Status &error) override; 40ccd6cffbSTamas Berghammer 4100e305d2STamas Berghammer protected: 423ea689b3SChaoren Lin std::string m_device_id; 433ea689b3SChaoren Lin std::map<lldb::pid_t, uint16_t> m_port_forwards; 44e7df5f5dSOleksiy Vyalov llvm::Optional<AdbClient::UnixSocketNamespace> m_socket_namespace; 4500e305d2STamas Berghammer 46b9c1b51eSKate Stone bool LaunchGDBServer(lldb::pid_t &pid, std::string &connect_url) override; 4700e305d2STamas Berghammer 48b9c1b51eSKate Stone bool KillSpawnedProcess(lldb::pid_t pid) override; 4900e305d2STamas Berghammer 50b9c1b51eSKate Stone void DeleteForwardPort(lldb::pid_t pid); 511c1d76b3SOleksiy Vyalov 5297206d57SZachary Turner Status MakeConnectURL(const lldb::pid_t pid, const uint16_t remote_port, 53245f7fdcSZachary Turner llvm::StringRef remote_socket_name, 549fe526c2SOleksiy Vyalov std::string &connect_url); 5554971856SOleksiy Vyalov 5600e305d2STamas Berghammer private: 57eaebcbc6SKonrad Kleine PlatformAndroidRemoteGDBServer(const PlatformAndroidRemoteGDBServer &) = 58eaebcbc6SKonrad Kleine delete; 59eaebcbc6SKonrad Kleine const PlatformAndroidRemoteGDBServer & 60eaebcbc6SKonrad Kleine operator=(const PlatformAndroidRemoteGDBServer &) = delete; 6100e305d2STamas Berghammer }; 6200e305d2STamas Berghammer 63db264a6dSTamas Berghammer } // namespace platform_android 64db264a6dSTamas Berghammer } // namespace lldb_private 65db264a6dSTamas Berghammer 66cdc514e4SJonas Devlieghere #endif // LLDB_SOURCE_PLUGINS_PLATFORM_ANDROID_PLATFORMANDROIDREMOTEGDBSERVER_H 67