VirtualBox

Changeset 40594 in vbox


Ignore:
Timestamp:
Mar 23, 2012 2:53:06 PM (13 years ago)
Author:
vboxsync
Message:

VBoxTpG: More code and stuff.

Location:
trunk
Files:
1 added
1 edited

Legend:

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

    r40589 r40594  
    11/* $Id$ */
    22/** @file
    3  * IPRT Testcase / Tool - VBox Tracepoint Compiler.
     3 * VBox Build Tool - VBox Tracepoint Generator.
    44 */
    55
     
    2020*   Header Files                                                               *
    2121*******************************************************************************/
     22#include <VBox/VBoxTpG.h>
     23
    2224#include <iprt/alloca.h>
    2325#include <iprt/assert.h>
     
    465467                    ";\n"
    466468                    "%%ifdef ASM_FORMAT_OMF\n"
     469                    " %%macro VTG_GLOBAL 2\n"
     470                    "  global NAME(%%1)\n"
     471                    "  NAME(%%1):\n"
     472                    " %%endmacro\n"
    467473                    " segment VTG.Obj public CLASS=DATA align=4096 use32\n"
     474                    "\n"
    468475                    "%%elifdef ASM_FORMAT_MACHO\n"
     476                    " %%macro VTG_GLOBAL 2\n"
     477                    "  global NAME(%%1)\n"
     478                    "  NAME(%%1):\n"
     479                    " %%endmacro\n"
    469480                    " ;[section VTG Obj align=4096]\n"
    470481                    " [section .data]\n"
     482                    "\n"
    471483                    "%%elifdef ASM_FORMAT_PE\n"
     484                    " %%macro VTG_GLOBAL 2\n"
     485                    "  global NAME(%%1)\n"
     486                    "  NAME(%%1):\n"
     487                    " %%endmacro\n"
    472488                    " [section VTGObj align=4096]\n"
    473489                    "\n"
    474490                    "%%elifdef ASM_FORMAT_ELF\n"
     491                    " %%macro VTG_GLOBAL 2\n"
     492                    "  global NAME(%%1):%%2 hidden\n"
     493                    "  NAME(%%1):\n"
     494                    " %%endmacro\n"
    475495                    " [section .VTGPrLc.Start progbits alloc noexec write align=1]\n"
    476                     "    dd              42\n"   
    477                     "    dd              42\n"   
    478                     "    RTCCPTR_DEF     42\n"   
    479                     "    RTCCPTR_DEF     42\n"   
    480                     "    RTCCPTR_DEF     42\n"   
    481                     "GLOBALNAME g_aVTGPrLc\n"
     496                    "VTG_GLOBAL g_aVTGPrLc, data\n"
    482497                    " [section .VTGPrLc progbits alloc noexec write align=1]\n"
    483498                    " [section .VTGPrLc.End progbits alloc noexec write align=1]\n"
    484                     "GLOBALNAME g_aVTGPrLc_End\n"
    485                     "    dd              0xdeadbeef\n"   
    486                     "    dd              0xdeadbeef\n"   
    487                     "    RTCCPTR_DEF     0xdeadbeef\n"   
    488                     "    RTCCPTR_DEF     0xdeadbeef\n"   
    489                     "    RTCCPTR_DEF     0xdeadbeef\n"   
    490                     " [section .VTGObj progbits alloc noexec write align=4096]\n"
     499                    "VTG_GLOBAL g_aVTGPrLc_End, data\n"
     500                    " [section .VTGData progbits alloc noexec write align=4096]\n"
     501                    "\n"
    491502                    "%%else\n"
    492503                    " %%error \"ASM_FORMAT_XXX is not defined\"\n"
    493504                    "%%endif\n"
    494505                    "\n"
    495                     "GLOBALNAME g_VTGObjStart\n"
    496                     "    db          'VBoxTpG Obj v1', 0, 0\n"
    497                     "    RTCCPTR_DEF g_aVTGProviders\n"
    498                     "    RTCCPTR_DEF g_aVTGProviders_End     - g_aVTGProviders\n"
    499                     "    RTCCPTR_DEF g_aVTGProbes\n"
    500                     "    RTCCPTR_DEF g_aVTGProbes_End        - g_aVTGProbes\n"
    501                     "    RTCCPTR_DEF g_afVTGProbeEnabled\n"
    502                     "    RTCCPTR_DEF g_afVTGProbeEnabled_End - g_afVTGProbeEnabled\n"
    503                     "    RTCCPTR_DEF g_achVTGStringTable\n"
    504                     "    RTCCPTR_DEF g_achVTGStringTable_End - g_achVTGStringTable\n"
    505                     "    RTCCPTR_DEF g_aVTGArgLists\n"
    506                     "    RTCCPTR_DEF g_aVTGArgLists_End      - g_aVTGArgLists\n"
    507                     "    RTCCPTR_DEF g_aVTGPrLc\n"
    508                     "    RTCCPTR_DEF g_aVTGPrLc_End ; cross section/segment size not possible\n"
     506                    "\n"
     507                    "VTG_GLOBAL g_VTGObjHeader, data\n"
     508                    "                ;0         1         2         3\n"
     509                    "                ;012345678901234567890123456789012\n"
     510                    "    db          'VTG Object Header v1.0', 0, 0\n"
     511                    "    dd          %u\n"
     512                    "    dd          0\n"
     513                    "    RTCCPTR_DEF NAME(g_aVTGProviders)\n"
     514                    "    RTCCPTR_DEF NAME(g_aVTGProviders_End)     - NAME(g_aVTGProviders)\n"
     515                    "    RTCCPTR_DEF NAME(g_aVTGProbes)\n"
     516                    "    RTCCPTR_DEF NAME(g_aVTGProbes_End)        - NAME(g_aVTGProbes)\n"
     517                    "    RTCCPTR_DEF NAME(g_afVTGProbeEnabled)\n"
     518                    "    RTCCPTR_DEF NAME(g_afVTGProbeEnabled_End) - NAME(g_afVTGProbeEnabled)\n"
     519                    "    RTCCPTR_DEF NAME(g_achVTGStringTable)\n"
     520                    "    RTCCPTR_DEF NAME(g_achVTGStringTable_End) - NAME(g_achVTGStringTable)\n"
     521                    "    RTCCPTR_DEF NAME(g_aVTGArgLists)\n"
     522                    "    RTCCPTR_DEF NAME(g_aVTGArgLists_End)      - NAME(g_aVTGArgLists)\n"
     523                    "    RTCCPTR_DEF NAME(g_aVTGPrLc)\n"
     524                    "    RTCCPTR_DEF NAME(g_aVTGPrLc_End) ; cross section/segment size not possible\n"
    509525                    "    RTCCPTR_DEF 0\n"
    510526                    "    RTCCPTR_DEF 0\n"
     
    512528                    "    RTCCPTR_DEF 0\n"
    513529                    ,
    514                     g_pszScript);
     530                    g_pszScript, g_cBits);
    515531
    516532    /*
     
    523539                    "; cache and TLB hits when the probes are disabled.\n"
    524540                    ";\n"
    525                     "GLOBALNAME g_afVTGProbeEnabled\n"
     541                    "VTG_GLOBAL g_afVTGProbeEnabled, data\n"
    526542                    );
    527543    uint32_t        cProbes = 0;
     
    531547        {
    532548            ScmStreamPrintf(pStrm,
    533                             "GLOBALNAME g_fVTGProbeEnabled_%s_%s\n"
     549                            "VTG_GLOBAL g_fVTGProbeEnabled_%s_%s, data\n"
    534550                            "    db 0\n",
    535551                            pProvider->pszName, pProbe->pszName);
     
    537553        }
    538554    }
    539     ScmStreamPrintf(pStrm, "GLOBALNAME g_afVTGProbeEnabled_End\n");
     555    ScmStreamPrintf(pStrm, "VTG_GLOBAL g_afVTGProbeEnabled_End, data\n");
    540556    if (cProbes >= _32K)
    541557        return RTMsgErrorExit(RTEXITCODE_FAILURE, "Too many probes: %u (max %u)", cProbes, _32K - 1);
     
    549565                    "; The string table.\n"
    550566                    ";\n"
    551                     "GLOBALNAME g_achVTGStringTable\n");
     567                    "VTG_GLOBAL g_achVTGStringTable, data\n");
    552568    g_offStrTab = 0;
    553569    RTStrSpaceEnumerate(&g_StrSpace, generateAssemblyStrTabCallback, pStrm);
    554570    ScmStreamPrintf(pStrm,
    555                     "GLOBALNAME g_achVTGStringTable_End\n");
     571                    "VTG_GLOBAL g_achVTGStringTable_End, data\n");
    556572
    557573    /*
     
    563579                    "; The argument lists.\n"
    564580                    ";\n"
    565                     "GLOBALNAME g_aVTGArgLists\n");
     581                    "VTG_GLOBAL g_aVTGArgLists, data\n");
    566582    uint32_t off = 0;
    567583    RTListForEach(&g_ProviderHead, pProvider, VTGPROVIDER, ListEntry)
     
    621637    }
    622638    ScmStreamPrintf(pStrm,
    623                     "GLOBALNAME g_aVTGArgLists_End\n");
     639                    "VTG_GLOBAL g_aVTGArgLists_End, data\n");
    624640
    625641
     
    632648                    "; Prob definitions.\n"
    633649                    ";\n"
    634                     "GLOBALNAME g_aVTGProbes\n"
     650                    "VTG_GLOBAL g_aVTGProbes, data\n"
    635651                    "\n");
    636652    uint32_t iProvider = 0;
     
    642658        {
    643659            ScmStreamPrintf(pStrm,
    644                             "GLOBALNAME g_VTGProbeData_%s_%s ; idx=#%4u\n"
     660                            "VTG_GLOBAL g_VTGProbeData_%s_%s, data ; idx=#%4u\n"
    645661                            "    dd %6u  ; name\n"
    646662                            "    dd %6u  ; Argument list offset\n"
    647663                            "    dw g_fVTGProbeEnabled_%s_%s - g_afVTGProbeEnabled\n"
    648664                            "    dw %6u  ; provider index\n"
     665                            "    dd 0       ; for the application\n"
    649666                            ,
    650667                            pProvider->pszName, pProbe->pszName, iProbe,
     
    659676        iProvider++;
    660677    }
    661     ScmStreamPrintf(pStrm, "GLOBALNAME g_aVTGProbes_End\n");
     678    ScmStreamPrintf(pStrm, "VTG_GLOBAL g_aVTGProbes_End, data\n");
    662679
    663680    /*
     
    669686                    "; Provider data.\n"
    670687                    ";\n"
    671                     "GLOBALNAME g_aVTGProviders\n");
     688                    "VTG_GLOBAL g_aVTGProviders, data\n");
    672689    iProvider = 0;
    673690    RTListForEach(&g_ProviderHead, pProvider, VTGPROVIDER, ListEntry)
     
    696713        iProvider++;
    697714    }
    698     ScmStreamPrintf(pStrm, "GLOBALNAME g_aVTGProviders_End\n");
     715    ScmStreamPrintf(pStrm, "VTG_GLOBAL g_aVTGProviders_End, data\n");
    699716
    700717    /*
     
    715732            ScmStreamPrintf(pStrm,
    716733                            "\n"
    717                             "GLOBALNAME VTGProbeStub_%s_%s ; (VBOXTPGPROBELOC pVTGProbeLoc",
     734                            "VTG_GLOBAL VTGProbeStub_%s_%s, function; (VBOXTPGPROBELOC pVTGProbeLoc",
    718735                            pProvider->pszName, pProbe->pszName);
    719736            RTListForEach(&pProbe->ArgHead, pArg, VTGARG, ListEntry)
     
    862879                    "#define %s\n"
    863880                    "\n"
    864                     "#include <iprt/types.h>\n"
    865                     "\n"
    866                     "#ifdef _MSC_VER\n"
    867                     "# define DECL_DATA_SECT(scope, type, name, sect) __declspec(allocate(#sect)) scope type name\n"
    868                     "#elif defined(__GNUC__)\n"
    869                     "# ifdef RT_OS_DARWIN\n"
    870                     "#  define DECL_DATA_SECT(scope, type, name, sect) scope type __attribute__((section(#sect \",\" #sect))) name\n"
    871                     "# else\n"
    872                     "#  define DECL_DATA_SECT(scope, type, name, sect) scope type __attribute__((section(\".\" #sect))) name\n"
    873                     "# endif\n"
    874                     "#else\n"
    875                     "# error portme\n"
    876                     "#endif\n"
    877                     "\n"
    878                     "typedef struct VBOXTPGPROBELOC\n"
    879                     "{\n"
    880                     "    uint32_t    uLine    : 31;\n"
    881                     "    uint32_t    fEnabled : 1;\n"
    882                     "    uint32_t    idProbe;\n"
    883                     "    const char *pszFunction;\n"
    884                     "    const char *pszFile;\n"
    885                     "    uint8_t    *pbProbe;\n"
    886                     "} VBOXTPGPROBELOC;\n"
     881                    "#include <VBox/VBoxTpG.h>\n"
    887882                    "\n"
    888883                    "RT_C_DECLS_BEGIN\n"
     884                    "\n"
     885                    "#ifdef VBOX_WITH_DTRACE\n"
     886                    "\n"
    889887                    ,
    890888                    g_pszScript,
     
    896894     */
    897895    PVTGPROVIDER pProv;
     896    PVTGPROBE    pProbe;
     897    PVTGARG      pArg;
    898898    RTListForEach(&g_ProviderHead, pProv, VTGPROVIDER, ListEntry)
    899899    {
    900         PVTGPROBE pProbe;
    901900        RTListForEach(&pProv->ProbeHead, pProbe, VTGPROBE, ListEntry)
    902901        {
    903             PVTGARG pArg;
    904902            ScmStreamPrintf(pStrm,
    905903                            "extern bool    g_fVTGProbeEnabled_%s_%s;\n"
    906904                            "extern uint8_t g_VTGProbeData_%s_%s;\n"
    907                             "DECLASM(void)  VTGProbeStub_%s_%s(VBOXTPGPROBELOC *",
     905                            "DECLASM(void)  VTGProbeStub_%s_%s(PVTGPROBELOC",
    908906                            pProv->pszName, pProbe->pszName,
    909907                            pProv->pszName, pProbe->pszName,
     
    916914            ScmStreamPrintf(pStrm,
    917915                            ");\n"
    918                             "#define %s_ENABLED() \\\n"
     916                            "# define %s_ENABLED() \\\n"
    919917                            "    (RT_UNLIKELY(g_fVTGProbeEnabled_%s_%s)) \n"
    920                             "#define %s("
     918                            "# define %s("
    921919                            , szTmp,
    922920                            pProv->pszName, pProbe->pszName,
     
    932930                            ") \\\n"
    933931                            "    do { \\\n"
    934                             "        if (RT_UNLIKELY(/*g_fVTGProbeEnabled_%s_%s*/ true)) \\\n"
     932                            "        if (RT_UNLIKELY(g_fVTGProbeEnabled_%s_%s)) \\\n"
    935933                            "        { \\\n"
    936                             "            DECL_DATA_SECT(static, VBOXTPGPROBELOC, s_VTGProbeLoc, VTGPrLc) = \\\n"
     934                            "            VTG_DECL_VTGPROBELOC(s_VTGProbeLoc) = \\\n"
    937935                            "            { __LINE__, 0, UINT32_MAX, __PRETTY_FUNCTION__, __FILE__, &g_VTGProbeData_%s_%s }; \\\n"
    938936                            "            VTGProbeStub_%s_%s(&s_VTGProbeLoc",
     
    961959    }
    962960
     961    ScmStreamPrintf(pStrm,
     962                    "\n"
     963                    "#else\n"
     964                    "\n");
     965    RTListForEach(&g_ProviderHead, pProv, VTGPROVIDER, ListEntry)
     966    {
     967        RTListForEach(&pProv->ProbeHead, pProbe, VTGPROBE, ListEntry)
     968        {
     969            generateProbeDefineName(szTmp, sizeof(szTmp), pProv->pszName, pProbe->pszName);
     970            ScmStreamPrintf(pStrm,
     971                            "# define %s_ENABLED() (false)\n"
     972                            "# define %s("
     973                            , szTmp, szTmp);
     974            RTListForEach(&pProbe->ArgHead, pArg, VTGARG, ListEntry)
     975            {
     976                if (RTListNodeIsFirst(&pProbe->ArgHead, &pArg->ListEntry))
     977                    ScmStreamPrintf(pStrm, "%s", pArg->pszName);
     978                else
     979                    ScmStreamPrintf(pStrm, ", %s", pArg->pszName);
     980            }
     981            ScmStreamPrintf(pStrm,
     982                            ") do { } while (0)\n");
     983        }
     984    }
     985
    963986    ScmStreamWrite(pStrm, RT_STR_TUPLE("\n"
     987                                       "#endif\n"
     988                                       "\n"
    964989                                       "RT_C_DECLS_END\n"
    965990                                       "#endif\n"));
     
    14411466            break;
    14421467    }
    1443     if (!pProv)
     1468    if (RTListNodeIsDummy(&g_ProviderHead, pProv, VTGPROVIDER, ListEntry))
    14441469        return parseError(pStrm, cchName, "Provider not found");
    14451470
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