1 //===-- ProcessPOSIX.h ------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_ProcessPOSIX_H_
11 #define liblldb_ProcessPOSIX_H_
19 // Other libraries and framework includes
20 #include "lldb/Target/Process.h"
21 #include "lldb/Target/UnixSignals.h"
22 #include "ProcessMessage.h"
28 public lldb_private::Process
32 //------------------------------------------------------------------
33 // Constructors and destructors
34 //------------------------------------------------------------------
35 ProcessPOSIX(lldb_private::Target& target,
36 lldb_private::Listener &listener);
41 //------------------------------------------------------------------
43 //------------------------------------------------------------------
48 CanDebug(lldb_private::Target &target, bool plugin_specified_by_name);
50 virtual lldb_private::Error
51 WillLaunch(lldb_private::Module *module);
53 virtual lldb_private::Error
54 DoAttachToProcessWithID(lldb::pid_t pid);
56 virtual lldb_private::Error
57 DoAttachToProcessWithID (lldb::pid_t pid, const lldb_private::ProcessAttachInfo &attach_info);
59 virtual lldb_private::Error
60 DoLaunch (lldb_private::Module *exe_module,
61 lldb_private::ProcessLaunchInfo &launch_info);
66 virtual lldb_private::Error
69 virtual lldb_private::Error
70 DoHalt(bool &caused_stop);
72 virtual lldb_private::Error
73 DoDetach(bool keep_stopped) = 0;
75 virtual lldb_private::Error
78 virtual lldb_private::Error
85 RefreshStateAfterStop();
91 DoReadMemory(lldb::addr_t vm_addr,
94 lldb_private::Error &error);
97 DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size,
98 lldb_private::Error &error);
101 DoAllocateMemory(size_t size, uint32_t permissions,
102 lldb_private::Error &error);
104 virtual lldb_private::Error
105 DoDeallocateMemory(lldb::addr_t ptr);
108 GetSoftwareBreakpointTrapOpcode(lldb_private::BreakpointSite* bp_site);
110 virtual lldb_private::Error
111 EnableBreakpointSite(lldb_private::BreakpointSite *bp_site);
113 virtual lldb_private::Error
114 DisableBreakpointSite(lldb_private::BreakpointSite *bp_site);
116 virtual lldb_private::Error
117 EnableWatchpoint(lldb_private::Watchpoint *wp, bool notify = true);
119 virtual lldb_private::Error
120 DisableWatchpoint(lldb_private::Watchpoint *wp, bool notify = true);
122 virtual lldb_private::Error
123 GetWatchpointSupportInfo(uint32_t &num);
125 virtual lldb_private::Error
126 GetWatchpointSupportInfo(uint32_t &num, bool &after);
129 UpdateThreadListIfNeeded();
132 UpdateThreadList(lldb_private::ThreadList &old_thread_list,
133 lldb_private::ThreadList &new_thread_list) = 0;
135 virtual lldb::ByteOrder
136 GetByteOrder() const;
139 GetImageInfoAddress();
142 PutSTDIN(const char *buf, size_t len, lldb_private::Error &error);
144 //--------------------------------------------------------------------------
145 // ProcessPOSIX internal API.
147 /// Registers the given message with this process.
149 SendMessage(const ProcessMessage &message);
152 GetMonitor() { assert(m_monitor); return *m_monitor; }
154 lldb_private::UnixSignals &
158 GetFilePath(const lldb_private::ProcessLaunchInfo::FileAction *file_action,
159 const char *default_path);
161 /// Stops all threads in the process.
162 /// The \p stop_tid parameter indicates the thread which initiated the stop.
164 StopAllThreads(lldb::tid_t stop_tid);
166 /// Adds the thread to the list of threads for which we have received the initial stopping signal.
167 /// The \p stop_tid paramter indicates the thread which the stop happened for.
169 AddThreadForInitialStopIfNeeded(lldb::tid_t stop_tid);
172 WaitingForInitialStop(lldb::tid_t stop_tid);
174 virtual POSIXThread *
175 CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid);
178 /// Target byte order.
179 lldb::ByteOrder m_byte_order;
182 ProcessMonitor *m_monitor;
184 /// The module we are executing.
185 lldb_private::Module *m_module;
187 /// Message queue notifying this instance of inferior process state changes.
188 lldb_private::Mutex m_message_mutex;
189 std::queue<ProcessMessage> m_message_queue;
191 /// Drive any exit events to completion.
194 /// OS-specific signal set.
195 lldb_private::UnixSignals m_signals;
197 /// Returns true if the process has exited.
200 /// Returns true if the process is stopped.
203 /// Returns true if at least one running is currently running
204 bool IsAThreadRunning();
206 typedef std::map<lldb::addr_t, lldb::addr_t> MMapMap;
207 MMapMap m_addr_to_mmap_size;
209 typedef std::set<lldb::tid_t> ThreadStopSet;
210 /// Every thread begins with a stop signal. This keeps track
211 /// of the threads for which we have received the stop signal.
212 ThreadStopSet m_seen_initial_stop;
215 #endif // liblldb_MacOSXProcess_H_