118a9135dSAdrian McCarthy //===-- ProcessWindows.h ----------------------------------------*- C++ -*-===//
218a9135dSAdrian McCarthy //
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
618a9135dSAdrian McCarthy //
718a9135dSAdrian McCarthy //===----------------------------------------------------------------------===//
818a9135dSAdrian McCarthy 
918a9135dSAdrian McCarthy #ifndef liblldb_Plugins_Process_Windows_Common_ProcessWindows_H_
1018a9135dSAdrian McCarthy #define liblldb_Plugins_Process_Windows_Common_ProcessWindows_H_
1118a9135dSAdrian McCarthy 
1218a9135dSAdrian McCarthy #include "lldb/Target/Process.h"
1397206d57SZachary Turner #include "lldb/Utility/Status.h"
14b9c1b51eSKate Stone #include "lldb/lldb-forward.h"
1518a9135dSAdrian McCarthy 
16eb6671e7SAaron Smith #include "Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h"
17053eb356SAaron Smith #include "ProcessDebugger.h"
184ad5def9SAdrian McCarthy 
19b9c1b51eSKate Stone namespace lldb_private {
2018a9135dSAdrian McCarthy 
214ad5def9SAdrian McCarthy class HostProcess;
224ad5def9SAdrian McCarthy 
23053eb356SAaron Smith class ProcessWindows : public Process, public ProcessDebugger {
2418a9135dSAdrian McCarthy public:
254ad5def9SAdrian McCarthy   // Static functions.
264ad5def9SAdrian McCarthy   static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp,
274ad5def9SAdrian McCarthy                                         lldb::ListenerSP listener_sp,
2818e4272aSMichał Górny                                         const FileSpec *,
2918e4272aSMichał Górny                                         bool can_connect);
304ad5def9SAdrian McCarthy 
314ad5def9SAdrian McCarthy   static void Initialize();
324ad5def9SAdrian McCarthy 
334ad5def9SAdrian McCarthy   static void Terminate();
344ad5def9SAdrian McCarthy 
GetPluginNameStatic()355f4980f0SPavel Labath   static llvm::StringRef GetPluginNameStatic() { return "windows"; }
364ad5def9SAdrian McCarthy 
375f4980f0SPavel Labath   static llvm::StringRef GetPluginDescriptionStatic();
384ad5def9SAdrian McCarthy 
3918a9135dSAdrian McCarthy   // Constructors and destructors
40b9c1b51eSKate Stone   ProcessWindows(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp);
4118a9135dSAdrian McCarthy 
4218a9135dSAdrian McCarthy   ~ProcessWindows();
4318a9135dSAdrian McCarthy 
4497206d57SZachary Turner   size_t GetSTDOUT(char *buf, size_t buf_size, Status &error) override;
4597206d57SZachary Turner   size_t GetSTDERR(char *buf, size_t buf_size, Status &error) override;
4697206d57SZachary Turner   size_t PutSTDIN(const char *buf, size_t buf_size, Status &error) override;
474ad5def9SAdrian McCarthy 
GetPluginName()485f4980f0SPavel Labath   llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
494ad5def9SAdrian McCarthy 
5097206d57SZachary Turner   Status EnableBreakpointSite(BreakpointSite *bp_site) override;
5197206d57SZachary Turner   Status DisableBreakpointSite(BreakpointSite *bp_site) override;
524ad5def9SAdrian McCarthy 
5397206d57SZachary Turner   Status DoDetach(bool keep_stopped) override;
5497206d57SZachary Turner   Status DoLaunch(Module *exe_module, ProcessLaunchInfo &launch_info) override;
5597206d57SZachary Turner   Status DoAttachToProcessWithID(
564ad5def9SAdrian McCarthy       lldb::pid_t pid,
574ad5def9SAdrian McCarthy       const lldb_private::ProcessAttachInfo &attach_info) override;
5897206d57SZachary Turner   Status DoResume() override;
5997206d57SZachary Turner   Status DoDestroy() override;
6097206d57SZachary Turner   Status DoHalt(bool &caused_stop) override;
614ad5def9SAdrian McCarthy 
624ad5def9SAdrian McCarthy   void DidLaunch() override;
634ad5def9SAdrian McCarthy   void DidAttach(lldb_private::ArchSpec &arch_spec) override;
644ad5def9SAdrian McCarthy 
654ad5def9SAdrian McCarthy   void RefreshStateAfterStop() override;
664ad5def9SAdrian McCarthy 
674ad5def9SAdrian McCarthy   bool CanDebug(lldb::TargetSP target_sp,
684ad5def9SAdrian McCarthy                 bool plugin_specified_by_name) override;
DestroyRequiresHalt()694ad5def9SAdrian McCarthy   bool DestroyRequiresHalt() override { return false; }
704bb62448SWalter Erquinigo   bool DoUpdateThreadList(ThreadList &old_thread_list,
714ad5def9SAdrian McCarthy                           ThreadList &new_thread_list) override;
724ad5def9SAdrian McCarthy   bool IsAlive() override;
734ad5def9SAdrian McCarthy 
74*530bc619SJonas Devlieghere   ArchSpec GetSystemArchitecture() override;
7568099b1dSJonas Devlieghere 
764ad5def9SAdrian McCarthy   size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size,
7797206d57SZachary Turner                       Status &error) override;
784ad5def9SAdrian McCarthy   size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size,
7997206d57SZachary Turner                        Status &error) override;
809d5b2d4aSAleksandr Urakov   lldb::addr_t DoAllocateMemory(size_t size, uint32_t permissions,
819d5b2d4aSAleksandr Urakov                                 Status &error) override;
829d5b2d4aSAleksandr Urakov   Status DoDeallocateMemory(lldb::addr_t ptr) override;
8318a9135dSAdrian McCarthy 
8418a9135dSAdrian McCarthy   lldb::addr_t GetImageInfoAddress() override;
850c35cde9SAdrian McCarthy 
86eb6671e7SAaron Smith   DynamicLoaderWindowsDYLD *GetDynamicLoader() override;
87eb6671e7SAaron Smith 
884ad5def9SAdrian McCarthy   // IDebugDelegate overrides.
894ad5def9SAdrian McCarthy   void OnExitProcess(uint32_t exit_code) override;
904ad5def9SAdrian McCarthy   void OnDebuggerConnected(lldb::addr_t image_base) override;
914ad5def9SAdrian McCarthy   ExceptionResult OnDebugException(bool first_chance,
924ad5def9SAdrian McCarthy                                    const ExceptionRecord &record) override;
934ad5def9SAdrian McCarthy   void OnCreateThread(const HostThread &thread) override;
944ad5def9SAdrian McCarthy   void OnExitThread(lldb::tid_t thread_id, uint32_t exit_code) override;
954ad5def9SAdrian McCarthy   void OnLoadDll(const ModuleSpec &module_spec,
964ad5def9SAdrian McCarthy                  lldb::addr_t module_addr) override;
974ad5def9SAdrian McCarthy   void OnUnloadDll(lldb::addr_t module_addr) override;
984ad5def9SAdrian McCarthy   void OnDebugString(const std::string &string) override;
9997206d57SZachary Turner   void OnDebuggerError(const Status &error, uint32_t type) override;
1006179c0ebSAleksandr Urakov 
1016179c0ebSAleksandr Urakov   Status GetWatchpointSupportInfo(uint32_t &num) override;
1026179c0ebSAleksandr Urakov   Status GetWatchpointSupportInfo(uint32_t &num, bool &after) override;
1036179c0ebSAleksandr Urakov   Status EnableWatchpoint(Watchpoint *wp, bool notify = true) override;
1046179c0ebSAleksandr Urakov   Status DisableWatchpoint(Watchpoint *wp, bool notify = true) override;
1056179c0ebSAleksandr Urakov 
1062937b282SDavid Spickett protected:
1072937b282SDavid Spickett   Status DoGetMemoryRegionInfo(lldb::addr_t vm_addr,
1082937b282SDavid Spickett                                MemoryRegionInfo &info) override;
1092937b282SDavid Spickett 
1106179c0ebSAleksandr Urakov private:
1116179c0ebSAleksandr Urakov   struct WatchpointInfo {
1126179c0ebSAleksandr Urakov     uint32_t slot_id;
1136179c0ebSAleksandr Urakov     lldb::addr_t address;
1146179c0ebSAleksandr Urakov     uint32_t size;
1156179c0ebSAleksandr Urakov     bool read;
1166179c0ebSAleksandr Urakov     bool write;
1176179c0ebSAleksandr Urakov   };
1186179c0ebSAleksandr Urakov   std::map<lldb::break_id_t, WatchpointInfo> m_watchpoints;
1196179c0ebSAleksandr Urakov   std::vector<lldb::break_id_t> m_watchpoint_ids;
12018a9135dSAdrian McCarthy };
121053eb356SAaron Smith } // namespace lldb_private
12218a9135dSAdrian McCarthy 
12318a9135dSAdrian McCarthy #endif // liblldb_Plugins_Process_Windows_Common_ProcessWindows_H_
124