VBoxTpG.cpp revision 0c94a8282c9042b02f022302a3d987746140eab9
c79e39ad568d9af854765f64049534044ef6c034nd * IPRT Testcase / Tool - VBox Tracepoint Compiler.
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim * Copyright (C) 2012 Oracle Corporation
c79e39ad568d9af854765f64049534044ef6c034nd * This file is part of VirtualBox Open Source Edition (OSE), as
af4908211c0c00c219a691719fa9e8e12f42075dnd * available from http://www.virtualbox.org. This file is free software;
c79e39ad568d9af854765f64049534044ef6c034nd * you can redistribute it and/or modify it under the terms of the GNU
a8c35ec6f8811732d20d218531750ef139bde308nd * General Public License (GPL) as published by the Free Software
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem * Foundation, in version 2 as it comes in the "COPYING" file of the
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c79e39ad568d9af854765f64049534044ef6c034nd/*******************************************************************************
#include "scmstream.h"
typedef enum kVTGStability
typedef enum kVTGClass
kVTGClass_Invalid = 0,
} kVTGClass;
typedef struct VTGATTRS
} VTGATTRS;
typedef struct VTGARG
const char *pszName;
const char *pszType;
} VTGARG;
typedef struct VTGPROBE
const char *pszName;
} VTGPROBE;
typedef struct VTGPROVIDER
const char *pszName;
} VTGPROVIDER;
typedef struct VTGSTRING
} VTGSTRING;
static bool g_fApplyCpp = false;
#ifdef RT_OS_DARWIN
static unsigned g_cAssemblerOptions = 0;
if (pStr)
if (!pStr)
return NULL;
return RTEXITCODE_SKIPPED;
return RTMsgErrorExit(RTEXITCODE_FAILURE, "ScmStreamInitForWriting returned %Rrc when generating the %s file",
rcExit = RTMsgErrorExit(RTEXITCODE_FAILURE, "ScmStreamWriteToFile returned %Rrc when writing '%s' (%s)",
if (g_cVerbosity > 0)
const char *pszLine;
return rcExit;
char *psz;
if (cch)
return cch;
return cch;
return VINF_SUCCESS;
if (g_cVerbosity > 0)
g_offStrTab = 0;
return RTEXITCODE_SUCCESS;
if (!pszTempAsm)
return rcExit;
static RTEXITCODE generateProbeDefineName(char *pszBuf, size_t cbBuf, const char *pszProvider, const char *pszProbe)
return RTMsgErrorExit(RTEXITCODE_FAILURE, "Probe '%s' in provider '%s' ends up with a too long defined\n", pszProbe, pszProvider);
while (*pszProvider)
while (*pszProbe)
pszProbe++;
return RTEXITCODE_SUCCESS;
while (*psz)
psz++;
"# define DECL_DATA_SECT(scope, type, name, sect) scope type __attribute__((section(#sect \",\" #sect))) name\n"
"# define DECL_DATA_SECT(scope, type, name, sect) scope type __attribute__((section(#sect))) name\n"
szTmp);
, szTmp,
szTmp);
return RTEXITCODE_SUCCESS;
size_t const cchLeft = pStream->paLines[iLine].cch + pStream->paLines[iLine].off - (pStream->off - 1);
return NULL;
char ch;
off++;
return psz;
size_t const cchLeft = pStream->paLines[iLine].cch + pStream->paLines[iLine].off - (pStream->off - 1);
return NULL;
char ch;
off++;
return psz;
if (cb)
if (pszLine)
return RTEXITCODE_FAILURE;
return RTEXITCODE_SUCCESS;
unsigned ch;
return RTEXITCODE_SUCCESS;
return RTEXITCODE_FAILURE;
unsigned ch;
return RTEXITCODE_SUCCESS;
return rcExit;
unsigned ch;
return ch;
unsigned ch;
return ch;
return NULL;
switch (ch)
return kVTGStability_External;
return kVTGStability_Evolving;
return kVTGStability_Internal;
return kVTGStability_Obsolete;
return kVTGStability_Private;
return kVTGStability_Stable;
return kVTGStability_Standard;
return kVTGStability_Unstable;
return kVTGStability_Invalid;
switch (ch)
return kVTGClass_Common;
return kVTGClass_Cpu;
return kVTGClass_Group;
return kVTGClass_Isa;
return kVTGClass_Platform;
return kVTGClass_Unknown;
return kVTGClass_Invalid;
* "CodeStability/DataStability/DataDepClass" - no spaces allowed.
if (ch == ~(unsigned)0)
return RTEXITCODE_FAILURE;
return RTEXITCODE_FAILURE;
return RTEXITCODE_FAILURE;
return RTEXITCODE_FAILURE;
if (ch == ~(unsigned)0)
return RTEXITCODE_FAILURE;
if (!pszName)
if (!pProv)
if (!pszAspect)
return RTEXITCODE_SUCCESS;
if (ch == ~(unsigned)0)
if (ch == ~(unsigned)0)
return rcExit;
if (!pszProbe)
if (!pProbe)
switch (ch)
if (pArg)
if (!cchName)
return RTEXITCODE_SUCCESS;
if (!pszWord)
if (!pArg)
if (!pArg)
cchName = 0;
if (!pArg)
cchName = 0;
if (!pszName)
if (!pProv)
switch (ch)
return RTEXITCODE_SUCCESS;
return rcExit;
return RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed to open & read '%s' into memory: %Rrc", pszScript, rc);
if (g_cVerbosity > 0)
unsigned ch;
switch (ch)
if (ch == ~(unsigned)0)
return rcExit;
return rcExit;
int rc = RTGetOptInit(&GetOptState, argc, argv, &s_aOpts[0], RT_ELEMENTS(s_aOpts), 1, RTGETOPTINIT_FLAGS_OPTS_FIRST);
switch (rc)
case kVBoxTpGOpt_32Bit:
case kVBoxTpGOpt_64Bit:
g_fApplyCpp = true;
return RTEXITCODE_SUCCESS;
if (g_pszOutput)
if (g_pszScript)
g_cVerbosity++;
return RTEXITCODE_SUCCESS;
case VINF_GETOPT_NOT_OPTION:
case kVBoxTpGOpt_Assembler:
return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Too many assembly options (max %u)", RT_ELEMENTS(g_apszAssemblerOptions));
if (!g_pszScript)
if (!g_pszOutput)
return RTEXITCODE_SUCCESS;
return rcExit;