tstInt.cpp revision 5537ea44398e6dd578ca702ac6fb038b8795dbeb
/** $Id$ */
/** @file
* Testcase: Test the interrupt gate feature of the support library.
*/
/*
* Copyright (C) 2006-2007 innotek GmbH
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License as published by the Free Software Foundation,
* in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
* distribution. VirtualBox OSE is distributed in the hope that it will
* be useful, but WITHOUT ANY WARRANTY of any kind.
*/
/*******************************************************************************
* Header Files *
*******************************************************************************/
/**
* Makes a path to a file in the executable directory.
*/
{
char *psz;
char *psz2;
if (!psz)
if (!psz)
{
}
return pszFile;
}
{
int rcRet = 0;
int i;
int rc;
if (cIterations == 0)
cIterations = 64;
/*
* Init.
*/
RTR3Init();
if (!rc)
{
/*
* Load VMM code.
*/
char szFile[RTPATH_MAX];
if (!rc)
{
/*
* Create a fake 'VM'.
*/
if (paPages)
else
rc = VERR_NO_MEMORY;
if (VBOX_SUCCESS(rc))
{
if (!rc)
{
/*
* Call VMM code with invalid function.
*/
for (i = cIterations; i > 0; i--)
{
if (rc != VINF_SUCCESS)
{
rcRet++;
break;
}
}
/*
* Profile it.
*/
if (!rc)
{
RTTimeNanoTS();
for (i = 0; i < 1000000; i++)
{
{
rcRet++;
break;
}
}
RTPrintf("tstInt: SUPCallVMMR0 - %d iterations in %llu ns / %llu ticks. %llu ns / %#llu ticks per iteration. Min %llu ticks.\n",
#ifdef VBOX_WITH_IDT_PATCHING
/*
* The fast path.
*/
RTTimeNanoTS();
StartTS = RTTimeNanoTS();
StartTick = ASMReadTSC();
for (i = 0; i < 1000000; i++)
{
{
rcRet++;
break;
}
}
RTPrintf("tstInt: SUPCallVMMR0Fast - %d iterations in %llu ns / %llu ticks. %llu ns / %#llu ticks per iteration. Min %llu ticks.\n",
#endif /* VBOX_WITH_IDT_PATCHING */
/*
* The ordinary path.
*/
RTTimeNanoTS();
StartTS = RTTimeNanoTS();
StartTick = ASMReadTSC();
for (i = 0; i < 1000000; i++)
{
{
rcRet++;
break;
}
}
RTPrintf("tstInt: SUPCallVMMR0Ex - %d iterations in %llu ns / %llu ticks. %llu ns / %#llu ticks per iteration. Min %llu ticks.\n",
}
}
else
{
rcRet++;
}
}
else
{
rcRet++;
}
/*
* Unload VMM.
*/
rc = SUPUnloadVMM();
if (rc)
{
rcRet++;
}
}
else
{
rcRet++;
}
/*
* Terminate.
*/
}
return !!rc;
}