Alexandre Julliard : ntdll: Use appropriate context constants where possible.
Alexandre Julliard
julliard at winehq.org
Thu Jun 3 16:23:07 CDT 2021
Module: wine
Branch: master
Commit: 3f1f58f19a76681fc5de8bc268ab99a2e0805538
URL: https://source.winehq.org/git/wine.git/?a=commit;h=3f1f58f19a76681fc5de8bc268ab99a2e0805538
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Jun 3 12:39:24 2021 +0200
ntdll: Use appropriate context constants where possible.
Signed-off-by: Alexandre Julliard <julliard at 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));
More information about the wine-cvs
mailing list