UnwindRegistersRestore.S revision b78da9875b6e35187b5d584746c78faaf3230a3d
1b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//===-------------------- UnwindRegistersRestore.s ------------------------===// 2b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// 3b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// The LLVM Compiler Infrastructure 4b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// 5b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// This file is dual licensed under the MIT and the University of Illinois Open 6b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// Source Licenses. See LICENSE.TXT for details. 7b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// 8b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//===----------------------------------------------------------------------===// 9b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 10b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 11b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik .text 12b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 13b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#if __i386__ 14b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 15b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# 16b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# extern int unw_getcontext(unw_context_t* thread_state) 17b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# 18b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# On entry: 19b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# + + 20b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# +-----------------------+ 21b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# + thread_state pointer + 22b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# +-----------------------+ 23b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# + return address + 24b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# +-----------------------+ <-- SP 25b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# + + 26b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# 27b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik .globl _unw_getcontext 28b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik_unw_getcontext: 29b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik push %eax 30b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl 8(%esp), %eax 31b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %ebx, 4(%eax) 32b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %ecx, 8(%eax) 33b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %edx, 12(%eax) 34b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %edi, 16(%eax) 35b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %esi, 20(%eax) 36b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %ebp, 24(%eax) 37b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %esp, %edx 38b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik addl $8, %edx 39b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %edx, 28(%eax) # store what sp was at call site as esp 40b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip ss 41b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip eflags 42b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl 4(%esp), %edx 43b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %edx, 40(%eax) # store return address as eip 44b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip cs 45b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip ds 46b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip es 47b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip fs 48b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip gs 49b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl (%esp), %edx 50b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movl %edx, (%eax) # store original eax 51b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik popl %eax 52b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik xorl %eax, %eax # return UNW_ESUCCESS 53b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ret 54b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 55b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#elif __x86_64__ 56b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 57b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# 58b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# extern int unw_getcontext(unw_context_t* thread_state) 59b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# 60b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# On entry: 61b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# thread_state pointer is in rdi 62b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik# 63b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik .globl _unw_getcontext 64b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik_unw_getcontext: 65b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %rax, (%rdi) 66b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %rbx, 8(%rdi) 67b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %rcx, 16(%rdi) 68b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %rdx, 24(%rdi) 69b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %rdi, 32(%rdi) 70b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %rsi, 40(%rdi) 71b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %rbp, 48(%rdi) 72b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %rsp, 56(%rdi) 73b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik addq $8, 56(%rdi) 74b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %r8, 64(%rdi) 75b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %r9, 72(%rdi) 76b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %r10, 80(%rdi) 77b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %r11, 88(%rdi) 78b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %r12, 96(%rdi) 79b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %r13,104(%rdi) 80b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %r14,112(%rdi) 81b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %r15,120(%rdi) 82b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq (%rsp),%rsi 83b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik movq %rsi,128(%rdi) # store return address as rip 84b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip rflags 85b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip cs 86b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip fs 87b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik # skip gs 88b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik xorl %eax, %eax # return UNW_ESUCCESS 89b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ret 90b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 91b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#elif __ppc__ 92b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 93b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; 94b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; extern int unw_getcontext(unw_context_t* thread_state) 95b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; 96b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; On entry: 97b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; thread_state pointer is in r3 98b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; 99b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik .globl _unw_getcontext 100b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik_unw_getcontext: 101b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r0, 8(r3) 102b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik mflr r0 103b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r0, 0(r3) ; store lr as ssr0 104b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r1, 12(r3) 105b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r2, 16(r3) 106b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r3, 20(r3) 107b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r4, 24(r3) 108b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r5, 28(r3) 109b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r6, 32(r3) 110b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r7, 36(r3) 111b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r8, 40(r3) 112b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r9, 44(r3) 113b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r10, 48(r3) 114b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r11, 52(r3) 115b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r12, 56(r3) 116b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r13, 60(r3) 117b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r14, 64(r3) 118b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r15, 68(r3) 119b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r16, 72(r3) 120b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r17, 76(r3) 121b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r18, 80(r3) 122b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r19, 84(r3) 123b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r20, 88(r3) 124b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r21, 92(r3) 125b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r22, 96(r3) 126b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r23,100(r3) 127b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r24,104(r3) 128b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r25,108(r3) 129b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r26,112(r3) 130b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r27,116(r3) 131b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r28,120(r3) 132b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r29,124(r3) 133b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r30,128(r3) 134b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r31,132(r3) 135b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 136b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ; save VRSave register 137b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik mfspr r0,256 138b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r0,156(r3) 139b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ; save CR registers 140b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik mfcr r0 141b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r0,136(r3) 142b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ; save CTR register 143b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik mfctr r0 144b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r0,148(r3) 145b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 146b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ; save float registers 147b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f0, 160(r3) 148b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f1, 168(r3) 149b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f2, 176(r3) 150b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f3, 184(r3) 151b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f4, 192(r3) 152b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f5, 200(r3) 153b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f6, 208(r3) 154b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f7, 216(r3) 155b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f8, 224(r3) 156b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f9, 232(r3) 157b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f10,240(r3) 158b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f11,248(r3) 159b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f12,256(r3) 160b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f13,264(r3) 161b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f14,272(r3) 162b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f15,280(r3) 163b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f16,288(r3) 164b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f17,296(r3) 165b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f18,304(r3) 166b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f19,312(r3) 167b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f20,320(r3) 168b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f21,328(r3) 169b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f22,336(r3) 170b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f23,344(r3) 171b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f24,352(r3) 172b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f25,360(r3) 173b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f26,368(r3) 174b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f27,376(r3) 175b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f28,384(r3) 176b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f29,392(r3) 177b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f30,400(r3) 178b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stfd f31,408(r3) 179b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 180b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 181b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ; save vector registers 182b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 183b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik subi r4,r1,16 184b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik rlwinm r4,r4,0,0,27 ; mask low 4-bits 185b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ; r4 is now a 16-byte aligned pointer into the red zone 186b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 187b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#define SAVE_VECTOR_UNALIGNED(_vec, _offset) \ 188b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stvx _vec,0,r4 @\ 189b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik lwz r5, 0(r4) @\ 190b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r5, _offset(r3) @\ 191b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik lwz r5, 4(r4) @\ 192b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r5, _offset+4(r3) @\ 193b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik lwz r5, 8(r4) @\ 194b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r5, _offset+8(r3) @\ 195b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik lwz r5, 12(r4) @\ 196b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stw r5, _offset+12(r3) 197b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 198b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v0, 424+0x000) 199b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v1, 424+0x010) 200b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v2, 424+0x020) 201b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v3, 424+0x030) 202b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v4, 424+0x040) 203b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v5, 424+0x050) 204b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v6, 424+0x060) 205b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v7, 424+0x070) 206b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v8, 424+0x080) 207b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED( v9, 424+0x090) 208b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v10, 424+0x0A0) 209b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v11, 424+0x0B0) 210b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v12, 424+0x0C0) 211b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v13, 424+0x0D0) 212b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v14, 424+0x0E0) 213b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v15, 424+0x0F0) 214b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v16, 424+0x100) 215b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v17, 424+0x110) 216b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v18, 424+0x120) 217b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v19, 424+0x130) 218b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v20, 424+0x140) 219b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v21, 424+0x150) 220b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v22, 424+0x160) 221b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v23, 424+0x170) 222b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v24, 424+0x180) 223b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v25, 424+0x190) 224b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v26, 424+0x1A0) 225b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v27, 424+0x1B0) 226b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v28, 424+0x1C0) 227b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v29, 424+0x1D0) 228b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v30, 424+0x1E0) 229b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik SAVE_VECTOR_UNALIGNED(v31, 424+0x1F0) 230b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 231b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik li r3, 0 ; return UNW_ESUCCESS 232b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik blr 233b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 234b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 235b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#elif __arm64__ 236b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 237b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; 238b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; extern int unw_getcontext(unw_context_t* thread_state) 239b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; 240b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; On entry: 241b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; thread_state pointer is in x0 242b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik; 243b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik .globl _unw_getcontext 244b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik_unw_getcontext: 245b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x0, x1, [x0, #0x000] 246b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x2, x3, [x0, #0x010] 247b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x4, x5, [x0, #0x020] 248b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x6, x7, [x0, #0x030] 249b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x8, x9, [x0, #0x040] 250b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x10,x11, [x0, #0x050] 251b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x12,x13, [x0, #0x060] 252b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x14,x15, [x0, #0x070] 253b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x16,x17, [x0, #0x080] 254b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x18,x19, [x0, #0x090] 255b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x20,x21, [x0, #0x0A0] 256b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x22,x23, [x0, #0x0B0] 257b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x24,x25, [x0, #0x0C0] 258b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x26,x27, [x0, #0x0D0] 259b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp x28,fp, [x0, #0x0E0] 260b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik str lr, [x0, #0x0F0] 261b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik mov x1,sp 262b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik str x1, [x0, #0x0F8] 263b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik str lr, [x0, #0x100] ; store return address as pc 264b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ; skip cpsr 265b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d0, d1, [x0, #0x110] 266b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d2, d3, [x0, #0x120] 267b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d4, d5, [x0, #0x130] 268b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d6, d7, [x0, #0x140] 269b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d8, d9, [x0, #0x150] 270b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d10,d11, [x0, #0x160] 271b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d12,d13, [x0, #0x170] 272b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d14,d15, [x0, #0x180] 273b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d16,d17, [x0, #0x190] 274b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d18,d19, [x0, #0x1A0] 275b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d20,d21, [x0, #0x1B0] 276b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d22,d23, [x0, #0x1C0] 277b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d24,d25, [x0, #0x1D0] 278b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d26,d27, [x0, #0x1E0] 279b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik stp d28,d29, [x0, #0x1F0] 280b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik str d30, [x0, #0x200] 281b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik str d31, [x0, #0x208] 282b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ldr x0, #0 ; return UNW_ESUCCESS 283b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik ret 284b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 285b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#endif 286b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik 287