summaryrefslogtreecommitdiff
path: root/source/Plugins/Process/Windows/Common/ProcessWindows.h
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-01-02 19:26:05 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-01-02 19:26:05 +0000
commit14f1b3e8826ce43b978db93a62d1166055db5394 (patch)
tree0a00ad8d3498783fe0193f3b656bca17c4c8697d /source/Plugins/Process/Windows/Common/ProcessWindows.h
parent4ee8c119c71a06dcad1e0fecc8c675e480e59337 (diff)
Notes
Diffstat (limited to 'source/Plugins/Process/Windows/Common/ProcessWindows.h')
-rw-r--r--source/Plugins/Process/Windows/Common/ProcessWindows.h117
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_