[87134] | 1 | /** @file
|
---|
| 2 | * DBGF - Debugger Facility, Guest execution flow tracing.
|
---|
| 3 | */
|
---|
| 4 |
|
---|
| 5 | /*
|
---|
[98103] | 6 | * Copyright (C) 2020-2023 Oracle and/or its affiliates.
|
---|
[87134] | 7 | *
|
---|
[96407] | 8 | * This file is part of VirtualBox base platform packages, as
|
---|
| 9 | * available from https://www.virtualbox.org.
|
---|
[87134] | 10 | *
|
---|
[96407] | 11 | * This program is free software; you can redistribute it and/or
|
---|
| 12 | * modify it under the terms of the GNU General Public License
|
---|
| 13 | * as published by the Free Software Foundation, in version 3 of the
|
---|
| 14 | * License.
|
---|
| 15 | *
|
---|
| 16 | * This program is distributed in the hope that it will be useful, but
|
---|
| 17 | * WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
| 19 | * General Public License for more details.
|
---|
| 20 | *
|
---|
| 21 | * You should have received a copy of the GNU General Public License
|
---|
| 22 | * along with this program; if not, see <https://www.gnu.org/licenses>.
|
---|
| 23 | *
|
---|
[87134] | 24 | * The contents of this file may alternatively be used under the terms
|
---|
| 25 | * of the Common Development and Distribution License Version 1.0
|
---|
[96407] | 26 | * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
|
---|
| 27 | * in the VirtualBox distribution, in which case the provisions of the
|
---|
[87134] | 28 | * CDDL are applicable instead of those of the GPL.
|
---|
| 29 | *
|
---|
| 30 | * You may elect to license modified versions of this file under the
|
---|
| 31 | * terms and conditions of either the GPL or the CDDL or both.
|
---|
[96407] | 32 | *
|
---|
| 33 | * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
|
---|
[87134] | 34 | */
|
---|
| 35 |
|
---|
[87138] | 36 | #ifndef VBOX_INCLUDED_vmm_dbgfflowtrace_h
|
---|
| 37 | #define VBOX_INCLUDED_vmm_dbgfflowtrace_h
|
---|
| 38 | #ifndef RT_WITHOUT_PRAGMA_ONCE
|
---|
| 39 | # pragma once
|
---|
| 40 | #endif
|
---|
[87134] | 41 |
|
---|
| 42 | #include <VBox/types.h>
|
---|
| 43 | #include <VBox/vmm/dbgf.h>
|
---|
| 44 |
|
---|
| 45 | RT_C_DECLS_BEGIN
|
---|
| 46 | /** @defgroup grp_dbgf_flowtrace Guest Execution Flow Tracing
|
---|
| 47 | * @ingroup grp_dbgf
|
---|
| 48 | *
|
---|
| 49 | * @{
|
---|
| 50 | */
|
---|
| 51 |
|
---|
| 52 | /** A DBGF flow trace module handle. */
|
---|
| 53 | typedef struct DBGFFLOWTRACEMODINT *DBGFFLOWTRACEMOD;
|
---|
| 54 | /** Pointer to a DBGF flow trace module handle. */
|
---|
| 55 | typedef DBGFFLOWTRACEMOD *PDBGFFLOWTRACEMOD;
|
---|
| 56 | /** A DBGF flow trace probe handle. */
|
---|
| 57 | typedef struct DBGFFLOWTRACEPROBEINT *DBGFFLOWTRACEPROBE;
|
---|
| 58 | /** Pointer to a DBGF flow trace state probe handle. */
|
---|
| 59 | typedef DBGFFLOWTRACEPROBE *PDBGFFLOWTRACEPROBE;
|
---|
| 60 | /** A DBGF flow trace report handle. */
|
---|
| 61 | typedef struct DBGFFLOWTRACEREPORTINT *DBGFFLOWTRACEREPORT;
|
---|
| 62 | /** Pointer to a DBGF flow trace report handle. */
|
---|
| 63 | typedef DBGFFLOWTRACEREPORT *PDBGFFLOWTRACEREPORT;
|
---|
| 64 | /** A DBGF flow trace record handle. */
|
---|
| 65 | typedef struct DBGFFLOWTRACERECORDINT *DBGFFLOWTRACERECORD;
|
---|
| 66 | /** Pointer to a DBGF flow trace record handle. */
|
---|
| 67 | typedef DBGFFLOWTRACERECORD *PDBGFFLOWTRACERECORD;
|
---|
| 68 |
|
---|
| 69 |
|
---|
| 70 | /** Pointer to a flow trace probe entry. */
|
---|
| 71 | typedef struct DBGFFLOWTRACEPROBEENTRY *PDBGFFLOWTRACEPROBEENTRY;
|
---|
| 72 | /** Pointer to a const flow trace probe entry. */
|
---|
| 73 | typedef const struct DBGFFLOWTRACEPROBEENTRY *PCDBGFFLOWTRACEPROBEENTRY;
|
---|
| 74 |
|
---|
| 75 | /** @name Flags controlling the type of the addition of a single probe.
|
---|
| 76 | * @{ */
|
---|
| 77 | /** Default options. */
|
---|
| 78 | #define DBGF_FLOW_TRACE_PROBE_ADD_F_DEFAULT DBGF_FLOW_TRACE_PROBE_ADD_F_BEFORE_EXEC
|
---|
| 79 | /** Collects the data specified by the data probe before the instruction is executed. */
|
---|
| 80 | #define DBGF_FLOW_TRACE_PROBE_ADD_F_BEFORE_EXEC RT_BIT_32(0)
|
---|
| 81 | /** Collects the data specified by the data probe after the instruction was executed. */
|
---|
| 82 | #define DBGF_FLOW_TRACE_PROBE_ADD_F_AFTER_EXEC RT_BIT_32(1)
|
---|
| 83 | /** Mask of all valid flags. */
|
---|
| 84 | #define DBGF_FLOW_TRACE_PROBE_ADD_F_VALID_MASK ( DBGF_FLOW_TRACE_PROBE_ADD_F_BEFORE_EXEC \
|
---|
| 85 | | DBGF_FLOW_TRACE_PROBE_ADD_F_AFTER_EXEC)
|
---|
| 86 | /** @} */
|
---|
| 87 |
|
---|
| 88 |
|
---|
| 89 | /**
|
---|
| 90 | * Probe entry type.
|
---|
| 91 | */
|
---|
| 92 | typedef enum DBGFFLOWTRACEPROBEENTRYTYPE
|
---|
| 93 | {
|
---|
| 94 | /** Invalid type. */
|
---|
| 95 | DBGFFLOWTRACEPROBEENTRYTYPE_INVALID = 0,
|
---|
| 96 | /** Register. */
|
---|
| 97 | DBGFFLOWTRACEPROBEENTRYTYPE_REG,
|
---|
| 98 | /** Constant memory buffer pointer. */
|
---|
| 99 | DBGFFLOWTRACEPROBEENTRYTYPE_CONST_MEM,
|
---|
| 100 | /** Indirect memory buffer pointer, obtained from the base and index register
|
---|
| 101 | * and a constant scale. */
|
---|
| 102 | DBGFFLOWTRACEPROBEENTRYTYPE_INDIRECT_MEM,
|
---|
| 103 | /** Callback. */
|
---|
| 104 | DBGFFLOWTRACEPROBEENTRYTYPE_CALLBACK,
|
---|
[87781] | 105 | /** Halt in the debugger when the entry is collected. */
|
---|
| 106 | DBGFFLOWTRACEPROBEENTRYTYPE_DEBUGGER,
|
---|
[87134] | 107 | /** 32bit hack. */
|
---|
| 108 | DBGFFLOWTRACEPROBEENTRYTYPE_32BIT_HACK = 0x7fffffff
|
---|
| 109 | } DBGFFLOWTRACEPROBEENTRYTYPE;
|
---|
| 110 |
|
---|
| 111 |
|
---|
| 112 | /**
|
---|
| 113 | * Register descriptor for a probe entry.
|
---|
| 114 | */
|
---|
| 115 | typedef struct DBGFFLOWTRACEPROBEENTRYREG
|
---|
| 116 | {
|
---|
| 117 | /** The register name - see DBGFR3RegNm*. */
|
---|
| 118 | const char *pszName;
|
---|
| 119 | /** The size of the value in bytes. */
|
---|
| 120 | DBGFREGVALTYPE enmType;
|
---|
| 121 | } DBGFFLOWTRACEPROBEENTRYREG;
|
---|
| 122 | /** Pointer to data probe register entry. */
|
---|
| 123 | typedef DBGFFLOWTRACEPROBEENTRYREG *PDBGFFLOWTRACEPROBEENTRYREG;
|
---|
| 124 | /** Pointer to a const probe register entry. */
|
---|
| 125 | typedef const DBGFFLOWTRACEPROBEENTRYREG *PCDBGFFLOWTRACEPROBEENTRYREG;
|
---|
| 126 |
|
---|
| 127 |
|
---|
| 128 | /**
|
---|
| 129 | * Flow trace probe callback.
|
---|
| 130 | *
|
---|
| 131 | * @returns VBox status code, any error aborts continuing fetching the data for the
|
---|
| 132 | * probe containing this callback.
|
---|
| 133 | * @param pUVM The usermode VM handle.
|
---|
| 134 | * @param idCpu The ID of the vCPU the probe as fired.
|
---|
| 135 | * @param hFlowTraceMod The handle to the flow trace module the probe was fired for.
|
---|
| 136 | * @param pAddrProbe The guest address the probe was fired at.
|
---|
| 137 | * @param hFlowTraceProbe The flow trace probe handle.this callback is in.
|
---|
| 138 | * @param pProbeEntry The probe entry this callback is part of.
|
---|
| 139 | * @param pvUser The opaque user data for the callback.
|
---|
| 140 | */
|
---|
| 141 | typedef DECLCALLBACKTYPE(int, FNDBGFFLOWTRACEPROBECALLBACK, (PUVM pUVM, VMCPUID idCpu, DBGFFLOWTRACEMOD hFlowTraceMod,
|
---|
| 142 | PCDBGFADDRESS pAddrProbe, DBGFFLOWTRACEPROBE hFlowTraceProbe,
|
---|
| 143 | PCDBGFFLOWTRACEPROBEENTRY pProbeEntry,
|
---|
| 144 | void *pvUser));
|
---|
| 145 | /** Pointer to a flow trace probe callback. */
|
---|
| 146 | typedef FNDBGFFLOWTRACEPROBECALLBACK *PFNDBGFFLOWTRACEPROBECALLBACK;
|
---|
| 147 |
|
---|
| 148 |
|
---|
| 149 | /**
|
---|
| 150 | * Trace flow probe entry.
|
---|
| 151 | */
|
---|
| 152 | typedef struct DBGFFLOWTRACEPROBEENTRY
|
---|
| 153 | {
|
---|
| 154 | /** Entry type. */
|
---|
| 155 | DBGFFLOWTRACEPROBEENTRYTYPE enmType;
|
---|
| 156 | /** Description for this entry, optional. */
|
---|
| 157 | const char *pszDesc;
|
---|
| 158 | /** The data based on the entry type. */
|
---|
| 159 | union
|
---|
| 160 | {
|
---|
| 161 | /** Register. */
|
---|
| 162 | DBGFFLOWTRACEPROBEENTRYREG Reg;
|
---|
| 163 | /** Constant memory pointer. */
|
---|
| 164 | struct
|
---|
| 165 | {
|
---|
| 166 | /** The address of the memory buffer. */
|
---|
| 167 | DBGFADDRESS AddrMem;
|
---|
| 168 | /** Number of bytes to log. */
|
---|
| 169 | size_t cbMem;
|
---|
| 170 | } ConstMem;
|
---|
| 171 | /** Indirect memory */
|
---|
| 172 | struct
|
---|
| 173 | {
|
---|
| 174 | /** The base register. */
|
---|
| 175 | DBGFFLOWTRACEPROBEENTRYREG RegBase;
|
---|
| 176 | /** The index register. */
|
---|
| 177 | DBGFFLOWTRACEPROBEENTRYREG RegIndex;
|
---|
| 178 | /** The scale to apply to the index. */
|
---|
| 179 | uint8_t uScale;
|
---|
| 180 | /** A constant offset which is applied at the end. */
|
---|
| 181 | RTGCINTPTR iOffset;
|
---|
| 182 | /** Number of bytes to log. */
|
---|
| 183 | size_t cbMem;
|
---|
| 184 | } IndirectMem;
|
---|
| 185 | /** Callback. */
|
---|
| 186 | struct
|
---|
| 187 | {
|
---|
| 188 | /** The callback to call. */
|
---|
| 189 | PFNDBGFFLOWTRACEPROBECALLBACK pfnCallback;
|
---|
| 190 | /** The opaque user data to provide. */
|
---|
| 191 | void *pvUser;
|
---|
| 192 | } Callback;
|
---|
| 193 | } Type;
|
---|
| 194 | } DBGFFLOWTRACEPROBEENTRY;
|
---|
| 195 |
|
---|
| 196 |
|
---|
| 197 | /**
|
---|
| 198 | * Flow trace probe value.
|
---|
| 199 | */
|
---|
| 200 | typedef struct DBGFFLOWTRACEPROBEVAL
|
---|
| 201 | {
|
---|
| 202 | /** Pointer to the flow trace probe entry this value is for. */
|
---|
| 203 | PCDBGFFLOWTRACEPROBEENTRY pProbeEntry;
|
---|
| 204 | /** Data based on the type in the entry. */
|
---|
| 205 | union
|
---|
| 206 | {
|
---|
| 207 | /** Register value. */
|
---|
| 208 | DBGFREGENTRYNM Reg;
|
---|
| 209 | /** Memory value (constant pointer or indirect). */
|
---|
| 210 | struct
|
---|
| 211 | {
|
---|
| 212 | /** The guest address logged. */
|
---|
| 213 | DBGFADDRESS Addr;
|
---|
| 214 | /** Pointer to the data logged. */
|
---|
| 215 | const void *pvBuf;
|
---|
| 216 | /** Number of bytes logged. */
|
---|
| 217 | size_t cbBuf;
|
---|
| 218 | } Mem;
|
---|
| 219 | } Type;
|
---|
| 220 | } DBGFFLOWTRACEPROBEVAL;
|
---|
| 221 | /** Pointer to a flow trace probe value. */
|
---|
| 222 | typedef DBGFFLOWTRACEPROBEVAL *PDBGFFLOWTRACEPROBEVAL;
|
---|
| 223 | /** Pointer to a const flow trace probe value. */
|
---|
| 224 | typedef const DBGFFLOWTRACEPROBEVAL *PCDBGFFLOWTRACEPROBEVAL;
|
---|
| 225 |
|
---|
| 226 | /**
|
---|
| 227 | * Flow trace report filter operation.
|
---|
| 228 | */
|
---|
| 229 | typedef enum DBGFFLOWTRACEREPORTFILTEROP
|
---|
| 230 | {
|
---|
| 231 | /** Invalid filter operation. */
|
---|
| 232 | DBGFFLOWTRACEREPORTFILTEROP_INVALID = 0,
|
---|
| 233 | /** All filters must match with the record. */
|
---|
| 234 | DBGFFLOWTRACEREPORTFILTEROP_AND,
|
---|
| 235 | /** Only one filter must match with the record. */
|
---|
| 236 | DBGFFLOWTRACEREPORTFILTEROP_OR,
|
---|
| 237 | /** 32bit hack. */
|
---|
| 238 | DBGFFLOWTRACEREPORTFILTEROP_32BIT_HACK = 0x7fffffff
|
---|
| 239 | } DBGFFLOWTRACEREPORTFILTEROP;
|
---|
| 240 |
|
---|
| 241 |
|
---|
| 242 | /**
|
---|
| 243 | * Flow trace report filter type.
|
---|
| 244 | */
|
---|
| 245 | typedef enum DBGFFLOWTRACEREPORTFILTERTYPE
|
---|
| 246 | {
|
---|
| 247 | /** Invalid filter type. */
|
---|
| 248 | DBGFFLOWTRACEREPORTFILTERTYPE_INVALID = 0,
|
---|
| 249 | /** Filter by sequence number. */
|
---|
| 250 | DBGFFLOWTRACEREPORTFILTERTYPE_SEQ_NUM,
|
---|
| 251 | /** Filter by timestamp. */
|
---|
| 252 | DBGFFLOWTRACEREPORTFILTERTYPE_TIMESTAMP,
|
---|
| 253 | /** Filter by probe address. */
|
---|
| 254 | DBGFFLOWTRACEREPORTFILTERTYPE_ADDR,
|
---|
| 255 | /** Filter by CPU ID. */
|
---|
| 256 | DBGFFLOWTRACEREPORTFILTERTYPE_VMCPU_ID,
|
---|
| 257 | /** Filter by specific probe data. */
|
---|
| 258 | DBGFFLOWTRACEREPORTFILTERTYPE_PROBE_DATA,
|
---|
| 259 | /** 32bit hack. */
|
---|
| 260 | DBGFFLOWTRACEREPORTFILTERTYPE_32BIT_HACK = 0x7fffffff
|
---|
| 261 | } DBGFFLOWTRACEREPORTFILTERTYPE;
|
---|
| 262 |
|
---|
| 263 |
|
---|
| 264 | /**
|
---|
| 265 | * Flow trace report filter.
|
---|
| 266 | */
|
---|
| 267 | typedef struct DBGFFLOWTRACEREPORTFILTER
|
---|
| 268 | {
|
---|
| 269 | /** Filter type. */
|
---|
| 270 | DBGFFLOWTRACEREPORTFILTERTYPE enmType;
|
---|
| 271 | /** Filter data, type dependent. */
|
---|
| 272 | struct
|
---|
| 273 | {
|
---|
| 274 | /** Sequence number filtering. */
|
---|
| 275 | struct
|
---|
| 276 | {
|
---|
| 277 | /** Sequence number filtering, start value. */
|
---|
| 278 | uint64_t u64SeqNoFirst;
|
---|
| 279 | /** Sequence number filtering, last value. */
|
---|
| 280 | uint64_t u64SeqNoLast;
|
---|
| 281 | } SeqNo;
|
---|
| 282 | /** Timestamp filtering. */
|
---|
| 283 | struct
|
---|
| 284 | {
|
---|
| 285 | /** Start value. */
|
---|
| 286 | uint64_t u64TsFirst;
|
---|
| 287 | /** Last value. */
|
---|
| 288 | uint64_t u64TsLast;
|
---|
| 289 | } Timestamp;
|
---|
| 290 | /** Probe address filtering. */
|
---|
| 291 | struct
|
---|
| 292 | {
|
---|
| 293 | /** Start address. */
|
---|
| 294 | DBGFADDRESS AddrStart;
|
---|
| 295 | /** Last address. */
|
---|
| 296 | DBGFADDRESS AddrLast;
|
---|
| 297 | } Addr;
|
---|
| 298 | /** vCPU id filtering. */
|
---|
| 299 | struct
|
---|
| 300 | {
|
---|
| 301 | /** Start CPU id. */
|
---|
| 302 | VMCPUID idCpuStart;
|
---|
| 303 | /** Last CPU id. */
|
---|
| 304 | VMCPUID idCpuLast;
|
---|
| 305 | } VCpuId;
|
---|
| 306 | /** Probe data filtering. */
|
---|
| 307 | struct
|
---|
| 308 | {
|
---|
| 309 | /** Pointer to the probe value array. */
|
---|
| 310 | PCDBGFFLOWTRACEPROBEVAL paVal;
|
---|
| 311 | /** Number of entries in the array for filtering. */
|
---|
| 312 | uint32_t cVals;
|
---|
| 313 | /** Flag whether to look into the common values or the probe specific ones. */
|
---|
| 314 | bool fValCmn;
|
---|
| 315 | } ProbeData;
|
---|
| 316 | } Type;
|
---|
| 317 | } DBGFFLOWTRACEREPORTFILTER;
|
---|
| 318 | /** Pointer to a flow trace report filter. */
|
---|
| 319 | typedef DBGFFLOWTRACEREPORTFILTER *PDBGFFLOWTRACEREPORTFILTER;
|
---|
| 320 |
|
---|
| 321 |
|
---|
| 322 | /** @name Flags controlling filtering records.
|
---|
| 323 | * @{ */
|
---|
| 324 | /** Add records which don't match the filter. */
|
---|
| 325 | #define DBGF_FLOW_TRACE_REPORT_FILTER_F_REVERSE RT_BIT_32(0)
|
---|
| 326 | /** Mask of all valid flags. */
|
---|
| 327 | #define DBGF_FLOW_TRACE_REPORT_FILTER_F_VALID (DBGF_FLOW_TRACE_REPORT_FILTER_F_REVERSE)
|
---|
| 328 | /** @} */
|
---|
| 329 |
|
---|
| 330 |
|
---|
| 331 | /**
|
---|
| 332 | * Flow trace report enumeration callback.
|
---|
| 333 | *
|
---|
| 334 | * @returns VBox status code, any non VINF_SUCCESS code aborts the enumeration and is returned
|
---|
| 335 | * by DBGFR3FlowTraceReportEnumRecords().
|
---|
| 336 | * @param hFlowTraceReport The flow trace report handle being enumerated.
|
---|
| 337 | * @param hFlowTraceRecord The flow trace record handle.
|
---|
| 338 | * @param pvUser Opaque user data given in DBGFR3FlowTraceReportEnumRecords().
|
---|
| 339 | */
|
---|
| 340 | typedef DECLCALLBACKTYPE(int, FNDBGFFLOWTRACEREPORTENUMCLBK,(DBGFFLOWTRACEREPORT hFlowTraceReport,
|
---|
| 341 | DBGFFLOWTRACERECORD hFlowTraceRecord,
|
---|
| 342 | void *pvUser));
|
---|
| 343 | /** Pointer to a record enumeration callback. */
|
---|
| 344 | typedef FNDBGFFLOWTRACEREPORTENUMCLBK *PFNDBGFFLOWTRACEREPORTENUMCLBK;
|
---|
| 345 |
|
---|
| 346 |
|
---|
| 347 | VMMR3DECL(int) DBGFR3FlowTraceModCreate(PUVM pUVM, VMCPUID idCpu,
|
---|
| 348 | DBGFFLOWTRACEPROBE hFlowTraceProbeCommon,
|
---|
| 349 | PDBGFFLOWTRACEMOD phFlowTraceMod);
|
---|
| 350 | VMMR3DECL(int) DBGFR3FlowTraceModCreateFromFlowGraph(PUVM pUVM, VMCPUID idCpu, DBGFFLOW hFlow,
|
---|
| 351 | DBGFFLOWTRACEPROBE hFlowTraceProbeCommon,
|
---|
| 352 | DBGFFLOWTRACEPROBE hFlowTraceProbeEntry,
|
---|
| 353 | DBGFFLOWTRACEPROBE hFlowTraceProbeRegular,
|
---|
| 354 | DBGFFLOWTRACEPROBE hFlowTraceProbeExit,
|
---|
| 355 | PDBGFFLOWTRACEMOD phFlowTraceMod);
|
---|
| 356 | VMMR3DECL(uint32_t) DBGFR3FlowTraceModRetain(DBGFFLOWTRACEMOD hFlowTraceMod);
|
---|
| 357 | VMMR3DECL(uint32_t) DBGFR3FlowTraceModRelease(DBGFFLOWTRACEMOD hFlowTraceMod);
|
---|
| 358 | VMMR3DECL(int) DBGFR3FlowTraceModEnable(DBGFFLOWTRACEMOD hFlowTraceMod, uint32_t cHits, uint32_t cRecordsMax);
|
---|
| 359 | VMMR3DECL(int) DBGFR3FlowTraceModDisable(DBGFFLOWTRACEMOD hFlowTraceMod);
|
---|
| 360 | VMMR3DECL(int) DBGFR3FlowTraceModQueryReport(DBGFFLOWTRACEMOD hFlowTraceMod,
|
---|
| 361 | PDBGFFLOWTRACEREPORT phFlowTraceReport);
|
---|
| 362 | VMMR3DECL(int) DBGFR3FlowTraceModClear(DBGFFLOWTRACEMOD hFlowTraceMod);
|
---|
| 363 | VMMR3DECL(int) DBGFR3FlowTraceModAddProbe(DBGFFLOWTRACEMOD hFlowTraceMod, PCDBGFADDRESS pAddrProbe,
|
---|
| 364 | DBGFFLOWTRACEPROBE hFlowTraceProbe, uint32_t fFlags);
|
---|
| 365 |
|
---|
| 366 | VMMR3DECL(int) DBGFR3FlowTraceProbeCreate(PUVM pUVM, const char *pszDescr, PDBGFFLOWTRACEPROBE phFlowTraceProbe);
|
---|
| 367 | VMMR3DECL(uint32_t) DBGFR3FlowTraceProbeRetain(DBGFFLOWTRACEPROBE hFlowTraceProbe);
|
---|
| 368 | VMMR3DECL(uint32_t) DBGFR3FlowTraceProbeRelease(DBGFFLOWTRACEPROBE hFlowTraceProbe);
|
---|
| 369 | VMMR3DECL(int) DBGFR3FlowTraceProbeEntriesAdd(DBGFFLOWTRACEPROBE hFlowTraceProbe,
|
---|
| 370 | PCDBGFFLOWTRACEPROBEENTRY paEntries, uint32_t cEntries);
|
---|
| 371 |
|
---|
| 372 | VMMR3DECL(uint32_t) DBGFR3FlowTraceReportRetain(DBGFFLOWTRACEREPORT hFlowTraceReport);
|
---|
| 373 | VMMR3DECL(uint32_t) DBGFR3FlowTraceReportRelease(DBGFFLOWTRACEREPORT hFlowTraceReport);
|
---|
| 374 | VMMR3DECL(uint32_t) DBGFR3FlowTraceReportGetRecordCount(DBGFFLOWTRACEREPORT hFlowTraceReport);
|
---|
[87787] | 375 | VMMR3DECL(int) DBGFR3FlowTraceReportQueryRecord(DBGFFLOWTRACEREPORT hFlowTraceReport, uint32_t idxRec, PDBGFFLOWTRACERECORD phFlowTraceRec);
|
---|
[87134] | 376 | VMMR3DECL(int) DBGFR3FlowTraceReportQueryFiltered(DBGFFLOWTRACEREPORT hFlowTraceReport, uint32_t fFlags,
|
---|
| 377 | PDBGFFLOWTRACEREPORTFILTER paFilters, uint32_t cFilters,
|
---|
| 378 | DBGFFLOWTRACEREPORTFILTEROP enmOp,
|
---|
| 379 | PDBGFFLOWTRACEREPORT phFlowTraceReportFiltered);
|
---|
| 380 | VMMR3DECL(int) DBGFR3FlowTraceReportEnumRecords(DBGFFLOWTRACEREPORT hFlowTraceReport,
|
---|
| 381 | PFNDBGFFLOWTRACEREPORTENUMCLBK pfnEnum,
|
---|
| 382 | void *pvUser);
|
---|
| 383 |
|
---|
| 384 | VMMR3DECL(uint32_t) DBGFR3FlowTraceRecordRetain(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 385 | VMMR3DECL(uint32_t) DBGFR3FlowTraceRecordRelease(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 386 | VMMR3DECL(uint64_t) DBGFR3FlowTraceRecordGetSeqNo(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 387 | VMMR3DECL(uint64_t) DBGFR3FlowTraceRecordGetTimestamp(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 388 | VMMR3DECL(PDBGFADDRESS) DBGFR3FlowTraceRecordGetAddr(DBGFFLOWTRACERECORD hFlowTraceRecord, PDBGFADDRESS pAddr);
|
---|
| 389 | VMMR3DECL(DBGFFLOWTRACEPROBE) DBGFR3FlowTraceRecordGetProbe(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 390 | VMMR3DECL(uint32_t) DBGFR3FlowTraceRecordGetValCount(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 391 | VMMR3DECL(uint32_t) DBGFR3FlowTraceRecordGetValCommonCount(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 392 | VMMR3DECL(PCDBGFFLOWTRACEPROBEVAL) DBGFR3FlowTraceRecordGetVals(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 393 | VMMR3DECL(PCDBGFFLOWTRACEPROBEVAL) DBGFR3FlowTraceRecordGetValsCommon(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 394 | VMMR3DECL(VMCPUID) DBGFR3FlowTraceRecordGetCpuId(DBGFFLOWTRACERECORD hFlowTraceRecord);
|
---|
| 395 |
|
---|
| 396 | /** @} */
|
---|
| 397 | RT_C_DECLS_END
|
---|
| 398 |
|
---|
[87140] | 399 | #endif /* !VBOX_INCLUDED_vmm_dbgfflowtrace_h */
|
---|
[87139] | 400 |
|
---|