int foo(int i, int iZero, int iMinusOne) { NOREF(iZero); /* allocate a buffer which we fill up to the end. */ size_t cb = (i % 1555) + 32; g_cbFoo = cb; char *pv = (char *)alloca(cb); RTStrPrintf(pv, cb, "i=%d%*s\n", i, cb, ""); #ifdef VMM_R0_SWITCH_STACK g_cbFooUsed = VMM_STACK_SIZE - ((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack); RTTESTI_CHECK_MSG_RET(g_cbFooUsed < (intptr_t)VMM_STACK_SIZE - 128, ("%#x - (%p - %p) -> %#x; cb=%#x i=%d\n", VMM_STACK_SIZE, pv, g_Jmp.pvSavedStack, g_cbFooUsed, cb, i), -15); #elif defined(RT_ARCH_AMD64) g_cbFooUsed = (uintptr_t)g_Jmp.rsp - (uintptr_t)pv; RTTESTI_CHECK_MSG_RET(g_cbFooUsed < VMM_STACK_SIZE - 128, ("%p - %p -> %#x; cb=%#x i=%d\n", g_Jmp.rsp, pv, g_cbFooUsed, cb, i), -15); #elif defined(RT_ARCH_X86) g_cbFooUsed = (uintptr_t)g_Jmp.esp - (uintptr_t)pv; RTTESTI_CHECK_MSG_RET(g_cbFooUsed < (intptr_t)VMM_STACK_SIZE - 128, ("%p - %p -> %#x; cb=%#x i=%d\n", g_Jmp.esp, pv, g_cbFooUsed, cb, i), -15); #endif /* Do long jmps every 7th time */ if ((i % 7) == 0) { g_cJmps++; int rc = vmmR0CallRing3LongJmp(&g_Jmp, 42); if (!rc) return i + 10000; return -1; } NOREF(iMinusOne); return i; }
tstVMMConfigConstructor(PVM pVM, void *pvUser) { int rc = CFGMR3ConstructDefaultTree(pVM); if ( RT_SUCCESS(rc) && g_cCpus > 1) { PCFGMNODE pRoot = CFGMR3GetRoot(pVM); CFGMR3RemoveValue(pRoot, "NumCPUs"); rc = CFGMR3InsertInteger(pRoot, "NumCPUs", g_cCpus); RTTESTI_CHECK_MSG_RET(RT_SUCCESS(rc), ("CFGMR3InsertInteger(pRoot,\"NumCPUs\",) -> %Rrc\n", rc), rc); CFGMR3RemoveValue(pRoot, "HwVirtExtForced"); rc = CFGMR3InsertInteger(pRoot, "HwVirtExtForced", true); RTTESTI_CHECK_MSG_RET(RT_SUCCESS(rc), ("CFGMR3InsertInteger(pRoot,\"HwVirtExtForced\",) -> %Rrc\n", rc), rc); PCFGMNODE pHwVirtExt = CFGMR3GetChild(pRoot, "HWVirtExt"); CFGMR3RemoveNode(pHwVirtExt); rc = CFGMR3InsertNode(pRoot, "HWVirtExt", &pHwVirtExt); RTTESTI_CHECK_MSG_RET(RT_SUCCESS(rc), ("CFGMR3InsertNode(pRoot,\"HWVirtExt\",) -> %Rrc\n", rc), rc); rc = CFGMR3InsertInteger(pHwVirtExt, "Enabled", true); RTTESTI_CHECK_MSG_RET(RT_SUCCESS(rc), ("CFGMR3InsertInteger(pHwVirtExt,\"Enabled\",) -> %Rrc\n", rc), rc); rc = CFGMR3InsertInteger(pHwVirtExt, "64bitEnabled", false); RTTESTI_CHECK_MSG_RET(RT_SUCCESS(rc), ("CFGMR3InsertInteger(pHwVirtExt,\"64bitEnabled\",) -> %Rrc\n", rc), rc); } return rc; }
DECLCALLBACK(int) tst2(intptr_t i, intptr_t i2) { RTTESTI_CHECK_MSG_RET(i >= 0 && i <= 8192, ("i=%d is out of range [0..8192]\n", i), 1); RTTESTI_CHECK_MSG_RET(i2 == 0, ("i2=%d is out of range [0]\n", i2), 1); int iExpect = (i % 7) == 0 ? i + 10000 : i; int rc = foo(i, 0, -1); RTTESTI_CHECK_MSG_RET(rc == iExpect, ("i=%d rc=%d expected=%d\n", i, rc, iExpect), 1); return 0; }