Changeset 40865 in vbox for trunk/src/VBox/HostDrivers/Support
- Timestamp:
- Apr 11, 2012 9:29:23 AM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 77402
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp
r40857 r40865 82 82 typedef SUPDRVDTSTACKDATA *PSUPDRVDTSTACKDATA; 83 83 84 85 /******************************************************************************* 86 * Defined Constants And Macros * 87 *******************************************************************************/ 84 88 /** The first magic value. */ 85 89 #define SUPDRVDT_STACK_DATA_MAGIC1 RT_MAKE_U32_FROM_U8('S', 'U', 'P', 'D') … … 109 113 pStackData->pSelf = NULL; \ 110 114 } while (0) 115 116 /** SUPR0Printf logging. */ 117 #if 0 118 # define LOG_DTRACE(a) SUPR0Printf a 119 #else 120 # define LOG_DTRACE(a) do { } while (0) 121 #endif 111 122 112 123 … … 189 200 { 190 201 PSUPDRVVDTPROVIDERCORE pProv = (PSUPDRVVDTPROVIDERCORE)pvProv; 202 AssertPtrReturnVoid(pProv); 203 LOG_DTRACE(("supdrvDtPOps_Provide: %p / %p pDtProbeDesc=%p\n", pProv, pProv->TracerData.DTrace.idProvider, pDtProbeDesc)); 204 AssertPtrReturnVoid(pProv->pHdr); 191 205 PVTGPROBELOC pProbeLoc = pProv->pHdr->paProbLocs; 206 AssertPtrReturnVoid(pProbeLoc); 192 207 PVTGPROBELOC pProbeLocEnd = pProv->pHdr->paProbLocsEnd; 208 AssertPtrReturnVoid(pProbeLocEnd); 193 209 dtrace_provider_id_t idProvider = pProv->TracerData.DTrace.idProvider; 210 AssertPtrReturnVoid(idProvider); 194 211 size_t const cbFnNmBuf = _4K + _1K; 195 212 char *pszFnNmBuf; … … 289 306 290 307 RTMemFree(pszFnNmBuf); 308 LOG_DTRACE(("supdrvDtPOps_Provide: returns\n")); 291 309 } 292 310 … … 298 316 { 299 317 PSUPDRVVDTPROVIDERCORE pProv = (PSUPDRVVDTPROVIDERCORE)pvProv; 318 AssertPtrReturn(pProv, EINVAL); 319 LOG_DTRACE(("supdrvDtPOps_Enable: %p / %p - %#x / %p\n", pProv, pProv->TracerData.DTrace.idProvider, idProbe, pvProbe)); 320 AssertPtrReturn(pvProbe, EINVAL); 321 AssertPtrReturn(pProv->TracerData.DTrace.idProvider, EINVAL); 322 300 323 if (!pProv->TracerData.DTrace.fZombie) 301 324 { … … 321 344 { 322 345 PSUPDRVVDTPROVIDERCORE pProv = (PSUPDRVVDTPROVIDERCORE)pvProv; 346 AssertPtrReturnVoid(pProv); 347 LOG_DTRACE(("supdrvDtPOps_Disable: %p / %p - %#x / %p\n", pProv, pProv->TracerData.DTrace.idProvider, idProbe, pvProbe)); 348 AssertPtrReturnVoid(pvProbe); 349 AssertPtrReturnVoid(pProv->TracerData.DTrace.idProvider); 350 323 351 if (!pProv->TracerData.DTrace.fZombie) 324 352 { 325 353 PVTGPROBELOC pProbeLoc = (PVTGPROBELOC)pvProbe; 326 354 PVTGDESCPROBE pProbeDesc = (PVTGDESCPROBE)pProbeLoc->pbProbe; 355 AssertPtrReturnVoid(pProbeDesc); 327 356 328 357 if (pProbeLoc->fEnabled) … … 345 374 unsigned uArg = pArgDesc->dtargd_ndx; 346 375 376 pArgDesc->dtargd_ndx = DTRACE_ARGNONE; 377 AssertPtrReturnVoid(pProv); 378 LOG_DTRACE(("supdrvDtPOps_GetArgDesc: %p / %p - %#x / %p uArg=%d\n", pProv, pProv->TracerData.DTrace.idProvider, idProbe, pvProbe, uArg)); 379 AssertPtrReturnVoid(pvProbe); 380 AssertPtrReturnVoid(pProv->TracerData.DTrace.idProvider); 381 347 382 if (!pProv->TracerData.DTrace.fZombie) 348 383 { 349 384 PVTGPROBELOC pProbeLoc = (PVTGPROBELOC)pvProbe; 350 385 PVTGDESCPROBE pProbeDesc = (PVTGDESCPROBE)pProbeLoc->pbProbe; 386 AssertPtrReturnVoid(pProbeDesc); 387 AssertPtrReturnVoid(pProv->pHdr); 351 388 PVTGDESCARGLIST pArgList = (PVTGDESCARGLIST)((uintptr_t)pProv->pHdr->paArgLists + pProbeDesc->offArgList); 389 AssertPtrReturnVoid(pArgList); 352 390 353 391 Assert(pProbeDesc->offArgList < pProv->pHdr->cbArgLists); … … 360 398 memcpy(pArgDesc->dtargd_native, pszType, cchType + 1); 361 399 /** @todo mapping */ 400 pArgDesc->dtargd_ndx = uArg; 401 LOG_DTRACE(("supdrvDtPOps_GetArgVal: returns dtargd_native = %s\n", pArgDesc->dtargd_native)); 362 402 return; 363 403 } 364 404 } 365 405 } 366 367 pArgDesc->dtargd_ndx = DTRACE_ARGNONE;368 406 } 369 407 … … 404 442 int iArg, int cFrames) 405 443 { 444 PSUPDRVVDTPROVIDERCORE pProv = (PSUPDRVVDTPROVIDERCORE)pvProv; 445 AssertPtrReturn(pProv, UINT64_MAX); 446 LOG_DTRACE(("supdrvDtPOps_GetArgVal: %p / %p - %#x / %p iArg=%d cFrames=%u\n", pProv, pProv->TracerData.DTrace.idProvider, idProbe, pvProbe, iArg, cFrames)); 406 447 AssertReturn(iArg >= 5, UINT64_MAX); 448 AssertPtrReturn(pvProbe, UINT64_MAX); 449 AssertReturn(!pProv->TracerData.DTrace.fZombie, UINT64_MAX); 450 AssertPtrReturn(pProv->TracerData.DTrace.idProvider, UINT64_MAX); 407 451 408 452 /* Locate the caller of probe_dtrace, . */ … … 420 464 421 465 /* Get the stack data. */ 466 LOG_DTRACE(("supdrvDtPOps_GetArgVal: returns %#llx\n", (uint64_t)pData->pauStackArgs[iArg - 5])); 422 467 return pData->pauStackArgs[iArg - 5]; 423 468 } … … 430 475 { 431 476 PSUPDRVVDTPROVIDERCORE pProv = (PSUPDRVVDTPROVIDERCORE)pvProv; 477 AssertPtrReturnVoid(pProv); 478 LOG_DTRACE(("supdrvDtPOps_Destroy: %p / %p - %#x / %p\n", pProv, pProv->TracerData.DTrace.idProvider, idProbe, pvProbe)); 479 AssertReturnVoid(pProv->TracerData.DTrace.cProvidedProbes > 0); 480 AssertPtrReturnVoid(pProv->TracerData.DTrace.idProvider); 481 432 482 if (!pProv->TracerData.DTrace.fZombie) 433 483 { 434 484 PVTGPROBELOC pProbeLoc = (PVTGPROBELOC)pvProbe; 485 AssertPtrReturnVoid(pProbeLoc); 486 AssertPtrReturnVoid(pProbeLoc->pszFunction); 435 487 Assert(!pProbeLoc->fEnabled); 436 Assert(pProbeLoc->idProbe == idProbe); NOREF(idProbe); 488 AssertReturnVoid(pProbeLoc->idProbe == idProbe); 489 437 490 pProbeLoc->idProbe = UINT32_MAX; 438 491 } … … 478 531 uintptr_t uArg3, uintptr_t uArg4) 479 532 { 533 AssertPtrReturnVoid(pVtgProbeLoc); 534 LOG_DTRACE(("supdrvDtTOps_ProbeFireKernel: %p / %p\n", pVtgProbeLoc, pVtgProbeLoc->idProbe)); 535 AssertPtrReturnVoid(pVtgProbeLoc->pbProbe); 536 AssertPtrReturnVoid(pVtgProbeLoc->pszFunction); 537 480 538 SUPDRVDT_SETUP_STACK_DATA(); 481 539 … … 484 542 485 543 SUPDRVDT_CLEAR_STACK_DATA(); 544 LOG_DTRACE(("supdrvDtTOps_ProbeFireKernel: returns\n")); 486 545 } 487 546 … … 536 595 static DECLCALLBACK(int) supdrvDtTOps_ProviderRegister(PCSUPDRVTRACERREG pThis, PSUPDRVVDTPROVIDERCORE pCore) 537 596 { 597 LOG_DTRACE(("supdrvDtTOps_ProviderRegister: %p %s/%s\n", pThis, pCore->pszModName, pCore->pszName)); 538 598 AssertReturn(pCore->TracerData.DTrace.idProvider == UINT32_MAX || pCore->TracerData.DTrace.idProvider == 0, 539 599 VERR_INTERNAL_ERROR_3); … … 547 607 vboxDtVtgConvAttr(&DtAttrs.dtpa_args, &pDesc->AttrArguments); 548 608 549 dtrace_provider_id_t idProvider; 609 /* Note! DTrace may call us back before dtrace_register returns, so we 610 have to point it to pCore->TracerData.DTrace.idProvider. */ 550 611 int rc = dtrace_register(pCore->pszName, 551 612 &DtAttrs, … … 554 615 &g_vboxDtVtgProvOps, 555 616 pCore, 556 &idProvider); 617 &pCore->TracerData.DTrace.idProvider); 618 LOG_DTRACE(("supdrvDtTOps_ProviderRegister: idProvider=%p\n", pCore->TracerData.DTrace.idProvider)); 557 619 if (!rc) 558 620 { 559 Assert(idProvider != UINT32_MAX && idProvider != 0); 560 pCore->TracerData.DTrace.idProvider = idProvider; 561 Assert(pCore->TracerData.DTrace.idProvider == idProvider); 621 Assert(pCore->TracerData.DTrace.idProvider != UINT32_MAX && pCore->TracerData.DTrace.idProvider != 0); 622 AssertPtr(pCore->TracerData.DTrace.idProvider); 562 623 rc = VINF_SUCCESS; 563 624 } 564 625 else 626 { 627 pCore->TracerData.DTrace.idProvider = UINT32_MAX; 565 628 rc = RTErrConvertFromErrno(rc); 566 629 } 630 631 LOG_DTRACE(("supdrvDtTOps_ProviderRegister: returns %Rrc\n", rc)); 567 632 return rc; 568 633 } … … 575 640 { 576 641 uintptr_t idProvider = pCore->TracerData.DTrace.idProvider; 642 LOG_DTRACE(("supdrvDtTOps_ProviderDeregister: %p / %p\n", pThis, idProvider)); 643 AssertPtrReturn(idProvider, VERR_INTERNAL_ERROR_3); 577 644 AssertReturn(idProvider != UINT32_MAX && idProvider != 0, VERR_INTERNAL_ERROR_4); 578 645 … … 591 658 } 592 659 660 LOG_DTRACE(("supdrvDtTOps_ProviderDeregister: returns %Rrc\n", rc)); 593 661 return rc; 594 662 } … … 601 669 { 602 670 uintptr_t idProvider = pCore->TracerData.DTrace.idProvider; 671 LOG_DTRACE(("supdrvDtTOps_ProviderDeregisterZombie: %p / %p\n", pThis, idProvider)); 672 AssertPtrReturn(idProvider, VERR_INTERNAL_ERROR_3); 603 673 AssertReturn(idProvider != UINT32_MAX && idProvider != 0, VERR_INTERNAL_ERROR_4); 604 674 Assert(pCore->TracerData.DTrace.fZombie); … … 616 686 } 617 687 688 LOG_DTRACE(("supdrvDtTOps_ProviderDeregisterZombie: returns %Rrc\n", rc)); 618 689 return rc; 619 690 }
Note:
See TracChangeset
for help on using the changeset viewer.