Module: wine Branch: master Commit: 3f1f58f19a76681fc5de8bc268ab99a2e0805538 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3f1f58f19a76681fc5de8bc26...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jun 3 12:39:24 2021 +0200
ntdll: Use appropriate context constants where possible.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/exception.c | 24 ++++++++++++++++-- dlls/ntdll/tests/exception.c | 60 +++++++++++++++++++++----------------------- 2 files changed, 51 insertions(+), 33 deletions(-)
diff --git a/dlls/ntdll/exception.c b/dlls/ntdll/exception.c index d5b3042c491..9e98dcc49c6 100644 --- a/dlls/ntdll/exception.c +++ b/dlls/ntdll/exception.c @@ -736,8 +736,28 @@ static const struct context_parameters } arch_context_parameters[] = { - {0x00100000, 0xd810005f, 0x4d0, 0x4d0, 0x20, 7, 0xf, 0x30, copy_ranges_amd64}, - {0x00010000, 0xd801007f, 0x2cc, 0xcc, 0x18, 3, 0x3, 0, copy_ranges_x86}, + { + CONTEXT_AMD64, + 0xd8000000 | CONTEXT_AMD64_ALL | CONTEXT_AMD64_XSTATE, + sizeof(AMD64_CONTEXT), + sizeof(AMD64_CONTEXT), + 0x20, + 7, + TYPE_ALIGNMENT(AMD64_CONTEXT) - 1, + offsetof(AMD64_CONTEXT,ContextFlags), + copy_ranges_amd64 + }, + { + CONTEXT_i386, + 0xd8000000 | CONTEXT_I386_ALL | CONTEXT_I386_XSTATE, + sizeof(I386_CONTEXT), + offsetof(I386_CONTEXT,ExtendedRegisters), + 0x18, + 3, + TYPE_ALIGNMENT(I386_CONTEXT) - 1, + offsetof(I386_CONTEXT,ContextFlags), + copy_ranges_x86 + }, };
static const struct context_parameters *context_get_parameters( ULONG context_flags ) diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c index 453e77f9063..1b0cfecef3e 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c @@ -8042,32 +8042,28 @@ static void test_copy_context(void) {0x0, 0x1}, {0x1000, 0}, };
- static const struct - { - ULONG flags; - } - tests[] = + static const ULONG tests[] = { /* AMD64 */ - {0x100000 | 0x01}, /* CONTEXT_CONTROL */ - {0x100000 | 0x02}, /* CONTEXT_INTEGER */ - {0x100000 | 0x04}, /* CONTEXT_SEGMENTS */ - {0x100000 | 0x08}, /* CONTEXT_FLOATING_POINT */ - {0x100000 | 0x10}, /* CONTEXT_DEBUG_REGISTERS */ - {0x100000 | 0x0b}, /* CONTEXT_FULL */ - {0x100000 | 0x40}, /* CONTEXT_XSTATE */ - {0x100000 | 0x1f}, /* CONTEXT_ALL */ + CONTEXT_AMD64_CONTROL, + CONTEXT_AMD64_INTEGER, + CONTEXT_AMD64_SEGMENTS, + CONTEXT_AMD64_FLOATING_POINT, + CONTEXT_AMD64_DEBUG_REGISTERS, + CONTEXT_AMD64_FULL, + CONTEXT_AMD64_XSTATE, + CONTEXT_AMD64_ALL, /* X86 */ - { 0x10000 | 0x01}, /* CONTEXT_CONTROL */ - { 0x10000 | 0x02}, /* CONTEXT_INTEGER */ - { 0x10000 | 0x04}, /* CONTEXT_SEGMENTS */ - { 0x10000 | 0x08}, /* CONTEXT_FLOATING_POINT */ - { 0x10000 | 0x10}, /* CONTEXT_DEBUG_REGISTERS */ - { 0x10000 | 0x20}, /* CONTEXT_EXTENDED_REGISTERS */ - { 0x10000 | 0x40}, /* CONTEXT_XSTATE */ - { 0x10000 | 0x3f}, /* CONTEXT_ALL */ + CONTEXT_I386_CONTROL, + CONTEXT_I386_INTEGER, + CONTEXT_I386_SEGMENTS, + CONTEXT_I386_FLOATING_POINT, + CONTEXT_I386_DEBUG_REGISTERS, + CONTEXT_I386_EXTENDED_REGISTERS, + CONTEXT_I386_XSTATE, + CONTEXT_I386_ALL }; - static const ULONG arch_flags[] = {0x100000, 0x10000}; + static const ULONG arch_flags[] = {CONTEXT_AMD64, CONTEXT_i386};
DECLSPEC_ALIGN(64) BYTE src_context_buffer[4096]; DECLSPEC_ALIGN(64) BYTE dst_context_buffer[4096]; @@ -8097,8 +8093,9 @@ static void test_copy_context(void)
for (i = 0; i < ARRAY_SIZE(tests); ++i) { - flags = tests[i].flags; - flags_offset = (flags & 0x100000) ? 0x30 : 0; + flags = tests[i]; + flags_offset = (flags & CONTEXT_AMD64) ? offsetof(AMD64_CONTEXT,ContextFlags) + : offsetof(I386_CONTEXT,ContextFlags);
memset(dst_context_buffer, 0xdd, sizeof(dst_context_buffer)); memset(src_context_buffer, 0xcc, sizeof(src_context_buffer)); @@ -8131,7 +8128,7 @@ static void test_copy_context(void) ok(!status, "Got unexpected status %#x, flags %#x.\n", status, flags);
context_length = (BYTE *)dst_ex - (BYTE *)dst + dst_ex->All.Length; - check_changes_in_range((BYTE *)dst, flags & 0x100000 ? &ranges_amd64[0] : &ranges_x86[0], + check_changes_in_range((BYTE *)dst, flags & CONTEXT_AMD64 ? &ranges_amd64[0] : &ranges_x86[0], flags, context_length);
ok(*(DWORD *)((BYTE *)dst + flags_offset) == flags, "Got unexpected ContextFlags %#x, flags %#x.\n", @@ -8150,10 +8147,10 @@ static void test_copy_context(void) bret, GetLastError(), flags); ok(*(DWORD *)((BYTE *)dst + flags_offset) == 0, "Got unexpected ContextFlags %#x, flags %#x.\n", *(DWORD *)((BYTE *)dst + flags_offset), flags); - check_changes_in_range((BYTE *)dst, flags & 0x100000 ? &ranges_amd64[0] : &ranges_x86[0], + check_changes_in_range((BYTE *)dst, flags & CONTEXT_AMD64 ? &ranges_amd64[0] : &ranges_x86[0], 0, context_length);
- *(DWORD *)((BYTE *)dst + flags_offset) = flags & 0x110000; + *(DWORD *)((BYTE *)dst + flags_offset) = flags & (CONTEXT_AMD64 | CONTEXT_i386); *(DWORD *)((BYTE *)src + flags_offset) = flags; SetLastError(0xdeadbeef); bret = pCopyContext(dst, flags, src); @@ -8171,7 +8168,7 @@ static void test_copy_context(void) { ok(*(DWORD *)((BYTE *)dst + flags_offset) == flags, "Got unexpected ContextFlags %#x, flags %#x.\n", *(DWORD *)((BYTE *)dst + flags_offset), flags); - check_changes_in_range((BYTE *)dst, flags & 0x100000 ? &ranges_amd64[0] : &ranges_x86[0], + check_changes_in_range((BYTE *)dst, flags & CONTEXT_AMD64 ? &ranges_amd64[0] : &ranges_x86[0], flags, context_length); } else @@ -8179,7 +8176,7 @@ static void test_copy_context(void) ok(*(DWORD *)((BYTE *)dst + flags_offset) == (flags & 0x110000), "Got unexpected ContextFlags %#x, flags %#x.\n", *(DWORD *)((BYTE *)dst + flags_offset), flags); - check_changes_in_range((BYTE *)dst, flags & 0x100000 ? &ranges_amd64[0] : &ranges_x86[0], + check_changes_in_range((BYTE *)dst, flags & CONTEXT_AMD64 ? &ranges_amd64[0] : &ranges_x86[0], 0, context_length); } } @@ -8187,8 +8184,9 @@ static void test_copy_context(void) for (i = 0; i < ARRAY_SIZE(arch_flags); ++i) { flags = arch_flags[i] | 0x42; - flags_offset = (flags & 0x100000) ? 0x30 : 0; - context_length = (flags & 0x100000) ? 0x4d0 : 0x2cc; + flags_offset = (flags & CONTEXT_AMD64) ? offsetof(AMD64_CONTEXT,ContextFlags) + : offsetof(I386_CONTEXT,ContextFlags); + context_length = (flags & CONTEXT_AMD64) ? sizeof(AMD64_CONTEXT) : sizeof(I386_CONTEXT);
memset(dst_context_buffer, 0xdd, sizeof(dst_context_buffer)); memset(src_context_buffer, 0xcc, sizeof(src_context_buffer));