- Timestamp:
- Mar 24, 2016 5:31:54 PM (9 years ago)
- Location:
- trunk/src/VBox/ValidationKit/bootsectors
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2-template.c
r60132 r60184 69 69 */ 70 70 static void bs3CpuBasic2_TssGateEsp_AltStackOuterRing(PCBS3REGCTX pCtx, uint8_t bRing, uint8_t *pbAltStack, size_t cbAltStack, 71 bool f16BitStack, bool f16BitTss, const char *pszMode, unsigned uLine) 72 { 71 bool f16BitStack, bool f16BitTss, bool f16BitHandler, 72 const char *pszMode, unsigned uLine) 73 { 74 uint8_t const cbIretFrame = f16BitHandler ? 5*2 : 5*4; 73 75 BS3REGCTX Ctx2; 74 76 BS3TRAPFRAME TrapCtx; … … 91 93 bs3CpuBasic2_CompareTrapCtx1(&TrapCtx, &Ctx2, 2 /*int 80h*/, 0x80 /*bXcpt*/, pszMode, uLine); 92 94 CHECK_MEMBER("bCpl", "%u", TrapCtx.Ctx.bCpl, bRing); 95 CHECK_MEMBER("cbIretFrame", "%#x", TrapCtx.cbIretFrame, cbIretFrame); 93 96 94 97 if (pbAltStack) 95 98 { 96 uint64_t uExpectedRsp = f16BitTss ? Bs3Tss16.sp0 : Bs3Tss32.esp0;99 uint64_t uExpectedRsp = (f16BitTss ? Bs3Tss16.sp0 : Bs3Tss32.esp0) - cbIretFrame; 97 100 if (f16BitStack) 98 101 { … … 126 129 unsigned uLine; 127 130 const char *pszMode = BS3_DATA_NM(TMPL_NM(g_szBs3ModeName)); 128 129 pbTmp = NULL; NOREF(pbTmp); uLine = 0; NOREF(uLine); NOREF(pszMode); 131 bool const f16BitSys = BS3_MODE_IS_16BIT_SYS(TMPL_MODE); 132 133 pbTmp = NULL; NOREF(pbTmp); uLine = 0; NOREF(uLine); NOREF(pszMode); NOREF(f16BitSys); 130 134 131 135 /* make sure they're allocated */ … … 168 172 bs3CpuBasic2_CompareTrapCtx1(&TrapCtx, &Ctx, 2 /*int 80h*/, 0x80 /*bXcpt*/, pszMode, __LINE__); 169 173 170 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 1, NULL, 0, BS3_MODE_IS_16BIT_SYS(TMPL_MODE), 171 BS3_MODE_IS_16BIT_SYS(TMPL_MODE), pszMode, __LINE__); 172 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 2, NULL, 0, BS3_MODE_IS_16BIT_SYS(TMPL_MODE), 173 BS3_MODE_IS_16BIT_SYS(TMPL_MODE), pszMode, __LINE__); 174 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 3, NULL, 0, BS3_MODE_IS_16BIT_SYS(TMPL_MODE), 175 BS3_MODE_IS_16BIT_SYS(TMPL_MODE), pszMode, __LINE__); 174 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 1, NULL, 0, f16BitSys, f16BitSys, f16BitSys, pszMode, __LINE__); 175 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 2, NULL, 0, f16BitSys, f16BitSys, f16BitSys, pszMode, __LINE__); 176 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 3, NULL, 0, f16BitSys, f16BitSys, f16BitSys, pszMode, __LINE__); 176 177 177 178 /* … … 202 203 203 204 /* Different rings (load SS0:SP0 from TSS). */ 204 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 1, pbAltStack, cbAltStack, BS3_MODE_IS_16BIT_SYS(TMPL_MODE),205 BS3_MODE_IS_16BIT_SYS(TMPL_MODE), pszMode, __LINE__);206 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 2, pbAltStack, cbAltStack, BS3_MODE_IS_16BIT_SYS(TMPL_MODE),207 BS3_MODE_IS_16BIT_SYS(TMPL_MODE), pszMode, __LINE__);208 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 3, pbAltStack, cbAltStack, BS3_MODE_IS_16BIT_SYS(TMPL_MODE),209 BS3_MODE_IS_16BIT_SYS(TMPL_MODE), pszMode, __LINE__);205 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 1, pbAltStack, cbAltStack, 206 f16BitSys, f16BitSys, f16BitSys, pszMode, __LINE__); 207 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 2, pbAltStack, cbAltStack, 208 f16BitSys, f16BitSys, f16BitSys, pszMode, __LINE__); 209 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 3, pbAltStack, cbAltStack, 210 f16BitSys, f16BitSys, f16BitSys, pszMode, __LINE__); 210 211 211 212 /* Different rings but switch the SS bitness in the TSS. */ 212 # if TMPL_BITS == 16213 # if BS3_MODE_IS_16BIT_SYS(TMPL_MODE) 213 214 Bs3Tss16.ss0 = BS3_SEL_R0_SS32; 214 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 1, pbAltStack, cbAltStack, false, true, pszMode, __LINE__); 215 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 1, pbAltStack, cbAltStack, 216 false, f16BitSys, f16BitSys, pszMode, __LINE__); 215 217 Bs3Tss16.ss0 = BS3_SEL_R0_SS16; 216 218 # else 217 219 Bs3Tss32.ss0 = BS3_SEL_R0_SS16; 218 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 1, pbAltStack, cbAltStack, true, false, pszMode, __LINE__); 220 bs3CpuBasic2_TssGateEsp_AltStackOuterRing(&Ctx, 1, pbAltStack, cbAltStack, 221 true, f16BitSys, f16BitSys, pszMode, __LINE__); 219 222 Bs3Tss32.ss0 = BS3_SEL_R0_SS32; 220 223 # endif -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c16-Trap16Generic.asm
r60132 r60184 460 460 ; Copy iret info. 461 461 ; 462 lea cx, [bp + 2] 463 mov [ss:bx + BS3TRAPFRAME.uHandlerRsp], cx 462 464 mov cx, [bp + 2] 463 465 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.rip], cx … … 483 485 mov cx, [bp + 8] 484 486 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.rsp], cx 485 lea ax, [bp + 12] 486 mov [ss:bx + BS3TRAPFRAME.uHandlerRsp], ax 487 mov byte [ss:bx + BS3TRAPFRAME.cbIretFrame], 5*2 487 488 test dx, dx 488 489 jnz .iret_frame_done … … 494 495 lea cx, [bp + 8] 495 496 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.rsp], cx 496 mov [ss:bx + BS3TRAPFRAME.uHandlerRsp], cx497 mov byte [ss:bx + BS3TRAPFRAME.cbIretFrame], 3*2 497 498 test dx, dx 498 499 jnz .iret_frame_done … … 521 522 mov cx, [bp + 18] 522 523 mov [ss:bx + BS3TRAPFRAME.Ctx + BS3REGCTX.gs], cx 523 lea ax, [bp + 20] 524 mov [ss:bx + BS3TRAPFRAME.uHandlerRsp], ax 524 mov byte [ss:bx + BS3TRAPFRAME.cbIretFrame], 9*2 525 525 jmp .iret_frame_done 526 526 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-c32-Trap32Generic.asm
r60132 r60184 127 127 push eax ; -08h 128 128 push edi ; -0ch 129 push ss ; -10h 130 push ds ; -14h 129 lea eax, [esp + (4 + 1)*4] ; 4 pushes above, 1 exception number push. 130 push eax ; -10h = handler ESP 131 add eax, 3*4 ; 3 dword iret frame 132 push eax ; -14h = caller ESP if same CPL 133 push ss ; -18h 134 push ds ; -1ch 131 135 132 136 ; Make sure we've got a flat DS (ASSUMES ring-0). It makes everything so much simpler. … … 147 151 jmp .stack_flat 148 152 .stack_thunk: 149 hlt150 153 mov di, ss 151 154 and edi, X86_SEL_MASK_OFF_RPL … … 161 164 mov ss, di 162 165 mov esp, eax 166 sub dword [ebp - 10h], (4+1)*4 ; Recalc handler ESP in case of wraparound. 167 add word [ebp - 10h], (4+1)*4 168 sub dword [ebp - 10h], (4+1+3)*4 ; Recalc caller ESP in case of wraparound. 169 add word [ebp - 10h], (4+1+3)*4 163 170 .stack_flat: 164 171 … … 184 191 mov eax, [ebp - 0ch] 185 192 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.rdi], eax 186 mov ax, [ebp - 10h] 193 mov eax, [ebp - 10h] 194 mov [edi + BS3TRAPFRAME.uHandlerRsp], eax 195 mov eax, [ebp - 14h] 196 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.rsp], eax 197 mov ax, [ebp - 18h] 187 198 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.ss], ax 188 199 mov [edi + BS3TRAPFRAME.uHandlerSs], ax 189 mov ax, [ebp - 1 4h]200 mov ax, [ebp - 1ch] 190 201 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.ds], ax 191 202 … … 206 217 push eax ; -08h 207 218 push edi ; -0ch 208 push ss ; -10h 209 push ds ; -14h 219 lea eax, [esp + (4+1+1)*4] ; 4 pushes above, 1 exception number push, 1 error code. 220 push eax ; -10h = handler ESP 221 add eax, 3*4 ; 3 dword iret frame 222 push eax ; -14h = caller ESP if same CPL 223 push ss ; -18h 224 push ds ; -1ch 210 225 211 226 ; Make sure we've got a flat DS (ASSUMES ring-0). It makes everything so much simpler. … … 222 237 test eax, X86LAR_F_D 223 238 jz .stack_thunk 224 mov ax, BS3_SEL_R0_SS 16239 mov ax, BS3_SEL_R0_SS32 225 240 mov ss, ax 226 241 jmp .stack_flat … … 236 251 movzx edi, sp ; SS:SP -> flat ESP in EAX. 237 252 add eax, edi 238 mov di, BS3_SEL_R0_SS 16253 mov di, BS3_SEL_R0_SS32 239 254 mov ss, di 240 255 mov esp, eax 256 sub dword [ebp - 10h], (4+1+1)*4 ; Recalc handler ESP in case of wraparound. 257 add word [ebp - 10h], (4+1+1)*4 258 sub dword [ebp - 14h], (4+1+1+3)*4 ; Recalc caller ESP in case of wraparound. 259 add word [ebp - 14h], (4+1+1+3)*4 241 260 .stack_flat: 242 261 … … 265 284 mov eax, [ebp - 0ch] 266 285 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.rdi], eax 267 mov ax, [ebp - 10h] 286 mov eax, [ebp - 10h] 287 mov [edi + BS3TRAPFRAME.uHandlerRsp], eax 288 mov eax, [ebp - 14h] 289 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.rsp], eax 290 mov ax, [ebp - 18h] 268 291 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.ss], ax 269 292 mov [edi + BS3TRAPFRAME.uHandlerSs], ax 270 mov ax, [ebp - 1 4h]293 mov ax, [ebp - 1ch] 271 294 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.ds], ax 272 295 … … 283 306 ; - bXcpt 284 307 ; - uErrCd 285 ; - fHandlerRFL 308 ; - fHandlerRfl 309 ; - uHandlerRsp 286 310 ; - uHandlerSs 287 ; - Ctx.rax (except upper dword) 288 ; - Ctx.rbp (except upper dword) 289 ; - Ctx.rdi (except upper dword) 311 ; - Ctx.rax 312 ; - Ctx.rbp 313 ; - Ctx.rdi 314 ; - Ctx.rsp - assuming same CPL 290 315 ; - Ctx.ds 291 316 ; - Ctx.ss … … 358 383 mov cx, [ebp + 20] 359 384 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.ss], cx 360 lea eax, [ebp + 24] 361 mov [edi + BS3TRAPFRAME.uHandlerRsp], eax 362 jmp .iret_frame_done 363 364 .iret_frame_same_cpl: 365 lea ecx, [ebp + 16] 366 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.rsp], ecx 367 mov [edi + BS3TRAPFRAME.uHandlerRsp], ecx 385 mov byte [edi + BS3TRAPFRAME.cbIretFrame], 5*4 368 386 jmp .iret_frame_done 369 387 … … 383 401 mov cx, [ebp + 36] 384 402 mov [edi + BS3TRAPFRAME.Ctx + BS3REGCTX.gs], cx 385 lea eax, [ebp + 40] 386 mov [edi + BS3TRAPFRAME.uHandlerRsp], eax 403 mov byte [edi + BS3TRAPFRAME.cbIretFrame], 9*4 387 404 jmp .iret_frame_done 405 406 .iret_frame_same_cpl: ; (caller already set SS:RSP and uHandlerRsp for same CPL iret frames) 407 mov byte [edi + BS3TRAPFRAME.cbIretFrame], 3*4 388 408 389 409 .iret_frame_done: … … 487 507 mov [edi + BS3TRAPFRAME.uHandlerCs], cs 488 508 mov [edi + BS3TRAPFRAME.uHandlerSs], ss 489 lea ecx, [ebp + 12]509 lea ecx, [ebp + 3*4] ; two pushes, one error code. 490 510 mov [edi + BS3TRAPFRAME.uHandlerRsp], ecx 491 511 mov ecx, [ebp + 8] -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-mode-TestDoModes.c
r60097 r60184 171 171 BS3_DECL(void) TMPL_NM(Bs3TestDoModes)(PCBS3TESTMODEENTRY paEntries, size_t cEntries) 172 172 { 173 bool const fVerbose = true; 173 174 bool const fDoV86Modes = true; 174 175 bool const fDoWeirdV86Modes = true; … … 194 195 Bs3TestSub(paEntries[i].pszSubTest); 195 196 197 #define PRE_DO_CALL(a_szModeName) do { if (fVerbose) Bs3TestPrintf("...%s\n", a_szModeName); } while (0) 196 198 #define CHECK_RESULT(a_szModeName) \ 197 199 do { \ … … 207 209 if (paEntries[i].pfnDoRM) 208 210 { 211 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_rm)); 209 212 bErrNo = TMPL_NM(Bs3TestCallDoerInRM)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoRM)); 210 213 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_rm)); … … 223 226 if (paEntries[i].pfnDoPE16) 224 227 { 228 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pe16)); 225 229 bErrNo = TMPL_NM(Bs3TestCallDoerInPE16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPE16)); 226 230 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe16)); … … 235 239 if (paEntries[i].pfnDoPE16_32) 236 240 { 241 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pe16_32)); 237 242 bErrNo = TMPL_NM(Bs3TestCallDoerInPE16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPE16_32)); 238 243 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe16_32)); … … 241 246 if (paEntries[i].pfnDoPE16_V86 && fDoWeirdV86Modes) 242 247 { 248 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pe16_v86)); 243 249 bErrNo = TMPL_NM(Bs3TestCallDoerInPE16_V86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPE16_V86)); 244 250 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe16_v86)); … … 247 253 if (paEntries[i].pfnDoPE32) 248 254 { 255 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pe32)); 249 256 bErrNo = TMPL_NM(Bs3TestCallDoerInPE32)(CONV_TO_FLAT(paEntries[i].pfnDoPE32)); 250 257 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe32)); … … 253 260 if (paEntries[i].pfnDoPE32_16) 254 261 { 262 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pe32_16)); 255 263 bErrNo = TMPL_NM(Bs3TestCallDoerInPE32_16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPE32_16)); 256 264 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pe32_16)); … … 259 267 if (paEntries[i].pfnDoPEV86 && fDoV86Modes) 260 268 { 269 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pev86)); 261 270 bErrNo = TMPL_NM(Bs3TestCallDoerInPEV86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPEV86)); 262 271 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pev86)); … … 268 277 if (paEntries[i].pfnDoPP16) 269 278 { 279 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pp16)); 270 280 bErrNo = TMPL_NM(Bs3TestCallDoerInPP16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPP16)); 271 281 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp16)); … … 274 284 if (paEntries[i].pfnDoPP16_32) 275 285 { 286 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pp16_32)); 276 287 bErrNo = TMPL_NM(Bs3TestCallDoerInPP16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPP16_32)); 277 288 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp16_32)); … … 280 291 if (paEntries[i].pfnDoPP16_V86 && fDoWeirdV86Modes) 281 292 { 293 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pp16_v86)); 282 294 bErrNo = TMPL_NM(Bs3TestCallDoerInPP16_V86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPP16_V86)); 283 295 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp16_v86)); … … 286 298 if (paEntries[i].pfnDoPP32) 287 299 { 300 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pp32)); 288 301 bErrNo = TMPL_NM(Bs3TestCallDoerInPP32)(CONV_TO_FLAT(paEntries[i].pfnDoPP32)); 289 302 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp32)); … … 292 305 if (paEntries[i].pfnDoPP32_16) 293 306 { 307 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pp32_16)); 294 308 bErrNo = TMPL_NM(Bs3TestCallDoerInPP32_16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPP32_16)); 295 309 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pp32_16)); … … 298 312 if (paEntries[i].pfnDoPPV86 && fDoV86Modes) 299 313 { 314 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_ppv86)); 300 315 bErrNo = TMPL_NM(Bs3TestCallDoerInPPV86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPPV86)); 301 316 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_ppv86)); … … 314 329 if (paEntries[i].pfnDoPAE16) 315 330 { 331 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pae16)); 316 332 bErrNo = TMPL_NM(Bs3TestCallDoerInPAE16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPAE16)); 317 333 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae16)); … … 320 336 if (paEntries[i].pfnDoPAE16_32) 321 337 { 338 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pae16_32)); 322 339 bErrNo = TMPL_NM(Bs3TestCallDoerInPAE16_32)(CONV_TO_FLAT(paEntries[i].pfnDoPAE16_32)); 323 340 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae16_32)); … … 326 343 if (paEntries[i].pfnDoPAE16_V86 && fDoWeirdV86Modes) 327 344 { 345 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pae16_v86)); 328 346 bErrNo = TMPL_NM(Bs3TestCallDoerInPAE16_V86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPAE16_V86)); 329 347 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae16_v86)); … … 332 350 if (paEntries[i].pfnDoPAE32) 333 351 { 352 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pae32)); 334 353 bErrNo = TMPL_NM(Bs3TestCallDoerInPAE32)(CONV_TO_FLAT(paEntries[i].pfnDoPAE32)); 335 354 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae32)); … … 338 357 if (paEntries[i].pfnDoPAE32_16) 339 358 { 359 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_pae32_16)); 340 360 bErrNo = TMPL_NM(Bs3TestCallDoerInPAE32_16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPAE32_16)); 341 361 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_pae32_16)); … … 344 364 if (paEntries[i].pfnDoPAEV86 && fDoV86Modes) 345 365 { 366 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_paev86)); 346 367 bErrNo = TMPL_NM(Bs3TestCallDoerInPAEV86)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoPAEV86)); 347 368 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_paev86)); … … 360 381 if (paEntries[i].pfnDoLM16) 361 382 { 383 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_lm16)); 362 384 bErrNo = TMPL_NM(Bs3TestCallDoerInLM16)(CONV_TO_BS3TEXT16(paEntries[i].pfnDoLM16)); 363 385 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_lm16)); … … 366 388 if (paEntries[i].pfnDoLM32) 367 389 { 390 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_lm32)); 368 391 bErrNo = TMPL_NM(Bs3TestCallDoerInLM32)(CONV_TO_FLAT(paEntries[i].pfnDoLM32)); 369 392 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_lm32)); … … 372 395 if (paEntries[i].pfnDoLM64) 373 396 { 397 PRE_DO_CALL(BS3_DATA_NM(g_szBs3ModeName_lm64)); 374 398 bErrNo = TMPL_NM(Bs3TestCallDoerInLM64)(CONV_TO_FLAT(paEntries[i].pfnDoLM64)); 375 399 CHECK_RESULT(BS3_DATA_NM(g_szBs3ModeName_lm64)); -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h
r60119 r60184 1896 1896 /** 0x00: Exception/interrupt number. */ 1897 1897 uint8_t bXcpt; 1898 /** 0x01: Explicit alignment. */1899 uint8_t bAlignment;1898 /** 0x01: The size of the IRET frame. */ 1899 uint8_t cbIretFrame; 1900 1900 /** 0x02: The handler CS. */ 1901 1901 uint16_t uHandlerCc; … … 1904 1904 /** 0x06: Explicit alignment. */ 1905 1905 uint16_t usAlignment; 1906 /** 0x08: The handler RSP ( top of iret frame). */1906 /** 0x08: The handler RSP (pointer to the iret frame, skipping ErrCd). */ 1907 1907 uint64_t uHandlerRsp; 1908 1908 /** 0x10: The handler RFLAGS value. */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.mac
r60097 r60184 1169 1169 struc BS3TRAPFRAME 1170 1170 .bXcpt resb 1 1171 . bAlignmentresb 11171 .cbIretFrame resb 1 1172 1172 .uHandlerCs resw 1 1173 1173 .uHandlerSs resw 1
Note:
See TracChangeset
for help on using the changeset viewer.