blob: 536dd9b2f4719a96400d7daf6c91750b6d848724 [file] [log] [blame]
Stephen Wilsonf6f40332010-07-24 02:19:04 +00001//===-- ProcessLinux.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_ProcessLinux_H_
11#define liblldb_ProcessLinux_H_
12
13// C Includes
14
15// C++ Includes
16#include <queue>
17
18// Other libraries and framework includes
19#include "lldb/Target/Process.h"
20#include "ProcessMessage.h"
21
22class ProcessMonitor;
23
24class ProcessLinux :
25 public lldb_private::Process
26{
27public:
28 //------------------------------------------------------------------
29 // Static functions.
30 //------------------------------------------------------------------
31 static Process*
32 CreateInstance(lldb_private::Target& target,
33 lldb_private::Listener &listener);
34
35 static void
36 Initialize();
37
38 static void
39 Terminate();
40
41 static const char *
42 GetPluginNameStatic();
43
44 static const char *
45 GetPluginDescriptionStatic();
46
47 //------------------------------------------------------------------
48 // Constructors and destructors
49 //------------------------------------------------------------------
50 ProcessLinux(lldb_private::Target& target,
51 lldb_private::Listener &listener);
52
53 virtual
54 ~ProcessLinux();
55
56 //------------------------------------------------------------------
57 // Process protocol.
58 //------------------------------------------------------------------
59 virtual bool
60 CanDebug(lldb_private::Target &target);
61
62 virtual lldb_private::Error
63 DoAttachToProcessWithID(lldb::pid_t pid);
64
65 virtual lldb_private::Error
66 DoLaunch(lldb_private::Module *module,
67 char const *argv[],
68 char const *envp[],
Stephen Wilson3a804312011-01-04 21:41:31 +000069 uint32_t launch_flags,
Stephen Wilsonf6f40332010-07-24 02:19:04 +000070 const char *stdin_path,
71 const char *stdout_path,
72 const char *stderr_path);
73
74 virtual void
75 DidLaunch();
76
77 virtual lldb_private::Error
78 DoResume();
79
80 virtual lldb_private::Error
Stephen Wilson3a804312011-01-04 21:41:31 +000081 DoHalt(bool &caused_stop);
Stephen Wilsonf6f40332010-07-24 02:19:04 +000082
83 virtual lldb_private::Error
84 DoDetach();
85
86 virtual lldb_private::Error
87 DoSignal(int signal);
88
89 virtual lldb_private::Error
90 DoDestroy();
91
92 virtual void
93 RefreshStateAfterStop();
94
95 virtual bool
96 IsAlive();
97
98 virtual size_t
99 DoReadMemory(lldb::addr_t vm_addr,
100 void *buf,
101 size_t size,
102 lldb_private::Error &error);
103
104 virtual size_t
105 DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size,
106 lldb_private::Error &error);
107
108 virtual lldb::addr_t
109 DoAllocateMemory(size_t size, uint32_t permissions,
110 lldb_private::Error &error);
111
112 lldb::addr_t
113 AllocateMemory(size_t size, uint32_t permissions,
114 lldb_private::Error &error);
115
116 virtual lldb_private::Error
117 DoDeallocateMemory(lldb::addr_t ptr);
118
119 virtual size_t
120 GetSoftwareBreakpointTrapOpcode(lldb_private::BreakpointSite* bp_site);
121
122 virtual lldb_private::Error
123 EnableBreakpoint(lldb_private::BreakpointSite *bp_site);
124
125 virtual lldb_private::Error
126 DisableBreakpoint(lldb_private::BreakpointSite *bp_site);
127
128 virtual uint32_t
129 UpdateThreadListIfNeeded();
130
131 virtual lldb::ByteOrder
132 GetByteOrder() const;
133
134 //------------------------------------------------------------------
135 // PluginInterface protocol
136 //------------------------------------------------------------------
137 virtual const char *
138 GetPluginName();
139
140 virtual const char *
141 GetShortPluginName();
142
143 virtual uint32_t
144 GetPluginVersion();
145
146 virtual void
147 GetPluginCommandHelp(const char *command, lldb_private::Stream *strm);
148
149 virtual lldb_private::Error
150 ExecutePluginCommand(lldb_private::Args &command,
151 lldb_private::Stream *strm);
152
153 virtual lldb_private::Log *
154 EnablePluginLogging(lldb_private::Stream *strm,
155 lldb_private::Args &command);
156
157 //--------------------------------------------------------------------------
158 // ProcessLinux internal API.
159
160 /// Registers the given message with this process.
161 void SendMessage(const ProcessMessage &message);
162
163 ProcessMonitor &GetMonitor() { return *m_monitor; }
164
165private:
166 /// Target byte order.
167 lldb::ByteOrder m_byte_order;
168
169 /// Process monitor;
170 ProcessMonitor *m_monitor;
171
172 /// The module we are executing.
173 lldb_private::Module *m_module;
174
175 /// Message queue notifying this instance of inferior process state changes.
176 lldb_private::Mutex m_message_mutex;
177 std::queue<ProcessMessage> m_message_queue;
178
179 /// Updates the loaded sections provided by the executable.
180 ///
181 /// FIXME: It would probably be better to delegate this task to the
182 /// DynamicLoader plugin, when we have one.
183 void UpdateLoadedSections();
184
185 /// Returns true if the process has exited.
186 bool HasExited();
187};
188
189#endif // liblldb_MacOSXProcess_H_