Changeset 40892 in vbox
- Timestamp:
- Apr 12, 2012 12:12:40 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 77434
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/VBoxTpG.h
r40886 r40892 170 170 uint16_t idxEnabled; 171 171 uint16_t idxProvider; 172 /** The distance from this structure to the VTG object header. */ 173 int32_t offObjHdr; 172 174 uint32_t u32User; 175 uint32_t u32User2; 173 176 } VTGDESCPROBE; 174 AssertCompileSize(VTGDESCPROBE, 16);177 AssertCompileSize(VTGDESCPROBE, 24); 175 178 /** Pointer to a VTG probe descriptor. */ 176 179 typedef VTGDESCPROBE *PVTGDESCPROBE; … … 269 272 270 273 /** The current VTGOBJHDR::szMagic value. */ 271 #define VTGOBJHDR_MAGIC "VTG Object Header v1. 3\0"274 #define VTGOBJHDR_MAGIC "VTG Object Header v1.4\0" 272 275 273 276 /** The name of the VTG data object header symbol in the object file. */ -
trunk/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp
r40889 r40892 399 399 /** @todo mapping? */ 400 400 pArgDesc->dtargd_ndx = uArg; 401 SUPR0Printf("supdrvDtPOps_GetArgVal: returns dtargd_native = %s for #%u\n", pArgDesc->dtargd_native, uArg); 401 402 LOG_DTRACE(("supdrvDtPOps_GetArgVal: returns dtargd_native = %s\n", pArgDesc->dtargd_native)); 402 403 return; … … 404 405 } 405 406 } 407 SUPR0Printf("supdrvDtPOps_GetArgVal: returns faiure for #%u\n", uArg); 406 408 } 407 409 … … 469 471 } 470 472 471 /* Get the stack data. */ 473 /* 474 * Get the stack data. This is a wee bit complicated on 32-bit systems 475 * since we want to support 64-bit integer arguments. 476 */ 472 477 #if ARCH_BITS == 64 473 478 uint64_t u64Ret = pData->pauStackArgs[iArg - 5]; … … 479 484 else 480 485 { 481 /* wonder if this will work... */486 /* Similar to what we did for mac in when calling dtrace_probe(). */ 482 487 uint32_t off = 0; 483 488 for (int 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) 489 if (VTG_TYPE_IS_LARGE(pArgList->aArgs[iArg].fType)) 486 490 off++; 487 491 u64Ret = pData->pauStackArgs[iArg - 5 + off]; … … 566 570 SUPDRVDT_SETUP_STACK_DATA(); 567 571 568 pStackData->pauStackArgs = &uArg4 + 1; 572 pStackData->pauStackArgs = &uArg4 + 1; 573 574 #if defined(RT_OS_DARWIN) && ARCH_BITS == 32 575 /* 576 * Convert arguments from uintptr_t to uint64_t. 577 */ 578 PVTGDESCPROBE pProbe = (PVTGDESCPROBE)((PVTGPROBELOC)pVtgProbeLoc)->pbProbe; 579 AssertPtrReturnVoid(pProbe); 580 PVTGOBJHDR pVtgHdr = (PVTGOBJHDR)((uintptr_t)pProbe + pProbe->offObjHdr); 581 AssertPtrReturnVoid(pVtgHdr); 582 PVTGDESCARGLIST pArgList = (PVTGDESCARGLIST)((uintptr_t)pVtgHdr->paArgLists + pProbe->offArgList); 583 AssertPtrReturnVoid(pArgList); 584 if (!pArgList->fHaveLargeArgs) 585 dtrace_probe(pVtgProbeLoc->idProbe, uArg0, uArg1, uArg2, uArg3, uArg4); 586 else 587 { 588 uintptr_t *auSrcArgs = &uArg0; 589 uint32_t iSrcArg = 0; 590 uint32_t iDstArg = 0; 591 uint64_t au64DstArgs[5]; 592 593 while ( iDstArg < RT_ELEMENTS(au64DstArgs) 594 && iSrcArg < pArgList->cArgs) 595 { 596 au64DstArgs[iDstArg] = auSrcArgs[iSrcArg]; 597 if (VTG_TYPE_IS_LARGE(pArgList->aArgs[iDstArg].fType)) 598 au64DstArgs[iDstArg] |= (uint64_t)auSrcArgs[++iSrcArg] << 32; 599 iSrcArg++; 600 iDstArg++; 601 } 602 while (iDstArg < RT_ELEMENTS(au64DstArgs)) 603 au64DstArgs[iDstArg++] = auSrcArgs[iSrcArg++]; 604 605 pStackData->pauStackArgs = &auSrcArgs[iSrcArg]; 606 dtrace_probe(pVtgProbeLoc->idProbe, au64DstArgs[0], au64DstArgs[1], au64DstArgs[2], au64DstArgs[3], au64DstArgs[4]); 607 } 608 #else 569 609 dtrace_probe(pVtgProbeLoc->idProbe, uArg0, uArg1, uArg2, uArg3, uArg4); 610 #endif 570 611 571 612 SUPDRVDT_CLEAR_STACK_DATA(); -
trunk/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp
r40886 r40892 315 315 if (pVtgHdr->paProbes[i].u32User) 316 316 return VERR_SUPDRV_VTG_BAD_PROBE; 317 if (pVtgHdr->paProbes[i].u32User2) 318 return VERR_SUPDRV_VTG_BAD_PROBE; 319 if ( pVtgHdr->paProbes[i].offObjHdr 320 != (intptr_t)pVtgHdr - (intptr_t)&pVtgHdr->paProbes[i]) 321 { 322 SUPR0Printf("supdrvVtgValidate: VERR_SUPDRV_TRACER_BAD_ARG_FLAGS - iProbe=%u offObjHdr=%d expected %zd\n", 323 i, pVtgHdr->paProbes[i].offObjHdr, (intptr_t)pVtgHdr - (intptr_t)&pVtgHdr->paProbes[i]); 324 return VERR_SUPDRV_VTG_BAD_PROBE; 325 } 317 326 318 327 /* The referenced argument list. */ … … 320 329 if (pArgList->cArgs > 16) 321 330 { 322 SUPR0Printf("supdrvVtgValidate: VERR_SUPDRV_TRACER_BAD_ARG_FLAGS - iProbe=%u cArgs=%u\n", i, pArgList-> fHaveLargeArgs, pArgList->cArgs);331 SUPR0Printf("supdrvVtgValidate: VERR_SUPDRV_TRACER_BAD_ARG_FLAGS - iProbe=%u cArgs=%u\n", i, pArgList->cArgs); 323 332 return VERR_SUPDRV_VTG_BAD_ARGLIST; 324 333 } -
trunk/src/bldprogs/VBoxTpG.cpp
r40887 r40892 516 516 " ;0 1 2 3\n" 517 517 " ;012345678901234567890123456789012\n" 518 " db 'VTG Object Header v1. 3', 0, 0\n"518 " db 'VTG Object Header v1.4', 0, 0\n" 519 519 " dd %u\n" 520 520 " dd 0\n" … … 607 607 ScmStreamPrintf(pStrm, 608 608 " ; off=%u\n" 609 " db %2u; Argument count\n"610 " db %u; fHaveLargeArgs\n"611 " db 0, 0; Reserved\n"609 " db %2u ; Argument count\n" 610 " db %u ; fHaveLargeArgs\n" 611 " db 0, 0 ; Reserved\n" 612 612 , off, pProbe->cArgs, (int)pProbe->fHaveLargeArgs); 613 613 off += 4; … … 615 615 { 616 616 ScmStreamPrintf(pStrm, 617 " dd %6u; type '%s' (name '%s')\n"617 " dd %8u ; type '%s' (name '%s')\n" 618 618 " dd 0%08xh ; type flags\n", 619 619 strtabGetOff(pArg->pszType), pArg->pszType, pArg->pszName, … … 679 679 " dw NAME(g_fVTGProbeEnabled_%s_%s) - NAME(g_afVTGProbeEnabled)\n" 680 680 " dw %6u ; provider index\n" 681 " dd 0 ; for the application\n" 681 " dd NAME(g_VTGObjHeader) - NAME(g_VTGProbeData_%s_%s) ; offset to the object header\n" 682 " dd 0 ; for the application\n" 683 " dd 0 ; for the application\n" 682 684 , 683 685 pProvider->pszName, pProbe->pszMangledName, iProbe, … … 685 687 pProbe->offArgList, 686 688 pProvider->pszName, pProbe->pszMangledName, 687 iProvider); 689 iProvider, 690 pProvider->pszName, pProbe->pszMangledName 691 ); 688 692 pProbe->iProbe = iProbe; 689 693 iProbe++; … … 974 978 RTListForEach(&pProbe->ArgHead, pArg, VTGARG, ListEntry) 975 979 { 976 if (iArg < 5) 977 { 978 if (pArg->fType & VTG_TYPE_FIXED_SIZED) 979 ScmStreamPrintf(pStrm, 980 " /*AssertCompile(sizeof(%s) <= sizeof(uint32_t));*/ \\\n" 981 " /*AssertCompile(sizeof(%s) <= sizeof(uint32_t));*/ \\\n", 982 pArg->pszName, 983 pArg->pszType); 984 else 985 ScmStreamPrintf(pStrm, 986 " AssertCompile(sizeof(%s) <= sizeof(uintptr_t)); \\\n" 987 " AssertCompile(sizeof(%s) <= sizeof(uintptr_t)); \\\n", 988 pArg->pszName, 989 pArg->pszType); 990 } 980 if (pArg->fType & VTG_TYPE_FIXED_SIZED) 981 ScmStreamPrintf(pStrm, 982 " AssertCompile(sizeof(%s) == %u); \\\n" 983 " AssertCompile(sizeof(%s) <= %u); \\\n", 984 pArg->pszType, pArg->fType & VTG_TYPE_SIZE_MASK, 985 pArg->pszName, pArg->fType & VTG_TYPE_SIZE_MASK); 986 else if (pArg->fType & (VTG_TYPE_POINTER | VTG_TYPE_HC_ARCH_SIZED)) 987 ScmStreamPrintf(pStrm, 988 " AssertCompile(sizeof(%s) <= sizeof(uintptr_t)); \\\n" 989 " AssertCompile(sizeof(%s) <= sizeof(uintptr_t)); \\\n", 990 pArg->pszName, 991 pArg->pszType); 991 992 iArg++; 992 993 }
Note:
See TracChangeset
for help on using the changeset viewer.