projects
/
lttng-ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: Argument with 'nonnull' attribute passed null
[lttng-ust.git]
/
include
/
lttng
/
ust-tracepoint-event.h
diff --git
a/include/lttng/ust-tracepoint-event.h
b/include/lttng/ust-tracepoint-event.h
index 8140b9df78c32425e0ea97f6185a4844bda9cfc7..d9aa6ce6bdb8f8496b7b7a1dc41facf20ca6a169 100644
(file)
--- a/
include/lttng/ust-tracepoint-event.h
+++ b/
include/lttng/ust-tracepoint-event.h
@@
-75,6
+75,8
@@
/* Reset all macros within TRACEPOINT_EVENT */
#include <lttng/ust-tracepoint-event-reset.h>
/* Reset all macros within TRACEPOINT_EVENT */
#include <lttng/ust-tracepoint-event-reset.h>
+static inline lttng_ust_notrace
+void _TP_COMBINE_TOKENS(__tracepoint_provider_mismatch_, TRACEPOINT_PROVIDER)(void);
static inline
void _TP_COMBINE_TOKENS(__tracepoint_provider_mismatch_, TRACEPOINT_PROVIDER)(void)
{
static inline
void _TP_COMBINE_TOKENS(__tracepoint_provider_mismatch_, TRACEPOINT_PROVIDER)(void)
{
@@
-88,6
+90,8
@@
void _TP_COMBINE_TOKENS(__tracepoint_provider_mismatch_, TRACEPOINT_PROVIDER)(vo
#define TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \
__tracepoint_provider_mismatch_##_provider();
#define TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \
__tracepoint_provider_mismatch_##_provider();
+static inline lttng_ust_notrace
+void _TP_COMBINE_TOKENS(__tracepoint_provider_check_, TRACEPOINT_PROVIDER)(void);
static inline
void _TP_COMBINE_TOKENS(__tracepoint_provider_check_, TRACEPOINT_PROVIDER)(void)
{
static inline
void _TP_COMBINE_TOKENS(__tracepoint_provider_check_, TRACEPOINT_PROVIDER)(void)
{
@@
-161,8
+165,9
@@
static const char \
},
#undef _ctf_sequence_encoded
},
#undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, \
- _length_type, _src_length, _encoding, _nowrite) \
+#define _ctf_sequence_encoded(_type, _item, _src, \
+ _length_type, _src_length, _encoding, _nowrite, \
+ _elem_type_base) \
{ \
.name = #_item, \
.type = \
{ \
.name = #_item, \
.type = \
@@
-173,7
+178,7
@@
static const char \
.sequence = \
{ \
.length_type = __type_integer(_length_type, BYTE_ORDER, 10, none), \
.sequence = \
{ \
.length_type = __type_integer(_length_type, BYTE_ORDER, 10, none), \
- .elem_type = __type_integer(_type, BYTE_ORDER,
10
, _encoding), \
+ .elem_type = __type_integer(_type, BYTE_ORDER,
_elem_type_base
, _encoding), \
}, \
}, \
}, \
}, \
}, \
}, \
@@
-250,8
+255,8
@@
static void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args));
__event_len += sizeof(_type) * (_length);
#undef _ctf_sequence_encoded
__event_len += sizeof(_type) * (_length);
#undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
- _src_length, _encoding, _nowrite) \
+#define _ctf_sequence_encoded(_type, _item, _src, _length_type,
\
+ _src_length, _encoding, _nowrite
, _elem_type_base
) \
__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)); \
__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)); \
@@
-381,28
+386,28
@@
size_t __event_get_size__##_provider##___##_name(size_t *__dynamic_len, _TP_ARGS
const void *__ctf_tmp_ptr = (_src); \
memcpy(__stack_data, &__ctf_tmp_ulong, sizeof(unsigned long)); \
__stack_data += sizeof(unsigned long); \
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 *
*);
\
+ memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *
));
\
+ __stack_data += sizeof(void *
);
\
}
#undef _ctf_sequence_encoded
#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
}
#undef _ctf_sequence_encoded
#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
- _src_length, _encoding, _nowrite
)
\
+ _src_length, _encoding, _nowrite
, _elem_type_base)
\
{ \
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); \
{ \
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 *
*);
\
+ memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *
));
\
+ __stack_data += sizeof(void *
);
\
}
#undef _ctf_string
#define _ctf_string(_item, _src, _nowrite) \
{ \
const void *__ctf_tmp_ptr = (_src); \
}
#undef _ctf_string
#define _ctf_string(_item, _src, _nowrite) \
{ \
const void *__ctf_tmp_ptr = (_src); \
- memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *
*));
\
- __stack_data += sizeof(void *
*);
\
+ memcpy(__stack_data, &__ctf_tmp_ptr, sizeof(void *
));
\
+ __stack_data += sizeof(void *
);
\
}
#undef TP_ARGS
}
#undef TP_ARGS
@@
-447,8
+452,8
@@
void __event_prepare_filter_stack__##_provider##___##_name(char *__stack_data,\
__event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_type));
#undef _ctf_sequence_encoded
__event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_type));
#undef _ctf_sequence_encoded
-#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
- _src_length, _encoding, _nowrite
)
\
+#define _ctf_sequence_encoded(_type, _item, _src, _length_type,
\
+ _src_length, _encoding, _nowrite
, _elem_type_base)
\
__event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_length_type)); \
__event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_type));
__event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_length_type)); \
__event_align = _tp_max_t(size_t, __event_align, lttng_alignof(_type));
@@
-510,7
+515,7
@@
size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args)) \
#undef _ctf_sequence_encoded
#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
#undef _ctf_sequence_encoded
#define _ctf_sequence_encoded(_type, _item, _src, _length_type, \
- _src_length, _encoding, _nowrite
)
\
+ _src_length, _encoding, _nowrite
, _elem_type_base)
\
{ \
_length_type __tmpl = __stackvar.__dynamic_len[__dynamic_len_idx]; \
lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\
{ \
_length_type __tmpl = __stackvar.__dynamic_len[__dynamic_len_idx]; \
lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(_length_type));\
@@
-520,10
+525,24
@@
size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args)) \
__chan->ops->event_write(&__ctx, _src, \
sizeof(_type) * __get_dynamic_len(dest));
__chan->ops->event_write(&__ctx, _src, \
sizeof(_type) * __get_dynamic_len(dest));
+/*
+ * __chan->ops->u.has_strcpy is a flag letting us know if the LTTng-UST
+ * tracepoint provider ABI implements event_strcpy. This dynamic check
+ * can be removed when the tracepoint provider ABI moves to 2.
+ */
+#if (LTTNG_UST_PROVIDER_MAJOR > 1)
+#error "Tracepoint probe provider major version has changed. Please remove dynamic check for has_strcpy."
+#endif
+
#undef _ctf_string
#define _ctf_string(_item, _src, _nowrite) \
lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(*(_src))); \
#undef _ctf_string
#define _ctf_string(_item, _src, _nowrite) \
lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(*(_src))); \
- __chan->ops->event_write(&__ctx, _src, __get_dynamic_len(dest));
+ if (__chan->ops->u.has_strcpy) \
+ __chan->ops->event_strcpy(&__ctx, _src, \
+ __get_dynamic_len(dest)); \
+ else \
+ __chan->ops->event_write(&__ctx, _src, \
+ __get_dynamic_len(dest));
/* Beware: this get len actually consumes the len value */
#undef __get_dynamic_len
/* Beware: this get len actually consumes the len value */
#undef __get_dynamic_len
@@
-547,6
+566,13
@@
size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args)) \
#define _TP_SESSION_CHECK(session, csession) 1
#endif /* TP_SESSION_CHECK */
#define _TP_SESSION_CHECK(session, csession) 1
#endif /* TP_SESSION_CHECK */
+#undef _TP_IP_PARAM
+#ifdef TP_IP_PARAM
+#define _TP_IP_PARAM(x) (x)
+#else /* TP_IP_PARAM */
+#define _TP_IP_PARAM(x) __builtin_return_address(0)
+#endif /* TP_IP_PARAM */
+
/*
* 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.
/*
* 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.
@@
-603,7
+629,7
@@
void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \
__event_align = __event_get_align__##_provider##___##_name(_TP_ARGS_VAR(_args)); \
lib_ring_buffer_ctx_init(&__ctx, __chan->chan, __event, __event_len, \
__event_align, -1, __chan->handle); \
__event_align = __event_get_align__##_provider##___##_name(_TP_ARGS_VAR(_args)); \
lib_ring_buffer_ctx_init(&__ctx, __chan->chan, __event, __event_len, \
__event_align, -1, __chan->handle); \
- __ctx.ip = _
_builtin_return_address(0);
\
+ __ctx.ip = _
TP_IP_PARAM(TP_IP_PARAM);
\
__ret = __chan->ops->event_reserve(&__ctx, __event->id); \
if (__ret < 0) \
return; \
__ret = __chan->ops->event_reserve(&__ctx, __event->id); \
if (__ret < 0) \
return; \
This page took
0.043903 seconds
and
4
git commands to generate.