Rename the fallthrough attribute to better align with the kernel
version. Copy the definition from include/linux/compiler_attributes.h
including the #else clause. Adding the #else clause allows the tools
compiler.h header to drop the check for a definition entirely and keeps
both definitions together.
Change any __fallthrough statements to fallthrough anywhere it was used
within perf.
This allows other tools to use the same key word as the kernel.
Committer notes:
Did some missing conversions to:
builtin-list.c
Also included gtk.h before the 'fallthrough' definition in:
tools/perf/ui/gtk/hists.c
tools/perf/ui/gtk/helpline.c
tools/perf/ui/gtk/browser.c
As it is the arg name for a macro in glib.h:
/var/home/acme/git/perf-tools-next/tools/include/linux/compiler-gcc.h:16:55: error: missing binary operator before token "("
16 | # define fallthrough __attribute__((__fallthrough__))
| ^
/usr/include/glib-2.0/glib/gmacros.h:637:28: note: in expansion of macro ‘fallthrough’
637 | #if g_macro__has_attribute(fallthrough)
Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Liam Howlett <Liam.Howlett@oracle.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Miguel Ojeda <ojeda@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Tom Rix <trix@redhat.com>
Cc: linux-sparse@vger.kernel.org <linux-sparse@vger.kernel.org>
Cc: llvm@lists.linux.dev <llvm@lists.linux.dev>
Link: https://lore.kernel.org/r/20221125154947.2163498-1-Liam.Howlett@oracle.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+ __GNUC_PATCHLEVEL__)
#endif
-#if GCC_VERSION >= 70000 && !defined(__CHECKER__)
-# define __fallthrough __attribute__ ((fallthrough))
+#if __has_attribute(__fallthrough__)
+# define fallthrough __attribute__((__fallthrough__))
+#else
+# define fallthrough do {} while (0) /* fallthrough */
#endif
#if __has_attribute(__error__)
})
-#ifndef __fallthrough
-# define __fallthrough
-#endif
-
/* Indirect macros required for expanded argument pasting, eg. __LINE__. */
#define ___PASTE(a, b) a##b
#define __PASTE(a, b) ___PASTE(a, b)
strbuf_addstr(buf, "\\n");
break;
case '\\':
- __fallthrough;
+ fallthrough;
case '\"':
strbuf_addch(buf, '\\');
- __fallthrough;
+ fallthrough;
default:
strbuf_addch(buf, s[s_pos]);
break;
pr_err(" Error: --bootconfig doesn't support uprobes.\n");
return -EINVAL;
}
- __fallthrough;
+ fallthrough;
case 'a':
/* Ensure the last given target is used */
if (evlist__ctlfd_process(evlist, &cmd) > 0) {
switch (cmd) {
case EVLIST_CTL_CMD_ENABLE:
- __fallthrough;
+ fallthrough;
case EVLIST_CTL_CMD_DISABLE:
if (interval)
process_interval();
case -1:
if (errno == EINTR)
continue;
- __fallthrough;
+ fallthrough;
default:
c = getc(stdin);
tcsetattr(0, TCSAFLUSH, &save);
// SPDX-License-Identifier: GPL-2.0
+#include "gtk.h"
#include "../evsel.h"
#include "../sort.h"
#include "../hist.h"
#include "../helpline.h"
-#include "gtk.h"
#include <signal.h>
// SPDX-License-Identifier: GPL-2.0
+#include "gtk.h"
#include <stdio.h>
#include <string.h>
#include <linux/kernel.h>
-#include "gtk.h"
#include "../ui.h"
#include "../helpline.h"
// SPDX-License-Identifier: GPL-2.0
+#include "gtk.h"
#include "../evlist.h"
#include "../callchain.h"
#include "../evsel.h"
#include "../hist.h"
#include "../helpline.h"
#include "../string2.h"
-#include "gtk.h"
#include <signal.h>
#include <stdlib.h>
#include <linux/string.h>
if (match != MATCH_ERROR)
break;
/* otherwise fall-back to symbol-based comparison below */
- __fallthrough;
+ fallthrough;
case CCKEY_FUNCTION:
if (node->ms.sym && cnode->ms.sym) {
/*
}
}
/* otherwise fall-back to IP-based comparison below */
- __fallthrough;
+ fallthrough;
case CCKEY_ADDRESS:
default:
match = match_chain_dso_addresses(cnode->ms.map, cnode->ip, node->ms.map, node->ip);
switch (decoder->packet.type) {
case INTEL_PT_TIP_PGD:
decoder->continuous_period = false;
- __fallthrough;
+ fallthrough;
case INTEL_PT_TIP_PGE:
case INTEL_PT_TIP:
case INTEL_PT_PTWRITE:
decoder->pge = false;
decoder->continuous_period = false;
intel_pt_clear_tx_flags(decoder);
- __fallthrough;
+ fallthrough;
case INTEL_PT_TNT:
decoder->have_tma = false;
decoder->have_last_ip = false;
decoder->last_ip = 0;
decoder->ip = 0;
- __fallthrough;
+ fallthrough;
case INTEL_PT_STATE_ERR_RESYNC:
err = intel_pt_sync_ip(decoder);
break;
case INTEL_PT_FUP:
if (!(packet->count))
return snprintf(buf, buf_len, "%s no ip", name);
- __fallthrough;
+ fallthrough;
case INTEL_PT_CYC:
case INTEL_PT_VMCS:
case INTEL_PT_MTC:
switch (how) {
case OE_FLUSH__FINAL:
show_progress = true;
- __fallthrough;
+ fallthrough;
case OE_FLUSH__TOP:
oe->next_flush = ULLONG_MAX;
break;
len = strfilter_node__sprint_pt(node->l, buf);
if (len < 0)
return len;
- __fallthrough;
+ fallthrough;
case '!':
if (buf) {
*(buf + len++) = *node->p;
if (*p)
goto out_err;
- __fallthrough;
+ fallthrough;
case '\0':
return length;
default: