#ifndef _ASM_X86_SYSCALL_H
#define _ASM_X86_SYSCALL_H
#include <uapi/linux/audit.h>
#include <linux/sched.h>
#include <linux/err.h>
#include <asm/thread_info.h>
#include <asm/unistd.h>
sys_call_ptr_t;
extern const sys_call_ptr_t sys_call_table[];
extern long ia32_sys_call(const struct pt_regs *, unsigned int nr);
extern long x32_sys_call(const struct pt_regs *, unsigned int nr);
extern long x64_sys_call(const struct pt_regs *, unsigned int nr);
static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
{ … }
static inline void syscall_rollback(struct task_struct *task,
struct pt_regs *regs)
{ … }
static inline long syscall_get_error(struct task_struct *task,
struct pt_regs *regs)
{ … }
static inline long syscall_get_return_value(struct task_struct *task,
struct pt_regs *regs)
{ … }
static inline void syscall_set_return_value(struct task_struct *task,
struct pt_regs *regs,
int error, long val)
{ … }
#ifdef CONFIG_X86_32
static inline void syscall_get_arguments(struct task_struct *task,
struct pt_regs *regs,
unsigned long *args)
{
memcpy(args, ®s->bx, 6 * sizeof(args[0]));
}
static inline int syscall_get_arch(struct task_struct *task)
{
return AUDIT_ARCH_I386;
}
#else
static inline void syscall_get_arguments(struct task_struct *task,
struct pt_regs *regs,
unsigned long *args)
{ … }
static inline int syscall_get_arch(struct task_struct *task)
{ … }
bool do_syscall_64(struct pt_regs *regs, int nr);
void do_int80_emulation(struct pt_regs *regs);
#endif
void do_int80_syscall_32(struct pt_regs *regs);
bool do_fast_syscall_32(struct pt_regs *regs);
bool do_SYSENTER_32(struct pt_regs *regs);
#endif