[PATCH 2/5] ntdll/tests: Add defines for the complete set of arm64 unwidning opcodes
Martin Storsjo
martin at martin.st
Tue Aug 25 04:26:26 CDT 2020
Also correct the previous definition of UWOP_NOP which was a typo
(but it wasn't used in any testcase yet).
Signed-off-by: Martin Storsjo <martin at martin.st>
---
dlls/ntdll/tests/exception.c | 29 +++++++++++++++++++++++++----
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c
index 1e9047383b..528323c9bc 100644
--- a/dlls/ntdll/tests/exception.c
+++ b/dlls/ntdll/tests/exception.c
@@ -4231,10 +4231,31 @@ static void test_debug_service(DWORD numexc)
#define UWOP_TWOBYTES(x) (((x) >> 8) & 0xff), ((x) & 0xff)
-#define UWOP_ALLOC_SMALL(size) (0x00 | (size / 16))
-#define UWOP_SAVE_REGP(reg, offset) UWOP_TWOBYTES((0xC8 << 8) | ((reg - 19) << 6) | (offset/8))
-#define UWOP_NOP 0xE5
-#define UWOP_END 0xE4
+#define UWOP_ALLOC_SMALL(size) (0x00 | (size/16))
+#define UWOP_SAVE_R19R20_X(offset) (0x20 | (offset/8))
+#define UWOP_SAVE_FPLR(offset) (0x40 | (offset/8))
+#define UWOP_SAVE_FPLR_X(offset) (0x80 | (offset/8 - 1))
+#define UWOP_ALLOC_MEDIUM(size) UWOP_TWOBYTES((0xC0 << 8) | (size/16))
+#define UWOP_SAVE_REGP(reg, offset) UWOP_TWOBYTES((0xC8 << 8) | ((reg - 19) << 6) | (offset/8))
+#define UWOP_SAVE_REGP_X(reg, offset) UWOP_TWOBYTES((0xCC << 8) | ((reg - 19) << 6) | (offset/8 - 1))
+#define UWOP_SAVE_REG(reg, offset) UWOP_TWOBYTES((0xD0 << 8) | ((reg - 19) << 6) | (offset/8))
+#define UWOP_SAVE_REG_X(reg, offset) UWOP_TWOBYTES((0xD4 << 8) | ((reg - 19) << 5) | (offset/8 - 1))
+#define UWOP_SAVE_LRP(reg, offset) UWOP_TWOBYTES((0xD6 << 8) | ((reg - 19)/2 << 6) | (offset/8))
+#define UWOP_SAVE_FREGP(reg, offset) UWOP_TWOBYTES((0xD8 << 8) | ((reg - 8) << 6) | (offset/8))
+#define UWOP_SAVE_FREGP_X(reg, offset) UWOP_TWOBYTES((0xDA << 8) | ((reg - 8) << 6) | (offset/8 - 1))
+#define UWOP_SAVE_FREG(reg, offset) UWOP_TWOBYTES((0xDC << 8) | ((reg - 8) << 6) | (offset/8))
+#define UWOP_SAVE_FREG_X(reg, offset) UWOP_TWOBYTES((0xDE << 8) | ((reg - 8) << 5) | (offset/8 - 1))
+#define UWOP_ALLOC_LARGE(size) UWOP_TWOBYTES((0xE0 << 8) | ((size/16) >> 16)), UWOP_TWOBYTES(size/16)
+#define UWOP_SET_FP 0xE1
+#define UWOP_ADD_FP(offset) UWOP_TWOBYTES((0xE2 << 8) | (offset/8))
+#define UWOP_NOP 0xE3
+#define UWOP_END 0xE4
+#define UWOP_END_C 0xE5
+#define UWOP_SAVE_NEXT 0xE6
+#define UWOP_TRAP_FRAME 0xE8
+#define UWOP_MACHINE_FRAME 0xE9
+#define UWOP_CONTEXT 0xEA
+#define UWOP_CLEAR_UNWOUND_TO_CALL 0xEC
struct results
{
--
2.17.1
More information about the wine-devel
mailing list