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 "Plugins/Process/POSIX/ProcessMessage.h"
27 public lldb_private::Process
31 //------------------------------------------------------------------
32 // Constructors and destructors
33 //------------------------------------------------------------------
34 ProcessPOSIX(lldb_private::Target& target,
35 lldb_private::Listener &listener,
36 lldb::UnixSignalsSP &unix_signals_sp);
41 //------------------------------------------------------------------
43 //------------------------------------------------------------------
48 CanDebug(lldb_private::Target &target, bool plugin_specified_by_name) override;
51 WillLaunch(lldb_private::Module *module) override;
54 DoAttachToProcessWithID (lldb::pid_t pid, const lldb_private::ProcessAttachInfo &attach_info) override;
57 DoLaunch (lldb_private::Module *exe_module,
58 lldb_private::ProcessLaunchInfo &launch_info) override;
67 DoHalt(bool &caused_stop) override;
70 DoDetach(bool keep_stopped) override = 0;
73 DoSignal(int signal) override;
82 RefreshStateAfterStop() override;
88 DoReadMemory(lldb::addr_t vm_addr,
91 lldb_private::Error &error) override;
94 DoWriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size,
95 lldb_private::Error &error) override;
98 DoAllocateMemory(size_t size, uint32_t permissions,
99 lldb_private::Error &error) override;
102 DoDeallocateMemory(lldb::addr_t ptr) override;
105 GetSoftwareBreakpointTrapOpcode(lldb_private::BreakpointSite* bp_site);
108 EnableBreakpointSite(lldb_private::BreakpointSite *bp_site) override;
111 DisableBreakpointSite(lldb_private::BreakpointSite *bp_site) override;
114 EnableWatchpoint(lldb_private::Watchpoint *wp, bool notify = true) override;
117 DisableWatchpoint(lldb_private::Watchpoint *wp, bool notify = true) override;
120 GetWatchpointSupportInfo(uint32_t &num) override;
123 GetWatchpointSupportInfo(uint32_t &num, bool &after) override;
126 UpdateThreadListIfNeeded();
129 UpdateThreadList(lldb_private::ThreadList &old_thread_list,
130 lldb_private::ThreadList &new_thread_list) override = 0;
132 virtual lldb::ByteOrder
133 GetByteOrder() const;
136 GetImageInfoAddress() override;
139 PutSTDIN(const char *buf, size_t len, lldb_private::Error &error) override;
141 const lldb::DataBufferSP
142 GetAuxvData () override;
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::FileSpec
155 GetFileSpec(const lldb_private::FileAction *file_action,
156 const lldb_private::FileSpec &default_file_spec,
157 const lldb_private::FileSpec &dbg_pts_file_spec);
159 /// Adds the thread to the list of threads for which we have received the initial stopping signal.
160 /// The \p stop_tid parameter indicates the thread which the stop happened for.
162 AddThreadForInitialStopIfNeeded(lldb::tid_t stop_tid);
165 WaitingForInitialStop(lldb::tid_t stop_tid);
167 virtual POSIXThread *
168 CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid);
171 /// Target byte order.
172 lldb::ByteOrder m_byte_order;
175 ProcessMonitor *m_monitor;
177 /// The module we are executing.
178 lldb_private::Module *m_module;
180 /// Message queue notifying this instance of inferior process state changes.
181 lldb_private::Mutex m_message_mutex;
182 std::queue<ProcessMessage> m_message_queue;
184 /// Drive any exit events to completion.
187 /// Returns true if the process has exited.
190 /// Returns true if the process is stopped.
193 /// Returns true if at least one running is currently running
194 bool IsAThreadRunning();
196 typedef std::map<lldb::addr_t, lldb::addr_t> MMapMap;
197 MMapMap m_addr_to_mmap_size;
199 typedef std::set<lldb::tid_t> ThreadStopSet;
200 /// Every thread begins with a stop signal. This keeps track
201 /// of the threads for which we have received the stop signal.
202 ThreadStopSet m_seen_initial_stop;
205 #endif // liblldb_MacOSXProcess_H_