X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Flttng-syscalls.c;h=6b52b69bbf7dd2c3d0f50e2dfaa6b2f2d96a160f;hb=5bcf4dbd5953ee62fc967b38f59cd25b6fec2111;hp=2b469cb5b1c3fbb59a967b53e8a0d5fd6938a6f2;hpb=43ad4ddd843bed5e07725f87b6673ea93d042851;p=lttng-modules.git diff --git a/src/lttng-syscalls.c b/src/lttng-syscalls.c index 2b469cb5..6b52b69b 100644 --- a/src/lttng-syscalls.c +++ b/src/lttng-syscalls.c @@ -62,15 +62,11 @@ enum sc_type { #define SYSCALL_EXIT_STR __stringify(SYSCALL_EXIT_TOK) #define COMPAT_SYSCALL_EXIT_STR __stringify(COMPAT_SYSCALL_EXIT_TOK) -static void syscall_entry_event_probe(void *__data, struct pt_regs *regs, long id); -static void syscall_exit_event_probe(void *__data, struct pt_regs *regs, long ret); -static void syscall_entry_event_notifier_probe(void *__data, struct pt_regs *regs, long id); -static void syscall_exit_event_notifier_probe(void *__data, struct pt_regs *regs, long ret); @@ -120,275 +116,15 @@ typedef __kernel_old_time_t time_t; #include #undef TRACE_SYSTEM -#define SC_ENTER - -#undef sc_exit -#define sc_exit(...) -#undef sc_in -#define sc_in(...) __VA_ARGS__ -#undef sc_out -#define sc_out(...) -#undef sc_inout -#define sc_inout(...) __VA_ARGS__ - -/* Hijack probe callback for system call enter */ -#undef TP_PROBE_CB -#define TP_PROBE_CB(_template) &syscall_entry_event_probe -#define SC_LTTNG_TRACEPOINT_EVENT(_name, _proto, _args, _fields) \ - LTTNG_TRACEPOINT_EVENT(syscall_entry_##_name, PARAMS(_proto), PARAMS(_args), \ - PARAMS(_fields)) -#define SC_LTTNG_TRACEPOINT_EVENT_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ - LTTNG_TRACEPOINT_EVENT_CODE(syscall_entry_##_name, PARAMS(_proto), PARAMS(_args), \ - PARAMS(_locvar), PARAMS(_code_pre), \ - PARAMS(_fields), PARAMS(_code_post)) -#define SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ - LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscall_entry_##_name, PARAMS(_fields)) -#define SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(_template, _name) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscall_entry_##_template, syscall_entry_##_name) -/* Enumerations only defined at first inclusion. */ -#define SC_LTTNG_TRACEPOINT_ENUM(_name, _values) \ - LTTNG_TRACEPOINT_ENUM(_name, PARAMS(_values)) -#undef TRACE_SYSTEM -#define TRACE_SYSTEM syscall_entry_integers -#define TRACE_INCLUDE_FILE syscalls_integers -#include -#undef TRACE_INCLUDE_FILE -#undef TRACE_SYSTEM -#define TRACE_SYSTEM syscall_entry_pointers -#define TRACE_INCLUDE_FILE syscalls_pointers -#include -#undef TRACE_INCLUDE_FILE -#undef TRACE_SYSTEM -#undef SC_LTTNG_TRACEPOINT_ENUM -#undef SC_LTTNG_TRACEPOINT_EVENT_CODE -#undef SC_LTTNG_TRACEPOINT_EVENT -#undef SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS -#undef SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS -#undef TP_PROBE_CB -#undef _TRACE_SYSCALLS_INTEGERS_H -#undef _TRACE_SYSCALLS_POINTERS_H - -/* Hijack probe callback for compat system call enter */ -#define TP_PROBE_CB(_template) &syscall_entry_event_probe -#define LTTNG_SC_COMPAT -#define SC_LTTNG_TRACEPOINT_EVENT(_name, _proto, _args, _fields) \ - LTTNG_TRACEPOINT_EVENT(compat_syscall_entry_##_name, PARAMS(_proto), PARAMS(_args), \ - PARAMS(_fields)) -#define SC_LTTNG_TRACEPOINT_EVENT_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ - LTTNG_TRACEPOINT_EVENT_CODE(compat_syscall_entry_##_name, PARAMS(_proto), PARAMS(_args), \ - PARAMS(_locvar), PARAMS(_code_pre), PARAMS(_fields), PARAMS(_code_post)) -#define SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ - LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(compat_syscall_entry_##_name, PARAMS(_fields)) -#define SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(_template, _name) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(compat_syscall_entry_##_template, \ - compat_syscall_entry_##_name) -/* Enumerations only defined at inital inclusion (not here). */ -#define SC_LTTNG_TRACEPOINT_ENUM(_name, _values) -#define TRACE_SYSTEM compat_syscall_entry_integers -#define TRACE_INCLUDE_FILE compat_syscalls_integers -#include -#undef TRACE_INCLUDE_FILE -#undef TRACE_SYSTEM -#define TRACE_SYSTEM compat_syscall_entry_pointers -#define TRACE_INCLUDE_FILE compat_syscalls_pointers -#include -#undef TRACE_INCLUDE_FILE -#undef TRACE_SYSTEM -#undef SC_LTTNG_TRACEPOINT_ENUM -#undef SC_LTTNG_TRACEPOINT_EVENT_CODE -#undef SC_LTTNG_TRACEPOINT_EVENT -#undef SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS -#undef SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS -#undef TP_PROBE_CB -#undef _TRACE_SYSCALLS_INTEGERS_H -#undef _TRACE_SYSCALLS_POINTERS_H -#undef LTTNG_SC_COMPAT - -#undef SC_ENTER - -#define SC_EXIT - -#undef sc_exit -#define sc_exit(...) __VA_ARGS__ -#undef sc_in -#define sc_in(...) -#undef sc_out -#define sc_out(...) __VA_ARGS__ -#undef sc_inout -#define sc_inout(...) __VA_ARGS__ - -/* Hijack probe callback for system call exit */ -#define TP_PROBE_CB(_template) &syscall_exit_event_probe -#define SC_LTTNG_TRACEPOINT_EVENT(_name, _proto, _args, _fields) \ - LTTNG_TRACEPOINT_EVENT(syscall_exit_##_name, PARAMS(_proto), PARAMS(_args), \ - PARAMS(_fields)) -#define SC_LTTNG_TRACEPOINT_EVENT_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ - LTTNG_TRACEPOINT_EVENT_CODE(syscall_exit_##_name, PARAMS(_proto), PARAMS(_args), \ - PARAMS(_locvar), PARAMS(_code_pre), PARAMS(_fields), PARAMS(_code_post)) -#define SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ - LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(syscall_exit_##_name, PARAMS(_fields)) -#define SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(_template, _name) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(syscall_exit_##_template, \ - syscall_exit_##_name) -/* Enumerations only defined at inital inclusion (not here). */ -#define SC_LTTNG_TRACEPOINT_ENUM(_name, _values) -#define TRACE_SYSTEM syscall_exit_integers -#define TRACE_INCLUDE_FILE syscalls_integers -#include -#undef TRACE_INCLUDE_FILE -#undef TRACE_SYSTEM -#define TRACE_SYSTEM syscall_exit_pointers -#define TRACE_INCLUDE_FILE syscalls_pointers -#include -#undef TRACE_INCLUDE_FILE -#undef TRACE_SYSTEM -#undef SC_LTTNG_TRACEPOINT_ENUM -#undef SC_LTTNG_TRACEPOINT_EVENT_CODE -#undef SC_LTTNG_TRACEPOINT_EVENT -#undef SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS -#undef SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS -#undef TP_PROBE_CB -#undef _TRACE_SYSCALLS_INTEGERS_H -#undef _TRACE_SYSCALLS_POINTERS_H - - -/* Hijack probe callback for compat system call exit */ -#define TP_PROBE_CB(_template) &syscall_exit_event_probe -#define LTTNG_SC_COMPAT -#define SC_LTTNG_TRACEPOINT_EVENT(_name, _proto, _args, _fields) \ - LTTNG_TRACEPOINT_EVENT(compat_syscall_exit_##_name, PARAMS(_proto), PARAMS(_args), \ - PARAMS(_fields)) -#define SC_LTTNG_TRACEPOINT_EVENT_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ - LTTNG_TRACEPOINT_EVENT_CODE(compat_syscall_exit_##_name, PARAMS(_proto), PARAMS(_args), \ - PARAMS(_locvar), PARAMS(_code_pre), PARAMS(_fields), PARAMS(_code_post)) -#define SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ - LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(compat_syscall_exit_##_name, PARAMS(_fields)) -#define SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(_template, _name) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(compat_syscall_exit_##_template, \ - compat_syscall_exit_##_name) -/* Enumerations only defined at inital inclusion (not here). */ -#define SC_LTTNG_TRACEPOINT_ENUM(_name, _values) -#define TRACE_SYSTEM compat_syscall_exit_integers -#define TRACE_INCLUDE_FILE compat_syscalls_integers -#include -#undef TRACE_INCLUDE_FILE -#undef TRACE_SYSTEM -#define TRACE_SYSTEM compat_syscall_exit_pointers -#define TRACE_INCLUDE_FILE compat_syscalls_pointers -#include -#undef TRACE_INCLUDE_FILE -#undef TRACE_SYSTEM -#undef SC_LTTNG_TRACEPOINT_ENUM -#undef SC_LTTNG_TRACEPOINT_EVENT_CODE -#undef SC_LTTNG_TRACEPOINT_EVENT -#undef SC_LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS -#undef SC_LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS #undef TP_PROBE_CB -#undef _TRACE_SYSCALLS_INTEGERS_H -#undef _TRACE_SYSCALLS_POINTERS_H -#undef LTTNG_SC_COMPAT - -#undef SC_EXIT - -#undef TP_MODULE_NOINIT -#undef LTTNG_PACKAGE_BUILD -#undef CREATE_TRACE_POINTS - -#define CREATE_SYSCALL_TABLE - -#define SC_ENTER -#undef sc_exit -#define sc_exit(...) - -#undef TRACE_SYSCALL_TABLE -#define TRACE_SYSCALL_TABLE(_template, _name, _nr, _nrargs) \ - [ _nr ] = { \ - .event_func = __event_probe__syscall_entry_##_template, \ - .nrargs = (_nrargs), \ - .fields = __event_fields___syscall_entry_##_template, \ - .desc = &__event_desc___syscall_entry_##_name, \ - }, - -/* Event syscall enter tracing table */ -static const struct trace_syscall_entry _sc_table[] = { -#include -#include -}; - - -const struct trace_syscall_table sc_table = { - .table = _sc_table, - .len = ARRAY_SIZE(_sc_table), -}; - -#undef TRACE_SYSCALL_TABLE -#define TRACE_SYSCALL_TABLE(_template, _name, _nr, _nrargs) \ - [ _nr ] = { \ - .event_func = __event_probe__compat_syscall_entry_##_template, \ - .nrargs = (_nrargs), \ - .fields = __event_fields___compat_syscall_entry_##_template, \ - .desc = &__event_desc___compat_syscall_entry_##_name, \ - }, - -/* Event compat syscall enter table */ -const struct trace_syscall_entry _compat_sc_table[] = { -#include -#include -}; - -const struct trace_syscall_table compat_sc_table = { - .table = _compat_sc_table, - .len = ARRAY_SIZE(_compat_sc_table), -}; - -#undef SC_ENTER - -#define SC_EXIT - -#undef sc_exit -#define sc_exit(...) __VA_ARGS__ - -#undef TRACE_SYSCALL_TABLE -#define TRACE_SYSCALL_TABLE(_template, _name, _nr, _nrargs) \ - [ _nr ] = { \ - .event_func = __event_probe__syscall_exit_##_template, \ - .nrargs = (_nrargs), \ - .fields = __event_fields___syscall_exit_##_template, \ - .desc = &__event_desc___syscall_exit_##_name, \ - }, +extern const struct trace_syscall_table sc_table; +extern const struct trace_syscall_table compat_sc_table; /* Event syscall exit table */ -static const struct trace_syscall_entry _sc_exit_table[] = { -#include -#include -}; - -const struct trace_syscall_table sc_exit_table = { - .table = _sc_exit_table, - .len = ARRAY_SIZE(_sc_exit_table), -}; - +extern const struct trace_syscall_table sc_exit_table; +extern const struct trace_syscall_table compat_sc_exit_table; -#undef TRACE_SYSCALL_TABLE -#define TRACE_SYSCALL_TABLE(_template, _name, _nr, _nrargs) \ - [ _nr ] = { \ - .event_func = __event_probe__compat_syscall_exit_##_template, \ - .nrargs = (_nrargs), \ - .fields = __event_fields___compat_syscall_exit_##_template, \ - .desc = &__event_desc___compat_syscall_exit_##_name, \ - }, - -/* Event compat syscall exit table */ -const struct trace_syscall_entry _compat_sc_exit_table[] = { -#include -#include -}; - -const struct trace_syscall_table compat_sc_exit_table = { - .table = _compat_sc_exit_table, - .len = ARRAY_SIZE(_compat_sc_exit_table), -}; #undef SC_EXIT @@ -810,7 +546,6 @@ void syscall_exit_event_probe(void *__data, struct pt_regs *regs, long ret) regs, ret); } -static void syscall_exit_event_notifier_probe(void *__data, struct pt_regs *regs, long ret) {