VirtualBox

Changeset 40619 in vbox


Ignore:
Timestamp:
Mar 25, 2012 7:55:20 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
77034
Message:

VBoxTpG: probe name unmangling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bldprogs/VBoxTpG.cpp

    r40604 r40619  
    6565{
    6666    RTLISTNODE      ListEntry;
    67     const char     *pszName;
     67    char           *pszMangledName;
     68    const char     *pszUnmangledName;
    6869    RTLISTANCHOR    ArgHead;
    6970    uint32_t        cArgs;
     
    522523                            "VTG_GLOBAL g_fVTGProbeEnabled_%s_%s, data\n"
    523524                            "    db 0\n",
    524                             pProvider->pszName, pProbe->pszName);
     525                            pProvider->pszName, pProbe->pszMangledName);
    525526            cProbes++;
    526527        }
     
    638639                            "    dd 0       ; for the application\n"
    639640                            ,
    640                             pProvider->pszName, pProbe->pszName, iProbe,
    641                             strtabGetOff(pProbe->pszName),
     641                            pProvider->pszName, pProbe->pszMangledName, iProbe,
     642                            strtabGetOff(pProbe->pszUnmangledName),
    642643                            pProbe->offArgList,
    643                             pProvider->pszName, pProbe->pszName,
     644                            pProvider->pszName, pProbe->pszMangledName,
    644645                            iProvider);
    645646            pProbe->iProbe = iProbe;
     
    707708                            "\n"
    708709                            "VTG_GLOBAL VTGProbeStub_%s_%s, function; (VBOXTPGPROBELOC pVTGProbeLoc",
    709                             pProvider->pszName, pProbe->pszName);
     710                            pProvider->pszName, pProbe->pszMangledName);
    710711            RTListForEach(&pProbe->ArgHead, pArg, VTGARG, ListEntry)
    711712            {
     
    889890                            "extern uint8_t g_VTGProbeData_%s_%s;\n"
    890891                            "DECLASM(void)  VTGProbeStub_%s_%s(PVTGPROBELOC",
    891                             pProv->pszName, pProbe->pszName,
    892                             pProv->pszName, pProbe->pszName,
    893                             pProv->pszName, pProbe->pszName);
     892                            pProv->pszName, pProbe->pszMangledName,
     893                            pProv->pszName, pProbe->pszMangledName,
     894                            pProv->pszName, pProbe->pszMangledName);
    894895            RTListForEach(&pProbe->ArgHead, pArg, VTGARG, ListEntry)
    895896            {
    896897                ScmStreamPrintf(pStrm, ", %s", pArg->pszType);
    897898            }
    898             generateProbeDefineName(szTmp, sizeof(szTmp), pProv->pszName, pProbe->pszName);
     899            generateProbeDefineName(szTmp, sizeof(szTmp), pProv->pszName, pProbe->pszMangledName);
    899900            ScmStreamPrintf(pStrm,
    900901                            ");\n"
     
    903904                            "# define %s("
    904905                            , szTmp,
    905                             pProv->pszName, pProbe->pszName,
     906                            pProv->pszName, pProbe->pszMangledName,
    906907                            szTmp);
    907908            RTListForEach(&pProbe->ArgHead, pArg, VTGARG, ListEntry)
     
    920921                            "            { __LINE__, 0, UINT32_MAX, __PRETTY_FUNCTION__, __FILE__, &g_VTGProbeData_%s_%s }; \\\n"
    921922                            "            VTGProbeStub_%s_%s(&s_VTGProbeLoc",
    922                             pProv->pszName, pProbe->pszName,
    923                             pProv->pszName, pProbe->pszName,
    924                             pProv->pszName, pProbe->pszName);
     923                            pProv->pszName, pProbe->pszMangledName,
     924                            pProv->pszName, pProbe->pszMangledName,
     925                            pProv->pszName, pProbe->pszMangledName);
    925926            RTListForEach(&pProbe->ArgHead, pArg, VTGARG, ListEntry)
    926927            {
     
    952953        RTListForEach(&pProv->ProbeHead, pProbe, VTGPROBE, ListEntry)
    953954        {
    954             generateProbeDefineName(szTmp, sizeof(szTmp), pProv->pszName, pProbe->pszName);
     955            generateProbeDefineName(szTmp, sizeof(szTmp), pProv->pszName, pProbe->pszMangledName);
    955956            ScmStreamPrintf(pStrm,
    956957                            "# define %s_ENABLED() (false)\n"
     
    15141515
    15151516/**
     1517 * Unmangles the probe name.
     1518 * 
     1519 * This involves translating double underscore to dash.
     1520 * 
     1521 * @returns Pointer to the unmangled name in the string table.
     1522 * @param   pszMangled          The mangled name.
     1523 */
     1524static const char *parseUnmangleProbeName(const char *pszMangled)
     1525{
     1526    size_t      cchMangled = strlen(pszMangled);
     1527    char       *pszTmp     = (char *)alloca(cchMangled + 2);
     1528    const char *pszSrc     = pszMangled;
     1529    char       *pszDst     = pszTmp;
     1530
     1531    while (*pszSrc)
     1532    {
     1533        if (pszSrc[0] == '_' && pszSrc[1] == '_' && pszSrc[2] != '_')
     1534        {
     1535            *pszDst++ = '-';
     1536            pszSrc   += 2;
     1537        }
     1538        else
     1539            *pszDst++ = *pszSrc++;
     1540    }
     1541    *pszDst = '\0';
     1542
     1543    return strtabInsertN(pszTmp, pszDst - pszTmp);
     1544}
     1545
     1546
     1547/**
    15161548 * Parses a D probe statement.
    15171549 *
     
    15421574    RTListAppend(&pProv->ProbeHead, &pProbe->ListEntry);
    15431575    pProbe->offArgList = UINT32_MAX;
    1544     pProbe->pszName    = strtabInsertN(pszProbe, cchProbe);
    1545     if (!pProbe->pszName)
     1576    pProbe->pszMangledName = RTStrDupN(pszProbe, cchProbe);
     1577    if (!pProbe->pszMangledName)
    15461578        return parseError(pStrm, 0, "Out of memory");
    1547 
     1579    pProbe->pszUnmangledName = parseUnmangleProbeName(pProbe->pszMangledName);
     1580    if (!pProbe->pszUnmangledName)
     1581        return parseError(pStrm, 0, "Out of memory");
     1582   
    15481583    /*
    15491584     * Parse loop for the argument.
Note: See TracChangeset for help on using the changeset viewer.

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