Changeset 40878 in vbox for trunk/src/VBox/HostDrivers/Support
- Timestamp:
- Apr 11, 2012 8:44:41 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 77420
- Location:
- trunk/src/VBox/HostDrivers/Support
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp
r40867 r40878 397 397 { 398 398 memcpy(pArgDesc->dtargd_native, pszType, cchType + 1); 399 /** @todo mapping */399 /** @todo mapping? */ 400 400 pArgDesc->dtargd_ndx = uArg; 401 401 LOG_DTRACE(("supdrvDtPOps_GetArgVal: returns dtargd_native = %s\n", pArgDesc->dtargd_native)); … … 449 449 AssertReturn(!pProv->TracerData.DTrace.fZombie, UINT64_MAX); 450 450 AssertPtrReturn(pProv->TracerData.DTrace.idProvider, UINT64_MAX); 451 PVTGPROBELOC pProbeLoc = (PVTGPROBELOC)pvProbe; 452 AssertPtrReturn(pProbeLoc, UINT64_MAX); 453 PVTGDESCPROBE pProbe = (PVTGDESCPROBE)pProbeLoc->pbProbe 454 AssertPtrReturn(pProbe, UINT64_MAX); 455 PVTGDESCARGLIST pArgList = (PVTGDESCPROBE)((uintptr_t)pProv->pHdr->paArgLists + pProbe->offArgList); 456 AssertPtrReturn(pArgList, UINT64_MAX); 451 457 452 458 /* Locate the caller of probe_dtrace, . */ … … 464 470 465 471 /* Get the stack data. */ 466 LOG_DTRACE(("supdrvDtPOps_GetArgVal: returns %#llx\n", (uint64_t)pData->pauStackArgs[iArg - 5])); 467 return pData->pauStackArgs[iArg - 5]; 472 #if ARCH_BITS == 64 473 uint64_t u64Ret = pData->pauStackArgs[iArg - 5]; 474 #else 475 uint64_t u64Ret; 476 if ( !pArgList->fHaveLargeArgs 477 || pArgList->cArgs <= iArg) 478 u64Ret = pData->pauStackArgs[iArg - 5]; 479 else 480 { 481 /* wonder if this will work... */ 482 uint32_t off = 0; 483 for (uint32_t i = 5; i < iArg; i++) 484 if ( (pArgList->aArgs[i].fType & VTG_TYPE_FIXED_SIZED) 485 && (pArgList->aArgs[i].fType & VTG_TYPE_SIZE_MASK) == 8) 486 off++; 487 u64Ret = pData->pauStackArgs[iArg - 5 + off]; 488 if ( (pArgList->aArgs[iArg].fType & VTG_TYPE_FIXED_SIZED) 489 && (pArgList->aArgs[iArg].fType & VTG_TYPE_SIZE_MASK) == 8 490 u64Ret |= (uint64_t)pData->pauStackArgs[iArg - 5 + off + 1] << 32; 491 } 492 #endif 493 494 LOG_DTRACE(("supdrvDtPOps_GetArgVal: returns %#llx\n", u64Ret)); 495 return u64Ret; 468 496 } 469 497 -
trunk/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp
r40867 r40878 299 299 PVTGDESCARGLIST pArgList; 300 300 unsigned iArg; 301 bool fHaveLargeArgs; 301 302 302 303 MY_VALIDATE_STR(pVtgHdr->paProbes[i].offName); … … 319 320 if (pArgList->cArgs > 16) 320 321 return VERR_SUPDRV_VTG_BAD_ARGLIST; 322 if (pArgList->fHaveLargeArgs >= 2) 323 return VERR_SUPDRV_VTG_BAD_ARGLIST; 321 324 if ( pArgList->abReserved[0] 322 || pArgList->abReserved[1] 323 || pArgList->abReserved[2]) 325 || pArgList->abReserved[1]) 324 326 return VERR_SUPDRV_VTG_BAD_ARGLIST; 327 fHaveLargeArgs = false; 325 328 iArg = pArgList->cArgs; 326 329 while (iArg-- > 0) 327 330 { 331 rc = VINF_SUCCESS; 328 332 MY_VALIDATE_STR(pArgList->aArgs[iArg].offType); 329 MY_VALIDATE_STR(pArgList->aArgs[iArg].offName); 330 } 333 switch (pArgList->aArgs[iArg].fType & VTG_TYPE_SIZE_MASK) 334 { 335 case 0: 336 if (!(pArgList->aArgs[iArg].fType & VTG_TYPE_FIXED_SIZED)) 337 rc = VERR_SUPDRV_TRACER_BAD_ARG_FLAGS; 338 break; 339 case 1: case 2: case 4: case 8: 340 break; 341 default: 342 rc = VERR_SUPDRV_TRACER_BAD_ARG_FLAGS; 343 } 344 if (RT_FAILURE(rc)) 345 { 346 SUPR0Printf("supdrvVtgValidate: VERR_SUPDRV_TRACER_BAD_ARG_FLAGS - fType=%#x iArg=%u iProbe=%u\n", 347 pArgList->aArgs[iArg].fType, iArg, i); 348 return rc; 349 } 350 if (VTG_TYPE_IS_LARGE(pArgList->aArgs[iArg].fType)) 351 fHaveLargeArgs = true; 352 } 353 if ((uint8_t)fHaveLargeArgs != pArgList->fHaveLargeArgs) 354 return VERR_SUPDRV_VTG_BAD_PROBE; 331 355 } 332 356
Note:
See TracChangeset
for help on using the changeset viewer.