X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Finstrumentation%2Fsyscalls%2Fheaders%2Fsyscalls_pointers_override.h;h=00e5990c18873377a4a9c20b5af9780d2c294eb0;hb=20ae85941b8ff6f04366177c6ab6aeda714fb9d8;hp=89f2cd8e61f7a3bdc7f866b1d0637af39d594cbf;hpb=7c6d929d62a6e24fb1dbeaee5cd2c8afe77720b7;p=lttng-modules.git diff --git a/include/instrumentation/syscalls/headers/syscalls_pointers_override.h b/include/instrumentation/syscalls/headers/syscalls_pointers_override.h index 89f2cd8e..00e5990c 100644 --- a/include/instrumentation/syscalls/headers/syscalls_pointers_override.h +++ b/include/instrumentation/syscalls/headers/syscalls_pointers_override.h @@ -14,6 +14,141 @@ SC_LTTNG_TRACEPOINT_EVENT(execve, ) ) +#ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM + +/* + * Clone()'s `flags` field has two parts: + * 1. exit signal: the least significant byte of the `unsigned long` is + * the signal the kernel must send to the parent process on child + * exit, + * 2. clone options: the remaining bytes of the `unsigned long` is used a + * bitwise flag for the clone options. + */ +#define CLONE_EXIT_SIGNAL_FLAG_RESERVED_BITS 8 +#define LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(x) ((x) >> CLONE_EXIT_SIGNAL_FLAG_RESERVED_BITS) + +SC_LTTNG_TRACEPOINT_ENUM(lttng_clone_exit_signal_flags, + TP_ENUM_VALUES( + ctf_enum_value("SIGHUP", SIGHUP) + ctf_enum_value("SIGINT", SIGINT) + ctf_enum_value("SIGQUIT", SIGQUIT) + ctf_enum_value("SIGILL", SIGILL) + ctf_enum_value("SIGTRAP", SIGTRAP) + ctf_enum_value("SIGABRT", SIGABRT) + ctf_enum_value("SIGIOT", SIGIOT) + ctf_enum_value("SIGBUS", SIGBUS) +#ifdef SIGEMT + ctf_enum_value("SIGEMT", SIGEMT) +#endif /* #ifdef SIGEMT */ + ctf_enum_value("SIGFPE", SIGFPE) + ctf_enum_value("SIGKILL", SIGKILL) + ctf_enum_value("SIGUSR1", SIGUSR1) + ctf_enum_value("SIGSEGV", SIGSEGV) + ctf_enum_value("SIGUSR2", SIGUSR2) + ctf_enum_value("SIGPIPE", SIGPIPE) + ctf_enum_value("SIGALRM", SIGALRM) + ctf_enum_value("SIGTERM", SIGTERM) +#ifdef SIGSTKFLT + ctf_enum_value("SIGSTKFLT", SIGSTKFLT) +#endif /* #ifdef SIGSTKFLT */ + ctf_enum_value("SIGCHLD", SIGCHLD) +#ifdef SIGCLD + ctf_enum_value("SIGCLD", SIGCLD) +#endif /* #ifdef SIGCLD */ + ctf_enum_value("SIGCONT", SIGCONT) + ctf_enum_value("SIGSTOP", SIGSTOP) + ctf_enum_value("SIGTSTP", SIGTSTP) + ctf_enum_value("SIGTTIN", SIGTTIN) + ctf_enum_value("SIGTTOU", SIGTTOU) + ctf_enum_value("SIGURG", SIGURG) + ctf_enum_value("SIGXCPU", SIGXCPU) + ctf_enum_value("SIGXFSZ", SIGXFSZ) + ctf_enum_value("SIGVTALR", SIGVTALRM) + ctf_enum_value("SIGPROF", SIGPROF) + ctf_enum_value("SIGWINCH", SIGWINCH) + ctf_enum_value("SIGIO", SIGIO) + ctf_enum_value("SIGPOLL", SIGPOLL) + ctf_enum_value("SIGPWR", SIGPWR) +#ifdef SIGINFO + ctf_enum_value("SIGINFO", SIGINFO) +#endif /* #ifdef SIGINFO */ +#ifdef SIGLOST + ctf_enum_value("SIGLOST", SIGLOST) +#endif /* #ifdef SIGLOST */ + ctf_enum_value("SIGSYS", SIGSYS) +#ifdef SIGUNUSED + ctf_enum_value("SIGUNUSED", SIGUNUSED) +#endif /* #ifdef SIGUNUSED */ + ) +) + +SC_LTTNG_TRACEPOINT_ENUM(lttng_clone_option_flags, + TP_ENUM_VALUES( + ctf_enum_value("CLONE_CHILD_CLEARTID", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_CHILD_CLEARTID)) + ctf_enum_value("CLONE_CHILD_SETTID", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_CHILD_SETTID)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,5,0)) + ctf_enum_value("CLONE_CLEAR_SIGHAND", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_CLEAR_SIGHAND)) +#endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,5,0)) */ + ctf_enum_value("CLONE_DETACHED", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_DETACHED)) + ctf_enum_value("CLONE_FILES", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_FILES)) + ctf_enum_value("CLONE_FS", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_FS)) + ctf_enum_value("CLONE_IO", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_IO)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,6,0)) + ctf_enum_value("CLONE_NEWCGROUP", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_NEWCGROUP)) +#endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,6,0)) */ + ctf_enum_value("CLONE_NEWIPC", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_NEWIPC)) + ctf_enum_value("CLONE_NEWNET", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_NEWNET)) + ctf_enum_value("CLONE_NEWNS", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_NEWNS)) + ctf_enum_value("CLONE_NEWPID", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_NEWPID)) + ctf_enum_value("CLONE_NEWUSER", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_NEWUSER)) + ctf_enum_value("CLONE_NEWUTS", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_NEWUTS)) + ctf_enum_value("CLONE_PARENT", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_PARENT)) + ctf_enum_value("CLONE_PARENT_SETTID", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_PARENT_SETTID)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,2,0)) + ctf_enum_value("CLONE_PIDFD", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_PIDFD)) +#endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,2,0)) */ + ctf_enum_value("CLONE_PTRACE", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_PTRACE)) + ctf_enum_value("CLONE_SETTLS", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_SETTLS)) + ctf_enum_value("CLONE_SIGHAND", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_SIGHAND)) + ctf_enum_value("CLONE_SYSVSEM", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_SYSVSEM)) + ctf_enum_value("CLONE_THREAD", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_THREAD)) + ctf_enum_value("CLONE_UNTRACED", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_UNTRACED)) + ctf_enum_value("CLONE_VFORK", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_VFORK)) + ctf_enum_value("CLONE_VM", LTTNG_CLONE_OPTIONS_FLAGS_TO_CTF(CLONE_VM)) + ) +) + +#define LTTNG_CLONE_FLAGS_EXIT_SIGNAL \ + lttng_kernel_static_event_field("exit_signal", \ + lttng_kernel_static_type_enum(&__enum_lttng_clone_exit_signal_flags, \ + lttng_kernel_static_type_integer(CLONE_EXIT_SIGNAL_FLAG_RESERVED_BITS, \ + 1, 0, __BYTE_ORDER, 16)), \ + false, false) + +#define LTTNG_CLONE_FLAGS_OPTIONS \ + lttng_kernel_static_event_field("options", \ + lttng_kernel_static_type_enum(&__enum_lttng_clone_option_flags, \ + lttng_kernel_static_type_integer( \ + sizeof(unsigned long) * CHAR_BIT - CLONE_EXIT_SIGNAL_FLAG_RESERVED_BITS, \ + 1, 0, __BYTE_ORDER, 16)), \ + false, false) + +#if (__BYTE_ORDER == __LITTLE_ENDIAN) +#define LTTNG_CLONE_FLAGS \ +lttng_kernel_static_event_field_array( \ + [0] = LTTNG_CLONE_FLAGS_EXIT_SIGNAL, \ + [1] = LTTNG_CLONE_FLAGS_OPTIONS, \ +) +#else +#define LTTNG_CLONE_FLAGS \ +lttng_kernel_static_event_field_array( \ + [0] = LTTNG_CLONE_FLAGS_OPTIONS, \ + [1] = LTTNG_CLONE_FLAGS_EXIT_SIGNAL, \ +) +#endif + +#endif /* CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM */ + #define OVERRIDE_32_clone #define OVERRIDE_64_clone SC_LTTNG_TRACEPOINT_EVENT(clone, @@ -23,7 +158,21 @@ SC_LTTNG_TRACEPOINT_EVENT(clone, TP_ARGS(sc_exit(ret,) clone_flags, newsp, parent_tid, child_tid), TP_FIELDS( sc_exit(ctf_integer(long, ret, ret)) - sc_in(ctf_integer_hex(unsigned long, clone_flags, clone_flags)) + sc_in( +#ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM + ctf_custom_field( + ctf_custom_type( + lttng_kernel_static_type_struct(2, LTTNG_CLONE_FLAGS, lttng_alignof(unsigned long) * CHAR_BIT) + ), + flags, + ctf_custom_code( + ctf_integer_type(unsigned long, clone_flags) + ) + ) +#else + ctf_integer_hex(unsigned long, flags, clone_flags) +#endif + ) sc_in(ctf_integer_hex(unsigned long, newsp, newsp)) sc_in(ctf_integer_hex(void *, parent_tid, parent_tid)) sc_in(ctf_integer_hex(void *, child_tid, child_tid)) @@ -149,7 +298,7 @@ end: ; /* Label at end of compound statement. */ \ #define LTTNG_SYSCALL_SELECT_fds_field_LE(name, input) \ ctf_custom_field( \ ctf_custom_type( \ - __type_integer(uint8_t, 0, 0, 0, __BYTE_ORDER, 10, none) \ + lttng_kernel_static_type_integer_from_type(uint8_t, __BYTE_ORDER, 10) \ ), \ _ ## name ## _length, \ ctf_custom_code( \ @@ -164,13 +313,10 @@ end: ; /* Label at end of compound statement. */ \ ) \ ctf_custom_field( \ ctf_custom_type( \ - { \ - .atype = atype_sequence_nestable, \ - .u.sequence_nestable.length_name = "_" #name "_length", \ - .u.sequence_nestable.elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(uint8_t, 0, 0, 0, __BYTE_ORDER, 16, none)), \ - .u.sequence_nestable.alignment = 0, \ - } \ + lttng_kernel_static_type_sequence(NULL, \ + lttng_kernel_static_type_integer_from_type(uint8_t, __BYTE_ORDER, 16), \ + 0, \ + none) \ ), \ name, \ ctf_custom_code( \ @@ -197,7 +343,7 @@ end: ; /* Label at end of compound statement. */ \ #define LTTNG_SYSCALL_SELECT_fds_field_BE(name, input) \ ctf_custom_field( \ ctf_custom_type( \ - __type_integer(uint8_t, 0, 0, 0, __BYTE_ORDER, 10, none) \ + lttng_kernel_static_type_integer_from_type(uint8_t, __BYTE_ORDER, 10) \ ), \ _ ## name ## _length, \ ctf_custom_code( \ @@ -212,12 +358,10 @@ end: ; /* Label at end of compound statement. */ \ ) \ ctf_custom_field( \ ctf_custom_type( \ - { \ - .atype = atype_sequence_nestable, \ - .u.sequence_nestable.elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(uint8_t, 0, 0, 0, __BYTE_ORDER, 16, none)), \ - .u.sequence_nestable.alignment = 0, \ - } \ + lttng_kernel_static_type_sequence(NULL, \ + lttng_kernel_static_type_integer_from_type(uint8_t, __BYTE_ORDER, 16), \ + 0, \ + none) \ ), \ name, \ ctf_custom_code( \ @@ -320,6 +464,7 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(pselect6, ) #endif /* defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) */ +#ifdef LTTNG_CREATE_FIELD_METADATA #ifndef ONCE_LTTNG_TRACE_POLL_H #define ONCE_LTTNG_TRACE_POLL_H @@ -327,68 +472,58 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(pselect6, #define POLL_FLAGS_PADDING_SIZE (sizeof(uint8_t) * BITS_PER_BYTE) - \ ilog2(LTTNG_POLL_NRFLAGS - 1) +#ifndef LTTNG_TRACEPOINT_TYPE_EXTERN /* * Only extract the values specified by iBCS2 for now. */ -static struct lttng_event_field lttng_pollfd_flag_fields[] = { - [ilog2(POLLIN)] = { - .name = "POLLIN", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, - [ilog2(POLLPRI)] = { - .name = "POLLPRI", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, - [ilog2(POLLOUT)] = { - .name = "POLLOUT", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, - [ilog2(POLLERR)] = { - .name = "POLLERR", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, - [ilog2(POLLHUP)] = { - .name = "POLLHUP", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, - [ilog2(POLLNVAL)] = { - .name = "POLLNVAL", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, - [ilog2(LTTNG_POLL_NRFLAGS)] = { - .name = "padding", - .type = __type_integer(int, POLL_FLAGS_PADDING_SIZE, 1, 0, - __LITTLE_ENDIAN, 10, none), - }, +static const struct lttng_kernel_event_field *lttng_pollfd_flag_fields[] = { + [ilog2(POLLIN)] = lttng_kernel_static_event_field("POLLIN", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), + [ilog2(POLLPRI)] = lttng_kernel_static_event_field("POLLPRI", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), + [ilog2(POLLOUT)] = lttng_kernel_static_event_field("POLLOUT", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), + [ilog2(POLLERR)] = lttng_kernel_static_event_field("POLLERR", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), + [ilog2(POLLHUP)] = lttng_kernel_static_event_field("POLLHUP", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), + [ilog2(POLLNVAL)] = lttng_kernel_static_event_field("POLLNVAL", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), + [ilog2(LTTNG_POLL_NRFLAGS)] = lttng_kernel_static_event_field("padding", + lttng_kernel_static_type_integer(POLL_FLAGS_PADDING_SIZE, 1, 0, __LITTLE_ENDIAN, 10), + false, false), }; -static struct lttng_event_field lttng_pollfd_fields[] = { - [0] = { - .name = "fd", - .type = __type_integer(int, 0, 0, 0, __BYTE_ORDER, 10, none), - }, - [1] = { - .name = "raw_events", - .type = __type_integer(short, 0, 0, 0, __BYTE_ORDER, 16, none), - }, - [2] = { - .name = "events", - .type = { - .atype = atype_struct_nestable, - .u.struct_nestable.nr_fields = ARRAY_SIZE(lttng_pollfd_flag_fields), - .u.struct_nestable.fields = lttng_pollfd_flag_fields, - .u.struct_nestable.alignment = 0, - } - }, -}; +static_assert(((ARRAY_SIZE(lttng_pollfd_flag_fields) - 1) + POLL_FLAGS_PADDING_SIZE) == sizeof(uint8_t) * BITS_PER_BYTE); + +#endif /* LTTNG_TRACEPOINT_TYPE_EXTERN */ + +LTTNG_TRACEPOINT_TYPE(PARAMS(const struct lttng_kernel_type_struct lttng_pollfd_flag_fields_struct), + PARAMS(lttng_kernel_static_type_struct_init(ARRAY_SIZE(lttng_pollfd_flag_fields), lttng_pollfd_flag_fields, 0))) -static struct lttng_type lttng_pollfd_elem = { - .atype = atype_struct_nestable, - .u.struct_nestable.nr_fields = ARRAY_SIZE(lttng_pollfd_fields), - .u.struct_nestable.fields = lttng_pollfd_fields, - .u.struct_nestable.alignment = 0, +#ifndef LTTNG_TRACEPOINT_TYPE_EXTERN +static const struct lttng_kernel_event_field *lttng_pollfd_fields[] = { + [0] = lttng_kernel_static_event_field("fd", lttng_kernel_static_type_integer_from_type(int, __BYTE_ORDER, 10), + false, false), + [1] = lttng_kernel_static_event_field("raw_events", lttng_kernel_static_type_integer_from_type(uint16_t, __BYTE_ORDER, 16), + false, false), + [2] = lttng_kernel_static_event_field("events", + (const struct lttng_kernel_type_common *) <tng_pollfd_flag_fields_struct, + false, false), }; +#endif /* LTTNG_TRACEPOINT_TYPE_EXTERN */ + +LTTNG_TRACEPOINT_TYPE(PARAMS(const struct lttng_kernel_type_struct lttng_pollfd_fields_struct), + PARAMS(lttng_kernel_static_type_struct_init(ARRAY_SIZE(lttng_pollfd_fields), lttng_pollfd_fields, 0))) + #endif /* ONCE_LTTNG_TRACE_POLL_H */ +#endif /* LTTNG_CREATE_FIELD_METADATA */ #define LTTNG_SYSCALL_POLL_locvar \ unsigned int fds_length, fds_max_len, alloc_fds; \ @@ -396,9 +531,6 @@ static struct lttng_type lttng_pollfd_elem = { uint8_t overflow; #define LTTNG_SYSCALL_POLL_code_pre \ - BUILD_BUG_ON(((ARRAY_SIZE(lttng_pollfd_flag_fields) - 1) + \ - POLL_FLAGS_PADDING_SIZE) != \ - sizeof(uint8_t) * BITS_PER_BYTE); \ tp_locvar->fds = NULL; \ tp_locvar->overflow = 0; \ \ @@ -455,11 +587,10 @@ end: \ sc_in( \ ctf_custom_field( \ ctf_custom_type( \ - { \ - .atype = atype_sequence_nestable, \ - .u.sequence_nestable.length_name = "fds_length", \ - .u.sequence_nestable.elem_type = <tng_pollfd_elem, \ - } \ + lttng_kernel_static_type_sequence("fds_length", \ + (const struct lttng_kernel_type_common *) <tng_pollfd_fields_struct, \ + 0, \ + none) \ ), \ fds, \ ctf_custom_code( \ @@ -478,11 +609,10 @@ end: \ sc_out( \ ctf_custom_field( \ ctf_custom_type( \ - { \ - .atype = atype_sequence_nestable, \ - .u.sequence_nestable.length_name = "fds_length", \ - .u.sequence_nestable.elem_type = <tng_pollfd_elem, \ - } \ + lttng_kernel_static_type_sequence("fds_length", \ + (const struct lttng_kernel_type_common *) <tng_pollfd_fields_struct, \ + 0, \ + none) \ ), \ fds, \ ctf_custom_code( \ @@ -587,6 +717,8 @@ SC_LTTNG_TRACEPOINT_ENUM(lttng_epoll_op, ) ) +#ifdef LTTNG_CREATE_FIELD_METADATA + #ifndef ONCE_LTTNG_TRACE_EPOLL_CTL_H #define ONCE_LTTNG_TRACE_EPOLL_CTL_H @@ -594,79 +726,73 @@ SC_LTTNG_TRACEPOINT_ENUM(lttng_epoll_op, #define EPOLL_FLAGS_PADDING_SIZE (sizeof(uint8_t) * BITS_PER_BYTE) - \ ilog2(LTTNG_EPOLL_NRFLAGS - 1) +#ifndef LTTNG_TRACEPOINT_TYPE_EXTERN /* * Only extract the values specified by iBCS2 for now. */ -static struct lttng_event_field lttng_epoll_ctl_events_fields[] = { +static const struct lttng_kernel_event_field *lttng_epoll_ctl_events_fields[] = { /* 0x0001 */ - [ilog2(POLLIN)] = { - .name = "EPOLLIN", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, + [ilog2(POLLIN)] = lttng_kernel_static_event_field("EPOLLIN", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), /* 0x0002 */ - [ilog2(POLLPRI)] = { - .name = "EPOLLPRI", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, + [ilog2(POLLPRI)] = lttng_kernel_static_event_field("EPOLLPRI", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), /* 0x0004 */ - [ilog2(POLLOUT)] = { - .name = "EPOLLOUT", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, + [ilog2(POLLOUT)] = lttng_kernel_static_event_field("EPOLLOUT", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), /* 0x0008 */ - [ilog2(POLLERR)] = { - .name = "EPOLLERR", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, + [ilog2(POLLERR)] = lttng_kernel_static_event_field("EPOLLERR", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), /* 0x0010 */ - [ilog2(POLLHUP)] = { - .name = "EPOLLHUP", - .type = __type_integer(int, 1, 1, 0, __LITTLE_ENDIAN, 10, none), - }, - [ilog2(LTTNG_EPOLL_NRFLAGS)] = { - .name = "padding", - .type = __type_integer(int, EPOLL_FLAGS_PADDING_SIZE, 1, 0, - __LITTLE_ENDIAN, 10, none), - }, - + [ilog2(POLLHUP)] = lttng_kernel_static_event_field("EPOLLHUP", + lttng_kernel_static_type_integer(1, 1, 0, __LITTLE_ENDIAN, 10), + false, false), + [ilog2(LTTNG_EPOLL_NRFLAGS)] = lttng_kernel_static_event_field("padding", + lttng_kernel_static_type_integer(EPOLL_FLAGS_PADDING_SIZE, 1, 0, __LITTLE_ENDIAN, 10), + false, false), }; +#endif /* LTTNG_TRACEPOINT_TYPE_EXTERN */ + +LTTNG_TRACEPOINT_TYPE(PARAMS(const struct lttng_kernel_type_struct lttng_epoll_ctl_events_fields_struct), + PARAMS(lttng_kernel_static_type_struct_init(ARRAY_SIZE(lttng_epoll_ctl_events_fields), lttng_epoll_ctl_events_fields, 0))) -static struct lttng_event_field lttng_epoll_data_fields[] = { - [0] = { - .name = "u64", - .type = __type_integer(uint64_t, 0, 0, 0, __BYTE_ORDER, 16, none), - }, - [1] = { - .name = "fd", - .type = __type_integer(int, 0, 0, 0, __BYTE_ORDER, 10, none), - }, +#ifndef LTTNG_TRACEPOINT_TYPE_EXTERN +static const struct lttng_kernel_event_field *lttng_epoll_data_fields[] = { + [0] = lttng_kernel_static_event_field("u64", + lttng_kernel_static_type_integer_from_type(uint64_t, __BYTE_ORDER, 16), + false, false), + [1] = lttng_kernel_static_event_field("fd", + lttng_kernel_static_type_integer_from_type(int, __BYTE_ORDER, 10), + false, false), }; +#endif /* LTTNG_TRACEPOINT_TYPE_EXTERN */ -static struct lttng_event_field epoll_ctl_fields[] = { - [0] = { - .name = "data_union", - .type = { - .atype = atype_struct_nestable, - .u.struct_nestable.nr_fields = ARRAY_SIZE(lttng_epoll_data_fields), - .u.struct_nestable.fields = lttng_epoll_data_fields, - .u.struct_nestable.alignment = 0, - } - }, - [1] = { - .name = "raw_events", - .type = __type_integer(uint32_t, 0, 0, 0, __BYTE_ORDER, 16, none), - }, - [2] = { - .name = "events", - .type = { - .atype = atype_struct_nestable, - .u.struct_nestable.nr_fields = ARRAY_SIZE(lttng_epoll_ctl_events_fields), - .u.struct_nestable.fields = lttng_epoll_ctl_events_fields, - .u.struct_nestable.alignment = 0, - } - }, +LTTNG_TRACEPOINT_TYPE(PARAMS(const struct lttng_kernel_type_struct lttng_epoll_data_fields_struct), + PARAMS(lttng_kernel_static_type_struct_init(ARRAY_SIZE(lttng_epoll_data_fields), lttng_epoll_data_fields, 0))) + +#ifndef LTTNG_TRACEPOINT_TYPE_EXTERN +static const struct lttng_kernel_event_field *epoll_ctl_fields[] = { + [0] = lttng_kernel_static_event_field("data_union", + (const struct lttng_kernel_type_common *) <tng_epoll_data_fields_struct, + false, false), + [1] = lttng_kernel_static_event_field("raw_events", + lttng_kernel_static_type_integer_from_type(uint32_t, __BYTE_ORDER, 16), + false, false), + [2] = lttng_kernel_static_event_field("events", + (const struct lttng_kernel_type_common *) <tng_epoll_ctl_events_fields_struct, + false, false), }; +#endif /* LTTNG_TRACEPOINT_TYPE_EXTERN */ + +LTTNG_TRACEPOINT_TYPE(PARAMS(const struct lttng_kernel_type_struct epoll_ctl_fields_struct), + PARAMS(lttng_kernel_static_type_struct_init(ARRAY_SIZE(epoll_ctl_fields), epoll_ctl_fields, 0))) + #endif /* ONCE_LTTNG_TRACE_EPOLL_CTL_H */ +#endif /* LTTNG_CREATE_FIELD_METADATA */ #if defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) #define OVERRIDE_32_epoll_ctl @@ -691,12 +817,7 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(epoll_ctl, sc_in( ctf_custom_field( ctf_custom_type( - { - .atype = atype_struct_nestable, - .u.struct_nestable.nr_fields = ARRAY_SIZE(epoll_ctl_fields), - .u.struct_nestable.fields = epoll_ctl_fields, - .u.struct_nestable.alignment = 0, - } + (const struct lttng_kernel_type_common *) &epoll_ctl_fields_struct ), event, ctf_custom_code( @@ -722,42 +843,31 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(epoll_ctl, ) #endif /* defined(CONFIG_X86_32) || defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) */ +#ifdef LTTNG_CREATE_FIELD_METADATA #ifndef ONCE_LTTNG_TRACE_EPOLL_H #define ONCE_LTTNG_TRACE_EPOLL_H -static struct lttng_event_field lttng_epoll_wait_fields[] = { - [0] = { - .name = "data_union", - .type = { - .atype = atype_struct_nestable, - .u.struct_nestable.nr_fields = ARRAY_SIZE(lttng_epoll_data_fields), - .u.struct_nestable.fields = lttng_epoll_data_fields, - .u.struct_nestable.alignment = 0, - } - }, - [1] = { - .name = "raw_events", - .type = __type_integer(uint32_t, 0, 0, 0, __BYTE_ORDER, 16, none), - }, - [2] = { - .name = "events", - .type = { - .atype = atype_struct_nestable, - .u.struct_nestable.nr_fields = ARRAY_SIZE(lttng_epoll_ctl_events_fields), - .u.struct_nestable.fields = lttng_epoll_ctl_events_fields, - .u.struct_nestable.alignment = 0, - } - }, -}; +#ifndef LTTNG_TRACEPOINT_TYPE_EXTERN +static const struct lttng_kernel_event_field *lttng_epoll_wait_fields[] = lttng_kernel_static_event_field_array( + [0] = lttng_kernel_static_event_field("data_union", + (const struct lttng_kernel_type_common *) <tng_epoll_data_fields_struct, + false, false), + [1] = lttng_kernel_static_event_field("raw_events", lttng_kernel_static_type_integer_from_type(uint32_t, __BYTE_ORDER, 16), + false, false), + [2] = lttng_kernel_static_event_field("events", + (const struct lttng_kernel_type_common *) <tng_epoll_ctl_events_fields_struct, + false, false), +); -static struct lttng_type lttng_epoll_wait_elem = { - .atype = atype_struct_nestable, - .u.struct_nestable.nr_fields = ARRAY_SIZE(lttng_epoll_wait_fields), - .u.struct_nestable.fields = lttng_epoll_wait_fields, - .u.struct_nestable.alignment = 0, -}; +static_assert(((ARRAY_SIZE(lttng_epoll_ctl_events_fields) - 1) + EPOLL_FLAGS_PADDING_SIZE) == sizeof(uint8_t) * BITS_PER_BYTE); + +#endif /* LTTNG_TRACEPOINT_TYPE_EXTERN */ + +LTTNG_TRACEPOINT_TYPE(PARAMS(const struct lttng_kernel_type_struct lttng_epoll_wait_fields_struct), + PARAMS(lttng_kernel_static_type_struct_init(ARRAY_SIZE(lttng_epoll_wait_fields), lttng_epoll_wait_fields, 0))) #endif /* ONCE_LTTNG_TRACE_EPOLL_H */ +#endif /* LTTNG_CREATE_FIELD_METADATA */ #define LTTNG_SYSCALL_EPOLL_WAIT_locvar \ sc_out( \ @@ -767,9 +877,6 @@ static struct lttng_type lttng_epoll_wait_elem = { ) #define LTTNG_SYSCALL_EPOLL_WAIT_code_pre \ - BUILD_BUG_ON(((ARRAY_SIZE(lttng_epoll_ctl_events_fields) - 1) + \ - EPOLL_FLAGS_PADDING_SIZE) != \ - sizeof(uint8_t) * BITS_PER_BYTE); \ sc_out({ \ int err; \ unsigned long maxalloc; \ @@ -794,7 +901,7 @@ static struct lttng_type lttng_epoll_wait_elem = { tp_locvar->fds_length = ret; \ } \ \ - tp_locvar->events = lttng_tp_mempool_alloc( \ + tp_locvar->events = lttng_tp_mempool_alloc( \ maxalloc * sizeof(struct epoll_event)); \ if (!tp_locvar->events) { \ tp_locvar->fds_length = 0; \ @@ -813,13 +920,10 @@ static struct lttng_type lttng_epoll_wait_elem = { #define LTTNG_SYSCALL_EPOLL_WAIT_fds_field \ ctf_custom_field( \ ctf_custom_type( \ - { \ - .atype = atype_sequence_nestable, \ - .u.sequence_nestable.length_name = \ - "fds_length", \ - .u.sequence_nestable.elem_type = \ - <tng_epoll_wait_elem, \ - } \ + lttng_kernel_static_type_sequence("fds_length", \ + (const struct lttng_kernel_type_common *) <tng_epoll_wait_fields_struct, \ + 0, \ + none) \ ), \ fds, \ ctf_custom_code( \ @@ -921,6 +1025,7 @@ SC_LTTNG_TRACEPOINT_EVENT(socketpair, ) #endif /* (defined(CONFIG_X86_64) && !defined(LTTNG_SC_COMPAT)) || defined(CONFIG_ARM64) || defined(CONFIG_ARM) */ +#ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM /* * Enumeration of the open flags, as described in the 'open' * system call man page. @@ -946,9 +1051,9 @@ SC_LTTNG_TRACEPOINT_ENUM(lttng_file_status_flags, ctf_enum_value("O_CLOEXEC", O_CLOEXEC) ctf_enum_value("O_SYNC", __O_SYNC) ctf_enum_value("O_PATH", O_PATH) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,11,0)) ctf_enum_value("O_TMPFILE", __O_TMPFILE) -#endif /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0)) */ +#endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,11,0)) */ ) ) @@ -1002,5 +1107,6 @@ SC_LTTNG_TRACEPOINT_EVENT(open, sc_in(ctf_enum(lttng_file_mode, umode_t, mode, mode)) ) ) +#endif /* CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM */ #endif /* CREATE_SYSCALL_TABLE */