diff options
Diffstat (limited to 'include/linux/syscalls.h')
| -rw-r--r-- | include/linux/syscalls.h | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 18cd0684fc4..1f5c18e6f4f 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -62,6 +62,7 @@ struct robust_list_head; | |||
| 62 | struct getcpu_cache; | 62 | struct getcpu_cache; |
| 63 | struct old_linux_dirent; | 63 | struct old_linux_dirent; |
| 64 | struct perf_event_attr; | 64 | struct perf_event_attr; |
| 65 | struct file_handle; | ||
| 65 | 66 | ||
| 66 | #include <linux/types.h> | 67 | #include <linux/types.h> |
| 67 | #include <linux/aio_abi.h> | 68 | #include <linux/aio_abi.h> |
| @@ -125,62 +126,66 @@ extern struct trace_event_functions enter_syscall_print_funcs; | |||
| 125 | extern struct trace_event_functions exit_syscall_print_funcs; | 126 | extern struct trace_event_functions exit_syscall_print_funcs; |
| 126 | 127 | ||
| 127 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ | 128 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ |
| 128 | static struct syscall_metadata \ | 129 | static struct syscall_metadata __syscall_meta_##sname; \ |
| 129 | __attribute__((__aligned__(4))) __syscall_meta_##sname; \ | ||
| 130 | static struct ftrace_event_call __used \ | 130 | static struct ftrace_event_call __used \ |
| 131 | __attribute__((__aligned__(4))) \ | ||
| 132 | __attribute__((section("_ftrace_events"))) \ | ||
| 133 | event_enter_##sname = { \ | 131 | event_enter_##sname = { \ |
| 134 | .name = "sys_enter"#sname, \ | 132 | .name = "sys_enter"#sname, \ |
| 135 | .class = &event_class_syscall_enter, \ | 133 | .class = &event_class_syscall_enter, \ |
| 136 | .event.funcs = &enter_syscall_print_funcs, \ | 134 | .event.funcs = &enter_syscall_print_funcs, \ |
| 137 | .data = (void *)&__syscall_meta_##sname,\ | 135 | .data = (void *)&__syscall_meta_##sname,\ |
| 136 | .flags = TRACE_EVENT_FL_CAP_ANY, \ | ||
| 138 | }; \ | 137 | }; \ |
| 139 | __TRACE_EVENT_FLAGS(enter_##sname, TRACE_EVENT_FL_CAP_ANY) | 138 | static struct ftrace_event_call __used \ |
| 139 | __attribute__((section("_ftrace_events"))) \ | ||
| 140 | *__event_enter_##sname = &event_enter_##sname; | ||
| 140 | 141 | ||
| 141 | #define SYSCALL_TRACE_EXIT_EVENT(sname) \ | 142 | #define SYSCALL_TRACE_EXIT_EVENT(sname) \ |
| 142 | static struct syscall_metadata \ | 143 | static struct syscall_metadata __syscall_meta_##sname; \ |
| 143 | __attribute__((__aligned__(4))) __syscall_meta_##sname; \ | ||
| 144 | static struct ftrace_event_call __used \ | 144 | static struct ftrace_event_call __used \ |
| 145 | __attribute__((__aligned__(4))) \ | ||
| 146 | __attribute__((section("_ftrace_events"))) \ | ||
| 147 | event_exit_##sname = { \ | 145 | event_exit_##sname = { \ |
| 148 | .name = "sys_exit"#sname, \ | 146 | .name = "sys_exit"#sname, \ |
| 149 | .class = &event_class_syscall_exit, \ | 147 | .class = &event_class_syscall_exit, \ |
| 150 | .event.funcs = &exit_syscall_print_funcs, \ | 148 | .event.funcs = &exit_syscall_print_funcs, \ |
| 151 | .data = (void *)&__syscall_meta_##sname,\ | 149 | .data = (void *)&__syscall_meta_##sname,\ |
| 150 | .flags = TRACE_EVENT_FL_CAP_ANY, \ | ||
| 152 | }; \ | 151 | }; \ |
| 153 | __TRACE_EVENT_FLAGS(exit_##sname, TRACE_EVENT_FL_CAP_ANY) | 152 | static struct ftrace_event_call __used \ |
| 153 | __attribute__((section("_ftrace_events"))) \ | ||
| 154 | *__event_exit_##sname = &event_exit_##sname; | ||
| 154 | 155 | ||
| 155 | #define SYSCALL_METADATA(sname, nb) \ | 156 | #define SYSCALL_METADATA(sname, nb) \ |
| 156 | SYSCALL_TRACE_ENTER_EVENT(sname); \ | 157 | SYSCALL_TRACE_ENTER_EVENT(sname); \ |
| 157 | SYSCALL_TRACE_EXIT_EVENT(sname); \ | 158 | SYSCALL_TRACE_EXIT_EVENT(sname); \ |
| 158 | static struct syscall_metadata __used \ | 159 | static struct syscall_metadata __used \ |
| 159 | __attribute__((__aligned__(4))) \ | ||
| 160 | __attribute__((section("__syscalls_metadata"))) \ | ||
| 161 | __syscall_meta_##sname = { \ | 160 | __syscall_meta_##sname = { \ |
| 162 | .name = "sys"#sname, \ | 161 | .name = "sys"#sname, \ |
| 162 | .syscall_nr = -1, /* Filled in at boot */ \ | ||
| 163 | .nb_args = nb, \ | 163 | .nb_args = nb, \ |
| 164 | .types = types_##sname, \ | 164 | .types = types_##sname, \ |
| 165 | .args = args_##sname, \ | 165 | .args = args_##sname, \ |
| 166 | .enter_event = &event_enter_##sname, \ | 166 | .enter_event = &event_enter_##sname, \ |
| 167 | .exit_event = &event_exit_##sname, \ | 167 | .exit_event = &event_exit_##sname, \ |
| 168 | .enter_fields = LIST_HEAD_INIT(__syscall_meta_##sname.enter_fields), \ | 168 | .enter_fields = LIST_HEAD_INIT(__syscall_meta_##sname.enter_fields), \ |
| 169 | }; | 169 | }; \ |
| 170 | static struct syscall_metadata __used \ | ||
| 171 | __attribute__((section("__syscalls_metadata"))) \ | ||
| 172 | *__p_syscall_meta_##sname = &__syscall_meta_##sname; | ||
| 170 | 173 | ||
| 171 | #define SYSCALL_DEFINE0(sname) \ | 174 | #define SYSCALL_DEFINE0(sname) \ |
| 172 | SYSCALL_TRACE_ENTER_EVENT(_##sname); \ | 175 | SYSCALL_TRACE_ENTER_EVENT(_##sname); \ |
| 173 | SYSCALL_TRACE_EXIT_EVENT(_##sname); \ | 176 | SYSCALL_TRACE_EXIT_EVENT(_##sname); \ |
| 174 | static struct syscall_metadata __used \ | 177 | static struct syscall_metadata __used \ |
| 175 | __attribute__((__aligned__(4))) \ | ||
| 176 | __attribute__((section("__syscalls_metadata"))) \ | ||
| 177 | __syscall_meta__##sname = { \ | 178 | __syscall_meta__##sname = { \ |
| 178 | .name = "sys_"#sname, \ | 179 | .name = "sys_"#sname, \ |
| 180 | .syscall_nr = -1, /* Filled in at boot */ \ | ||
| 179 | .nb_args = 0, \ | 181 | .nb_args = 0, \ |
| 180 | .enter_event = &event_enter__##sname, \ | 182 | .enter_event = &event_enter__##sname, \ |
| 181 | .exit_event = &event_exit__##sname, \ | 183 | .exit_event = &event_exit__##sname, \ |
| 182 | .enter_fields = LIST_HEAD_INIT(__syscall_meta__##sname.enter_fields), \ | 184 | .enter_fields = LIST_HEAD_INIT(__syscall_meta__##sname.enter_fields), \ |
| 183 | }; \ | 185 | }; \ |
| 186 | static struct syscall_metadata __used \ | ||
| 187 | __attribute__((section("__syscalls_metadata"))) \ | ||
| 188 | *__p_syscall_meta_##sname = &__syscall_meta__##sname; \ | ||
| 184 | asmlinkage long sys_##sname(void) | 189 | asmlinkage long sys_##sname(void) |
| 185 | #else | 190 | #else |
| 186 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) | 191 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) |
| @@ -311,6 +316,8 @@ asmlinkage long sys_clock_settime(clockid_t which_clock, | |||
| 311 | const struct timespec __user *tp); | 316 | const struct timespec __user *tp); |
| 312 | asmlinkage long sys_clock_gettime(clockid_t which_clock, | 317 | asmlinkage long sys_clock_gettime(clockid_t which_clock, |
| 313 | struct timespec __user *tp); | 318 | struct timespec __user *tp); |
| 319 | asmlinkage long sys_clock_adjtime(clockid_t which_clock, | ||
| 320 | struct timex __user *tx); | ||
| 314 | asmlinkage long sys_clock_getres(clockid_t which_clock, | 321 | asmlinkage long sys_clock_getres(clockid_t which_clock, |
| 315 | struct timespec __user *tp); | 322 | struct timespec __user *tp); |
| 316 | asmlinkage long sys_clock_nanosleep(clockid_t which_clock, int flags, | 323 | asmlinkage long sys_clock_nanosleep(clockid_t which_clock, int flags, |
| @@ -830,5 +837,10 @@ asmlinkage long sys_mmap_pgoff(unsigned long addr, unsigned long len, | |||
| 830 | unsigned long prot, unsigned long flags, | 837 | unsigned long prot, unsigned long flags, |
| 831 | unsigned long fd, unsigned long pgoff); | 838 | unsigned long fd, unsigned long pgoff); |
| 832 | asmlinkage long sys_old_mmap(struct mmap_arg_struct __user *arg); | 839 | asmlinkage long sys_old_mmap(struct mmap_arg_struct __user *arg); |
| 833 | 840 | asmlinkage long sys_name_to_handle_at(int dfd, const char __user *name, | |
| 841 | struct file_handle __user *handle, | ||
| 842 | int __user *mnt_id, int flag); | ||
| 843 | asmlinkage long sys_open_by_handle_at(int mountdirfd, | ||
| 844 | struct file_handle __user *handle, | ||
| 845 | int flags); | ||
| 834 | #endif | 846 | #endif |
