syscall.h (1442B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Access to user system call parameters and results 4 * 5 * Copyright (C) 2008 Intel Corp. Shaohua Li <shaohua.li@intel.com> 6 * 7 * See asm-generic/syscall.h for descriptions of what we must do here. 8 */ 9 10#ifndef _ASM_SYSCALL_H 11#define _ASM_SYSCALL_H 1 12 13#include <uapi/linux/audit.h> 14#include <linux/sched.h> 15#include <linux/err.h> 16 17static inline long syscall_get_nr(struct task_struct *task, 18 struct pt_regs *regs) 19{ 20 if ((long)regs->cr_ifs < 0) /* Not a syscall */ 21 return -1; 22 23 return regs->r15; 24} 25 26static inline void syscall_rollback(struct task_struct *task, 27 struct pt_regs *regs) 28{ 29 /* do nothing */ 30} 31 32static inline long syscall_get_error(struct task_struct *task, 33 struct pt_regs *regs) 34{ 35 return regs->r10 == -1 ? -regs->r8:0; 36} 37 38static inline long syscall_get_return_value(struct task_struct *task, 39 struct pt_regs *regs) 40{ 41 return regs->r8; 42} 43 44static inline void syscall_set_return_value(struct task_struct *task, 45 struct pt_regs *regs, 46 int error, long val) 47{ 48 if (error) { 49 /* error < 0, but ia64 uses > 0 return value */ 50 regs->r8 = -error; 51 regs->r10 = -1; 52 } else { 53 regs->r8 = val; 54 regs->r10 = 0; 55 } 56} 57 58extern void syscall_get_arguments(struct task_struct *task, 59 struct pt_regs *regs, unsigned long *args); 60 61static inline int syscall_get_arch(struct task_struct *task) 62{ 63 return AUDIT_ARCH_IA64; 64} 65#endif /* _ASM_SYSCALL_H */