1 /*
2 * Raw syscalls.
3 *
4 * Copyright (c) 2018-2021 The strace developers.
5 * All rights reserved.
6 *
7 * SPDX-License-Identifier: LGPL-2.1-or-later
8 */
9
10 #ifndef STRACE_RAW_SYSCALL_H
11 # define STRACE_RAW_SYSCALL_H
12
13 # include "kernel_types.h"
14
15 static inline kernel_ulong_t
16 raw_syscall_0(const kernel_ulong_t nr, kernel_ulong_t *err)
17 {
18 register kernel_ulong_t r15 __asm__("r15") = nr;
19 register kernel_ulong_t r8 __asm__("r8");
20 register kernel_ulong_t r10 __asm__("r10");
21 __asm__ __volatile__("break 0x100000"
22 : "=r"(r8), "=r"(r10), "+r"(r15)
23 :
24 : "memory", "out0", "out1", "out2",
25 "out3", "out4", "out5", "out6", "out7",
26 "r2", "r3", "r9", "r11", "r13",
27 "r14", "r16", "r17", "r18", "r19", "r20",
28 "r21", "r22", "r23", "r24", "r25", "r26",
29 "r27", "r28", "r29", "r30", "r31",
30 "p6", "p7", "p8", "p9", "p10",
31 "p11", "p12", "p13", "p14", "p15",
32 "f6", "f7", "f8", "f9", "f10",
33 "f11", "f12", "f13", "f14", "f15",
34 "f5", "f6", "f7", "f8", "f9", "f10", "f11",
35 "b6", "b7");
36 *err = !!r10;
37 return r8;
38 }
39 # define raw_syscall_0 raw_syscall_0
40
41 #endif /* !STRACE_RAW_SYSCALL_H */