diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:26:05 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:26:05 +0000 |
commit | 14f1b3e8826ce43b978db93a62d1166055db5394 (patch) | |
tree | 0a00ad8d3498783fe0193f3b656bca17c4c8697d /source/Plugins/Process/Windows/Common/ProcessWindows.h | |
parent | 4ee8c119c71a06dcad1e0fecc8c675e480e59337 (diff) |
Notes
Diffstat (limited to 'source/Plugins/Process/Windows/Common/ProcessWindows.h')
-rw-r--r-- | source/Plugins/Process/Windows/Common/ProcessWindows.h | 117 |
1 files changed, 92 insertions, 25 deletions
diff --git a/source/Plugins/Process/Windows/Common/ProcessWindows.h b/source/Plugins/Process/Windows/Common/ProcessWindows.h index 0ee42e2ae1f1d..fac06c46b2ba8 100644 --- a/source/Plugins/Process/Windows/Common/ProcessWindows.h +++ b/source/Plugins/Process/Windows/Common/ProcessWindows.h @@ -11,42 +11,109 @@ #define liblldb_Plugins_Process_Windows_Common_ProcessWindows_H_ // Other libraries and framework includes -#include "lldb/lldb-forward.h" #include "lldb/Core/Error.h" #include "lldb/Target/Process.h" +#include "lldb/lldb-forward.h" + +#include "llvm/Support/Mutex.h" + +#include "IDebugDelegate.h" + +namespace lldb_private { -namespace lldb_private -{ +class HostProcess; +class ProcessWindowsData; -class ProcessWindows : public lldb_private::Process -{ +class ProcessWindows : public Process, public IDebugDelegate { public: - //------------------------------------------------------------------ - // Constructors and destructors - //------------------------------------------------------------------ - ProcessWindows(lldb::TargetSP target_sp, - lldb::ListenerSP listener_sp); + //------------------------------------------------------------------ + // Static functions. + //------------------------------------------------------------------ + static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp, + lldb::ListenerSP listener_sp, + const FileSpec *); - ~ProcessWindows(); + static void Initialize(); - size_t GetSTDOUT(char *buf, size_t buf_size, lldb_private::Error &error) override; - size_t GetSTDERR(char *buf, size_t buf_size, lldb_private::Error &error) override; - size_t PutSTDIN(const char *buf, size_t buf_size, lldb_private::Error &error) override; + static void Terminate(); - lldb::addr_t GetImageInfoAddress() override; + static lldb_private::ConstString GetPluginNameStatic(); -protected: - // These decode the page protection bits. - static bool - IsPageReadable(uint32_t protect); + static const char *GetPluginDescriptionStatic(); - static bool - IsPageWritable(uint32_t protect); + //------------------------------------------------------------------ + // Constructors and destructors + //------------------------------------------------------------------ + ProcessWindows(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp); - static bool - IsPageExecutable(uint32_t protect); -}; + ~ProcessWindows(); + + size_t GetSTDOUT(char *buf, size_t buf_size, Error &error) override; + size_t GetSTDERR(char *buf, size_t buf_size, Error &error) override; + size_t PutSTDIN(const char *buf, size_t buf_size, Error &error) override; + + // lldb_private::Process overrides + ConstString GetPluginName() override; + uint32_t GetPluginVersion() override; + + Error EnableBreakpointSite(BreakpointSite *bp_site) override; + Error DisableBreakpointSite(BreakpointSite *bp_site) override; + + Error DoDetach(bool keep_stopped) override; + Error DoLaunch(Module *exe_module, ProcessLaunchInfo &launch_info) override; + Error DoAttachToProcessWithID( + lldb::pid_t pid, + const lldb_private::ProcessAttachInfo &attach_info) override; + Error DoResume() override; + Error DoDestroy() override; + Error DoHalt(bool &caused_stop) override; + void DidLaunch() override; + void DidAttach(lldb_private::ArchSpec &arch_spec) override; + + void RefreshStateAfterStop() override; + + bool CanDebug(lldb::TargetSP target_sp, + bool plugin_specified_by_name) override; + bool DestroyRequiresHalt() override { return false; } + bool UpdateThreadList(ThreadList &old_thread_list, + ThreadList &new_thread_list) override; + bool IsAlive() override; + + size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, + Error &error) override; + size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size, + Error &error) override; + Error GetMemoryRegionInfo(lldb::addr_t vm_addr, + MemoryRegionInfo &info) override; + + lldb::addr_t GetImageInfoAddress() override; + + // IDebugDelegate overrides. + void OnExitProcess(uint32_t exit_code) override; + void OnDebuggerConnected(lldb::addr_t image_base) override; + ExceptionResult OnDebugException(bool first_chance, + const ExceptionRecord &record) override; + void OnCreateThread(const HostThread &thread) override; + void OnExitThread(lldb::tid_t thread_id, uint32_t exit_code) override; + void OnLoadDll(const ModuleSpec &module_spec, + lldb::addr_t module_addr) override; + void OnUnloadDll(lldb::addr_t module_addr) override; + void OnDebugString(const std::string &string) override; + void OnDebuggerError(const Error &error, uint32_t type) override; + +private: + Error WaitForDebuggerConnection(DebuggerThreadSP debugger, + HostProcess &process); + + // These decode the page protection bits. + static bool IsPageReadable(uint32_t protect); + static bool IsPageWritable(uint32_t protect); + static bool IsPageExecutable(uint32_t protect); + + llvm::sys::Mutex m_mutex; + std::unique_ptr<ProcessWindowsData> m_session_data; +}; } -#endif // liblldb_Plugins_Process_Windows_Common_ProcessWindows_H_ +#endif // liblldb_Plugins_Process_Windows_Common_ProcessWindows_H_ |