-static __always_inline
-void syscall_exit_event_notifier_call_func(struct hlist_head *dispatch_list,
- void *func, unsigned int nrargs, struct pt_regs *regs, long ret)
-{
- struct lttng_event_notifier *notifier;
-
- switch (nrargs) {
- case 0:
- {
- void (*fptr)(void *__data, long ret) = func;
-
- lttng_hlist_for_each_entry_rcu(notifier, dispatch_list, u.syscall.node)
- fptr(notifier, ret);
- break;
- }
- case 1:
- {
- void (*fptr)(void *__data, long ret, unsigned long arg0) = func;
- unsigned long args[LTTNG_SYSCALL_NR_ARGS];
-
- lttng_syscall_get_arguments(current, regs, args);
- lttng_hlist_for_each_entry_rcu(notifier, dispatch_list, u.syscall.node)
- fptr(notifier, ret, args[0]);
- break;
- }
- case 2:
- {
- void (*fptr)(void *__data,
- long ret,
- unsigned long arg0,
- unsigned long arg1) = func;
- unsigned long args[LTTNG_SYSCALL_NR_ARGS];
-
- lttng_syscall_get_arguments(current, regs, args);
- lttng_hlist_for_each_entry_rcu(notifier, dispatch_list, u.syscall.node)
- fptr(notifier, ret, args[0], args[1]);
- break;
- }
- case 3:
- {
- void (*fptr)(void *__data,
- long ret,
- unsigned long arg0,
- unsigned long arg1,
- unsigned long arg2) = func;
- unsigned long args[LTTNG_SYSCALL_NR_ARGS];
-
- lttng_syscall_get_arguments(current, regs, args);
- lttng_hlist_for_each_entry_rcu(notifier, dispatch_list, u.syscall.node)
- fptr(notifier, ret, args[0], args[1], args[2]);
- break;
- }
- case 4:
- {
- void (*fptr)(void *__data,
- long ret,
- unsigned long arg0,
- unsigned long arg1,
- unsigned long arg2,
- unsigned long arg3) = func;
- unsigned long args[LTTNG_SYSCALL_NR_ARGS];
-
- lttng_syscall_get_arguments(current, regs, args);
- lttng_hlist_for_each_entry_rcu(notifier, dispatch_list, u.syscall.node)
- fptr(notifier, ret, args[0], args[1], args[2], args[3]);
- break;
- }
- case 5:
- {
- void (*fptr)(void *__data,
- long ret,
- unsigned long arg0,
- unsigned long arg1,
- unsigned long arg2,
- unsigned long arg3,
- unsigned long arg4) = func;
- unsigned long args[LTTNG_SYSCALL_NR_ARGS];
-
- lttng_syscall_get_arguments(current, regs, args);
- lttng_hlist_for_each_entry_rcu(notifier, dispatch_list, u.syscall.node)
- fptr(notifier, ret, args[0], args[1], args[2], args[3], args[4]);
- break;
- }
- case 6:
- {
- void (*fptr)(void *__data,
- long ret,
- unsigned long arg0,
- unsigned long arg1,
- unsigned long arg2,
- unsigned long arg3,
- unsigned long arg4,
- unsigned long arg5) = func;
- unsigned long args[LTTNG_SYSCALL_NR_ARGS];
-
- lttng_syscall_get_arguments(current, regs, args);
- lttng_hlist_for_each_entry_rcu(notifier, dispatch_list, u.syscall.node)
- fptr(notifier, ret, args[0], args[1], args[2], args[3], args[4], args[5]);
- break;
- }
- default:
- break;
- }
-}
-