LLDB mainline
NativeProcessProtocol.h
Go to the documentation of this file.
1//===-- NativeProcessProtocol.h ---------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_HOST_COMMON_NATIVEPROCESSPROTOCOL_H
10#define LLDB_HOST_COMMON_NATIVEPROCESSPROTOCOL_H
11
15#include "lldb/Host/Host.h"
16#include "lldb/Host/MainLoop.h"
19#include "lldb/Utility/Status.h"
23#include "lldb/lldb-types.h"
24#include "llvm/ADT/ArrayRef.h"
25#include "llvm/ADT/DenseSet.h"
26#include "llvm/ADT/StringRef.h"
27#include "llvm/Support/Error.h"
28#include "llvm/Support/MemoryBuffer.h"
29#include <mutex>
30#include <optional>
31#include <unordered_map>
32#include <vector>
33
34namespace lldb_private {
36
39
47
48/// Generic loaded-library entry used by the non-SVR4 `qXfer:libraries:read`
49/// form of the GDB remote library-list protocol (PE on Windows).
54
55// NativeProcessProtocol
57public:
58 virtual ~NativeProcessProtocol() = default;
59
60 typedef std::vector<std::unique_ptr<NativeThreadProtocol>> thread_collection;
62 std::recursive_mutex, thread_collection,
63 llvm::pointee_iterator<thread_collection::const_iterator>>
65
66 virtual Status Resume(const ResumeActionList &resume_actions) = 0;
67
68 virtual Status Halt() = 0;
69
70 virtual Status Detach() = 0;
71
72 /// Sends a process a UNIX signal \a signal.
73 ///
74 /// \return
75 /// Returns an error object.
76 virtual Status Signal(int signo) = 0;
77
78 /// Tells a process to interrupt all operations as if by a Ctrl-C.
79 ///
80 /// The default implementation will send a local host's equivalent of
81 /// a SIGSTOP to the process via the NativeProcessProtocol::Signal()
82 /// operation.
83 ///
84 /// \return
85 /// Returns an error object.
86 virtual Status Interrupt();
87
88 virtual Status Kill() = 0;
89
90 // Tells a process not to stop the inferior on given signals and just
91 // reinject them back.
92 virtual Status IgnoreSignals(llvm::ArrayRef<int> signals);
93
94 // Memory and memory region functions
95
96 virtual Status GetMemoryRegionInfo(lldb::addr_t load_addr,
97 MemoryRegionInfo &range_info);
98
99 virtual Status ReadMemory(lldb::addr_t addr, void *buf, size_t size,
100 size_t &bytes_read) = 0;
101
102 Status ReadMemoryWithoutTrap(lldb::addr_t addr, void *buf, size_t size,
103 size_t &bytes_read);
104
105 virtual Status ReadMemoryTags(int32_t type, lldb::addr_t addr, size_t len,
106 std::vector<uint8_t> &tags);
107
108 virtual Status WriteMemoryTags(int32_t type, lldb::addr_t addr, size_t len,
109 const std::vector<uint8_t> &tags);
110
111 /// Reads a null terminated string from memory.
112 ///
113 /// Reads up to \p max_size bytes of memory until it finds a '\0'.
114 /// If a '\0' is not found then it reads max_size-1 bytes as a string and a
115 /// '\0' is added as the last character of the \p buffer.
116 ///
117 /// \param[in] addr
118 /// The address in memory to read from.
119 ///
120 /// \param[in] buffer
121 /// An allocated buffer with at least \p max_size size.
122 ///
123 /// \param[in] max_size
124 /// The maximum number of bytes to read from memory until it reads the
125 /// string.
126 ///
127 /// \param[out] total_bytes_read
128 /// The number of bytes read from memory into \p buffer.
129 ///
130 /// \return
131 /// Returns a StringRef backed up by the \p buffer passed in.
132 llvm::Expected<llvm::StringRef>
133 ReadCStringFromMemory(lldb::addr_t addr, char *buffer, size_t max_size,
134 size_t &total_bytes_read);
135
136 virtual Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size,
137 size_t &bytes_written) = 0;
138
139 virtual llvm::Expected<lldb::addr_t> AllocateMemory(size_t size,
140 uint32_t permissions) {
141 return llvm::make_error<UnimplementedError>();
142 }
143
144 virtual llvm::Error DeallocateMemory(lldb::addr_t addr) {
145 return llvm::make_error<UnimplementedError>();
146 }
147
149
150 virtual llvm::Expected<std::vector<SVR4LibraryInfo>>
152 return llvm::createStringError(llvm::inconvertibleErrorCode(),
153 "Not implemented");
154 }
155
156 /// Return the currently loaded libraries of the target in the
157 /// `qXfer:libraries:read` form (generic name + base address pairs; used on
158 /// Windows, where the inferior is not SVR4 and the module list comes from
159 /// the PE loader).
160 virtual llvm::Expected<std::vector<LoadedLibraryInfo>> GetLoadedLibraries() {
161 return llvm::createStringError(llvm::inconvertibleErrorCode(),
162 "Not implemented");
163 }
164
165 virtual bool HasPendingLibraryEvents() { return false; }
166
167 virtual bool IsAlive() const;
168
169 virtual size_t UpdateThreads() = 0;
170
171 virtual const ArchSpec &GetArchitecture() const = 0;
172
173 // Breakpoint functions
174 virtual Status SetBreakpoint(lldb::addr_t addr, uint32_t size,
175 bool hardware) = 0;
176
177 virtual Status RemoveBreakpoint(lldb::addr_t addr, bool hardware = false);
178
180 return m_software_breakpoints.find(addr) != m_software_breakpoints.end();
181 }
182
183 // Hardware Breakpoint functions
184 virtual const HardwareBreakpointMap &GetHardwareBreakpointMap() const;
185
186 virtual Status SetHardwareBreakpoint(lldb::addr_t addr, size_t size);
187
189
190 // Watchpoint functions
192
193 virtual std::optional<std::pair<uint32_t, uint32_t>>
195
196 virtual Status SetWatchpoint(lldb::addr_t addr, size_t size,
197 uint32_t watch_flags, bool hardware);
198
200
201 // Accessors
202 lldb::pid_t GetID() const { return m_pid; }
203
205
206 bool IsRunning() const {
208 }
209
210 bool IsStepping() const { return m_state == lldb::eStateStepping; }
211
212 bool CanResume() const { return m_state == lldb::eStateStopped; }
213
217
218 uint32_t GetAddressByteSize() const {
220 }
221
222 virtual llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
223 GetAuxvData() const = 0;
224
225 // Exit Status
226 virtual std::optional<WaitStatus> GetExitStatus();
227
228 virtual bool SetExitStatus(WaitStatus status, bool bNotifyStateChange);
229
230 // Access to threads
232
234
236
238
242
246
247 // Access to inferior stdio
248 virtual int GetTerminalFileDescriptor() { return m_terminal_fd; }
249
250 /// Write up to \p len bytes from \p buf to the inferior's stdin.
251 virtual size_t WriteStdin(const void *buf, size_t len, Status &error) {
252 return 0;
253 }
254
255 // Stop id interface
256 uint32_t GetStopID() const;
257
258 // Callbacks for low-level process state changes
260 public:
261 virtual ~NativeDelegate() = default;
262
263 virtual void InitializeDelegate(NativeProcessProtocol *process) = 0;
264
266 lldb::StateType state) = 0;
267
268 virtual void DidExec(NativeProcessProtocol *process) = 0;
269
270 virtual void
272 std::unique_ptr<NativeProcessProtocol> child_process) = 0;
273
274 /// Called by the platform when the inferior writes to stdout/stderr
275 /// through a redirected pseudoconsole that the platform owns.
277 llvm::StringRef data) {}
278 };
279
280 virtual Status GetLoadedModuleFileSpec(const char *module_path,
281 FileSpec &file_spec) = 0;
282
283 virtual Status GetFileLoadAddress(const llvm::StringRef &file_name,
284 lldb::addr_t &load_addr) = 0;
285
286 /// Extension flag constants, returned by Manager::GetSupportedExtensions()
287 /// and passed to SetEnabledExtension()
288 enum class Extension {
289 multiprocess = (1u << 0),
290 fork = (1u << 1),
291 vfork = (1u << 2),
292 pass_signals = (1u << 3),
293 auxv = (1u << 4),
294 libraries_svr4 = (1u << 5),
295 memory_tagging = (1u << 6),
296 savecore = (1u << 7),
297 siginfo_read = (1u << 8),
298 libraries = (1u << 9),
300
302 };
303
304 class Manager {
305 public:
306 Manager(MainLoop &mainloop) : m_mainloop(mainloop) {}
307 Manager(const Manager &) = delete;
308 Manager &operator=(const Manager &) = delete;
309
310 virtual ~Manager();
311
312 /// Launch a process for debugging.
313 ///
314 /// \param[in] launch_info
315 /// Information required to launch the process.
316 ///
317 /// \param[in] native_delegate
318 /// The delegate that will receive messages regarding the
319 /// inferior. Must outlive the NativeProcessProtocol
320 /// instance.
321 ///
322 /// \param[in] mainloop
323 /// The mainloop instance with which the process can register
324 /// callbacks. Must outlive the NativeProcessProtocol
325 /// instance.
326 ///
327 /// \return
328 /// A NativeProcessProtocol shared pointer if the operation succeeded or
329 /// an error object if it failed.
330 virtual llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
332 NativeDelegate &native_delegate) = 0;
333
334 /// Attach to an existing process.
335 ///
336 /// \param[in] pid
337 /// pid of the process locatable
338 ///
339 /// \param[in] native_delegate
340 /// The delegate that will receive messages regarding the
341 /// inferior. Must outlive the NativeProcessProtocol
342 /// instance.
343 ///
344 /// \param[in] mainloop
345 /// The mainloop instance with which the process can register
346 /// callbacks. Must outlive the NativeProcessProtocol
347 /// instance.
348 ///
349 /// \return
350 /// A NativeProcessProtocol shared pointer if the operation succeeded or
351 /// an error object if it failed.
352 virtual llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
353 Attach(lldb::pid_t pid, NativeDelegate &native_delegate) = 0;
354
355 /// Get the bitmask of extensions supported by this process plugin.
356 ///
357 /// \return
358 /// A NativeProcessProtocol::Extension bitmask.
359 virtual Extension GetSupportedExtensions() const { return {}; }
360
361 protected:
363 };
364
365 /// Notify tracers that the target process will resume
367
368 /// Notify tracers that the target process just stopped
370
371 /// Start tracing a process or its threads.
372 ///
373 /// \param[in] json_params
374 /// JSON object with the information of what and how to trace.
375 /// In the case of gdb-remote, this object should conform to the
376 /// jLLDBTraceStart packet.
377 ///
378 /// This object should have a string entry called "type", which is the
379 /// tracing technology name.
380 ///
381 /// \param[in] type
382 /// Tracing technology type, as described in the \a json_params.
383 ///
384 /// \return
385 /// \a llvm::Error::success if the operation was successful, or an
386 /// \a llvm::Error otherwise.
387 virtual llvm::Error TraceStart(llvm::StringRef json_params,
388 llvm::StringRef type) {
389 return llvm::createStringError(llvm::inconvertibleErrorCode(),
390 "Unsupported tracing type '%s'",
391 type.data());
392 }
393
394 /// \copydoc Process::TraceStop(const TraceStopRequest &)
395 virtual llvm::Error TraceStop(const TraceStopRequest &request) {
396 return llvm::createStringError(llvm::inconvertibleErrorCode(),
397 "Unsupported tracing type '%s'",
398 request.type.data());
399 }
400
401 /// \copydoc Process::TraceGetState(llvm::StringRef type)
402 virtual llvm::Expected<llvm::json::Value>
403 TraceGetState(llvm::StringRef type) {
404 return llvm::createStringError(llvm::inconvertibleErrorCode(),
405 "Unsupported tracing type '%s'",
406 type.data());
407 }
408
409 /// \copydoc Process::TraceGetBinaryData(const TraceGetBinaryDataRequest &)
410 virtual llvm::Expected<std::vector<uint8_t>>
412 return llvm::createStringError(
413 llvm::inconvertibleErrorCode(),
414 "Unsupported data kind '%s' for the '%s' tracing technology",
415 request.kind.c_str(), request.type.c_str());
416 }
417
418 /// \copydoc Process::TraceSupported()
419 virtual llvm::Expected<TraceSupportedResponse> TraceSupported() {
420 return llvm::make_error<UnimplementedError>();
421 }
422
423 /// Method called in order to propagate the bitmap of protocol
424 /// extensions supported by the client.
425 ///
426 /// \param[in] flags
427 /// The bitmap of enabled extensions.
428 virtual void SetEnabledExtensions(Extension flags) {
429 m_enabled_extensions = flags;
430 }
431
432 /// Write a core dump (without crashing the program).
433 ///
434 /// \param[in] path_hint
435 /// Suggested core dump path (optional, can be empty).
436 ///
437 /// \return
438 /// Path to the core dump if successfully written, an error
439 /// otherwise.
440 virtual llvm::Expected<std::string> SaveCore(llvm::StringRef path_hint) {
441 return llvm::createStringError(llvm::inconvertibleErrorCode(),
442 "Not implemented");
443 }
444
445 /// Get the list of structured data plugins supported by this process. They
446 /// must match the `type` field used by the corresponding
447 /// StructuredDataPlugins in the client.
448 ///
449 /// \return
450 /// A vector of structured data plugin names.
451 virtual std::vector<std::string> GetStructuredDataPlugins() { return {}; };
452
453protected:
455 llvm::SmallVector<uint8_t, 4> saved_opcodes;
456 llvm::ArrayRef<uint8_t> breakpoint_opcodes;
457 };
458
459 std::unordered_map<lldb::addr_t, SoftwareBreakpoint> m_software_breakpoints;
461
462 std::vector<std::unique_ptr<NativeThreadProtocol>> m_threads;
464 mutable std::recursive_mutex m_threads_mutex;
465
467 mutable std::recursive_mutex m_state_mutex;
468
469 std::optional<WaitStatus> m_exit_status;
470
475 uint32_t m_stop_id = 0;
476
477 // Set of signal numbers that LLDB directly injects back to inferior without
478 // stopping it.
479 llvm::DenseSet<int> m_signals_to_ignore;
480
481 // Extensions enabled per the last SetEnabledExtensions() call.
483
484 // lldb_private::Host calls should be used to launch a process for debugging,
485 // and then the process should be attached to. When attaching to a process
486 // lldb_private::Host calls should be used to locate the process to attach
487 // to, and then this function should be called.
488 NativeProcessProtocol(lldb::pid_t pid, int terminal_fd,
489 NativeDelegate &delegate);
490
491 void SetID(lldb::pid_t pid) { m_pid = pid; }
492
493 // interface for state handling
494 void SetState(lldb::StateType state, bool notify_delegates = true);
495
496 // Derived classes need not implement this. It can be used as a hook to
497 // clear internal caches that should be invalidated when stop ids change.
498 //
499 // Note this function is called with the state mutex obtained by the caller.
500 virtual void DoStopIDBumped(uint32_t newBumpId);
501
502 // interface for software breakpoints
503
504 Status SetSoftwareBreakpoint(lldb::addr_t addr, uint32_t size_hint);
506
507 virtual llvm::Expected<llvm::ArrayRef<uint8_t>>
508 GetSoftwareBreakpointTrapOpcode(size_t size_hint);
509
510 /// Return the offset of the PC relative to the software breakpoint that was hit. If an
511 /// architecture (e.g. arm) reports breakpoint hits before incrementing the PC, this offset
512 /// will be 0. If an architecture (e.g. intel) reports breakpoints hits after incrementing the
513 /// PC, this offset will be the size of the breakpoint opcode.
514 virtual size_t GetSoftwareBreakpointPCOffset();
515
516 // Adjust the thread's PC after hitting a software breakpoint. On
517 // architectures where the PC points after the breakpoint instruction, this
518 // resets it to point to the breakpoint itself.
520
521 /// Notify the delegate that an exec occurred.
522 ///
523 /// Provide a mechanism for a delegate to clear out any exec-
524 /// sensitive data.
525 virtual void NotifyDidExec();
526
528
529private:
531 llvm::Expected<SoftwareBreakpoint>
532 EnableSoftwareBreakpoint(lldb::addr_t addr, uint32_t size_hint);
533};
534} // namespace lldb_private
535
536#endif // LLDB_HOST_COMMON_NATIVEPROCESSPROTOCOL_H
static llvm::raw_ostream & error(Stream &strm)
An architecture specification class.
Definition ArchSpec.h:32
uint32_t GetAddressByteSize() const
Returns the size in bytes of an address of the current architecture.
Definition ArchSpec.cpp:690
lldb::ByteOrder GetByteOrder() const
Returns the byte order for the architecture specification.
Definition ArchSpec.cpp:739
A file utility class.
Definition FileSpec.h:57
Manager & operator=(const Manager &)=delete
virtual llvm::Expected< std::unique_ptr< NativeProcessProtocol > > Attach(lldb::pid_t pid, NativeDelegate &native_delegate)=0
Attach to an existing process.
virtual llvm::Expected< std::unique_ptr< NativeProcessProtocol > > Launch(ProcessLaunchInfo &launch_info, NativeDelegate &native_delegate)=0
Launch a process for debugging.
virtual Extension GetSupportedExtensions() const
Get the bitmask of extensions supported by this process plugin.
virtual void ProcessStateChanged(NativeProcessProtocol *process, lldb::StateType state)=0
virtual void DidExec(NativeProcessProtocol *process)=0
virtual void NewSubprocess(NativeProcessProtocol *parent_process, std::unique_ptr< NativeProcessProtocol > child_process)=0
virtual void NewProcessOutput(NativeProcessProtocol *process, llvm::StringRef data)
Called by the platform when the inferior writes to stdout/stderr through a redirected pseudoconsole t...
virtual void InitializeDelegate(NativeProcessProtocol *process)=0
virtual Status SetWatchpoint(lldb::addr_t addr, size_t size, uint32_t watch_flags, bool hardware)
virtual lldb::addr_t GetSharedLibraryInfoAddress()=0
virtual Status ReadMemoryTags(int32_t type, lldb::addr_t addr, size_t len, std::vector< uint8_t > &tags)
llvm::Expected< SoftwareBreakpoint > EnableSoftwareBreakpoint(lldb::addr_t addr, uint32_t size_hint)
virtual llvm::Expected< TraceSupportedResponse > TraceSupported()
Get the processor tracing type supported for this process.
virtual Status GetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info)
std::vector< std::unique_ptr< NativeThreadProtocol > > thread_collection
virtual std::vector< std::string > GetStructuredDataPlugins()
Get the list of structured data plugins supported by this process.
virtual void NotifyTracersProcessWillResume()
Notify tracers that the target process will resume.
virtual void NotifyTracersProcessDidStop()
Notify tracers that the target process just stopped.
virtual std::optional< WaitStatus > GetExitStatus()
virtual void SetEnabledExtensions(Extension flags)
Method called in order to propagate the bitmap of protocol extensions supported by the client.
virtual Status RemoveWatchpoint(lldb::addr_t addr)
virtual Status Interrupt()
Tells a process to interrupt all operations as if by a Ctrl-C.
virtual Status WriteMemoryTags(int32_t type, lldb::addr_t addr, size_t len, const std::vector< uint8_t > &tags)
virtual void DoStopIDBumped(uint32_t newBumpId)
NativeProcessProtocol(lldb::pid_t pid, int terminal_fd, NativeDelegate &delegate)
virtual llvm::Expected< std::vector< SVR4LibraryInfo > > GetLoadedSVR4Libraries()
virtual size_t GetSoftwareBreakpointPCOffset()
Return the offset of the PC relative to the software breakpoint that was hit.
virtual llvm::Expected< std::vector< uint8_t > > TraceGetBinaryData(const TraceGetBinaryDataRequest &request)
Get binary data given a trace technology and a data identifier.
virtual const HardwareBreakpointMap & GetHardwareBreakpointMap() const
virtual llvm::Error TraceStop(const TraceStopRequest &request)
Stop tracing a live process or its threads.
virtual Status GetLoadedModuleFileSpec(const char *module_path, FileSpec &file_spec)=0
Status SetSoftwareBreakpoint(lldb::addr_t addr, uint32_t size_hint)
virtual Status IgnoreSignals(llvm::ArrayRef< int > signals)
virtual llvm::Expected< std::vector< LoadedLibraryInfo > > GetLoadedLibraries()
Return the currently loaded libraries of the target in the qXfer:libraries:read form (generic name + ...
NativeThreadProtocol * GetThreadByIDUnlocked(lldb::tid_t tid)
virtual llvm::Expected< llvm::json::Value > TraceGetState(llvm::StringRef type)
Get the current tracing state of the process and its threads.
virtual Status SetBreakpoint(lldb::addr_t addr, uint32_t size, bool hardware)=0
virtual const ArchSpec & GetArchitecture() const =0
LockingAdaptedIterable< std::recursive_mutex, thread_collection, llvm::pointee_iterator< thread_collection::const_iterator > > ThreadIterable
virtual const NativeWatchpointList::WatchpointMap & GetWatchpointMap() const
virtual llvm::Error DeallocateMemory(lldb::addr_t addr)
void SetState(lldb::StateType state, bool notify_delegates=true)
llvm::Expected< llvm::StringRef > ReadCStringFromMemory(lldb::addr_t addr, char *buffer, size_t max_size, size_t &total_bytes_read)
Reads a null terminated string from memory.
NativeThreadProtocol * GetThreadByID(lldb::tid_t tid)
virtual Status GetFileLoadAddress(const llvm::StringRef &file_name, lldb::addr_t &load_addr)=0
void SynchronouslyNotifyProcessStateChanged(lldb::StateType state)
virtual llvm::Expected< std::string > SaveCore(llvm::StringRef path_hint)
Write a core dump (without crashing the program).
virtual Status ReadMemory(lldb::addr_t addr, void *buf, size_t size, size_t &bytes_read)=0
std::vector< std::unique_ptr< NativeThreadProtocol > > m_threads
std::optional< WaitStatus > m_exit_status
virtual bool SetExitStatus(WaitStatus status, bool bNotifyStateChange)
virtual Status RemoveBreakpoint(lldb::addr_t addr, bool hardware=false)
virtual Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size, size_t &bytes_written)=0
Status ReadMemoryWithoutTrap(lldb::addr_t addr, void *buf, size_t size, size_t &bytes_read)
virtual size_t WriteStdin(const void *buf, size_t len, Status &error)
Write up to len bytes from buf to the inferior's stdin.
virtual Status Resume(const ResumeActionList &resume_actions)=0
virtual ~NativeProcessProtocol()=default
virtual Status Signal(int signo)=0
Sends a process a UNIX signal signal.
Status RemoveSoftwareBreakpoint(lldb::addr_t addr)
void FixupBreakpointPCAsNeeded(NativeThreadProtocol &thread)
NativeThreadProtocol * GetThreadAtIndex(uint32_t idx)
virtual void NotifyDidExec()
Notify the delegate that an exec occurred.
virtual llvm::Expected< lldb::addr_t > AllocateMemory(size_t size, uint32_t permissions)
Extension
Extension flag constants, returned by Manager::GetSupportedExtensions() and passed to SetEnabledExten...
virtual Status SetHardwareBreakpoint(lldb::addr_t addr, size_t size)
virtual llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > GetAuxvData() const =0
virtual std::optional< std::pair< uint32_t, uint32_t > > GetHardwareDebugSupportInfo() const
virtual llvm::Expected< llvm::ArrayRef< uint8_t > > GetSoftwareBreakpointTrapOpcode(size_t size_hint)
virtual llvm::Error TraceStart(llvm::StringRef json_params, llvm::StringRef type)
Start tracing a process or its threads.
virtual Status RemoveHardwareBreakpoint(lldb::addr_t addr)
std::unordered_map< lldb::addr_t, SoftwareBreakpoint > m_software_breakpoints
std::map< lldb::addr_t, NativeWatchpoint > WatchpointMap
An error handling class.
Definition Status.h:118
#define LLDB_INVALID_THREAD_ID
A class that represents a running process on the host machine.
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE()
MainLoopPosix MainLoop
Definition MainLoop.h:20
std::map< lldb::addr_t, HardwareBreakpoint > HardwareBreakpointMap
StateType
Process and Thread States.
@ eStateStopped
Process or thread is stopped and can be examined.
@ eStateRunning
Process or thread is running and can't be examined.
@ eStateStepping
Process or thread is in the process of stepping and can not be examined.
uint64_t pid_t
Definition lldb-types.h:83
ByteOrder
Byte ordering definitions.
uint64_t addr_t
Definition lldb-types.h:80
uint64_t tid_t
Definition lldb-types.h:84
Generic loaded-library entry used by the non-SVR4 qXfer:libraries:read form of the GDB remote library...
jLLDBTraceGetBinaryData gdb-remote packet
std::string kind
Identifier for the data.
std::string type
Tracing technology name, e.g. intel-pt, arm-coresight.
jLLDBTraceStop gdb-remote packet
std::string type
Tracing technology name, e.g. intel-pt, arm-coresight.