OSDN Git Service

syscalls: Remove start and number from syscall_set_arguments() args
[uclinux-h8/linux.git] / include / asm-generic / syscall.h
1 /*
2  * Access to user system call parameters and results
3  *
4  * Copyright (C) 2008-2009 Red Hat, Inc.  All rights reserved.
5  *
6  * This copyrighted material is made available to anyone wishing to use,
7  * modify, copy, or redistribute it subject to the terms and conditions
8  * of the GNU General Public License v.2.
9  *
10  * This file is a stub providing documentation for what functions
11  * asm-ARCH/syscall.h files need to define.  Most arch definitions
12  * will be simple inlines.
13  *
14  * All of these functions expect to be called with no locks,
15  * and only when the caller is sure that the task of interest
16  * cannot return to user mode while we are looking at it.
17  */
18
19 #ifndef _ASM_SYSCALL_H
20 #define _ASM_SYSCALL_H  1
21
22 struct task_struct;
23 struct pt_regs;
24
25 /**
26  * syscall_get_nr - find what system call a task is executing
27  * @task:       task of interest, must be blocked
28  * @regs:       task_pt_regs() of @task
29  *
30  * If @task is executing a system call or is at system call
31  * tracing about to attempt one, returns the system call number.
32  * If @task is not executing a system call, i.e. it's blocked
33  * inside the kernel for a fault or signal, returns -1.
34  *
35  * Note this returns int even on 64-bit machines.  Only 32 bits of
36  * system call number can be meaningful.  If the actual arch value
37  * is 64 bits, this truncates to 32 bits so 0xffffffff means -1.
38  *
39  * It's only valid to call this when @task is known to be blocked.
40  */
41 int syscall_get_nr(struct task_struct *task, struct pt_regs *regs);
42
43 /**
44  * syscall_rollback - roll back registers after an aborted system call
45  * @task:       task of interest, must be in system call exit tracing
46  * @regs:       task_pt_regs() of @task
47  *
48  * It's only valid to call this when @task is stopped for system
49  * call exit tracing (due to TIF_SYSCALL_TRACE or TIF_SYSCALL_AUDIT),
50  * after tracehook_report_syscall_entry() returned nonzero to prevent
51  * the system call from taking place.
52  *
53  * This rolls back the register state in @regs so it's as if the
54  * system call instruction was a no-op.  The registers containing
55  * the system call number and arguments are as they were before the
56  * system call instruction.  This may not be the same as what the
57  * register state looked like at system call entry tracing.
58  */
59 void syscall_rollback(struct task_struct *task, struct pt_regs *regs);
60
61 /**
62  * syscall_get_error - check result of traced system call
63  * @task:       task of interest, must be blocked
64  * @regs:       task_pt_regs() of @task
65  *
66  * Returns 0 if the system call succeeded, or -ERRORCODE if it failed.
67  *
68  * It's only valid to call this when @task is stopped for tracing on exit
69  * from a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
70  */
71 long syscall_get_error(struct task_struct *task, struct pt_regs *regs);
72
73 /**
74  * syscall_get_return_value - get the return value of a traced system call
75  * @task:       task of interest, must be blocked
76  * @regs:       task_pt_regs() of @task
77  *
78  * Returns the return value of the successful system call.
79  * This value is meaningless if syscall_get_error() returned nonzero.
80  *
81  * It's only valid to call this when @task is stopped for tracing on exit
82  * from a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
83  */
84 long syscall_get_return_value(struct task_struct *task, struct pt_regs *regs);
85
86 /**
87  * syscall_set_return_value - change the return value of a traced system call
88  * @task:       task of interest, must be blocked
89  * @regs:       task_pt_regs() of @task
90  * @error:      negative error code, or zero to indicate success
91  * @val:        user return value if @error is zero
92  *
93  * This changes the results of the system call that user mode will see.
94  * If @error is zero, the user sees a successful system call with a
95  * return value of @val.  If @error is nonzero, it's a negated errno
96  * code; the user sees a failed system call with this errno code.
97  *
98  * It's only valid to call this when @task is stopped for tracing on exit
99  * from a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
100  */
101 void syscall_set_return_value(struct task_struct *task, struct pt_regs *regs,
102                               int error, long val);
103
104 /**
105  * syscall_get_arguments - extract system call parameter values
106  * @task:       task of interest, must be blocked
107  * @regs:       task_pt_regs() of @task
108  * @args:       array filled with argument values
109  *
110  * Fetches 6 arguments to the system call.  First argument is stored in
111 *  @args[0], and so on.
112  *
113  * It's only valid to call this when @task is stopped for tracing on
114  * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
115  */
116 void syscall_get_arguments(struct task_struct *task, struct pt_regs *regs,
117                            unsigned long *args);
118
119 /**
120  * syscall_set_arguments - change system call parameter value
121  * @task:       task of interest, must be in system call entry tracing
122  * @regs:       task_pt_regs() of @task
123  * @args:       array of argument values to store
124  *
125  * Changes 6 arguments to the system call.
126  * The first argument gets value @args[0], and so on.
127  *
128  * It's only valid to call this when @task is stopped for tracing on
129  * entry to a system call, due to %TIF_SYSCALL_TRACE or %TIF_SYSCALL_AUDIT.
130  */
131 void syscall_set_arguments(struct task_struct *task, struct pt_regs *regs,
132                            const unsigned long *args);
133
134 /**
135  * syscall_get_arch - return the AUDIT_ARCH for the current system call
136  *
137  * Returns the AUDIT_ARCH_* based on the system call convention in use.
138  *
139  * It's only valid to call this when current is stopped on entry to a system
140  * call, due to %TIF_SYSCALL_TRACE, %TIF_SYSCALL_AUDIT, or %TIF_SECCOMP.
141  *
142  * Architectures which permit CONFIG_HAVE_ARCH_SECCOMP_FILTER must
143  * provide an implementation of this.
144  */
145 int syscall_get_arch(void);
146 #endif  /* _ASM_SYSCALL_H */