syscall.h (1477B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* syscall.h */ 3 4#ifndef _ASM_PARISC_SYSCALL_H_ 5#define _ASM_PARISC_SYSCALL_H_ 6 7#include <uapi/linux/audit.h> 8#include <linux/compat.h> 9#include <linux/err.h> 10#include <asm/ptrace.h> 11 12#define NR_syscalls (__NR_Linux_syscalls) 13 14static inline long syscall_get_nr(struct task_struct *tsk, 15 struct pt_regs *regs) 16{ 17 return regs->gr[20]; 18} 19 20static inline void syscall_get_arguments(struct task_struct *tsk, 21 struct pt_regs *regs, 22 unsigned long *args) 23{ 24 args[5] = regs->gr[21]; 25 args[4] = regs->gr[22]; 26 args[3] = regs->gr[23]; 27 args[2] = regs->gr[24]; 28 args[1] = regs->gr[25]; 29 args[0] = regs->gr[26]; 30} 31 32static inline long syscall_get_error(struct task_struct *task, 33 struct pt_regs *regs) 34{ 35 unsigned long error = regs->gr[28]; 36 return IS_ERR_VALUE(error) ? error : 0; 37} 38 39static inline long syscall_get_return_value(struct task_struct *task, 40 struct pt_regs *regs) 41{ 42 return regs->gr[28]; 43} 44 45static inline void syscall_set_return_value(struct task_struct *task, 46 struct pt_regs *regs, 47 int error, long val) 48{ 49 regs->gr[28] = error ? error : val; 50} 51 52static inline void syscall_rollback(struct task_struct *task, 53 struct pt_regs *regs) 54{ 55 /* do nothing */ 56} 57 58static inline int syscall_get_arch(struct task_struct *task) 59{ 60 int arch = AUDIT_ARCH_PARISC; 61#ifdef CONFIG_64BIT 62 if (!__is_compat_task(task)) 63 arch = AUDIT_ARCH_PARISC64; 64#endif 65 return arch; 66} 67#endif /*_ASM_PARISC_SYSCALL_H_*/