[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAP-5=fVk7=XFeRRSmYLqHHvExe1fFoQCGd+Q66ocx2qgBCKQQA@mail.gmail.com>
Date: Fri, 18 Apr 2025 21:22:57 -0700
From: Ian Rogers <irogers@...gle.com>
To: Arnaldo Carvalho de Melo <acme@...nel.org>
Cc: Peter Zijlstra <peterz@...radead.org>, Ingo Molnar <mingo@...hat.com>,
Namhyung Kim <namhyung@...nel.org>, Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>, Jiri Olsa <jolsa@...nel.org>,
Adrian Hunter <adrian.hunter@...el.com>, Kan Liang <kan.liang@...ux.intel.com>,
Nathan Chancellor <nathan@...nel.org>, Nick Desaulniers <nick.desaulniers+lkml@...il.com>,
Bill Wendling <morbo@...gle.com>, Justin Stitt <justinstitt@...gle.com>,
Aditya Gupta <adityag@...ux.ibm.com>, "Steinar H. Gunderson" <sesse@...gle.com>,
Charlie Jenkins <charlie@...osinc.com>, Changbin Du <changbin.du@...wei.com>,
"Masami Hiramatsu (Google)" <mhiramat@...nel.org>, James Clark <james.clark@...aro.org>,
Kajol Jain <kjain@...ux.ibm.com>, Athira Rajeev <atrajeev@...ux.vnet.ibm.com>,
Li Huafei <lihuafei1@...wei.com>, Dmitry Vyukov <dvyukov@...gle.com>,
Andi Kleen <ak@...ux.intel.com>, Chaitanya S Prakash <chaitanyas.prakash@....com>,
linux-kernel@...r.kernel.org, linux-perf-users@...r.kernel.org,
llvm@...ts.linux.dev, Song Liu <song@...nel.org>, bpf@...r.kernel.org
Subject: Re: [PATCH v4 00/19] Support dynamic opening of capstone/llvm remove BUILD_NONDISTRO
On Fri, Apr 18, 2025 at 2:29 PM Arnaldo Carvalho de Melo
<acme@...nel.org> wrote:
>
> On Thu, Apr 17, 2025 at 04:07:21PM -0700, Ian Rogers wrote:
> > Linking against libcapstone and libLLVM can be a significant increase
> > in dependencies and file size if building statically. For something
> > like `perf record` the disassembler and addr2line functionality won't
> > be used. Support dynamically loading these libraries using dlopen and
> > then calling the appropriate functions found using dlsym.
> >
> > BUILD_NONDISTRO is used to build perf against the license incompatible
> > libbfd and libiberty libraries. As this has been opt-in for nearly 2
> > years, commit dd317df07207 ("perf build: Make binutil libraries opt
> > in"), remove the code to simplify the code base.
> >
> > The patch series:
> > 1) does some initial clean up;
> > 2) moves the capstone and LLVM code to their own C files,
> > 3) simplifies a little the capstone code;
> > 4) adds perf_ variants of the functions that will either directly call
> > the function or use dlsym to discover it;
> > 5) adds BPF JIT disassembly support to LLVM and capstone disassembly;
> > 6) removes the BUILD_NONDISTRO code, reduces scope and removes what's possible;
> > 7) adds fallback to srcline's addr2line so that llvm_addr2line is
> > tried first and then the forked command tried next, moving the code
> > for forking out of the main srcline.c file in the process.
> >
> > The addr2line LLVM functionality is written in C++. To avoid linking
> > against libLLVM for this, a new LIBLLVM_DYNAMIC option is added where
> > the C++ code with the libLLVM dependency will be built into a
> > libperf-llvm.so and that dlsym-ed and called against. Ideally LLVM
> > would extend their C API to avoid this.
> >
> > The libbfd BPF disassembly supported source lines, this wasn't ported
> > to the capstone and LLVM disassembly.
>
> Doing the build tests I noticed, so far:
>
> 29 58.92 opensuse:15.4 : FAIL gcc version 7.5.0 (SUSE Linux)
> <SNIP>
> + make NO_LIBTRACEEVENT=1 ARCH= CROSS_COMPILE= EXTRA_CFLAGS= NO_LIBBPF=1 -C tools/perf O=/tmp/build/perf
> make: Entering directory '/git/perf-6.15.0-rc2/tools/perf'
> BUILD: Doing 'make -j32' parallel build
> Warning: Skipped check-headers due to missing ../../include
> Makefile.config:560: No elfutils/debuginfod.h found, no debuginfo server support, please install libdebuginfod-dev/elfutils-debuginfod-client-devel or equivalent
> Makefile.config:687: Warning: Disabled BPF skeletons as libbpf is required
> Makefile.config:1039: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev
> update-alternatives: error: no alternatives for java
> update-alternatives: error: no alternatives for java
> Makefile.config:1100: No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel
> Makefile.config:1113: libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev
>
> Auto-detecting system features:
> ... libdw: [ on ]
> ... glibc: [ on ]
> ... libelf: [ on ]
> ... libnuma: [ on ]
> ... numa_num_possible_cpus: [ on ]
> ... libperl: [ on ]
> ... libpython: [ on ]
> ... libcrypto: [ on ]
> ... libcapstone: [ on ]
> ... llvm-perf: [ on ]
> ... zlib: [ on ]
> ... lzma: [ on ]
> ... get_cpuid: [ on ]
> ... bpf: [ on ]
> ... libaio: [ on ]
> ... libzstd: [ on ]
>
> PERF_VERSION = 6.15.rc2.gfbcac9367d45
> GEN /tmp/build/perf/common-cmds.h
> GEN /tmp/build/perf/arch/arm64/include/generated/asm/sysreg-defs.h
> GEN perf-archive
> GEN perf-iostat
> CC /tmp/build/perf/dlfilters/dlfilter-test-api-v0.o
> CC /tmp/build/perf/dlfilters/dlfilter-test-api-v2.o
> CC /tmp/build/perf/dlfilters/dlfilter-show-cycles.o
> INSTALL /tmp/build/perf/libapi/include/api/cpu.h
> INSTALL /tmp/build/perf/libapi/include/api/debug.h
> INSTALL /tmp/build/perf/libapi/include/api/io.h
> MKDIR /tmp/build/perf/libapi/fd/
> INSTALL /tmp/build/perf/libapi/include/api/io_dir.h
> CC /tmp/build/perf/libapi/cpu.o
> MKDIR /tmp/build/perf/libapi/fs/
> INSTALL /tmp/build/perf/libapi/include/api/fd/array.h
> CC /tmp/build/perf/libapi/debug.o
> MKDIR /tmp/build/perf/libapi/fs/
> MKDIR /tmp/build/perf/libapi/fs/
> CC /tmp/build/perf/libapi/fd/array.o
> INSTALL /tmp/build/perf/libapi/include/api/fs/tracing_path.h
> CC /tmp/build/perf/libapi/str_error_r.o
> INSTALL /tmp/build/perf/libapi/include/api/fs/fs.h
> CC /tmp/build/perf/libapi/fs/tracing_path.o
> CC /tmp/build/perf/libapi/fs/fs.o
> CC /tmp/build/perf/libapi/fs/cgroup.o
> INSTALL libapi_headers
> INSTALL /tmp/build/perf/libperf/include/perf/bpf_perf.h
> INSTALL /tmp/build/perf/libperf/include/perf/core.h
> INSTALL /tmp/build/perf/libperf/include/perf/cpumap.h
> INSTALL /tmp/build/perf/libperf/include/perf/threadmap.h
> CC /tmp/build/perf/libperf/core.o
> CC /tmp/build/perf/libperf/cpumap.o
> CC /tmp/build/perf/libperf/threadmap.o
> INSTALL /tmp/build/perf/libperf/include/perf/evlist.h
> CC /tmp/build/perf/libperf/evlist.o
> CC /tmp/build/perf/libperf/evsel.o
> CC /tmp/build/perf/libperf/mmap.o
> CC /tmp/build/perf/libperf/zalloc.o
> INSTALL /tmp/build/perf/libsubcmd/include/subcmd/exec-cmd.h
> INSTALL /tmp/build/perf/libperf/include/perf/evsel.h
> CC /tmp/build/perf/libperf/xyarray.o
> CC /tmp/build/perf/libperf/lib.o
> INSTALL /tmp/build/perf/libsubcmd/include/subcmd/help.h
> INSTALL /tmp/build/perf/libsubcmd/include/subcmd/pager.h
> LINK /tmp/build/perf/dlfilters/dlfilter-test-api-v0.so
> INSTALL /tmp/build/perf/libsubcmd/include/subcmd/parse-options.h
> LD /tmp/build/perf/libapi/fd/libapi-in.o
> INSTALL /tmp/build/perf/libsubcmd/include/subcmd/run-command.h
> INSTALL libsubcmd_headers
> LINK /tmp/build/perf/dlfilters/dlfilter-test-api-v2.so
> INSTALL /tmp/build/perf/libperf/include/perf/event.h
> INSTALL /tmp/build/perf/libsymbol/include/symbol/kallsyms.h
> CC /tmp/build/perf/libsymbol/kallsyms.o
> INSTALL /tmp/build/perf/libperf/include/perf/mmap.h
> INSTALL /tmp/build/perf/libperf/include/internal/cpumap.h
> INSTALL /tmp/build/perf/libperf/include/internal/evlist.h
> INSTALL /tmp/build/perf/libperf/include/internal/evsel.h
> INSTALL /tmp/build/perf/libperf/include/internal/rc_check.h
> INSTALL /tmp/build/perf/libperf/include/internal/mmap.h
> INSTALL /tmp/build/perf/libperf/include/internal/threadmap.h
> INSTALL /tmp/build/perf/libperf/include/internal/lib.h
> INSTALL /tmp/build/perf/libperf/include/internal/xyarray.h
> LINK /tmp/build/perf/dlfilters/dlfilter-show-cycles.so
> LD /tmp/build/perf/libapi/fs/libapi-in.o
> evlist.c:28:6: error: no previous prototype for 'perf_evlist__init' [-Werror=missing-prototypes]
> void perf_evlist__init(struct perf_evlist *evlist)
> ^~~~~~~~~~~~~~~~~
Hmm.. but on line 8 of tools/lib/perf/evlist.c is:
#include <internal/evlist.h>
is there a libperf installed somewhere? I thought we were just
statically linking currently. I'm not sure what I can do to resolve
this, it seems like a set up issue.
Thanks,
Ian
> evlist.c: In function 'perf_evlist__init':
> evlist.c:30:24: error: dereferencing pointer to incomplete type 'struct perf_evlist'
> INIT_LIST_HEAD(&evlist->entries);
> ^~
> evlist.c:33:2: error: implicit declaration of function 'perf_evlist__reset_id_hash'; did you mean 'perf_evlist__set_maps'? [-Werror=implicit-function-declaration]
> perf_evlist__reset_id_hash(evlist);
> ^~~~~~~~~~~~~~~~~~~~~~~~~~
> perf_evlist__set_maps
> evlist.c:33:2: error: nested extern declaration of 'perf_evlist__reset_id_hash' [-Werror=nested-externs]
> evlist.c: In function 'perf_evlist__purge':
> evlist.c:157:2: error: implicit declaration of function 'perf_evlist__for_each_entry_safe'; did you mean 'hlist_for_each_entry_safe'? [-Werror=implicit-function-declaration]
> perf_evlist__for_each_entry_safe(evlist, n, pos) {
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> hlist_for_each_entry_safe
> evlist.c:157:2: error: nested extern declaration of 'perf_evlist__for_each_entry_safe' [-Werror=nested-externs]
> evlist.c:157:51: error: expected ';' before '{' token
> perf_evlist__for_each_entry_safe(evlist, n, pos) {
> ^
> evlist.c: At top level:
> evlist.c:165:6: error: no previous prototype for 'perf_evlist__exit' [-Werror=missing-prototypes]
> void perf_evlist__exit(struct perf_evlist *evlist)
> ^~~~~~~~~~~~~~~~~
> evlist.c: In function 'perf_evlist__open':
> evlist.c:217:2: error: implicit declaration of function 'perf_evlist__for_each_entry'; did you mean 'perf_evlist__for_each_evsel'? [-Werror=implicit-function-declaration]
> perf_evlist__for_each_entry(evlist, evsel) {
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> perf_evlist__for_each_evsel
> evlist.c:217:2: error: nested extern declaration of 'perf_evlist__for_each_entry' [-Werror=nested-externs]
> evlist.c:217:45: error: expected ';' before '{' token
> perf_evlist__for_each_entry(evlist, evsel) {
> ^
> evlist.c:225:1: error: label 'out_err' defined but not used [-Werror=unused-label]
> out_err:
> ^~~~~~~
> INSTALL libperf_headers
> evlist.c: In function 'perf_evlist__close':
> evlist.c:234:2: error: implicit declaration of function 'perf_evlist__for_each_entry_reverse'; did you mean 'list_for_each_entry_reverse'? [-Werror=implicit-function-declaration]
> perf_evlist__for_each_entry_reverse(evlist, evsel)
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> list_for_each_entry_reverse
> evlist.c:234:2: error: nested extern declaration of 'perf_evlist__for_each_entry_reverse' [-Werror=nested-externs]
> evlist.c:235:3: error: expected ';' before 'perf_evsel__close'
> perf_evsel__close(evsel);
> ^~~~~~~~~~~~~~~~~
> evlist.c: In function 'perf_evlist__enable':
> evlist.c:243:3: error: expected ';' before 'perf_evsel__enable'
> perf_evsel__enable(evsel);
> ^~~~~~~~~~~~~~~~~~
> evlist.c: In function 'perf_evlist__disable':
> evlist.c:251:3: error: expected ';' before 'perf_evsel__disable'
> perf_evsel__disable(evsel);
> ^~~~~~~~~~~~~~~~~~~
> evlist.c: At top level:
> evlist.c:254:5: error: no previous prototype for 'perf_evlist__read_format' [-Werror=missing-prototypes]
> u64 perf_evlist__read_format(struct perf_evlist *evlist)
> ^~~~~~~~~~~~~~~~~~~~~~~~
> evlist.c: In function 'perf_evlist__read_format':
> evlist.c:256:29: error: implicit declaration of function 'perf_evlist__first'; did you mean 'perf_evlist__init'? [-Werror=implicit-function-declaration]
> struct perf_evsel *first = perf_evlist__first(evlist);
> ^~~~~~~~~~~~~~~~~~
> perf_evlist__init
> evlist.c:256:29: error: nested extern declaration of 'perf_evlist__first' [-Werror=nested-externs]
> evlist.c:256:29: error: initialization makes pointer from integer without a cast [-Werror=int-conversion]
> INSTALL libsymbol_headers
> evlist.c: In function 'perf_evlist__id_hash':
> evlist.c:272:26: error: 'PERF_EVLIST__HLIST_BITS' undeclared (first use in this function); did you mean 'PERF_SAMPLE_ID__HLIST_BITS'?
> hash = hash_64(sid->id, PERF_EVLIST__HLIST_BITS);
> ^~~~~~~~~~~~~~~~~~~~~~~
> PERF_SAMPLE_ID__HLIST_BITS
> evlist.c:272:26: note: each undeclared identifier is reported only once for each function it appears in
> evlist.c:267:6: error: variable 'hash' set but not used [-Werror=unused-but-set-variable]
> int hash;
> ^~~~
> evlist.c: At top level:
> evlist.c:276:6: error: no previous prototype for 'perf_evlist__reset_id_hash' [-Werror=missing-prototypes]
> void perf_evlist__reset_id_hash(struct perf_evlist *evlist)
> ^~~~~~~~~~~~~~~~~~~~~~~~~~
> evlist.c:276:6: error: conflicting types for 'perf_evlist__reset_id_hash' [-Werror]
> evlist.c:33:2: note: previous implicit declaration of 'perf_evlist__reset_id_hash' was here
> perf_evlist__reset_id_hash(evlist);
> ^~~~~~~~~~~~~~~~~~~~~~~~~~
> LD /tmp/build/perf/libapi/libapi-in.o
> evlist.c: In function 'perf_evlist__reset_id_hash':
> evlist.c:280:18: error: 'PERF_EVLIST__HLIST_SIZE' undeclared (first use in this function); did you mean 'PERF_SAMPLE_ID__HLIST_SIZE'?
> for (i = 0; i < PERF_EVLIST__HLIST_SIZE; ++i)
> ^~~~~~~~~~~~~~~~~~~~~~~
> PERF_SAMPLE_ID__HLIST_SIZE
> evlist.c: At top level:
> evlist.c:284:6: error: no previous prototype for 'perf_evlist__id_add' [-Werror=missing-prototypes]
> void perf_evlist__id_add(struct perf_evlist *evlist,
> ^~~~~~~~~~~~~~~~~~~
> evlist.c:295:5: error: no previous prototype for 'perf_evlist__id_add_fd' [-Werror=missing-prototypes]
> int perf_evlist__id_add_fd(struct perf_evlist *evlist,
> ^~~~~~~~~~~~~~~~~~~~~~
> evlist.c:339:5: error: no previous prototype for 'perf_evlist__alloc_pollfd' [-Werror=missing-prototypes]
> int perf_evlist__alloc_pollfd(struct perf_evlist *evlist)
> ^~~~~~~~~~~~~~~~~~~~~~~~~
> evlist.c: In function 'perf_evlist__alloc_pollfd':
> evlist.c:346:45: error: expected ';' before '{' token
> perf_evlist__for_each_entry(evlist, evsel) {
> ^
> evlist.c:343:6: error: unused variable 'nfds' [-Werror=unused-variable]
> int nfds = 0;
> ^~~~
> evlist.c:342:6: error: unused variable 'nr_threads' [-Werror=unused-variable]
> int nr_threads = perf_thread_map__nr(evlist->threads);
> ^~~~~~~~~~
> evlist.c:341:6: error: unused variable 'nr_cpus' [-Werror=unused-variable]
> int nr_cpus = perf_cpu_map__nr(evlist->all_cpus);
> ^~~~~~~
> evlist.c: At top level:
> evlist.c:360:5: error: no previous prototype for 'perf_evlist__add_pollfd' [-Werror=missing-prototypes]
> int perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd,
> ^~~~~~~~~~~~~~~~~~~~~~~
> evlist.c:469:51: error: 'struct perf_evlist_mmap_ops' declared inside parameter list will not be visible outside of this definition or declaration [-Werror]
> mmap_per_evsel(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
> ^~~~~~~~~~~~~~~~~~~~
> evlist.c: In function 'mmap_per_evsel':
> evlist.c:477:45: error: expected ';' before '{' token
> perf_evlist__for_each_entry(evlist, evsel) {
> ^
> evlist.c:475:6: error: unused variable 'revent' [-Werror=unused-variable]
> int revent;
> ^~~~~~
> evlist.c:473:18: error: unused variable 'evlist_cpu' [-Werror=unused-variable]
> struct perf_cpu evlist_cpu = perf_cpu_map__cpu(evlist->all_cpus, cpu_idx);
> ^~~~~~~~~~
> evlist.c:560:1: error: no return statement in function returning non-void [-Werror=return-type]
> }
> ^
> evlist.c:469:73: error: unused parameter 'ops' [-Werror=unused-parameter]
> mmap_per_evsel(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
> ^~~
> evlist.c:470:13: error: unused parameter 'idx' [-Werror=unused-parameter]
> int idx, struct perf_mmap_param *mp, int cpu_idx,
> ^~~
> evlist.c:470:42: error: unused parameter 'mp' [-Werror=unused-parameter]
> int idx, struct perf_mmap_param *mp, int cpu_idx,
> ^~
> evlist.c:471:13: error: unused parameter 'thread' [-Werror=unused-parameter]
> int thread, int *_output, int *_output_overwrite, int *nr_mmaps)
> ^~~~~~
> evlist.c:471:26: error: unused parameter '_output' [-Werror=unused-parameter]
> int thread, int *_output, int *_output_overwrite, int *nr_mmaps)
> ^~~~~~~
> evlist.c:471:40: error: unused parameter '_output_overwrite' [-Werror=unused-parameter]
> int thread, int *_output, int *_output_overwrite, int *nr_mmaps)
> ^~~~~~~~~~~~~~~~~
> evlist.c:471:64: error: unused parameter 'nr_mmaps' [-Werror=unused-parameter]
> int thread, int *_output, int *_output_overwrite, int *nr_mmaps)
> ^~~~~~~~
> evlist.c: At top level:
> evlist.c:563:52: error: 'struct perf_evlist_mmap_ops' declared inside parameter list will not be visible outside of this definition or declaration [-Werror]
> mmap_per_thread(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
> ^~~~~~~~~~~~~~~~~~~~
> evlist.c: In function 'mmap_per_thread':
> evlist.c:579:30: error: passing argument 2 of 'mmap_per_evsel' from incompatible pointer type [-Werror=incompatible-pointer-types]
> if (mmap_per_evsel(evlist, ops, idx, mp, 0, thread, &output,
> ^~~
> evlist.c:469:1: note: expected 'struct perf_evlist_mmap_ops *' but argument is of type 'struct perf_evlist_mmap_ops *'
> mmap_per_evsel(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
> ^~~~~~~~~~~~~~
> evlist.c:589:30: error: passing argument 2 of 'mmap_per_evsel' from incompatible pointer type [-Werror=incompatible-pointer-types]
> if (mmap_per_evsel(evlist, ops, idx, mp, cpu, 0, &output,
> ^~~
> evlist.c:469:1: note: expected 'struct perf_evlist_mmap_ops *' but argument is of type 'struct perf_evlist_mmap_ops *'
> mmap_per_evsel(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
> ^~~~~~~~~~~~~~
> evlist.c: At top level:
> evlist.c:605:49: error: 'struct perf_evlist_mmap_ops' declared inside parameter list will not be visible outside of this definition or declaration [-Werror]
> mmap_per_cpu(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
> ^~~~~~~~~~~~~~~~~~~~
> evlist.c: In function 'mmap_per_cpu':
> evlist.c:620:31: error: passing argument 2 of 'mmap_per_evsel' from incompatible pointer type [-Werror=incompatible-pointer-types]
> if (mmap_per_evsel(evlist, ops, cpu, mp, cpu,
> ^~~
> evlist.c:469:1: note: expected 'struct perf_evlist_mmap_ops *' but argument is of type 'struct perf_evlist_mmap_ops *'
> mmap_per_evsel(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
> ^~~~~~~~~~~~~~
> evlist.c: At top level:
> evlist.c:653:13: error: 'struct perf_evlist_mmap_ops' declared inside parameter list will not be visible outside of this definition or declaration [-Werror]
> struct perf_evlist_mmap_ops *ops,
> ^~~~~~~~~~~~~~~~~~~~
> evlist.c:652:5: error: no previous prototype for 'perf_evlist__mmap_ops' [-Werror=missing-prototypes]
> int perf_evlist__mmap_ops(struct perf_evlist *evlist,
> ^~~~~~~~~~~~~~~~~~~~~
> evlist.c: In function 'perf_evlist__mmap_ops':
> evlist.c:659:18: error: dereferencing pointer to incomplete type 'struct perf_evlist_mmap_ops'
> if (!ops || !ops->get || !ops->mmap)
> ^~
> evlist.c:666:45: error: expected ';' before '{' token
> perf_evlist__for_each_entry(evlist, evsel) {
> ^
> evlist.c:677:34: error: passing argument 2 of 'mmap_per_thread' from incompatible pointer type [-Werror=incompatible-pointer-types]
> return mmap_per_thread(evlist, ops, mp);
> ^~~
> evlist.c:563:1: note: expected 'struct perf_evlist_mmap_ops *' but argument is of type 'struct perf_evlist_mmap_ops *'
> mmap_per_thread(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
> ^~~~~~~~~~~~~~~
> evlist.c:679:30: error: passing argument 2 of 'mmap_per_cpu' from incompatible pointer type [-Werror=incompatible-pointer-types]
> return mmap_per_cpu(evlist, ops, mp);
> ^~~
> evlist.c:605:1: note: expected 'struct perf_evlist_mmap_ops *' but argument is of type 'struct perf_evlist_mmap_ops *'
> mmap_per_cpu(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
> ^~~~~~~~~~~~
> evlist.c: In function 'perf_evlist__mmap':
> evlist.c:685:9: error: variable 'ops' has initializer but incomplete type
> struct perf_evlist_mmap_ops ops = {
> ^~~~~~~~~~~~~~~~~~~~
> evlist.c:686:4: error: 'struct perf_evlist_mmap_ops' has no member named 'get'
> .get = perf_evlist__mmap_cb_get,
> ^~~
> evlist.c:686:11: error: excess elements in struct initializer [-Werror]
> .get = perf_evlist__mmap_cb_get,
> ^~~~~~~~~~~~~~~~~~~~~~~~
> evlist.c:686:11: note: (near initialization for 'ops')
> evlist.c:687:4: error: 'struct perf_evlist_mmap_ops' has no member named 'mmap'
> .mmap = perf_evlist__mmap_cb_mmap,
> ^~~~
> evlist.c:687:11: error: excess elements in struct initializer [-Werror]
> .mmap = perf_evlist__mmap_cb_mmap,
> ^~~~~~~~~~~~~~~~~~~~~~~~~
> evlist.c:687:11: note: (near initialization for 'ops')
> evlist.c:685:30: error: storage size of 'ops' isn't known
> struct perf_evlist_mmap_ops ops = {
> ^~~
> evlist.c:685:30: error: unused variable 'ops' [-Werror=unused-variable]
> evlist.c: At top level:
> evlist.c:723:6: error: no previous prototype for '__perf_evlist__set_leader' [-Werror=missing-prototypes]
> void __perf_evlist__set_leader(struct list_head *list, struct perf_evsel *leader)
> ^~~~~~~~~~~~~~~~~~~~~~~~~
> evlist.c: In function '__perf_evlist__set_leader':
> evlist.c:728:2: error: implicit declaration of function '__perf_evlist__for_each_entry'; did you mean 'perf_evlist__for_each_evsel'? [-Werror=implicit-function-declaration]
> __perf_evlist__for_each_entry(list, evsel) {
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> perf_evlist__for_each_evsel
> evlist.c:728:2: error: nested extern declaration of '__perf_evlist__for_each_entry' [-Werror=nested-externs]
> evlist.c:728:45: error: expected ';' before '{' token
> __perf_evlist__for_each_entry(list, evsel) {
> ^
> evlist.c:726:6: error: unused variable 'n' [-Werror=unused-variable]
> int n = 0;
> ^
> evlist.c:723:75: error: unused parameter 'leader' [-Werror=unused-parameter]
> void __perf_evlist__set_leader(struct list_head *list, struct perf_evsel *leader)
> ^~~~~~
> evlist.c: At top level:
> evlist.c:762:6: error: no previous prototype for 'perf_evlist__go_system_wide' [-Werror=missing-prototypes]
> void perf_evlist__go_system_wide(struct perf_evlist *evlist, struct perf_evsel *evsel)
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> evlist.c: In function 'perf_evlist__filter_pollfd':
> evlist.c:386:1: error: control reaches end of non-void function [-Werror=return-type]
> }
> ^
> evlist.c: In function 'perf_evlist__poll':
> evlist.c:391:1: error: control reaches end of non-void function [-Werror=return-type]
> }
> ^
> evlist.c: In function 'perf_evlist__mmap':
> evlist.c:693:1: error: control reaches end of non-void function [-Werror=return-type]
> }
> ^
> evlist.c: In function 'perf_evlist__next_mmap':
> evlist.c:721:1: error: control reaches end of non-void function [-Werror=return-type]
> }
> ^
> At top level:
> evlist.c:459:13: error: 'perf_evlist__set_mmap_first' defined but not used [-Werror=unused-function]
> static void perf_evlist__set_mmap_first(struct perf_evlist *evlist, struct perf_mmap *map,
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> evlist.c:420:13: error: 'perf_evsel__set_sid_idx' defined but not used [-Werror=unused-function]
> static void perf_evsel__set_sid_idx(struct perf_evsel *evsel, int idx, int cpu, int thread)
> ^~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
> make[4]: *** [/git/perf-6.15.0-rc2/tools/build/Makefile.build:85: /tmp/build/perf/libperf/evlist.o] Error 1
> make[4]: *** Waiting for unfinished jobs....
> AR /tmp/build/perf/libapi/libapi.a
> CC /tmp/build/perf/libsubcmd/exec-cmd.o
> CC /tmp/build/perf/libsubcmd/help.o
> CC /tmp/build/perf/libsubcmd/pager.o
> CC /tmp/build/perf/libsubcmd/run-command.o
> CC /tmp/build/perf/libsubcmd/parse-options.o
> CC /tmp/build/perf/libsubcmd/sigchain.o
> CC /tmp/build/perf/libsubcmd/subcmd-config.o
> LD /tmp/build/perf/libsymbol/libsymbol-in.o
> AR /tmp/build/perf/libsymbol/libsymbol.a
> make[3]: *** [Makefile:103: /tmp/build/perf/libperf/libperf-in.o] Error 2
> make[2]: *** [Makefile.perf:976: /tmp/build/perf/libperf/libperf.a] Error 2
> make[2]: *** Waiting for unfinished jobs....
> LD /tmp/build/perf/libsubcmd/libsubcmd-in.o
> AR /tmp/build/perf/libsubcmd/libsubcmd.a
> make[1]: *** [Makefile.perf:287: sub-make] Error 2
> make: *** [Makefile:76: all] Error 2
> make: Leaving directory '/git/perf-6.15.0-rc2/tools/perf'
> + exit 1
> toolsbuilder@...ber:~/git/linux-tools-container-builds$
>
>
> 23 18.51 fedora:38 : FAIL gcc version 13.2.1 20240316 (Red Hat 13.2.1-7) (GCC)
> <SNIP>
> evsel.c:23:6: error: no previous prototype for 'perf_evsel__init' [-Werror=missing-prototypes]
> 23 | void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr,
> | ^~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__init':
> evsel.c:26:30: error: invalid use of undefined type 'struct perf_evsel'
> 26 | INIT_LIST_HEAD(&evsel->node);
> | ^~
> evsel.c:27:30: error: invalid use of undefined type 'struct perf_evsel'
> 27 | INIT_LIST_HEAD(&evsel->per_stream_periods);
> | ^~
> evsel.c:28:14: error: invalid use of undefined type 'struct perf_evsel'
> 28 | evsel->attr = *attr;
> | ^~
> evsel.c:28:23: error: invalid use of undefined type 'struct perf_event_attr'
> 28 | evsel->attr = *attr;
> | ^
> evsel.c:29:14: error: invalid use of undefined type 'struct perf_evsel'
> 29 | evsel->idx = idx;
> | ^~
> evsel.c:30:14: error: invalid use of undefined type 'struct perf_evsel'
> 30 | evsel->leader = evsel;
> | ^~
> evsel.c: In function 'perf_evsel__new':
> evsel.c:35:49: error: invalid application of 'sizeof' to incomplete type 'struct perf_evsel'
> 35 | struct perf_evsel *evsel = zalloc(sizeof(*evsel));
> | ^
> evsel.c: At top level:
> evsel.c:54:5: error: no previous prototype for 'perf_evsel__alloc_fd' [-Werror=missing-prototypes]
> 54 | int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads)
> | ^~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__alloc_fd':
> evsel.c:56:14: error: invalid use of undefined type 'struct perf_evsel'
> 56 | evsel->fd = xyarray__new(ncpus, nthreads, sizeof(int));
> | ^~
> evsel.c:58:18: error: invalid use of undefined type 'struct perf_evsel'
> 58 | if (evsel->fd) {
> | ^~
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:63:43: note: in expansion of macro 'FD'
> 63 | int *fd = FD(evsel, idx, thread);
> | ^~
> evsel.c:71:21: error: invalid use of undefined type 'struct perf_evsel'
> 71 | return evsel->fd != NULL ? 0 : -ENOMEM;
> | ^~
> evsel.c: In function 'perf_evsel__alloc_mmap':
> evsel.c:76:14: error: invalid use of undefined type 'struct perf_evsel'
> 76 | evsel->mmap = xyarray__new(ncpus, nthreads, sizeof(struct perf_mmap));
> | ^~
> evsel.c:78:21: error: invalid use of undefined type 'struct perf_evsel'
> 78 | return evsel->mmap != NULL ? 0 : -ENOMEM;
> | ^~
> evsel.c: In function 'get_group_fd':
> evsel.c:91:42: error: invalid use of undefined type 'struct perf_evsel'
> 91 | struct perf_evsel *leader = evsel->leader;
> | ^~
> evsel.c:103:20: error: invalid use of undefined type 'struct perf_evsel'
> 103 | if (!leader->fd)
> | ^~
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:106:14: note: in expansion of macro 'FD'
> 106 | fd = FD(leader, cpu_map_idx, thread);
> | ^~
> evsel.c: In function 'perf_evsel__open':
> evsel.c:145:18: error: invalid use of undefined type 'struct perf_evsel'
> 145 | if (evsel->fd == NULL &&
> | ^~
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:153:36: note: in expansion of macro 'FD'
> 153 | evsel_fd = FD(evsel, idx, thread);
> | ^~
> evsel.c:163:56: error: invalid use of undefined type 'struct perf_evsel'
> 163 | fd = sys_perf_event_open(&evsel->attr,
> | ^~
> evsel.c: In function 'perf_evsel__close_fd_cpu':
> evsel.c:186:55: error: invalid use of undefined type 'struct perf_evsel'
> 186 | for (thread = 0; thread < xyarray__max_y(evsel->fd); ++thread) {
> | ^~
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:187:27: note: in expansion of macro 'FD'
> 187 | int *fd = FD(evsel, cpu_map_idx, thread);
> | ^~
> evsel.c: At top level:
> evsel.c:196:6: error: no previous prototype for 'perf_evsel__close_fd' [-Werror=missing-prototypes]
> 196 | void perf_evsel__close_fd(struct perf_evsel *evsel)
> | ^~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__close_fd':
> evsel.c:198:53: error: invalid use of undefined type 'struct perf_evsel'
> 198 | for (int idx = 0; idx < xyarray__max_x(evsel->fd); idx++)
> | ^~
> evsel.c: At top level:
> evsel.c:202:6: error: no previous prototype for 'perf_evsel__free_fd' [-Werror=missing-prototypes]
> 202 | void perf_evsel__free_fd(struct perf_evsel *evsel)
> | ^~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__free_fd':
> evsel.c:204:30: error: invalid use of undefined type 'struct perf_evsel'
> 204 | xyarray__delete(evsel->fd);
> | ^~
> evsel.c:205:14: error: invalid use of undefined type 'struct perf_evsel'
> 205 | evsel->fd = NULL;
> | ^~
> evsel.c: In function 'perf_evsel__close':
> evsel.c:210:18: error: invalid use of undefined type 'struct perf_evsel'
> 210 | if (evsel->fd == NULL)
> | ^~
> evsel.c: In function 'perf_evsel__close_cpu':
> evsel.c:219:18: error: invalid use of undefined type 'struct perf_evsel'
> 219 | if (evsel->fd == NULL)
> | ^~
> evsel.c: In function 'perf_evsel__munmap':
> evsel.c:229:18: error: invalid use of undefined type 'struct perf_evsel'
> 229 | if (evsel->fd == NULL || evsel->mmap == NULL)
> | ^~
> evsel.c:229:39: error: invalid use of undefined type 'struct perf_evsel'
> 229 | if (evsel->fd == NULL || evsel->mmap == NULL)
> | ^~
> evsel.c:232:49: error: invalid use of undefined type 'struct perf_evsel'
> 232 | for (idx = 0; idx < xyarray__max_x(evsel->fd); idx++) {
> | ^~
> evsel.c:233:63: error: invalid use of undefined type 'struct perf_evsel'
> 233 | for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) {
> | ^~
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:234:35: note: in expansion of macro 'FD'
> 234 | int *fd = FD(evsel, idx, thread);
> | ^~
> evsel.c:51:16: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:239:43: note: in expansion of macro 'MMAP'
> 239 | perf_mmap__munmap(MMAP(evsel, idx, thread));
> | ^~~~
> evsel.c:51:68: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:239:43: note: in expansion of macro 'MMAP'
> 239 | perf_mmap__munmap(MMAP(evsel, idx, thread));
> | ^~~~
> evsel.c:243:30: error: invalid use of undefined type 'struct perf_evsel'
> 243 | xyarray__delete(evsel->mmap);
> | ^~
> evsel.c:244:14: error: invalid use of undefined type 'struct perf_evsel'
> 244 | evsel->mmap = NULL;
> | ^~
> evsel.c: In function 'perf_evsel__mmap':
> evsel.c:255:18: error: invalid use of undefined type 'struct perf_evsel'
> 255 | if (evsel->fd == NULL || evsel->mmap)
> | ^~
> evsel.c:255:39: error: invalid use of undefined type 'struct perf_evsel'
> 255 | if (evsel->fd == NULL || evsel->mmap)
> | ^~
> evsel.c:258:63: error: invalid use of undefined type 'struct perf_evsel'
> 258 | if (perf_evsel__alloc_mmap(evsel, xyarray__max_x(evsel->fd), xyarray__max_y(evsel->fd)) < 0)
> | ^~
> evsel.c:258:90: error: invalid use of undefined type 'struct perf_evsel'
> 258 | if (perf_evsel__alloc_mmap(evsel, xyarray__max_x(evsel->fd), xyarray__max_y(evsel->fd)) < 0)
> | ^~
> evsel.c:261:49: error: invalid use of undefined type 'struct perf_evsel'
> 261 | for (idx = 0; idx < xyarray__max_x(evsel->fd); idx++) {
> | ^~
> evsel.c:262:63: error: invalid use of undefined type 'struct perf_evsel'
> 262 | for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) {
> | ^~
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:263:35: note: in expansion of macro 'FD'
> 263 | int *fd = FD(evsel, idx, thread);
> | ^~
> evsel.c:265:70: error: invalid use of undefined type 'struct perf_evsel'
> 265 | struct perf_cpu cpu = perf_cpu_map__cpu(evsel->cpus, idx);
> | ^~
> evsel.c:51:16: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:270:31: note: in expansion of macro 'MMAP'
> 270 | map = MMAP(evsel, idx, thread);
> | ^~~~
> evsel.c:51:68: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:270:31: note: in expansion of macro 'MMAP'
> 270 | map = MMAP(evsel, idx, thread);
> | ^~~~
> evsel.c: In function 'perf_evsel__mmap_base':
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:286:19: note: in expansion of macro 'FD'
> 286 | int *fd = FD(evsel, cpu_map_idx, thread);
> | ^~
> evsel.c:51:16: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:288:38: note: in expansion of macro 'MMAP'
> 288 | if (fd == NULL || *fd < 0 || MMAP(evsel, cpu_map_idx, thread) == NULL)
> | ^~~~
> evsel.c:51:68: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:288:38: note: in expansion of macro 'MMAP'
> 288 | if (fd == NULL || *fd < 0 || MMAP(evsel, cpu_map_idx, thread) == NULL)
> | ^~~~
> evsel.c:51:16: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:291:16: note: in expansion of macro 'MMAP'
> 291 | return MMAP(evsel, cpu_map_idx, thread)->base;
> | ^~~~
> evsel.c:51:68: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:291:16: note: in expansion of macro 'MMAP'
> 291 | return MMAP(evsel, cpu_map_idx, thread)->base;
> | ^~~~
> evsel.c: At top level:
> evsel.c:294:5: error: no previous prototype for 'perf_evsel__read_size' [-Werror=missing-prototypes]
> 294 | int perf_evsel__read_size(struct perf_evsel *evsel)
> | ^~~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__read_size':
> evsel.c:296:32: error: invalid use of undefined type 'struct perf_evsel'
> 296 | u64 read_format = evsel->attr.read_format;
> | ^~
> evsel.c:301:27: error: 'PERF_FORMAT_TOTAL_TIME_ENABLED' undeclared (first use in this function)
> 301 | if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c:301:27: note: each undeclared identifier is reported only once for each function it appears in
> evsel.c:304:27: error: 'PERF_FORMAT_TOTAL_TIME_RUNNING' undeclared (first use in this function)
> 304 | if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c:307:27: error: 'PERF_FORMAT_ID' undeclared (first use in this function)
> 307 | if (read_format & PERF_FORMAT_ID)
> | ^~~~~~~~~~~~~~
> evsel.c:310:27: error: 'PERF_FORMAT_LOST' undeclared (first use in this function)
> 310 | if (read_format & PERF_FORMAT_LOST)
> | ^~~~~~~~~~~~~~~~
> evsel.c:313:27: error: 'PERF_FORMAT_GROUP' undeclared (first use in this function)
> 313 | if (read_format & PERF_FORMAT_GROUP) {
> | ^~~~~~~~~~~~~~~~~
> evsel.c:314:27: error: invalid use of undefined type 'struct perf_evsel'
> 314 | nr = evsel->nr_members;
> | ^~
> evsel.c: In function 'perf_evsel__read_group':
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:327:19: note: in expansion of macro 'FD'
> 327 | int *fd = FD(evsel, cpu_map_idx, thread);
> | ^~
> evsel.c:328:32: error: invalid use of undefined type 'struct perf_evsel'
> 328 | u64 read_format = evsel->attr.read_format;
> | ^~
> evsel.c:348:27: error: 'PERF_FORMAT_TOTAL_TIME_ENABLED' undeclared (first use in this function)
> 348 | if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c:350:27: error: 'PERF_FORMAT_TOTAL_TIME_RUNNING' undeclared (first use in this function)
> 350 | if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c:355:27: error: 'PERF_FORMAT_ID' undeclared (first use in this function)
> 355 | if (read_format & PERF_FORMAT_ID)
> | ^~~~~~~~~~~~~~
> evsel.c:357:27: error: 'PERF_FORMAT_LOST' undeclared (first use in this function)
> 357 | if (read_format & PERF_FORMAT_LOST)
> | ^~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__adjust_values':
> evsel.c:371:32: error: invalid use of undefined type 'struct perf_evsel'
> 371 | u64 read_format = evsel->attr.read_format;
> | ^~
> evsel.c:376:27: error: 'PERF_FORMAT_TOTAL_TIME_ENABLED' undeclared (first use in this function)
> 376 | if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> CC /tmp/build/perf/libsubcmd/subcmd-config.o
> evsel.c:379:27: error: 'PERF_FORMAT_TOTAL_TIME_RUNNING' undeclared (first use in this function)
> 379 | if (read_format & PERF_FORMAT_TOTAL_TIME_RUNNING)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> CC /tmp/build/perf/libbpf/staticobjs/libbpf.o
> evsel.c:382:27: error: 'PERF_FORMAT_ID' undeclared (first use in this function)
> 382 | if (read_format & PERF_FORMAT_ID)
> | ^~~~~~~~~~~~~~
> evsel.c:385:27: error: 'PERF_FORMAT_LOST' undeclared (first use in this function)
> 385 | if (read_format & PERF_FORMAT_LOST)
> | ^~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__read':
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:393:19: note: in expansion of macro 'FD'
> 393 | int *fd = FD(evsel, cpu_map_idx, thread);
> | ^~
> evsel.c:394:32: error: invalid use of undefined type 'struct perf_evsel'
> 394 | u64 read_format = evsel->attr.read_format;
> | ^~
> evsel.c:402:27: error: 'PERF_FORMAT_GROUP' undeclared (first use in this function)
> 402 | if (read_format & PERF_FORMAT_GROUP)
> | ^~~~~~~~~~~~~~~~~
> evsel.c:51:16: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:405:13: note: in expansion of macro 'MMAP'
> 405 | if (MMAP(evsel, cpu_map_idx, thread) &&
> | ^~~~
> evsel.c:51:68: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:405:13: note: in expansion of macro 'MMAP'
> 405 | if (MMAP(evsel, cpu_map_idx, thread) &&
> | ^~~~
> evsel.c:406:30: error: 'PERF_FORMAT_ID' undeclared (first use in this function)
> 406 | !(read_format & (PERF_FORMAT_ID | PERF_FORMAT_LOST)) &&
> | ^~~~~~~~~~~~~~
> evsel.c:406:47: error: 'PERF_FORMAT_LOST' undeclared (first use in this function)
> 406 | !(read_format & (PERF_FORMAT_ID | PERF_FORMAT_LOST)) &&
> | ^~~~~~~~~~~~~~~~
> evsel.c:51:16: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:407:35: note: in expansion of macro 'MMAP'
> 407 | !perf_mmap__read_self(MMAP(evsel, cpu_map_idx, thread), count))
> | ^~~~
> evsel.c:51:68: error: invalid use of undefined type 'struct perf_evsel'
> 51 | (_evsel->mmap ? ((struct perf_mmap *) xyarray__entry(_evsel->mmap, _cpu_map_idx, _thread)) \
> | ^~
> evsel.c:407:35: note: in expansion of macro 'MMAP'
> 407 | !perf_mmap__read_self(MMAP(evsel, cpu_map_idx, thread), count))
> | ^~~~
> evsel.c: In function 'perf_evsel__ioctl':
> evsel.c:49:38: error: invalid use of undefined type 'struct perf_evsel'
> 49 | ((int *)xyarray__entry(_evsel->fd, _cpu_map_idx, _thread))
> | ^~
> evsel.c:420:19: note: in expansion of macro 'FD'
> 420 | int *fd = FD(evsel, cpu_map_idx, thread);
> | ^~
> evsel.c: In function 'perf_evsel__run_ioctl':
> evsel.c:434:55: error: invalid use of undefined type 'struct perf_evsel'
> 434 | for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) {
> | ^~
> INSTALL /tmp/build/perf/libperf/include/internal/xyarray.h
> evsel.c: In function 'perf_evsel__enable_cpu':
> evsel.c:446:45: error: 'PERF_EVENT_IOC_ENABLE' undeclared (first use in this function)
> 446 | return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, cpu_map_idx);
> | ^~~~~~~~~~~~~~~~~~~~~
> In file included from evsel.c:6:
> evsel.c: In function 'perf_evsel__enable_thread':
> evsel.c:455:51: error: invalid use of undefined type 'struct perf_evsel'
> 455 | perf_cpu_map__for_each_cpu(cpu, idx, evsel->cpus) {
> | ^~
> /tmp/build/perf/libperf/include/perf/cpumap.h:89:51: note: in definition of macro 'perf_cpu_map__for_each_cpu'
> 89 | for ((idx) = 0, (cpu) = perf_cpu_map__cpu(cpus, idx); \
> | ^~~~
> evsel.c:455:51: error: invalid use of undefined type 'struct perf_evsel'
> 455 | perf_cpu_map__for_each_cpu(cpu, idx, evsel->cpus) {
> | ^~
> /tmp/build/perf/libperf/include/perf/cpumap.h:90:39: note: in definition of macro 'perf_cpu_map__for_each_cpu'
> 90 | (idx) < perf_cpu_map__nr(cpus); \
> | ^~~~
> evsel.c:455:51: error: invalid use of undefined type 'struct perf_evsel'
> 455 | perf_cpu_map__for_each_cpu(cpu, idx, evsel->cpus) {
> | ^~
> /tmp/build/perf/libperf/include/perf/cpumap.h:91:49: note: in definition of macro 'perf_cpu_map__for_each_cpu'
> 91 | (idx)++, (cpu) = perf_cpu_map__cpu(cpus, idx))
> | ^~~~
> evsel.c:456:48: error: 'PERF_EVENT_IOC_ENABLE' undeclared (first use in this function)
> 456 | err = perf_evsel__ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, idx, thread);
> | ^~~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__enable':
> evsel.c:469:45: error: invalid use of undefined type 'struct perf_evsel'
> 469 | for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++)
> | ^~
> evsel.c:470:52: error: 'PERF_EVENT_IOC_ENABLE' undeclared (first use in this function)
> 470 | err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, i);
> | ^~~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__disable_cpu':
> evsel.c:476:45: error: 'PERF_EVENT_IOC_DISABLE' undeclared (first use in this function)
> 476 | return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_DISABLE, NULL, cpu_map_idx);
> | ^~~~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__disable':
> evsel.c:484:45: error: invalid use of undefined type 'struct perf_evsel'
> 484 | for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++)
> | ^~
> evsel.c:485:52: error: 'PERF_EVENT_IOC_DISABLE' undeclared (first use in this function)
> 485 | err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_DISABLE, NULL, i);
> | ^~~~~~~~~~~~~~~~~~~~~~
> evsel.c: At top level:
> evsel.c:489:5: error: no previous prototype for 'perf_evsel__apply_filter' [-Werror=missing-prototypes]
> 489 | int perf_evsel__apply_filter(struct perf_evsel *evsel, const char *filter)
> | ^~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__apply_filter':
> evsel.c:493:47: error: invalid use of undefined type 'struct perf_evsel'
> 493 | for (i = 0; i < perf_cpu_map__nr(evsel->cpus) && !err; i++)
> | ^~
> evsel.c:495:38: error: 'PERF_EVENT_IOC_SET_FILTER' undeclared (first use in this function)
> 495 | PERF_EVENT_IOC_SET_FILTER,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__cpus':
> evsel.c:502:21: error: invalid use of undefined type 'struct perf_evsel'
> 502 | return evsel->cpus;
> | ^~
> evsel.c: In function 'perf_evsel__threads':
> evsel.c:507:21: error: invalid use of undefined type 'struct perf_evsel'
> 507 | return evsel->threads;
> | ^~
> evsel.c: In function 'perf_evsel__attr':
> evsel.c:512:22: error: invalid use of undefined type 'struct perf_evsel'
> 512 | return &evsel->attr;
> | ^~
> evsel.c: At top level:
> evsel.c:515:5: error: no previous prototype for 'perf_evsel__alloc_id' [-Werror=missing-prototypes]
> 515 | int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads)
> | ^~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__alloc_id':
> evsel.c:520:14: error: invalid use of undefined type 'struct perf_evsel'
> 520 | evsel->sample_id = xyarray__new(ncpus, nthreads, sizeof(struct perf_sample_id));
> | ^~
> evsel.c:520:65: error: invalid application of 'sizeof' to incomplete type 'struct perf_sample_id'
> 520 | evsel->sample_id = xyarray__new(ncpus, nthreads, sizeof(struct perf_sample_id));
> | ^~~~~~
> evsel.c:521:18: error: invalid use of undefined type 'struct perf_evsel'
> 521 | if (evsel->sample_id == NULL)
> | ^~
> evsel.c:524:14: error: invalid use of undefined type 'struct perf_evsel'
> 524 | evsel->id = zalloc(ncpus * nthreads * sizeof(u64));
> | ^~
> evsel.c:525:18: error: invalid use of undefined type 'struct perf_evsel'
> 525 | if (evsel->id == NULL) {
> | ^~
> evsel.c:526:38: error: invalid use of undefined type 'struct perf_evsel'
> 526 | xyarray__delete(evsel->sample_id);
> | ^~
> evsel.c:527:22: error: invalid use of undefined type 'struct perf_evsel'
> 527 | evsel->sample_id = NULL;
> | ^~
> evsel.c: At top level:
> evsel.c:534:6: error: no previous prototype for 'perf_evsel__free_id' [-Werror=missing-prototypes]
> 534 | void perf_evsel__free_id(struct perf_evsel *evsel)
> | ^~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__free_id':
> evsel.c:538:30: error: invalid use of undefined type 'struct perf_evsel'
> 538 | xyarray__delete(evsel->sample_id);
> | ^~
> evsel.c:539:14: error: invalid use of undefined type 'struct perf_evsel'
> 539 | evsel->sample_id = NULL;
> | ^~
> In file included from evsel.c:11:
> evsel.c:540:21: error: invalid use of undefined type 'struct perf_evsel'
> 540 | zfree(&evsel->id);
> | ^~
> /git/perf-6.15.0-rc2/tools/include/linux/zalloc.h:10:38: note: in definition of macro 'zfree'
> 10 | #define zfree(ptr) __zfree((void **)(ptr))
> | ^~~
> evsel.c:541:14: error: invalid use of undefined type 'struct perf_evsel'
> 541 | evsel->ids = 0;
> | ^~
> evsel.c:543:9: error: implicit declaration of function 'perf_evsel_for_each_per_thread_period_safe' [-Werror=implicit-function-declaration]
> 543 | perf_evsel_for_each_per_thread_period_safe(evsel, n, pos) {
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c:543:9: error: nested extern declaration of 'perf_evsel_for_each_per_thread_period_safe' [-Werror=nested-externs]
> evsel.c:543:66: error: expected ';' before '{' token
> 543 | perf_evsel_for_each_per_thread_period_safe(evsel, n, pos) {
> | ^~
> | ;
> evsel.c: At top level:
> evsel.c:549:6: error: no previous prototype for 'perf_evsel__attr_has_per_thread_sample_period' [-Werror=missing-prototypes]
> 549 | bool perf_evsel__attr_has_per_thread_sample_period(struct perf_evsel *evsel)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_evsel__attr_has_per_thread_sample_period':
> evsel.c:551:22: error: invalid use of undefined type 'struct perf_evsel'
> 551 | return (evsel->attr.sample_type & PERF_SAMPLE_READ) &&
> | ^~
> evsel.c:551:43: error: 'PERF_SAMPLE_READ' undeclared (first use in this function)
> 551 | return (evsel->attr.sample_type & PERF_SAMPLE_READ) &&
> | ^~~~~~~~~~~~~~~~
> evsel.c:552:23: error: invalid use of undefined type 'struct perf_evsel'
> 552 | (evsel->attr.sample_type & PERF_SAMPLE_TID) &&
> | ^~
> evsel.c:552:44: error: 'PERF_SAMPLE_TID' undeclared (first use in this function); did you mean 'PERF_SAMPLE_MAX_SIZE'?
> 552 | (evsel->attr.sample_type & PERF_SAMPLE_TID) &&
> | ^~~~~~~~~~~~~~~
> | PERF_SAMPLE_MAX_SIZE
> evsel.c:553:22: error: invalid use of undefined type 'struct perf_evsel'
> 553 | evsel->attr.inherit;
> | ^~
> evsel.c: At top level:
> evsel.c:556:48: error: 'struct perf_sample_id' declared inside parameter list will not be visible outside of this definition or declaration [-Werror]
> 556 | u64 *perf_sample_id__get_period_storage(struct perf_sample_id *sid, u32 tid, bool per_thread)
> | ^~~~~~~~~~~~~~
> evsel.c:556:6: error: no previous prototype for 'perf_sample_id__get_period_storage' [-Werror=missing-prototypes]
> 556 | u64 *perf_sample_id__get_period_storage(struct perf_sample_id *sid, u32 tid, bool per_thread)
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c: In function 'perf_sample_id__get_period_storage':
> evsel.c:563:28: error: invalid use of undefined type 'struct perf_sample_id'
> 563 | return &sid->period;
> | ^~
> evsel.c:565:29: error: 'PERF_SAMPLE_ID__HLIST_BITS' undeclared (first use in this function)
> 565 | hash = hash_32(tid, PERF_SAMPLE_ID__HLIST_BITS);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~
> evsel.c:566:20: error: invalid use of undefined type 'struct perf_sample_id'
> 566 | head = &sid->periods[hash];
> | ^~
> In file included from /git/perf-6.15.0-rc2/tools/include/linux/kernel.h:14,
> from /git/perf-6.15.0-rc2/tools/include/linux/list.h:7,
> from evsel.c:9:
> /git/perf-6.15.0-rc2/tools/include/linux/container_of.h:14:33: error: invalid use of undefined type 'struct perf_sample_id_period'
> 14 | const typeof(((type *)0)->member) * __mptr = (ptr); \
> | ^~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:705:40: note: in expansion of macro 'container_of'
> 705 | #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
> | ^~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:716:22: note: in expansion of macro 'hlist_entry'
> 716 | ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
> | ^~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:726:20: note: in expansion of macro 'hlist_entry_safe'
> 726 | for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
> | ^~~~~~~~~~~~~~~~
> evsel.c:568:9: note: in expansion of macro 'hlist_for_each_entry'
> 568 | hlist_for_each_entry(res, head, hnode)
> | ^~~~~~~~~~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/container_of.h:14:54: error: initialization of 'const int *' from incompatible pointer type 'struct hlist_node *' [-Werror=incompatible-pointer-types]
> 14 | const typeof(((type *)0)->member) * __mptr = (ptr); \
> | ^
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:705:40: note: in expansion of macro 'container_of'
> 705 | #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
> | ^~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:716:22: note: in expansion of macro 'hlist_entry'
> 716 | ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
> | ^~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:726:20: note: in expansion of macro 'hlist_entry_safe'
> 726 | for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
> | ^~~~~~~~~~~~~~~~
> evsel.c:568:9: note: in expansion of macro 'hlist_for_each_entry'
> 568 | hlist_for_each_entry(res, head, hnode)
> | ^~~~~~~~~~~~~~~~~~~~
> In file included from /usr/include/sys/mman.h:25,
> from evsel.c:20:
> /git/perf-6.15.0-rc2/tools/include/linux/container_of.h:15:35: error: invalid use of undefined type 'struct perf_sample_id_period'
> 15 | (type *)((char *)__mptr - offsetof(type, member)); })
> | ^~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:705:40: note: in expansion of macro 'container_of'
> 705 | #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
> | ^~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:716:22: note: in expansion of macro 'hlist_entry'
> 716 | ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
> | ^~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:726:20: note: in expansion of macro 'hlist_entry_safe'
> 726 | for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
> | ^~~~~~~~~~~~~~~~
> evsel.c:568:9: note: in expansion of macro 'hlist_for_each_entry'
> 568 | hlist_for_each_entry(res, head, hnode)
> | ^~~~~~~~~~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:728:42: error: invalid use of undefined type 'struct perf_sample_id_period'
> 728 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
> | ^~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:715:19: note: in definition of macro 'hlist_entry_safe'
> 715 | ({ typeof(ptr) ____ptr = (ptr); \
> | ^~~
> evsel.c:568:9: note: in expansion of macro 'hlist_for_each_entry'
> 568 | hlist_for_each_entry(res, head, hnode)
> | ^~~~~~~~~~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:728:42: error: invalid use of undefined type 'struct perf_sample_id_period'
> 728 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
> | ^~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:715:35: note: in definition of macro 'hlist_entry_safe'
> 715 | ({ typeof(ptr) ____ptr = (ptr); \
> | ^~~
> evsel.c:568:9: note: in expansion of macro 'hlist_for_each_entry'
> 568 | hlist_for_each_entry(res, head, hnode)
> | ^~~~~~~~~~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/container_of.h:14:33: error: invalid use of undefined type 'struct perf_sample_id_period'
> 14 | const typeof(((type *)0)->member) * __mptr = (ptr); \
> | ^~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:705:40: note: in expansion of macro 'container_of'
> 705 | #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
> | ^~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:716:22: note: in expansion of macro 'hlist_entry'
> 716 | ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
> | ^~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:728:20: note: in expansion of macro 'hlist_entry_safe'
> 728 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
> | ^~~~~~~~~~~~~~~~
> evsel.c:568:9: note: in expansion of macro 'hlist_for_each_entry'
> 568 | hlist_for_each_entry(res, head, hnode)
> | ^~~~~~~~~~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/container_of.h:14:54: error: initialization of 'const int *' from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
> 14 | const typeof(((type *)0)->member) * __mptr = (ptr); \
> | ^
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:705:40: note: in expansion of macro 'container_of'
> 705 | #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
> | ^~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:716:22: note: in expansion of macro 'hlist_entry'
> 716 | ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
> | ^~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:728:20: note: in expansion of macro 'hlist_entry_safe'
> 728 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
> | ^~~~~~~~~~~~~~~~
> evsel.c:568:9: note: in expansion of macro 'hlist_for_each_entry'
> 568 | hlist_for_each_entry(res, head, hnode)
> | ^~~~~~~~~~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/container_of.h:15:35: error: invalid use of undefined type 'struct perf_sample_id_period'
> 15 | (type *)((char *)__mptr - offsetof(type, member)); })
> | ^~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:705:40: note: in expansion of macro 'container_of'
> 705 | #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
> | ^~~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:716:22: note: in expansion of macro 'hlist_entry'
> 716 | ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
> | ^~~~~~~~~~~
> /git/perf-6.15.0-rc2/tools/include/linux/list.h:728:20: note: in expansion of macro 'hlist_entry_safe'
> 728 | pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
> | ^~~~~~~~~~~~~~~~
> evsel.c:568:9: note: in expansion of macro 'hlist_for_each_entry'
> 568 | hlist_for_each_entry(res, head, hnode)
> | ^~~~~~~~~~~~~~~~~~~~
> evsel.c:569:24: error: invalid use of undefined type 'struct perf_sample_id_period'
> 569 | if (res->tid == tid)
> | ^~
> evsel.c:570:36: error: invalid use of undefined type 'struct perf_sample_id_period'
> 570 | return &res->period;
> | ^~
> evsel.c:572:16: error: invalid use of undefined type 'struct perf_sample_id'
> 572 | if (sid->evsel == NULL)
> | ^~
> evsel.c:575:29: error: invalid application of 'sizeof' to incomplete type 'struct perf_sample_id_period'
> 575 | res = zalloc(sizeof(struct perf_sample_id_period));
> | ^~~~~~
> evsel.c:579:28: error: invalid use of undefined type 'struct perf_sample_id_period'
> 579 | INIT_LIST_HEAD(&res->node);
> | ^~
> evsel.c:580:12: error: invalid use of undefined type 'struct perf_sample_id_period'
> 580 | res->tid = tid;
> | ^~
> evsel.c:582:27: error: invalid use of undefined type 'struct perf_sample_id_period'
> 582 | list_add_tail(&res->node, &sid->evsel->per_stream_periods);
> | ^~
> evsel.c:582:39: error: invalid use of undefined type 'struct perf_sample_id'
> 582 | list_add_tail(&res->node, &sid->evsel->per_stream_periods);
> | ^~
> evsel.c:583:28: error: invalid use of undefined type 'struct perf_sample_id_period'
> 583 | hlist_add_head(&res->hnode, &sid->periods[hash]);
> | ^~
> evsel.c:583:41: error: invalid use of undefined type 'struct perf_sample_id'
> 583 | hlist_add_head(&res->hnode, &sid->periods[hash]);
> | ^~
> evsel.c:585:20: error: invalid use of undefined type 'struct perf_sample_id_period'
> 585 | return &res->period;
> | ^~
> evsel.c:560:13: error: variable 'hash' set but not used [-Werror=unused-but-set-variable]
> 560 | int hash;
> | ^~~~
> evsel.c: In function 'perf_evsel__alloc_fd':
> evsel.c:72:1: error: control reaches end of non-void function [-Werror=return-type]
> 72 | }
> | ^
> evsel.c: In function 'perf_evsel__mmap_base':
> evsel.c:292:1: error: control reaches end of non-void function [-Werror=return-type]
> 292 | }
> | ^
> evsel.c: In function 'perf_evsel__enable_cpu':
> evsel.c:447:1: error: control reaches end of non-void function [-Werror=return-type]
> 447 | }
> | ^
> evsel.c: In function 'perf_evsel__disable_cpu':
> evsel.c:477:1: error: control reaches end of non-void function [-Werror=return-type]
> 477 | }
> | ^
> evsel.c: In function 'perf_evsel__cpus':
> evsel.c:503:1: error: control reaches end of non-void function [-Werror=return-type]
> 503 | }
> | ^
> evsel.c: In function 'perf_evsel__threads':
> evsel.c:508:1: error: control reaches end of non-void function [-Werror=return-type]
> 508 | }
> | ^
> evsel.c: In function 'perf_evsel__attr':
> evsel.c:513:1: error: control reaches end of non-void function [-Werror=return-type]
> 513 | }
> | ^
> evsel.c: In function 'perf_evsel__attr_has_per_thread_sample_period':
> evsel.c:554:1: error: control reaches end of non-void function [-Werror=return-type]
> 554 | }
> | ^
> evsel.c: In function 'perf_sample_id__get_period_storage':
> evsel.c:586:1: error: control reaches end of non-void function [-Werror=return-type]
> 586 | }
> | ^
> cc1: all warnings being treated as errors
> make[4]: *** [/git/perf-6.15.0-rc2/tools/build/Makefile.build:85: /tmp/build/perf/libperf/evsel.o] Error 1
> make[4]: *** Waiting for unfinished jobs....
> LD /tmp/build/perf/jvmti/jvmti-in.o
> CC /tmp/build/perf/libbpf/staticobjs/bpf.o
> INSTALL libperf_headers
> CC /tmp/build/perf/libbpf/staticobjs/nlattr.o
> LD /tmp/build/perf/libapi/libapi-in.o
> AR /tmp/build/perf/libapi/libapi.a
> CC /tmp/build/perf/libbpf/staticobjs/libbpf_errno.o
> CC /tmp/build/perf/libbpf/staticobjs/btf.o
> CC /tmp/build/perf/libbpf/staticobjs/str_error.o
> CC /tmp/build/perf/libbpf/staticobjs/netlink.o
> CC /tmp/build/perf/libbpf/staticobjs/bpf_prog_linfo.o
> CC /tmp/build/perf/libbpf/staticobjs/libbpf_probes.o
> CC /tmp/build/perf/libbpf/staticobjs/btf_dump.o
> CC /tmp/build/perf/libbpf/staticobjs/ringbuf.o
> CC /tmp/build/perf/libbpf/staticobjs/hashmap.o
> CC /tmp/build/perf/libbpf/staticobjs/strset.o
> CC /tmp/build/perf/libbpf/staticobjs/linker.o
> CC /tmp/build/perf/libbpf/staticobjs/gen_loader.o
> CC /tmp/build/perf/libbpf/staticobjs/usdt.o
> CC /tmp/build/perf/libbpf/staticobjs/relo_core.o
> CC /tmp/build/perf/libbpf/staticobjs/zip.o
> CC /tmp/build/perf/libbpf/staticobjs/elf.o
> CC /tmp/build/perf/libbpf/staticobjs/btf_iter.o
> CC /tmp/build/perf/libbpf/staticobjs/features.o
> CC /tmp/build/perf/libbpf/staticobjs/btf_relocate.o
> make[3]: *** [Makefile:103: /tmp/build/perf/libperf/libperf-in.o] Error 2
> make[2]: *** [Makefile.perf:976: /tmp/build/perf/libperf/libperf.a] Error 2
> make[2]: *** Waiting for unfinished jobs....
> LD /tmp/build/perf/libsubcmd/libsubcmd-in.o
> AR /tmp/build/perf/libsubcmd/libsubcmd.a
> LD /tmp/build/perf/libbpf/staticobjs/libbpf-in.o
> LINK /tmp/build/perf/libbpf/libbpf.a
>
> Auto-detecting system features:
> ... clang-bpf-co-re: [ on ]
> ... llvm: [ on ]
> ... libcap: [ on ]
> ... libbfd: [ on ]
>
> MKDIR /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf
> MKDIR /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/
> MKDIR /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/hashmap.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/relo_core.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/libbpf_internal.h
> GEN /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/bpf_helper_defs.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/bpf.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/libbpf.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/btf.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/libbpf_legacy.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/libbpf_common.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/bpf_helpers.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/bpf_tracing.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/bpf_core_read.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/bpf_endian.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/libbpf_version.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/skel_internal.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/usdt.bpf.h
> INSTALL /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/include/bpf/bpf_helper_defs.h
> INSTALL libbpf_headers
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/bpf.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/libbpf.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/nlattr.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/btf.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/libbpf_errno.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/str_error.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/netlink.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/bpf_prog_linfo.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/libbpf_probes.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/hashmap.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/btf_dump.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/ringbuf.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/strset.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/linker.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/gen_loader.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/zip.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/usdt.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/relo_core.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/btf_relocate.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/elf.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/features.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/btf_iter.o
> LD /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/staticobjs/libbpf-in.o
> LINK /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/libbpf/libbpf.a
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/main.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/common.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/json_writer.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/gen.o
> CC /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/btf.o
> LINK /tmp/build/perf/util/bpf_skel/.tmp/bootstrap/bpftool
> make[1]: *** [Makefile.perf:287: sub-make] Error 2
> make: *** [Makefile:76: all] Error 2
> make: Leaving directory '/git/perf-6.15.0-rc2/tools/perf'
> + exit 1
> toolsbuilder@...ber:~/git/linux-tools-container-builds$
>
>
Powered by blists - more mailing lists