xref: /xnu-12377.41.6/san/memory/kasan-test-arm64.s (revision bbb1b6f9e71b8cdde6e5cd6f4841f207dee3d828)
1#include <arm64/proc_reg.h>
2#include <mach/arm64/asm.h>
3
4#define JMP_r19_20      #0x00
5#define JMP_r21_22      #0x10
6#define JMP_r23_24      #0x20
7#define JMP_r25_26      #0x30
8#define JMP_r27_28      #0x40
9#define JMP_r29_lr      #0x50
10#define JMP_fp_sp       #0x60
11
12#define JMP_d8_d9       #0x70
13#define JMP_d10_d11     #0x80
14#define JMP_d12_d13     #0x90
15#define JMP_d14_d15     #0xA0
16
17.text
18
19.align 5
20.globl EXT(_setjmp)
21LEXT(_setjmp)
22        ARM64_PROLOG
23        add             x1, sp, #0      /* can't STP from sp */
24        stp             x19, x20,       [x0, JMP_r19_20]
25        stp             x21, x22,       [x0, JMP_r21_22]
26        stp             x23, x24,       [x0, JMP_r23_24]
27        stp             x25, x26,       [x0, JMP_r25_26]
28        stp             x27, x28,       [x0, JMP_r27_28]
29        stp             x29, lr,        [x0, JMP_r29_lr]
30        stp             fp, x1,         [x0, JMP_fp_sp]
31        stp             d8, d9,         [x0, JMP_d8_d9]
32        stp             d10, d11,       [x0, JMP_d10_d11]
33        stp             d12, d13,       [x0, JMP_d12_d13]
34        stp             d14, d15,       [x0, JMP_d14_d15]
35        mov             x0, #0
36        ret
37
38.align 5
39.globl EXT(_longjmp)
40LEXT(_longjmp)
41        ARM64_PROLOG
42        ldp             x19, x20,       [x0, JMP_r19_20]
43        ldp             x21, x22,       [x0, JMP_r21_22]
44        ldp             x23, x24,       [x0, JMP_r23_24]
45        ldp             x25, x26,       [x0, JMP_r25_26]
46        ldp             x27, x28,       [x0, JMP_r27_28]
47        ldp             x29, lr,        [x0, JMP_r29_lr]
48        ldp             fp, x2,         [x0, JMP_fp_sp]
49        ldp             d8, d9,         [x0, JMP_d8_d9]
50        ldp             d10, d11,       [x0, JMP_d10_d11]
51        ldp             d12, d13,       [x0, JMP_d12_d13]
52        ldp             d14, d15,       [x0, JMP_d14_d15]
53        add             sp, x2, #0
54        mov             x0, x1
55        cmp             x0, #0          /* longjmp returns 1 if val is 0 */
56        b.ne    1f
57        add             x0, x0, #1
581:      ret
59
60