diff options
Diffstat (limited to 'src/linux/sparc/raw_syscall.h')
-rw-r--r-- | src/linux/sparc/raw_syscall.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/linux/sparc/raw_syscall.h b/src/linux/sparc/raw_syscall.h new file mode 100644 index 000000000..d4799fde0 --- /dev/null +++ b/src/linux/sparc/raw_syscall.h @@ -0,0 +1,38 @@ +/* + * Raw syscalls. + * + * Copyright (c) 2018 The strace developers. + * All rights reserved. + * + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#ifndef STRACE_RAW_SYSCALL_H +# define STRACE_RAW_SYSCALL_H + +# include "kernel_types.h" + +static inline kernel_ulong_t +raw_syscall_0(const kernel_ulong_t nr, kernel_ulong_t *err) +{ + register kernel_ulong_t g1 __asm__("g1") = nr; + register kernel_ulong_t rval __asm__("o0"); + __asm__ __volatile__("ta 0x10\n\t" + "bcc 1f\n\t" + "mov 0, %0\n\t" + "mov 1, %0\n\t" + "1:" + : "+r"(g1), "=r"(rval) + : + : "memory", "cc", "f0", "f1", "f2", "f3", "f4", + "f5", "f6", "f7", "f8", "f9", "f10", "f11", + "f12", "f13", "f14", "f15", "f16", "f17", + "f18", "f19", "f20", "f21", "f22", "f23", + "f24", "f25", "f26", "f27", "f28", "f29", + "f30", "f31"); + *err = g1; + return rval; +} +# define raw_syscall_0 raw_syscall_0 + +#endif /* !STRACE_RAW_SYSCALL_H */ |