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 // Stop id interface
251
252 uint32_t GetStopID() const;
253
254 // Callbacks for low-level process state changes
256 public:
257 virtual ~NativeDelegate() = default;
258
259 virtual void InitializeDelegate(NativeProcessProtocol *process) = 0;
260
262 lldb::StateType state) = 0;
263
264 virtual void DidExec(NativeProcessProtocol *process) = 0;
265
266 virtual void
268 std::unique_ptr<NativeProcessProtocol> child_process) = 0;
269 };
270
271 virtual Status GetLoadedModuleFileSpec(const char *module_path,
272 FileSpec &file_spec) = 0;
273
274 virtual Status GetFileLoadAddress(const llvm::StringRef &file_name,
275 lldb::addr_t &load_addr) = 0;
276
277 /// Extension flag constants, returned by Manager::GetSupportedExtensions()
278 /// and passed to SetEnabledExtension()
279 enum class Extension {
280 multiprocess = (1u << 0),
281 fork = (1u << 1),
282 vfork = (1u << 2),
283 pass_signals = (1u << 3),
284 auxv = (1u << 4),
285 libraries_svr4 = (1u << 5),
286 memory_tagging = (1u << 6),
287 savecore = (1u << 7),
288 siginfo_read = (1u << 8),
289 libraries = (1u << 9),
291
293 };
294
295 class Manager {
296 public:
297 Manager(MainLoop &mainloop) : m_mainloop(mainloop) {}
298 Manager(const Manager &) = delete;
299 Manager &operator=(const Manager &) = delete;
300
301 virtual ~Manager();
302
303 /// Launch a process for debugging.
304 ///
305 /// \param[in] launch_info
306 /// Information required to launch the process.
307 ///
308 /// \param[in] native_delegate
309 /// The delegate that will receive messages regarding the
310 /// inferior. Must outlive the NativeProcessProtocol
311 /// instance.
312 ///
313 /// \param[in] mainloop
314 /// The mainloop instance with which the process can register
315 /// callbacks. Must outlive the NativeProcessProtocol
316 /// instance.
317 ///
318 /// \return
319 /// A NativeProcessProtocol shared pointer if the operation succeeded or
320 /// an error object if it failed.
321 virtual llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
323 NativeDelegate &native_delegate) = 0;
324
325 /// Attach to an existing process.
326 ///
327 /// \param[in] pid
328 /// pid of the process locatable
329 ///
330 /// \param[in] native_delegate
331 /// The delegate that will receive messages regarding the
332 /// inferior. Must outlive the NativeProcessProtocol
333 /// instance.
334 ///
335 /// \param[in] mainloop
336 /// The mainloop instance with which the process can register
337 /// callbacks. Must outlive the NativeProcessProtocol
338 /// instance.
339 ///
340 /// \return
341 /// A NativeProcessProtocol shared pointer if the operation succeeded or
342 /// an error object if it failed.
343 virtual llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
344 Attach(lldb::pid_t pid, NativeDelegate &native_delegate) = 0;
345
346 /// Get the bitmask of extensions supported by this process plugin.
347 ///
348 /// \return
349 /// A NativeProcessProtocol::Extension bitmask.
350 virtual Extension GetSupportedExtensions() const { return {}; }
351
352 protected:
354 };
355
356 /// Notify tracers that the target process will resume
358
359 /// Notify tracers that the target process just stopped
361
362 /// Start tracing a process or its threads.
363 ///
364 /// \param[in] json_params
365 /// JSON object with the information of what and how to trace.
366 /// In the case of gdb-remote, this object should conform to the
367 /// jLLDBTraceStart packet.
368 ///
369 /// This object should have a string entry called "type", which is the
370 /// tracing technology name.
371 ///
372 /// \param[in] type
373 /// Tracing technology type, as described in the \a json_params.
374 ///
375 /// \return
376 /// \a llvm::Error::success if the operation was successful, or an
377 /// \a llvm::Error otherwise.
378 virtual llvm::Error TraceStart(llvm::StringRef json_params,
379 llvm::StringRef type) {
380 return llvm::createStringError(llvm::inconvertibleErrorCode(),
381 "Unsupported tracing type '%s'",
382 type.data());
383 }
384
385 /// \copydoc Process::TraceStop(const TraceStopRequest &)
386 virtual llvm::Error TraceStop(const TraceStopRequest &request) {
387 return llvm::createStringError(llvm::inconvertibleErrorCode(),
388 "Unsupported tracing type '%s'",
389 request.type.data());
390 }
391
392 /// \copydoc Process::TraceGetState(llvm::StringRef type)
393 virtual llvm::Expected<llvm::json::Value>
394 TraceGetState(llvm::StringRef type) {
395 return llvm::createStringError(llvm::inconvertibleErrorCode(),
396 "Unsupported tracing type '%s'",
397 type.data());
398 }
399
400 /// \copydoc Process::TraceGetBinaryData(const TraceGetBinaryDataRequest &)
401 virtual llvm::Expected<std::vector<uint8_t>>
403 return llvm::createStringError(
404 llvm::inconvertibleErrorCode(),
405 "Unsupported data kind '%s' for the '%s' tracing technology",
406 request.kind.c_str(), request.type.c_str());
407 }
408
409 /// \copydoc Process::TraceSupported()
410 virtual llvm::Expected<TraceSupportedResponse> TraceSupported() {
411 return llvm::make_error<UnimplementedError>();
412 }
413
414 /// Method called in order to propagate the bitmap of protocol
415 /// extensions supported by the client.
416 ///
417 /// \param[in] flags
418 /// The bitmap of enabled extensions.
419 virtual void SetEnabledExtensions(Extension flags) {
420 m_enabled_extensions = flags;
421 }
422
423 /// Write a core dump (without crashing the program).
424 ///
425 /// \param[in] path_hint
426 /// Suggested core dump path (optional, can be empty).
427 ///
428 /// \return
429 /// Path to the core dump if successfully written, an error
430 /// otherwise.
431 virtual llvm::Expected<std::string> SaveCore(llvm::StringRef path_hint) {
432 return llvm::createStringError(llvm::inconvertibleErrorCode(),
433 "Not implemented");
434 }
435
436 /// Get the list of structured data plugins supported by this process. They
437 /// must match the `type` field used by the corresponding
438 /// StructuredDataPlugins in the client.
439 ///
440 /// \return
441 /// A vector of structured data plugin names.
442 virtual std::vector<std::string> GetStructuredDataPlugins() { return {}; };
443
444protected:
446 llvm::SmallVector<uint8_t, 4> saved_opcodes;
447 llvm::ArrayRef<uint8_t> breakpoint_opcodes;
448 };
449
450 std::unordered_map<lldb::addr_t, SoftwareBreakpoint> m_software_breakpoints;
452
453 std::vector<std::unique_ptr<NativeThreadProtocol>> m_threads;
455 mutable std::recursive_mutex m_threads_mutex;
456
458 mutable std::recursive_mutex m_state_mutex;
459
460 std::optional<WaitStatus> m_exit_status;
461
466 uint32_t m_stop_id = 0;
467
468 // Set of signal numbers that LLDB directly injects back to inferior without
469 // stopping it.
470 llvm::DenseSet<int> m_signals_to_ignore;
471
472 // Extensions enabled per the last SetEnabledExtensions() call.
474
475 // lldb_private::Host calls should be used to launch a process for debugging,
476 // and then the process should be attached to. When attaching to a process
477 // lldb_private::Host calls should be used to locate the process to attach
478 // to, and then this function should be called.
479 NativeProcessProtocol(lldb::pid_t pid, int terminal_fd,
480 NativeDelegate &delegate);
481
482 void SetID(lldb::pid_t pid) { m_pid = pid; }
483
484 // interface for state handling
485 void SetState(lldb::StateType state, bool notify_delegates = true);
486
487 // Derived classes need not implement this. It can be used as a hook to
488 // clear internal caches that should be invalidated when stop ids change.
489 //
490 // Note this function is called with the state mutex obtained by the caller.
491 virtual void DoStopIDBumped(uint32_t newBumpId);
492
493 // interface for software breakpoints
494
495 Status SetSoftwareBreakpoint(lldb::addr_t addr, uint32_t size_hint);
497
498 virtual llvm::Expected<llvm::ArrayRef<uint8_t>>
499 GetSoftwareBreakpointTrapOpcode(size_t size_hint);
500
501 /// Return the offset of the PC relative to the software breakpoint that was hit. If an
502 /// architecture (e.g. arm) reports breakpoint hits before incrementing the PC, this offset
503 /// will be 0. If an architecture (e.g. intel) reports breakpoints hits after incrementing the
504 /// PC, this offset will be the size of the breakpoint opcode.
505 virtual size_t GetSoftwareBreakpointPCOffset();
506
507 // Adjust the thread's PC after hitting a software breakpoint. On
508 // architectures where the PC points after the breakpoint instruction, this
509 // resets it to point to the breakpoint itself.
511
512 /// Notify the delegate that an exec occurred.
513 ///
514 /// Provide a mechanism for a delegate to clear out any exec-
515 /// sensitive data.
516 virtual void NotifyDidExec();
517
519
520private:
522 llvm::Expected<SoftwareBreakpoint>
523 EnableSoftwareBreakpoint(lldb::addr_t addr, uint32_t size_hint);
524};
525} // namespace lldb_private
526
527#endif // LLDB_HOST_COMMON_NATIVEPROCESSPROTOCOL_H
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 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 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.