mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-23 07:20:09 +07:00
2938c1f8fa
syscall_get_error() is required to be implemented on all architectures in addition to already implemented syscall_get_nr(), syscall_get_arguments(), syscall_get_return_value(), and syscall_get_arch() functions in order to extend the generic ptrace API with PTRACE_GET_SYSCALL_INFO request. Link: http://lkml.kernel.org/r/20190510152812.GD28558@altlinux.org Signed-off-by: Dmitry V. Levin <ldv@altlinux.org> Acked-by: Helge Deller <deller@gmx.de> [parisc] Cc: James E.J. Bottomley <jejb@parisc-linux.org> Cc: Elvira Khabirova <lineprinter@altlinux.org> Cc: Eugene Syromyatnikov <esyr@redhat.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Andy Lutomirski <luto@kernel.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Greentime Hu <greentime@andestech.com> Cc: James Hogan <jhogan@kernel.org> Cc: kbuild test robot <lkp@intel.com> Cc: Kees Cook <keescook@chromium.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Paul Burton <paul.burton@mips.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Richard Kuo <rkuo@codeaurora.org> Cc: Shuah Khan <shuah@kernel.org> Cc: Vincent Chen <deanbo422@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
68 lines
1.4 KiB
C
68 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* syscall.h */
|
|
|
|
#ifndef _ASM_PARISC_SYSCALL_H_
|
|
#define _ASM_PARISC_SYSCALL_H_
|
|
|
|
#include <uapi/linux/audit.h>
|
|
#include <linux/compat.h>
|
|
#include <linux/err.h>
|
|
#include <asm/ptrace.h>
|
|
|
|
#define NR_syscalls (__NR_Linux_syscalls)
|
|
|
|
static inline long syscall_get_nr(struct task_struct *tsk,
|
|
struct pt_regs *regs)
|
|
{
|
|
return regs->gr[20];
|
|
}
|
|
|
|
static inline void syscall_get_arguments(struct task_struct *tsk,
|
|
struct pt_regs *regs,
|
|
unsigned long *args)
|
|
{
|
|
args[5] = regs->gr[21];
|
|
args[4] = regs->gr[22];
|
|
args[3] = regs->gr[23];
|
|
args[2] = regs->gr[24];
|
|
args[1] = regs->gr[25];
|
|
args[0] = regs->gr[26];
|
|
}
|
|
|
|
static inline long syscall_get_error(struct task_struct *task,
|
|
struct pt_regs *regs)
|
|
{
|
|
unsigned long error = regs->gr[28];
|
|
return IS_ERR_VALUE(error) ? error : 0;
|
|
}
|
|
|
|
static inline long syscall_get_return_value(struct task_struct *task,
|
|
struct pt_regs *regs)
|
|
{
|
|
return regs->gr[28];
|
|
}
|
|
|
|
static inline void syscall_set_return_value(struct task_struct *task,
|
|
struct pt_regs *regs,
|
|
int error, long val)
|
|
{
|
|
regs->gr[28] = error ? error : val;
|
|
}
|
|
|
|
static inline void syscall_rollback(struct task_struct *task,
|
|
struct pt_regs *regs)
|
|
{
|
|
/* do nothing */
|
|
}
|
|
|
|
static inline int syscall_get_arch(struct task_struct *task)
|
|
{
|
|
int arch = AUDIT_ARCH_PARISC;
|
|
#ifdef CONFIG_64BIT
|
|
if (!__is_compat_task(task))
|
|
arch = AUDIT_ARCH_PARISC64;
|
|
#endif
|
|
return arch;
|
|
}
|
|
#endif /*_ASM_PARISC_SYSCALL_H_*/
|