Changeset 60749 in vbox for trunk/src/VBox/ValidationKit/bootsectors
- Timestamp:
- Apr 28, 2016 7:41:14 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 106941
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 4 added
- 11 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2-template.c
r60729 r60749 1445 1445 } 1446 1446 1447 #if TMPL_BITS == 16 1447 1448 1448 1449 /** … … 2046 2047 } 2047 2048 2049 BS3_DECL_FAR(uint8_t) BS3_CMN_FAR_NM(bs3CpuBasic2_sidt)(uint8_t bMode) 2050 { 2051 union 2052 { 2053 RTIDTR Idtr; 2054 uint8_t ab[16]; 2055 } Expected; 2056 2057 g_pszTestMode = Bs3GetModeName(bMode); 2058 g_bTestMode = bMode; 2059 g_f16BitSys = BS3_MODE_IS_16BIT_SYS(bMode); 2060 2061 2062 /* 2063 * Pass to common worker which is only compiled once per mode. 2064 */ 2065 Bs3MemZero(&Expected, sizeof(Expected)); 2066 ASMGetIDTR(&Expected.Idtr); 2067 bs3CpuBasic2_sidt_sgdt_Common(bMode, g_aSidtWorkers, RT_ELEMENTS(g_aSidtWorkers), Expected.ab); 2068 2069 /* 2070 * Re-initialize the IDT. 2071 */ 2072 Bs3TrapReInit(); 2073 return 0; 2074 } 2075 2076 2077 BS3_DECL_FAR(uint8_t) BS3_CMN_FAR_NM(bs3CpuBasic2_sgdt)(uint8_t bMode) 2078 { 2079 uint64_t const uOrgAddr = Bs3Lgdt_Gdt.uAddr; 2080 uint64_t uNew = 0; 2081 union 2082 { 2083 RTGDTR Gdtr; 2084 uint8_t ab[16]; 2085 } Expected; 2086 2087 g_pszTestMode = Bs3GetModeName(bMode); 2088 g_bTestMode = bMode; 2089 g_f16BitSys = BS3_MODE_IS_16BIT_SYS(bMode); 2090 2091 /* 2092 * If paged mode, try push the GDT way up. 2093 */ 2094 if (BS3_MODE_IS_PAGED(bMode)) 2095 { 2096 /** @todo loading non-canonical base addresses. */ 2097 int rc; 2098 uNew = BS3_MODE_IS_64BIT_SYS(bMode) ? UINT64_C(0xffff80fedcb70000) : UINT64_C(0xc2d28000); 2099 uNew |= uOrgAddr & X86_PAGE_OFFSET_MASK; 2100 rc = Bs3PagingAlias(uNew, uOrgAddr, Bs3Lgdt_Gdt.cb, X86_PTE_P | X86_PTE_RW | X86_PTE_US | X86_PTE_D | X86_PTE_A); 2101 if (RT_SUCCESS(rc)) 2102 { 2103 Bs3Lgdt_Gdt.uAddr = uNew; 2104 Bs3UtilSetFullGdtr(Bs3Lgdt_Gdt.cb, uNew); 2105 } 2106 } 2107 2108 /* 2109 * Pass to common worker which is only compiled once per mode. 2110 */ 2111 Bs3MemZero(&Expected, sizeof(Expected)); 2112 ASMGetGDTR(&Expected.Gdtr); 2113 bs3CpuBasic2_sidt_sgdt_Common(bMode, g_aSgdtWorkers, RT_ELEMENTS(g_aSgdtWorkers), Expected.ab); 2114 2115 /* 2116 * Unalias the GDT. 2117 */ 2118 if (uNew != 0) 2119 { 2120 Bs3Lgdt_Gdt.uAddr = uOrgAddr; 2121 Bs3UtilSetFullGdtr(Bs3Lgdt_Gdt.cb, uOrgAddr); 2122 Bs3PagingUnalias(uNew, Bs3Lgdt_Gdt.cb); 2123 } 2124 2125 /* 2126 * Re-initialize the IDT. 2127 */ 2128 Bs3TrapReInit(); 2129 return 0; 2130 } 2131 2132 2048 2133 2049 2134 /* … … 2751 2836 2752 2837 2838 BS3_DECL_FAR(uint8_t) BS3_CMN_FAR_NM(bs3CpuBasic2_lidt)(uint8_t bMode) 2839 { 2840 union 2841 { 2842 RTIDTR Idtr; 2843 uint8_t ab[32]; /* At least cbIdtr*2! */ 2844 } Expected; 2845 2846 g_pszTestMode = Bs3GetModeName(bMode); 2847 g_bTestMode = bMode; 2848 g_f16BitSys = BS3_MODE_IS_16BIT_SYS(bMode); 2849 2850 /* 2851 * Pass to common worker which is only compiled once per mode. 2852 */ 2853 Bs3MemZero(&Expected, sizeof(Expected)); 2854 ASMGetIDTR(&Expected.Idtr); 2855 2856 if (BS3_MODE_IS_RM_SYS(bMode)) 2857 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLidtWorkers, RT_ELEMENTS(g_aLidtWorkers), 2858 &Bs3Lidt_Ivt, sizeof(Bs3Lidt_Ivt), Expected.ab); 2859 else if (BS3_MODE_IS_16BIT_SYS(bMode)) 2860 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLidtWorkers, RT_ELEMENTS(g_aLidtWorkers), 2861 &Bs3Lidt_Idt16, sizeof(Bs3Lidt_Idt16), Expected.ab); 2862 else if (BS3_MODE_IS_32BIT_SYS(bMode)) 2863 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLidtWorkers, RT_ELEMENTS(g_aLidtWorkers), 2864 &Bs3Lidt_Idt32, sizeof(Bs3Lidt_Idt32), Expected.ab); 2865 else 2866 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLidtWorkers, RT_ELEMENTS(g_aLidtWorkers), 2867 &Bs3Lidt_Idt64, sizeof(Bs3Lidt_Idt64), Expected.ab); 2868 2869 /* 2870 * Re-initialize the IDT. 2871 */ 2872 Bs3TrapReInit(); 2873 return 0; 2874 } 2875 2876 2877 BS3_DECL_FAR(uint8_t) BS3_CMN_FAR_NM(bs3CpuBasic2_lgdt)(uint8_t bMode) 2878 { 2879 union 2880 { 2881 RTGDTR Gdtr; 2882 uint8_t ab[32]; /* At least cbIdtr*2! */ 2883 } Expected; 2884 2885 g_pszTestMode = Bs3GetModeName(bMode); 2886 g_bTestMode = bMode; 2887 g_f16BitSys = BS3_MODE_IS_16BIT_SYS(bMode); 2888 2889 /* 2890 * Pass to common worker which is only compiled once per mode. 2891 */ 2892 if (BS3_MODE_IS_RM_SYS(bMode)) 2893 ASMSetGDTR((PRTGDTR)&Bs3LgdtDef_Gdt); 2894 Bs3MemZero(&Expected, sizeof(Expected)); 2895 ASMGetGDTR(&Expected.Gdtr); 2896 2897 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLgdtWorkers, RT_ELEMENTS(g_aLgdtWorkers), 2898 &Bs3LgdtDef_Gdt, sizeof(Bs3LgdtDef_Gdt), Expected.ab); 2899 2900 /* 2901 * Re-initialize the IDT. 2902 */ 2903 Bs3TrapReInit(); 2904 return 0; 2905 } 2906 #endif /* TMPL_BITS == 16 */ 2907 2908 2753 2909 # if ARCH_BITS != 64 2754 2910 … … 2997 3153 2998 3154 3155 # if 0 2999 3156 BS3_DECL_FAR(uint8_t) TMPL_NM(bs3CpuBasic2_sidt)(uint8_t bMode) 3000 3157 { 3001 union3002 {3003 RTIDTR Idtr;3004 uint8_t ab[16];3005 } Expected;3006 3007 g_pszTestMode = TMPL_NM(g_szBs3ModeName);3008 g_bTestMode = bMode;3009 g_f16BitSys = BS3_MODE_IS_16BIT_SYS(TMPL_MODE);3010 3011 3158 BS3_ASSERT(bMode == TMPL_MODE); 3012 3013 /* 3014 * Pass to common worker which is only compiled once per mode. 3015 */ 3016 Bs3MemZero(&Expected, sizeof(Expected)); 3017 ASMGetIDTR(&Expected.Idtr); 3018 bs3CpuBasic2_sidt_sgdt_Common(bMode, g_aSidtWorkers, RT_ELEMENTS(g_aSidtWorkers), Expected.ab); 3019 3020 /* 3021 * Re-initialize the IDT. 3022 */ 3023 Bs3TrapInit(); 3024 return 0; 3159 return BS3_CMN_FAR_NM(bs3CpuBasic2_sidt)(bMode); 3025 3160 } 3026 3161 3027 3028 3162 BS3_DECL_FAR(uint8_t) TMPL_NM(bs3CpuBasic2_sgdt)(uint8_t bMode) 3029 3163 { 3030 uint64_t const uOrgAddr = Bs3Lgdt_Gdt.uAddr;3031 uint64_t uNew = 0;3032 union3033 {3034 RTGDTR Gdtr;3035 uint8_t ab[16];3036 } Expected;3037 3038 g_pszTestMode = TMPL_NM(g_szBs3ModeName);3039 g_bTestMode = bMode;3040 g_f16BitSys = BS3_MODE_IS_16BIT_SYS(TMPL_MODE);3041 3164 BS3_ASSERT(bMode == TMPL_MODE); 3042 3043 /* 3044 * If paged mode, try push the GDT way up. 3045 */ 3046 if (BS3_MODE_IS_PAGED(bMode)) 3047 { 3048 /** @todo loading non-canonical base addresses. */ 3049 int rc; 3050 uNew = BS3_MODE_IS_64BIT_SYS(bMode) ? UINT64_C(0xffff80fedcb70000) : UINT64_C(0xc2d28000); 3051 uNew |= uOrgAddr & X86_PAGE_OFFSET_MASK; 3052 rc = Bs3PagingAlias(uNew, uOrgAddr, Bs3Lgdt_Gdt.cb, X86_PTE_P | X86_PTE_RW | X86_PTE_US | X86_PTE_D | X86_PTE_A); 3053 if (RT_SUCCESS(rc)) 3054 { 3055 Bs3Lgdt_Gdt.uAddr = uNew; 3056 Bs3UtilSetFullGdtr(Bs3Lgdt_Gdt.cb, uNew); 3057 } 3058 } 3059 3060 /* 3061 * Pass to common worker which is only compiled once per mode. 3062 */ 3063 Bs3MemZero(&Expected, sizeof(Expected)); 3064 ASMGetGDTR(&Expected.Gdtr); 3065 bs3CpuBasic2_sidt_sgdt_Common(bMode, g_aSgdtWorkers, RT_ELEMENTS(g_aSgdtWorkers), Expected.ab); 3066 3067 /* 3068 * Unalias the GDT. 3069 */ 3070 if (uNew != 0) 3071 { 3072 Bs3Lgdt_Gdt.uAddr = uOrgAddr; 3073 Bs3UtilSetFullGdtr(Bs3Lgdt_Gdt.cb, uOrgAddr); 3074 Bs3PagingUnalias(uNew, Bs3Lgdt_Gdt.cb); 3075 } 3076 3077 /* 3078 * Re-initialize the IDT. 3079 */ 3080 Bs3TrapInit(); 3081 return 0; 3165 return BS3_CMN_FAR_NM(bs3CpuBasic2_sgdt)(bMode); 3082 3166 } 3083 3167 3084 3085 3168 BS3_DECL_FAR(uint8_t) TMPL_NM(bs3CpuBasic2_lidt)(uint8_t bMode) 3086 3169 { 3087 union3088 {3089 RTIDTR Idtr;3090 uint8_t ab[32]; /* At least cbIdtr*2! */3091 } Expected;3092 3093 g_pszTestMode = TMPL_NM(g_szBs3ModeName);3094 g_bTestMode = bMode;3095 g_f16BitSys = BS3_MODE_IS_16BIT_SYS(TMPL_MODE);3096 3097 3170 BS3_ASSERT(bMode == TMPL_MODE); 3098 3099 /* 3100 * Pass to common worker which is only compiled once per mode. 3101 */ 3102 Bs3MemZero(&Expected, sizeof(Expected)); 3103 ASMGetIDTR(&Expected.Idtr); 3104 3105 if (BS3_MODE_IS_RM_SYS(bMode)) 3106 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLidtWorkers, RT_ELEMENTS(g_aLidtWorkers), 3107 &Bs3Lidt_Ivt, sizeof(Bs3Lidt_Ivt), Expected.ab); 3108 else if (BS3_MODE_IS_16BIT_SYS(bMode)) 3109 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLidtWorkers, RT_ELEMENTS(g_aLidtWorkers), 3110 &Bs3Lidt_Idt16, sizeof(Bs3Lidt_Idt16), Expected.ab); 3111 else if (BS3_MODE_IS_32BIT_SYS(bMode)) 3112 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLidtWorkers, RT_ELEMENTS(g_aLidtWorkers), 3113 &Bs3Lidt_Idt32, sizeof(Bs3Lidt_Idt32), Expected.ab); 3114 else 3115 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLidtWorkers, RT_ELEMENTS(g_aLidtWorkers), 3116 &Bs3Lidt_Idt64, sizeof(Bs3Lidt_Idt64), Expected.ab); 3117 3118 /* 3119 * Re-initialize the IDT. 3120 */ 3121 Bs3TrapInit(); 3122 return 0; 3171 return BS3_CMN_FAR_NM(bs3CpuBasic2_lidt)(bMode); 3123 3172 } 3124 3173 3125 3174 BS3_DECL_FAR(uint8_t) TMPL_NM(bs3CpuBasic2_lgdt)(uint8_t bMode) 3126 3175 { 3127 union3128 {3129 RTGDTR Gdtr;3130 uint8_t ab[32]; /* At least cbIdtr*2! */3131 } Expected;3132 3133 g_pszTestMode = TMPL_NM(g_szBs3ModeName);3134 g_bTestMode = bMode;3135 g_f16BitSys = BS3_MODE_IS_16BIT_SYS(TMPL_MODE);3136 3137 3176 BS3_ASSERT(bMode == TMPL_MODE); 3138 3139 /* 3140 * Pass to common worker which is only compiled once per mode. 3141 */ 3142 if (BS3_MODE_IS_RM_SYS(bMode)) 3143 ASMSetGDTR((PRTGDTR)&Bs3LgdtDef_Gdt); 3144 Bs3MemZero(&Expected, sizeof(Expected)); 3145 ASMGetGDTR(&Expected.Gdtr); 3146 3147 bs3CpuBasic2_lidt_lgdt_Common(bMode, g_aLgdtWorkers, RT_ELEMENTS(g_aLgdtWorkers), 3148 &Bs3LgdtDef_Gdt, sizeof(Bs3LgdtDef_Gdt), Expected.ab); 3149 3150 /* 3151 * Re-initialize the IDT. 3152 */ 3153 Bs3TrapInit(); 3154 return 0; 3177 return BS3_CMN_FAR_NM(bs3CpuBasic2_lgdt)(bMode); 3155 3178 } 3179 # endif 3156 3180 3157 3181 #endif /* BS3_INSTANTIATING_MODE */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2.c
r60729 r60749 38 38 BS3TESTMODE_PROTOTYPES_MODE(bs3CpuBasic2_TssGateEsp); 39 39 BS3TESTMODE_PROTOTYPES_MODE(bs3CpuBasic2_RaiseXcpt1); 40 //BS3TESTMODE_PROTOTYPES_CMN(bs3CpuBasic2_iret);41 40 BS3TESTMODE_PROTOTYPES_MODE(bs3CpuBasic2_iret); 42 41 BS3TESTMODE_PROTOTYPES_MODE(bs3CpuBasic2_sidt); … … 45 44 BS3TESTMODE_PROTOTYPES_MODE(bs3CpuBasic2_lgdt); 46 45 46 FNBS3TESTDOMODE bs3CpuBasic2_sidt_f16; 47 FNBS3TESTDOMODE bs3CpuBasic2_sgdt_f16; 48 FNBS3TESTDOMODE bs3CpuBasic2_lidt_f16; 49 FNBS3TESTDOMODE bs3CpuBasic2_lgdt_f16; 50 FNBS3TESTDOMODE bs3CpuBasic2_iret_f16; 51 47 52 48 53 /********************************************************************************************************************************* 49 54 * Global Variables * 50 55 *********************************************************************************************************************************/ 56 #if 0 51 57 static const BS3TESTMODEENTRY g_aModeTest[] = 52 58 { 53 //BS3TESTMODEENTRY_MODE("tss / gate / esp", bs3CpuBasic2_TssGateEsp), 54 //BS3TESTMODEENTRY_CMN("iret", bs3CpuBasic2_iret), 59 #if 0 60 BS3TESTMODEENTRY_MODE("tss / gate / esp", bs3CpuBasic2_TssGateEsp), 61 BS3TESTMODEENTRY_MODE("raise xcpt #1", bs3CpuBasic2_RaiseXcpt1), 62 // BS3TESTMODEENTRY_MODE("sidt", bs3CpuBasic2_sidt), 63 // BS3TESTMODEENTRY_MODE("sgdt", bs3CpuBasic2_sgdt), 64 // BS3TESTMODEENTRY_MODE("lidt", bs3CpuBasic2_lidt), 65 // BS3TESTMODEENTRY_MODE("lgdt", bs3CpuBasic2_lgdt), 66 #endif 55 67 // BS3TESTMODEENTRY_MODE("iret", bs3CpuBasic2_iret), 56 #if 1 57 BS3TESTMODEENTRY_MODE("raise xcpt #1", bs3CpuBasic2_RaiseXcpt1), 58 BS3TESTMODEENTRY_MODE("sidt", bs3CpuBasic2_sidt), 59 BS3TESTMODEENTRY_MODE("sgdt", bs3CpuBasic2_sgdt), 68 }; 60 69 #endif 61 BS3TESTMODEENTRY_MODE("lidt", bs3CpuBasic2_lidt), 62 BS3TESTMODEENTRY_MODE("lgdt", bs3CpuBasic2_lgdt), 70 71 static const BS3TESTMODEBYONEENTRY g_aModeByOneTests[] = 72 { 73 //{ "iret", bs3CpuBasic2_iret_f16, 0 }, 74 { "lgdt", bs3CpuBasic2_lgdt_f16, 0 }, 63 75 }; 64 76 … … 70 82 Bs3TestPrintf("g_uBs3CpuDetected=%#x\n", g_uBs3CpuDetected); 71 83 72 Bs3TestDoModes_rm(g_aModeTest, RT_ELEMENTS(g_aModeTest)); 84 //Bs3TestDoModes_rm(g_aModeTest, RT_ELEMENTS(g_aModeTest)); 85 Bs3TestDoModesByOne_rm(g_aModeByOneTests, RT_ELEMENTS(g_aModeByOneTests), 0); 73 86 74 87 Bs3TestTerm(); 75 for (;;) { }88 for (;;) { ASMHalt(); } 76 89 } 77 90 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/Makefile.kmk
r60686 r60749 55 55 bs3-cmn-A20Disable.asm \ 56 56 bs3-cmn-A20Enable.asm \ 57 bs3-cmn-GetModeName.c \ 57 58 bs3-cmn-KbdRead.asm \ 58 59 bs3-cmn-KbdWait.asm \ … … 145 146 bs3-cmn-TestCheckRegCtxEx.c \ 146 147 bs3-cmn-TestPrintf.c \ 148 bs3-cmn-TrapReInit.c \ 147 149 bs3-cmn-TrapRmV86Init.c \ 148 150 bs3-cmn-TrapRmV86SetGate.c \ … … 161 163 bs3-cmn-UtilSetFullGdtr.asm \ 162 164 bs3-cmn-UtilSetFullIdtr.asm \ 165 bs3-cmn-TestDoModesByOneHlp.asm \ 163 166 ../../../Runtime/common/asm/ASMBitFirstClear.asm \ 164 167 ../../../Runtime/common/asm/ASMBitFirstSet.asm \ … … 281 284 bs3-mode-TrapSystemCallHandler.asm \ 282 285 bs3-mode-TestDoModes.c \ 286 bs3-mode-TestDoModesByOne.c \ 283 287 bs3-mode-TestDoModesHlp.asm \ 284 288 … … 290 294 bs3kit-rm_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 291 295 bs3-first-rm.asm \ 292 bs3-mode-CpuDetect.asm 296 bs3-mode-CpuDetect.asm \ 297 bs3-mode-TestDoModesByOneStub.asm \ 293 298 294 299 … … 300 305 bs3kit-pe16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 301 306 bs3-first-pe16.asm \ 307 bs3-mode-TestDoModesByOneStub.asm \ 302 308 # bs3-mode-CpuDetect.asm 303 309 … … 307 313 bs3kit-pe16_32_INSTTYPE = none 308 314 bs3kit-pe16_32_DEFS = TMPL_MODE=BS3_MODE_PE16_32 309 bs3kit-pe16_32_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 315 bs3kit-pe16_32_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 316 bs3-mode-TestDoModesByOneStub.asm \ 310 317 311 318 # The v86 BS3Kit library for 16-bit protected kernel+tss. … … 314 321 bs3kit-pe16_v86_INSTTYPE = none 315 322 bs3kit-pe16_v86_DEFS = TMPL_MODE=BS3_MODE_PE16_V86 316 bs3kit-pe16_v86_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 323 bs3kit-pe16_v86_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 324 bs3-mode-TestDoModesByOneStub.asm \ 317 325 318 326 # The 32-bit BS3Kit library for 32-bit protected kernel+tss. … … 328 336 bs3kit-pe32_16_INSTTYPE = none 329 337 bs3kit-pe32_16_DEFS = TMPL_MODE=BS3_MODE_PE32_16 330 bs3kit-pe32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 338 bs3kit-pe32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 339 bs3-mode-TestDoModesByOneStub.asm \ 331 340 332 341 # The v8086 BS3Kit library for 32-bit protected kernel+tss. … … 337 346 bs3kit-pev86_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 338 347 339 340 348 # The 16-bit BS3Kit library for 16-bit paged protected kernel+tss. 341 349 LIBRARIES += bs3kit-pp16 … … 344 352 bs3kit-pp16_DEFS = TMPL_MODE=BS3_MODE_PP16 345 353 bs3kit-pp16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 346 bs3-mode-CpuDetect.asm 354 bs3-mode-CpuDetect.asm \ 355 bs3-mode-TestDoModesByOneStub.asm \ 347 356 348 357 # The 32-bit BS3Kit library for 16-bit paged protected kernel+tss. … … 372 381 bs3kit-pp32_16_INSTTYPE = none 373 382 bs3kit-pp32_16_DEFS = TMPL_MODE=BS3_MODE_PP32_16 374 bs3kit-pp32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 383 bs3kit-pp32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 384 bs3-mode-TestDoModesByOneStub.asm \ 375 385 376 386 # The v8086 BS3Kit library for 32-bit paged protected kernel+tss. … … 388 398 bs3kit-pae16_DEFS = TMPL_MODE=BS3_MODE_PAE16 389 399 bs3kit-pae16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 390 bs3-mode-CpuDetect.asm 400 bs3-mode-CpuDetect.asm \ 401 bs3-mode-TestDoModesByOneStub.asm \ 391 402 392 403 # The 16-bit BS3Kit library for 16-bit PAE paged protected kernel+tss. … … 416 427 bs3kit-pae32_16_INSTTYPE = none 417 428 bs3kit-pae32_16_DEFS = TMPL_MODE=BS3_MODE_PAE32_16 418 bs3kit-pae32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 429 bs3kit-pae32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 430 bs3-mode-TestDoModesByOneStub.asm \ 419 431 420 432 # The v8086 BS3Kit library for 32-bit PAE paged protected kernel+tss. … … 431 443 bs3kit-lm16_INSTTYPE = none 432 444 bs3kit-lm16_DEFS = TMPL_MODE=BS3_MODE_LM16 433 bs3kit-lm16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 445 bs3kit-lm16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 446 bs3-mode-TestDoModesByOneStub.asm \ 434 447 435 448 # The 32-bit long mode BS3Kit library. -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxRestore.asm
r60657 r60749 35 35 TMPL_BEGIN_TEXT 36 36 BS3_EXTERN_CMN Bs3Syscall 37 BS3_EXTERN_CMN Bs3Panic 37 38 TMPL_BEGIN_TEXT 38 39 … … 80 81 81 82 .do_syscall_restore_ctx: 82 %if TMPL_BITS == 16 83 %if TMPL_BITS != 16 84 .do_syscall_restore_ctx_restore_ds: 85 mov cx, ds 86 mov xSI, [xBP + xCB*2] 87 movzx edx, word [xBP + xCB*3] 88 mov eax, BS3_SYSCALL_RESTORE_CTX 89 %else 83 90 mov si, [bp + xCB + cbCurRetAddr] 84 91 mov cx, [bp + xCB + cbCurRetAddr + 2] 85 92 mov dx, [bp + xCB + cbCurRetAddr + sCB] 86 93 mov ax, BS3_SYSCALL_RESTORE_CTX 87 %else88 mov cx, ds89 mov xSI, [xBP + xCB*2]90 movzx edx, word [xBP + xCB*3]91 mov eax, BS3_SYSCALL_RESTORE_CTX92 94 %endif 93 95 call Bs3Syscall 96 call Bs3Panic 97 98 %if TMPL_BITS == 16 99 .do_syscall_restore_ctx_restore_ds: 100 push es 101 pop ds 102 jmp .do_syscall_restore_ctx 103 %endif 94 104 95 105 ; … … 115 125 %endif 116 126 127 128 %if TMPL_BITS != 64 129 ; Restoring a 64-bit context is best done from 64-bit code. 130 mov al, [xBX + BS3REGCTX.bMode] 131 test al, BS3_MODE_CODE_64 132 jnz .do_syscall_restore_ctx_restore_ds 133 %endif 134 117 135 ; The remainder must be done with interrupts disabled. 118 136 cli … … 121 139 ; Update g_bs3CurrentMode. 122 140 ; 141 %if TMPL_BITS == 64 123 142 mov al, [xBX + BS3REGCTX.bMode] 143 %endif 124 144 and al, BS3_MODE_CODE_MASK 125 145 mov ah, [BS3_ONLY_16BIT(es:) BS3_DATA16_WRT(g_bBs3CurrentMode)] -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxSaveEx.asm
r60657 r60749 77 77 %if TMPL_BITS != 64 78 78 extern _Bs3RegCtxSave_c64 79 extern _Bs3SwitchTo%[TMPL_BITS]Bit_c64 79 80 %endif 80 81 … … 103 104 and dl, BS3_MODE_CODE_MASK 104 105 %if TMPL_BITS == 16 105 push dx ; xBP - xCB*1: save space forprevious CPU mode (16-bit)106 push dx ; bp - 2: previous CPU mode (16-bit) 106 107 %endif 107 108 … … 286 287 287 288 %if TMPL_BITS == 16 288 cmp byte [ xBP - xCB*1], BS3_MODE_CODE_16289 j ne.code_32_back_to_v86289 cmp byte [bp - 2], BS3_MODE_CODE_V86 290 je .code_32_back_to_v86 290 291 call _Bs3SwitchTo16Bit_c32 291 292 BS3_SET_BITS TMPL_BITS … … 328 329 call _Bs3RegCtxSave_c64 ; No BS3_CALL as rcx is already ready. 329 330 330 call _Bs3SwitchTo 16Bit_c32331 BS3_SET_BITS 16331 call _Bs3SwitchTo%[TMPL_BITS]Bit_c64 332 BS3_SET_BITS TMPL_BITS 332 333 jmp .return 333 334 %endif -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo64Bit.asm
r60527 r60749 74 74 push sAX 75 75 %if TMPL_BITS == 16 76 push dword .sixty_four_bit 76 push dword .sixty_four_bit wrt FLAT 77 77 o32 retf 78 78 %else -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TrapReInit.c
r60739 r60749 1 1 /* $Id$ */ 2 2 /** @file 3 * BS3Kit - Bs3Trap Init3 * BS3Kit - Bs3TrapReInit 4 4 */ 5 5 … … 32 32 33 33 34 #undef Bs3Trap Init35 BS3_ MODE_DEF(void, Bs3TrapInit,(void))34 #undef Bs3TrapReInit 35 BS3_CMN_DEF(void, Bs3TrapReInit,(void)) 36 36 { 37 #if BS3_MODE_IS_RM_SYS(TMPL_MODE) 38 Bs3TrapRmV86Init(); 39 #elif BS3_MODE_IS_16BIT_SYS(TMPL_MODE) 40 Bs3TrapRmV86Init(); 41 Bs3Trap16Init(); 42 #elif BS3_MODE_IS_32BIT_SYS(TMPL_MODE) 43 Bs3TrapRmV86Init(); 44 Bs3Trap32Init(); 45 #elif BS3_MODE_IS_64BIT_SYS(TMPL_MODE) 46 Bs3Trap64Init(); 47 #else 48 # error "TMPL_MODE" 49 #endif 37 if (BS3_MODE_IS_RM_SYS(g_bBs3CurrentMode)) 38 Bs3TrapRmV86Init(); 39 else if (BS3_MODE_IS_16BIT_SYS(g_bBs3CurrentMode)) 40 { 41 Bs3TrapRmV86Init(); 42 Bs3Trap16Init(); 43 } 44 else if (BS3_MODE_IS_32BIT_SYS(g_bBs3CurrentMode)) 45 { 46 Bs3TrapRmV86Init(); 47 Bs3Trap32Init(); 48 } 49 else 50 { 51 BS3_ASSERT(BS3_MODE_IS_64BIT_SYS(g_bBs3CurrentMode)); 52 Bs3Trap64Init(); 53 } 50 54 } 51 55 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-rm-InitAll.c
r60728 r60749 39 39 BS3_DECL(void) Bs3InitAll_rm(void) 40 40 { 41 uint32_t volatile BS3_FAR *pcTicks = (uint32_t volatile BS3_FAR *)BS3_FP_MAKE(0x40, 0x6c); 42 uint32_t cInitialTicks = *pcTicks; 43 int i = 3; 41 uint8_t volatile BS3_FAR *pcTicksFlpyOff; 44 42 43 /* 44 * Detect CPU first as the memory init code will otherwise use 386 45 * instrunctions and cause trouble on older CPUs. 46 */ 45 47 Bs3CpuDetect_rm_far(); 46 48 Bs3InitMemory_rm_far(); 47 49 Bs3InitGdt_rm_far(); 48 50 49 /* For for floppy to stop (a couple of ticks), then disable interrupts. */ 50 ASMIntEnable(); 51 while (i-- > 0) 51 /* 52 * Before we disable all interrupts, try convince the BIOS to stop the 53 * floppy motor, as it is kind of disturbing when the floppy light remains 54 * on for the whole testcase execution. 55 */ 56 ASMIntDisable(); /* (probably already disabled, but no guarantees) */ 57 pcTicksFlpyOff = (uint8_t volatile BS3_FAR *)BS3_FP_MAKE(0x40, 0x40); 58 if (*pcTicksFlpyOff) 52 59 { 60 uint32_t volatile BS3_FAR *pcTicks = (uint32_t volatile BS3_FAR *)BS3_FP_MAKE(0x40, 0x6c); 61 uint32_t cInitialTicks; 62 63 *pcTicksFlpyOff = 1; /* speed up the countdown, don't want to wait for two seconds here. */ 64 cInitialTicks = *pcTicks; 65 ASMIntEnable(); 66 53 67 while (*pcTicks == cInitialTicks) 54 68 ASMHalt(); 55 *pcTicks = cInitialTicks;56 69 } 57 70 ASMIntDisable(); 58 71 Bs3PicMaskAll(); 59 72 73 /* 74 * Initialize IDTs and such. 75 */ 60 76 if (g_uBs3CpuDetected & BS3CPU_F_LONG_MODE) 61 77 Bs3Trap64Init(); … … 65 81 Bs3Trap16Init(); 66 82 Bs3TrapRmV86Init(); 83 84 /* 85 * Perform a real-mode enter to make some final environment adjustments 86 * (like installing our syscall). 87 */ 67 88 Bs3EnteredMode_rm(); 68 89 } -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-autostubs.kmk
r60686 r60749 36 36 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TestCheckRegCtxEx) 37 37 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3StrCpy) 38 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3GetModeName) 38 39 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3PagingAlias) 39 40 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3PagingInitRootForLM) … … 105 106 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapDefaultHandler) 106 107 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapPrintFrame) 108 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapReInit) 107 109 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapRmV86Init) 108 110 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapRmV86InitEx) -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h
r60686 r60749 31 31 #define Bs3A20EnableViaKbd BS3_CMN_MANGLER(Bs3A20EnableViaKbd) 32 32 #define Bs3A20EnableViaPortA BS3_CMN_MANGLER(Bs3A20EnableViaPortA) 33 #define Bs3GetModeName BS3_CMN_MANGLER(Bs3GetModeName) 33 34 #define Bs3KbdRead BS3_CMN_MANGLER(Bs3KbdRead) 34 35 #define Bs3KbdWait BS3_CMN_MANGLER(Bs3KbdWait) … … 131 132 #define Bs3TrapDefaultHandler BS3_CMN_MANGLER(Bs3TrapDefaultHandler) 132 133 #define Bs3TrapPrintFrame BS3_CMN_MANGLER(Bs3TrapPrintFrame) 134 #define Bs3TrapReInit BS3_CMN_MANGLER(Bs3TrapReInit) 133 135 #define Bs3TrapRmV86Init BS3_CMN_MANGLER(Bs3TrapRmV86Init) 134 136 #define Bs3TrapRmV86InitEx BS3_CMN_MANGLER(Bs3TrapRmV86InitEx) … … 145 147 # define Bs3CpuDetect BS3_MODE_MANGLER(Bs3CpuDetect) 146 148 # define Bs3TestDoModes BS3_MODE_MANGLER(Bs3TestDoModes) 149 # define Bs3TestDoModesByOne BS3_MODE_MANGLER(Bs3TestDoModesByOne) 147 150 # define Bs3TrapInit BS3_MODE_MANGLER(Bs3TrapInit) 148 151 #endif /* !BS3_CMN_ONLY */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h
r60686 r60749 31 31 #undef Bs3A20EnableViaKbd 32 32 #undef Bs3A20EnableViaPortA 33 #undef Bs3GetModeName 33 34 #undef Bs3KbdRead 34 35 #undef Bs3KbdWait … … 131 132 #undef Bs3TrapDefaultHandler 132 133 #undef Bs3TrapPrintFrame 134 #undef Bs3TrapReInit 133 135 #undef Bs3TrapRmV86Init 134 136 #undef Bs3TrapRmV86InitEx … … 145 147 # undef Bs3CpuDetect 146 148 # undef Bs3TestDoModes 149 # undef Bs3TestDoModesByOne 147 150 # undef Bs3TrapInit 148 151 #endif /* !BS3_CMN_ONLY */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h
r60686 r60749 1442 1442 #endif 1443 1443 1444 1445 /** 1446 * Translate a mode into a string. 1447 * 1448 * @returns Pointer to read-only mode name string. 1449 * @param bMode The mode value (BS3_MODE_XXX). 1450 */ 1451 BS3_CMN_PROTO_STUB(const char BS3_FAR *, Bs3GetModeName,(uint8_t bMode)); 1452 1444 1453 /** 1445 1454 * Shutdown the system, never returns. … … 2482 2491 2483 2492 /** 2493 * Re-initializes the trap handling for the current mode. 2494 * 2495 * Useful after a test that messes with the IDT/IVT. 2496 * 2497 * @sa Bs3TrapInit 2498 */ 2499 BS3_CMN_PROTO_STUB(void, Bs3TrapReInit,(void)); 2500 2501 /** 2484 2502 * Initializes real mode and v8086 trap handling. 2485 2503 * … … 2944 2962 FNBS3TESTDOMODE RT_CONCAT(a_BaseNm, _lm32); \ 2945 2963 FNBS3TESTDOMODE RT_CONCAT(a_BaseNm, _lm64) 2964 2965 2966 /** 2967 * One worker drives all modes. 2968 * 2969 * This is an alternative to BS3TESTMODEENTRY where one worker, typically 2970 * 16-bit, does all the test driver work. It's called repeatedly from all 2971 * the modes being tested. 2972 */ 2973 typedef struct BS3TESTMODEBYONEENTRY 2974 { 2975 const char * BS3_FAR pszSubTest; 2976 PFNBS3TESTDOMODE pfnWorker; 2977 uint32_t u32Reserved; 2978 } BS3TESTMODEBYONEENTRY; 2979 /** Pointer to a mode-by-one sub-test entry. */ 2980 typedef BS3TESTMODEBYONEENTRY const *PCBS3TESTMODEBYONEENTRY; 2946 2981 2947 2982 … … 3160 3195 BS3_MODE_PROTO_NOSB(void, Bs3TestDoModes,(PCBS3TESTMODEENTRY paEntries, size_t cEntries)); 3161 3196 3197 /** 3198 * Executes the array of tests in every possibly mode, unitifed driver. 3199 * 3200 * This requires much less code space than Bs3TestDoModes as there is only one 3201 * instace of each sub-test driver code, instead of 3 (cmn) or 22 (per-mode) 3202 * copies. 3203 * 3204 * @param paEntries The mode sub-test-by-one entries. 3205 * @param cEntries The number of sub-test-by-one entries. 3206 * @param fFlags Reserved for the future, MBZ. 3207 */ 3208 BS3_MODE_PROTO_NOSB(void, Bs3TestDoModesByOne,(PCBS3TESTMODEBYONEENTRY paEntries, size_t cEntries, uint32_t fFlags)); 3209 3162 3210 3163 3211 /** @} */
Note:
See TracChangeset
for help on using the changeset viewer.