cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

syscall.h (1770B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
      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
     15extern void *sys_call_table[];
     16
     17static inline long
     18syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
     19{
     20	if (user_mode(regs) && in_syscall(regs))
     21		return regs->r8;
     22	else
     23		return -1;
     24}
     25
     26static inline void
     27syscall_rollback(struct task_struct *task, struct pt_regs *regs)
     28{
     29	regs->r0 = regs->orig_r0;
     30}
     31
     32static inline long
     33syscall_get_error(struct task_struct *task, struct pt_regs *regs)
     34{
     35	/* 0 if syscall succeeded, otherwise -Errorcode */
     36	return IS_ERR_VALUE(regs->r0) ? regs->r0 : 0;
     37}
     38
     39static inline long
     40syscall_get_return_value(struct task_struct *task, struct pt_regs *regs)
     41{
     42	return regs->r0;
     43}
     44
     45static inline void
     46syscall_set_return_value(struct task_struct *task, struct pt_regs *regs,
     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 [1,6].
     55 */
     56static inline void
     57syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,
     58		      unsigned long *args)
     59{
     60	unsigned long *inside_ptregs = &(regs->r0);
     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
     70static inline int
     71syscall_get_arch(struct task_struct *task)
     72{
     73	return IS_ENABLED(CONFIG_ISA_ARCOMPACT)
     74		? (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)
     75			? AUDIT_ARCH_ARCOMPACTBE : AUDIT_ARCH_ARCOMPACT)
     76		: (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)
     77			? AUDIT_ARCH_ARCV2BE : AUDIT_ARCH_ARCV2);
     78}
     79
     80#endif