Changeset 60302 in vbox
- Timestamp:
- Apr 4, 2016 11:39:14 AM (9 years ago)
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2-c.c
r60291 r60302 57 57 Bs3InitAll_rm(); 58 58 Bs3TestInit("bs3-cpu-basic-2"); 59 Bs3TestPrintf("g_uBs3CpuDetected=%#x\n", g_uBs3CpuDetected); 59 60 60 61 Bs3TestDoModes_rm(g_aModeTest, RT_ELEMENTS(g_aModeTest)); -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2-template.c
r60296 r60302 107 107 #define g_f16BitSys BS3_CMN_NM(g_f16BitSys) 108 108 static bool g_f16BitSys = 1; 109 #define g_uLine BS3_CMN_NM(g_uLine)110 static unsigned g_uLine = 1;111 109 112 110 /** Table containing invalid CS selector types. */ … … 173 171 174 172 /** 175 * Wrapper around Bs3TestFailedF that prefixes the error with g_u Line and176 * g_pszTestMode.173 * Wrapper around Bs3TestFailedF that prefixes the error with g_usBs3TestStep 174 * and g_pszTestMode. 177 175 */ 176 #define bs3CpuBasic2_FailedF BS3_CMN_NM(bs3CpuBasic2_FailedF) 178 177 void bs3CpuBasic2_FailedF(const char *pszFormat, ...) 179 178 { … … 185 184 va_end(va); 186 185 187 Bs3TestFailedF("%u - %s: %s", g_u Line, g_pszTestMode, szTmp);186 Bs3TestFailedF("%u - %s: %s", g_usBs3TestStep, g_pszTestMode, szTmp); 188 187 } 189 188 … … 198 197 CHECK_MEMBER("bXcpt", "%#04x", pTrapCtx->bXcpt, bXcpt); 199 198 CHECK_MEMBER("bErrCd", "%#06RX64", pTrapCtx->uErrCd, 0); 200 Bs3TestCheckRegCtxEx(&pTrapCtx->Ctx, pStartCtx, 2 /*int xx*/, 0 /*cbSpAdjust*/, 0 /*fExtraEfl*/, g_pszTestMode, g_u Line);199 Bs3TestCheckRegCtxEx(&pTrapCtx->Ctx, pStartCtx, 2 /*int xx*/, 0 /*cbSpAdjust*/, 0 /*fExtraEfl*/, g_pszTestMode, g_usBs3TestStep); 201 200 if (Bs3TestSubErrorCount() != cErrorsBefore) 202 201 { 203 //Bs3TestPrintf("%s\n", __FUNCTION__);204 202 Bs3TrapPrintFrame(pTrapCtx); 205 ASMHalt(); 203 #if 1 204 Bs3TestPrintf("Halting: g_uBs3CpuDetected=%#x\n", BS3_DATA_NM(g_uBs3CpuDetected)); 205 Bs3TestPrintf("Halting in CompareTrapCtx1: bXcpt=%#x\n", bXcpt); 206 ASMHalt(); 207 #endif 206 208 } 207 209 } … … 219 221 CHECK_MEMBER("bErrCd", "%#06RX64", pTrapCtx->uErrCd, 0); 220 222 CHECK_MEMBER("uHandlerCs", "%#06x", pTrapCtx->uHandlerCs, uHandlerCs); 221 Bs3TestCheckRegCtxEx(&pTrapCtx->Ctx, pStartCtx, cbIpAdjust, 0 /*cbSpAdjust*/, 0 /*fExtraEfl*/, g_pszTestMode, g_u Line);223 Bs3TestCheckRegCtxEx(&pTrapCtx->Ctx, pStartCtx, cbIpAdjust, 0 /*cbSpAdjust*/, 0 /*fExtraEfl*/, g_pszTestMode, g_usBs3TestStep); 222 224 if (Bs3TestSubErrorCount() != cErrorsBefore) 223 225 { 224 //Bs3TestPrintf("%s\n", __FUNCTION__);225 226 Bs3TrapPrintFrame(pTrapCtx); 226 ASMHalt(); 227 #if 1 228 Bs3TestPrintf("Halting: g_uBs3CpuDetected=%#x\n", BS3_DATA_NM(g_uBs3CpuDetected)); 229 Bs3TestPrintf("Halting in CompareTrapCtx2: bXcpt=%#x\n", bXcpt); 230 ASMHalt(); 231 #endif 227 232 } 228 233 } … … 232 237 */ 233 238 #define bs3CpuBasic2_CompareCpuTrapCtx BS3_CMN_NM(bs3CpuBasic2_CompareCpuTrapCtx) 234 BS3_DECL(void) bs3CpuBasic2_CompareCpuTrapCtx(PCBS3TRAPFRAME pTrapCtx, PCBS3REGCTX pStartCtx, uint16_t uErrCd, uint8_t bXcpt) 239 BS3_DECL(void) bs3CpuBasic2_CompareCpuTrapCtx(PCBS3TRAPFRAME pTrapCtx, PCBS3REGCTX pStartCtx, uint16_t uErrCd, uint8_t bXcpt, 240 bool f486ResumeFlagHint) 235 241 { 236 242 uint16_t const cErrorsBefore = Bs3TestSubErrorCount(); 243 uint32_t fExtraEfl; 244 237 245 CHECK_MEMBER("bXcpt", "%#04x", pTrapCtx->bXcpt, bXcpt); 238 CHECK_MEMBER("bErrCd", "%#06RX64", pTrapCtx->uErrCd, (uint64_t)uErrCd); 239 Bs3TestCheckRegCtxEx(&pTrapCtx->Ctx, pStartCtx, 0 /*cbIpAdjust*/, 0 /*cbSpAdjust*/, 240 g_f16BitSys ? 0 : X86_EFL_RF, 241 g_pszTestMode, g_uLine); 246 CHECK_MEMBER("bErrCd", "%#06RX16", (uint16_t)pTrapCtx->uErrCd, (uint16_t)uErrCd); /* 486 only writes a word */ 247 248 fExtraEfl = X86_EFL_RF; 249 if ( g_f16BitSys 250 || ( !f486ResumeFlagHint 251 && (BS3_DATA_NM(g_uBs3CpuDetected) & BS3CPU_TYPE_MASK) <= BS3CPU_80486 ) ) 252 fExtraEfl = 0; 253 else 254 fExtraEfl = X86_EFL_RF; 255 Bs3TestCheckRegCtxEx(&pTrapCtx->Ctx, pStartCtx, 0 /*cbIpAdjust*/, 0 /*cbSpAdjust*/, fExtraEfl, g_pszTestMode, g_usBs3TestStep); 242 256 if (Bs3TestSubErrorCount() != cErrorsBefore) 243 257 { 244 //Bs3TestPrintf("%s\n", __FUNCTION__);245 258 Bs3TrapPrintFrame(pTrapCtx); 246 ASMHalt(); 259 #if 1 260 Bs3TestPrintf("Halting: g_uBs3CpuDetected=%#x\n", BS3_DATA_NM(g_uBs3CpuDetected)); 261 Bs3TestPrintf("Halting: bXcpt=%#x uErrCd=%#x\n", bXcpt, uErrCd); 262 ASMHalt(); 263 #endif 247 264 } 248 265 } … … 255 272 void bs3CpuBasic2_CompareGpCtx(PCBS3TRAPFRAME pTrapCtx, PCBS3REGCTX pStartCtx, uint16_t uErrCd) 256 273 { 257 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_GP );274 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_GP, true /*f486ResumeFlagHint*/); 258 275 } 259 276 … … 264 281 void bs3CpuBasic2_CompareNpCtx(PCBS3TRAPFRAME pTrapCtx, PCBS3REGCTX pStartCtx, uint16_t uErrCd) 265 282 { 266 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_NP );283 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_NP, true /*f486ResumeFlagHint*/); 267 284 } 268 285 … … 271 288 */ 272 289 #define bs3CpuBasic2_CompareSsCtx BS3_CMN_NM(bs3CpuBasic2_CompareSsCtx) 273 void bs3CpuBasic2_CompareSsCtx(PCBS3TRAPFRAME pTrapCtx, PCBS3REGCTX pStartCtx, uint16_t uErrCd )274 { 275 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_SS );290 void bs3CpuBasic2_CompareSsCtx(PCBS3TRAPFRAME pTrapCtx, PCBS3REGCTX pStartCtx, uint16_t uErrCd, bool f486ResumeFlagHint) 291 { 292 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_SS, f486ResumeFlagHint); 276 293 } 277 294 … … 282 299 void bs3CpuBasic2_CompareTsCtx(PCBS3TRAPFRAME pTrapCtx, PCBS3REGCTX pStartCtx, uint16_t uErrCd) 283 300 { 284 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_TS );301 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_TS, false /*f486ResumeFlagHint*/); 285 302 } 286 303 … … 293 310 uint64_t const uCr2Saved = pStartCtx->cr2.u; 294 311 pStartCtx->cr2.u = uCr2Expected; 295 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_PF );312 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, uErrCd, X86_XCPT_PF, true /*f486ResumeFlagHint*/); 296 313 pStartCtx->cr2.u = uCr2Saved; 297 314 } … … 303 320 void bs3CpuBasic2_CompareUdCtx(PCBS3TRAPFRAME pTrapCtx, PCBS3REGCTX pStartCtx) 304 321 { 305 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, 0 /*no error code*/, X86_XCPT_UD );322 bs3CpuBasic2_CompareCpuTrapCtx(pTrapCtx, pStartCtx, 0 /*no error code*/, X86_XCPT_UD, true /*f486ResumeFlagHint*/); 306 323 } 307 324 … … 394 411 for (iCtx = 0; iCtx < RT_ELEMENTS(apCtx8x); iCtx++) 395 412 { 396 g_u Line= iCtx;413 g_usBs3TestStep = iCtx; 397 414 # if TMPL_BITS == 32 398 415 BS3_DATA_NM(g_uBs3TrapEipHint) = apCtx8x[iCtx]->rip.u32; … … 405 422 * Check that the gate DPL checks works. 406 423 */ 407 g_u Line= 100;424 g_usBs3TestStep = 100; 408 425 for (iRing = 0; iRing <= 3; iRing++) 409 426 { … … 416 433 # endif 417 434 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); 418 g_uLine++;419 435 if (iCtx < iRing) 420 436 bs3CpuBasic2_CompareGpCtx(&TrapCtx, &CtxTmp, ((0x80 + iCtx) << X86_TRAP_ERR_SEL_SHIFT) | X86_TRAP_ERR_IDT); 421 437 else 422 438 bs3CpuBasic2_CompareIntCtx1(&TrapCtx, &CtxTmp, 0x80 + iCtx /*bXcpt*/); 439 g_usBs3TestStep++; 423 440 } 424 441 } … … 432 449 * 3. GATE.CS.DPL <= CPL (non-conforming segments) 433 450 */ 434 g_u Line= 1000;451 g_usBs3TestStep = 1000; 435 452 for (i = 0; i <= 3; i++) 436 453 { … … 450 467 for (k = 0; k < 2; k++) 451 468 { 452 g_u Line++;453 /*Bs3TestPrintf("g_u Line=%u iCtx=%u iRing=%u i=%u uCs=%04x\n", g_uLine, iCtx, iRing, i, uCs);*/469 g_usBs3TestStep++; 470 /*Bs3TestPrintf("g_usBs3TestStep=%u iCtx=%u iRing=%u i=%u uCs=%04x\n", g_usBs3TestStep, iCtx, iRing, i, uCs);*/ 454 471 paIdt[(0x80 + iCtx) << cIdteShift].Gate.u16Sel = uCs; 455 472 paIdt[(0x80 + iCtx) << cIdteShift].Gate.u1Present = k; … … 477 494 } 478 495 } 479 BS3_ASSERT(g_u Line< 1600);496 BS3_ASSERT(g_usBs3TestStep < 1600); 480 497 481 498 /* … … 486 503 * without making it impossible to handle faults. 487 504 */ 488 g_u Line= 1600;505 g_usBs3TestStep = 1600; 489 506 BS3_DATA_NM(Bs3GdteTestPage00) = BS3_DATA_NM(Bs3Gdt)[uSysR0Cs >> X86_SEL_SHIFT]; 490 507 BS3_DATA_NM(Bs3GdteTestPage00).Gen.u1Present = 0; … … 497 514 if (BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type & X86_SEL_TYPE_ACCESSED) 498 515 bs3CpuBasic2_FailedF("selector was accessed"); 499 g_u Line++;516 g_usBs3TestStep++; 500 517 501 518 /* Check that GATE.DPL is checked before CS.PRESENT. */ … … 508 525 if (BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type & X86_SEL_TYPE_ACCESSED) 509 526 bs3CpuBasic2_FailedF("selector was accessed"); 510 g_u Line++;527 g_usBs3TestStep++; 511 528 } 512 529 … … 517 534 if (BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type & X86_SEL_TYPE_ACCESSED) 518 535 bs3CpuBasic2_FailedF("CS selector was accessed"); 519 g_u Line++;536 g_usBs3TestStep++; 520 537 for (iDpl = 1; iDpl < 4; iDpl++) 521 538 { … … 525 542 if (BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type & X86_SEL_TYPE_ACCESSED) 526 543 bs3CpuBasic2_FailedF("CS selector was accessed"); 527 g_u Line++;528 } 529 530 /* Check all the invalid CS selector types alone. */544 g_usBs3TestStep++; 545 } 546 547 /* 1608: Check all the invalid CS selector types alone. */ 531 548 BS3_DATA_NM(Bs3GdteTestPage00) = BS3_DATA_NM(Bs3Gdt)[uSysR0Cs >> X86_SEL_SHIFT]; 532 549 for (i = 0; i < RT_ELEMENTS(g_aInvalidCsTypes); i++) … … 540 557 g_aInvalidCsTypes[i].u4Type, g_aInvalidCsTypes[i].u1DescType, 541 558 BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type, BS3_DATA_NM(Bs3GdteTestPage00).Gen.u1DescType); 542 g_u Line++;559 g_usBs3TestStep++; 543 560 544 561 /* Incorrect CS.TYPE takes precedence over CS.PRESENT = 0. */ … … 547 564 bs3CpuBasic2_CompareGpCtx(&TrapCtx, &Ctx80, BS3_SEL_TEST_PAGE_00); 548 565 BS3_DATA_NM(Bs3GdteTestPage00).Gen.u1Present = 1; 549 g_u Line++;566 g_usBs3TestStep++; 550 567 } 551 568 … … 553 570 BS3_DATA_NM(Bs3GdteTestPage00) = BS3_DATA_NM(Bs3Gdt)[uSysR0Cs >> X86_SEL_SHIFT]; 554 571 555 /* Test SS. */572 /* 1632: Test SS. */ 556 573 if (!BS3_MODE_IS_64BIT_SYS(g_bTestMode)) 557 574 { … … 571 588 if (!(BS3_DATA_NM(Bs3GdteTestPage02).Gen.u4Type & X86_SEL_TYPE_ACCESSED)) 572 589 bs3CpuBasic2_FailedF("CS selector was not access"); 573 g_u Line++;590 g_usBs3TestStep++; 574 591 575 592 /* Create a SS.DPL=2 stack segment and check that SS2.RPL matters and … … 614 631 { 615 632 *puTssSs2 = BS3_SEL_TEST_PAGE_03 | iRpl; 633 //Bs3TestPrintf("k=%u iDpl=%u iRpl=%u step=%u\n", k, iDpl, iRpl, g_usBs3TestStep); 616 634 BS3_DATA_NM(Bs3GdteTestPage02).Gen.u4Type &= ~X86_SEL_TYPE_ACCESSED; 617 635 BS3_DATA_NM(Bs3GdteTestPage03).Gen.u4Type &= ~X86_SEL_TYPE_ACCESSED; … … 620 638 bs3CpuBasic2_CompareTsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03); 621 639 else if (k != 0) 622 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03); 640 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03, 641 k == 2 /*f486ResumeFlagHint*/); 623 642 else 624 643 { … … 637 656 else if (BS3_DATA_NM(Bs3GdteTestPage03).Gen.u4Type & X86_SEL_TYPE_ACCESSED) 638 657 bs3CpuBasic2_FailedF("SS selector was accessed"); 639 g_u Line++;658 g_usBs3TestStep++; 640 659 641 660 /* Modify the gate DPL to check that this is checked before SS.DPL and SS.PRESENT. */ … … 644 663 bs3CpuBasic2_CompareGpCtx(&TrapCtx, &CtxTmp, (0x83 << X86_TRAP_ERR_SEL_SHIFT) | X86_TRAP_ERR_IDT); 645 664 paIdt[0x83 << cIdteShift].Gate.u2Dpl = 3; 646 g_u Line++;665 g_usBs3TestStep++; 647 666 648 667 /* Check the the CS.DPL check is done before the SS ones. Restoring the ring-0 INT 83 … … 650 669 Bs3TrapSetJmpAndRestore(&Ctx83, &TrapCtx); 651 670 bs3CpuBasic2_CompareGpCtx(&TrapCtx, &Ctx83, BS3_SEL_TEST_PAGE_02); 652 g_u Line++;671 g_usBs3TestStep++; 653 672 654 673 /* Now mark the CS selector not present and check that that also triggers before SS stuff. */ … … 657 676 bs3CpuBasic2_CompareNpCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_02); 658 677 BS3_DATA_NM(Bs3GdteTestPage02).Gen.u1Present = 1; 659 g_u Line++;678 g_usBs3TestStep++; 660 679 661 680 /* Make the CS selector some invalid type and check it triggers before SS stuff. */ … … 666 685 BS3_DATA_NM(Bs3GdteTestPage02).Gen.u4Type = X86_SEL_TYPE_ER_ACC; 667 686 BS3_DATA_NM(Bs3GdteTestPage02).Gen.u1DescType = 1; 668 g_u Line++;687 g_usBs3TestStep++; 669 688 670 689 /* Now, make the CS selector limit too small and that it triggers after SS trouble. */ … … 676 695 bs3CpuBasic2_CompareTsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03); 677 696 else if (k != 0) 678 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03 );697 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03, k == 2 /*f486ResumeFlagHint*/); 679 698 else 680 699 bs3CpuBasic2_CompareGpCtx(&TrapCtx, &CtxTmp, 0 /*uErrCd*/); 681 700 BS3_DATA_NM(Bs3GdteTestPage02) = BS3_DATA_NM(Bs3Gdt)[(uSysR0Cs + (2 << BS3_SEL_RING_SHIFT)) >> X86_SEL_SHIFT]; 682 g_u Line++;701 g_usBs3TestStep++; 683 702 } 684 703 } … … 691 710 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); 692 711 bs3CpuBasic2_CompareIntCtx1(&TrapCtx, &CtxTmp, 0x83); 693 g_u Line++;712 g_usBs3TestStep++; 694 713 for (i = 0; i < RT_ELEMENTS(g_aInvalidSsTypes); i++) 695 714 { … … 702 721 g_aInvalidSsTypes[i].u4Type, g_aInvalidSsTypes[i].u1DescType, 703 722 BS3_DATA_NM(Bs3GdteTestPage03).Gen.u4Type, BS3_DATA_NM(Bs3GdteTestPage03).Gen.u1DescType); 704 g_u Line++;723 g_usBs3TestStep++; 705 724 } 706 725 … … 727 746 /* First test, limit = max --> no bytes accessible --> #GP */ 728 747 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); 729 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03 );748 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03, true /*f486ResumeFlagHint*/); 730 749 731 750 /* Second test, limit = 0 --> all by zero byte accessible --> works */ … … 760 779 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); 761 780 bs3CpuBasic2_CompareUdCtx(&TrapCtx, &CtxTmp2); 762 g_u Line++;781 g_usBs3TestStep++; 763 782 764 783 /* Real run. */ … … 769 788 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); 770 789 if (i > 0) 771 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03 );790 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, BS3_SEL_TEST_PAGE_03, true /*f486ResumeFlagHint*/); 772 791 else 773 792 bs3CpuBasic2_CompareUdCtx(&TrapCtx, &CtxTmp2); 774 g_u Line++;793 g_usBs3TestStep++; 775 794 } 776 795 … … 797 816 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); 798 817 if (i > 0) 799 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, 0 /*BS3_SEL_TEST_PAGE_03*/ );818 bs3CpuBasic2_CompareSsCtx(&TrapCtx, &CtxTmp, 0 /*BS3_SEL_TEST_PAGE_03*/, true /*f486ResumeFlagHint*/); 800 819 else 801 820 bs3CpuBasic2_CompareUdCtx(&TrapCtx, &CtxTmp2); 802 g_u Line++;821 g_usBs3TestStep++; 803 822 } 804 823 … … 807 826 } 808 827 paIdt[0x80 << cIdteShift].Gate.u16Sel = uSysR0Cs; 809 BS3_ASSERT(g_u Line< 3000);828 BS3_ASSERT(g_usBs3TestStep < 3000); 810 829 811 830 /* 812 831 * Modify the gate CS value with a conforming segment. 813 832 */ 814 g_u Line= 3000;833 g_usBs3TestStep = 3000; 815 834 for (i = 0; i <= 3; i++) /* cs.dpl */ 816 835 { … … 828 847 { 829 848 uint16_t const uCs = (uSysR0CsConf | j) + (i << BS3_SEL_RING_SHIFT); 830 /*Bs3TestPrintf("g_u Line=%u iCtx=%u iRing=%u i=%u uCs=%04x\n", g_uLine, iCtx, iRing, i, uCs);*/849 /*Bs3TestPrintf("g_usBs3TestStep=%u iCtx=%u iRing=%u i=%u uCs=%04x\n", g_usBs3TestStep, iCtx, iRing, i, uCs);*/ 831 850 paIdt[(0x80 + iCtx) << cIdteShift].Gate.u16Sel = uCs; 832 851 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); 833 852 //Bs3TestPrintf("%u/%u/%u/%u: cs=%04x hcs=%04x xcpt=%02x\n", i, iRing, iCtx, j, uCs, TrapCtx.uHandlerCs, TrapCtx.bXcpt); 834 853 /*Bs3TrapPrintFrame(&TrapCtx);*/ 835 g_u Line++;854 g_usBs3TestStep++; 836 855 if (iCtx < iRing) 837 856 bs3CpuBasic2_CompareGpCtx(&TrapCtx, &CtxTmp, ((0x80 + iCtx) << X86_TRAP_ERR_SEL_SHIFT) | X86_TRAP_ERR_IDT); … … 845 864 } 846 865 } 847 BS3_ASSERT(g_u Line< 3500);866 BS3_ASSERT(g_usBs3TestStep < 3500); 848 867 849 868 /* … … 852 871 if (cIdteShift != 0) 853 872 { 854 g_u Line= 3500;873 g_usBs3TestStep = 3500; 855 874 for (i = 0; i <= 3; i++) 856 875 { … … 866 885 static const uint16_t s_auCSes[2] = { BS3_SEL_R0_CS16, BS3_SEL_R0_CS32 }; 867 886 uint16_t uCs = (s_auCSes[j] | i) + (i << BS3_SEL_RING_SHIFT); 868 g_u Line++;869 /*Bs3TestPrintf("g_u Line=%u iCtx=%u iRing=%u i=%u uCs=%04x\n", g_uLine, iCtx, iRing, i, uCs);*/887 g_usBs3TestStep++; 888 /*Bs3TestPrintf("g_usBs3TestStep=%u iCtx=%u iRing=%u i=%u uCs=%04x\n", g_usBs3TestStep, iCtx, iRing, i, uCs);*/ 870 889 paIdt[(0x80 + iCtx) << cIdteShift].Gate.u16Sel = uCs; 871 890 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); … … 880 899 } 881 900 } 882 BS3_ASSERT(g_u Line< 4000);901 BS3_ASSERT(g_usBs3TestStep < 4000); 883 902 } 884 903 … … 886 905 * IDT limit check. 887 906 */ 888 g_u Line= 5000;907 g_usBs3TestStep = 5000; 889 908 i = (0x80 << (cIdteShift + 3)) - 1; 890 909 j = (0x82 << (cIdteShift + 3)) - 1; 891 910 k = (0x83 << (cIdteShift + 3)) - 1; 892 for (; i <= k; i++, g_u Line++)911 for (; i <= k; i++, g_usBs3TestStep++) 893 912 { 894 913 Idtr = IdtrSaved; … … 902 921 } 903 922 ASMSetIDTR(&IdtrSaved); 904 BS3_ASSERT(g_u Line< 5100);923 BS3_ASSERT(g_usBs3TestStep < 5100); 905 924 906 925 # if TMPL_BITS != 16 /* Only do the paging related stuff in 32-bit and 64-bit modes. */ … … 915 934 * to real mode and back, reloading the default IDTR. 916 935 */ 917 g_u Line= 5200;936 g_usBs3TestStep = 5200; 918 937 if (BS3_MODE_IS_PAGED(g_bTestMode) && pbIdtCopyAlloc) 919 938 { … … 930 949 Bs3TrapSetJmpAndRestore(&Ctx81, &TrapCtx); 931 950 bs3CpuBasic2_CompareIntCtx1(&TrapCtx, &Ctx81, 0x81 /*bXcpt*/); 932 g_u Line++;951 g_usBs3TestStep++; 933 952 934 953 ASMSetIDTR(&Idtr); 935 954 Bs3TrapSetJmpAndRestore(&Ctx80, &TrapCtx); 936 955 bs3CpuBasic2_CompareIntCtx1(&TrapCtx, &Ctx80, 0x80 /*bXcpt*/); 937 g_u Line++;956 g_usBs3TestStep++; 938 957 939 958 rc = Bs3PagingProtect(uCr2Expected, _4K, 0 /*fSet*/, X86_PTE_P /*fClear*/); … … 943 962 Bs3TrapSetJmpAndRestore(&Ctx80, &TrapCtx); 944 963 bs3CpuBasic2_CompareIntCtx1(&TrapCtx, &Ctx80, 0x80 /*bXcpt*/); 945 g_u Line++;964 g_usBs3TestStep++; 946 965 947 966 ASMSetIDTR(&Idtr); 948 967 Bs3TrapSetJmpAndRestore(&Ctx81, &TrapCtx); 949 968 bs3CpuBasic2_ComparePfCtx(&TrapCtx, &Ctx81, 0 /*uErrCd*/, uCr2Expected); 950 g_u Line++;969 g_usBs3TestStep++; 951 970 952 971 Bs3PagingProtect(uCr2Expected, _4K, X86_PTE_P /*fSet*/, 0 /*fClear*/); … … 960 979 Bs3TrapSetJmpAndRestore(&Ctx81, &TrapCtx); 961 980 bs3CpuBasic2_ComparePfCtx(&TrapCtx, &Ctx81, 0 /*uErrCd*/, uCr2Expected); 962 g_u Line++;981 g_usBs3TestStep++; 963 982 964 983 Bs3PagingProtect(uCr2Expected, _4K, X86_PTE_P /*fSet*/, 0 /*fClear*/); … … 975 994 * The read/write and user/supervisor bits the IDT PTEs are irrelevant. 976 995 */ 977 g_u Line= 5300;996 g_usBs3TestStep = 5300; 978 997 if (BS3_MODE_IS_PAGED(g_bTestMode) && pbIdtCopyAlloc) 979 998 { … … 985 1004 Bs3TrapSetJmpAndRestore(&Ctx81, &TrapCtx); 986 1005 bs3CpuBasic2_CompareIntCtx1(&TrapCtx, &Ctx81, 0x81 /*bXcpt*/); 987 g_u Line++;1006 g_usBs3TestStep++; 988 1007 989 1008 rc = Bs3PagingProtect(Idtr.pIdt, _4K, 0 /*fSet*/, X86_PTE_RW | X86_PTE_US /*fClear*/); … … 993 1012 Bs3TrapSetJmpAndRestore(&Ctx81, &TrapCtx); 994 1013 bs3CpuBasic2_CompareIntCtx1(&TrapCtx, &Ctx81, 0x81 /*bXcpt*/); 995 g_u Line++;1014 g_usBs3TestStep++; 996 1015 997 1016 Bs3PagingProtect(Idtr.pIdt, _4K, X86_PTE_RW | X86_PTE_US /*fSet*/, 0 /*fClear*/); … … 1005 1024 */ 1006 1025 /** @todo Throw in SS.u1Accessed too. */ 1007 g_u Line= 5400;1026 g_usBs3TestStep = 5400; 1008 1027 if (BS3_MODE_IS_PAGED(g_bTestMode) && pbIdtCopyAlloc) 1009 1028 { … … 1022 1041 if (!(BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type & X86_SEL_TYPE_ACCESSED)) 1023 1042 bs3CpuBasic2_FailedF("u4Type=%#x, not accessed", BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type); 1024 g_u Line++;1043 g_usBs3TestStep++; 1025 1044 1026 1045 Bs3MemCpy(&CtxTmp, &Ctx83, sizeof(CtxTmp)); … … 1032 1051 if (TrapCtx.uHandlerCs != (BS3_SEL_TEST_PAGE_03 | 3)) 1033 1052 bs3CpuBasic2_FailedF("uHandlerCs=%#x, expected %#x", TrapCtx.uHandlerCs, (BS3_SEL_TEST_PAGE_03 | 3)); 1034 g_u Line++;1053 g_usBs3TestStep++; 1035 1054 1036 1055 /* … … 1052 1071 if (!(BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type & X86_SEL_TYPE_ACCESSED)) 1053 1072 bs3CpuBasic2_FailedF("u4Type=%#x, not accessed!", BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type); 1054 g_u Line++;1073 g_usBs3TestStep++; 1055 1074 1056 1075 /* ring-3 handler */ … … 1061 1080 if (!(BS3_DATA_NM(Bs3GdteTestPage03).Gen.u4Type & X86_SEL_TYPE_ACCESSED)) 1062 1081 bs3CpuBasic2_FailedF("u4Type=%#x, not accessed!", BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type); 1063 g_u Line++;1082 g_usBs3TestStep++; 1064 1083 1065 1084 /* clear WP and repeat the above. */ … … 1073 1092 if (!(BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type & X86_SEL_TYPE_ACCESSED)) 1074 1093 bs3CpuBasic2_FailedF("u4Type=%#x, not accessed!", BS3_DATA_NM(Bs3GdteTestPage00).Gen.u4Type); 1075 g_u Line++;1094 g_usBs3TestStep++; 1076 1095 1077 1096 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); … … 1079 1098 if (!(BS3_DATA_NM(Bs3GdteTestPage03).Gen.u4Type & X86_SEL_TYPE_ACCESSED)) 1080 1099 bs3CpuBasic2_FailedF("u4Type=%#x, not accessed!n", BS3_DATA_NM(Bs3GdteTestPage03).Gen.u4Type); 1081 g_u Line++;1100 g_usBs3TestStep++; 1082 1101 1083 1102 Bs3PagingProtect(GdtrSaved.pGdt + BS3_SEL_TEST_PAGE_00, 8, X86_PTE_RW /*fSet*/, 0 /*fClear*/); … … 1097 1116 Bs3TrapSetJmpAndRestore(&Ctx80, &TrapCtx); 1098 1117 bs3CpuBasic2_ComparePfCtx(&TrapCtx, &Ctx80, 0 /*uErrCd*/, GdtrSaved.pGdt + BS3_SEL_TEST_PAGE_00); 1099 g_u Line++;1118 g_usBs3TestStep++; 1100 1119 1101 1120 /* Do it from ring-3 to check ErrCd, which doesn't set X86_TRAP_PF_US it turns out. */ … … 1105 1124 1106 1125 bs3CpuBasic2_ComparePfCtx(&TrapCtx, &CtxTmp, 0 /*uErrCd*/, GdtrSaved.pGdt + BS3_SEL_TEST_PAGE_03); 1107 g_u Line++;1126 g_usBs3TestStep++; 1108 1127 1109 1128 Bs3PagingProtect(GdtrSaved.pGdt + BS3_SEL_TEST_PAGE_00, 8, X86_PTE_P /*fSet*/, 0 /*fClear*/); … … 1124 1143 * Check broad EFLAGS effects. 1125 1144 */ 1126 g_u Line= 5600;1145 g_usBs3TestStep = 5600; 1127 1146 for (iCtx = 0; iCtx < RT_ELEMENTS(apCtx8x); iCtx++) 1128 1147 { … … 1156 1175 bs3CpuBasic2_FailedF("unexpected handler rflags value: %RX64 expected %RX32; CtxTmp.rflags=%RX64 Ctx.rflags=%RX64\n", 1157 1176 TrapCtx.fHandlerRfl, uExpected, CtxTmp.rflags.u, TrapCtx.Ctx.rflags.u); 1158 g_u Line++;1177 g_usBs3TestStep++; 1159 1178 1160 1179 /* all cleared */ … … 1172 1191 bs3CpuBasic2_FailedF("unexpected handler rflags value: %RX64 expected %RX32; CtxTmp.rflags=%RX64 Ctx.rflags=%RX64\n", 1173 1192 TrapCtx.fHandlerRfl, uExpected, CtxTmp.rflags.u, TrapCtx.Ctx.rflags.u); 1174 g_u Line++;1193 g_usBs3TestStep++; 1175 1194 } 1176 1195 } … … 1182 1201 * Check invalid gate types. 1183 1202 */ 1184 g_u Line= 32000;1203 g_usBs3TestStep = 32000; 1185 1204 for (iRing = 0; iRing <= 3; iRing++) 1186 1205 { … … 1221 1240 ? (s_auCSes[j] | i) + (i << BS3_SEL_RING_SHIFT) 1222 1241 : s_auCSes[j] | i; 1223 /*Bs3TestPrintf("g_u Line=%u iCtx=%u iRing=%u i=%u uCs=%04x type=%#x\n", g_uLine, iCtx, iRing, i, uCs, pauInvTypes[iType]);*/1242 /*Bs3TestPrintf("g_usBs3TestStep=%u iCtx=%u iRing=%u i=%u uCs=%04x type=%#x\n", g_usBs3TestStep, iCtx, iRing, i, uCs, pauInvTypes[iType]);*/ 1224 1243 paIdt[(0x80 + iCtx) << cIdteShift].Gate.u16Sel = uCs; 1225 1244 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); 1226 g_u Line++;1245 g_usBs3TestStep++; 1227 1246 bs3CpuBasic2_CompareGpCtx(&TrapCtx, &CtxTmp, ((0x80 + iCtx) << X86_TRAP_ERR_SEL_SHIFT) | X86_TRAP_ERR_IDT); 1228 1247 … … 1230 1249 paIdt[(0x80 + iCtx) << cIdteShift].Gate.u1Present = 0; 1231 1250 Bs3TrapSetJmpAndRestore(&CtxTmp, &TrapCtx); 1232 g_u Line++;1251 g_usBs3TestStep++; 1233 1252 bs3CpuBasic2_CompareGpCtx(&TrapCtx, &CtxTmp, ((0x80 + iCtx) << X86_TRAP_ERR_SEL_SHIFT) | X86_TRAP_ERR_IDT); 1234 1253 paIdt[(0x80 + iCtx) << cIdteShift].Gate.u1Present = 1; … … 1243 1262 } 1244 1263 } 1245 BS3_ASSERT(g_u Line < 62000U && g_uLine> 32000U);1264 BS3_ASSERT(g_usBs3TestStep < 62000U && g_usBs3TestStep > 32000U); 1246 1265 1247 1266 … … 1273 1292 BS3TRAPFRAME TrapCtx; 1274 1293 uint8_t *pbTmp; 1275 g_u Line= uLine;1294 g_usBs3TestStep = uLine; 1276 1295 1277 1296 Bs3MemCpy(&Ctx2, pCtx, sizeof(Ctx2)); … … 1349 1368 */ 1350 1369 Bs3TrapSetJmpAndRestore(&Ctx, &TrapCtx); 1351 g_u Line= __LINE__;1370 g_usBs3TestStep = __LINE__; 1352 1371 bs3CpuBasic2_CompareIntCtx1(&TrapCtx, &Ctx, 0x80 /*bXcpt*/); 1353 1372 … … 1366 1385 { 1367 1386 /* same ring */ 1368 g_u Line= __LINE__;1387 g_usBs3TestStep = __LINE__; 1369 1388 Bs3MemCpy(&Ctx2, &Ctx, sizeof(Ctx2)); 1370 1389 Ctx2.rsp.u = Bs3SelPtrToFlat(pbAltStack + 0x1980); -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/Makefile.kmk
r60291 r60302 84 84 bs3-cmn-PagingInitRootForLM.c \ 85 85 bs3-cmn-PagingProtect.c \ 86 bs3-cmn-PicMaskAll.c \ 86 87 bs3-cmn-RegCtxRestore.asm \ 87 88 bs3-cmn-RegCtxConvertToRingX.c \ -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PagingProtect.c
r60231 r60302 92 92 { 93 93 X86PT BS3_FAR *pPT; 94 uint32_t uPte = (pPD->a[iPde].u & ~(uint32_t)(X86_P DE_PS | X86_PTE_G)) | X86_PTE_D;95 if ( !pPD->a[iPde].b.u1Global)94 uint32_t uPte = (pPD->a[iPde].u & ~(uint32_t)(X86_PTE_PG_MASK | X86_PDE4M_PS | X86_PDE4M_G)) | X86_PTE_D; 95 if (pPD->a[iPde].b.u1Global) 96 96 uPte |= X86_PTE_G; 97 if ( !pPD->a[iPde].b.u1PAT)97 if (pPD->a[iPde].b.u1PAT) 98 98 uPte |= X86_PTE_PAT; 99 99 … … 107 107 pPD->a[iPde].u = Bs3SelPtrToFlat(pPT) 108 108 | (pPD->a[iPde].u & ~(uint32_t)(X86_PTE_PG_MASK | X86_PDE4M_PS | X86_PDE4M_G | X86_PDE4M_D)); 109 BS3PAGING_DPRINTF(("bs3PagingGetLegacyPte: iPde=%#x: %#RX32\n", iPde, pPD->a[iPde].u)); 109 110 if (fUseInvlPg) 110 111 ASMInvalidatePage(uFlat); … … 222 223 int rc; 223 224 225 BS3PAGING_DPRINTF(("Bs3PagingProtect: reloading cr3=%RX32\n", (uint32_t)cr3)); 226 ASMSetCR3(cr3); 227 224 228 /* 225 229 * Adjust the range parameters. … … 288 292 * Flush the TLB if we didn't use INVLPG above. 289 293 */ 294 BS3PAGING_DPRINTF(("Bs3PagingProtect: reloading cr3=%RX32\n", (uint32_t)cr3)); 290 295 //if (!fUseInvlPg) 291 296 ASMSetCR3(cr3); 297 BS3PAGING_DPRINTF(("Bs3PagingProtect: reloaded cr3=%RX32\n", (uint32_t)cr3)); 292 298 293 299 return VINF_SUCCESS; -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TestData.c
r59865 r60302 40 40 /** Indicates whether the VMMDev is operational. */ 41 41 bool g_fbBs3VMMDevTesting = true; 42 43 /** Alignment padding. */ 44 bool g_fTestDataPadding0 = true; 42 45 43 46 /** The number of tests that have failed. */ … … 99 102 char g_szBs3SubTest[64]; 100 103 104 /** The current test step. */ 105 uint16_t g_usBs3TestStep; 106 101 107 #endif /* ARCH_BITS == 16 */ 102 108 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TrapPrintFrame.c
r60097 r60302 33 33 BS3_DECL(void) Bs3TrapPrintFrame(PCBS3TRAPFRAME pTrapFrame) 34 34 { 35 Bs3TestPrintf("Trap %#04x errcd=%#06RX64 at %04x:%016RX64 \n",35 Bs3TestPrintf("Trap %#04x errcd=%#06RX64 at %04x:%016RX64 - test step %d (%#x)\n", 36 36 pTrapFrame->bXcpt, 37 37 pTrapFrame->uErrCd, 38 38 pTrapFrame->Ctx.cs, 39 pTrapFrame->Ctx.rip.u64); 39 pTrapFrame->Ctx.rip.u64, 40 g_usBs3TestStep, g_usBs3TestStep); 40 41 Bs3RegCtxPrint(&pTrapFrame->Ctx); 41 42 } -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-CpuDetect.asm
r59949 r60302 189 189 cpuid 190 190 191 ; Calc the basic family valuebefore we mess up EAX.191 ; Calc the extended family and model values before we mess up EAX. 192 192 mov cl, ah 193 193 and cl, 0fh 194 cmp cl, 0fh 195 jnz .not_extended_family 196 mov ecx, eax 197 shr ecx, 20 198 and cl, 7fh 199 add cl, 0fh 200 .not_extended_family: ; cl = family 201 mov ch, al 202 shr ch, 4 203 cmp cl, 0fh 204 jae .extended_model 205 cmp cl, 06h ; actually only intel, but we'll let this slip for now. 206 jne .done_model 207 .extended_model: 208 shr eax, 12 209 and al, 0f0h 210 or ch, al 211 .done_model: ; ch = model 194 212 195 213 ; Start assembling return flags, checking for PAE. … … 198 216 shl dx, BS3CPU_F_PAE_BIT - X86_CPUID_FEATURE_EDX_PAE_BIT 199 217 or ax, dx 200 201 ; Add the CPU type based on the family value. 218 ;; @todo check for PSE 219 220 ; Add the CPU type based on the family and model values. 202 221 cmp cl, 6 203 or al, BS3CPU_PPro 204 jz .return 222 jne .not_family_06h 223 mov al, BS3CPU_PPro 224 cmp ch, 1 225 jbe .return 226 mov al, BS3CPU_PProOrNewer 227 jmp .NewerThanPPro 228 229 .not_family_06h: 205 230 ja .NewerThanPPro 206 231 cmp cl, 5 207 oral, BS3CPU_Pentium232 mov al, BS3CPU_Pentium 208 233 je .return 209 234 cmp cl, 4 210 oral, BS3CPU_80486235 mov al, BS3CPU_80486 211 236 je .return 212 237 cmp cl, 3 213 or al, BS3CPU_80386 214 je .return 238 mov al, BS3CPU_80386 239 je .return 240 215 241 .NewerThanPPro: 216 242 217 243 ; Check for extended leaves and long mode. 218 push xAX ; save PAE flag244 push xAX ; save PAE+PProOrNewer 219 245 mov eax, 0x80000000 220 246 cpuid … … 225 251 mov eax, 0x80000001 226 252 cpuid 227 pop xAX ; restore PAE flag253 pop xAX ; restore PAE+PProOrNewer 228 254 test edx, X86_CPUID_EXT_FEATURE_EDX_LONG_MODE 229 255 jz .no_long_mode 230 or xAX, BS3CPU_PProOrNewer |BS3CPU_F_CPUID_EXT_LEAVES | BS3CPU_F_LONG_MODE256 or ax, BS3CPU_F_CPUID_EXT_LEAVES | BS3CPU_F_LONG_MODE 231 257 jmp .return 232 258 .no_long_mode: 233 or xAX, BS3CPU_PProOrNewer |BS3CPU_F_CPUID_EXT_LEAVES259 or ax, BS3CPU_F_CPUID_EXT_LEAVES 234 260 jmp .return 235 261 .no_ext_leaves: 236 pop xAX ; restore PAE flag 237 or al, BS3CPU_PProOrNewer 262 pop xAX ; restore PAE+PProOrNewer 238 263 239 264 CPU 8086 … … 242 267 ; Save the return value. 243 268 ; 244 BS3_ONLY_16BIT_STMT push ds245 BS3_ONLY_16BIT_STMT mov bx, seg g_uBs3CpuDetected246 BS3_ONLY_16BIT_STMT mov ds, bx247 269 mov [BS3_DATA16_WRT(g_uBs3CpuDetected)], ax 248 BS3_ONLY_16BIT_STMT pop ds249 270 250 271 ; … … 257 278 pop xBP 258 279 ret 280 259 281 BS3_PROC_END_MODE Bs3CpuDetect 260 282 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-rm-InitAll.c
r60194 r60302 31 31 #include "bs3kit-template-header.h" 32 32 #include "bs3-cmn-test.h" 33 #include <iprt/asm-amd64-x86.h> 33 34 34 35 … … 37 38 Bs3CpuDetect_rm(); 38 39 Bs3InitMemory_rm(); 40 41 ASMIntDisable(); 42 Bs3PicMaskAll(); 43 39 44 if (BS3_DATA_NM(g_uBs3CpuDetected) & BS3CPU_F_LONG_MODE) 40 45 Bs3Trap64Init(); -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h
r60291 r60302 1862 1862 1863 1863 /** 1864 * Disables all IRQs on the PIC. 1865 */ 1866 BS3_DECL(void) Bs3PicMaskAll_c16(void); 1867 BS3_DECL(void) Bs3PicMaskAll_c32(void); /**< @copydoc Bs3PicMaskAll_c16 */ 1868 BS3_DECL(void) Bs3PicMaskAll_c64(void); /**< @copydoc Bs3PicMaskAll_c16 */ 1869 #define Bs3PicMaskAll BS3_CMN_NM(Bs3PicMaskAll) /**< Selects #Bs3PicMaskAll_c16, #Bs3PicMaskAll_c32 or #Bs3PicMaskAll_c64. */ 1870 1871 1872 1873 /** 1864 1874 * BS3 integer register. 1865 1875 */ … … 2240 2250 2241 2251 /** 2252 * The current test step. 2253 */ 2254 extern uint16_t BS3_DATA_NM(g_usBs3TestStep); 2255 #define g_usBs3TestStep BS3_DATA_NM(g_usBs3TestStep) 2256 2257 /** 2242 2258 * Equivalent to RTTestCreate + RTTestBanner. 2243 2259 *
Note:
See TracChangeset
for help on using the changeset viewer.