| 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 |
| |