From: Mathieu Desnoyers Date: Wed, 6 May 2020 13:45:16 +0000 (-0400) Subject: Cleanup: Move headers from probes/ to include/lttng/ X-Git-Tag: v2.13.0-rc1~231 X-Git-Url: http://git.liburcu.org/?p=lttng-modules.git;a=commitdiff_plain;h=3b4aafcbbef722c5d04f2fe06a47c47d4d23eda0 Cleanup: Move headers from probes/ to include/lttng/ - Remove extra "lttng-" from filename (now implied by the path). - Adapt includes accordingly. - Adapt lttng-syscalls-generate-headers.sh header generation script accordingly. - Remove probes/lttng.h, include its PARAMS() define in the two user headers. Signed-off-by: Mathieu Desnoyers --- diff --git a/include/lttng/define_trace.h b/include/lttng/define_trace.h new file mode 100644 index 00000000..b0a5cb67 --- /dev/null +++ b/include/lttng/define_trace.h @@ -0,0 +1,121 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * lttng/define_trace.h + * + * Copyright (C) 2009 Steven Rostedt + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +/* + * Trace files that want to automate creationg of all tracepoints defined + * in their file should include this file. The following are macros that the + * trace file may define: + * + * TRACE_SYSTEM defines the system the tracepoint is for + * + * TRACE_INCLUDE_FILE if the file name is something other than TRACE_SYSTEM.h + * This macro may be defined to tell define_trace.h what file to include. + * Note, leave off the ".h". + * + * TRACE_INCLUDE_PATH if the path is something other than core kernel include/trace + * then this macro can define the path to use. Note, the path is relative to + * define_trace.h, not the file including it. Full path names for out of tree + * modules must be used. + */ + +#ifdef CREATE_TRACE_POINTS + +/* Prevent recursion */ +#undef CREATE_TRACE_POINTS + +#include + +#undef LTTNG_TRACEPOINT_EVENT_MAP +#define LTTNG_TRACEPOINT_EVENT_MAP(name, map, proto, args, fields) + +#undef LTTNG_TRACEPOINT_EVENT_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, map, fields) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(template, name, map, proto, args) + +#undef LTTNG_TRACEPOINT_EVENT +#define LTTNG_TRACEPOINT_EVENT(name, proto, args, fields) + +#undef LTTNG_TRACEPOINT_EVENT_CODE +#define LTTNG_TRACEPOINT_EVENT_CODE(name, proto, args, _locvar, _code_pre, fields, _code_post) + +#undef LTTNG_TRACEPOINT_EVENT_CODE_MAP +#define LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, map, proto, args, _locvar, _code_pre, fields, _code_post) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE +#define LTTNG_TRACEPOINT_EVENT_INSTANCE(template, name, proto, args) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(template, name, map) + +#undef TRACE_INCLUDE +#undef __TRACE_INCLUDE + +#ifndef TRACE_INCLUDE_FILE +# define TRACE_INCLUDE_FILE TRACE_SYSTEM +# define UNDEF_TRACE_INCLUDE_FILE +#endif + +#ifndef TRACE_INCLUDE_PATH +# define __TRACE_INCLUDE(system) +# define UNDEF_TRACE_INCLUDE_PATH +#else +# define __TRACE_INCLUDE(system) __stringify(TRACE_INCLUDE_PATH/system.h) +#endif + +# define TRACE_INCLUDE(system) __TRACE_INCLUDE(system) + +/* Let the trace headers be reread */ +#define TRACE_HEADER_MULTI_READ + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* Make all open coded DECLARE_TRACE nops */ +#undef DECLARE_TRACE +#define DECLARE_TRACE(name, proto, args) + +#ifdef LTTNG_PACKAGE_BUILD +#include +#endif + +#undef LTTNG_TRACEPOINT_EVENT +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE +#undef LTTNG_TRACEPOINT_EVENT_MAP +#undef LTTNG_TRACEPOINT_EVENT_CLASS +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#undef LTTNG_TRACEPOINT_EVENT_CODE_MAP +#undef LTTNG_TRACEPOINT_EVENT_CODE +#undef LTTNG_TRACEPOINT_EVENT_MAP_NOARGS +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#undef TRACE_HEADER_MULTI_READ + +/* Only undef what we defined in this file */ +#ifdef UNDEF_TRACE_INCLUDE_FILE +# undef TRACE_INCLUDE_FILE +# undef UNDEF_TRACE_INCLUDE_FILE +#endif + +#ifdef UNDEF_TRACE_INCLUDE_PATH +# undef TRACE_INCLUDE_PATH +# undef UNDEF_TRACE_INCLUDE_PATH +#endif + +/* + * We want to re-include lttng-tracepoint-event.h for a following probe. + */ +#undef LTTNG_TRACEPOINT_EVENT_H + +/* We may be processing more files */ +#define CREATE_TRACE_POINTS + +#endif /* CREATE_TRACE_POINTS */ diff --git a/include/lttng/events-nowrite.h b/include/lttng/events-nowrite.h new file mode 100644 index 00000000..5d70b888 --- /dev/null +++ b/include/lttng/events-nowrite.h @@ -0,0 +1,137 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * lttng/events-write.h + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#undef ctf_integer_nowrite +#define ctf_integer_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_integer_hex_nowrite +#define ctf_integer_hex_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 16, 0, 1) + +#undef ctf_integer_oct_nowrite +#define ctf_integer_oct_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 8, 0, 1) + +#undef ctf_integer_network_nowrite +#define ctf_integer_network_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 10, 0, 1) + +#undef ctf_integer_network_hex_nowrite +#define ctf_integer_network_hex_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 16, 0, 1) + +#undef ctf_array_nowrite +#define ctf_array_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_array_network_nowrite +#define ctf_array_network_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 10, 0, 1) + +#undef ctf_array_text_nowrite +#define ctf_array_text_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, UTF8, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_array_bitfield_nowrite +#define ctf_array_bitfield_nowrite(_type, _item, _src, _length) \ + _ctf_array_bitfield(_type, _item, _src, _length, 0, 1) + +#undef ctf_sequence_nowrite +#define ctf_sequence_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, none, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_sequence_network_nowrite +#define ctf_sequence_network_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, none, __BIG_ENDIAN, 10, 0, 1) + +#undef ctf_sequence_text_nowrite +#define ctf_sequence_text_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, UTF8, __BYTE_ORDER, 10, 0, 1) + +#undef ctf_sequence_bitfield_nowrite +#define ctf_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, 0, 1) + +#undef ctf_string_nowrite +#define ctf_string_nowrite(_item, _user_src) \ + _ctf_string(_item, _user_src, 0, 1) + +#undef ctf_enum_nowrite +#define ctf_enum_nowrite(_name, _type, _item, _src) \ + _ctf_enum(_name, _type, _item, _src, 0, 1) + +/* user src */ +#undef ctf_user_integer_nowrite +#define ctf_user_integer_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_integer_hex_nowrite +#define ctf_user_integer_hex_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 16, 1, 1) + +#undef ctf_user_integer_network_nowrite +#define ctf_user_integer_network_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 10, 1, 1) + +#undef ctf_user_integer_network_hex_nowrite +#define ctf_user_integer_network_hex_nowrite(_type, _item, _user_src) \ + _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 16, 1, 1) + +#undef ctf_user_array_nowrite +#define ctf_user_array_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_array_network_nowrite +#define ctf_user_array_network_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 10, 1, 1) + +#undef ctf_user_array_text_nowrite +#define ctf_user_array_text_nowrite(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, UTF8, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_array_bitfield_nowrite +#define ctf_user_array_bitfield_nowrite(_type, _item, _src, _length) \ + _ctf_array_bitfield(_type, _item, _src, _length, 1, 1) + +#undef ctf_user_sequence_nowrite +#define ctf_user_sequence_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, none, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_sequence_network_nowrite +#define ctf_user_sequence_network_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, none, __BIG_ENDIAN, 10, 1, 1) + +#undef ctf_user_sequence_text_nowrite +#define ctf_user_sequence_text_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ + _ctf_sequence_encoded(_type, _item, _user_src, \ + _length_type, _user_src_length, UTF8, __BYTE_ORDER, 10, 1, 1) + +#undef ctf_user_sequence_bitfield_nowrite +#define ctf_user_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, 1, 1) + +#undef ctf_user_string_nowrite +#define ctf_user_string_nowrite(_item, _user_src) \ + _ctf_string(_item, _user_src, 1, 1) + +#undef ctf_user_enum_nowrite +#define ctf_user_enum_nowrite(_name, _type, _item, _src) \ + _ctf_enum(_name, _type, _item, _src, 1, 1) diff --git a/include/lttng/events-reset.h b/include/lttng/events-reset.h new file mode 100644 index 00000000..64e76471 --- /dev/null +++ b/include/lttng/events-reset.h @@ -0,0 +1,283 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * lttng/events-reset.h + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +/* Reset macros used within LTTNG_TRACEPOINT_EVENT to "nothing" */ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) + +#undef LTTNG_TRACEPOINT_ENUM +#define LTTNG_TRACEPOINT_ENUM(_name, _values) + +#undef TP_PROTO +#define TP_PROTO(args...) + +#undef TP_ARGS +#define TP_ARGS(args...) + +#undef TP_locvar +#define TP_locvar(...) + +#undef TP_code_pre +#define TP_code_pre(...) + +#undef TP_code_post +#define TP_code_post(...) + +#undef TP_FIELDS +#define TP_FIELDS(args...) + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, \ + _user, _nowrite) + +#undef _ctf_integer_ext_isuser0 +#define _ctf_integer_ext_isuser0(_type, _item, _src, _byte_order, _base, \ + _nowrite) + +#undef _ctf_integer_ext_isuser1 +#define _ctf_integer_ext_isuser1(_type, _item, _src, _byte_order, _base, \ + _nowrite) + +#undef _ctf_integer_ext_fetched +#define _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, \ + _nowrite) + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, \ + _byte_order, _base, _user, _nowrite) + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, _length_type, \ + _src_length, _byte_order, _user, _nowrite) + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _nowrite) + +/* "write" */ +#undef ctf_integer +#define ctf_integer(_type, _item, _src) + +#undef ctf_integer_hex +#define ctf_integer_hex(_type, _item, _src) + +#undef ctf_integer_oct +#define ctf_integer_oct(_type, _item, _src) + +#undef ctf_integer_network +#define ctf_integer_network(_type, _item, _src) + +#undef ctf_integer_network_hex +#define ctf_integer_network_hex(_type, _item, _src) + +#undef ctf_float +#define ctf_float(_type, _item, _src) + +#undef ctf_array +#define ctf_array(_type, _item, _src, _length) + +#undef ctf_array_hex +#define ctf_array_hex(_type, _item, _src, _length) + +#undef ctf_array_network +#define ctf_array_network(_type, _item, _src, _length) + +#undef ctf_array_network_hex +#define ctf_array_network_hex(_type, _item, _src, _length) + +#undef ctf_array_text +#define ctf_array_text(_type, _item, _src, _length) + +#undef ctf_array_bitfield +#define ctf_array_bitfield(_type, _item, _src, _length) + +#undef ctf_sequence +#define ctf_sequence(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_hex +#define ctf_sequence_hex(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_network +#define ctf_sequence_network(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_network_hex +#define ctf_sequence_network_hex(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_text +#define ctf_sequence_text(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_bitfield +#define ctf_sequence_bitfield(_type, _item, _src, _length_type, _src_length) + +#undef ctf_string +#define ctf_string(_item, _src) + +#undef ctf_enum +#define ctf_enum(_name, _type, _item, _src) + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) + +#undef ctf_custom_type +#define ctf_custom_type(...) + +#undef ctf_custom_code +#define ctf_custom_code(...) + +#undef ctf_align +#define ctf_align(_type) + +/* "nowrite" */ +#undef ctf_integer_nowrite +#define ctf_integer_nowrite(_type, _item, _src) + +#undef ctf_float_nowrite +#define ctf_float_nowrite(_type, _item, _src) + +#undef ctf_array_nowrite +#define ctf_array_nowrite(_type, _item, _src, _length) + +#undef ctf_array_network_nowrite +#define ctf_array_network_nowrite(_type, _item, _src, _length) + +#undef ctf_array_text_nowrite +#define ctf_array_text_nowrite(_type, _item, _src, _length) + +#undef ctf_array_bitfield_nowrite +#define ctf_array_bitfield_nowrite(_type, _item, _src, _length) + +#undef ctf_sequence_nowrite +#define ctf_sequence_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_network_nowrite +#define ctf_sequence_network_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_text_nowrite +#define ctf_sequence_text_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_sequence_bitfield_nowrite +#define ctf_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_string_nowrite +#define ctf_string_nowrite(_item, _src) + +#undef ctf_enum_nowrite +#define ctf_enum_nowrite(_name, _type, _item, _src) + +/* "user" - "write" */ +#undef ctf_user_integer +#define ctf_user_integer(_type, _item, _user_src) + +#undef ctf_user_integer_hex +#define ctf_user_integer_hex(_type, _item, _user_src) + +#undef ctf_user_integer_network +#define ctf_user_integer_network(_type, _item, _user_src) + +#undef ctf_user_integer_network_hex +#define ctf_user_integer_network_hex(_type, _item, _user_src) + +#undef ctf_user_float +#define ctf_user_float(_type, _item, _user_src) + +#undef ctf_user_array +#define ctf_user_array(_type, _item, _user_src, _length) + +#undef ctf_user_array_hex +#define ctf_user_array_hex(_type, _item, _user_src, _length) + +#undef ctf_user_array_network +#define ctf_user_array_network(_type, _item, _user_src, _length) + +#undef ctf_user_array_network_hex +#define ctf_user_array_network_hex(_type, _item, _user_src, _length) + +#undef ctf_user_array_text +#define ctf_user_array_text(_type, _item, _user_src, _length) + +#undef ctf_user_array_bitfield +#define ctf_user_array_bitfield(_type, _item, _src, _length) + +#undef ctf_user_sequence +#define ctf_user_sequence(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_hex +#define ctf_user_sequence_hex(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_network +#define ctf_user_sequence_network(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_network_hex +#define ctf_user_sequence_network_hex(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_text +#define ctf_user_sequence_text(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_bitfield +#define ctf_user_sequence_bitfield(_type, _item, _src, _length_type, _src_length) + +#undef ctf_user_string +#define ctf_user_string(_item, _user_src) + +#undef ctf_user_enum +#define ctf_user_enum(_name, _type, _item, _src) + +/* "user" - "nowrite" */ +#undef ctf_user_integer_nowrite +#define ctf_user_integer_nowrite(_type, _item, _user_src) + +#undef ctf_user_float_nowrite +#define ctf_user_float_nowrite(_type, _item, _user_src) + +#undef ctf_user_array_nowrite +#define ctf_user_array_nowrite(_type, _item, _user_src, _length) + +#undef ctf_user_array_network_nowrite +#define ctf_user_array_network_nowrite(_type, _item, _user_src, _length) + +#undef ctf_user_array_text_nowrite +#define ctf_user_array_text_nowrite(_type, _item, _user_src, _length) + +#undef ctf_user_array_bitfield_nowrite +#define ctf_user_array_bitfield_nowrite(_type, _item, _src, _length) + +#undef ctf_user_sequence_nowrite +#define ctf_user_sequence_nowrite(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_network_nowrite +#define ctf_user_sequence_network_nowrite(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_text_nowrite +#define ctf_user_sequence_text_nowrite(_type, _item, _user_src, _length_type, _user_src_length) + +#undef ctf_user_sequence_bitfield_nowrite +#define ctf_user_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) + +#undef ctf_user_string_nowrite +#define ctf_user_string_nowrite(_item, _user_src) + +#undef ctf_user_enum_nowrite +#define ctf_user_enum_nowrite(_name, _type, _item, _src) diff --git a/include/lttng/events-write.h b/include/lttng/events-write.h new file mode 100644 index 00000000..646977a1 --- /dev/null +++ b/include/lttng/events-write.h @@ -0,0 +1,339 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * lttng/events-write.h + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#undef ctf_integer +#define ctf_integer(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_integer_bitfield +#define ctf_integer_bitfield(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __LITTLE_ENDIAN, 10, 0, 0) + +#undef ctf_integer_hex +#define ctf_integer_hex(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 16, 0, 0) + +#undef ctf_integer_oct +#define ctf_integer_oct(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 8, 0, 0) + +#undef ctf_integer_network +#define ctf_integer_network(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 10, 0, 0) + +#undef ctf_integer_network_hex +#define ctf_integer_network_hex(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 16, 0, 0) + +#undef ctf_array +#define ctf_array(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_array_hex +#define ctf_array_hex(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 16, 0, 0) + +#undef ctf_array_network +#define ctf_array_network(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 10, 0, 0) + +#undef ctf_array_network_hex +#define ctf_array_network_hex(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 16, 0, 0) + +#undef ctf_array_text +#define ctf_array_text(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, UTF8, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_array_bitfield +#define ctf_array_bitfield(_type, _item, _src, _length) \ + _ctf_array_bitfield(_type, _item, _src, _length, 0, 0) + +#undef ctf_sequence +#define ctf_sequence(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_sequence_hex +#define ctf_sequence_hex(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BYTE_ORDER, 16, 0, 0) + +#undef ctf_sequence_network +#define ctf_sequence_network(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BIG_ENDIAN, 10, 0, 0) + +#undef ctf_sequence_network_hex +#define ctf_sequence_network_hex(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BIG_ENDIAN, 16, 0, 0) + +#undef ctf_sequence_text +#define ctf_sequence_text(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, UTF8, __BYTE_ORDER, 10, 0, 0) + +#undef ctf_sequence_bitfield +#define ctf_sequence_bitfield(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, 0, 0) + +#undef ctf_string +#define ctf_string(_item, _src) \ + _ctf_string(_item, _src, 0, 0) + +#undef ctf_enum +#define ctf_enum(_name, _type, _item, _src) \ + _ctf_enum(_name, _type, _item, _src, 0, 0) + +/* user src */ +#undef ctf_user_integer +#define ctf_user_integer(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_integer_hex +#define ctf_user_integer_hex(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 16, 1, 0) + +#undef ctf_user_integer_network +#define ctf_user_integer_network(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 10, 1, 0) + +#undef ctf_user_integer_network_hex +#define ctf_user_integer_network_hex(_type, _item, _src) \ + _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 16, 1, 0) + +#undef ctf_user_array +#define ctf_user_array(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_array_hex +#define ctf_user_array_hex(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BYTE_ORDER, 16, 1, 0) + +#undef ctf_user_array_network +#define ctf_user_array_network(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 10, 1, 0) + +#undef ctf_user_array_network_hex +#define ctf_user_array_network_hex(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, none, __BIG_ENDIAN, 16, 1, 0) + +#undef ctf_user_array_text +#define ctf_user_array_text(_type, _item, _src, _length) \ + _ctf_array_encoded(_type, _item, _src, \ + _length, UTF8, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_array_bitfield +#define ctf_user_array_bitfield(_type, _item, _src, _length) \ + _ctf_array_bitfield(_type, _item, _src, _length, 1, 0) + +#undef ctf_user_sequence +#define ctf_user_sequence(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_sequence_hex +#define ctf_user_sequence_hex(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BYTE_ORDER, 16, 1, 0) + +#undef ctf_user_sequence_network +#define ctf_user_sequence_network(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BIG_ENDIAN, 10, 1, 0) + +#undef ctf_user_sequence_network_hex +#define ctf_user_sequence_network_hex(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, none, __BIG_ENDIAN, 16, 1, 0) + +#undef ctf_user_sequence_text +#define ctf_user_sequence_text(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, UTF8, __BYTE_ORDER, 10, 1, 0) + +#undef ctf_user_sequence_bitfield +#define ctf_user_sequence_bitfield(_type, _item, _src, _length_type, _src_length) \ + _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, 1, 0) + +#undef ctf_user_string +#define ctf_user_string(_item, _src) \ + _ctf_string(_item, _src, 1, 0) + +#undef ctf_user_enum +#define ctf_user_enum(_name, _type, _item, _src) \ + _ctf_enum(_name, _type, _item, _src, 1, 0) + +/* types */ +#undef ctf_integer_type +#define ctf_integer_type(_type, _src) \ + ctf_integer(_type, unused, _src) + +#undef ctf_integer_bitfield_type +#define ctf_integer_bitfield_type(_type, _src) \ + ctf_integer_bitfield(_type, unused, _src) + +#undef ctf_integer_hex_type +#define ctf_integer_hex_type(_type, _src) \ + ctf_integer_hex(_type, unused, _src) + +#undef ctf_integer_oct_type +#define ctf_integer_oct_type(_type, _item, _src) \ + ctf_integer_oct(_type, unused, _src) + +#undef ctf_integer_network_type +#define ctf_integer_network_type(_type, _src) \ + ctf_integer_network(_type, unused, _src) + +#undef ctf_integer_network_hex_type +#define ctf_integer_network_hex_type(_type, _src) \ + ctf_integer_network_hex(_type, unused, _src) + +#undef ctf_array_type +#define ctf_array_type(_type, _src, _length) \ + ctf_array(_type, unused, _src, _length) + +#undef ctf_array_hex_type +#define ctf_array_hex_type(_type, _src, _length) \ + ctf_array_hex(_type, unused, _src, _length) + +#undef ctf_array_network_type +#define ctf_array_network_type(_type, _src, _length) \ + ctf_array_network(_type, unused, _src, _length) + +#undef ctf_array_network_hex_type +#define ctf_array_network_hex_type(_type, _src, _length) \ + ctf_array_network_hex(_type, unused, _src, _length) + +#undef ctf_array_text_type +#define ctf_array_text_type(_type, _src, _length) \ + ctf_array_text(_type, unused, _src, _length) + +#undef ctf_array_bitfield_type +#define ctf_array_bitfield_type(_type, _src, _length) \ + ctf_array_bitfield(_type, unused, _src, _length) + +#undef ctf_sequence_type +#define ctf_sequence_type(_type, _src, _length_type, _src_length) \ + ctf_sequence(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_hex_type +#define ctf_sequence_hex_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_hex(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_network_type +#define ctf_sequence_network_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_network(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_network_hex_type +#define ctf_sequence_network_hex_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_network_hex(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_text_type +#define ctf_sequence_text_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_text(_type, unused, _src, _length_type, _src_length) + +#undef ctf_sequence_bitfield_type +#define ctf_sequence_bitfield_type(_type, _src, _length_type, _src_length) \ + ctf_sequence_bitfield(_type, unused, _src, _length_type, _src_length) + +#undef ctf_string_type +#define ctf_string_type(_src) \ + ctf_string(unused, _src) + +#undef ctf_enum_type +#define ctf_enum_type(_name, _type, _src) \ + ctf_enum(_name, _type, unused, _src) + +/* user src types */ +#undef ctf_user_integer_type +#define ctf_user_integer_type(_type, _src) \ + ctf_user_integer(_type, unused, _src) + +#undef ctf_user_integer_hex_type +#define ctf_user_integer_hex_type(_type, _src) \ + ctf_user_integer_hex(_type, unused, _src) + +#undef ctf_user_integer_oct_type +#define ctf_user_integer_oct_type(_type, _item, _src) \ + ctf_user_integer_oct(_type, unused, _src) + +#undef ctf_user_integer_network_type +#define ctf_user_integer_network_type(_type, _src) \ + ctf_user_integer_network(_type, unused, _src) + +#undef ctf_user_integer_network_hex_type +#define ctf_user_integer_network_hex_type(_type, _src) \ + ctf_user_integer_network_hex(_type, unused, _src) + +#undef ctf_user_array_type +#define ctf_user_array_type(_type, _src, _length) \ + ctf_user_array(_type, unused, _src, _length) + +#undef ctf_user_array_hex_type +#define ctf_user_array_hex_type(_type, _src, _length) \ + ctf_user_array_hex(_type, unused, _src, _length) + +#undef ctf_user_array_network_type +#define ctf_user_array_network_type(_type, _src, _length) \ + ctf_user_array_network(_type, unused, _src, _length) + +#undef ctf_user_array_network_hex_type +#define ctf_user_array_network_hex_type(_type, _src, _length) \ + ctf_user_array_network_hex(_type, unused, _src, _length) + +#undef ctf_user_array_text_type +#define ctf_user_array_text_type(_type, _src, _length) \ + ctf_user_array_text(_type, unused, _src, _length) + +#undef ctf_user_array_bitfield_type +#define ctf_user_array_bitfield_type(_type, _src, _length) \ + ctf_user_array_bitfield(_type, unused, _src, _length) + +#undef ctf_user_sequence_type +#define ctf_user_sequence_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_hex_type +#define ctf_user_sequence_hex_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_hex(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_network_type +#define ctf_user_sequence_network_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_network(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_network_hex_type +#define ctf_user_sequence_network_hex_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_network_hex(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_text_type +#define ctf_user_sequence_text_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_text(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_sequence_bitfield_type +#define ctf_user_sequence_bitfield_type(_type, _src, _length_type, _src_length) \ + ctf_user_sequence_bitfield(_type, unused, _src, _length_type, _src_length) + +#undef ctf_user_string_type +#define ctf_user_string_type(_src) \ + ctf_user_string(unused, _src) + +#undef ctf_user_enum_type +#define ctf_user_enum_type(_name, _type, _src) \ + ctf_user_enum(_name, _type, unused, _src) diff --git a/include/lttng/probe-user.h b/include/lttng/probe-user.h new file mode 100644 index 00000000..6b7f38dc --- /dev/null +++ b/include/lttng/probe-user.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * lttng/probe-user.h + * + * Copyright (C) 2012 Mathieu Desnoyers + */ + +#ifndef _LTTNG_PROBE_USER_H +#define _LTTNG_PROBE_USER_H + +/* + * Calculate string length. Include final null terminating character if there is + * one, or ends at first fault. + */ +long lttng_strlen_user_inatomic(const char *addr); + +#endif /* _LTTNG_PROBE_USER_H */ diff --git a/include/lttng/tracepoint-event-impl.h b/include/lttng/tracepoint-event-impl.h new file mode 100644 index 00000000..25077772 --- /dev/null +++ b/include/lttng/tracepoint-event-impl.h @@ -0,0 +1,1441 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * lttng/tracepoint-event-impl.h + * + * Copyright (C) 2009 Steven Rostedt + * Copyright (C) 2009-2014 Mathieu Desnoyers + */ + +#include +#include +#include +#include +#include + +#include +#include +#include /* for wrapper_vmalloc_sync_mappings() */ +#include +#include +#include +#include +#include +#include +#include + +#define __LTTNG_NULL_STRING "(null)" + +#undef PARAMS +#define PARAMS(args...) args + +/* + * Macro declarations used for all stages. + */ + +/* + * LTTng name mapping macros. LTTng remaps some of the kernel events to + * enforce name-spacing. + */ +#undef LTTNG_TRACEPOINT_EVENT_MAP +#define LTTNG_TRACEPOINT_EVENT_MAP(name, map, proto, args, fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS(map, \ + PARAMS(proto), \ + PARAMS(args), \ + PARAMS(fields)) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args)) + +#undef LTTNG_TRACEPOINT_EVENT_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, map, fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(map, \ + PARAMS(fields)) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(map, name, map) + +#undef LTTNG_TRACEPOINT_EVENT_CODE_MAP +#define LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, map, proto, args, _locvar, _code_pre, fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CLASS_CODE(map, \ + PARAMS(proto), \ + PARAMS(args), \ + PARAMS(_locvar), \ + PARAMS(_code_pre), \ + PARAMS(fields), \ + PARAMS(_code_post)) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args)) + +#undef LTTNG_TRACEPOINT_EVENT_CODE +#define LTTNG_TRACEPOINT_EVENT_CODE(name, proto, args, _locvar, _code_pre, fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, name, \ + PARAMS(proto), \ + PARAMS(args), \ + PARAMS(_locvar), \ + PARAMS(_code_pre), \ + PARAMS(fields), \ + PARAMS(_code_post)) + +/* + * LTTNG_TRACEPOINT_EVENT_CLASS can be used to add a generic function + * handlers for events. That is, if all events have the same parameters + * and just have distinct trace points. Each tracepoint can be defined + * with LTTNG_TRACEPOINT_EVENT_INSTANCE and that will map the + * LTTNG_TRACEPOINT_EVENT_CLASS to the tracepoint. + * + * LTTNG_TRACEPOINT_EVENT is a one to one mapping between tracepoint and + * template. + */ + +#undef LTTNG_TRACEPOINT_EVENT +#define LTTNG_TRACEPOINT_EVENT(name, proto, args, fields) \ + LTTNG_TRACEPOINT_EVENT_MAP(name, name, \ + PARAMS(proto), \ + PARAMS(args), \ + PARAMS(fields)) + +#undef LTTNG_TRACEPOINT_EVENT_NOARGS +#define LTTNG_TRACEPOINT_EVENT_NOARGS(name, fields) \ + LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, name, PARAMS(fields)) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE +#define LTTNG_TRACEPOINT_EVENT_INSTANCE(template, name, proto, args) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(template, name, name, PARAMS(proto), PARAMS(args)) + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(template, name, name) + +#undef LTTNG_TRACEPOINT_EVENT_CLASS +#define LTTNG_TRACEPOINT_EVENT_CLASS(_name, _proto, _args, _fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, PARAMS(_proto), PARAMS(_args), , , \ + PARAMS(_fields), ) + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ + LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, , , PARAMS(_fields), ) + + +/* + * Stage 1 of the trace events. + * + * Create dummy trace calls for each events, verifying that the LTTng module + * instrumentation headers match the kernel arguments. Will be optimized + * out by the compiler. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_ARGS +#define TP_ARGS(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ +void trace_##_name(_proto); + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ +void trace_##_name(void); + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 1.1 of the trace events. + * + * Create dummy trace prototypes for each event class, and for each used + * template. This will allow checking whether the prototypes from the + * class and the instance using the class actually match. + */ + +#include /* Reset all macros within TRACE_EVENT */ + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_ARGS +#define TP_ARGS(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ +void __event_template_proto___##_template(_proto); + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ +void __event_template_proto___##_template(void); + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +void __event_template_proto___##_name(_proto); + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +void __event_template_proto___##_name(void); + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 1.2 of tracepoint event generation + * + * Unfolding the enums + */ +#include /* Reset all macros within TRACE_EVENT */ + +/* Enumeration entry (single value) */ +#undef ctf_enum_value +#define ctf_enum_value(_string, _value) \ + { \ + .start = { \ + .signedness = lttng_is_signed_type(__typeof__(_value)), \ + .value = lttng_is_signed_type(__typeof__(_value)) ? \ + (long long) (_value) : (_value), \ + }, \ + .end = { \ + .signedness = lttng_is_signed_type(__typeof__(_value)), \ + .value = lttng_is_signed_type(__typeof__(_value)) ? \ + (long long) (_value) : (_value), \ + }, \ + .string = (_string), \ + }, + +/* Enumeration entry (range) */ +#undef ctf_enum_range +#define ctf_enum_range(_string, _range_start, _range_end) \ + { \ + .start = { \ + .signedness = lttng_is_signed_type(__typeof__(_range_start)), \ + .value = lttng_is_signed_type(__typeof__(_range_start)) ? \ + (long long) (_range_start) : (_range_start), \ + }, \ + .end = { \ + .signedness = lttng_is_signed_type(__typeof__(_range_end)), \ + .value = lttng_is_signed_type(__typeof__(_range_end)) ? \ + (long long) (_range_end) : (_range_end), \ + }, \ + .string = (_string), \ + }, + +/* Enumeration entry (automatic value; follows the rules of CTF) */ +#undef ctf_enum_auto +#define ctf_enum_auto(_string) \ + { \ + .start = { \ + .signedness = -1, \ + .value = -1, \ + }, \ + .end = { \ + .signedness = -1, \ + .value = -1, \ + }, \ + .string = (_string), \ + .options = { \ + .is_auto = 1, \ + } \ + }, + +#undef TP_ENUM_VALUES +#define TP_ENUM_VALUES(...) \ + __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_ENUM +#define LTTNG_TRACEPOINT_ENUM(_name, _values) \ + const struct lttng_enum_entry __enum_values__##_name[] = { \ + _values \ + }; + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 2 of the trace events. + * + * Create event field type metadata section. + * Each event produce an array of fields. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include +#include + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = __type_integer(_type, 0, 0, -1, _byte_order, _base, none), \ + .nowrite = _nowrite, \ + .user = _user, \ + .nofilter = 0, \ + }, + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, \ + _encoding, _byte_order, _elem_type_base, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_array_nestable, \ + .u = \ + { \ + .array_nestable = \ + { \ + .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ + __type_integer(_type, 0, 0, -1, _byte_order, _elem_type_base, _encoding)), \ + .length = _length, \ + .alignment = 0, \ + } \ + } \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + .nofilter = 0, \ + }, + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_array_nestable, \ + .u = \ + { \ + .array_nestable = \ + { \ + .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ + __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, 10, none)), \ + .length = (_length) * sizeof(_type) * CHAR_BIT, \ + .alignment = lttng_alignof(_type), \ + } \ + } \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + .nofilter = 0, \ + }, + + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, \ + _length_type, _src_length, _encoding, \ + _byte_order, _elem_type_base, _user, _nowrite) \ + { \ + .name = "_" #_item "_length", \ + .type = __type_integer(_length_type, 0, 0, -1, __BYTE_ORDER, 10, none), \ + .nowrite = _nowrite, \ + .nofilter = 1, \ + }, \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_sequence_nestable, \ + .u = \ + { \ + .sequence_nestable = \ + { \ + .length_name = "_" #_item "_length", \ + .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ + __type_integer(_type, 0, 0, -1, _byte_order, _elem_type_base, _encoding)), \ + .alignment = 0, \ + }, \ + }, \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + .nofilter = 0, \ + }, + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + { \ + .name = "_" #_item "_length", \ + .type = __type_integer(_length_type, 0, 0, -1, __BYTE_ORDER, 10, none), \ + .nowrite = _nowrite, \ + .nofilter = 1, \ + }, \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_sequence_nestable, \ + .u = \ + { \ + .sequence_nestable = \ + { \ + .length_name = "_" #_item "_length", \ + .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ + __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, 10, none)), \ + .alignment = lttng_alignof(_type), \ + }, \ + }, \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + .nofilter = 0, \ + }, + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = \ + { \ + .atype = atype_string, \ + .u = \ + { \ + .string = { .encoding = lttng_encode_UTF8 }, \ + }, \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + .nofilter = 0, \ + }, + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + { \ + .name = #_item, \ + .type = { \ + .atype = atype_enum_nestable, \ + .u = { \ + .enum_nestable = { \ + .desc = &__enum_##_name, \ + .container_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ + __type_integer(_type, 0, 0, -1, __BYTE_ORDER, 10, none)), \ + }, \ + }, \ + }, \ + .nowrite = _nowrite, \ + .user = _user, \ + .nofilter = 0, \ + }, + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) \ + { \ + .name = #_item, \ + .type = _type, \ + .nowrite = 0, \ + .user = 0, \ + .nofilter = 1, \ + }, + +#undef ctf_custom_type +#define ctf_custom_type(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ + static const struct lttng_event_field __event_fields___##_name[] = { \ + _fields \ + }; + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ + LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, PARAMS(_fields), _code_post) + +#undef LTTNG_TRACEPOINT_ENUM +#define LTTNG_TRACEPOINT_ENUM(_name, _values) \ + static const struct lttng_enum_desc __enum_##_name = { \ + .name = #_name, \ + .entries = __enum_values__##_name, \ + .nr_entries = ARRAY_SIZE(__enum_values__##_name), \ + }; + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 3 of the trace events. + * + * Create probe callback prototypes. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static void __event_probe__##_name(void *__data, _proto); + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static void __event_probe__##_name(void *__data); + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 4 of the trace events. + * + * Create static inline function that calculates event size. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \ + __event_len += sizeof(_type); + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \ + __event_len += sizeof(_type) * (_length); + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + _ctf_array_encoded(_type, _item, _src, _length, none, __LITTLE_ENDIAN, 0, _user, _nowrite) + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_length_type)); \ + __event_len += sizeof(_length_type); \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \ + { \ + size_t __seqlen = (_src_length); \ + \ + if (unlikely(++this_cpu_ptr(<tng_dynamic_len_stack)->offset >= LTTNG_DYNAMIC_LEN_STACK_SIZE)) \ + goto error; \ + barrier(); /* reserve before use. */ \ + this_cpu_ptr(<tng_dynamic_len_stack)->stack[this_cpu_ptr(<tng_dynamic_len_stack)->offset - 1] = __seqlen; \ + __event_len += sizeof(_type) * __seqlen; \ + } + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + _ctf_sequence_encoded(_type, _item, _src, _length_type, _src_length, \ + none, __LITTLE_ENDIAN, 10, _user, _nowrite) + +/* + * ctf_user_string includes \0. If returns 0, it faulted, so we set size to + * 1 (\0 only). + */ +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) \ + if (unlikely(++this_cpu_ptr(<tng_dynamic_len_stack)->offset >= LTTNG_DYNAMIC_LEN_STACK_SIZE)) \ + goto error; \ + barrier(); /* reserve before use. */ \ + if (_user) { \ + __event_len += this_cpu_ptr(<tng_dynamic_len_stack)->stack[this_cpu_ptr(<tng_dynamic_len_stack)->offset - 1] = \ + max_t(size_t, lttng_strlen_user_inatomic(_src), 1); \ + } else { \ + __event_len += this_cpu_ptr(<tng_dynamic_len_stack)->stack[this_cpu_ptr(<tng_dynamic_len_stack)->offset - 1] = \ + strlen((_src) ? (_src) : __LTTNG_NULL_STRING) + 1; \ + } + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) + +#undef ctf_align +#define ctf_align(_type) \ + __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) \ + { \ + _code \ + } + +#undef ctf_custom_code +#define ctf_custom_code(...) __VA_ARGS__ + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ + +#undef TP_locvar +#define TP_locvar(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static inline ssize_t __event_get_size__##_name(void *__tp_locvar, _proto) \ +{ \ + size_t __event_len = 0; \ + unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ + return __event_len; \ + \ +error: \ + __attribute__((unused)); \ + return -1; \ +} + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static inline ssize_t __event_get_size__##_name(void *__tp_locvar) \ +{ \ + size_t __event_len = 0; \ + unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ + return __event_len; \ + \ +error: \ + __attribute__((unused)); \ + return -1; \ +} + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + + +/* + * Stage 4.1 of tracepoint event generation. + * + * Create static inline function that layout the filter stack data. + * We make both write and nowrite data available to the filter. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include +#include + +#undef _ctf_integer_ext_fetched +#define _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) \ + if (lttng_is_signed_type(_type)) { \ + int64_t __ctf_tmp_int64; \ + switch (sizeof(_type)) { \ + case 1: \ + { \ + union { _type t; int8_t v; } __tmp = { (_type) (_src) }; \ + __ctf_tmp_int64 = (int64_t) __tmp.v; \ + break; \ + } \ + case 2: \ + { \ + union { _type t; int16_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab16s(&__tmp.v); \ + __ctf_tmp_int64 = (int64_t) __tmp.v; \ + break; \ + } \ + case 4: \ + { \ + union { _type t; int32_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab32s(&__tmp.v); \ + __ctf_tmp_int64 = (int64_t) __tmp.v; \ + break; \ + } \ + case 8: \ + { \ + union { _type t; int64_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab64s(&__tmp.v); \ + __ctf_tmp_int64 = (int64_t) __tmp.v; \ + break; \ + } \ + default: \ + BUG_ON(1); \ + }; \ + memcpy(__stack_data, &__ctf_tmp_int64, sizeof(int64_t)); \ + } else { \ + uint64_t __ctf_tmp_uint64; \ + switch (sizeof(_type)) { \ + case 1: \ + { \ + union { _type t; uint8_t v; } __tmp = { (_type) (_src) }; \ + __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ + break; \ + } \ + case 2: \ + { \ + union { _type t; uint16_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab16s(&__tmp.v); \ + __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ + break; \ + } \ + case 4: \ + { \ + union { _type t; uint32_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab32s(&__tmp.v); \ + __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ + break; \ + } \ + case 8: \ + { \ + union { _type t; uint64_t v; } __tmp = { (_type) (_src) }; \ + if (_byte_order != __BYTE_ORDER) \ + __swab64s(&__tmp.v); \ + __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ + break; \ + } \ + default: \ + BUG_ON(1); \ + }; \ + memcpy(__stack_data, &__ctf_tmp_uint64, sizeof(uint64_t)); \ + } \ + __stack_data += sizeof(int64_t); + +#undef _ctf_integer_ext_isuser0 +#define _ctf_integer_ext_isuser0(_type, _item, _src, _byte_order, _base, _nowrite) \ + _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) + +#undef _ctf_integer_ext_isuser1 +#define _ctf_integer_ext_isuser1(_type, _item, _user_src, _byte_order, _base, _nowrite) \ +{ \ + union { \ + char __array[sizeof(_user_src)]; \ + __typeof__(_user_src) __v; \ + } __tmp_fetch; \ + if (lib_ring_buffer_copy_from_user_check_nofault(__tmp_fetch.__array, \ + &(_user_src), sizeof(_user_src))) \ + memset(__tmp_fetch.__array, 0, sizeof(__tmp_fetch.__array)); \ + _ctf_integer_ext_fetched(_type, _item, __tmp_fetch.__v, _byte_order, _base, _nowrite) \ +} + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _user_src, _byte_order, _base, _user, _nowrite) \ + _ctf_integer_ext_isuser##_user(_type, _item, _user_src, _byte_order, _base, _nowrite) + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ + { \ + unsigned long __ctf_tmp_ulong = (unsigned long) (_length); \ + const void *__ctf_tmp_ptr = (_src); \ + memcpy(__stack_data, &__ctf_tmp_ulong, sizeof(unsigned long)); \ + __stack_data += sizeof(unsigned long); \ + memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *)); \ + __stack_data += sizeof(void *); \ + } + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + _ctf_array_encoded(_type, _item, _src, _length, none, __LITTLE_ENDIAN, 0, _user, _nowrite) + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ + { \ + unsigned long __ctf_tmp_ulong = (unsigned long) (_src_length); \ + const void *__ctf_tmp_ptr = (_src); \ + memcpy(__stack_data, &__ctf_tmp_ulong, sizeof(unsigned long)); \ + __stack_data += sizeof(unsigned long); \ + memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *)); \ + __stack_data += sizeof(void *); \ + } + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + _ctf_sequence_encoded(_type, _item, _src, _length_type, _src_length, \ + none, __LITTLE_ENDIAN, 10, _user, _nowrite) + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) \ + { \ + const void *__ctf_tmp_ptr = \ + ((_src) ? (_src) : __LTTNG_NULL_STRING); \ + memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *)); \ + __stack_data += sizeof(void *); \ + } + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ + +#undef TP_locvar +#define TP_locvar(...) __VA_ARGS__ + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static inline \ +void __event_prepare_filter_stack__##_name(char *__stack_data, \ + void *__tp_locvar) \ +{ \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ +} + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static inline \ +void __event_prepare_filter_stack__##_name(char *__stack_data, \ + void *__tp_locvar, _proto) \ +{ \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ +} + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 5 of the trace events. + * + * Create static inline function that calculates event payload alignment. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); + +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + _ctf_array_encoded(_type, _item, _src, _length, none, __LITTLE_ENDIAN, 0, _user, _nowrite) + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_length_type)); \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); + +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + _ctf_sequence_encoded(_type, _item, _src, _length_type, _src_length, \ + none, __LITTLE_ENDIAN, 10, _user, _nowrite) + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) + +#undef ctf_align +#define ctf_align(_type) \ + __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ + +#undef TP_locvar +#define TP_locvar(...) __VA_ARGS__ + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) _code + +#undef ctf_custom_code +#define ctf_custom_code(...) \ + { \ + __VA_ARGS__ \ + } + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static inline size_t __event_get_align__##_name(void *__tp_locvar, _proto) \ +{ \ + size_t __event_align = 1; \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ + return __event_align; \ +} + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static inline size_t __event_get_align__##_name(void *__tp_locvar) \ +{ \ + size_t __event_align = 1; \ + struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ + \ + _fields \ + return __event_align; \ +} + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 6 of tracepoint event generation. + * + * Create the probe function. This function calls event size calculation + * and writes event data into the buffer. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include +#include + +#undef _ctf_integer_ext_fetched +#define _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) \ + { \ + _type __tmp = _src; \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(__tmp));\ + __chan->ops->event_write(&__ctx, &__tmp, sizeof(__tmp));\ + } + +#undef _ctf_integer_ext_isuser0 +#define _ctf_integer_ext_isuser0(_type, _item, _src, _byte_order, _base, _nowrite) \ + _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) + +#undef _ctf_integer_ext_isuser1 +#define _ctf_integer_ext_isuser1(_type, _item, _user_src, _byte_order, _base, _nowrite) \ +{ \ + union { \ + char __array[sizeof(_user_src)]; \ + __typeof__(_user_src) __v; \ + } __tmp_fetch; \ + if (lib_ring_buffer_copy_from_user_check_nofault(__tmp_fetch.__array, \ + &(_user_src), sizeof(_user_src))) \ + memset(__tmp_fetch.__array, 0, sizeof(__tmp_fetch.__array)); \ + _ctf_integer_ext_fetched(_type, _item, __tmp_fetch.__v, _byte_order, _base, _nowrite) \ +} + +#undef _ctf_integer_ext +#define _ctf_integer_ext(_type, _item, _user_src, _byte_order, _base, _user, _nowrite) \ + _ctf_integer_ext_isuser##_user(_type, _item, _user_src, _byte_order, _base, _nowrite) + +#undef _ctf_array_encoded +#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + if (_user) { \ + __chan->ops->event_write_from_user(&__ctx, _src, sizeof(_type) * (_length)); \ + } else { \ + __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length)); \ + } + +#if (__BYTE_ORDER == __LITTLE_ENDIAN) +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + if (_user) { \ + __chan->ops->event_write_from_user(&__ctx, _src, sizeof(_type) * (_length)); \ + } else { \ + __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length)); \ + } +#else /* #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ +/* + * For big endian, we need to byteswap into little endian. + */ +#undef _ctf_array_bitfield +#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + { \ + size_t _i; \ + \ + for (_i = 0; _i < (_length); _i++) { \ + _type _tmp; \ + \ + if (_user) { \ + if (get_user(_tmp, (_type *) _src + _i)) \ + _tmp = 0; \ + } else { \ + _tmp = ((_type *) _src)[_i]; \ + } \ + switch (sizeof(_type)) { \ + case 1: \ + break; \ + case 2: \ + _tmp = cpu_to_le16(_tmp); \ + break; \ + case 4: \ + _tmp = cpu_to_le32(_tmp); \ + break; \ + case 8: \ + _tmp = cpu_to_le64(_tmp); \ + break; \ + default: \ + BUG_ON(1); \ + } \ + __chan->ops->event_write(&__ctx, &_tmp, sizeof(_type)); \ + } \ + } +#endif /* #else #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ + +#undef _ctf_sequence_encoded +#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ + _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ + { \ + _length_type __tmpl = this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx]; \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\ + __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type));\ + } \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + if (_user) { \ + __chan->ops->event_write_from_user(&__ctx, _src, \ + sizeof(_type) * __get_dynamic_len(dest)); \ + } else { \ + __chan->ops->event_write(&__ctx, _src, \ + sizeof(_type) * __get_dynamic_len(dest)); \ + } + +#if (__BYTE_ORDER == __LITTLE_ENDIAN) +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + { \ + _length_type __tmpl = this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx] * sizeof(_type) * CHAR_BIT; \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\ + __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type));\ + } \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + if (_user) { \ + __chan->ops->event_write_from_user(&__ctx, _src, \ + sizeof(_type) * __get_dynamic_len(dest)); \ + } else { \ + __chan->ops->event_write(&__ctx, _src, \ + sizeof(_type) * __get_dynamic_len(dest)); \ + } +#else /* #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ +/* + * For big endian, we need to byteswap into little endian. + */ +#undef _ctf_sequence_bitfield +#define _ctf_sequence_bitfield(_type, _item, _src, \ + _length_type, _src_length, \ + _user, _nowrite) \ + { \ + _length_type __tmpl = this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx] * sizeof(_type) * CHAR_BIT; \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\ + __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type));\ + } \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ + { \ + size_t _i, _length; \ + \ + _length = __get_dynamic_len(dest); \ + for (_i = 0; _i < _length; _i++) { \ + _type _tmp; \ + \ + if (_user) { \ + if (get_user(_tmp, (_type *) _src + _i)) \ + _tmp = 0; \ + } else { \ + _tmp = ((_type *) _src)[_i]; \ + } \ + switch (sizeof(_type)) { \ + case 1: \ + break; \ + case 2: \ + _tmp = cpu_to_le16(_tmp); \ + break; \ + case 4: \ + _tmp = cpu_to_le32(_tmp); \ + break; \ + case 8: \ + _tmp = cpu_to_le64(_tmp); \ + break; \ + default: \ + BUG_ON(1); \ + } \ + __chan->ops->event_write(&__ctx, &_tmp, sizeof(_type)); \ + } \ + } +#endif /* #else #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ + +#undef _ctf_string +#define _ctf_string(_item, _src, _user, _nowrite) \ + if (_user) { \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(*(_src))); \ + __chan->ops->event_strcpy_from_user(&__ctx, _src, \ + __get_dynamic_len(dest)); \ + } else { \ + const char *__ctf_tmp_string = \ + ((_src) ? (_src) : __LTTNG_NULL_STRING); \ + lib_ring_buffer_align_ctx(&__ctx, \ + lttng_alignof(*__ctf_tmp_string)); \ + __chan->ops->event_strcpy(&__ctx, __ctf_tmp_string, \ + __get_dynamic_len(dest)); \ + } + +#undef _ctf_enum +#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ + _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) + +#undef ctf_align +#define ctf_align(_type) \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); + +#undef ctf_custom_field +#define ctf_custom_field(_type, _item, _code) _code + +#undef ctf_custom_code +#define ctf_custom_code(...) \ + { \ + __VA_ARGS__ \ + } + +/* Beware: this get len actually consumes the len value */ +#undef __get_dynamic_len +#define __get_dynamic_len(field) this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx++] + +#undef TP_PROTO +#define TP_PROTO(...) __VA_ARGS__ + +#undef TP_ARGS +#define TP_ARGS(...) __VA_ARGS__ + +#undef TP_FIELDS +#define TP_FIELDS(...) __VA_ARGS__ + +#undef TP_locvar +#define TP_locvar(...) __VA_ARGS__ + +#undef TP_code_pre +#define TP_code_pre(...) __VA_ARGS__ + +#undef TP_code_post +#define TP_code_post(...) __VA_ARGS__ + +/* + * For state dump, check that "session" argument (mandatory) matches the + * session this event belongs to. Ensures that we write state dump data only + * into the started session, not into all sessions. + */ +#ifdef TP_SESSION_CHECK +#define _TP_SESSION_CHECK(session, csession) (session == csession) +#else /* TP_SESSION_CHECK */ +#define _TP_SESSION_CHECK(session, csession) 1 +#endif /* TP_SESSION_CHECK */ + +/* + * Using twice size for filter stack data to hold size and pointer for + * each field (worse case). For integers, max size required is 64-bit. + * Same for double-precision floats. Those fit within + * 2*sizeof(unsigned long) for all supported architectures. + * Perform UNION (||) of filter runtime list. + */ +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ +static void __event_probe__##_name(void *__data, _proto) \ +{ \ + struct probe_local_vars { _locvar }; \ + struct lttng_event *__event = __data; \ + struct lttng_probe_ctx __lttng_probe_ctx = { \ + .event = __event, \ + .interruptible = !irqs_disabled(), \ + }; \ + struct lttng_channel *__chan = __event->chan; \ + struct lttng_session *__session = __chan->session; \ + struct lib_ring_buffer_ctx __ctx; \ + ssize_t __event_len; \ + size_t __event_align; \ + size_t __orig_dynamic_len_offset, __dynamic_len_idx __attribute__((unused)); \ + union { \ + size_t __dynamic_len_removed[ARRAY_SIZE(__event_fields___##_name)]; \ + char __filter_stack_data[2 * sizeof(unsigned long) * ARRAY_SIZE(__event_fields___##_name)]; \ + } __stackvar; \ + int __ret; \ + struct probe_local_vars __tp_locvar; \ + struct probe_local_vars *tp_locvar __attribute__((unused)) = \ + &__tp_locvar; \ + struct lttng_id_tracker_rcu *__lf; \ + \ + if (!_TP_SESSION_CHECK(session, __session)) \ + return; \ + if (unlikely(!READ_ONCE(__session->active))) \ + return; \ + if (unlikely(!READ_ONCE(__chan->enabled))) \ + return; \ + if (unlikely(!READ_ONCE(__event->enabled))) \ + return; \ + __lf = lttng_rcu_dereference(__session->pid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid))) \ + return; \ + __lf = lttng_rcu_dereference(__session->vpid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, task_tgid_vnr(current)))) \ + return; \ + __lf = lttng_rcu_dereference(__session->uid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ + lttng_current_uid()))) \ + return; \ + __lf = lttng_rcu_dereference(__session->vuid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ + lttng_current_vuid()))) \ + return; \ + __lf = lttng_rcu_dereference(__session->gid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ + lttng_current_gid()))) \ + return; \ + __lf = lttng_rcu_dereference(__session->vgid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ + lttng_current_vgid()))) \ + return; \ + __orig_dynamic_len_offset = this_cpu_ptr(<tng_dynamic_len_stack)->offset; \ + __dynamic_len_idx = __orig_dynamic_len_offset; \ + _code_pre \ + if (unlikely(!list_empty(&__event->bytecode_runtime_head))) { \ + struct lttng_bytecode_runtime *bc_runtime; \ + int __filter_record = __event->has_enablers_without_bytecode; \ + \ + __event_prepare_filter_stack__##_name(__stackvar.__filter_stack_data, \ + tp_locvar, _args); \ + lttng_list_for_each_entry_rcu(bc_runtime, &__event->bytecode_runtime_head, node) { \ + if (unlikely(bc_runtime->filter(bc_runtime, &__lttng_probe_ctx, \ + __stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) { \ + __filter_record = 1; \ + break; \ + } \ + } \ + if (likely(!__filter_record)) \ + goto __post; \ + } \ + __event_len = __event_get_size__##_name(tp_locvar, _args); \ + if (unlikely(__event_len < 0)) { \ + lib_ring_buffer_lost_event_too_big(__chan->chan); \ + goto __post; \ + } \ + __event_align = __event_get_align__##_name(tp_locvar, _args); \ + lib_ring_buffer_ctx_init(&__ctx, __chan->chan, &__lttng_probe_ctx, __event_len, \ + __event_align, -1); \ + __ret = __chan->ops->event_reserve(&__ctx, __event->id); \ + if (__ret < 0) \ + goto __post; \ + _fields \ + __chan->ops->event_commit(&__ctx); \ +__post: \ + _code_post \ + barrier(); /* use before un-reserve. */ \ + this_cpu_ptr(<tng_dynamic_len_stack)->offset = __orig_dynamic_len_offset; \ + return; \ +} + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ +static void __event_probe__##_name(void *__data) \ +{ \ + struct probe_local_vars { _locvar }; \ + struct lttng_event *__event = __data; \ + struct lttng_probe_ctx __lttng_probe_ctx = { \ + .event = __event, \ + .interruptible = !irqs_disabled(), \ + }; \ + struct lttng_channel *__chan = __event->chan; \ + struct lttng_session *__session = __chan->session; \ + struct lib_ring_buffer_ctx __ctx; \ + ssize_t __event_len; \ + size_t __event_align; \ + size_t __orig_dynamic_len_offset, __dynamic_len_idx __attribute__((unused)); \ + union { \ + size_t __dynamic_len_removed[ARRAY_SIZE(__event_fields___##_name)]; \ + char __filter_stack_data[2 * sizeof(unsigned long) * ARRAY_SIZE(__event_fields___##_name)]; \ + } __stackvar; \ + int __ret; \ + struct probe_local_vars __tp_locvar; \ + struct probe_local_vars *tp_locvar __attribute__((unused)) = \ + &__tp_locvar; \ + struct lttng_id_tracker_rcu *__lf; \ + \ + if (!_TP_SESSION_CHECK(session, __session)) \ + return; \ + if (unlikely(!READ_ONCE(__session->active))) \ + return; \ + if (unlikely(!READ_ONCE(__chan->enabled))) \ + return; \ + if (unlikely(!READ_ONCE(__event->enabled))) \ + return; \ + __lf = lttng_rcu_dereference(__session->pid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid))) \ + return; \ + __lf = lttng_rcu_dereference(__session->vpid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, task_tgid_vnr(current)))) \ + return; \ + __lf = lttng_rcu_dereference(__session->uid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ + lttng_current_uid()))) \ + return; \ + __lf = lttng_rcu_dereference(__session->vuid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ + lttng_current_vuid()))) \ + return; \ + __lf = lttng_rcu_dereference(__session->gid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ + lttng_current_gid()))) \ + return; \ + __lf = lttng_rcu_dereference(__session->vgid_tracker.p); \ + if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ + lttng_current_vgid()))) \ + return; \ + __orig_dynamic_len_offset = this_cpu_ptr(<tng_dynamic_len_stack)->offset; \ + __dynamic_len_idx = __orig_dynamic_len_offset; \ + _code_pre \ + if (unlikely(!list_empty(&__event->bytecode_runtime_head))) { \ + struct lttng_bytecode_runtime *bc_runtime; \ + int __filter_record = __event->has_enablers_without_bytecode; \ + \ + __event_prepare_filter_stack__##_name(__stackvar.__filter_stack_data, \ + tp_locvar); \ + lttng_list_for_each_entry_rcu(bc_runtime, &__event->bytecode_runtime_head, node) { \ + if (unlikely(bc_runtime->filter(bc_runtime, &__lttng_probe_ctx, \ + __stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) { \ + __filter_record = 1; \ + break; \ + } \ + } \ + if (likely(!__filter_record)) \ + goto __post; \ + } \ + __event_len = __event_get_size__##_name(tp_locvar); \ + if (unlikely(__event_len < 0)) { \ + lib_ring_buffer_lost_event_too_big(__chan->chan); \ + goto __post; \ + } \ + __event_align = __event_get_align__##_name(tp_locvar); \ + lib_ring_buffer_ctx_init(&__ctx, __chan->chan, &__lttng_probe_ctx, __event_len, \ + __event_align, -1); \ + __ret = __chan->ops->event_reserve(&__ctx, __event->id); \ + if (__ret < 0) \ + goto __post; \ + _fields \ + __chan->ops->event_commit(&__ctx); \ +__post: \ + _code_post \ + barrier(); /* use before un-reserve. */ \ + this_cpu_ptr(<tng_dynamic_len_stack)->offset = __orig_dynamic_len_offset; \ + return; \ +} + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +#undef __get_dynamic_len + +/* + * Stage 7 of the trace events. + * + * Create event descriptions. + */ + +/* Named field types must be defined in lttng-types.h */ + +#include /* Reset all macros within LTTNG_TRACEPOINT_EVENT */ + +#ifndef TP_PROBE_CB +#define TP_PROBE_CB(_template) &__event_probe__##_template +#endif + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ +static const struct lttng_event_desc __event_desc___##_map = { \ + .fields = __event_fields___##_template, \ + .name = #_map, \ + .kname = #_name, \ + .probe_callback = (void *) TP_PROBE_CB(_template), \ + .nr_fields = ARRAY_SIZE(__event_fields___##_template), \ + .owner = THIS_MODULE, \ +}; + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 8 of the trace events. + * + * Create an array of event description pointers. + */ + +#include /* Reset all macros within LTTNG_TRACEPOINT_EVENT */ + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ + &__event_desc___##_map, + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) + +#define TP_ID1(_token, _system) _token##_system +#define TP_ID(_token, _system) TP_ID1(_token, _system) + +static const struct lttng_event_desc *TP_ID(__event_desc___, TRACE_SYSTEM)[] = { +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) +}; + +#undef TP_ID1 +#undef TP_ID + +/* + * Stage 9 of the trace events. + * + * Create a toplevel descriptor for the whole probe. + */ + +#define TP_ID1(_token, _system) _token##_system +#define TP_ID(_token, _system) TP_ID1(_token, _system) + +/* non-const because list head will be modified when registered. */ +static __used struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = { + .provider = __stringify(TRACE_SYSTEM), + .event_desc = TP_ID(__event_desc___, TRACE_SYSTEM), + .nr_events = ARRAY_SIZE(TP_ID(__event_desc___, TRACE_SYSTEM)), + .head = { NULL, NULL }, + .lazy_init_head = { NULL, NULL }, + .lazy = 0, +}; + +#undef TP_ID1 +#undef TP_ID + +/* + * Stage 10 of the trace events. + * + * Register/unregister probes at module load/unload. + */ + +#include /* Reset all macros within LTTNG_TRACEPOINT_EVENT */ + +#define TP_ID1(_token, _system) _token##_system +#define TP_ID(_token, _system) TP_ID1(_token, _system) +#define module_init_eval1(_token, _system) module_init(_token##_system) +#define module_init_eval(_token, _system) module_init_eval1(_token, _system) +#define module_exit_eval1(_token, _system) module_exit(_token##_system) +#define module_exit_eval(_token, _system) module_exit_eval1(_token, _system) + +#ifndef TP_MODULE_NOINIT +static int TP_ID(__lttng_events_init__, TRACE_SYSTEM)(void) +{ + wrapper_vmalloc_sync_mappings(); + return lttng_probe_register(&TP_ID(__probe_desc___, TRACE_SYSTEM)); +} + +static void TP_ID(__lttng_events_exit__, TRACE_SYSTEM)(void) +{ + lttng_probe_unregister(&TP_ID(__probe_desc___, TRACE_SYSTEM)); +} + +#ifndef TP_MODULE_NOAUTOLOAD +module_init_eval(__lttng_events_init__, TRACE_SYSTEM); +module_exit_eval(__lttng_events_exit__, TRACE_SYSTEM); +#endif + +#endif + +#undef module_init_eval +#undef module_exit_eval +#undef TP_ID1 +#undef TP_ID + +#undef TP_PROTO +#undef TP_ARGS diff --git a/include/lttng/tracepoint-event.h b/include/lttng/tracepoint-event.h new file mode 100644 index 00000000..d3ad1b32 --- /dev/null +++ b/include/lttng/tracepoint-event.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * lttng/tracepoint-event.h + * + * Copyright (C) 2014 Mathieu Desnoyers + */ + +#ifndef LTTNG_TRACEPOINT_EVENT_H +#define LTTNG_TRACEPOINT_EVENT_H + +#include + +/* + * If code defines LTTNG_INSTRUMENTATION before including the instrumentation + * header, generate the instrumentation static inlines. Else, it means + * we are a probe for the Linux kernel, and it is the probe responsibility + * to have already included the Linux kernel instrumentation header. + */ +#ifdef LTTNG_INSTRUMENTATION +#define _LTTNG_INSTRUMENTATION(...) __VA_ARGS__ +#else +#define _LTTNG_INSTRUMENTATION(...) +#endif + +#define LTTNG_TRACEPOINT_EVENT(name, proto, args, fields) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_CODE(name, proto, args, _locvar, _code_pre, fields, _code_post) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, map, proto, args, _locvar, _code_pre, fields, _code_post) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_MAP(name, map, proto, args, fields) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, map, fields) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE_NOARGS(name)) + +#define LTTNG_TRACEPOINT_EVENT_CLASS(name, proto, args, fields) +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) + +#define LTTNG_TRACEPOINT_EVENT_INSTANCE(template, name, proto, args) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE_NOARGS(name)) +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ + _LTTNG_INSTRUMENTATION(DECLARE_TRACE_NOARGS(name)) + +#define LTTNG_TRACEPOINT_ENUM(_name, _values) + +#endif /* LTTNG_TRACEPOINT_EVENT_H */ diff --git a/include/lttng/types.h b/include/lttng/types.h new file mode 100644 index 00000000..fa09dce3 --- /dev/null +++ b/include/lttng/types.h @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) + * + * lttng/types.h + * + * LTTng types. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + */ + +/* + * Protect against multiple inclusion of structure declarations, but run the + * stages below each time. + */ +#ifndef _LTTNG_PROBES_LTTNG_TYPES_H +#define _LTTNG_PROBES_LTTNG_TYPES_H + +#include +#include +#include +#include + +#endif /* _LTTNG_PROBES_LTTNG_TYPES_H */ + +#undef PARAMS +#define PARAMS(args...) args + +/* Export enumerations */ + +#ifdef STAGE_EXPORT_ENUMS + +#undef TRACE_EVENT_TYPE +#define TRACE_EVENT_TYPE(_name, _abstract_type, args...) + +#undef TRACE_EVENT_ENUM +#define TRACE_EVENT_ENUM(_name, _entries...) \ + const struct lttng_enum_entry __trace_event_enum_##_name[] = { \ + PARAMS(_entries) \ + }; + +/* Enumeration entry (single value) */ +#undef V +#define V(_string) { _string, _string, #_string} + +/* Enumeration entry (range) */ +#undef R +#define R(_string, _range_start, _range_end) \ + { _range_start, _range_end, #_string } + +#endif /* STAGE_EXPORT_ENUMS */ + + +/* Export named types */ + +#ifdef STAGE_EXPORT_TYPES + +#undef TRACE_EVENT_TYPE___enum +#define TRACE_EVENT_TYPE___enum(_name, _container_type) \ + { \ + .name = #_name, \ + .container_type = __type_integer(_container_type, 0, 0, -1, __BYTE_ORDER, 10, none), \ + .entries = __trace_event_enum_##_name, \ + .len = ARRAY_SIZE(__trace_event_enum_##_name), \ + }, + +/* Local declaration */ +#undef TRACE_EVENT_TYPE +#define TRACE_EVENT_TYPE(_name, _abstract_type, args...) \ + TRACE_EVENT_TYPE___##_abstract_type(_name, args) + +#undef TRACE_EVENT_ENUM +#define TRACE_EVENT_ENUM(_name, _entries...) + +#endif /* STAGE_EXPORT_TYPES */ diff --git a/instrumentation/events/lttng-module/9p.h b/instrumentation/events/lttng-module/9p.h index 509b984f..0123bbfc 100644 --- a/instrumentation/events/lttng-module/9p.h +++ b/instrumentation/events/lttng-module/9p.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_9P_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_9P_H -#include +#include #include #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0)) @@ -54,4 +54,4 @@ LTTNG_TRACEPOINT_EVENT(9p_protocol_dump, #endif /* LTTNG_TRACE_9P_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/arch/x86/exceptions.h b/instrumentation/events/lttng-module/arch/x86/exceptions.h index ec34d35b..eb55138a 100644 --- a/instrumentation/events/lttng-module/arch/x86/exceptions.h +++ b/instrumentation/events/lttng-module/arch/x86/exceptions.h @@ -2,7 +2,7 @@ #if !defined(LTTNG_TRACE_EXCEPTIONS_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_EXCEPTIONS_H -#include +#include #include #undef TRACE_SYSTEM @@ -50,4 +50,4 @@ LTTNG_EXCEPTIONS_TRACEPOINT_EVENT_INSTANCE_MAP(page_fault_kernel, #define TRACE_INCLUDE_FILE exceptions /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/arch/x86/irq_vectors.h b/instrumentation/events/lttng-module/arch/x86/irq_vectors.h index aa0d6d71..ff0f45b8 100644 --- a/instrumentation/events/lttng-module/arch/x86/irq_vectors.h +++ b/instrumentation/events/lttng-module/arch/x86/irq_vectors.h @@ -2,7 +2,7 @@ #if !defined(LTTNG_TRACE_IRQ_VECTORS_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_IRQ_VECTORS_H -#include +#include #include #undef TRACE_SYSTEM @@ -113,4 +113,4 @@ LTTNG_IRQ_VECTOR_TRACEPOINT_EVENT_INSTANCE_MAP(thermal_apic, #define TRACE_INCLUDE_FILE irq_vectors /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h b/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h index 3ccae187..1195ded7 100644 --- a/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h +++ b/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h @@ -2,7 +2,7 @@ #if !defined(LTTNG_TRACE_KVM_MMU_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_KVM_MMU_H -#include +#include #include #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)) @@ -271,4 +271,4 @@ LTTNG_TRACEPOINT_EVENT_MAP( #define TRACE_INCLUDE_FILE mmutrace /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/arch/x86/kvm/trace.h b/instrumentation/events/lttng-module/arch/x86/kvm/trace.h index 0969d32a..1b3b9ebc 100644 --- a/instrumentation/events/lttng-module/arch/x86/kvm/trace.h +++ b/instrumentation/events/lttng-module/arch/x86/kvm/trace.h @@ -2,7 +2,7 @@ #if !defined(LTTNG_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_KVM_H -#include +#include #include #include #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)) @@ -537,4 +537,4 @@ LTTNG_TRACEPOINT_EVENT_MAP(kvm_track_tsc, kvm_x86_track_tsc, #define TRACE_INCLUDE_FILE trace /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/asoc.h b/instrumentation/events/lttng-module/asoc.h index eed81cdf..7d86af87 100644 --- a/instrumentation/events/lttng-module/asoc.h +++ b/instrumentation/events/lttng-module/asoc.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_ASOC_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_ASOC_H -#include +#include #include #include @@ -411,4 +411,4 @@ LTTNG_TRACEPOINT_EVENT_MAP(snd_soc_cache_sync, #endif /* LTTNG_TRACE_ASOC_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/block.h b/instrumentation/events/lttng-module/block.h index d98febe2..3b087d66 100644 --- a/instrumentation/events/lttng-module/block.h +++ b/instrumentation/events/lttng-module/block.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_BLOCK_H -#include +#include #include #include #include @@ -1051,4 +1051,4 @@ LTTNG_TRACEPOINT_EVENT(block_rq_remap, #endif /* LTTNG_TRACE_BLOCK_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/btrfs.h b/instrumentation/events/lttng-module/btrfs.h index 46cb29b8..f38444bf 100644 --- a/instrumentation/events/lttng-module/btrfs.h +++ b/instrumentation/events/lttng-module/btrfs.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_BTRFS_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_BTRFS_H -#include +#include #include #include @@ -2382,4 +2382,4 @@ LTTNG_TRACEPOINT_EVENT_MAP(free_extent_state, #endif /* LTTNG_TRACE_BTRFS_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/compaction.h b/instrumentation/events/lttng-module/compaction.h index 6d8e4dd9..72925c14 100644 --- a/instrumentation/events/lttng-module/compaction.h +++ b/instrumentation/events/lttng-module/compaction.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_COMPACTION_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_COMPACTION_H -#include +#include #include #include @@ -155,4 +155,4 @@ LTTNG_TRACEPOINT_EVENT_MAP(mm_compaction_migratepages, #endif /* LTTNG_TRACE_COMPACTION_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/ext3.h b/instrumentation/events/lttng-module/ext3.h index e40f4888..8852a1ee 100644 --- a/instrumentation/events/lttng-module/ext3.h +++ b/instrumentation/events/lttng-module/ext3.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_EXT3_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_EXT3_H -#include +#include #include LTTNG_TRACEPOINT_EVENT(ext3_free_inode, @@ -519,4 +519,4 @@ LTTNG_TRACEPOINT_EVENT(ext3_load_inode, #endif /* LTTNG_TRACE_EXT3_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/ext4.h b/instrumentation/events/lttng-module/ext4.h index 9918bcbc..e57aff8b 100644 --- a/instrumentation/events/lttng-module/ext4.h +++ b/instrumentation/events/lttng-module/ext4.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_EXT4_H -#include +#include #include #include @@ -1868,4 +1868,4 @@ LTTNG_TRACEPOINT_EVENT(ext4_es_shrink_exit, #endif /* LTTNG_TRACE_EXT4_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/gpio.h b/instrumentation/events/lttng-module/gpio.h index 7a9246e7..97e5e847 100644 --- a/instrumentation/events/lttng-module/gpio.h +++ b/instrumentation/events/lttng-module/gpio.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_GPIO_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_GPIO_H -#include +#include LTTNG_TRACEPOINT_EVENT(gpio_direction, @@ -36,4 +36,4 @@ LTTNG_TRACEPOINT_EVENT(gpio_value, #endif /* if !defined(LTTNG_TRACE_GPIO_H) || defined(TRACE_HEADER_MULTI_READ) */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/i2c.h b/instrumentation/events/lttng-module/i2c.h index 7fad2f7d..312f6733 100644 --- a/instrumentation/events/lttng-module/i2c.h +++ b/instrumentation/events/lttng-module/i2c.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_I2C_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_I2C_H -#include +#include /* * __i2c_transfer() write request @@ -117,4 +117,4 @@ LTTNG_TRACEPOINT_EVENT(i2c_result, #endif /* LTTNG_TRACE_I2C_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/irq.h b/instrumentation/events/lttng-module/irq.h index e1bbbafe..a66b8139 100644 --- a/instrumentation/events/lttng-module/irq.h +++ b/instrumentation/events/lttng-module/irq.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_IRQ_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_IRQ_H -#include +#include #ifndef _TRACE_IRQ_DEF_ #define _TRACE_IRQ_DEF_ @@ -123,4 +123,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(irq_softirq, softirq_raise, #endif /* LTTNG_TRACE_IRQ_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/jbd.h b/instrumentation/events/lttng-module/jbd.h index 1195fea2..e9aabd69 100644 --- a/instrumentation/events/lttng-module/jbd.h +++ b/instrumentation/events/lttng-module/jbd.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_JBD_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_JBD_H -#include +#include #include #include @@ -154,4 +154,4 @@ LTTNG_TRACEPOINT_EVENT(jbd_update_superblock_end, #endif /* LTTNG_TRACE_JBD_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/jbd2.h b/instrumentation/events/lttng-module/jbd2.h index 3c5d3da0..04968735 100644 --- a/instrumentation/events/lttng-module/jbd2.h +++ b/instrumentation/events/lttng-module/jbd2.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_JBD2_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_JBD2_H -#include +#include #include #include @@ -174,4 +174,4 @@ LTTNG_TRACEPOINT_EVENT(jbd2_write_superblock, #endif /* LTTNG_TRACE_JBD2_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/kmem.h b/instrumentation/events/lttng-module/kmem.h index 1b175ddb..8f56cc5a 100644 --- a/instrumentation/events/lttng-module/kmem.h +++ b/instrumentation/events/lttng-module/kmem.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_KMEM_H -#include +#include #include #include @@ -335,4 +335,4 @@ LTTNG_TRACEPOINT_EVENT_MAP(mm_page_alloc_extfrag, #endif /* LTTNG_TRACE_KMEM_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/kvm.h b/instrumentation/events/lttng-module/kvm.h index 894bf6a2..b05482ee 100644 --- a/instrumentation/events/lttng-module/kvm.h +++ b/instrumentation/events/lttng-module/kvm.h @@ -2,7 +2,7 @@ #if !defined(LTTNG_TRACE_KVM_MAIN_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_KVM_MAIN_H -#include +#include #include #undef TRACE_SYSTEM @@ -271,4 +271,4 @@ LTTNG_TRACEPOINT_EVENT( #endif /* LTTNG_TRACE_KVM_MAIN_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/lock.h b/instrumentation/events/lttng-module/lock.h index f384fd4a..af28517e 100644 --- a/instrumentation/events/lttng-module/lock.h +++ b/instrumentation/events/lttng-module/lock.h @@ -7,7 +7,7 @@ #define LTTNG_TRACE_LOCK_H #include -#include +#include #ifdef CONFIG_LOCKDEP @@ -68,4 +68,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(lock, lock_acquired, #endif /* LTTNG_TRACE_LOCK_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/lttng-statedump.h b/instrumentation/events/lttng-module/lttng-statedump.h index f8f10e7c..23fdd0e8 100644 --- a/instrumentation/events/lttng-module/lttng-statedump.h +++ b/instrumentation/events/lttng-module/lttng-statedump.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_LTTNG_STATEDUMP_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_LTTNG_STATEDUMP_H -#include +#include #include #include #include @@ -268,4 +268,4 @@ LTTNG_TRACEPOINT_EVENT(lttng_statedump_cpu_topology, #endif /* LTTNG_TRACE_LTTNG_STATEDUMP_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/lttng-test.h b/instrumentation/events/lttng-module/lttng-test.h index f9fb5a84..7d2b1f7c 100644 --- a/instrumentation/events/lttng-module/lttng-test.h +++ b/instrumentation/events/lttng-module/lttng-test.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_LTTNG_TEST_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_LTTNG_TEST_H -#include +#include #include #include @@ -55,4 +55,4 @@ LTTNG_TRACEPOINT_EVENT(lttng_test_filter_event, #endif /* LTTNG_TRACE_LTTNG_TEST_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/lttng.h b/instrumentation/events/lttng-module/lttng.h index 376fd537..91eb4608 100644 --- a/instrumentation/events/lttng-module/lttng.h +++ b/instrumentation/events/lttng-module/lttng.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_LTTNG_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_LTTNG_H -#include +#include LTTNG_TRACEPOINT_EVENT(lttng_logger, TP_PROTO(const char __user *text, size_t len), @@ -18,4 +18,4 @@ LTTNG_TRACEPOINT_EVENT(lttng_logger, #endif /* LTTNG_TRACE_LTTNG_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/mm_vmscan.h b/instrumentation/events/lttng-module/mm_vmscan.h index a02b24de..8bdd65d2 100644 --- a/instrumentation/events/lttng-module/mm_vmscan.h +++ b/instrumentation/events/lttng-module/mm_vmscan.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_MM_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_MM_VMSCAN_H -#include +#include #include #include #include @@ -822,4 +822,4 @@ LTTNG_TRACEPOINT_EVENT_MAP(update_swap_token_priority, #endif /* LTTNG_TRACE_MM_VMSCAN_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/module.h b/instrumentation/events/lttng-module/module.h index 1dae9ad1..5831650b 100644 --- a/instrumentation/events/lttng-module/module.h +++ b/instrumentation/events/lttng-module/module.h @@ -15,7 +15,7 @@ #if !defined(LTTNG_TRACE_MODULE_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_MODULE_H -#include +#include #include #ifdef CONFIG_MODULES @@ -102,4 +102,4 @@ LTTNG_TRACEPOINT_EVENT(module_request, #endif /* LTTNG_TRACE_MODULE_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/napi.h b/instrumentation/events/lttng-module/napi.h index 8509f7d1..8a32993f 100644 --- a/instrumentation/events/lttng-module/napi.h +++ b/instrumentation/events/lttng-module/napi.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_NAPI_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_NAPI_H -#include +#include #include #include @@ -48,4 +48,4 @@ LTTNG_TRACEPOINT_EVENT(napi_poll, #endif /* LTTNG_TRACE_NAPI_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/net.h b/instrumentation/events/lttng-module/net.h index 55aba4e0..e42fb2ec 100644 --- a/instrumentation/events/lttng-module/net.h +++ b/instrumentation/events/lttng-module/net.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_NET_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_NET_H -#include +#include #include #include #include @@ -868,4 +868,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_exit_template, #endif /* LTTNG_TRACE_NET_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/power.h b/instrumentation/events/lttng-module/power.h index 1f6c6e8a..dd03d60a 100644 --- a/instrumentation/events/lttng-module/power.h +++ b/instrumentation/events/lttng-module/power.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_POWER_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_POWER_H -#include +#include #include #include @@ -239,4 +239,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(power_domain, power_domain_target, #endif /* LTTNG_TRACE_POWER_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/preemptirq.h b/instrumentation/events/lttng-module/preemptirq.h index d34f8d6b..36aa36cb 100644 --- a/instrumentation/events/lttng-module/preemptirq.h +++ b/instrumentation/events/lttng-module/preemptirq.h @@ -10,7 +10,7 @@ #include #include #include -#include +#include /* * The preemptirq probe is built when CONFIG_PREEMPTIRQ_EVENTS is defined. @@ -95,6 +95,6 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(preemptirq_template, preempt_enable, #endif /* LTTNG_TRACE_PREEMPTIRQ_H */ /* This part must be outside protection */ -#include +#include #endif /* CONFIG_PREEMPTIRQ_EVENTS */ diff --git a/instrumentation/events/lttng-module/printk.h b/instrumentation/events/lttng-module/printk.h index 444f299b..75b4ee92 100644 --- a/instrumentation/events/lttng-module/printk.h +++ b/instrumentation/events/lttng-module/printk.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_PRINTK_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_PRINTK_H -#include +#include #include #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)) @@ -73,4 +73,4 @@ LTTNG_TRACEPOINT_EVENT_MAP(console, #endif /* LTTNG_TRACE_PRINTK_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/random.h b/instrumentation/events/lttng-module/random.h index 621d5e72..7cf0908f 100644 --- a/instrumentation/events/lttng-module/random.h +++ b/instrumentation/events/lttng-module/random.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_RANDOM_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_RANDOM_H -#include +#include #include LTTNG_TRACEPOINT_EVENT_CLASS(random__mix_pool_bytes, @@ -129,4 +129,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(random__extract_entropy, extract_entropy_use #endif /* LTTNG_TRACE_RANDOM_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/rcu.h b/instrumentation/events/lttng-module/rcu.h index 73b2262c..9c7a6de1 100644 --- a/instrumentation/events/lttng-module/rcu.h +++ b/instrumentation/events/lttng-module/rcu.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_RCU_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_RCU_H -#include +#include #include /* @@ -961,4 +961,4 @@ LTTNG_TRACEPOINT_EVENT(rcu_barrier, #endif /* LTTNG_TRACE_RCU_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/regmap.h b/instrumentation/events/lttng-module/regmap.h index f8644816..8af4d5ae 100644 --- a/instrumentation/events/lttng-module/regmap.h +++ b/instrumentation/events/lttng-module/regmap.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_REGMAP_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_REGMAP_H -#include +#include #include #include @@ -142,4 +142,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(regmap_bool, regmap_cache_bypass, #endif /* LTTNG_TRACE_REGMAP_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/regulator.h b/instrumentation/events/lttng-module/regulator.h index 46ad50d2..bfdb6b65 100644 --- a/instrumentation/events/lttng-module/regulator.h +++ b/instrumentation/events/lttng-module/regulator.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_REGULATOR_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_REGULATOR_H -#include +#include #include /* @@ -115,4 +115,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(regulator_value, regulator_set_voltage_complete, #endif /* _TRACE_POWER_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/rpc.h b/instrumentation/events/lttng-module/rpc.h index c3c62ed1..90499aee 100644 --- a/instrumentation/events/lttng-module/rpc.h +++ b/instrumentation/events/lttng-module/rpc.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_RPC_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_RPC_H -#include +#include #include #include @@ -363,4 +363,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_wakeup, #endif /* LTTNG_TRACE_RPC_H */ -#include +#include diff --git a/instrumentation/events/lttng-module/rpm.h b/instrumentation/events/lttng-module/rpm.h index 7aa44d79..1e425f8e 100644 --- a/instrumentation/events/lttng-module/rpm.h +++ b/instrumentation/events/lttng-module/rpm.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_RUNTIME_POWER_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_RUNTIME_POWER_H -#include +#include #include #ifndef _TRACE_RPM_DEF_ @@ -70,4 +70,4 @@ LTTNG_TRACEPOINT_EVENT(rpm_return_int, #endif /* LTTNG_TRACE_RUNTIME_POWER_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/sched.h b/instrumentation/events/lttng-module/sched.h index 80f85ca4..10da76c9 100644 --- a/instrumentation/events/lttng-module/sched.h +++ b/instrumentation/events/lttng-module/sched.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_SCHED_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_SCHED_H -#include +#include #include #include #include @@ -627,4 +627,4 @@ LTTNG_TRACEPOINT_EVENT(sched_pi_setprio, #endif /* LTTNG_TRACE_SCHED_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/scsi.h b/instrumentation/events/lttng-module/scsi.h index 2f26ccb8..21637bc1 100644 --- a/instrumentation/events/lttng-module/scsi.h +++ b/instrumentation/events/lttng-module/scsi.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_SCSI_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_SCSI_H -#include +#include #include #include #include @@ -487,4 +487,4 @@ LTTNG_TRACEPOINT_EVENT(scsi_eh_wakeup, #endif /* LTTNG_TRACE_SCSI_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/signal.h b/instrumentation/events/lttng-module/signal.h index 2b1fac82..4a71d14b 100644 --- a/instrumentation/events/lttng-module/signal.h +++ b/instrumentation/events/lttng-module/signal.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_SIGNAL_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_SIGNAL_H -#include +#include #include #ifndef _TRACE_SIGNAL_DEF @@ -199,4 +199,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(signal_queue_overflow, signal_lose_info, #endif /* LTTNG_TRACE_SIGNAL_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/skb.h b/instrumentation/events/lttng-module/skb.h index a9396f45..2be9d83f 100644 --- a/instrumentation/events/lttng-module/skb.h +++ b/instrumentation/events/lttng-module/skb.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_SKB_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_SKB_H -#include +#include #include #include #include @@ -56,4 +56,4 @@ LTTNG_TRACEPOINT_EVENT(skb_copy_datagram_iovec, #endif /* LTTNG_TRACE_SKB_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/sock.h b/instrumentation/events/lttng-module/sock.h index dd34bb81..955bc1a3 100644 --- a/instrumentation/events/lttng-module/sock.h +++ b/instrumentation/events/lttng-module/sock.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_SOCK_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_SOCK_H -#include +#include #include #include @@ -82,4 +82,4 @@ LTTNG_TRACEPOINT_EVENT(sock_exceed_buf_limit, #endif /* LTTNG_TRACE_SOCK_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/timer.h b/instrumentation/events/lttng-module/timer.h index 881553c5..503c5bc2 100644 --- a/instrumentation/events/lttng-module/timer.h +++ b/instrumentation/events/lttng-module/timer.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_TIMER_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_TIMER_H -#include +#include #ifndef _TRACE_TIMER_DEF_ #define _TRACE_TIMER_DEF_ @@ -394,4 +394,4 @@ LTTNG_TRACEPOINT_EVENT_MAP(itimer_expire, #endif /* LTTNG_TRACE_TIMER_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/udp.h b/instrumentation/events/lttng-module/udp.h index 427fa006..b63a1bb5 100644 --- a/instrumentation/events/lttng-module/udp.h +++ b/instrumentation/events/lttng-module/udp.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_UDP_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_UDP_H -#include +#include #include LTTNG_TRACEPOINT_EVENT(udp_fail_queue_rcv_skb, @@ -23,4 +23,4 @@ LTTNG_TRACEPOINT_EVENT(udp_fail_queue_rcv_skb, #endif /* LTTNG_TRACE_UDP_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/v4l2.h b/instrumentation/events/lttng-module/v4l2.h index de7e5060..dd7551e8 100644 --- a/instrumentation/events/lttng-module/v4l2.h +++ b/instrumentation/events/lttng-module/v4l2.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_V4L2_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_V4L2_H -#include +#include #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) LTTNG_TRACEPOINT_EVENT_CLASS(v4l2_class, @@ -79,4 +79,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(v4l2_class, #endif /* if !defined(LTTNG_TRACE_V4L2_H) || defined(TRACE_HEADER_MULTI_READ) */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/workqueue.h b/instrumentation/events/lttng-module/workqueue.h index 138757bd..8ca0d6bf 100644 --- a/instrumentation/events/lttng-module/workqueue.h +++ b/instrumentation/events/lttng-module/workqueue.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_WORKQUEUE_H -#include +#include #include #include @@ -129,4 +129,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(workqueue_work, workqueue_execute_end, #endif /* LTTNG_TRACE_WORKQUEUE_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/events/lttng-module/writeback.h b/instrumentation/events/lttng-module/writeback.h index 68d27d34..fd898c51 100644 --- a/instrumentation/events/lttng-module/writeback.h +++ b/instrumentation/events/lttng-module/writeback.h @@ -5,7 +5,7 @@ #if !defined(LTTNG_TRACE_WRITEBACK_H) || defined(TRACE_HEADER_MULTI_READ) #define LTTNG_TRACE_WRITEBACK_H -#include +#include #include #include #include @@ -729,4 +729,4 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_single_inode_template, writeback_singl #endif /* LTTNG_TRACE_WRITEBACK_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/syscalls/headers/arm-32-syscalls_integers.h b/instrumentation/syscalls/headers/arm-32-syscalls_integers.h index 5d0e8709..74fb4d8a 100644 --- a/instrumentation/syscalls/headers/arm-32-syscalls_integers.h +++ b/instrumentation/syscalls/headers/arm-32-syscalls_integers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_INTEGERS_H -#include +#include #include #include "arm-32-syscalls_integers_override.h" #include "syscalls_integers_override.h" @@ -826,7 +826,7 @@ SC_LTTNG_TRACEPOINT_EVENT(keyctl, #endif /* _TRACE_SYSCALLS_INTEGERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/arm-32-syscalls_pointers.h b/instrumentation/syscalls/headers/arm-32-syscalls_pointers.h index 094fa2ec..a5d18380 100644 --- a/instrumentation/syscalls/headers/arm-32-syscalls_pointers.h +++ b/instrumentation/syscalls/headers/arm-32-syscalls_pointers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_POINTERS_H -#include +#include #include #include "arm-32-syscalls_pointers_override.h" #include "syscalls_pointers_override.h" @@ -1355,7 +1355,7 @@ SC_LTTNG_TRACEPOINT_EVENT(process_vm_writev, #endif /* _TRACE_SYSCALLS_POINTERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/arm-64-syscalls_integers.h b/instrumentation/syscalls/headers/arm-64-syscalls_integers.h index 57d2c66b..e9c15a9c 100644 --- a/instrumentation/syscalls/headers/arm-64-syscalls_integers.h +++ b/instrumentation/syscalls/headers/arm-64-syscalls_integers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_INTEGERS_H -#include +#include #include #include "arm-64-syscalls_integers_override.h" #include "syscalls_integers_override.h" @@ -693,7 +693,7 @@ SC_LTTNG_TRACEPOINT_EVENT(remap_file_pages, #endif /* _TRACE_SYSCALLS_INTEGERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/arm-64-syscalls_pointers.h b/instrumentation/syscalls/headers/arm-64-syscalls_pointers.h index f7ae855f..d6d301cc 100644 --- a/instrumentation/syscalls/headers/arm-64-syscalls_pointers.h +++ b/instrumentation/syscalls/headers/arm-64-syscalls_pointers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_POINTERS_H -#include +#include #include #include "arm-64-syscalls_pointers_override.h" #include "syscalls_pointers_override.h" @@ -1166,7 +1166,7 @@ SC_LTTNG_TRACEPOINT_EVENT(process_vm_writev, #endif /* _TRACE_SYSCALLS_POINTERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/mips-32-syscalls_integers.h b/instrumentation/syscalls/headers/mips-32-syscalls_integers.h index 69338a12..1daea752 100644 --- a/instrumentation/syscalls/headers/mips-32-syscalls_integers.h +++ b/instrumentation/syscalls/headers/mips-32-syscalls_integers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_INTEGERS_H -#include +#include #include #include "mips-32-syscalls_integers_override.h" #include "syscalls_integers_override.h" @@ -758,7 +758,7 @@ SC_LTTNG_TRACEPOINT_EVENT(mips_mmap2, #endif /* _TRACE_SYSCALLS_INTEGERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/mips-32-syscalls_pointers.h b/instrumentation/syscalls/headers/mips-32-syscalls_pointers.h index d638087b..3ff5ad7f 100644 --- a/instrumentation/syscalls/headers/mips-32-syscalls_pointers.h +++ b/instrumentation/syscalls/headers/mips-32-syscalls_pointers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_POINTERS_H -#include +#include #include #include "mips-32-syscalls_pointers_override.h" #include "syscalls_pointers_override.h" @@ -1327,7 +1327,7 @@ SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, #endif /* _TRACE_SYSCALLS_POINTERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/mips-64-syscalls_integers.h b/instrumentation/syscalls/headers/mips-64-syscalls_integers.h index 302a788d..855087f6 100644 --- a/instrumentation/syscalls/headers/mips-64-syscalls_integers.h +++ b/instrumentation/syscalls/headers/mips-64-syscalls_integers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_INTEGERS_H -#include +#include #include #include "mips-64-syscalls_integers_override.h" #include "syscalls_integers_override.h" @@ -796,7 +796,7 @@ SC_LTTNG_TRACEPOINT_EVENT(mips_mmap, #endif /* _TRACE_SYSCALLS_INTEGERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/mips-64-syscalls_pointers.h b/instrumentation/syscalls/headers/mips-64-syscalls_pointers.h index 8bcf9b00..203da38e 100644 --- a/instrumentation/syscalls/headers/mips-64-syscalls_pointers.h +++ b/instrumentation/syscalls/headers/mips-64-syscalls_pointers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_POINTERS_H -#include +#include #include #include "mips-64-syscalls_pointers_override.h" #include "syscalls_pointers_override.h" @@ -1306,7 +1306,7 @@ SC_LTTNG_TRACEPOINT_EVENT(splice, #endif /* _TRACE_SYSCALLS_POINTERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/powerpc-32-syscalls_integers.h b/instrumentation/syscalls/headers/powerpc-32-syscalls_integers.h index a4ee13e9..2c8f40de 100644 --- a/instrumentation/syscalls/headers/powerpc-32-syscalls_integers.h +++ b/instrumentation/syscalls/headers/powerpc-32-syscalls_integers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_INTEGERS_H -#include +#include #include #include "powerpc-32-syscalls_integers_override.h" #include "syscalls_integers_override.h" @@ -726,7 +726,7 @@ SC_LTTNG_TRACEPOINT_EVENT(keyctl, #endif /* _TRACE_SYSCALLS_INTEGERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/powerpc-32-syscalls_pointers.h b/instrumentation/syscalls/headers/powerpc-32-syscalls_pointers.h index 73a28a79..d9cde3a8 100644 --- a/instrumentation/syscalls/headers/powerpc-32-syscalls_pointers.h +++ b/instrumentation/syscalls/headers/powerpc-32-syscalls_pointers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_POINTERS_H -#include +#include #include #include "powerpc-32-syscalls_pointers_override.h" #include "syscalls_pointers_override.h" @@ -1355,7 +1355,7 @@ SC_LTTNG_TRACEPOINT_EVENT(recvfrom, #endif /* _TRACE_SYSCALLS_POINTERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/syscalls_unknown.h b/instrumentation/syscalls/headers/syscalls_unknown.h index 1718f5c0..79939c80 100644 --- a/instrumentation/syscalls/headers/syscalls_unknown.h +++ b/instrumentation/syscalls/headers/syscalls_unknown.h @@ -3,7 +3,7 @@ #if !defined(_TRACE_SYSCALLS_UNKNOWN_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_UNKNOWN_H -#include +#include #include #define UNKNOWN_SYSCALL_NRARGS 6 @@ -52,4 +52,4 @@ LTTNG_TRACEPOINT_EVENT(compat_syscall_exit_unknown, #endif /* _TRACE_SYSCALLS_UNKNOWN_H */ /* This part must be outside protection */ -#include +#include diff --git a/instrumentation/syscalls/headers/x86-32-syscalls_integers.h b/instrumentation/syscalls/headers/x86-32-syscalls_integers.h index 6e1fc8ec..ddc8b21e 100644 --- a/instrumentation/syscalls/headers/x86-32-syscalls_integers.h +++ b/instrumentation/syscalls/headers/x86-32-syscalls_integers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_INTEGERS_H -#include +#include #include #include "x86-32-syscalls_integers_override.h" #include "syscalls_integers_override.h" @@ -822,7 +822,7 @@ SC_LTTNG_TRACEPOINT_EVENT(mmap_pgoff, #endif /* _TRACE_SYSCALLS_INTEGERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/x86-32-syscalls_pointers.h b/instrumentation/syscalls/headers/x86-32-syscalls_pointers.h index da15bfd1..40ad713e 100644 --- a/instrumentation/syscalls/headers/x86-32-syscalls_pointers.h +++ b/instrumentation/syscalls/headers/x86-32-syscalls_pointers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_POINTERS_H -#include +#include #include #include "x86-32-syscalls_pointers_override.h" #include "syscalls_pointers_override.h" @@ -1306,7 +1306,7 @@ SC_LTTNG_TRACEPOINT_EVENT(epoll_pwait, #endif /* _TRACE_SYSCALLS_POINTERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/x86-64-syscalls_integers.h b/instrumentation/syscalls/headers/x86-64-syscalls_integers.h index c2963921..d752c907 100644 --- a/instrumentation/syscalls/headers/x86-64-syscalls_integers.h +++ b/instrumentation/syscalls/headers/x86-64-syscalls_integers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_INTEGERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_INTEGERS_H -#include +#include #include #include "x86-64-syscalls_integers_override.h" #include "syscalls_integers_override.h" @@ -751,7 +751,7 @@ SC_LTTNG_TRACEPOINT_EVENT(mmap, #endif /* _TRACE_SYSCALLS_INTEGERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/headers/x86-64-syscalls_pointers.h b/instrumentation/syscalls/headers/x86-64-syscalls_pointers.h index 0d084882..f04b33ad 100644 --- a/instrumentation/syscalls/headers/x86-64-syscalls_pointers.h +++ b/instrumentation/syscalls/headers/x86-64-syscalls_pointers.h @@ -9,7 +9,7 @@ #if !defined(_TRACE_SYSCALLS_POINTERS_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_POINTERS_H -#include +#include #include #include "x86-64-syscalls_pointers_override.h" #include "syscalls_pointers_override.h" @@ -1348,7 +1348,7 @@ SC_LTTNG_TRACEPOINT_EVENT(process_vm_writev, #endif /* _TRACE_SYSCALLS_POINTERS_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/instrumentation/syscalls/lttng-syscalls-generate-headers.sh b/instrumentation/syscalls/lttng-syscalls-generate-headers.sh index 863f390e..df29abf7 100755 --- a/instrumentation/syscalls/lttng-syscalls-generate-headers.sh +++ b/instrumentation/syscalls/lttng-syscalls-generate-headers.sh @@ -81,7 +81,7 @@ echo "/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) */ #if !defined(_TRACE_SYSCALLS_${CLASSCAP}_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_SYSCALLS_${CLASSCAP}_H -#include +#include #include #include \"${INPUTFILE}_${CLASS}_override.h\" #include \"syscalls_${CLASS}_override.h\" @@ -290,7 +290,7 @@ echo \ #endif /* _TRACE_SYSCALLS_${CLASSCAP}_H */ /* This part must be outside protection */ -#include +#include #else /* CREATE_SYSCALL_TABLE */ diff --git a/probes/define_trace.h b/probes/define_trace.h deleted file mode 100644 index f8f9d342..00000000 --- a/probes/define_trace.h +++ /dev/null @@ -1,121 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) - * - * define_trace.h - * - * Copyright (C) 2009 Steven Rostedt - * Copyright (C) 2010-2012 Mathieu Desnoyers - */ - -/* - * Trace files that want to automate creationg of all tracepoints defined - * in their file should include this file. The following are macros that the - * trace file may define: - * - * TRACE_SYSTEM defines the system the tracepoint is for - * - * TRACE_INCLUDE_FILE if the file name is something other than TRACE_SYSTEM.h - * This macro may be defined to tell define_trace.h what file to include. - * Note, leave off the ".h". - * - * TRACE_INCLUDE_PATH if the path is something other than core kernel include/trace - * then this macro can define the path to use. Note, the path is relative to - * define_trace.h, not the file including it. Full path names for out of tree - * modules must be used. - */ - -#ifdef CREATE_TRACE_POINTS - -/* Prevent recursion */ -#undef CREATE_TRACE_POINTS - -#include - -#undef LTTNG_TRACEPOINT_EVENT_MAP -#define LTTNG_TRACEPOINT_EVENT_MAP(name, map, proto, args, fields) - -#undef LTTNG_TRACEPOINT_EVENT_MAP_NOARGS -#define LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, map, fields) - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(template, name, map, proto, args) - -#undef LTTNG_TRACEPOINT_EVENT -#define LTTNG_TRACEPOINT_EVENT(name, proto, args, fields) - -#undef LTTNG_TRACEPOINT_EVENT_CODE -#define LTTNG_TRACEPOINT_EVENT_CODE(name, proto, args, _locvar, _code_pre, fields, _code_post) - -#undef LTTNG_TRACEPOINT_EVENT_CODE_MAP -#define LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, map, proto, args, _locvar, _code_pre, fields, _code_post) - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE -#define LTTNG_TRACEPOINT_EVENT_INSTANCE(template, name, proto, args) - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name) - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(template, name, map) - -#undef TRACE_INCLUDE -#undef __TRACE_INCLUDE - -#ifndef TRACE_INCLUDE_FILE -# define TRACE_INCLUDE_FILE TRACE_SYSTEM -# define UNDEF_TRACE_INCLUDE_FILE -#endif - -#ifndef TRACE_INCLUDE_PATH -# define __TRACE_INCLUDE(system) -# define UNDEF_TRACE_INCLUDE_PATH -#else -# define __TRACE_INCLUDE(system) __stringify(TRACE_INCLUDE_PATH/system.h) -#endif - -# define TRACE_INCLUDE(system) __TRACE_INCLUDE(system) - -/* Let the trace headers be reread */ -#define TRACE_HEADER_MULTI_READ - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -/* Make all open coded DECLARE_TRACE nops */ -#undef DECLARE_TRACE -#define DECLARE_TRACE(name, proto, args) - -#ifdef LTTNG_PACKAGE_BUILD -#include -#endif - -#undef LTTNG_TRACEPOINT_EVENT -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE -#undef LTTNG_TRACEPOINT_EVENT_MAP -#undef LTTNG_TRACEPOINT_EVENT_CLASS -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP -#undef LTTNG_TRACEPOINT_EVENT_CODE_MAP -#undef LTTNG_TRACEPOINT_EVENT_CODE -#undef LTTNG_TRACEPOINT_EVENT_MAP_NOARGS -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS -#undef TRACE_HEADER_MULTI_READ - -/* Only undef what we defined in this file */ -#ifdef UNDEF_TRACE_INCLUDE_FILE -# undef TRACE_INCLUDE_FILE -# undef UNDEF_TRACE_INCLUDE_FILE -#endif - -#ifdef UNDEF_TRACE_INCLUDE_PATH -# undef TRACE_INCLUDE_PATH -# undef UNDEF_TRACE_INCLUDE_PATH -#endif - -/* - * We want to re-include lttng-tracepoint-event.h for a following probe. - */ -#undef LTTNG_TRACEPOINT_EVENT_H - -/* We may be processing more files */ -#define CREATE_TRACE_POINTS - -#endif /* CREATE_TRACE_POINTS */ diff --git a/probes/lttng-events-nowrite.h b/probes/lttng-events-nowrite.h deleted file mode 100644 index 5f6b64c7..00000000 --- a/probes/lttng-events-nowrite.h +++ /dev/null @@ -1,137 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) - * - * lttng-events-write.h - * - * Copyright (C) 2014 Mathieu Desnoyers - */ - -#undef ctf_integer_nowrite -#define ctf_integer_nowrite(_type, _item, _user_src) \ - _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 10, 0, 1) - -#undef ctf_integer_hex_nowrite -#define ctf_integer_hex_nowrite(_type, _item, _user_src) \ - _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 16, 0, 1) - -#undef ctf_integer_oct_nowrite -#define ctf_integer_oct_nowrite(_type, _item, _user_src) \ - _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 8, 0, 1) - -#undef ctf_integer_network_nowrite -#define ctf_integer_network_nowrite(_type, _item, _user_src) \ - _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 10, 0, 1) - -#undef ctf_integer_network_hex_nowrite -#define ctf_integer_network_hex_nowrite(_type, _item, _user_src) \ - _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 16, 0, 1) - -#undef ctf_array_nowrite -#define ctf_array_nowrite(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BYTE_ORDER, 10, 0, 1) - -#undef ctf_array_network_nowrite -#define ctf_array_network_nowrite(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BIG_ENDIAN, 10, 0, 1) - -#undef ctf_array_text_nowrite -#define ctf_array_text_nowrite(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, UTF8, __BYTE_ORDER, 10, 0, 1) - -#undef ctf_array_bitfield_nowrite -#define ctf_array_bitfield_nowrite(_type, _item, _src, _length) \ - _ctf_array_bitfield(_type, _item, _src, _length, 0, 1) - -#undef ctf_sequence_nowrite -#define ctf_sequence_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ - _ctf_sequence_encoded(_type, _item, _user_src, \ - _length_type, _user_src_length, none, __BYTE_ORDER, 10, 0, 1) - -#undef ctf_sequence_network_nowrite -#define ctf_sequence_network_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ - _ctf_sequence_encoded(_type, _item, _user_src, \ - _length_type, _user_src_length, none, __BIG_ENDIAN, 10, 0, 1) - -#undef ctf_sequence_text_nowrite -#define ctf_sequence_text_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ - _ctf_sequence_encoded(_type, _item, _user_src, \ - _length_type, _user_src_length, UTF8, __BYTE_ORDER, 10, 0, 1) - -#undef ctf_sequence_bitfield_nowrite -#define ctf_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, 0, 1) - -#undef ctf_string_nowrite -#define ctf_string_nowrite(_item, _user_src) \ - _ctf_string(_item, _user_src, 0, 1) - -#undef ctf_enum_nowrite -#define ctf_enum_nowrite(_name, _type, _item, _src) \ - _ctf_enum(_name, _type, _item, _src, 0, 1) - -/* user src */ -#undef ctf_user_integer_nowrite -#define ctf_user_integer_nowrite(_type, _item, _user_src) \ - _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 10, 1, 1) - -#undef ctf_user_integer_hex_nowrite -#define ctf_user_integer_hex_nowrite(_type, _item, _user_src) \ - _ctf_integer_ext(_type, _item, _user_src, __BYTE_ORDER, 16, 1, 1) - -#undef ctf_user_integer_network_nowrite -#define ctf_user_integer_network_nowrite(_type, _item, _user_src) \ - _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 10, 1, 1) - -#undef ctf_user_integer_network_hex_nowrite -#define ctf_user_integer_network_hex_nowrite(_type, _item, _user_src) \ - _ctf_integer_ext(_type, _item, _user_src, __BIG_ENDIAN, 16, 1, 1) - -#undef ctf_user_array_nowrite -#define ctf_user_array_nowrite(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BYTE_ORDER, 10, 1, 1) - -#undef ctf_user_array_network_nowrite -#define ctf_user_array_network_nowrite(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BIG_ENDIAN, 10, 1, 1) - -#undef ctf_user_array_text_nowrite -#define ctf_user_array_text_nowrite(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, UTF8, __BYTE_ORDER, 10, 1, 1) - -#undef ctf_user_array_bitfield_nowrite -#define ctf_user_array_bitfield_nowrite(_type, _item, _src, _length) \ - _ctf_array_bitfield(_type, _item, _src, _length, 1, 1) - -#undef ctf_user_sequence_nowrite -#define ctf_user_sequence_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ - _ctf_sequence_encoded(_type, _item, _user_src, \ - _length_type, _user_src_length, none, __BYTE_ORDER, 10, 1, 1) - -#undef ctf_user_sequence_network_nowrite -#define ctf_user_sequence_network_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ - _ctf_sequence_encoded(_type, _item, _user_src, \ - _length_type, _user_src_length, none, __BIG_ENDIAN, 10, 1, 1) - -#undef ctf_user_sequence_text_nowrite -#define ctf_user_sequence_text_nowrite(_type, _item, _user_src, _length_type, _user_src_length) \ - _ctf_sequence_encoded(_type, _item, _user_src, \ - _length_type, _user_src_length, UTF8, __BYTE_ORDER, 10, 1, 1) - -#undef ctf_user_sequence_bitfield_nowrite -#define ctf_user_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, 1, 1) - -#undef ctf_user_string_nowrite -#define ctf_user_string_nowrite(_item, _user_src) \ - _ctf_string(_item, _user_src, 1, 1) - -#undef ctf_user_enum_nowrite -#define ctf_user_enum_nowrite(_name, _type, _item, _src) \ - _ctf_enum(_name, _type, _item, _src, 1, 1) diff --git a/probes/lttng-events-reset.h b/probes/lttng-events-reset.h deleted file mode 100644 index 91ddab48..00000000 --- a/probes/lttng-events-reset.h +++ /dev/null @@ -1,283 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) - * - * lttng-events-reset.h - * - * Copyright (C) 2010-2012 Mathieu Desnoyers - */ - -/* Reset macros used within LTTNG_TRACEPOINT_EVENT to "nothing" */ - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) - -#undef LTTNG_TRACEPOINT_ENUM -#define LTTNG_TRACEPOINT_ENUM(_name, _values) - -#undef TP_PROTO -#define TP_PROTO(args...) - -#undef TP_ARGS -#define TP_ARGS(args...) - -#undef TP_locvar -#define TP_locvar(...) - -#undef TP_code_pre -#define TP_code_pre(...) - -#undef TP_code_post -#define TP_code_post(...) - -#undef TP_FIELDS -#define TP_FIELDS(args...) - -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, \ - _user, _nowrite) - -#undef _ctf_integer_ext_isuser0 -#define _ctf_integer_ext_isuser0(_type, _item, _src, _byte_order, _base, \ - _nowrite) - -#undef _ctf_integer_ext_isuser1 -#define _ctf_integer_ext_isuser1(_type, _item, _src, _byte_order, _base, \ - _nowrite) - -#undef _ctf_integer_ext_fetched -#define _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, \ - _nowrite) - -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, \ - _byte_order, _base, _user, _nowrite) - -#undef _ctf_array_bitfield -#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) - -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ - _src_length, _encoding, _byte_order, _base, _user, _nowrite) - -#undef _ctf_sequence_bitfield -#define _ctf_sequence_bitfield(_type, _item, _src, _length_type, \ - _src_length, _byte_order, _user, _nowrite) - -#undef _ctf_string -#define _ctf_string(_item, _src, _user, _nowrite) - -#undef _ctf_enum -#define _ctf_enum(_name, _type, _item, _src, _nowrite) - -/* "write" */ -#undef ctf_integer -#define ctf_integer(_type, _item, _src) - -#undef ctf_integer_hex -#define ctf_integer_hex(_type, _item, _src) - -#undef ctf_integer_oct -#define ctf_integer_oct(_type, _item, _src) - -#undef ctf_integer_network -#define ctf_integer_network(_type, _item, _src) - -#undef ctf_integer_network_hex -#define ctf_integer_network_hex(_type, _item, _src) - -#undef ctf_float -#define ctf_float(_type, _item, _src) - -#undef ctf_array -#define ctf_array(_type, _item, _src, _length) - -#undef ctf_array_hex -#define ctf_array_hex(_type, _item, _src, _length) - -#undef ctf_array_network -#define ctf_array_network(_type, _item, _src, _length) - -#undef ctf_array_network_hex -#define ctf_array_network_hex(_type, _item, _src, _length) - -#undef ctf_array_text -#define ctf_array_text(_type, _item, _src, _length) - -#undef ctf_array_bitfield -#define ctf_array_bitfield(_type, _item, _src, _length) - -#undef ctf_sequence -#define ctf_sequence(_type, _item, _src, _length_type, _src_length) - -#undef ctf_sequence_hex -#define ctf_sequence_hex(_type, _item, _src, _length_type, _src_length) - -#undef ctf_sequence_network -#define ctf_sequence_network(_type, _item, _src, _length_type, _src_length) - -#undef ctf_sequence_network_hex -#define ctf_sequence_network_hex(_type, _item, _src, _length_type, _src_length) - -#undef ctf_sequence_text -#define ctf_sequence_text(_type, _item, _src, _length_type, _src_length) - -#undef ctf_sequence_bitfield -#define ctf_sequence_bitfield(_type, _item, _src, _length_type, _src_length) - -#undef ctf_string -#define ctf_string(_item, _src) - -#undef ctf_enum -#define ctf_enum(_name, _type, _item, _src) - -#undef ctf_custom_field -#define ctf_custom_field(_type, _item, _code) - -#undef ctf_custom_type -#define ctf_custom_type(...) - -#undef ctf_custom_code -#define ctf_custom_code(...) - -#undef ctf_align -#define ctf_align(_type) - -/* "nowrite" */ -#undef ctf_integer_nowrite -#define ctf_integer_nowrite(_type, _item, _src) - -#undef ctf_float_nowrite -#define ctf_float_nowrite(_type, _item, _src) - -#undef ctf_array_nowrite -#define ctf_array_nowrite(_type, _item, _src, _length) - -#undef ctf_array_network_nowrite -#define ctf_array_network_nowrite(_type, _item, _src, _length) - -#undef ctf_array_text_nowrite -#define ctf_array_text_nowrite(_type, _item, _src, _length) - -#undef ctf_array_bitfield_nowrite -#define ctf_array_bitfield_nowrite(_type, _item, _src, _length) - -#undef ctf_sequence_nowrite -#define ctf_sequence_nowrite(_type, _item, _src, _length_type, _src_length) - -#undef ctf_sequence_network_nowrite -#define ctf_sequence_network_nowrite(_type, _item, _src, _length_type, _src_length) - -#undef ctf_sequence_text_nowrite -#define ctf_sequence_text_nowrite(_type, _item, _src, _length_type, _src_length) - -#undef ctf_sequence_bitfield_nowrite -#define ctf_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) - -#undef ctf_string_nowrite -#define ctf_string_nowrite(_item, _src) - -#undef ctf_enum_nowrite -#define ctf_enum_nowrite(_name, _type, _item, _src) - -/* "user" - "write" */ -#undef ctf_user_integer -#define ctf_user_integer(_type, _item, _user_src) - -#undef ctf_user_integer_hex -#define ctf_user_integer_hex(_type, _item, _user_src) - -#undef ctf_user_integer_network -#define ctf_user_integer_network(_type, _item, _user_src) - -#undef ctf_user_integer_network_hex -#define ctf_user_integer_network_hex(_type, _item, _user_src) - -#undef ctf_user_float -#define ctf_user_float(_type, _item, _user_src) - -#undef ctf_user_array -#define ctf_user_array(_type, _item, _user_src, _length) - -#undef ctf_user_array_hex -#define ctf_user_array_hex(_type, _item, _user_src, _length) - -#undef ctf_user_array_network -#define ctf_user_array_network(_type, _item, _user_src, _length) - -#undef ctf_user_array_network_hex -#define ctf_user_array_network_hex(_type, _item, _user_src, _length) - -#undef ctf_user_array_text -#define ctf_user_array_text(_type, _item, _user_src, _length) - -#undef ctf_user_array_bitfield -#define ctf_user_array_bitfield(_type, _item, _src, _length) - -#undef ctf_user_sequence -#define ctf_user_sequence(_type, _item, _user_src, _length_type, _user_src_length) - -#undef ctf_user_sequence_hex -#define ctf_user_sequence_hex(_type, _item, _user_src, _length_type, _user_src_length) - -#undef ctf_user_sequence_network -#define ctf_user_sequence_network(_type, _item, _user_src, _length_type, _user_src_length) - -#undef ctf_user_sequence_network_hex -#define ctf_user_sequence_network_hex(_type, _item, _user_src, _length_type, _user_src_length) - -#undef ctf_user_sequence_text -#define ctf_user_sequence_text(_type, _item, _user_src, _length_type, _user_src_length) - -#undef ctf_user_sequence_bitfield -#define ctf_user_sequence_bitfield(_type, _item, _src, _length_type, _src_length) - -#undef ctf_user_string -#define ctf_user_string(_item, _user_src) - -#undef ctf_user_enum -#define ctf_user_enum(_name, _type, _item, _src) - -/* "user" - "nowrite" */ -#undef ctf_user_integer_nowrite -#define ctf_user_integer_nowrite(_type, _item, _user_src) - -#undef ctf_user_float_nowrite -#define ctf_user_float_nowrite(_type, _item, _user_src) - -#undef ctf_user_array_nowrite -#define ctf_user_array_nowrite(_type, _item, _user_src, _length) - -#undef ctf_user_array_network_nowrite -#define ctf_user_array_network_nowrite(_type, _item, _user_src, _length) - -#undef ctf_user_array_text_nowrite -#define ctf_user_array_text_nowrite(_type, _item, _user_src, _length) - -#undef ctf_user_array_bitfield_nowrite -#define ctf_user_array_bitfield_nowrite(_type, _item, _src, _length) - -#undef ctf_user_sequence_nowrite -#define ctf_user_sequence_nowrite(_type, _item, _user_src, _length_type, _user_src_length) - -#undef ctf_user_sequence_network_nowrite -#define ctf_user_sequence_network_nowrite(_type, _item, _user_src, _length_type, _user_src_length) - -#undef ctf_user_sequence_text_nowrite -#define ctf_user_sequence_text_nowrite(_type, _item, _user_src, _length_type, _user_src_length) - -#undef ctf_user_sequence_bitfield_nowrite -#define ctf_user_sequence_bitfield_nowrite(_type, _item, _src, _length_type, _src_length) - -#undef ctf_user_string_nowrite -#define ctf_user_string_nowrite(_item, _user_src) - -#undef ctf_user_enum_nowrite -#define ctf_user_enum_nowrite(_name, _type, _item, _src) diff --git a/probes/lttng-events-write.h b/probes/lttng-events-write.h deleted file mode 100644 index c0732a54..00000000 --- a/probes/lttng-events-write.h +++ /dev/null @@ -1,339 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) - * - * lttng-events-write.h - * - * Copyright (C) 2014 Mathieu Desnoyers - */ - -#undef ctf_integer -#define ctf_integer(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, 0, 0) - -#undef ctf_integer_bitfield -#define ctf_integer_bitfield(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __LITTLE_ENDIAN, 10, 0, 0) - -#undef ctf_integer_hex -#define ctf_integer_hex(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 16, 0, 0) - -#undef ctf_integer_oct -#define ctf_integer_oct(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 8, 0, 0) - -#undef ctf_integer_network -#define ctf_integer_network(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 10, 0, 0) - -#undef ctf_integer_network_hex -#define ctf_integer_network_hex(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 16, 0, 0) - -#undef ctf_array -#define ctf_array(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BYTE_ORDER, 10, 0, 0) - -#undef ctf_array_hex -#define ctf_array_hex(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BYTE_ORDER, 16, 0, 0) - -#undef ctf_array_network -#define ctf_array_network(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BIG_ENDIAN, 10, 0, 0) - -#undef ctf_array_network_hex -#define ctf_array_network_hex(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BIG_ENDIAN, 16, 0, 0) - -#undef ctf_array_text -#define ctf_array_text(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, UTF8, __BYTE_ORDER, 10, 0, 0) - -#undef ctf_array_bitfield -#define ctf_array_bitfield(_type, _item, _src, _length) \ - _ctf_array_bitfield(_type, _item, _src, _length, 0, 0) - -#undef ctf_sequence -#define ctf_sequence(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, none, __BYTE_ORDER, 10, 0, 0) - -#undef ctf_sequence_hex -#define ctf_sequence_hex(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, none, __BYTE_ORDER, 16, 0, 0) - -#undef ctf_sequence_network -#define ctf_sequence_network(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, none, __BIG_ENDIAN, 10, 0, 0) - -#undef ctf_sequence_network_hex -#define ctf_sequence_network_hex(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, none, __BIG_ENDIAN, 16, 0, 0) - -#undef ctf_sequence_text -#define ctf_sequence_text(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, UTF8, __BYTE_ORDER, 10, 0, 0) - -#undef ctf_sequence_bitfield -#define ctf_sequence_bitfield(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, 0, 0) - -#undef ctf_string -#define ctf_string(_item, _src) \ - _ctf_string(_item, _src, 0, 0) - -#undef ctf_enum -#define ctf_enum(_name, _type, _item, _src) \ - _ctf_enum(_name, _type, _item, _src, 0, 0) - -/* user src */ -#undef ctf_user_integer -#define ctf_user_integer(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, 1, 0) - -#undef ctf_user_integer_hex -#define ctf_user_integer_hex(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 16, 1, 0) - -#undef ctf_user_integer_network -#define ctf_user_integer_network(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 10, 1, 0) - -#undef ctf_user_integer_network_hex -#define ctf_user_integer_network_hex(_type, _item, _src) \ - _ctf_integer_ext(_type, _item, _src, __BIG_ENDIAN, 16, 1, 0) - -#undef ctf_user_array -#define ctf_user_array(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BYTE_ORDER, 10, 1, 0) - -#undef ctf_user_array_hex -#define ctf_user_array_hex(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BYTE_ORDER, 16, 1, 0) - -#undef ctf_user_array_network -#define ctf_user_array_network(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BIG_ENDIAN, 10, 1, 0) - -#undef ctf_user_array_network_hex -#define ctf_user_array_network_hex(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, none, __BIG_ENDIAN, 16, 1, 0) - -#undef ctf_user_array_text -#define ctf_user_array_text(_type, _item, _src, _length) \ - _ctf_array_encoded(_type, _item, _src, \ - _length, UTF8, __BYTE_ORDER, 10, 1, 0) - -#undef ctf_user_array_bitfield -#define ctf_user_array_bitfield(_type, _item, _src, _length) \ - _ctf_array_bitfield(_type, _item, _src, _length, 1, 0) - -#undef ctf_user_sequence -#define ctf_user_sequence(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, none, __BYTE_ORDER, 10, 1, 0) - -#undef ctf_user_sequence_hex -#define ctf_user_sequence_hex(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, none, __BYTE_ORDER, 16, 1, 0) - -#undef ctf_user_sequence_network -#define ctf_user_sequence_network(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, none, __BIG_ENDIAN, 10, 1, 0) - -#undef ctf_user_sequence_network_hex -#define ctf_user_sequence_network_hex(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, none, __BIG_ENDIAN, 16, 1, 0) - -#undef ctf_user_sequence_text -#define ctf_user_sequence_text(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, UTF8, __BYTE_ORDER, 10, 1, 0) - -#undef ctf_user_sequence_bitfield -#define ctf_user_sequence_bitfield(_type, _item, _src, _length_type, _src_length) \ - _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, 1, 0) - -#undef ctf_user_string -#define ctf_user_string(_item, _src) \ - _ctf_string(_item, _src, 1, 0) - -#undef ctf_user_enum -#define ctf_user_enum(_name, _type, _item, _src) \ - _ctf_enum(_name, _type, _item, _src, 1, 0) - -/* types */ -#undef ctf_integer_type -#define ctf_integer_type(_type, _src) \ - ctf_integer(_type, unused, _src) - -#undef ctf_integer_bitfield_type -#define ctf_integer_bitfield_type(_type, _src) \ - ctf_integer_bitfield(_type, unused, _src) - -#undef ctf_integer_hex_type -#define ctf_integer_hex_type(_type, _src) \ - ctf_integer_hex(_type, unused, _src) - -#undef ctf_integer_oct_type -#define ctf_integer_oct_type(_type, _item, _src) \ - ctf_integer_oct(_type, unused, _src) - -#undef ctf_integer_network_type -#define ctf_integer_network_type(_type, _src) \ - ctf_integer_network(_type, unused, _src) - -#undef ctf_integer_network_hex_type -#define ctf_integer_network_hex_type(_type, _src) \ - ctf_integer_network_hex(_type, unused, _src) - -#undef ctf_array_type -#define ctf_array_type(_type, _src, _length) \ - ctf_array(_type, unused, _src, _length) - -#undef ctf_array_hex_type -#define ctf_array_hex_type(_type, _src, _length) \ - ctf_array_hex(_type, unused, _src, _length) - -#undef ctf_array_network_type -#define ctf_array_network_type(_type, _src, _length) \ - ctf_array_network(_type, unused, _src, _length) - -#undef ctf_array_network_hex_type -#define ctf_array_network_hex_type(_type, _src, _length) \ - ctf_array_network_hex(_type, unused, _src, _length) - -#undef ctf_array_text_type -#define ctf_array_text_type(_type, _src, _length) \ - ctf_array_text(_type, unused, _src, _length) - -#undef ctf_array_bitfield_type -#define ctf_array_bitfield_type(_type, _src, _length) \ - ctf_array_bitfield(_type, unused, _src, _length) - -#undef ctf_sequence_type -#define ctf_sequence_type(_type, _src, _length_type, _src_length) \ - ctf_sequence(_type, unused, _src, _length_type, _src_length) - -#undef ctf_sequence_hex_type -#define ctf_sequence_hex_type(_type, _src, _length_type, _src_length) \ - ctf_sequence_hex(_type, unused, _src, _length_type, _src_length) - -#undef ctf_sequence_network_type -#define ctf_sequence_network_type(_type, _src, _length_type, _src_length) \ - ctf_sequence_network(_type, unused, _src, _length_type, _src_length) - -#undef ctf_sequence_network_hex_type -#define ctf_sequence_network_hex_type(_type, _src, _length_type, _src_length) \ - ctf_sequence_network_hex(_type, unused, _src, _length_type, _src_length) - -#undef ctf_sequence_text_type -#define ctf_sequence_text_type(_type, _src, _length_type, _src_length) \ - ctf_sequence_text(_type, unused, _src, _length_type, _src_length) - -#undef ctf_sequence_bitfield_type -#define ctf_sequence_bitfield_type(_type, _src, _length_type, _src_length) \ - ctf_sequence_bitfield(_type, unused, _src, _length_type, _src_length) - -#undef ctf_string_type -#define ctf_string_type(_src) \ - ctf_string(unused, _src) - -#undef ctf_enum_type -#define ctf_enum_type(_name, _type, _src) \ - ctf_enum(_name, _type, unused, _src) - -/* user src types */ -#undef ctf_user_integer_type -#define ctf_user_integer_type(_type, _src) \ - ctf_user_integer(_type, unused, _src) - -#undef ctf_user_integer_hex_type -#define ctf_user_integer_hex_type(_type, _src) \ - ctf_user_integer_hex(_type, unused, _src) - -#undef ctf_user_integer_oct_type -#define ctf_user_integer_oct_type(_type, _item, _src) \ - ctf_user_integer_oct(_type, unused, _src) - -#undef ctf_user_integer_network_type -#define ctf_user_integer_network_type(_type, _src) \ - ctf_user_integer_network(_type, unused, _src) - -#undef ctf_user_integer_network_hex_type -#define ctf_user_integer_network_hex_type(_type, _src) \ - ctf_user_integer_network_hex(_type, unused, _src) - -#undef ctf_user_array_type -#define ctf_user_array_type(_type, _src, _length) \ - ctf_user_array(_type, unused, _src, _length) - -#undef ctf_user_array_hex_type -#define ctf_user_array_hex_type(_type, _src, _length) \ - ctf_user_array_hex(_type, unused, _src, _length) - -#undef ctf_user_array_network_type -#define ctf_user_array_network_type(_type, _src, _length) \ - ctf_user_array_network(_type, unused, _src, _length) - -#undef ctf_user_array_network_hex_type -#define ctf_user_array_network_hex_type(_type, _src, _length) \ - ctf_user_array_network_hex(_type, unused, _src, _length) - -#undef ctf_user_array_text_type -#define ctf_user_array_text_type(_type, _src, _length) \ - ctf_user_array_text(_type, unused, _src, _length) - -#undef ctf_user_array_bitfield_type -#define ctf_user_array_bitfield_type(_type, _src, _length) \ - ctf_user_array_bitfield(_type, unused, _src, _length) - -#undef ctf_user_sequence_type -#define ctf_user_sequence_type(_type, _src, _length_type, _src_length) \ - ctf_user_sequence(_type, unused, _src, _length_type, _src_length) - -#undef ctf_user_sequence_hex_type -#define ctf_user_sequence_hex_type(_type, _src, _length_type, _src_length) \ - ctf_user_sequence_hex(_type, unused, _src, _length_type, _src_length) - -#undef ctf_user_sequence_network_type -#define ctf_user_sequence_network_type(_type, _src, _length_type, _src_length) \ - ctf_user_sequence_network(_type, unused, _src, _length_type, _src_length) - -#undef ctf_user_sequence_network_hex_type -#define ctf_user_sequence_network_hex_type(_type, _src, _length_type, _src_length) \ - ctf_user_sequence_network_hex(_type, unused, _src, _length_type, _src_length) - -#undef ctf_user_sequence_text_type -#define ctf_user_sequence_text_type(_type, _src, _length_type, _src_length) \ - ctf_user_sequence_text(_type, unused, _src, _length_type, _src_length) - -#undef ctf_user_sequence_bitfield_type -#define ctf_user_sequence_bitfield_type(_type, _src, _length_type, _src_length) \ - ctf_user_sequence_bitfield(_type, unused, _src, _length_type, _src_length) - -#undef ctf_user_string_type -#define ctf_user_string_type(_src) \ - ctf_user_string(unused, _src) - -#undef ctf_user_enum_type -#define ctf_user_enum_type(_name, _type, _src) \ - ctf_user_enum(_name, _type, unused, _src) diff --git a/probes/lttng-probe-user.c b/probes/lttng-probe-user.c index b777c40d..009cfed0 100644 --- a/probes/lttng-probe-user.c +++ b/probes/lttng-probe-user.c @@ -8,7 +8,7 @@ #include #include #include -#include +#include /* * Calculate string length. Include final null terminating character if there is diff --git a/probes/lttng-probe-user.h b/probes/lttng-probe-user.h deleted file mode 100644 index d85bb6f7..00000000 --- a/probes/lttng-probe-user.h +++ /dev/null @@ -1,17 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) - * - * lttng-probe-user.h - * - * Copyright (C) 2012 Mathieu Desnoyers - */ - -#ifndef _LTTNG_PROBE_USER_H -#define _LTTNG_PROBE_USER_H - -/* - * Calculate string length. Include final null terminating character if there is - * one, or ends at first fault. - */ -long lttng_strlen_user_inatomic(const char *addr); - -#endif /* _LTTNG_PROBE_USER_H */ diff --git a/probes/lttng-tracepoint-event-impl.h b/probes/lttng-tracepoint-event-impl.h deleted file mode 100644 index 5dee7fbe..00000000 --- a/probes/lttng-tracepoint-event-impl.h +++ /dev/null @@ -1,1439 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) - * - * lttng-tracepoint-event-impl.h - * - * Copyright (C) 2009 Steven Rostedt - * Copyright (C) 2009-2014 Mathieu Desnoyers - */ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include /* for wrapper_vmalloc_sync_mappings() */ -#include -#include -#include -#include -#include -#include -#include - -#define __LTTNG_NULL_STRING "(null)" - -/* - * Macro declarations used for all stages. - */ - -/* - * LTTng name mapping macros. LTTng remaps some of the kernel events to - * enforce name-spacing. - */ -#undef LTTNG_TRACEPOINT_EVENT_MAP -#define LTTNG_TRACEPOINT_EVENT_MAP(name, map, proto, args, fields) \ - LTTNG_TRACEPOINT_EVENT_CLASS(map, \ - PARAMS(proto), \ - PARAMS(args), \ - PARAMS(fields)) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args)) - -#undef LTTNG_TRACEPOINT_EVENT_MAP_NOARGS -#define LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, map, fields) \ - LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(map, \ - PARAMS(fields)) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(map, name, map) - -#undef LTTNG_TRACEPOINT_EVENT_CODE_MAP -#define LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, map, proto, args, _locvar, _code_pre, fields, _code_post) \ - LTTNG_TRACEPOINT_EVENT_CLASS_CODE(map, \ - PARAMS(proto), \ - PARAMS(args), \ - PARAMS(_locvar), \ - PARAMS(_code_pre), \ - PARAMS(fields), \ - PARAMS(_code_post)) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(map, name, map, PARAMS(proto), PARAMS(args)) - -#undef LTTNG_TRACEPOINT_EVENT_CODE -#define LTTNG_TRACEPOINT_EVENT_CODE(name, proto, args, _locvar, _code_pre, fields, _code_post) \ - LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, name, \ - PARAMS(proto), \ - PARAMS(args), \ - PARAMS(_locvar), \ - PARAMS(_code_pre), \ - PARAMS(fields), \ - PARAMS(_code_post)) - -/* - * LTTNG_TRACEPOINT_EVENT_CLASS can be used to add a generic function - * handlers for events. That is, if all events have the same parameters - * and just have distinct trace points. Each tracepoint can be defined - * with LTTNG_TRACEPOINT_EVENT_INSTANCE and that will map the - * LTTNG_TRACEPOINT_EVENT_CLASS to the tracepoint. - * - * LTTNG_TRACEPOINT_EVENT is a one to one mapping between tracepoint and - * template. - */ - -#undef LTTNG_TRACEPOINT_EVENT -#define LTTNG_TRACEPOINT_EVENT(name, proto, args, fields) \ - LTTNG_TRACEPOINT_EVENT_MAP(name, name, \ - PARAMS(proto), \ - PARAMS(args), \ - PARAMS(fields)) - -#undef LTTNG_TRACEPOINT_EVENT_NOARGS -#define LTTNG_TRACEPOINT_EVENT_NOARGS(name, fields) \ - LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, name, PARAMS(fields)) - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE -#define LTTNG_TRACEPOINT_EVENT_INSTANCE(template, name, proto, args) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(template, name, name, PARAMS(proto), PARAMS(args)) - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(template, name, name) - -#undef LTTNG_TRACEPOINT_EVENT_CLASS -#define LTTNG_TRACEPOINT_EVENT_CLASS(_name, _proto, _args, _fields) \ - LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, PARAMS(_proto), PARAMS(_args), , , \ - PARAMS(_fields), ) - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS -#define LTTNG_TRACEPOINT_EVENT_CLASS_NOARGS(_name, _fields) \ - LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, , , PARAMS(_fields), ) - - -/* - * Stage 1 of the trace events. - * - * Create dummy trace calls for each events, verifying that the LTTng module - * instrumentation headers match the kernel arguments. Will be optimized - * out by the compiler. - */ - -/* Reset all macros within TRACEPOINT_EVENT */ -#include - -#undef TP_PROTO -#define TP_PROTO(...) __VA_ARGS__ - -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ -void trace_##_name(_proto); - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ -void trace_##_name(void); - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -/* - * Stage 1.1 of the trace events. - * - * Create dummy trace prototypes for each event class, and for each used - * template. This will allow checking whether the prototypes from the - * class and the instance using the class actually match. - */ - -#include /* Reset all macros within TRACE_EVENT */ - -#undef TP_PROTO -#define TP_PROTO(...) __VA_ARGS__ - -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ -void __event_template_proto___##_template(_proto); - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ -void __event_template_proto___##_template(void); - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ -void __event_template_proto___##_name(_proto); - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ -void __event_template_proto___##_name(void); - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -/* - * Stage 1.2 of tracepoint event generation - * - * Unfolding the enums - */ -#include /* Reset all macros within TRACE_EVENT */ - -/* Enumeration entry (single value) */ -#undef ctf_enum_value -#define ctf_enum_value(_string, _value) \ - { \ - .start = { \ - .signedness = lttng_is_signed_type(__typeof__(_value)), \ - .value = lttng_is_signed_type(__typeof__(_value)) ? \ - (long long) (_value) : (_value), \ - }, \ - .end = { \ - .signedness = lttng_is_signed_type(__typeof__(_value)), \ - .value = lttng_is_signed_type(__typeof__(_value)) ? \ - (long long) (_value) : (_value), \ - }, \ - .string = (_string), \ - }, - -/* Enumeration entry (range) */ -#undef ctf_enum_range -#define ctf_enum_range(_string, _range_start, _range_end) \ - { \ - .start = { \ - .signedness = lttng_is_signed_type(__typeof__(_range_start)), \ - .value = lttng_is_signed_type(__typeof__(_range_start)) ? \ - (long long) (_range_start) : (_range_start), \ - }, \ - .end = { \ - .signedness = lttng_is_signed_type(__typeof__(_range_end)), \ - .value = lttng_is_signed_type(__typeof__(_range_end)) ? \ - (long long) (_range_end) : (_range_end), \ - }, \ - .string = (_string), \ - }, - -/* Enumeration entry (automatic value; follows the rules of CTF) */ -#undef ctf_enum_auto -#define ctf_enum_auto(_string) \ - { \ - .start = { \ - .signedness = -1, \ - .value = -1, \ - }, \ - .end = { \ - .signedness = -1, \ - .value = -1, \ - }, \ - .string = (_string), \ - .options = { \ - .is_auto = 1, \ - } \ - }, - -#undef TP_ENUM_VALUES -#define TP_ENUM_VALUES(...) \ - __VA_ARGS__ - -#undef LTTNG_TRACEPOINT_ENUM -#define LTTNG_TRACEPOINT_ENUM(_name, _values) \ - const struct lttng_enum_entry __enum_values__##_name[] = { \ - _values \ - }; - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -/* - * Stage 2 of the trace events. - * - * Create event field type metadata section. - * Each event produce an array of fields. - */ - -/* Reset all macros within TRACEPOINT_EVENT */ -#include -#include -#include - -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \ - { \ - .name = #_item, \ - .type = __type_integer(_type, 0, 0, -1, _byte_order, _base, none), \ - .nowrite = _nowrite, \ - .user = _user, \ - .nofilter = 0, \ - }, - -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _length, \ - _encoding, _byte_order, _elem_type_base, _user, _nowrite) \ - { \ - .name = #_item, \ - .type = \ - { \ - .atype = atype_array_nestable, \ - .u = \ - { \ - .array_nestable = \ - { \ - .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(_type, 0, 0, -1, _byte_order, _elem_type_base, _encoding)), \ - .length = _length, \ - .alignment = 0, \ - } \ - } \ - }, \ - .nowrite = _nowrite, \ - .user = _user, \ - .nofilter = 0, \ - }, - -#undef _ctf_array_bitfield -#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ - { \ - .name = #_item, \ - .type = \ - { \ - .atype = atype_array_nestable, \ - .u = \ - { \ - .array_nestable = \ - { \ - .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, 10, none)), \ - .length = (_length) * sizeof(_type) * CHAR_BIT, \ - .alignment = lttng_alignof(_type), \ - } \ - } \ - }, \ - .nowrite = _nowrite, \ - .user = _user, \ - .nofilter = 0, \ - }, - - -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, \ - _length_type, _src_length, _encoding, \ - _byte_order, _elem_type_base, _user, _nowrite) \ - { \ - .name = "_" #_item "_length", \ - .type = __type_integer(_length_type, 0, 0, -1, __BYTE_ORDER, 10, none), \ - .nowrite = _nowrite, \ - .nofilter = 1, \ - }, \ - { \ - .name = #_item, \ - .type = \ - { \ - .atype = atype_sequence_nestable, \ - .u = \ - { \ - .sequence_nestable = \ - { \ - .length_name = "_" #_item "_length", \ - .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(_type, 0, 0, -1, _byte_order, _elem_type_base, _encoding)), \ - .alignment = 0, \ - }, \ - }, \ - }, \ - .nowrite = _nowrite, \ - .user = _user, \ - .nofilter = 0, \ - }, - -#undef _ctf_sequence_bitfield -#define _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, \ - _user, _nowrite) \ - { \ - .name = "_" #_item "_length", \ - .type = __type_integer(_length_type, 0, 0, -1, __BYTE_ORDER, 10, none), \ - .nowrite = _nowrite, \ - .nofilter = 1, \ - }, \ - { \ - .name = #_item, \ - .type = \ - { \ - .atype = atype_sequence_nestable, \ - .u = \ - { \ - .sequence_nestable = \ - { \ - .length_name = "_" #_item "_length", \ - .elem_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(_type, 1, 1, 0, __LITTLE_ENDIAN, 10, none)), \ - .alignment = lttng_alignof(_type), \ - }, \ - }, \ - }, \ - .nowrite = _nowrite, \ - .user = _user, \ - .nofilter = 0, \ - }, - -#undef _ctf_string -#define _ctf_string(_item, _src, _user, _nowrite) \ - { \ - .name = #_item, \ - .type = \ - { \ - .atype = atype_string, \ - .u = \ - { \ - .string = { .encoding = lttng_encode_UTF8 }, \ - }, \ - }, \ - .nowrite = _nowrite, \ - .user = _user, \ - .nofilter = 0, \ - }, - -#undef _ctf_enum -#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ - { \ - .name = #_item, \ - .type = { \ - .atype = atype_enum_nestable, \ - .u = { \ - .enum_nestable = { \ - .desc = &__enum_##_name, \ - .container_type = __LTTNG_COMPOUND_LITERAL(struct lttng_type, \ - __type_integer(_type, 0, 0, -1, __BYTE_ORDER, 10, none)), \ - }, \ - }, \ - }, \ - .nowrite = _nowrite, \ - .user = _user, \ - .nofilter = 0, \ - }, - -#undef ctf_custom_field -#define ctf_custom_field(_type, _item, _code) \ - { \ - .name = #_item, \ - .type = _type, \ - .nowrite = 0, \ - .user = 0, \ - .nofilter = 1, \ - }, - -#undef ctf_custom_type -#define ctf_custom_type(...) __VA_ARGS__ - -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */ - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ - static const struct lttng_event_field __event_fields___##_name[] = { \ - _fields \ - }; - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ - LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, PARAMS(_fields), _code_post) - -#undef LTTNG_TRACEPOINT_ENUM -#define LTTNG_TRACEPOINT_ENUM(_name, _values) \ - static const struct lttng_enum_desc __enum_##_name = { \ - .name = #_name, \ - .entries = __enum_values__##_name, \ - .nr_entries = ARRAY_SIZE(__enum_values__##_name), \ - }; - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -/* - * Stage 3 of the trace events. - * - * Create probe callback prototypes. - */ - -/* Reset all macros within TRACEPOINT_EVENT */ -#include - -#undef TP_PROTO -#define TP_PROTO(...) __VA_ARGS__ - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ -static void __event_probe__##_name(void *__data, _proto); - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ -static void __event_probe__##_name(void *__data); - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -/* - * Stage 4 of the trace events. - * - * Create static inline function that calculates event size. - */ - -/* Reset all macros within TRACEPOINT_EVENT */ -#include -#include - -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \ - __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \ - __event_len += sizeof(_type); - -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ - __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \ - __event_len += sizeof(_type) * (_length); - -#undef _ctf_array_bitfield -#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ - _ctf_array_encoded(_type, _item, _src, _length, none, __LITTLE_ENDIAN, 0, _user, _nowrite) - -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ - _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ - __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_length_type)); \ - __event_len += sizeof(_length_type); \ - __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); \ - { \ - size_t __seqlen = (_src_length); \ - \ - if (unlikely(++this_cpu_ptr(<tng_dynamic_len_stack)->offset >= LTTNG_DYNAMIC_LEN_STACK_SIZE)) \ - goto error; \ - barrier(); /* reserve before use. */ \ - this_cpu_ptr(<tng_dynamic_len_stack)->stack[this_cpu_ptr(<tng_dynamic_len_stack)->offset - 1] = __seqlen; \ - __event_len += sizeof(_type) * __seqlen; \ - } - -#undef _ctf_sequence_bitfield -#define _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, \ - _user, _nowrite) \ - _ctf_sequence_encoded(_type, _item, _src, _length_type, _src_length, \ - none, __LITTLE_ENDIAN, 10, _user, _nowrite) - -/* - * ctf_user_string includes \0. If returns 0, it faulted, so we set size to - * 1 (\0 only). - */ -#undef _ctf_string -#define _ctf_string(_item, _src, _user, _nowrite) \ - if (unlikely(++this_cpu_ptr(<tng_dynamic_len_stack)->offset >= LTTNG_DYNAMIC_LEN_STACK_SIZE)) \ - goto error; \ - barrier(); /* reserve before use. */ \ - if (_user) { \ - __event_len += this_cpu_ptr(<tng_dynamic_len_stack)->stack[this_cpu_ptr(<tng_dynamic_len_stack)->offset - 1] = \ - max_t(size_t, lttng_strlen_user_inatomic(_src), 1); \ - } else { \ - __event_len += this_cpu_ptr(<tng_dynamic_len_stack)->stack[this_cpu_ptr(<tng_dynamic_len_stack)->offset - 1] = \ - strlen((_src) ? (_src) : __LTTNG_NULL_STRING) + 1; \ - } - -#undef _ctf_enum -#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ - _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) - -#undef ctf_align -#define ctf_align(_type) \ - __event_len += lib_ring_buffer_align(__event_len, lttng_alignof(_type)); - -#undef ctf_custom_field -#define ctf_custom_field(_type, _item, _code) \ - { \ - _code \ - } - -#undef ctf_custom_code -#define ctf_custom_code(...) __VA_ARGS__ - -#undef TP_PROTO -#define TP_PROTO(...) __VA_ARGS__ - -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ - -#undef TP_locvar -#define TP_locvar(...) __VA_ARGS__ - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ -static inline ssize_t __event_get_size__##_name(void *__tp_locvar, _proto) \ -{ \ - size_t __event_len = 0; \ - unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \ - struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ - \ - _fields \ - return __event_len; \ - \ -error: \ - __attribute__((unused)); \ - return -1; \ -} - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ -static inline ssize_t __event_get_size__##_name(void *__tp_locvar) \ -{ \ - size_t __event_len = 0; \ - unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \ - struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ - \ - _fields \ - return __event_len; \ - \ -error: \ - __attribute__((unused)); \ - return -1; \ -} - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - - -/* - * Stage 4.1 of tracepoint event generation. - * - * Create static inline function that layout the filter stack data. - * We make both write and nowrite data available to the filter. - */ - -/* Reset all macros within TRACEPOINT_EVENT */ -#include -#include -#include - -#undef _ctf_integer_ext_fetched -#define _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) \ - if (lttng_is_signed_type(_type)) { \ - int64_t __ctf_tmp_int64; \ - switch (sizeof(_type)) { \ - case 1: \ - { \ - union { _type t; int8_t v; } __tmp = { (_type) (_src) }; \ - __ctf_tmp_int64 = (int64_t) __tmp.v; \ - break; \ - } \ - case 2: \ - { \ - union { _type t; int16_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != __BYTE_ORDER) \ - __swab16s(&__tmp.v); \ - __ctf_tmp_int64 = (int64_t) __tmp.v; \ - break; \ - } \ - case 4: \ - { \ - union { _type t; int32_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != __BYTE_ORDER) \ - __swab32s(&__tmp.v); \ - __ctf_tmp_int64 = (int64_t) __tmp.v; \ - break; \ - } \ - case 8: \ - { \ - union { _type t; int64_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != __BYTE_ORDER) \ - __swab64s(&__tmp.v); \ - __ctf_tmp_int64 = (int64_t) __tmp.v; \ - break; \ - } \ - default: \ - BUG_ON(1); \ - }; \ - memcpy(__stack_data, &__ctf_tmp_int64, sizeof(int64_t)); \ - } else { \ - uint64_t __ctf_tmp_uint64; \ - switch (sizeof(_type)) { \ - case 1: \ - { \ - union { _type t; uint8_t v; } __tmp = { (_type) (_src) }; \ - __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ - break; \ - } \ - case 2: \ - { \ - union { _type t; uint16_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != __BYTE_ORDER) \ - __swab16s(&__tmp.v); \ - __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ - break; \ - } \ - case 4: \ - { \ - union { _type t; uint32_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != __BYTE_ORDER) \ - __swab32s(&__tmp.v); \ - __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ - break; \ - } \ - case 8: \ - { \ - union { _type t; uint64_t v; } __tmp = { (_type) (_src) }; \ - if (_byte_order != __BYTE_ORDER) \ - __swab64s(&__tmp.v); \ - __ctf_tmp_uint64 = (uint64_t) __tmp.v; \ - break; \ - } \ - default: \ - BUG_ON(1); \ - }; \ - memcpy(__stack_data, &__ctf_tmp_uint64, sizeof(uint64_t)); \ - } \ - __stack_data += sizeof(int64_t); - -#undef _ctf_integer_ext_isuser0 -#define _ctf_integer_ext_isuser0(_type, _item, _src, _byte_order, _base, _nowrite) \ - _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) - -#undef _ctf_integer_ext_isuser1 -#define _ctf_integer_ext_isuser1(_type, _item, _user_src, _byte_order, _base, _nowrite) \ -{ \ - union { \ - char __array[sizeof(_user_src)]; \ - __typeof__(_user_src) __v; \ - } __tmp_fetch; \ - if (lib_ring_buffer_copy_from_user_check_nofault(__tmp_fetch.__array, \ - &(_user_src), sizeof(_user_src))) \ - memset(__tmp_fetch.__array, 0, sizeof(__tmp_fetch.__array)); \ - _ctf_integer_ext_fetched(_type, _item, __tmp_fetch.__v, _byte_order, _base, _nowrite) \ -} - -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _user_src, _byte_order, _base, _user, _nowrite) \ - _ctf_integer_ext_isuser##_user(_type, _item, _user_src, _byte_order, _base, _nowrite) - -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ - { \ - unsigned long __ctf_tmp_ulong = (unsigned long) (_length); \ - const void *__ctf_tmp_ptr = (_src); \ - memcpy(__stack_data, &__ctf_tmp_ulong, sizeof(unsigned long)); \ - __stack_data += sizeof(unsigned long); \ - memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *)); \ - __stack_data += sizeof(void *); \ - } - -#undef _ctf_array_bitfield -#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ - _ctf_array_encoded(_type, _item, _src, _length, none, __LITTLE_ENDIAN, 0, _user, _nowrite) - -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ - _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ - { \ - unsigned long __ctf_tmp_ulong = (unsigned long) (_src_length); \ - const void *__ctf_tmp_ptr = (_src); \ - memcpy(__stack_data, &__ctf_tmp_ulong, sizeof(unsigned long)); \ - __stack_data += sizeof(unsigned long); \ - memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *)); \ - __stack_data += sizeof(void *); \ - } - -#undef _ctf_sequence_bitfield -#define _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, \ - _user, _nowrite) \ - _ctf_sequence_encoded(_type, _item, _src, _length_type, _src_length, \ - none, __LITTLE_ENDIAN, 10, _user, _nowrite) - -#undef _ctf_string -#define _ctf_string(_item, _src, _user, _nowrite) \ - { \ - const void *__ctf_tmp_ptr = \ - ((_src) ? (_src) : __LTTNG_NULL_STRING); \ - memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *)); \ - __stack_data += sizeof(void *); \ - } - -#undef _ctf_enum -#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ - _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) - -#undef TP_PROTO -#define TP_PROTO(...) __VA_ARGS__ - -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ - -#undef TP_locvar -#define TP_locvar(...) __VA_ARGS__ - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ -static inline \ -void __event_prepare_filter_stack__##_name(char *__stack_data, \ - void *__tp_locvar) \ -{ \ - struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ - \ - _fields \ -} - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ -static inline \ -void __event_prepare_filter_stack__##_name(char *__stack_data, \ - void *__tp_locvar, _proto) \ -{ \ - struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ - \ - _fields \ -} - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -/* - * Stage 5 of the trace events. - * - * Create static inline function that calculates event payload alignment. - */ - -/* Reset all macros within TRACEPOINT_EVENT */ -#include -#include - -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _user, _nowrite) \ - __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); - -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ - __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); - -#undef _ctf_array_bitfield -#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ - _ctf_array_encoded(_type, _item, _src, _length, none, __LITTLE_ENDIAN, 0, _user, _nowrite) - -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ - _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ - __event_align = max_t(size_t, __event_align, lttng_alignof(_length_type)); \ - __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); - -#undef _ctf_sequence_bitfield -#define _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, \ - _user, _nowrite) \ - _ctf_sequence_encoded(_type, _item, _src, _length_type, _src_length, \ - none, __LITTLE_ENDIAN, 10, _user, _nowrite) - -#undef _ctf_string -#define _ctf_string(_item, _src, _user, _nowrite) - -#undef _ctf_enum -#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ - _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) - -#undef ctf_align -#define ctf_align(_type) \ - __event_align = max_t(size_t, __event_align, lttng_alignof(_type)); - -#undef TP_PROTO -#define TP_PROTO(...) __VA_ARGS__ - -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ - -#undef TP_locvar -#define TP_locvar(...) __VA_ARGS__ - -#undef ctf_custom_field -#define ctf_custom_field(_type, _item, _code) _code - -#undef ctf_custom_code -#define ctf_custom_code(...) \ - { \ - __VA_ARGS__ \ - } - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ -static inline size_t __event_get_align__##_name(void *__tp_locvar, _proto) \ -{ \ - size_t __event_align = 1; \ - struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ - \ - _fields \ - return __event_align; \ -} - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ -static inline size_t __event_get_align__##_name(void *__tp_locvar) \ -{ \ - size_t __event_align = 1; \ - struct { _locvar } *tp_locvar __attribute__((unused)) = __tp_locvar; \ - \ - _fields \ - return __event_align; \ -} - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -/* - * Stage 6 of tracepoint event generation. - * - * Create the probe function. This function calls event size calculation - * and writes event data into the buffer. - */ - -/* Reset all macros within TRACEPOINT_EVENT */ -#include -#include - -#undef _ctf_integer_ext_fetched -#define _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) \ - { \ - _type __tmp = _src; \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(__tmp));\ - __chan->ops->event_write(&__ctx, &__tmp, sizeof(__tmp));\ - } - -#undef _ctf_integer_ext_isuser0 -#define _ctf_integer_ext_isuser0(_type, _item, _src, _byte_order, _base, _nowrite) \ - _ctf_integer_ext_fetched(_type, _item, _src, _byte_order, _base, _nowrite) - -#undef _ctf_integer_ext_isuser1 -#define _ctf_integer_ext_isuser1(_type, _item, _user_src, _byte_order, _base, _nowrite) \ -{ \ - union { \ - char __array[sizeof(_user_src)]; \ - __typeof__(_user_src) __v; \ - } __tmp_fetch; \ - if (lib_ring_buffer_copy_from_user_check_nofault(__tmp_fetch.__array, \ - &(_user_src), sizeof(_user_src))) \ - memset(__tmp_fetch.__array, 0, sizeof(__tmp_fetch.__array)); \ - _ctf_integer_ext_fetched(_type, _item, __tmp_fetch.__v, _byte_order, _base, _nowrite) \ -} - -#undef _ctf_integer_ext -#define _ctf_integer_ext(_type, _item, _user_src, _byte_order, _base, _user, _nowrite) \ - _ctf_integer_ext_isuser##_user(_type, _item, _user_src, _byte_order, _base, _nowrite) - -#undef _ctf_array_encoded -#define _ctf_array_encoded(_type, _item, _src, _length, _encoding, _byte_order, _base, _user, _nowrite) \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ - if (_user) { \ - __chan->ops->event_write_from_user(&__ctx, _src, sizeof(_type) * (_length)); \ - } else { \ - __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length)); \ - } - -#if (__BYTE_ORDER == __LITTLE_ENDIAN) -#undef _ctf_array_bitfield -#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ - if (_user) { \ - __chan->ops->event_write_from_user(&__ctx, _src, sizeof(_type) * (_length)); \ - } else { \ - __chan->ops->event_write(&__ctx, _src, sizeof(_type) * (_length)); \ - } -#else /* #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ -/* - * For big endian, we need to byteswap into little endian. - */ -#undef _ctf_array_bitfield -#define _ctf_array_bitfield(_type, _item, _src, _length, _user, _nowrite) \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ - { \ - size_t _i; \ - \ - for (_i = 0; _i < (_length); _i++) { \ - _type _tmp; \ - \ - if (_user) { \ - if (get_user(_tmp, (_type *) _src + _i)) \ - _tmp = 0; \ - } else { \ - _tmp = ((_type *) _src)[_i]; \ - } \ - switch (sizeof(_type)) { \ - case 1: \ - break; \ - case 2: \ - _tmp = cpu_to_le16(_tmp); \ - break; \ - case 4: \ - _tmp = cpu_to_le32(_tmp); \ - break; \ - case 8: \ - _tmp = cpu_to_le64(_tmp); \ - break; \ - default: \ - BUG_ON(1); \ - } \ - __chan->ops->event_write(&__ctx, &_tmp, sizeof(_type)); \ - } \ - } -#endif /* #else #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ - -#undef _ctf_sequence_encoded -#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \ - _src_length, _encoding, _byte_order, _base, _user, _nowrite) \ - { \ - _length_type __tmpl = this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx]; \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\ - __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type));\ - } \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ - if (_user) { \ - __chan->ops->event_write_from_user(&__ctx, _src, \ - sizeof(_type) * __get_dynamic_len(dest)); \ - } else { \ - __chan->ops->event_write(&__ctx, _src, \ - sizeof(_type) * __get_dynamic_len(dest)); \ - } - -#if (__BYTE_ORDER == __LITTLE_ENDIAN) -#undef _ctf_sequence_bitfield -#define _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, \ - _user, _nowrite) \ - { \ - _length_type __tmpl = this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx] * sizeof(_type) * CHAR_BIT; \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\ - __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type));\ - } \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ - if (_user) { \ - __chan->ops->event_write_from_user(&__ctx, _src, \ - sizeof(_type) * __get_dynamic_len(dest)); \ - } else { \ - __chan->ops->event_write(&__ctx, _src, \ - sizeof(_type) * __get_dynamic_len(dest)); \ - } -#else /* #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ -/* - * For big endian, we need to byteswap into little endian. - */ -#undef _ctf_sequence_bitfield -#define _ctf_sequence_bitfield(_type, _item, _src, \ - _length_type, _src_length, \ - _user, _nowrite) \ - { \ - _length_type __tmpl = this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx] * sizeof(_type) * CHAR_BIT; \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\ - __chan->ops->event_write(&__ctx, &__tmpl, sizeof(_length_type));\ - } \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); \ - { \ - size_t _i, _length; \ - \ - _length = __get_dynamic_len(dest); \ - for (_i = 0; _i < _length; _i++) { \ - _type _tmp; \ - \ - if (_user) { \ - if (get_user(_tmp, (_type *) _src + _i)) \ - _tmp = 0; \ - } else { \ - _tmp = ((_type *) _src)[_i]; \ - } \ - switch (sizeof(_type)) { \ - case 1: \ - break; \ - case 2: \ - _tmp = cpu_to_le16(_tmp); \ - break; \ - case 4: \ - _tmp = cpu_to_le32(_tmp); \ - break; \ - case 8: \ - _tmp = cpu_to_le64(_tmp); \ - break; \ - default: \ - BUG_ON(1); \ - } \ - __chan->ops->event_write(&__ctx, &_tmp, sizeof(_type)); \ - } \ - } -#endif /* #else #if (__BYTE_ORDER == __LITTLE_ENDIAN) */ - -#undef _ctf_string -#define _ctf_string(_item, _src, _user, _nowrite) \ - if (_user) { \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(*(_src))); \ - __chan->ops->event_strcpy_from_user(&__ctx, _src, \ - __get_dynamic_len(dest)); \ - } else { \ - const char *__ctf_tmp_string = \ - ((_src) ? (_src) : __LTTNG_NULL_STRING); \ - lib_ring_buffer_align_ctx(&__ctx, \ - lttng_alignof(*__ctf_tmp_string)); \ - __chan->ops->event_strcpy(&__ctx, __ctf_tmp_string, \ - __get_dynamic_len(dest)); \ - } - -#undef _ctf_enum -#define _ctf_enum(_name, _type, _item, _src, _user, _nowrite) \ - _ctf_integer_ext(_type, _item, _src, __BYTE_ORDER, 10, _user, _nowrite) - -#undef ctf_align -#define ctf_align(_type) \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_type)); - -#undef ctf_custom_field -#define ctf_custom_field(_type, _item, _code) _code - -#undef ctf_custom_code -#define ctf_custom_code(...) \ - { \ - __VA_ARGS__ \ - } - -/* Beware: this get len actually consumes the len value */ -#undef __get_dynamic_len -#define __get_dynamic_len(field) this_cpu_ptr(<tng_dynamic_len_stack)->stack[__dynamic_len_idx++] - -#undef TP_PROTO -#define TP_PROTO(...) __VA_ARGS__ - -#undef TP_ARGS -#define TP_ARGS(...) __VA_ARGS__ - -#undef TP_FIELDS -#define TP_FIELDS(...) __VA_ARGS__ - -#undef TP_locvar -#define TP_locvar(...) __VA_ARGS__ - -#undef TP_code_pre -#define TP_code_pre(...) __VA_ARGS__ - -#undef TP_code_post -#define TP_code_post(...) __VA_ARGS__ - -/* - * For state dump, check that "session" argument (mandatory) matches the - * session this event belongs to. Ensures that we write state dump data only - * into the started session, not into all sessions. - */ -#ifdef TP_SESSION_CHECK -#define _TP_SESSION_CHECK(session, csession) (session == csession) -#else /* TP_SESSION_CHECK */ -#define _TP_SESSION_CHECK(session, csession) 1 -#endif /* TP_SESSION_CHECK */ - -/* - * Using twice size for filter stack data to hold size and pointer for - * each field (worse case). For integers, max size required is 64-bit. - * Same for double-precision floats. Those fit within - * 2*sizeof(unsigned long) for all supported architectures. - * Perform UNION (||) of filter runtime list. - */ -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) \ -static void __event_probe__##_name(void *__data, _proto) \ -{ \ - struct probe_local_vars { _locvar }; \ - struct lttng_event *__event = __data; \ - struct lttng_probe_ctx __lttng_probe_ctx = { \ - .event = __event, \ - .interruptible = !irqs_disabled(), \ - }; \ - struct lttng_channel *__chan = __event->chan; \ - struct lttng_session *__session = __chan->session; \ - struct lib_ring_buffer_ctx __ctx; \ - ssize_t __event_len; \ - size_t __event_align; \ - size_t __orig_dynamic_len_offset, __dynamic_len_idx __attribute__((unused)); \ - union { \ - size_t __dynamic_len_removed[ARRAY_SIZE(__event_fields___##_name)]; \ - char __filter_stack_data[2 * sizeof(unsigned long) * ARRAY_SIZE(__event_fields___##_name)]; \ - } __stackvar; \ - int __ret; \ - struct probe_local_vars __tp_locvar; \ - struct probe_local_vars *tp_locvar __attribute__((unused)) = \ - &__tp_locvar; \ - struct lttng_id_tracker_rcu *__lf; \ - \ - if (!_TP_SESSION_CHECK(session, __session)) \ - return; \ - if (unlikely(!READ_ONCE(__session->active))) \ - return; \ - if (unlikely(!READ_ONCE(__chan->enabled))) \ - return; \ - if (unlikely(!READ_ONCE(__event->enabled))) \ - return; \ - __lf = lttng_rcu_dereference(__session->pid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid))) \ - return; \ - __lf = lttng_rcu_dereference(__session->vpid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, task_tgid_vnr(current)))) \ - return; \ - __lf = lttng_rcu_dereference(__session->uid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ - lttng_current_uid()))) \ - return; \ - __lf = lttng_rcu_dereference(__session->vuid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ - lttng_current_vuid()))) \ - return; \ - __lf = lttng_rcu_dereference(__session->gid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ - lttng_current_gid()))) \ - return; \ - __lf = lttng_rcu_dereference(__session->vgid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ - lttng_current_vgid()))) \ - return; \ - __orig_dynamic_len_offset = this_cpu_ptr(<tng_dynamic_len_stack)->offset; \ - __dynamic_len_idx = __orig_dynamic_len_offset; \ - _code_pre \ - if (unlikely(!list_empty(&__event->bytecode_runtime_head))) { \ - struct lttng_bytecode_runtime *bc_runtime; \ - int __filter_record = __event->has_enablers_without_bytecode; \ - \ - __event_prepare_filter_stack__##_name(__stackvar.__filter_stack_data, \ - tp_locvar, _args); \ - lttng_list_for_each_entry_rcu(bc_runtime, &__event->bytecode_runtime_head, node) { \ - if (unlikely(bc_runtime->filter(bc_runtime, &__lttng_probe_ctx, \ - __stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) { \ - __filter_record = 1; \ - break; \ - } \ - } \ - if (likely(!__filter_record)) \ - goto __post; \ - } \ - __event_len = __event_get_size__##_name(tp_locvar, _args); \ - if (unlikely(__event_len < 0)) { \ - lib_ring_buffer_lost_event_too_big(__chan->chan); \ - goto __post; \ - } \ - __event_align = __event_get_align__##_name(tp_locvar, _args); \ - lib_ring_buffer_ctx_init(&__ctx, __chan->chan, &__lttng_probe_ctx, __event_len, \ - __event_align, -1); \ - __ret = __chan->ops->event_reserve(&__ctx, __event->id); \ - if (__ret < 0) \ - goto __post; \ - _fields \ - __chan->ops->event_commit(&__ctx); \ -__post: \ - _code_post \ - barrier(); /* use before un-reserve. */ \ - this_cpu_ptr(<tng_dynamic_len_stack)->offset = __orig_dynamic_len_offset; \ - return; \ -} - -#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) \ -static void __event_probe__##_name(void *__data) \ -{ \ - struct probe_local_vars { _locvar }; \ - struct lttng_event *__event = __data; \ - struct lttng_probe_ctx __lttng_probe_ctx = { \ - .event = __event, \ - .interruptible = !irqs_disabled(), \ - }; \ - struct lttng_channel *__chan = __event->chan; \ - struct lttng_session *__session = __chan->session; \ - struct lib_ring_buffer_ctx __ctx; \ - ssize_t __event_len; \ - size_t __event_align; \ - size_t __orig_dynamic_len_offset, __dynamic_len_idx __attribute__((unused)); \ - union { \ - size_t __dynamic_len_removed[ARRAY_SIZE(__event_fields___##_name)]; \ - char __filter_stack_data[2 * sizeof(unsigned long) * ARRAY_SIZE(__event_fields___##_name)]; \ - } __stackvar; \ - int __ret; \ - struct probe_local_vars __tp_locvar; \ - struct probe_local_vars *tp_locvar __attribute__((unused)) = \ - &__tp_locvar; \ - struct lttng_id_tracker_rcu *__lf; \ - \ - if (!_TP_SESSION_CHECK(session, __session)) \ - return; \ - if (unlikely(!READ_ONCE(__session->active))) \ - return; \ - if (unlikely(!READ_ONCE(__chan->enabled))) \ - return; \ - if (unlikely(!READ_ONCE(__event->enabled))) \ - return; \ - __lf = lttng_rcu_dereference(__session->pid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid))) \ - return; \ - __lf = lttng_rcu_dereference(__session->vpid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, task_tgid_vnr(current)))) \ - return; \ - __lf = lttng_rcu_dereference(__session->uid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ - lttng_current_uid()))) \ - return; \ - __lf = lttng_rcu_dereference(__session->vuid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ - lttng_current_vuid()))) \ - return; \ - __lf = lttng_rcu_dereference(__session->gid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ - lttng_current_gid()))) \ - return; \ - __lf = lttng_rcu_dereference(__session->vgid_tracker.p); \ - if (__lf && likely(!lttng_id_tracker_lookup(__lf, \ - lttng_current_vgid()))) \ - return; \ - __orig_dynamic_len_offset = this_cpu_ptr(<tng_dynamic_len_stack)->offset; \ - __dynamic_len_idx = __orig_dynamic_len_offset; \ - _code_pre \ - if (unlikely(!list_empty(&__event->bytecode_runtime_head))) { \ - struct lttng_bytecode_runtime *bc_runtime; \ - int __filter_record = __event->has_enablers_without_bytecode; \ - \ - __event_prepare_filter_stack__##_name(__stackvar.__filter_stack_data, \ - tp_locvar); \ - lttng_list_for_each_entry_rcu(bc_runtime, &__event->bytecode_runtime_head, node) { \ - if (unlikely(bc_runtime->filter(bc_runtime, &__lttng_probe_ctx, \ - __stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) { \ - __filter_record = 1; \ - break; \ - } \ - } \ - if (likely(!__filter_record)) \ - goto __post; \ - } \ - __event_len = __event_get_size__##_name(tp_locvar); \ - if (unlikely(__event_len < 0)) { \ - lib_ring_buffer_lost_event_too_big(__chan->chan); \ - goto __post; \ - } \ - __event_align = __event_get_align__##_name(tp_locvar); \ - lib_ring_buffer_ctx_init(&__ctx, __chan->chan, &__lttng_probe_ctx, __event_len, \ - __event_align, -1); \ - __ret = __chan->ops->event_reserve(&__ctx, __event->id); \ - if (__ret < 0) \ - goto __post; \ - _fields \ - __chan->ops->event_commit(&__ctx); \ -__post: \ - _code_post \ - barrier(); /* use before un-reserve. */ \ - this_cpu_ptr(<tng_dynamic_len_stack)->offset = __orig_dynamic_len_offset; \ - return; \ -} - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -#undef __get_dynamic_len - -/* - * Stage 7 of the trace events. - * - * Create event descriptions. - */ - -/* Named field types must be defined in lttng-types.h */ - -#include /* Reset all macros within LTTNG_TRACEPOINT_EVENT */ - -#ifndef TP_PROBE_CB -#define TP_PROBE_CB(_template) &__event_probe__##_template -#endif - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ -static const struct lttng_event_desc __event_desc___##_map = { \ - .fields = __event_fields___##_template, \ - .name = #_map, \ - .kname = #_name, \ - .probe_callback = (void *) TP_PROBE_CB(_template), \ - .nr_fields = ARRAY_SIZE(__event_fields___##_template), \ - .owner = THIS_MODULE, \ -}; - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) - -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) - -/* - * Stage 8 of the trace events. - * - * Create an array of event description pointers. - */ - -#include /* Reset all macros within LTTNG_TRACEPOINT_EVENT */ - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ - &__event_desc___##_map, - -#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ - LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) - -#define TP_ID1(_token, _system) _token##_system -#define TP_ID(_token, _system) TP_ID1(_token, _system) - -static const struct lttng_event_desc *TP_ID(__event_desc___, TRACE_SYSTEM)[] = { -#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) -}; - -#undef TP_ID1 -#undef TP_ID - -/* - * Stage 9 of the trace events. - * - * Create a toplevel descriptor for the whole probe. - */ - -#define TP_ID1(_token, _system) _token##_system -#define TP_ID(_token, _system) TP_ID1(_token, _system) - -/* non-const because list head will be modified when registered. */ -static __used struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = { - .provider = __stringify(TRACE_SYSTEM), - .event_desc = TP_ID(__event_desc___, TRACE_SYSTEM), - .nr_events = ARRAY_SIZE(TP_ID(__event_desc___, TRACE_SYSTEM)), - .head = { NULL, NULL }, - .lazy_init_head = { NULL, NULL }, - .lazy = 0, -}; - -#undef TP_ID1 -#undef TP_ID - -/* - * Stage 10 of the trace events. - * - * Register/unregister probes at module load/unload. - */ - -#include /* Reset all macros within LTTNG_TRACEPOINT_EVENT */ - -#define TP_ID1(_token, _system) _token##_system -#define TP_ID(_token, _system) TP_ID1(_token, _system) -#define module_init_eval1(_token, _system) module_init(_token##_system) -#define module_init_eval(_token, _system) module_init_eval1(_token, _system) -#define module_exit_eval1(_token, _system) module_exit(_token##_system) -#define module_exit_eval(_token, _system) module_exit_eval1(_token, _system) - -#ifndef TP_MODULE_NOINIT -static int TP_ID(__lttng_events_init__, TRACE_SYSTEM)(void) -{ - wrapper_vmalloc_sync_mappings(); - return lttng_probe_register(&TP_ID(__probe_desc___, TRACE_SYSTEM)); -} - -static void TP_ID(__lttng_events_exit__, TRACE_SYSTEM)(void) -{ - lttng_probe_unregister(&TP_ID(__probe_desc___, TRACE_SYSTEM)); -} - -#ifndef TP_MODULE_NOAUTOLOAD -module_init_eval(__lttng_events_init__, TRACE_SYSTEM); -module_exit_eval(__lttng_events_exit__, TRACE_SYSTEM); -#endif - -#endif - -#undef module_init_eval -#undef module_exit_eval -#undef TP_ID1 -#undef TP_ID - -#undef TP_PROTO -#undef TP_ARGS diff --git a/probes/lttng-tracepoint-event.h b/probes/lttng-tracepoint-event.h deleted file mode 100644 index 1a66245e..00000000 --- a/probes/lttng-tracepoint-event.h +++ /dev/null @@ -1,51 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) - * - * lttng-tracepoint-event.h - * - * Copyright (C) 2014 Mathieu Desnoyers - */ - -#ifndef LTTNG_TRACEPOINT_EVENT_H -#define LTTNG_TRACEPOINT_EVENT_H - -#include - -/* - * If code defines LTTNG_INSTRUMENTATION before including the instrumentation - * header, generate the instrumentation static inlines. Else, it means - * we are a probe for the Linux kernel, and it is the probe responsibility - * to have already included the Linux kernel instrumentation header. - */ -#ifdef LTTNG_INSTRUMENTATION -#define _LTTNG_INSTRUMENTATION(...) __VA_ARGS__ -#else -#define _LTTNG_INSTRUMENTATION(...) -#endif - -#define LTTNG_TRACEPOINT_EVENT(name, proto, args, fields) \ - _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) -#define LTTNG_TRACEPOINT_EVENT_CODE(name, proto, args, _locvar, _code_pre, fields, _code_post) \ - _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) -#define LTTNG_TRACEPOINT_EVENT_CODE_MAP(name, map, proto, args, _locvar, _code_pre, fields, _code_post) \ - _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) -#define LTTNG_TRACEPOINT_EVENT_MAP(name, map, proto, args, fields) \ - _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) -#define LTTNG_TRACEPOINT_EVENT_MAP_NOARGS(name, map, fields) \ - _LTTNG_INSTRUMENTATION(DECLARE_TRACE_NOARGS(name)) - -#define LTTNG_TRACEPOINT_EVENT_CLASS(name, proto, args, fields) -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code_pre, _fields, _code_post) -#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code_pre, _fields, _code_post) - -#define LTTNG_TRACEPOINT_EVENT_INSTANCE(template, name, proto, args) \ - _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name) \ - _LTTNG_INSTRUMENTATION(DECLARE_TRACE_NOARGS(name)) -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ - _LTTNG_INSTRUMENTATION(DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))) -#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ - _LTTNG_INSTRUMENTATION(DECLARE_TRACE_NOARGS(name)) - -#define LTTNG_TRACEPOINT_ENUM(_name, _values) - -#endif /* LTTNG_TRACEPOINT_EVENT_H */ diff --git a/probes/lttng-types.h b/probes/lttng-types.h deleted file mode 100644 index f6b4785f..00000000 --- a/probes/lttng-types.h +++ /dev/null @@ -1,71 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) - * - * probes/lttng-types.h - * - * LTTng types. - * - * Copyright (C) 2010-2012 Mathieu Desnoyers - */ - -/* - * Protect against multiple inclusion of structure declarations, but run the - * stages below each time. - */ -#ifndef _LTTNG_PROBES_LTTNG_TYPES_H -#define _LTTNG_PROBES_LTTNG_TYPES_H - -#include -#include -#include -#include -#include - -#endif /* _LTTNG_PROBES_LTTNG_TYPES_H */ - -/* Export enumerations */ - -#ifdef STAGE_EXPORT_ENUMS - -#undef TRACE_EVENT_TYPE -#define TRACE_EVENT_TYPE(_name, _abstract_type, args...) - -#undef TRACE_EVENT_ENUM -#define TRACE_EVENT_ENUM(_name, _entries...) \ - const struct lttng_enum_entry __trace_event_enum_##_name[] = { \ - PARAMS(_entries) \ - }; - -/* Enumeration entry (single value) */ -#undef V -#define V(_string) { _string, _string, #_string} - -/* Enumeration entry (range) */ -#undef R -#define R(_string, _range_start, _range_end) \ - { _range_start, _range_end, #_string } - -#endif /* STAGE_EXPORT_ENUMS */ - - -/* Export named types */ - -#ifdef STAGE_EXPORT_TYPES - -#undef TRACE_EVENT_TYPE___enum -#define TRACE_EVENT_TYPE___enum(_name, _container_type) \ - { \ - .name = #_name, \ - .container_type = __type_integer(_container_type, 0, 0, -1, __BYTE_ORDER, 10, none), \ - .entries = __trace_event_enum_##_name, \ - .len = ARRAY_SIZE(__trace_event_enum_##_name), \ - }, - -/* Local declaration */ -#undef TRACE_EVENT_TYPE -#define TRACE_EVENT_TYPE(_name, _abstract_type, args...) \ - TRACE_EVENT_TYPE___##_abstract_type(_name, args) - -#undef TRACE_EVENT_ENUM -#define TRACE_EVENT_ENUM(_name, _entries...) - -#endif /* STAGE_EXPORT_TYPES */ diff --git a/probes/lttng.h b/probes/lttng.h deleted file mode 100644 index 7d153be3..00000000 --- a/probes/lttng.h +++ /dev/null @@ -1,14 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) - * - * lttng.h - * - * Copyright (C) 2010-2012 Mathieu Desnoyers - */ - -#ifndef _LTTNG_PROBES_LTTNG_H -#define _LTTNG_PROBES_LTTNG_H - -#undef PARAMS -#define PARAMS(args...) args - -#endif /* _LTTNG_PROBES_LTTNG_H */