xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Platform/Windows/PlatformWindows.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
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