Move headers under include/
[lttng-modules.git] / lttng-syscalls.c
index fb14f6b043a877a77176e94a5ff3926a4b180b07..5fcbe6fc55ce955de7a056b81dc83003cebcbd16 100644 (file)
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
+/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
  *
  * lttng-syscalls.c
  *
 #include <linux/stringify.h>
 #include <linux/file.h>
 #include <linux/anon_inodes.h>
+#include <linux/fcntl.h>
 #include <asm/ptrace.h>
 #include <asm/syscall.h>
 
-#include <lib/bitfield.h>
-#include <wrapper/tracepoint.h>
-#include <wrapper/file.h>
-#include <wrapper/rcu.h>
-#include <wrapper/syscall.h>
-#include <lttng-events.h>
+#include <lttng/bitfield.h>
+#include <lttng/lttng-events.h>
+#include <lttng/lttng-tracepoint.h>
+
+#define LTTNG_SYSCALL_NR_ARGS  6
 
 #ifndef CONFIG_COMPAT
 # ifndef is_compat_task
@@ -81,9 +81,7 @@ struct timeval;
 struct itimerval;
 struct itimerspec;
 
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0))
 typedef __kernel_old_time_t time_t;
-#endif
 
 #ifdef IA32_NR_syscalls
 #define NR_compat_syscalls IA32_NR_syscalls
@@ -376,7 +374,7 @@ static void syscall_entry_unknown(struct lttng_event *event,
 {
        unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-       lttng_syscall_get_arguments(current, regs, args);
+       syscall_get_arguments(current, regs, args);
        if (unlikely(in_compat_syscall()))
                __event_probe__compat_syscall_entry_unknown(event, id, args);
        else
@@ -393,7 +391,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
        if (unlikely(in_compat_syscall())) {
                struct lttng_syscall_filter *filter;
 
-               filter = lttng_rcu_dereference(chan->sc_filter);
+               filter = rcu_dereference_raw_check(chan->sc_filter);
                if (filter) {
                        if (id < 0 || id >= NR_compat_syscalls
                                || !test_bit(id, filter->sc_compat)) {
@@ -407,7 +405,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
        } else {
                struct lttng_syscall_filter *filter;
 
-               filter = lttng_rcu_dereference(chan->sc_filter);
+               filter = rcu_dereference_raw_check(chan->sc_filter);
                if (filter) {
                        if (id < 0 || id >= NR_syscalls
                                || !test_bit(id, filter->sc)) {
@@ -447,7 +445,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
                void (*fptr)(void *__data, unsigned long arg0) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, args[0]);
                break;
        }
@@ -458,7 +456,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
                        unsigned long arg1) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, args[0], args[1]);
                break;
        }
@@ -470,7 +468,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
                        unsigned long arg2) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, args[0], args[1], args[2]);
                break;
        }
@@ -483,7 +481,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
                        unsigned long arg3) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, args[0], args[1], args[2], args[3]);
                break;
        }
@@ -497,7 +495,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
                        unsigned long arg4) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, args[0], args[1], args[2], args[3], args[4]);
                break;
        }
@@ -512,7 +510,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
                        unsigned long arg5) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, args[0], args[1], args[2],
                        args[3], args[4], args[5]);
                break;
@@ -527,7 +525,7 @@ static void syscall_exit_unknown(struct lttng_event *event,
 {
        unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-       lttng_syscall_get_arguments(current, regs, args);
+       syscall_get_arguments(current, regs, args);
        if (unlikely(in_compat_syscall()))
                __event_probe__compat_syscall_exit_unknown(event, id, ret,
                        args);
@@ -547,7 +545,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
        if (unlikely(in_compat_syscall())) {
                struct lttng_syscall_filter *filter;
 
-               filter = lttng_rcu_dereference(chan->sc_filter);
+               filter = rcu_dereference_raw_check(chan->sc_filter);
                if (filter) {
                        if (id < 0 || id >= NR_compat_syscalls
                                || !test_bit(id, filter->sc_compat)) {
@@ -561,7 +559,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
        } else {
                struct lttng_syscall_filter *filter;
 
-               filter = lttng_rcu_dereference(chan->sc_filter);
+               filter = rcu_dereference_raw_check(chan->sc_filter);
                if (filter) {
                        if (id < 0 || id >= NR_syscalls
                                || !test_bit(id, filter->sc)) {
@@ -603,7 +601,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
                        unsigned long arg0) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, ret, args[0]);
                break;
        }
@@ -615,7 +613,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
                        unsigned long arg1) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, ret, args[0], args[1]);
                break;
        }
@@ -628,7 +626,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
                        unsigned long arg2) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, ret, args[0], args[1], args[2]);
                break;
        }
@@ -642,7 +640,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
                        unsigned long arg3) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, ret, args[0], args[1], args[2], args[3]);
                break;
        }
@@ -657,7 +655,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
                        unsigned long arg4) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, ret, args[0], args[1], args[2], args[3], args[4]);
                break;
        }
@@ -673,7 +671,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
                        unsigned long arg5) = entry->func;
                unsigned long args[LTTNG_SYSCALL_NR_ARGS];
 
-               lttng_syscall_get_arguments(current, regs, args);
+               syscall_get_arguments(current, regs, args);
                fptr(event, ret, args[0], args[1], args[2],
                        args[3], args[4], args[5]);
                break;
@@ -760,8 +758,6 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter)
        struct lttng_kernel_event ev;
        int ret;
 
-       wrapper_vmalloc_sync_all();
-
        if (!chan->sc_table) {
                /* create syscall table mapping syscall to events */
                chan->sc_table = kzalloc(sizeof(struct lttng_event *)
@@ -884,7 +880,7 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter)
                return ret;
 #endif
        if (!chan->sys_enter_registered) {
-               ret = lttng_wrapper_tracepoint_probe_register("sys_enter",
+               ret = lttng_tracepoint_probe_register("sys_enter",
                                (void *) syscall_entry_probe, chan);
                if (ret)
                        return ret;
@@ -895,10 +891,10 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter)
         * conflict with sys_exit syscall entry.
         */
        if (!chan->sys_exit_registered) {
-               ret = lttng_wrapper_tracepoint_probe_register("sys_exit",
+               ret = lttng_tracepoint_probe_register("sys_exit",
                                (void *) syscall_exit_probe, chan);
                if (ret) {
-                       WARN_ON_ONCE(lttng_wrapper_tracepoint_probe_unregister("sys_enter",
+                       WARN_ON_ONCE(lttng_tracepoint_probe_unregister("sys_enter",
                                (void *) syscall_entry_probe, chan));
                        return ret;
                }
@@ -917,14 +913,14 @@ int lttng_syscalls_unregister(struct lttng_channel *chan)
        if (!chan->sc_table)
                return 0;
        if (chan->sys_enter_registered) {
-               ret = lttng_wrapper_tracepoint_probe_unregister("sys_enter",
+               ret = lttng_tracepoint_probe_unregister("sys_enter",
                                (void *) syscall_entry_probe, chan);
                if (ret)
                        return ret;
                chan->sys_enter_registered = 0;
        }
        if (chan->sys_exit_registered) {
-               ret = lttng_wrapper_tracepoint_probe_unregister("sys_exit",
+               ret = lttng_tracepoint_probe_unregister("sys_exit",
                                (void *) syscall_exit_probe, chan);
                if (ret)
                        return ret;
@@ -1296,7 +1292,7 @@ int lttng_abi_syscall_list(void)
        struct file *syscall_list_file;
        int file_fd, ret;
 
-       file_fd = lttng_get_unused_fd();
+       file_fd = get_unused_fd_flags(0);
        if (file_fd < 0) {
                ret = file_fd;
                goto fd_error;
This page took 0.026554 seconds and 4 git commands to generate.