1 /* SPDX-License-Identifier: GPL-2.0-only */ 1 2 /* 3 * Copyright (C) 2004, 2007-2010, 2011-2012 Sy 4 */ 5 6 #ifndef _ASM_ARC_SYSCALL_H 7 #define _ASM_ARC_SYSCALL_H 1 8 9 #include <uapi/linux/audit.h> 10 #include <linux/err.h> 11 #include <linux/sched.h> 12 #include <asm/unistd.h> 13 #include <asm/ptrace.h> /* in_syscall( 14 15 extern void *sys_call_table[]; 16 17 static inline long 18 syscall_get_nr(struct task_struct *task, struc 19 { 20 if (user_mode(regs) && in_syscall(regs 21 return regs->r8; 22 else 23 return -1; 24 } 25 26 static inline void 27 syscall_rollback(struct task_struct *task, str 28 { 29 regs->r0 = regs->orig_r0; 30 } 31 32 static inline long 33 syscall_get_error(struct task_struct *task, st 34 { 35 /* 0 if syscall succeeded, otherwise - 36 return IS_ERR_VALUE(regs->r0) ? regs-> 37 } 38 39 static inline long 40 syscall_get_return_value(struct task_struct *t 41 { 42 return regs->r0; 43 } 44 45 static inline void 46 syscall_set_return_value(struct task_struct *t 47 int error, long val) 48 { 49 regs->r0 = (long) error ?: val; 50 } 51 52 /* 53 * @i: argument index [0,5] 54 * @n: number of arguments; n+i must be [ 55 */ 56 static inline void 57 syscall_get_arguments(struct task_struct *task 58 unsigned long *args) 59 { 60 unsigned long *inside_ptregs = &(regs- 61 unsigned int n = 6; 62 unsigned int i = 0; 63 64 while (n--) { 65 args[i++] = (*inside_ptregs); 66 inside_ptregs--; 67 } 68 } 69 70 static inline int 71 syscall_get_arch(struct task_struct *task) 72 { 73 return IS_ENABLED(CONFIG_ISA_ARCOMPACT 74 ? (IS_ENABLED(CONFIG_CPU_BIG_E 75 ? AUDIT_ARCH_ARCOMPACT 76 : (IS_ENABLED(CONFIG_CPU_BIG_E 77 ? AUDIT_ARCH_ARCV2BE : 78 } 79 80 #endif 81
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.