From: André Hentschel Subject: [PATCH 1/2] ntdll: Implement set_cpu_context for ARM64 Message-Id: <6f26c297-d310-afcb-298a-ee311a0b30ae@dawncrow.de> Date: Fri, 24 Nov 2017 20:23:03 +0100 Signed-off-by: André Hentschel --- dlls/ntdll/signal_arm64.c | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index 5b3e887..50903a9 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -231,10 +231,43 @@ __ASM_STDCALL_FUNC( RtlCaptureContext, 8, * * Set the new CPU context. */ -static void set_cpu_context( const CONTEXT *context ) -{ - FIXME( "Not implemented on ARM64\n" ); -} +void set_cpu_context( const CONTEXT *context ); +__ASM_GLOBAL_FUNC( set_cpu_context, + "ldr x1, [x0, #0x10]\n\t" /* context->X1 */ + "ldr x2, [x0, #0x18]\n\t" /* context->X2 */ + "ldr x3, [x0, #0x20]\n\t" /* context->X3 */ + "ldr x4, [x0, #0x28]\n\t" /* context->X4 */ + "ldr x5, [x0, #0x30]\n\t" /* context->X5 */ + "ldr x6, [x0, #0x38]\n\t" /* context->X6 */ + "ldr x7, [x0, #0x40]\n\t" /* context->X7 */ + "ldr x8, [x0, #0x48]\n\t" /* context->X8 */ + "ldr x9, [x0, #0x50]\n\t" /* context->X9 */ + "ldr x10, [x0, #0x58]\n\t" /* context->X10 */ + "ldr x11, [x0, #0x60]\n\t" /* context->X11 */ + "ldr x12, [x0, #0x68]\n\t" /* context->X12 */ + "ldr x13, [x0, #0x70]\n\t" /* context->X13 */ + "ldr x14, [x0, #0x78]\n\t" /* context->X14 */ + "ldr x16, [x0, #0x88]\n\t" /* context->X16 */ + "ldr x17, [x0, #0x90]\n\t" /* context->X17 */ + "ldr x18, [x0, #0x98]\n\t" /* context->X18 */ + "ldr x19, [x0, #0xa0]\n\t" /* context->X19 */ + "ldr x20, [x0, #0xa8]\n\t" /* context->X20 */ + "ldr x21, [x0, #0xb0]\n\t" /* context->X21 */ + "ldr x22, [x0, #0xb8]\n\t" /* context->X22 */ + "ldr x23, [x0, #0xc0]\n\t" /* context->X23 */ + "ldr x24, [x0, #0xc8]\n\t" /* context->X24 */ + "ldr x25, [x0, #0xd0]\n\t" /* context->X25 */ + "ldr x26, [x0, #0xd8]\n\t" /* context->X26 */ + "ldr x27, [x0, #0xe0]\n\t" /* context->X27 */ + "ldr x28, [x0, #0xe8]\n\t" /* context->X28 */ + "ldr x29, [x0, #0xf0]\n\t" /* context->Fp */ + "ldr x30, [x0, #0xf8]\n\t" /* context->Lr */ + "ldr x15, [x0, #0x100]\n\t" /* context->Sp */ + "mov sp, x15\n\t" + "ldr x15, [x0, #0x108]\n\t" /* context->Pc */ + "ldr x0, [x0, #0x8]\n\t" /* context->X0 */ + "br x15\n\t" + ) /*********************************************************************** * copy_context -- 2.7.4