forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.7 KiB
80 lines
1.7 KiB
/* SPDX-License-Identifier: GPL-2.0-only */ |
|
/* |
|
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) |
|
*/ |
|
|
|
#ifndef _ASM_ARC_SYSCALL_H |
|
#define _ASM_ARC_SYSCALL_H 1 |
|
|
|
#include <uapi/linux/audit.h> |
|
#include <linux/err.h> |
|
#include <linux/sched.h> |
|
#include <asm/unistd.h> |
|
#include <asm/ptrace.h> /* in_syscall() */ |
|
|
|
extern void *sys_call_table[]; |
|
|
|
static inline long |
|
syscall_get_nr(struct task_struct *task, struct pt_regs *regs) |
|
{ |
|
if (user_mode(regs) && in_syscall(regs)) |
|
return regs->r8; |
|
else |
|
return -1; |
|
} |
|
|
|
static inline void |
|
syscall_rollback(struct task_struct *task, struct pt_regs *regs) |
|
{ |
|
regs->r0 = regs->orig_r0; |
|
} |
|
|
|
static inline long |
|
syscall_get_error(struct task_struct *task, struct pt_regs *regs) |
|
{ |
|
/* 0 if syscall succeeded, otherwise -Errorcode */ |
|
return IS_ERR_VALUE(regs->r0) ? regs->r0 : 0; |
|
} |
|
|
|
static inline long |
|
syscall_get_return_value(struct task_struct *task, struct pt_regs *regs) |
|
{ |
|
return regs->r0; |
|
} |
|
|
|
static inline void |
|
syscall_set_return_value(struct task_struct *task, struct pt_regs *regs, |
|
int error, long val) |
|
{ |
|
regs->r0 = (long) error ?: val; |
|
} |
|
|
|
/* |
|
* @i: argument index [0,5] |
|
* @n: number of arguments; n+i must be [1,6]. |
|
*/ |
|
static inline void |
|
syscall_get_arguments(struct task_struct *task, struct pt_regs *regs, |
|
unsigned long *args) |
|
{ |
|
unsigned long *inside_ptregs = &(regs->r0); |
|
unsigned int n = 6; |
|
unsigned int i = 0; |
|
|
|
while (n--) { |
|
args[i++] = (*inside_ptregs); |
|
inside_ptregs--; |
|
} |
|
} |
|
|
|
static inline int |
|
syscall_get_arch(struct task_struct *task) |
|
{ |
|
return IS_ENABLED(CONFIG_ISA_ARCOMPACT) |
|
? (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) |
|
? AUDIT_ARCH_ARCOMPACTBE : AUDIT_ARCH_ARCOMPACT) |
|
: (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) |
|
? AUDIT_ARCH_ARCV2BE : AUDIT_ARCH_ARCV2); |
|
} |
|
|
|
#endif
|
|
|