blob: 478819ecdbcf2075fda553866ad95722c76a40aa [file] [log] [blame]
Zachary Turner35ed1322014-07-28 16:45:18 +00001//===-- ProcessWindows.h ----------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef liblldb_Plugins_Process_Windows_ProcessWindows_H_
11#define liblldb_Plugins_Process_Windows_ProcessWindows_H_
12
13// C Includes
14
15// C++ Includes
Zachary Turner3985f892014-11-10 22:32:18 +000016#include <memory>
Zachary Turner35ed1322014-07-28 16:45:18 +000017#include <queue>
18
19// Other libraries and framework includes
Zachary Turner742346a2014-11-05 22:16:28 +000020#include "ForwardDecl.h"
21#include "IDebugDelegate.h"
Zachary Turnera32d2ce2014-11-12 19:31:56 +000022#include "lldb/lldb-forward.h"
Zachary Turner3985f892014-11-10 22:32:18 +000023#include "lldb/Core/Error.h"
Zachary Turner8f211742014-11-04 00:00:12 +000024#include "lldb/Host/HostThread.h"
Zachary Turner35ed1322014-07-28 16:45:18 +000025#include "lldb/Target/Process.h"
26
Zachary Turnerfb6c34942014-12-10 23:25:10 +000027#include "llvm/Support/Mutex.h"
28
Zachary Turner35ed1322014-07-28 16:45:18 +000029class ProcessMonitor;
30
Zachary Turner8f211742014-11-04 00:00:12 +000031namespace lldb_private
32{
Zachary Turnerc62733b2015-05-20 18:31:17 +000033class HostProcess;
Zachary Turner3985f892014-11-10 22:32:18 +000034class ProcessWindowsData;
Zachary Turner8f211742014-11-04 00:00:12 +000035}
36
Zachary Turner742346a2014-11-05 22:16:28 +000037class ProcessWindows : public lldb_private::Process, public lldb_private::IDebugDelegate
Zachary Turner35ed1322014-07-28 16:45:18 +000038{
39public:
40 //------------------------------------------------------------------
41 // Static functions.
42 //------------------------------------------------------------------
43 static lldb::ProcessSP
44 CreateInstance(lldb_private::Target& target,
45 lldb_private::Listener &listener,
46 const lldb_private::FileSpec *);
47
48 static void
49 Initialize();
50
51 static void
52 Terminate();
53
54 static lldb_private::ConstString
55 GetPluginNameStatic();
56
57 static const char *
58 GetPluginDescriptionStatic();
59
60 //------------------------------------------------------------------
61 // Constructors and destructors
62 //------------------------------------------------------------------
63 ProcessWindows(lldb_private::Target& target,
64 lldb_private::Listener &listener);
65
Zachary Turner8f211742014-11-04 00:00:12 +000066 ~ProcessWindows();
67
Zachary Turner82da55f2014-11-25 19:03:08 +000068 // lldb_private::Process overrides
69 lldb_private::ConstString GetPluginName() override;
70 uint32_t GetPluginVersion() override;
Zachary Turner35ed1322014-07-28 16:45:18 +000071
Zachary Turner82da55f2014-11-25 19:03:08 +000072 size_t GetSTDOUT(char *buf, size_t buf_size, lldb_private::Error &error) override;
73 size_t GetSTDERR(char *buf, size_t buf_size, lldb_private::Error &error) override;
74 size_t PutSTDIN(const char *buf, size_t buf_size, lldb_private::Error &error) override;
75
Zachary Turnere0d93f52014-12-01 23:13:52 +000076 lldb_private::Error EnableBreakpointSite(lldb_private::BreakpointSite *bp_site) override;
77 lldb_private::Error DisableBreakpointSite(lldb_private::BreakpointSite *bp_site) override;
78
Zachary Turner82da55f2014-11-25 19:03:08 +000079 lldb_private::Error DoDetach(bool keep_stopped) override;
80 lldb_private::Error DoLaunch(lldb_private::Module *exe_module, lldb_private::ProcessLaunchInfo &launch_info) override;
Zachary Turnerc62733b2015-05-20 18:31:17 +000081 lldb_private::Error DoAttachToProcessWithID(lldb::pid_t pid,
82 const lldb_private::ProcessAttachInfo &attach_info) override;
Zachary Turner82da55f2014-11-25 19:03:08 +000083 lldb_private::Error DoResume() override;
84 lldb_private::Error DoDestroy() override;
85 lldb_private::Error DoHalt(bool &caused_stop) override;
86
Zachary Turner807eb552014-11-25 19:03:19 +000087 void DidLaunch() override;
Zachary Turnerc62733b2015-05-20 18:31:17 +000088 void DidAttach(lldb_private::ArchSpec &arch_spec) override;
Zachary Turner807eb552014-11-25 19:03:19 +000089
Zachary Turner82da55f2014-11-25 19:03:08 +000090 void RefreshStateAfterStop() override;
91 lldb::addr_t GetImageInfoAddress() override;
92
93 bool CanDebug(lldb_private::Target &target, bool plugin_specified_by_name) override;
94 bool
Zachary Turner119767d2014-11-17 17:46:43 +000095 DestroyRequiresHalt() override
96 {
97 return false;
98 }
Zachary Turner82da55f2014-11-25 19:03:08 +000099 bool UpdateThreadList(lldb_private::ThreadList &old_thread_list, lldb_private::ThreadList &new_thread_list) override;
100 bool IsAlive() override;
Zachary Turner35ed1322014-07-28 16:45:18 +0000101
Zachary Turner82da55f2014-11-25 19:03:08 +0000102 size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, lldb_private::Error &error) override;
103 size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size, lldb_private::Error &error) override;
Zachary Turner5a7e8d02015-01-21 23:26:40 +0000104 lldb_private::Error GetMemoryRegionInfo(lldb::addr_t vm_addr, lldb_private::MemoryRegionInfo &info) override;
Zachary Turner742346a2014-11-05 22:16:28 +0000105
106 // IDebugDelegate overrides.
Zachary Turner82da55f2014-11-25 19:03:08 +0000107 void OnExitProcess(uint32_t exit_code) override;
108 void OnDebuggerConnected(lldb::addr_t image_base) override;
109 ExceptionResult OnDebugException(bool first_chance, const lldb_private::ExceptionRecord &record) override;
110 void OnCreateThread(const lldb_private::HostThread &thread) override;
Adrian McCarthy2f8e4c32015-05-18 23:24:32 +0000111 void OnExitThread(lldb::tid_t thread_id, uint32_t exit_code) override;
Zachary Turner82da55f2014-11-25 19:03:08 +0000112 void OnLoadDll(const lldb_private::ModuleSpec &module_spec, lldb::addr_t module_addr) override;
113 void OnUnloadDll(lldb::addr_t module_addr) override;
114 void OnDebugString(const std::string &string) override;
115 void OnDebuggerError(const lldb_private::Error &error, uint32_t type) override;
Zachary Turner02862bc2014-11-07 23:44:13 +0000116
117 private:
Zachary Turnerc62733b2015-05-20 18:31:17 +0000118 lldb_private::Error WaitForDebuggerConnection(lldb_private::DebuggerThreadSP debugger,
119 lldb_private::HostProcess &process);
120
Zachary Turnerfb6c34942014-12-10 23:25:10 +0000121 llvm::sys::Mutex m_mutex;
122
Zachary Turnera32d2ce2014-11-12 19:31:56 +0000123 // Data for the active debugging session.
124 std::unique_ptr<lldb_private::ProcessWindowsData> m_session_data;
Zachary Turner35ed1322014-07-28 16:45:18 +0000125};
126
127#endif // liblldb_Plugins_Process_Windows_ProcessWindows_H_