File Index
Files and directories
Sign in
FILE

syscall.h

File preview with syntax highlighting.

linux-6.19.14/arch/loongarch/include/asm/syscall.h C
 1/* SPDX-License-Identifier: GPL-2.0+ */
 2/*
 3 * Author: Hanlu Li <lihanlu@loongson.cn>
 4 *         Huacai Chen <chenhuacai@loongson.cn>
 5 *
 6 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
 7 */
 8
 9#ifndef __ASM_LOONGARCH_SYSCALL_H
10#define __ASM_LOONGARCH_SYSCALL_H
11
12#include <linux/compiler.h>
13#include <uapi/linux/audit.h>
14#include <linux/elf-em.h>
15#include <linux/kernel.h>
16#include <linux/sched.h>
17#include <linux/uaccess.h>
18#include <asm/ptrace.h>
19#include <asm/unistd.h>
20
21extern void *sys_call_table[];
22
23static inline long syscall_get_nr(struct task_struct *task,
24				  struct pt_regs *regs)
25{
26	return regs->regs[11];
27}
28
29static inline void syscall_set_nr(struct task_struct *task,
30				  struct pt_regs *regs,
31				  int nr)
32{
33	regs->regs[11] = nr;
34}
35
36static inline void syscall_rollback(struct task_struct *task,
37				    struct pt_regs *regs)
38{
39        regs->regs[4] = regs->orig_a0;
40}
41
42static inline long syscall_get_error(struct task_struct *task,
43				     struct pt_regs *regs)
44{
45	unsigned long error = regs->regs[4];
46
47	return IS_ERR_VALUE(error) ? error : 0;
48}
49
50static inline long syscall_get_return_value(struct task_struct *task,
51					    struct pt_regs *regs)
52{
53	return regs->regs[4];
54}
55
56static inline void syscall_set_return_value(struct task_struct *task,
57					    struct pt_regs *regs,
58					    int error, long val)
59{
60	regs->regs[4] = (long) error ? error : val;
61}
62
63static inline void syscall_get_arguments(struct task_struct *task,
64					 struct pt_regs *regs,
65					 unsigned long *args)
66{
67	args[0] = regs->orig_a0;
68	memcpy(&args[1], &regs->regs[5], 5 * sizeof(long));
69}
70
71static inline void syscall_set_arguments(struct task_struct *task,
72					 struct pt_regs *regs,
73					 unsigned long *args)
74{
75	regs->orig_a0 = args[0];
76	memcpy(&regs->regs[5], &args[1], 5 * sizeof(long));
77}
78
79static inline int syscall_get_arch(struct task_struct *task)
80{
81	return AUDIT_ARCH_LOONGARCH64;
82}
83
84static inline bool arch_syscall_is_vdso_sigreturn(struct pt_regs *regs)
85{
86	return false;
87}
88
89#endif	/* __ASM_LOONGARCH_SYSCALL_H */
~/ Read-only file preview.