| // Mark stack as non-executable |
| #if defined(__linux__) && defined(__ELF__) |
| .section .note.GNU-stack, "", %progbits |
| #endif |
| |
| .text |
| .code 32 |
| .arm |
| .align |
| |
| |
| .globl swap_registers |
| swap_registers: |
| str r0, [r0, #0] |
| str r3, [r0, #12] |
| str r4, [r0, #16] |
| str r5, [r0, #20] |
| str r6, [r0, #24] |
| str r7, [r0, #28] |
| str r8, [r0, #32] |
| str r9, [r0, #36] |
| str r10, [r0, #40] |
| str r11, [r0, #44] |
| str r12, [r0, #48] |
| str sp, [r0, #52] |
| str lr, [r0, #56] |
| |
| mrs r2, cpsr |
| str r2, [r0, #64] |
| |
| |
| ldr r0, [r1, #0] |
| ldr r3, [r1, #12] |
| ldr r4, [r1, #16] |
| ldr r5, [r1, #20] |
| ldr r6, [r1, #24] |
| ldr r7, [r1, #28] |
| ldr r8, [r1, #32] |
| ldr r9, [r1, #36] |
| ldr r10, [r1, #40] |
| ldr r11, [r1, #44] |
| ldr r12, [r1, #48] |
| |
| ldr sp, [r1, #52] |
| ldr lr, [r1, #56] |
| |
| ldr r2, [r1, #64] |
| msr cpsr_cxsf, r2 |
| |
| mov pc, lr |