aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/syscalls.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/syscalls.h')
-rw-r--r--include/linux/syscalls.h87
1 files changed, 22 insertions, 65 deletions
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index a990ace1a838..65793e90d6f6 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -25,6 +25,7 @@ struct linux_dirent64;
25struct list_head; 25struct list_head;
26struct msgbuf; 26struct msgbuf;
27struct msghdr; 27struct msghdr;
28struct mmsghdr;
28struct msqid_ds; 29struct msqid_ds;
29struct new_utsname; 30struct new_utsname;
30struct nfsctl_arg; 31struct nfsctl_arg;
@@ -99,37 +100,14 @@ struct perf_event_attr;
99#define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) 100#define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__)
100 101
101#ifdef CONFIG_EVENT_PROFILE 102#ifdef CONFIG_EVENT_PROFILE
102#define TRACE_SYS_ENTER_PROFILE(sname) \
103static int prof_sysenter_enable_##sname(void) \
104{ \
105 return reg_prof_syscall_enter("sys"#sname); \
106} \
107 \
108static void prof_sysenter_disable_##sname(void) \
109{ \
110 unreg_prof_syscall_enter("sys"#sname); \
111}
112
113#define TRACE_SYS_EXIT_PROFILE(sname) \
114static int prof_sysexit_enable_##sname(void) \
115{ \
116 return reg_prof_syscall_exit("sys"#sname); \
117} \
118 \
119static void prof_sysexit_disable_##sname(void) \
120{ \
121 unreg_prof_syscall_exit("sys"#sname); \
122}
123 103
124#define TRACE_SYS_ENTER_PROFILE_INIT(sname) \ 104#define TRACE_SYS_ENTER_PROFILE_INIT(sname) \
125 .profile_count = ATOMIC_INIT(-1), \ 105 .profile_enable = prof_sysenter_enable, \
126 .profile_enable = prof_sysenter_enable_##sname, \ 106 .profile_disable = prof_sysenter_disable,
127 .profile_disable = prof_sysenter_disable_##sname,
128 107
129#define TRACE_SYS_EXIT_PROFILE_INIT(sname) \ 108#define TRACE_SYS_EXIT_PROFILE_INIT(sname) \
130 .profile_count = ATOMIC_INIT(-1), \ 109 .profile_enable = prof_sysexit_enable, \
131 .profile_enable = prof_sysexit_enable_##sname, \ 110 .profile_disable = prof_sysexit_disable,
132 .profile_disable = prof_sysexit_disable_##sname,
133#else 111#else
134#define TRACE_SYS_ENTER_PROFILE(sname) 112#define TRACE_SYS_ENTER_PROFILE(sname)
135#define TRACE_SYS_ENTER_PROFILE_INIT(sname) 113#define TRACE_SYS_ENTER_PROFILE_INIT(sname)
@@ -153,74 +131,46 @@ static void prof_sysexit_disable_##sname(void) \
153#define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) 131#define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__)
154 132
155#define SYSCALL_TRACE_ENTER_EVENT(sname) \ 133#define SYSCALL_TRACE_ENTER_EVENT(sname) \
134 static const struct syscall_metadata __syscall_meta_##sname; \
156 static struct ftrace_event_call event_enter_##sname; \ 135 static struct ftrace_event_call event_enter_##sname; \
157 struct trace_event enter_syscall_print_##sname = { \ 136 static struct trace_event enter_syscall_print_##sname = { \
158 .trace = print_syscall_enter, \ 137 .trace = print_syscall_enter, \
159 }; \ 138 }; \
160 static int init_enter_##sname(void) \
161 { \
162 int num, id; \
163 num = syscall_name_to_nr("sys"#sname); \
164 if (num < 0) \
165 return -ENOSYS; \
166 id = register_ftrace_event(&enter_syscall_print_##sname);\
167 if (!id) \
168 return -ENODEV; \
169 event_enter_##sname.id = id; \
170 set_syscall_enter_id(num, id); \
171 INIT_LIST_HEAD(&event_enter_##sname.fields); \
172 return 0; \
173 } \
174 TRACE_SYS_ENTER_PROFILE(sname); \
175 static struct ftrace_event_call __used \ 139 static struct ftrace_event_call __used \
176 __attribute__((__aligned__(4))) \ 140 __attribute__((__aligned__(4))) \
177 __attribute__((section("_ftrace_events"))) \ 141 __attribute__((section("_ftrace_events"))) \
178 event_enter_##sname = { \ 142 event_enter_##sname = { \
179 .name = "sys_enter"#sname, \ 143 .name = "sys_enter"#sname, \
180 .system = "syscalls", \ 144 .system = "syscalls", \
181 .event = &event_syscall_enter, \ 145 .event = &enter_syscall_print_##sname, \
182 .raw_init = init_enter_##sname, \ 146 .raw_init = trace_event_raw_init, \
183 .show_format = syscall_enter_format, \ 147 .show_format = syscall_enter_format, \
184 .define_fields = syscall_enter_define_fields, \ 148 .define_fields = syscall_enter_define_fields, \
185 .regfunc = reg_event_syscall_enter, \ 149 .regfunc = reg_event_syscall_enter, \
186 .unregfunc = unreg_event_syscall_enter, \ 150 .unregfunc = unreg_event_syscall_enter, \
187 .data = "sys"#sname, \ 151 .data = (void *)&__syscall_meta_##sname,\
188 TRACE_SYS_ENTER_PROFILE_INIT(sname) \ 152 TRACE_SYS_ENTER_PROFILE_INIT(sname) \
189 } 153 }
190 154
191#define SYSCALL_TRACE_EXIT_EVENT(sname) \ 155#define SYSCALL_TRACE_EXIT_EVENT(sname) \
156 static const struct syscall_metadata __syscall_meta_##sname; \
192 static struct ftrace_event_call event_exit_##sname; \ 157 static struct ftrace_event_call event_exit_##sname; \
193 struct trace_event exit_syscall_print_##sname = { \ 158 static struct trace_event exit_syscall_print_##sname = { \
194 .trace = print_syscall_exit, \ 159 .trace = print_syscall_exit, \
195 }; \ 160 }; \
196 static int init_exit_##sname(void) \
197 { \
198 int num, id; \
199 num = syscall_name_to_nr("sys"#sname); \
200 if (num < 0) \
201 return -ENOSYS; \
202 id = register_ftrace_event(&exit_syscall_print_##sname);\
203 if (!id) \
204 return -ENODEV; \
205 event_exit_##sname.id = id; \
206 set_syscall_exit_id(num, id); \
207 INIT_LIST_HEAD(&event_exit_##sname.fields); \
208 return 0; \
209 } \
210 TRACE_SYS_EXIT_PROFILE(sname); \
211 static struct ftrace_event_call __used \ 161 static struct ftrace_event_call __used \
212 __attribute__((__aligned__(4))) \ 162 __attribute__((__aligned__(4))) \
213 __attribute__((section("_ftrace_events"))) \ 163 __attribute__((section("_ftrace_events"))) \
214 event_exit_##sname = { \ 164 event_exit_##sname = { \
215 .name = "sys_exit"#sname, \ 165 .name = "sys_exit"#sname, \
216 .system = "syscalls", \ 166 .system = "syscalls", \
217 .event = &event_syscall_exit, \ 167 .event = &exit_syscall_print_##sname, \
218 .raw_init = init_exit_##sname, \ 168 .raw_init = trace_event_raw_init, \
219 .show_format = syscall_exit_format, \ 169 .show_format = syscall_exit_format, \
220 .define_fields = syscall_exit_define_fields, \ 170 .define_fields = syscall_exit_define_fields, \
221 .regfunc = reg_event_syscall_exit, \ 171 .regfunc = reg_event_syscall_exit, \
222 .unregfunc = unreg_event_syscall_exit, \ 172 .unregfunc = unreg_event_syscall_exit, \
223 .data = "sys"#sname, \ 173 .data = (void *)&__syscall_meta_##sname,\
224 TRACE_SYS_EXIT_PROFILE_INIT(sname) \ 174 TRACE_SYS_EXIT_PROFILE_INIT(sname) \
225 } 175 }
226 176
@@ -677,6 +627,9 @@ asmlinkage long sys_recv(int, void __user *, size_t, unsigned);
677asmlinkage long sys_recvfrom(int, void __user *, size_t, unsigned, 627asmlinkage long sys_recvfrom(int, void __user *, size_t, unsigned,
678 struct sockaddr __user *, int __user *); 628 struct sockaddr __user *, int __user *);
679asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags); 629asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags);
630asmlinkage long sys_recvmmsg(int fd, struct mmsghdr __user *msg,
631 unsigned int vlen, unsigned flags,
632 struct timespec __user *timeout);
680asmlinkage long sys_socket(int, int, int); 633asmlinkage long sys_socket(int, int, int);
681asmlinkage long sys_socketpair(int, int, int, int __user *); 634asmlinkage long sys_socketpair(int, int, int, int __user *);
682asmlinkage long sys_socketcall(int call, unsigned long __user *args); 635asmlinkage long sys_socketcall(int call, unsigned long __user *args);
@@ -879,4 +832,8 @@ int kernel_execve(const char *filename, char *const argv[], char *const envp[]);
879asmlinkage long sys_perf_event_open( 832asmlinkage long sys_perf_event_open(
880 struct perf_event_attr __user *attr_uptr, 833 struct perf_event_attr __user *attr_uptr,
881 pid_t pid, int cpu, int group_fd, unsigned long flags); 834 pid_t pid, int cpu, int group_fd, unsigned long flags);
835
836asmlinkage long sys_mmap_pgoff(unsigned long addr, unsigned long len,
837 unsigned long prot, unsigned long flags,
838 unsigned long fd, unsigned long pgoff);
882#endif 839#endif