xref: /xnu-11215.41.3/san/memory/kasan-test-arm64.s (revision 33de042d024d46de5ff4e89f2471de6608e37fa4)
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        add             x1, sp, #0      /* can't STP from sp */
23        stp             x19, x20,       [x0, JMP_r19_20]
24        stp             x21, x22,       [x0, JMP_r21_22]
25        stp             x23, x24,       [x0, JMP_r23_24]
26        stp             x25, x26,       [x0, JMP_r25_26]
27        stp             x27, x28,       [x0, JMP_r27_28]
28        stp             x29, lr,        [x0, JMP_r29_lr]
29        stp             fp, x1,         [x0, JMP_fp_sp]
30        stp             d8, d9,         [x0, JMP_d8_d9]
31        stp             d10, d11,       [x0, JMP_d10_d11]
32        stp             d12, d13,       [x0, JMP_d12_d13]
33        stp             d14, d15,       [x0, JMP_d14_d15]
34        mov             x0, #0
35        ret
36
37.align 5
38.globl EXT(_longjmp)
39LEXT(_longjmp)
40        ldp             x19, x20,       [x0, JMP_r19_20]
41        ldp             x21, x22,       [x0, JMP_r21_22]
42        ldp             x23, x24,       [x0, JMP_r23_24]
43        ldp             x25, x26,       [x0, JMP_r25_26]
44        ldp             x27, x28,       [x0, JMP_r27_28]
45        ldp             x29, lr,        [x0, JMP_r29_lr]
46        ldp             fp, x2,         [x0, JMP_fp_sp]
47        ldp             d8, d9,         [x0, JMP_d8_d9]
48        ldp             d10, d11,       [x0, JMP_d10_d11]
49        ldp             d12, d13,       [x0, JMP_d12_d13]
50        ldp             d14, d15,       [x0, JMP_d14_d15]
51        add             sp, x2, #0
52        mov             x0, x1
53        cmp             x0, #0          /* longjmp returns 1 if val is 0 */
54        b.ne    1f
55        add             x0, x0, #1
561:      ret
57
58