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