1061da546Spatrick //===-- PlatformWindows.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_WINDOWS_PLATFORMWINDOWS_H 10dda28197Spatrick #define LLDB_SOURCE_PLUGINS_PLATFORM_WINDOWS_PLATFORMWINDOWS_H 11061da546Spatrick 12061da546Spatrick #include "lldb/Target/RemoteAwarePlatform.h" 13061da546Spatrick 14061da546Spatrick namespace lldb_private { 15061da546Spatrick 16061da546Spatrick class PlatformWindows : public RemoteAwarePlatform { 17061da546Spatrick public: 18061da546Spatrick PlatformWindows(bool is_host); 19061da546Spatrick 20061da546Spatrick static void Initialize(); 21061da546Spatrick 22061da546Spatrick static void Terminate(); 23061da546Spatrick 24061da546Spatrick // lldb_private::PluginInterface functions 25061da546Spatrick static lldb::PlatformSP CreateInstance(bool force, 26061da546Spatrick const lldb_private::ArchSpec *arch); 27061da546Spatrick GetPluginNameStatic(bool is_host)28*f6aab3d8Srobert static llvm::StringRef GetPluginNameStatic(bool is_host) { 29*f6aab3d8Srobert return is_host ? Platform::GetHostPlatformName() : "remote-windows"; 30*f6aab3d8Srobert } 31061da546Spatrick 32*f6aab3d8Srobert static llvm::StringRef GetPluginDescriptionStatic(bool is_host); 33061da546Spatrick GetPluginName()34*f6aab3d8Srobert llvm::StringRef GetPluginName() override { 35*f6aab3d8Srobert return GetPluginNameStatic(IsHost()); 36*f6aab3d8Srobert } 37061da546Spatrick 38061da546Spatrick // lldb_private::Platform functions GetDescription()39*f6aab3d8Srobert llvm::StringRef GetDescription() override { 40061da546Spatrick return GetPluginDescriptionStatic(IsHost()); 41061da546Spatrick } 42061da546Spatrick 43061da546Spatrick lldb_private::Status ConnectRemote(lldb_private::Args &args) override; 44061da546Spatrick 45061da546Spatrick lldb_private::Status DisconnectRemote() override; 46061da546Spatrick 47*f6aab3d8Srobert uint32_t DoLoadImage(lldb_private::Process *process, 48*f6aab3d8Srobert const lldb_private::FileSpec &remote_file, 49*f6aab3d8Srobert const std::vector<std::string> *paths, 50*f6aab3d8Srobert lldb_private::Status &error, 51*f6aab3d8Srobert lldb_private::FileSpec *loaded_path) override; 52*f6aab3d8Srobert 53*f6aab3d8Srobert lldb_private::Status UnloadImage(lldb_private::Process *process, 54*f6aab3d8Srobert uint32_t image_token) override; 55*f6aab3d8Srobert 56061da546Spatrick lldb::ProcessSP DebugProcess(lldb_private::ProcessLaunchInfo &launch_info, 57061da546Spatrick lldb_private::Debugger &debugger, 58*f6aab3d8Srobert lldb_private::Target &target, 59061da546Spatrick lldb_private::Status &error) override; 60061da546Spatrick 61061da546Spatrick lldb::ProcessSP Attach(lldb_private::ProcessAttachInfo &attach_info, 62061da546Spatrick lldb_private::Debugger &debugger, 63061da546Spatrick lldb_private::Target *target, 64061da546Spatrick lldb_private::Status &error) override; 65061da546Spatrick 66*f6aab3d8Srobert std::vector<ArchSpec> GetSupportedArchitectures(const ArchSpec & process_host_arch)67*f6aab3d8Srobert GetSupportedArchitectures(const ArchSpec &process_host_arch) override { 68*f6aab3d8Srobert return m_supported_architectures; 69*f6aab3d8Srobert } 70061da546Spatrick 71061da546Spatrick void GetStatus(lldb_private::Stream &strm) override; 72061da546Spatrick 73061da546Spatrick bool CanDebugProcess() override; 74061da546Spatrick 75061da546Spatrick // FIXME not sure what the _sigtramp equivalent would be on this platform CalculateTrapHandlerSymbolNames()76061da546Spatrick void CalculateTrapHandlerSymbolNames() override {} 77061da546Spatrick 78061da546Spatrick ConstString GetFullNameForDylib(ConstString basename) override; 79*f6aab3d8Srobert 80*f6aab3d8Srobert size_t GetSoftwareBreakpointTrapOpcode(Target &target, 81*f6aab3d8Srobert BreakpointSite *bp_site) override; 82*f6aab3d8Srobert 83*f6aab3d8Srobert std::vector<ArchSpec> m_supported_architectures; 84*f6aab3d8Srobert 85*f6aab3d8Srobert private: 86*f6aab3d8Srobert std::unique_ptr<lldb_private::UtilityFunction> 87*f6aab3d8Srobert MakeLoadImageUtilityFunction(lldb_private::ExecutionContext &context, 88*f6aab3d8Srobert lldb_private::Status &status); 89*f6aab3d8Srobert 90*f6aab3d8Srobert lldb_private::Status EvaluateLoaderExpression(lldb_private::Process *process, 91*f6aab3d8Srobert const char *expression, 92*f6aab3d8Srobert lldb::ValueObjectSP &value); 93061da546Spatrick }; 94061da546Spatrick 95061da546Spatrick } // namespace lldb_private 96061da546Spatrick 97dda28197Spatrick #endif // LLDB_SOURCE_PLUGINS_PLATFORM_WINDOWS_PLATFORMWINDOWS_H 98