VirtualBox

Ignore:
Timestamp:
Mar 24, 2012 9:05:30 PM (13 years ago)
Author:
vboxsync
Message:

VBoxDrv: Finished probe creation code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp

    r40602 r40605  
    3333
    3434#include <VBox/err.h>
     35#include <VBox/log.h>
    3536#include <VBox/VBoxTpG.h>
    3637
     
    659660
    660661
    661 
    662 
    663 
    664662/**
    665663 * @callback_method_impl{dtrace_pops_t,dtps_provide}
     
    679677     /* Need a buffer for extracting the function names and mangling them in
    680678        case of collision. */
    681      pszFnNmBuf = (char *)RTMemAlloc(_4K + _1K);
     679     pszFnNmBuf = (char *)RTMemAlloc(cbFnNmBuf);
    682680     if (!pszFnNmBuf)
    683681         return;
     
    698696                brave/stupid enough to use function pointer returns without
    699697                typedef'ing properly them. */
    700              const char *pszName = supdrvVtgGetString(pProv->pHdr, pProbeDesc->offName);
    701              const char *pszFunc = pProbeLoc->pszFunction;
    702              const char *psz     = strchr(pProbeLoc->pszFunction, '(');
     698             const char *pszPrbName = supdrvVtgGetString(pProv->pHdr, pProbeDesc->offName);
     699             const char *pszFunc    = pProbeLoc->pszFunction;
     700             const char *psz        = strchr(pProbeLoc->pszFunction, '(');
    703701             size_t      cch;
    704702             if (psz)
    705703             {
    706                  pszFunc = psz - 1; /* ASSUMES not space... FIXME */
     704                 /* skip blanks preceeding the parameter parenthesis. */
     705                 while (   (uintptr_t)psz > (uintptr_t)pProbeLoc->pszFunction
     706                        && RT_C_IS_BLANK(psz[-1]))
     707                     psz--;
     708
     709                 /* Find the start of the function name. */
     710                 pszFunc = psz - 1;
    707711                 while ((uintptr_t)pszFunc > (uintptr_t)pProbeLoc->pszFunction)
    708712                 {
     
    721725                the function name a little to avoid having to deal with having
    722726                multiple location entries with the same probe ID. (lazy bird) */
    723 
    724              //dtrace_probe_lookup()
    725              //dtrace_probe_create()
    726 
    727727             Assert(pProbeLoc->idProbe == UINT32_MAX);
     728             if (dtrace_probe_lookup(pProv->idDtProv, pProv->pszModName, pszFnNmBuf, pszPrbName) != DTRACE_IDNONE)
     729             {
     730                 RTStrPrintf(pszFnNmBuf+cch, cbFnNmBuf - cch, "-%u",  pProbeLoc->uLine);
     731                 if (dtrace_probe_lookup(pProv->idDtProv, pProv->pszModName, pszFnNmBuf, pszPrbName) != DTRACE_IDNONE)
     732                 {
     733                     unsigned iOrd = 2;
     734                     while (iOrd < 128)
     735                     {
     736                         RTStrPrintf(pszFnNmBuf+cch, cbFnNmBuf - cch, "-%u-%u",  pProbeLoc->uLine, iOrd);
     737                         if (dtrace_probe_lookup(pProv->idDtProv, pProv->pszModName, pszFnNmBuf, pszPrbName) == DTRACE_IDNONE)
     738                             break;
     739                         iOrd++;
     740                     }
     741                     if (iOrd >= 128)
     742                     {
     743                         LogRel(("VBoxDrv: More than 128 duplicate probe location instances in file %s at line %u, function %s [%s], probe %s\n",
     744                                 pProbeLoc->pszFile, pProbeLoc->uLine, pProbeLoc->pszFunction, pszFnNmBuf, pszPrbName));
     745                         continue;
     746                     }
     747                 }
     748             }
     749
     750             /* Create the probe. */
     751             AssertCompile(sizeof(pProbeLoc->idProbe) == sizeof(dtrace_id_t));
     752             pProbeLoc->idProbe = dtrace_probe_create(pProv->idDtProv, pProv->pszModName, pszFnNmBuf, pszPrbName,
     753                                                      0 /*aframes*/, pProbeLoc);
    728754         }
    729755
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette