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 (1867B)


      1/*
      2 * This file is subject to the terms and conditions of the GNU General Public
      3 * License.  See the file "COPYING" in the main directory of this archive
      4 * for more details.
      5 *
      6 * Copyright (C) 2001 - 2007 Tensilica Inc.
      7 * Copyright (C) 2018 Cadence Design Systems Inc.
      8 */
      9
     10#ifndef _ASM_SYSCALL_H
     11#define _ASM_SYSCALL_H
     12
     13#include <linux/err.h>
     14#include <asm/ptrace.h>
     15#include <uapi/linux/audit.h>
     16
     17static inline int syscall_get_arch(struct task_struct *task)
     18{
     19	return AUDIT_ARCH_XTENSA;
     20}
     21
     22typedef void (*syscall_t)(void);
     23extern syscall_t sys_call_table[];
     24
     25static inline long syscall_get_nr(struct task_struct *task,
     26				  struct pt_regs *regs)
     27{
     28	return regs->syscall;
     29}
     30
     31static inline void syscall_rollback(struct task_struct *task,
     32				    struct pt_regs *regs)
     33{
     34	/* Do nothing. */
     35}
     36
     37static inline long syscall_get_error(struct task_struct *task,
     38				     struct pt_regs *regs)
     39{
     40	/* 0 if syscall succeeded, otherwise -Errorcode */
     41	return IS_ERR_VALUE(regs->areg[2]) ? regs->areg[2] : 0;
     42}
     43
     44static inline long syscall_get_return_value(struct task_struct *task,
     45					    struct pt_regs *regs)
     46{
     47	return regs->areg[2];
     48}
     49
     50static inline void syscall_set_return_value(struct task_struct *task,
     51					    struct pt_regs *regs,
     52					    int error, long val)
     53{
     54	regs->areg[2] = (long) error ? error : val;
     55}
     56
     57#define SYSCALL_MAX_ARGS 6
     58#define XTENSA_SYSCALL_ARGUMENT_REGS {6, 3, 4, 5, 8, 9}
     59
     60static inline void syscall_get_arguments(struct task_struct *task,
     61					 struct pt_regs *regs,
     62					 unsigned long *args)
     63{
     64	static const unsigned int reg[] = XTENSA_SYSCALL_ARGUMENT_REGS;
     65	unsigned int i;
     66
     67	for (i = 0; i < 6; ++i)
     68		args[i] = regs->areg[reg[i]];
     69}
     70
     71asmlinkage long xtensa_rt_sigreturn(void);
     72asmlinkage long xtensa_shmat(int, char __user *, int);
     73asmlinkage long xtensa_fadvise64_64(int, int,
     74				    unsigned long long, unsigned long long);
     75
     76#endif