ntdll/tests: Fix some exception tests for Wow64.

This commit is contained in:
Alexandre Julliard 2010-06-22 13:51:18 +02:00
parent 6cf16d723a
commit 0fdcab06ac
1 changed files with 10 additions and 5 deletions

View File

@ -143,9 +143,9 @@ static const struct exception
/* 20 */ /* 20 */
/* test overlong instruction (limit is 15 bytes, 5 on Win7) */ /* test overlong instruction (limit is 15 bytes, 5 on Win7) */
{ { 0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0xfa,0xc3 }, { { 0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0xfa,0xc3 },
0, 16, FALSE, STATUS_ILLEGAL_INSTRUCTION, 0 }, 0, 16, TRUE, STATUS_ILLEGAL_INSTRUCTION, 0 },
{ { 0x64,0x64,0x64,0x64,0xfa,0xc3 }, { { 0x64,0x64,0x64,0x64,0xfa,0xc3 },
0, 5, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, 0, 5, TRUE, STATUS_PRIVILEGED_INSTRUCTION, 0 },
/* test invalid interrupt */ /* test invalid interrupt */
{ { 0xcd, 0xff, 0xc3 }, /* 21: int $0xff; ret */ { { 0xcd, 0xff, 0xc3 }, /* 21: int $0xff; ret */
@ -246,7 +246,9 @@ static LONG CALLBACK rtlraiseexception_vectored_handler(EXCEPTION_POINTERS *Exce
rec->ExceptionAddress, (char *)code_mem + 0xb); rec->ExceptionAddress, (char *)code_mem + 0xb);
if (pNtCurrentTeb()->Peb->BeingDebugged) if (pNtCurrentTeb()->Peb->BeingDebugged)
ok((void *)context->Eax == pRtlRaiseException, "debugger managed to modify Eax to %x should be %p\n", ok((void *)context->Eax == pRtlRaiseException ||
broken( is_wow64 && context->Eax == 0xf00f00f1 ), /* broken on vista */
"debugger managed to modify Eax to %x should be %p\n",
context->Eax, pRtlRaiseException); context->Eax, pRtlRaiseException);
/* check that context.Eip is fixed up only for EXCEPTION_BREAKPOINT /* check that context.Eip is fixed up only for EXCEPTION_BREAKPOINT
@ -773,7 +775,9 @@ static void test_debugger(void)
/* ctx.Eip is the same value the exception handler got */ /* ctx.Eip is the same value the exception handler got */
if (de.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT) if (de.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT)
{ {
ok((char *)ctx.Eip == (char *)code_mem_address + 0xa, "Eip at 0x%x instead of %p\n", ok((char *)ctx.Eip == (char *)code_mem_address + 0xa ||
broken(is_wow64 && (char *)ctx.Eip == (char *)code_mem_address + 0xb),
"Eip at 0x%x instead of %p\n",
ctx.Eip, (char *)code_mem_address + 0xa); ctx.Eip, (char *)code_mem_address + 0xa);
/* need to fixup Eip for debuggee */ /* need to fixup Eip for debuggee */
if ((char *)ctx.Eip == (char *)code_mem_address + 0xa) if ((char *)ctx.Eip == (char *)code_mem_address + 0xa)
@ -824,7 +828,8 @@ static DWORD simd_fault_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_R
ok( rec->ExceptionCode == STATUS_FLOAT_MULTIPLE_TRAPS, ok( rec->ExceptionCode == STATUS_FLOAT_MULTIPLE_TRAPS,
"exception code: %#x, should be %#x\n", "exception code: %#x, should be %#x\n",
rec->ExceptionCode, STATUS_FLOAT_MULTIPLE_TRAPS); rec->ExceptionCode, STATUS_FLOAT_MULTIPLE_TRAPS);
ok( rec->NumberParameters == 1, "# of params: %i, should be 1\n", ok( rec->NumberParameters == 1 || broken(is_wow64 && rec->NumberParameters == 2),
"# of params: %i, should be 1\n",
rec->NumberParameters); rec->NumberParameters);
if( rec->NumberParameters == 1 ) if( rec->NumberParameters == 1 )
ok( rec->ExceptionInformation[0] == 0, "param #1: %lx, should be 0\n", rec->ExceptionInformation[0]); ok( rec->ExceptionInformation[0] == 0, "param #1: %lx, should be 0\n", rec->ExceptionInformation[0]);