From c570be0da77e963d77bac099d468bc0cd5f1bd63 Mon Sep 17 00:00:00 2001
|
From: Michael Jeanson <mjeanson@efficios.com>
|
Date: Mon, 13 Sep 2021 14:16:22 -0400
|
Subject: [PATCH 2/2] fix: Revert "Makefile: Enable -Wimplicit-fallthrough for
|
Clang" (v5.15)
|
MIME-Version: 1.0
|
Content-Type: text/plain; charset=UTF-8
|
Content-Transfer-Encoding: 8bit
|
|
Starting with v5.15, "-Wimplicit-fallthrough=5" was added to the build
|
flags which requires the use of "__attribute__((__fallthrough__))" to
|
annotate fallthrough case statements.
|
|
See upstream commit by the man himself:
|
|
commit d936eb23874433caa3e3d841cfa16f5434b85dcf
|
Author: Linus Torvalds <torvalds@linux-foundation.org>
|
Date: Thu Jul 15 18:05:31 2021 -0700
|
|
Revert "Makefile: Enable -Wimplicit-fallthrough for Clang"
|
|
This reverts commit b7eb335e26a9c7f258c96b3962c283c379d3ede0.
|
|
It turns out that the problem with the clang -Wimplicit-fallthrough
|
warning is not about the kernel source code, but about clang itself, and
|
that the warning is unusable until clang fixes its broken ways.
|
|
In particular, when you enable this warning for clang, you not only get
|
warnings about implicit fallthroughs. You also get this:
|
|
warning: fallthrough annotation in unreachable code [-Wimplicit-fallthrough]
|
|
which is completely broken becasue it
|
|
(a) doesn't even tell you where the problem is (seriously: no line
|
numbers, no filename, no nothing).
|
|
(b) is fundamentally broken anyway, because there are perfectly valid
|
reasons to have a fallthrough statement even if it turns out that
|
it can perhaps not be reached.
|
|
In the kernel, an example of that second case is code in the scheduler:
|
|
switch (state) {
|
case cpuset:
|
if (IS_ENABLED(CONFIG_CPUSETS)) {
|
cpuset_cpus_allowed_fallback(p);
|
state = possible;
|
break;
|
}
|
fallthrough;
|
case possible:
|
|
where if CONFIG_CPUSETS is enabled you actually never hit the
|
fallthrough case at all. But that in no way makes the fallthrough
|
wrong.
|
|
So the warning is completely broken, and enabling it for clang is a very
|
bad idea.
|
|
In the meantime, we can keep the gcc option enabled, and make the gcc
|
build use
|
|
-Wimplicit-fallthrough=5
|
|
which means that we will at least continue to require a proper
|
fallthrough statement, and that gcc won't silently accept the magic
|
comment versions. Because gcc does this all correctly, and while the odd
|
"=5" part is kind of obscure, it's documented in [1]:
|
|
"-Wimplicit-fallthrough=5 doesn’t recognize any comments as
|
fallthrough comments, only attributes disable the warning"
|
|
so if clang ever fixes its bad behavior we can try enabling it there again.
|
|
Upstream-Status: backport [https://git.lttng.org/?p=lttng-modules.git;a=commit;h=c190d76e8c7b44d62b3651ab845b765c1b1f8104]
|
|
Change-Id: Iea69849592fb69ac04fb9bb28efcd6b8dce8ba88
|
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
|
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
---
|
include/counter/counter-api.h | 4 +-
|
include/lttng/events-internal.h | 11 ++-
|
include/wrapper/compiler_attributes.h | 34 +++++++
|
src/lib/counter/counter.c | 13 ++-
|
src/lttng-abi.c | 91 ++++++++++++------
|
src/lttng-bytecode-interpreter.c | 4 +-
|
src/lttng-bytecode-specialize.c | 5 +-
|
src/lttng-events.c | 129 +++++++++++++++++---------
|
src/lttng-string-utils.c | 3 +-
|
src/probes/lttng-kretprobes.c | 7 +-
|
10 files changed, 215 insertions(+), 86 deletions(-)
|
create mode 100644 include/wrapper/compiler_attributes.h
|
|
diff --git a/include/counter/counter-api.h b/include/counter/counter-api.h
|
index fbc65818..c9f2b141 100644
|
--- a/include/counter/counter-api.h
|
+++ b/include/counter/counter-api.h
|
@@ -15,6 +15,7 @@
|
#include <linux/bitops.h>
|
#include <counter/counter.h>
|
#include <counter/counter-internal.h>
|
+#include <wrapper/compiler_attributes.h>
|
#include <wrapper/limits.h>
|
|
/*
|
@@ -256,7 +257,8 @@ static __always_inline int lttng_counter_add(const struct lib_counter_config *co
|
const size_t *dimension_indexes, int64_t v)
|
{
|
switch (config->alloc) {
|
- case COUNTER_ALLOC_PER_CPU: /* Fallthrough */
|
+ case COUNTER_ALLOC_PER_CPU:
|
+ lttng_fallthrough;
|
case COUNTER_ALLOC_PER_CPU | COUNTER_ALLOC_GLOBAL:
|
return __lttng_counter_add_percpu(config, counter, dimension_indexes, v);
|
case COUNTER_ALLOC_GLOBAL:
|
diff --git a/include/lttng/events-internal.h b/include/lttng/events-internal.h
|
index cd560de8..ca2190c4 100644
|
--- a/include/lttng/events-internal.h
|
+++ b/include/lttng/events-internal.h
|
@@ -8,6 +8,8 @@
|
#ifndef _LTTNG_EVENTS_INTERNAL_H
|
#define _LTTNG_EVENTS_INTERNAL_H
|
|
+#include <wrapper/compiler_attributes.h>
|
+
|
#include <lttng/events.h>
|
|
struct lttng_syscall_filter;
|
@@ -561,9 +563,12 @@ static inline bool lttng_kernel_type_is_bytewise_integer(const struct lttng_kern
|
if (!type_integer)
|
return false;
|
switch (type_integer->size) {
|
- case 8: /* Fall-through. */
|
- case 16: /* Fall-through. */
|
- case 32: /* Fall-through. */
|
+ case 8:
|
+ lttng_fallthrough;
|
+ case 16:
|
+ lttng_fallthrough;
|
+ case 32:
|
+ lttng_fallthrough;
|
case 64:
|
break;
|
default:
|
diff --git a/include/wrapper/compiler_attributes.h b/include/wrapper/compiler_attributes.h
|
new file mode 100644
|
index 00000000..c2c96e76
|
--- /dev/null
|
+++ b/include/wrapper/compiler_attributes.h
|
@@ -0,0 +1,34 @@
|
+/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
|
+ *
|
+ * wrapper/compiler_attributes.h
|
+ *
|
+ * Copyright (C) 2021 Michael Jeanson <mjeanson@efficios.com>
|
+ */
|
+
|
+#ifndef _LTTNG_WRAPPER_COMPILER_ATTRIBUTES_H
|
+#define _LTTNG_WRAPPER_COMPILER_ATTRIBUTES_H
|
+
|
+#include <lttng/kernel-version.h>
|
+
|
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,20,0))
|
+#include <linux/compiler_attributes.h>
|
+#endif
|
+
|
+#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,4,0))
|
+
|
+/*
|
+ * Use the kernel provided fallthrough attribute macro.
|
+ */
|
+#define lttng_fallthrough fallthrough
|
+
|
+#else /* LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,4,0) */
|
+
|
+/*
|
+ * Fallback to the comment for kernels pre 5.15 that don't build with
|
+ * '-Wimplicit-fallthrough=5'.
|
+ */
|
+#define lttng_fallthrough do {} while (0) /* fallthrough */
|
+
|
+#endif /* LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,4,0) */
|
+
|
+#endif /* _LTTNG_WRAPPER_COMPILER_ATTRIBUTES_H */
|
diff --git a/src/lib/counter/counter.c b/src/lib/counter/counter.c
|
index a4500a0e..bf038aac 100644
|
--- a/src/lib/counter/counter.c
|
+++ b/src/lib/counter/counter.c
|
@@ -11,6 +11,7 @@
|
#include <linux/cpumask.h>
|
#include <counter/counter.h>
|
#include <counter/counter-internal.h>
|
+#include <wrapper/compiler_attributes.h>
|
#include <wrapper/vmalloc.h>
|
#include <wrapper/limits.h>
|
|
@@ -324,7 +325,8 @@ int lttng_counter_aggregate(const struct lib_counter_config *config,
|
*underflow = false;
|
|
switch (config->alloc) {
|
- case COUNTER_ALLOC_GLOBAL: /* Fallthrough */
|
+ case COUNTER_ALLOC_GLOBAL:
|
+ lttng_fallthrough;
|
case COUNTER_ALLOC_PER_CPU | COUNTER_ALLOC_GLOBAL:
|
/* Read global counter. */
|
ret = lttng_counter_read(config, counter, dimension_indexes,
|
@@ -342,7 +344,8 @@ int lttng_counter_aggregate(const struct lib_counter_config *config,
|
switch (config->alloc) {
|
case COUNTER_ALLOC_GLOBAL:
|
break;
|
- case COUNTER_ALLOC_PER_CPU | COUNTER_ALLOC_GLOBAL: /* Fallthrough */
|
+ case COUNTER_ALLOC_PER_CPU | COUNTER_ALLOC_GLOBAL:
|
+ lttng_fallthrough;
|
case COUNTER_ALLOC_PER_CPU:
|
//TODO: integrate with CPU hotplug and online cpus
|
for (cpu = 0; cpu < num_possible_cpus(); cpu++) {
|
@@ -448,7 +451,8 @@ int lttng_counter_clear(const struct lib_counter_config *config,
|
int cpu, ret;
|
|
switch (config->alloc) {
|
- case COUNTER_ALLOC_GLOBAL: /* Fallthrough */
|
+ case COUNTER_ALLOC_GLOBAL:
|
+ lttng_fallthrough;
|
case COUNTER_ALLOC_PER_CPU | COUNTER_ALLOC_GLOBAL:
|
/* Clear global counter. */
|
ret = lttng_counter_clear_cpu(config, counter, dimension_indexes, -1);
|
@@ -462,7 +466,8 @@ int lttng_counter_clear(const struct lib_counter_config *config,
|
switch (config->alloc) {
|
case COUNTER_ALLOC_GLOBAL:
|
break;
|
- case COUNTER_ALLOC_PER_CPU | COUNTER_ALLOC_GLOBAL: /* Fallthrough */
|
+ case COUNTER_ALLOC_PER_CPU | COUNTER_ALLOC_GLOBAL:
|
+ lttng_fallthrough;
|
case COUNTER_ALLOC_PER_CPU:
|
//TODO: integrate with CPU hotplug and online cpus
|
for (cpu = 0; cpu < num_possible_cpus(); cpu++) {
|
diff --git a/src/lttng-abi.c b/src/lttng-abi.c
|
index cc453894..eac1afd1 100644
|
--- a/src/lttng-abi.c
|
+++ b/src/lttng-abi.c
|
@@ -34,6 +34,7 @@
|
#include <ringbuffer/vfs.h>
|
#include <ringbuffer/backend.h>
|
#include <ringbuffer/frontend.h>
|
+#include <wrapper/compiler_attributes.h>
|
#include <wrapper/poll.h>
|
#include <wrapper/file.h>
|
#include <wrapper/kref.h>
|
@@ -1332,7 +1333,8 @@ long lttng_metadata_ring_buffer_ioctl(struct file *filp,
|
*/
|
return -ENOSYS;
|
}
|
- case LTTNG_KERNEL_ABI_RING_BUFFER_FLUSH_EMPTY: /* Fall-through. */
|
+ case LTTNG_KERNEL_ABI_RING_BUFFER_FLUSH_EMPTY:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_RING_BUFFER_FLUSH:
|
{
|
struct lttng_metadata_stream *stream = filp->private_data;
|
@@ -1441,7 +1443,8 @@ long lttng_metadata_ring_buffer_compat_ioctl(struct file *filp,
|
*/
|
return -ENOSYS;
|
}
|
- case LTTNG_KERNEL_ABI_RING_BUFFER_FLUSH_EMPTY: /* Fall-through. */
|
+ case LTTNG_KERNEL_ABI_RING_BUFFER_FLUSH_EMPTY:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_RING_BUFFER_FLUSH:
|
{
|
struct lttng_metadata_stream *stream = filp->private_data;
|
@@ -1758,8 +1761,10 @@ int lttng_abi_validate_event_param(struct lttng_kernel_abi_event *event_param)
|
switch (event_param->instrumentation) {
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
switch (event_param->u.syscall.entryexit) {
|
- case LTTNG_KERNEL_ABI_SYSCALL_ENTRY: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_SYSCALL_EXIT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_SYSCALL_ENTRY:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_SYSCALL_EXIT:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL_ENTRYEXIT:
|
break;
|
default:
|
@@ -1783,20 +1788,26 @@ int lttng_abi_validate_event_param(struct lttng_kernel_abi_event *event_param)
|
switch (event_param->u.kretprobe.entryexit) {
|
case LTTNG_KERNEL_ABI_SYSCALL_ENTRYEXIT:
|
break;
|
- case LTTNG_KERNEL_ABI_SYSCALL_ENTRY: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_SYSCALL_EXIT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_SYSCALL_ENTRY:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_SYSCALL_EXIT:
|
+ lttng_fallthrough;
|
default:
|
return -EINVAL;
|
}
|
break;
|
|
- case LTTNG_KERNEL_ABI_TRACEPOINT: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_UPROBE:
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
return -EINVAL;
|
}
|
@@ -1830,18 +1841,23 @@ int lttng_abi_create_event(struct file *channel_file,
|
}
|
|
switch (event_param->instrumentation) {
|
- case LTTNG_KERNEL_ABI_TRACEPOINT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
fops = <tng_event_recorder_enabler_fops;
|
break;
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_UPROBE:
|
fops = <tng_event_recorder_event_fops;
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
return -EINVAL;
|
}
|
@@ -1867,7 +1883,8 @@ int lttng_abi_create_event(struct file *channel_file,
|
goto event_error;
|
|
switch (event_param->instrumentation) {
|
- case LTTNG_KERNEL_ABI_TRACEPOINT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
{
|
struct lttng_event_enabler *event_enabler;
|
@@ -1887,8 +1904,10 @@ int lttng_abi_create_event(struct file *channel_file,
|
break;
|
}
|
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_UPROBE:
|
{
|
struct lttng_kernel_event_recorder *event;
|
@@ -1908,8 +1927,10 @@ int lttng_abi_create_event(struct file *channel_file,
|
break;
|
}
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
ret = -EINVAL;
|
goto event_error;
|
@@ -2043,18 +2064,23 @@ int lttng_abi_create_event_notifier(struct file *event_notifier_group_file,
|
}
|
|
switch (event_notifier_param->event.instrumentation) {
|
- case LTTNG_KERNEL_ABI_TRACEPOINT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
fops = <tng_event_notifier_enabler_fops;
|
break;
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_UPROBE:
|
fops = <tng_event_notifier_event_fops;
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
ret = -EINVAL;
|
goto inval_instr;
|
@@ -2086,7 +2112,8 @@ int lttng_abi_create_event_notifier(struct file *event_notifier_group_file,
|
goto event_notifier_error;
|
|
switch (event_notifier_param->event.instrumentation) {
|
- case LTTNG_KERNEL_ABI_TRACEPOINT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
{
|
struct lttng_event_notifier_enabler *enabler;
|
@@ -2110,8 +2137,10 @@ int lttng_abi_create_event_notifier(struct file *event_notifier_group_file,
|
break;
|
}
|
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_UPROBE:
|
{
|
struct lttng_kernel_event_notifier *event_notifier;
|
@@ -2135,8 +2164,10 @@ int lttng_abi_create_event_notifier(struct file *event_notifier_group_file,
|
break;
|
}
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
ret = -EINVAL;
|
goto event_notifier_error;
|
diff --git a/src/lttng-bytecode-interpreter.c b/src/lttng-bytecode-interpreter.c
|
index b46a23b7..a2a932c6 100644
|
--- a/src/lttng-bytecode-interpreter.c
|
+++ b/src/lttng-bytecode-interpreter.c
|
@@ -7,6 +7,7 @@
|
* Copyright (C) 2010-2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
*/
|
|
+#include <wrapper/compiler_attributes.h>
|
#include <wrapper/uaccess.h>
|
#include <wrapper/objtool.h>
|
#include <wrapper/types.h>
|
@@ -421,7 +422,8 @@ static int dynamic_get_index(struct lttng_kernel_probe_ctx *lttng_probe_ctx,
|
}
|
break;
|
case LOAD_ROOT_CONTEXT:
|
- case LOAD_ROOT_APP_CONTEXT: /* Fall-through */
|
+ lttng_fallthrough;
|
+ case LOAD_ROOT_APP_CONTEXT:
|
{
|
ret = context_get_index(lttng_probe_ctx,
|
&stack_top->u.ptr,
|
diff --git a/src/lttng-bytecode-specialize.c b/src/lttng-bytecode-specialize.c
|
index c4b9d04b..f8b5f19d 100644
|
--- a/src/lttng-bytecode-specialize.c
|
+++ b/src/lttng-bytecode-specialize.c
|
@@ -8,6 +8,8 @@
|
*/
|
|
#include <linux/slab.h>
|
+#include <wrapper/compiler_attributes.h>
|
+
|
#include <lttng/lttng-bytecode.h>
|
#include <lttng/align.h>
|
#include <lttng/events-internal.h>
|
@@ -271,7 +273,8 @@ static int specialize_get_index(struct bytecode_runtime *runtime,
|
}
|
case OBJECT_TYPE_STRUCT:
|
/* Only generated by the specialize phase. */
|
- case OBJECT_TYPE_VARIANT: /* Fall-through */
|
+ case OBJECT_TYPE_VARIANT:
|
+ lttng_fallthrough;
|
default:
|
printk(KERN_WARNING "LTTng: bytecode: Unexpected get index type %d",
|
(int) stack_top->load.object_type);
|
diff --git a/src/lttng-events.c b/src/lttng-events.c
|
index e785fe4d..230e3934 100644
|
--- a/src/lttng-events.c
|
+++ b/src/lttng-events.c
|
@@ -28,6 +28,7 @@
|
#include <linux/vmalloc.h>
|
#include <linux/dmi.h>
|
|
+#include <wrapper/compiler_attributes.h>
|
#include <wrapper/uuid.h>
|
#include <wrapper/vmalloc.h> /* for wrapper_vmalloc_sync_mappings() */
|
#include <wrapper/random.h>
|
@@ -659,12 +660,14 @@ int lttng_event_enable(struct lttng_kernel_event_common *event)
|
goto end;
|
}
|
switch (event->priv->instrumentation) {
|
- case LTTNG_KERNEL_ABI_TRACEPOINT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
ret = -EINVAL;
|
break;
|
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_UPROBE:
|
WRITE_ONCE(event->enabled, 1);
|
break;
|
@@ -673,8 +676,10 @@ int lttng_event_enable(struct lttng_kernel_event_common *event)
|
ret = lttng_kretprobes_event_enable_state(event, 1);
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
ret = -EINVAL;
|
@@ -719,12 +724,14 @@ int lttng_event_disable(struct lttng_kernel_event_common *event)
|
goto end;
|
}
|
switch (event->priv->instrumentation) {
|
- case LTTNG_KERNEL_ABI_TRACEPOINT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
ret = -EINVAL;
|
break;
|
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_UPROBE:
|
WRITE_ONCE(event->enabled, 0);
|
break;
|
@@ -733,8 +740,10 @@ int lttng_event_disable(struct lttng_kernel_event_common *event)
|
ret = lttng_kretprobes_event_enable_state(event, 0);
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
ret = -EINVAL;
|
@@ -873,15 +882,20 @@ struct lttng_kernel_event_recorder *_lttng_kernel_event_recorder_create(struct l
|
event_name = event_desc->event_name;
|
break;
|
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_UPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_UPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
event_name = event_param->name;
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
ret = -EINVAL;
|
@@ -1093,8 +1107,10 @@ struct lttng_kernel_event_recorder *_lttng_kernel_event_recorder_create(struct l
|
WARN_ON_ONCE(!ret);
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
ret = -EINVAL;
|
@@ -1141,15 +1157,20 @@ struct lttng_kernel_event_notifier *_lttng_event_notifier_create(
|
event_name = event_desc->event_name;
|
break;
|
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_UPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_UPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
event_name = event_notifier_param->event.name;
|
break;
|
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
ret = -EINVAL;
|
@@ -1296,9 +1317,12 @@ struct lttng_kernel_event_notifier *_lttng_event_notifier_create(
|
WARN_ON_ONCE(!ret);
|
break;
|
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
ret = -EINVAL;
|
@@ -1423,14 +1447,18 @@ void register_event(struct lttng_kernel_event_recorder *event_recorder)
|
ret = lttng_syscall_filter_enable_event(event_recorder->chan, event_recorder);
|
break;
|
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_UPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_UPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_KRETPROBE:
|
ret = 0;
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
}
|
@@ -1481,7 +1509,8 @@ int _lttng_event_unregister(struct lttng_kernel_event_recorder *event_recorder)
|
ret = 0;
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
}
|
@@ -1512,14 +1541,18 @@ void register_event_notifier(struct lttng_kernel_event_notifier *event_notifier)
|
ret = lttng_syscall_filter_enable_event_notifier(event_notifier);
|
break;
|
|
- case LTTNG_KERNEL_ABI_KPROBE: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KPROBE:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_UPROBE:
|
ret = 0;
|
break;
|
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
}
|
@@ -1559,9 +1592,12 @@ int _lttng_event_notifier_unregister(
|
ret = lttng_syscall_filter_disable_event_notifier(event_notifier);
|
break;
|
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
}
|
@@ -1614,8 +1650,10 @@ void _lttng_event_destroy(struct lttng_kernel_event_common *event)
|
lttng_uprobes_destroy_event_private(event_recorder);
|
break;
|
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
}
|
@@ -1647,9 +1685,12 @@ void _lttng_event_destroy(struct lttng_kernel_event_common *event)
|
lttng_uprobes_destroy_event_notifier_private(event_notifier);
|
break;
|
|
- case LTTNG_KERNEL_ABI_KRETPROBE: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_FUNCTION: /* Fall-through */
|
- case LTTNG_KERNEL_ABI_NOOP: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_KRETPROBE:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_FUNCTION:
|
+ lttng_fallthrough;
|
+ case LTTNG_KERNEL_ABI_NOOP:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
}
|
@@ -2713,7 +2754,8 @@ void lttng_session_sync_event_enablers(struct lttng_kernel_session *session)
|
int nr_filters = 0;
|
|
switch (event_recorder_priv->parent.instrumentation) {
|
- case LTTNG_KERNEL_ABI_TRACEPOINT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
/* Enable events */
|
list_for_each_entry(enabler_ref,
|
@@ -2807,7 +2849,8 @@ void lttng_event_notifier_group_sync_enablers(struct lttng_event_notifier_group
|
int nr_filters = 0, nr_captures = 0;
|
|
switch (event_notifier_priv->parent.instrumentation) {
|
- case LTTNG_KERNEL_ABI_TRACEPOINT: /* Fall-through */
|
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
|
+ lttng_fallthrough;
|
case LTTNG_KERNEL_ABI_SYSCALL:
|
/* Enable event_notifiers */
|
list_for_each_entry(enabler_ref,
|
@@ -3877,7 +3920,7 @@ int print_escaped_ctf_string(struct lttng_kernel_session *session, const char *s
|
if (ret)
|
goto error;
|
/* We still print the current char */
|
- /* Fallthrough */
|
+ lttng_fallthrough;
|
default:
|
ret = lttng_metadata_printf(session, "%c", cur);
|
break;
|
diff --git a/src/lttng-string-utils.c b/src/lttng-string-utils.c
|
index d9447903..65946193 100644
|
--- a/src/lttng-string-utils.c
|
+++ b/src/lttng-string-utils.c
|
@@ -4,6 +4,7 @@
|
*/
|
|
#include <linux/types.h>
|
+#include <wrapper/compiler_attributes.h>
|
|
#include <lttng/string-utils.h>
|
|
@@ -302,7 +303,7 @@ retry:
|
p = pattern_get_char_at_cb(p_at,
|
pattern_get_char_at_cb_data);
|
|
- /* Fall-through. */
|
+ lttng_fallthrough;
|
default:
|
/*
|
* Default case which will compare the escaped
|
diff --git a/src/probes/lttng-kretprobes.c b/src/probes/lttng-kretprobes.c
|
index 0fa6a1bf..1d0a5ecb 100644
|
--- a/src/probes/lttng-kretprobes.c
|
+++ b/src/probes/lttng-kretprobes.c
|
@@ -14,6 +14,7 @@
|
#include <lttng/events.h>
|
#include <lttng/events-internal.h>
|
#include <ringbuffer/frontend_types.h>
|
+#include <wrapper/compiler_attributes.h>
|
#include <wrapper/vmalloc.h>
|
#include <wrapper/irqflags.h>
|
#include <lttng/tracer.h>
|
@@ -61,7 +62,8 @@ int _lttng_kretprobes_handler(struct kretprobe_instance *krpi,
|
return 0;
|
break;
|
}
|
- case LTTNG_KERNEL_EVENT_TYPE_NOTIFIER: /* Fall-through. */
|
+ case LTTNG_KERNEL_EVENT_TYPE_NOTIFIER:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
}
|
@@ -90,7 +92,8 @@ int _lttng_kretprobes_handler(struct kretprobe_instance *krpi,
|
chan->ops->event_commit(&ctx);
|
break;
|
}
|
- case LTTNG_KERNEL_EVENT_TYPE_NOTIFIER: /* Fall-through. */
|
+ case LTTNG_KERNEL_EVENT_TYPE_NOTIFIER:
|
+ lttng_fallthrough;
|
default:
|
WARN_ON_ONCE(1);
|
}
|
--
|
2.19.1
|