linux/tools/perf
Gustavo A. R. Silva ffe7428e6d perf branch: Replace zero-length array with flexible-array
The current codebase makes use of the zero-length array language
extension to the C90 standard, but the preferred mechanism to declare
variable-length types such as these ones is a flexible array
member[1][2], introduced in C99:

struct foo {
        int stuff;
        struct boo array[];
};

By making use of the mechanism above, we will get a compiler warning in
case the flexible array does not occur last in the structure, which will
help us prevent some kind of undefined behavior bugs from being
inadvertently introduced[3] to the codebase from now on.

Also, notice that, dynamic memory allocations won't be affected by this
change:

"Flexible array members have incomplete type, and so the sizeof operator
may not be applied. As a quirk of the original implementation of
zero-length arrays, sizeof evaluates to zero."[1]

sizeof(flexible-array-member) triggers a warning because flexible array
members have incomplete type[1]. There are some instances of code in
which the sizeof operator is being incorrectly/erroneously applied to
zero-length arrays and the result is zero. Such instances may be hiding
some bugs. So, this work (flexible-array member conversions) will also
help to get completely rid of those sorts of issues.

This issue was found with the help of Coccinelle and audited _manually_.

[1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
[2] https://github.com/KSPP/linux/issues/21
[3] commit 7649773293 ("cxgb3/l2t: Fix undefined behaviour")

Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Gustavo A. R. Silva <gustavo@embeddedor.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20200520191613.GA26869@embeddedor
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2020-05-28 10:03:27 -03:00
..
arch perf parse-events: Make add PMU verbose output clearer 2020-05-28 10:03:26 -03:00
bench perf tools: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
Documentation perf config: Add stat.big-num support 2020-05-28 10:03:27 -03:00
examples/bpf Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-01-28 16:02:33 -08:00
include/bpf perf bpf: Remove bpf/ subdir from bpf.h headers used to build bpf events 2020-02-18 10:13:28 -03:00
jvmti
pmu-events perf stat: POWER9 metrics: expand "ICT" acronym 2020-05-28 10:03:27 -03:00
python
scripts perf flamegraph: Use /bin/bash for report and record scripts 2020-05-05 16:35:32 -03:00
tests perf expr: Allow numbers to be followed by a dot 2020-05-28 10:03:27 -03:00
trace perf beauty: Allow the CC used in the arch errno names script to acccept CFLAGS 2020-05-28 10:03:26 -03:00
ui perf evsel: Rename perf_evsel__group_idx() to evsel__group_idx() 2020-05-05 16:35:31 -03:00
util perf branch: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
Build
builtin-annotate.c perf evsel: Rename perf_evsel__resort*() to evsel__resort*() 2020-05-28 10:03:24 -03:00
builtin-bench.c tools feature: Rename HAVE_EVENTFD to HAVE_EVENTFD_SUPPORT 2020-05-28 10:03:26 -03:00
builtin-buildid-cache.c
builtin-buildid-list.c
builtin-c2c.c perf c2c: Fix 'perf c2c record -e list' to show the default events used 2020-05-28 10:03:25 -03:00
builtin-config.c
builtin-data.c
builtin-diff.c perf evsel: Rename perf_evsel__is_*() to evsel__is*() 2020-05-05 16:35:31 -03:00
builtin-evlist.c perf evsel: Rename perf_evsel__fprintf() to evsel__fprintf() 2020-05-28 10:03:24 -03:00
builtin-ftrace.c perf tools: Support CAP_PERFMON capability 2020-04-16 12:19:08 -03:00
builtin-help.c
builtin-inject.c perf tools: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
builtin-kallsyms.c
builtin-kmem.c perf kmem: Rename perf_evsel__*() operating on 'struct evsel *' to evsel__*() 2020-05-05 16:35:31 -03:00
builtin-kvm.c perf evsel: Rename perf_evsel__{str,int}val() and other tracepoint field metehods to to evsel__*() 2020-05-05 16:35:30 -03:00
builtin-list.c
builtin-lock.c perf lock: Rename perf_evsel__*() operating on 'struct evsel *' to evsel__*() 2020-05-05 16:35:31 -03:00
builtin-mem.c perf c2c: Fix 'perf c2c record -e list' to show the default events used 2020-05-28 10:03:25 -03:00
builtin-probe.c perf probe: Do not show the skipped events 2020-05-28 10:03:24 -03:00
builtin-record.c perf record: Use an eventfd to wakeup when done 2020-05-28 10:03:26 -03:00
builtin-report.c perf callchain: Setup callchain properly in pipe mode 2020-05-28 10:03:25 -03:00
builtin-sched.c perf sched: Rename perf_evsel__*() operating on 'struct evsel *' to evsel__*() 2020-05-05 16:35:31 -03:00
builtin-script.c perf tools: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
builtin-stat.c perf config: Add stat.big-num support 2020-05-28 10:03:27 -03:00
builtin-timechart.c perf tools: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
builtin-top.c perf evsel: Rename *perf_evsel__get_config_term() & friends to evsel__env() 2020-05-28 10:03:24 -03:00
builtin-trace.c perf trace: Fix compilation error for make NO_LIBBPF=1 DEBUG=1 2020-05-28 10:03:26 -03:00
builtin-version.c
builtin.h
check-headers.sh perf tools: Grab a copy of libbpf's hashmap 2020-05-28 10:03:26 -03:00
command-list.txt
CREDITS
design.txt perf tools: Support CAP_PERFMON capability 2020-04-16 12:19:08 -03:00
Makefile tools: Let O= makes handle a relative path with -C option 2020-03-06 17:08:28 -03:00
Makefile.config tools feature: Rename HAVE_EVENTFD to HAVE_EVENTFD_SUPPORT 2020-05-28 10:03:26 -03:00
Makefile.perf perf tools: Do not display extra info when there is nothing to build 2020-05-28 10:03:25 -03:00
MANIFEST libperf: Move to tools/lib/perf 2020-01-06 11:46:09 -03:00
perf-archive.sh
perf-completion.sh
perf-read-vdso.c
perf-sys.h
perf-with-kcore.sh
perf.c
perf.h