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