From: mathieu.desnoyers@efficios.com (Mathieu Desnoyers)
Subject: [lttng-dev] [RFC PATCH lttng-ust] Fix: don't generate 0-len array in tracepoint probes
Date: Mon, 30 May 2016 18:56:49 +0200 [thread overview]
Message-ID: <1464627409-28142-1-git-send-email-mathieu.desnoyers@efficios.com> (raw)
It is forbidden by C99, and gcc/g++ in pedantic mode generates errors
for e.g. field-less events.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
---
include/lttng/ust-tracepoint-event.h | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/include/lttng/ust-tracepoint-event.h b/include/lttng/ust-tracepoint-event.h
index 645c566..d9801a8 100644
--- a/include/lttng/ust-tracepoint-event.h
+++ b/include/lttng/ust-tracepoint-event.h
@@ -169,6 +169,7 @@ static const char \
#define TRACEPOINT_ENUM(_provider, _name, _values) \
const struct lttng_enum_entry __enum_values__##_provider##_##_name[] = { \
_values \
+ ctf_enum_value("", 0) /* Dummy, 0-len array forbidden by C99. */ \
};
#include TRACEPOINT_INCLUDE
@@ -290,6 +291,7 @@ static const char \
#define TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \
static const struct lttng_event_field __event_fields___##_provider##___##_name[] = { \
_fields \
+ ctf_integer(int, dummy, 0) /* Dummy, C99 forbids 0-len array. */ \
};
#undef TRACEPOINT_ENUM
@@ -297,7 +299,7 @@ static const char \
static const struct lttng_enum_desc __enum_##_provider##_##_name = { \
.name = #_provider "_" #_name, \
.entries = __enum_values__##_provider##_##_name, \
- .nr_entries = _TP_ARRAY_SIZE(__enum_values__##_provider##_##_name), \
+ .nr_entries = _TP_ARRAY_SIZE(__enum_values__##_provider##_##_name) - 1, \
};
#include TRACEPOINT_INCLUDE
@@ -735,8 +737,8 @@ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \
size_t __event_len, __event_align; \
size_t __dynamic_len_idx = 0; \
union { \
- size_t __dynamic_len[_TP_ARRAY_SIZE(__event_fields___##_provider##___##_name)]; \
- char __filter_stack_data[2 * sizeof(unsigned long) * _TP_ARRAY_SIZE(__event_fields___##_provider##___##_name)]; \
+ size_t __dynamic_len[_TP_ARRAY_SIZE(__event_fields___##_provider##___##_name) - 1]; \
+ char __filter_stack_data[2 * sizeof(unsigned long) * (_TP_ARRAY_SIZE(__event_fields___##_provider##___##_name) - 1)]; \
} __stackvar; \
int __ret; \
\
@@ -869,7 +871,7 @@ static const struct lttng_event_desc __event_desc___##_provider##_##_name = {
.probe_callback = (void (*)(void)) &__event_probe__##_provider##___##_template,\
.ctx = NULL, \
.fields = __event_fields___##_provider##___##_template, \
- .nr_fields = _TP_ARRAY_SIZE(__event_fields___##_provider##___##_template), \
+ .nr_fields = _TP_ARRAY_SIZE(__event_fields___##_provider##___##_template) - 1, \
.loglevel = &__ref_loglevel___##_provider##___##_name, \
.signature = __tp_event_signature___##_provider##___##_template, \
.u = { \
@@ -896,6 +898,7 @@ static const struct lttng_event_desc __event_desc___##_provider##_##_name = {
static const struct lttng_event_desc *_TP_COMBINE_TOKENS(__event_desc___, TRACEPOINT_PROVIDER)[] = {
#include TRACEPOINT_INCLUDE
+ NULL, /* Dummy, C99 forbids 0-len array. */
};
@@ -909,7 +912,7 @@ static const struct lttng_event_desc *_TP_COMBINE_TOKENS(__event_desc___, TRACEP
static struct lttng_probe_desc _TP_COMBINE_TOKENS(__probe_desc___, TRACEPOINT_PROVIDER) = {
.provider = __tp_stringify(TRACEPOINT_PROVIDER),
.event_desc = _TP_COMBINE_TOKENS(__event_desc___, TRACEPOINT_PROVIDER),
- .nr_events = _TP_ARRAY_SIZE(_TP_COMBINE_TOKENS(__event_desc___, TRACEPOINT_PROVIDER)),
+ .nr_events = _TP_ARRAY_SIZE(_TP_COMBINE_TOKENS(__event_desc___, TRACEPOINT_PROVIDER)) - 1,
.head = { NULL, NULL },
.lazy_init_head = { NULL, NULL },
.lazy = 0,
--
2.1.4
next reply other threads:[~2016-05-30 16:56 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-30 16:56 Mathieu Desnoyers [this message]
2016-05-30 18:08 Sebastien Boisvert
2016-05-31 9:36 ` Mathieu Desnoyers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1464627409-28142-1-git-send-email-mathieu.desnoyers@efficios.com \
--to=mathieu.desnoyers@efficios.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox