From: "Greg Geldorp" Subject: ntdll/tests: Remove tests for overlong instructions Message-Id: <52010.83.163.1.131.1292777444.squirrel@webmail.geldorp.nl> Date: Sun, 19 Dec 2010 17:50:44 +0100 (CET) The "overlong instruction" test produces different results on different test machines. Since it fails on other machines besides the TestBot VMs I don't think this is a TestBot problem. Since the exception code and parameters can differ, I don't think it makes much sense to test this, so removing the failing tests completely. Also correct/update numbering in the array. --- dlls/ntdll/tests/exception.c | 62 +++++++++++++++++++----------------------- 1 files changed, 28 insertions(+), 34 deletions(-) diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c index 701b6bb..432a0b9 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c @@ -130,81 +130,75 @@ static const struct exception /* test accessing a zero selector (%es broken on Wow64) */ { { 0x06, 0x31, 0xc0, 0x8e, 0xc0, 0x26, 0xa1, 0, 0, 0, 0, 0x07, 0xc3 }, - /* push %es; xor %eax,%eax; mov %ax,%es; mov %es:(0),%ax; pop %es; ret */ + /* 17: push %es; xor %eax,%eax; mov %ax,%es; mov %es:(0),%ax; pop %es; ret */ 5, 6, TRUE, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, { { 0x0f, 0xa8, 0x31, 0xc0, 0x8e, 0xe8, 0x65, 0xa1, 0, 0, 0, 0, 0x0f, 0xa9, 0xc3 }, - /* push %gs; xor %eax,%eax; mov %ax,%gs; mov %gs:(0),%ax; pop %gs; ret */ + /* 18: push %gs; xor %eax,%eax; mov %ax,%gs; mov %gs:(0),%ax; pop %gs; ret */ 6, 6, FALSE, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, /* test moving %cs -> %ss */ - { { 0x0e, 0x17, 0x58, 0xc3 }, /* 18: pushl %cs; popl %ss; popl %eax; ret */ + { { 0x0e, 0x17, 0x58, 0xc3 }, /* 19: pushl %cs; popl %ss; popl %eax; ret */ 1, 1, FALSE, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, /* 20 */ - /* 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 }, - 0, 16, TRUE, STATUS_ILLEGAL_INSTRUCTION, 0 }, - { { 0x64,0x64,0x64,0x64,0xfa,0xc3 }, - 0, 5, TRUE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - /* test invalid interrupt */ - { { 0xcd, 0xff, 0xc3 }, /* 21: int $0xff; ret */ + { { 0xcd, 0xff, 0xc3 }, /* 20: int $0xff; ret */ 0, 2, FALSE, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, /* test moves to/from Crx */ - { { 0x0f, 0x20, 0xc0, 0xc3 }, /* 22: movl %cr0,%eax; ret */ + { { 0x0f, 0x20, 0xc0, 0xc3 }, /* 21: movl %cr0,%eax; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x20, 0xe0, 0xc3 }, /* 23: movl %cr4,%eax; ret */ + { { 0x0f, 0x20, 0xe0, 0xc3 }, /* 22: movl %cr4,%eax; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, -/* 25 */ - { { 0x0f, 0x22, 0xc0, 0xc3 }, /* 24: movl %eax,%cr0; ret */ + { { 0x0f, 0x22, 0xc0, 0xc3 }, /* 23: movl %eax,%cr0; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x22, 0xe0, 0xc3 }, /* 25: movl %eax,%cr4; ret */ + { { 0x0f, 0x22, 0xe0, 0xc3 }, /* 24: movl %eax,%cr4; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, +/* 25 */ /* test moves to/from Drx */ - { { 0x0f, 0x21, 0xc0, 0xc3 }, /* 26: movl %dr0,%eax; ret */ + { { 0x0f, 0x21, 0xc0, 0xc3 }, /* 25: movl %dr0,%eax; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x21, 0xc8, 0xc3 }, /* 27: movl %dr1,%eax; ret */ + { { 0x0f, 0x21, 0xc8, 0xc3 }, /* 26: movl %dr1,%eax; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x21, 0xf8, 0xc3 }, /* 28: movl %dr7,%eax; ret */ + { { 0x0f, 0x21, 0xf8, 0xc3 }, /* 27: movl %dr7,%eax; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, -/* 30 */ - { { 0x0f, 0x23, 0xc0, 0xc3 }, /* 29: movl %eax,%dr0; ret */ + { { 0x0f, 0x23, 0xc0, 0xc3 }, /* 28: movl %eax,%dr0; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x23, 0xc8, 0xc3 }, /* 30: movl %eax,%dr1; ret */ + { { 0x0f, 0x23, 0xc8, 0xc3 }, /* 29: movl %eax,%dr1; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0x0f, 0x23, 0xf8, 0xc3 }, /* 31: movl %eax,%dr7; ret */ +/* 30 */ + { { 0x0f, 0x23, 0xf8, 0xc3 }, /* 30: movl %eax,%dr7; ret */ 0, 3, FALSE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, /* test memory reads */ - { { 0xa1, 0xfc, 0xff, 0xff, 0xff, 0xc3 }, /* 32: movl 0xfffffffc,%eax; ret */ + { { 0xa1, 0xfc, 0xff, 0xff, 0xff, 0xc3 }, /* 31: movl 0xfffffffc,%eax; ret */ 0, 5, FALSE, STATUS_ACCESS_VIOLATION, 2, { 0, 0xfffffffc } }, - { { 0xa1, 0xfd, 0xff, 0xff, 0xff, 0xc3 }, /* 33: movl 0xfffffffd,%eax; ret */ + { { 0xa1, 0xfd, 0xff, 0xff, 0xff, 0xc3 }, /* 32: movl 0xfffffffd,%eax; ret */ 0, 5, FALSE, STATUS_ACCESS_VIOLATION, 2, { 0, 0xfffffffd } }, -/* 35 */ - { { 0xa1, 0xfe, 0xff, 0xff, 0xff, 0xc3 }, /* 34: movl 0xfffffffe,%eax; ret */ + { { 0xa1, 0xfe, 0xff, 0xff, 0xff, 0xc3 }, /* 33: movl 0xfffffffe,%eax; ret */ 0, 5, FALSE, STATUS_ACCESS_VIOLATION, 2, { 0, 0xfffffffe } }, - { { 0xa1, 0xff, 0xff, 0xff, 0xff, 0xc3 }, /* 35: movl 0xffffffff,%eax; ret */ + { { 0xa1, 0xff, 0xff, 0xff, 0xff, 0xc3 }, /* 34: movl 0xffffffff,%eax; ret */ 0, 5, FALSE, STATUS_ACCESS_VIOLATION, 2, { 0, 0xffffffff } }, +/* 35 */ /* test memory writes */ - { { 0xa3, 0xfc, 0xff, 0xff, 0xff, 0xc3 }, /* 36: movl %eax,0xfffffffc; ret */ + { { 0xa3, 0xfc, 0xff, 0xff, 0xff, 0xc3 }, /* 35: movl %eax,0xfffffffc; ret */ 0, 5, FALSE, STATUS_ACCESS_VIOLATION, 2, { 1, 0xfffffffc } }, - { { 0xa3, 0xfd, 0xff, 0xff, 0xff, 0xc3 }, /* 37: movl %eax,0xfffffffd; ret */ + { { 0xa3, 0xfd, 0xff, 0xff, 0xff, 0xc3 }, /* 36: movl %eax,0xfffffffd; ret */ 0, 5, FALSE, STATUS_ACCESS_VIOLATION, 2, { 1, 0xfffffffd } }, - { { 0xa3, 0xfe, 0xff, 0xff, 0xff, 0xc3 }, /* 38: movl %eax,0xfffffffe; ret */ + { { 0xa3, 0xfe, 0xff, 0xff, 0xff, 0xc3 }, /* 37: movl %eax,0xfffffffe; ret */ 0, 5, FALSE, STATUS_ACCESS_VIOLATION, 2, { 1, 0xfffffffe } }, -/* 40 */ - { { 0xa3, 0xff, 0xff, 0xff, 0xff, 0xc3 }, /* 39: movl %eax,0xffffffff; ret */ + { { 0xa3, 0xff, 0xff, 0xff, 0xff, 0xc3 }, /* 38: movl %eax,0xffffffff; ret */ 0, 5, FALSE, STATUS_ACCESS_VIOLATION, 2, { 1, 0xffffffff } }, /* test exception with cleared %ds and %es (broken on Wow64) */ { { 0x1e, 0x06, 0x31, 0xc0, 0x8e, 0xd8, 0x8e, 0xc0, 0xfa, 0x07, 0x1f, 0xc3 }, - /* push %ds; push %es; xorl %eax,%eax; mov %ax,%ds; mov %ax,%es; cli; pop %es; pop %ds; ret */ + /* 39: push %ds; push %es; xorl %eax,%eax; mov %ax,%ds; mov %ax,%es; cli; pop %es; pop %ds; ret */ 8, 1, TRUE, STATUS_PRIVILEGED_INSTRUCTION, 0 }, - { { 0xf1, 0x90, 0xc3 }, /* icebp; nop; ret */ +/* 40 */ + { { 0xf1, 0x90, 0xc3 }, /* 40: icebp; nop; ret */ 1, 1, FALSE, STATUS_SINGLE_STEP, 0 }, };