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_32.h (1628B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ASM_SH_SYSCALL_32_H
      3#define __ASM_SH_SYSCALL_32_H
      4
      5#include <uapi/linux/audit.h>
      6#include <linux/kernel.h>
      7#include <linux/sched.h>
      8#include <linux/err.h>
      9#include <asm/ptrace.h>
     10
     11/* The system call number is given by the user in R3 */
     12static inline long syscall_get_nr(struct task_struct *task,
     13				  struct pt_regs *regs)
     14{
     15	return (regs->tra >= 0) ? regs->regs[3] : -1L;
     16}
     17
     18static inline void syscall_rollback(struct task_struct *task,
     19				    struct pt_regs *regs)
     20{
     21	/*
     22	 * XXX: This needs some thought. On SH we don't
     23	 * save away the original r0 value anywhere.
     24	 */
     25}
     26
     27static inline long syscall_get_error(struct task_struct *task,
     28				     struct pt_regs *regs)
     29{
     30	return IS_ERR_VALUE(regs->regs[0]) ? regs->regs[0] : 0;
     31}
     32
     33static inline long syscall_get_return_value(struct task_struct *task,
     34					    struct pt_regs *regs)
     35{
     36	return regs->regs[0];
     37}
     38
     39static inline void syscall_set_return_value(struct task_struct *task,
     40					    struct pt_regs *regs,
     41					    int error, long val)
     42{
     43	regs->regs[0] = (long) error ?: val;
     44}
     45
     46static inline void syscall_get_arguments(struct task_struct *task,
     47					 struct pt_regs *regs,
     48					 unsigned long *args)
     49{
     50
     51	/* Argument pattern is: R4, R5, R6, R7, R0, R1 */
     52	args[5] = regs->regs[1];
     53	args[4] = regs->regs[0];
     54	args[3] = regs->regs[7];
     55	args[2] = regs->regs[6];
     56	args[1] = regs->regs[5];
     57	args[0] = regs->regs[4];
     58}
     59
     60static inline int syscall_get_arch(struct task_struct *task)
     61{
     62	int arch = AUDIT_ARCH_SH;
     63
     64#ifdef CONFIG_CPU_LITTLE_ENDIAN
     65	arch |= __AUDIT_ARCH_LE;
     66#endif
     67	return arch;
     68}
     69#endif /* __ASM_SH_SYSCALL_32_H */