From 1e2584e00c71e120d652f0d4ae105e54ceca16a8 Mon Sep 17 00:00:00 2001 From: Oliver Kowalke Date: Tue, 24 Feb 2015 17:50:14 +0100 Subject: [PATCH 47/54] some fixes for ARM64 --- src/asm/jump_arm64_aapcs_elf_gas.S | 44 ++++++++++++++++++------------------ src/asm/jump_arm64_aapcs_macho_gas.S | 44 ++++++++++++++++++------------------ 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S b/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S index 46e029d..889008f 100644 --- a/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S +++ b/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S @@ -71,22 +71,22 @@ jump_fcontext: # b.eq 1f # save d8 - d15 - stp d8, d9, [sp, #0x00] - stp d10, d11, [sp, #0x10] - stp d12, d13, [sp, #0x20] - stp d14, d15, [sp, #0x30] + stp d8, d9, [sp, #0x00] + stp d10, d11, [sp, #0x10] + stp d12, d13, [sp, #0x20] + stp d14, d15, [sp, #0x30] 1: # save x19-x30 - stp x19, x20, [sp, #0x40] - stp x21, x22, [sp, #0x50] - stp x23, x24, [sp, #0x60] - stp x25, x26, [sp, #0x70] - stp x27, x28, [sp, #0x80] - stp x29, x30, [sp, #0x90] + stp x19, x20, [sp, #0x40] + stp x21, x22, [sp, #0x50] + stp x23, x24, [sp, #0x60] + stp x25, x26, [sp, #0x70] + stp x27, x28, [sp, #0x80] + stp fp, lr, [sp, #0x90] # save LR as PC - str x30, [sp, #0xa0] + str lr, [sp, #0xa0] # store RSP (pointing to context-data) in first argument (x0). # STR cannot have sp as a target register @@ -101,26 +101,26 @@ jump_fcontext: # b.eq 2f # load d8 - d15 - ldp d8, d9, [x0, #0x00] - ldp d10, d11, [x0, #0x10] - ldp d12, d13, [x0, #0x20] - ldp d14, d15, [x0, #0x30] + ldp d8, d9, [sp, #0x00] + ldp d10, d11, [sp, #0x10] + ldp d12, d13, [sp, #0x20] + ldp d14, d15, [sp, #0x30] 2: # load x19-x30 - ldp x19, x20, [sp, #0x40] - ldp x21, x22, [sp, #0x50] - ldp x23, x24, [sp, #0x60] - ldp x25, x26, [sp, #0x70] - ldp x27, x28, [sp, #0x80] - ldp x29, x30, [sp, #0x90] + ldp x19, x20, [sp, #0x40] + ldp x21, x22, [sp, #0x50] + ldp x23, x24, [sp, #0x60] + ldp x25, x26, [sp, #0x70] + ldp x27, x28, [sp, #0x80] + ldp fp, lr, [sp, #0x90] # use third arg as return value after jump # and as first arg in context function mov x0, x2 # load pc - ldr x4, [sp, #0xa0] + ldr x4, [sp, #0xa0] # restore stack from GP + FPU add sp, sp, #0xb0 diff --git a/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S b/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S index 29df555..958178e 100644 --- a/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S +++ b/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S @@ -58,24 +58,24 @@ _jump_fcontext: b.eq 1f ; save d8 - d15 - stp d8, d9, [x0, #0x00] - stp d10, d11, [x0, #0x10] - stp d12, d13, [x0, #0x20] - stp d14, d15, [x0, #0x30] + stp d8, d9, [sp, #0x00] + stp d10, d11, [sp, #0x10] + stp d12, d13, [sp, #0x20] + stp d14, d15, [sp, #0x30] 1: #endif ; save x19-x30 - stp x19, x20, [sp, #0x40] - stp x21, x22, [sp, #0x50] - stp x23, x24, [sp, #0x60] - stp x25, x26, [sp, #0x70] - stp x27, x28, [sp, #0x80] - stp fp, lr, [sp, #0x90] + stp x19, x20, [sp, #0x40] + stp x21, x22, [sp, #0x50] + stp x23, x24, [sp, #0x60] + stp x25, x26, [sp, #0x70] + stp x27, x28, [sp, #0x80] + stp fp, lr, [sp, #0x90] ; save LR as PC - str lr, [sp, #0xa0] + str lr, [sp, #0xa0] ; store RSP (pointing to context-data) in first argument (x0). ; STR cannot have sp as a target register @@ -91,28 +91,28 @@ _jump_fcontext: b.eq 2f ; load d8 - d15 - ldp d8, d9, [x0, #0x00] - ldp d10, d11, [x0, #0x10] - ldp d12, d13, [x0, #0x20] - ldp d14, d15, [x0, #0x30] + ldp d8, d9, [sp, #0x00] + ldp d10, d11, [sp, #0x10] + ldp d12, d13, [sp, #0x20] + ldp d14, d15, [sp, #0x30] 2: #endif ; load x19-x30 - ldp x19, x20, [sp, #0x40] - ldp x21, x22, [sp, #0x50] - ldp x23, x24, [sp, #0x60] - ldp x25, x26, [sp, #0x70] - ldp x27, x28, [sp, #0x80] - ldp fp, lr, [sp, #0x90] + ldp x19, x20, [sp, #0x40] + ldp x21, x22, [sp, #0x50] + ldp x23, x24, [sp, #0x60] + ldp x25, x26, [sp, #0x70] + ldp x27, x28, [sp, #0x80] + ldp fp, lr, [sp, #0x90] ; use third arg as return value after jump ; and as first arg in context function mov x0, x2 ; load pc - ldr x4, [sp, #0xa0] + ldr x4, [sp, #0xa0] ; restore stack from GP + FPU add sp, sp, #0xb0 -- 2.3.5