blob: 964f1518443386b79686510a1967654ed2fbebeb [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 Turner8f211742014-11-04 00:00:12 +000016#include <map>
Zachary Turner3985f892014-11-10 22:32:18 +000017#include <memory>
Zachary Turner35ed1322014-07-28 16:45:18 +000018#include <queue>
19
20// Other libraries and framework includes
Zachary Turner742346a2014-11-05 22:16:28 +000021#include "ForwardDecl.h"
22#include "IDebugDelegate.h"
Zachary Turnera32d2ce2014-11-12 19:31:56 +000023#include "lldb/lldb-forward.h"
Zachary Turner3985f892014-11-10 22:32:18 +000024#include "lldb/Core/Error.h"
Zachary Turner8f211742014-11-04 00:00:12 +000025#include "lldb/Host/HostThread.h"
Zachary Turner35ed1322014-07-28 16:45:18 +000026#include "lldb/Target/Process.h"
27
28class ProcessMonitor;
29
Zachary Turner8f211742014-11-04 00:00:12 +000030namespace lldb_private
31{
Zachary Turner3985f892014-11-10 22:32:18 +000032class ProcessWindowsData;
Zachary Turner8f211742014-11-04 00:00:12 +000033}
34
Zachary Turner742346a2014-11-05 22:16:28 +000035class ProcessWindows : public lldb_private::Process, public lldb_private::IDebugDelegate
Zachary Turner35ed1322014-07-28 16:45:18 +000036{
37public:
38 //------------------------------------------------------------------
39 // Static functions.
40 //------------------------------------------------------------------
41 static lldb::ProcessSP
42 CreateInstance(lldb_private::Target& target,
43 lldb_private::Listener &listener,
44 const lldb_private::FileSpec *);
45
46 static void
47 Initialize();
48
49 static void
50 Terminate();
51
52 static lldb_private::ConstString
53 GetPluginNameStatic();
54
55 static const char *
56 GetPluginDescriptionStatic();
57
58 //------------------------------------------------------------------
59 // Constructors and destructors
60 //------------------------------------------------------------------
61 ProcessWindows(lldb_private::Target& target,
62 lldb_private::Listener &listener);
63
Zachary Turner8f211742014-11-04 00:00:12 +000064 ~ProcessWindows();
65
Zachary Turner82da55f2014-11-25 19:03:08 +000066 // lldb_private::Process overrides
67 lldb_private::ConstString GetPluginName() override;
68 uint32_t GetPluginVersion() override;
Zachary Turner35ed1322014-07-28 16:45:18 +000069
Zachary Turner82da55f2014-11-25 19:03:08 +000070 size_t GetSTDOUT(char *buf, size_t buf_size, lldb_private::Error &error) override;
71 size_t GetSTDERR(char *buf, size_t buf_size, lldb_private::Error &error) override;
72 size_t PutSTDIN(const char *buf, size_t buf_size, lldb_private::Error &error) override;
73
74 lldb_private::Error DoDetach(bool keep_stopped) override;
75 lldb_private::Error DoLaunch(lldb_private::Module *exe_module, lldb_private::ProcessLaunchInfo &launch_info) override;
76 lldb_private::Error DoResume() override;
77 lldb_private::Error DoDestroy() override;
78 lldb_private::Error DoHalt(bool &caused_stop) override;
79
Zachary Turner807eb552014-11-25 19:03:19 +000080 void DidLaunch() override;
81
Zachary Turner82da55f2014-11-25 19:03:08 +000082 void RefreshStateAfterStop() override;
83 lldb::addr_t GetImageInfoAddress() override;
84
85 bool CanDebug(lldb_private::Target &target, bool plugin_specified_by_name) override;
86 bool
Zachary Turner119767d2014-11-17 17:46:43 +000087 DetachRequiresHalt() override
88 {
89 return true;
90 }
Zachary Turner82da55f2014-11-25 19:03:08 +000091 bool
Zachary Turner119767d2014-11-17 17:46:43 +000092 DestroyRequiresHalt() override
93 {
94 return false;
95 }
Zachary Turner82da55f2014-11-25 19:03:08 +000096 bool UpdateThreadList(lldb_private::ThreadList &old_thread_list, lldb_private::ThreadList &new_thread_list) override;
97 bool IsAlive() override;
Zachary Turner35ed1322014-07-28 16:45:18 +000098
Zachary Turner82da55f2014-11-25 19:03:08 +000099 size_t DoReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, lldb_private::Error &error) override;
100 size_t DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size, lldb_private::Error &error) override;
Zachary Turner742346a2014-11-05 22:16:28 +0000101
102 // IDebugDelegate overrides.
Zachary Turner82da55f2014-11-25 19:03:08 +0000103 void OnExitProcess(uint32_t exit_code) override;
104 void OnDebuggerConnected(lldb::addr_t image_base) override;
105 ExceptionResult OnDebugException(bool first_chance, const lldb_private::ExceptionRecord &record) override;
106 void OnCreateThread(const lldb_private::HostThread &thread) override;
107 void OnExitThread(const lldb_private::HostThread &thread) override;
108 void OnLoadDll(const lldb_private::ModuleSpec &module_spec, lldb::addr_t module_addr) override;
109 void OnUnloadDll(lldb::addr_t module_addr) override;
110 void OnDebugString(const std::string &string) override;
111 void OnDebuggerError(const lldb_private::Error &error, uint32_t type) override;
Zachary Turner02862bc2014-11-07 23:44:13 +0000112
113 private:
Zachary Turnera32d2ce2014-11-12 19:31:56 +0000114 // Data for the active debugging session.
115 std::unique_ptr<lldb_private::ProcessWindowsData> m_session_data;
Zachary Turner35ed1322014-07-28 16:45:18 +0000116};
117
118#endif // liblldb_Plugins_Process_Windows_ProcessWindows_H_