2023-04-12 08:04 UTC+0200 ~ Sven Schnelle <svens@xxxxxxxxxxxxx> > Quentin Monnet <quentin@xxxxxxxxxxxxx> writes: > >> diff --git a/tools/bpf/bpftool/btf_dumper.c b/tools/bpf/bpftool/btf_dumper.c >> index e7f6ec3a8f35..583aa843df92 100644 >> --- a/tools/bpf/bpftool/btf_dumper.c >> +++ b/tools/bpf/bpftool/btf_dumper.c >> @@ -821,3 +821,37 @@ void btf_dump_linfo_json(const struct btf *btf, >> BPF_LINE_INFO_LINE_COL(linfo->line_col)); >> } >> } >> + >> +static void dotlabel_puts(const char *s) >> +{ >> + for (; *s; ++s) { >> + switch (*s) { >> + case '\\': >> + case '"': >> + case '{': >> + case '}': >> + case '<': >> + case '>': >> + case '|': >> + case ' ': >> + putchar('\\'); >> + __fallthrough; > > Is __fallthrough correct? I see the following compile error on s390 in > linux-next (20230412): > > CC btf_dumper.o > btf_dumper.c: In function ‘dotlabel_puts’: > btf_dumper.c:838:25: error: ‘__fallthrough’ undeclared (first use in this function); did you mean ‘fallthrough’? > 838 | __fallthrough; > | ^~~~~~~~~~~~~ > > removing the two underscores fixes this. I thought so? Perf seems to use the double underscores as well. Just "fallthrough" does not seem to be the right fix anyway, it gives me an error similar to yours on x86_64 with "fallthrough" undeclared. The definition should be pulled from tools/include/linux/compiler.h (and .../compiler-gcc.h). I thought this file would be at least included from bpftool's main.h, in turn included in btf_dumper.c. Looking at the chain of inclusions, on my system I get the following path: $ CFLAGS=-H make btf_dumper.o [...] . /root/dev/linux/tools/include/linux/bitops.h [...] .. /root/dev/linux/tools/include/linux/bits.h [...] ... /root/dev/linux/tools/include/linux/build_bug.h .... /root/dev/linux/tools/include/linux/compiler.h ..... /root/dev/linux/tools/include/linux/compiler_types.h ...... /root/dev/linux/tools/include/linux/compiler-gcc.h [...] What do you get on your side? If you add "#include <linux/compiler.h>" to btf_dumper.c directly, does it fix the issue? Quentin