* Building perf with BUILD_BPF_SKEL=1 by default @ 2021-12-03 13:10 Arnaldo Carvalho de Melo 2021-12-03 13:28 ` Arnaldo Carvalho de Melo 2021-12-03 19:32 ` Song Liu 0 siblings, 2 replies; 16+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-12-03 13:10 UTC (permalink / raw) To: Song Liu Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users Hi Song, So I'm changing all my containers to build with BUILD_BPF_SKEL=1 to then make this the default, so far older containers fail either because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1 env var to disable that in those containers and then there is this other case where clang is recent enough but: util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' __uint(map_flags, BPF_F_PRESERVE_ELEMS); Because the system's /usr/include/linux/bpf.h doesn't have that BPF_F_PRESERVE_ELEMS enum entry. These are enums to make them available via BTF, but then I can't use the: #ifdef BPF_F_PRESERVE_ELEMS #define BPF_F_PRESERVE_ELEMS (1U << 11) #endif approach. But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship: $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h BPF_F_PRESERVE_ELEMS = (1U << 11), $ so we need to switch to using it somehow, this way we can build in more systems and make bperf and other BPF enabled features. From a quick look I couldn't find where to add $(sourcedir)/tools/include/uapi/ to the include path used to build util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look? Thanks, - Arnaldo ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-03 13:10 Building perf with BUILD_BPF_SKEL=1 by default Arnaldo Carvalho de Melo @ 2021-12-03 13:28 ` Arnaldo Carvalho de Melo 2021-12-03 14:23 ` Arnaldo Carvalho de Melo 2021-12-03 20:05 ` Song Liu 2021-12-03 19:32 ` Song Liu 1 sibling, 2 replies; 16+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-12-03 13:28 UTC (permalink / raw) To: Song Liu Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users Em Fri, Dec 03, 2021 at 10:10:42AM -0300, Arnaldo Carvalho de Melo escreveu: > Hi Song, > > So I'm changing all my containers to build with BUILD_BPF_SKEL=1 > to then make this the default, so far older containers fail either > because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1 > env var to disable that in those containers and then there is this other > case where clang is recent enough but: > > util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' > __uint(map_flags, BPF_F_PRESERVE_ELEMS); > > Because the system's /usr/include/linux/bpf.h doesn't have that > BPF_F_PRESERVE_ELEMS enum entry. > > These are enums to make them available via BTF, but then I can't use > the: > > #ifdef BPF_F_PRESERVE_ELEMS > #define BPF_F_PRESERVE_ELEMS (1U << 11) > #endif > > approach. > > But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship: > > $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h > BPF_F_PRESERVE_ELEMS = (1U << 11), > $ > > so we need to switch to using it somehow, this way we can build in more > systems and make bperf and other BPF enabled features. > > From a quick look I couldn't find where to add > $(sourcedir)/tools/include/uapi/ to the include path used to build > util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look? The failure for fedora:32, which seems to be on the threshold for clang to be considered recent enough for building skels fails differently: clang version 10.0.1 (Fedora 10.0.1-3.fc32) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/10 Selected GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Selected multilib: .;@m64 + '[' '!' ']' + rm -rf /tmp/build/perf + mkdir /tmp/build/perf + make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= BUILD_BPF_SKEL=1 -C tools/perf O=/tmp/build/perf make: Entering directory '/git/perf-5.16.0-rc3/tools/perf' BUILD: Doing 'make -j32' parallel build HOSTCC /tmp/build/perf/fixdep.o HOSTLD /tmp/build/perf/fixdep-in.o LINK /tmp/build/perf/fixdep /bin/sh: -c: line 0: syntax error near unexpected token `(' /bin/sh: -c: line 0: `expr bison (GNU Bison) 3.5 \>\= 371' Makefile.config:997: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev Auto-detecting system features: ... dwarf: [ on ] ... dwarf_getlocations: [ on ] ... glibc: [ on ] ... libbfd: [ on ] ... libbfd-buildid: [ on ] ... libcap: [ on ] ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ on ] ... libperl: [ on ] ... libpython: [ on ] ... libcrypto: [ on ] ... libunwind: [ on ] ... libdw-dwarf-unwind: [ on ] ... zlib: [ on ] ... lzma: [ on ] ... get_cpuid: [ on ] ... bpf: [ on ] ... libaio: [ on ] ... libzstd: [ on ] ... disassembler-four-args: [ on ] GEN /tmp/build/perf/common-cmds.h PERF_VERSION = 5.16.rc3.g0c338bcdfdb1 CC /tmp/build/perf/exec-cmd.o CC /tmp/build/perf/help.o CC /tmp/build/perf/cpu.o CC /tmp/build/perf/pager.o CC /tmp/build/perf/debug.o GEN perf-archive CC /tmp/build/perf/parse-options.o CC /tmp/build/perf/str_error_r.o GEN perf-with-kcore CC /tmp/build/perf/run-command.o CC /tmp/build/perf/sigchain.o GEN perf-iostat MKDIR /tmp/build/perf/fd/ MKDIR /tmp/build/perf/fs/ CC /tmp/build/perf/subcmd-config.o MKDIR /tmp/build/perf/jvmti/ MKDIR /tmp/build/perf/fs/ MKDIR /tmp/build/perf/jvmti/ CC /tmp/build/perf/dlfilters/dlfilter-test-api-v0.o CC /tmp/build/perf/dlfilters/dlfilter-show-cycles.o MKDIR /tmp/build/perf/jvmti/ CC /tmp/build/perf/fd/array.o MKDIR /tmp/build/perf/fs/ CC /tmp/build/perf/fs/fs.o MKDIR /tmp/build/perf/jvmti/ MKDIR /tmp/build/perf/pmu-events/ CC /tmp/build/perf/event-parse.o MKDIR /tmp/build/perf/pmu-events/ CC /tmp/build/perf/jvmti/libjvmti.o CC /tmp/build/perf/jvmti/jvmti_agent.o CC /tmp/build/perf/fs/tracing_path.o CC /tmp/build/perf/jvmti/libstring.o CC /tmp/build/perf/fs/cgroup.o HOSTCC /tmp/build/perf/pmu-events/json.o CC /tmp/build/perf/jvmti/libctype.o CC /tmp/build/perf/core.o HOSTCC /tmp/build/perf/pmu-events/jsmn.o MKDIR /tmp/build/perf/pmu-events/ HOSTCC /tmp/build/perf/pmu-events/jevents.o CC /tmp/build/perf/cpumap.o CC /tmp/build/perf/plugin_jbd2.o CC /tmp/build/perf/plugin_hrtimer.o CC /tmp/build/perf/plugin_kmem.o CC /tmp/build/perf/threadmap.o CC /tmp/build/perf/plugin_kvm.o CC /tmp/build/perf/evsel.o CC /tmp/build/perf/plugin_mac80211.o LINK /tmp/build/perf/dlfilters/dlfilter-show-cycles.so CC /tmp/build/perf/plugin_sched_switch.o make[3]: *** No rule to make target 'kernelversion'. Stop. CC /tmp/build/perf/plugin_function.o LD /tmp/build/perf/fd/libapi-in.o CC /tmp/build/perf/event-plugin.o GEN /tmp/build/perf/libbpf/bpf_helper_defs.h CC /tmp/build/perf/plugin_futex.o CC /tmp/build/perf/plugin_xen.o CC /tmp/build/perf/plugin_scsi.o CC /tmp/build/perf/evlist.o INSTALL /tmp/build/perf/libbpf/include/bpf/bpf.h LD /tmp/build/perf/plugin_jbd2-in.o CC /tmp/build/perf/plugin_cfg80211.o INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf.h LD /tmp/build/perf/plugin_hrtimer-in.o LD /tmp/build/perf/fs/libapi-in.o LD /tmp/build/perf/plugin_kmem-in.o CC /tmp/build/perf/plugin_tlb.o LINK /tmp/build/perf/dlfilters/dlfilter-test-api-v0.so CC /tmp/build/perf/mmap.o CC /tmp/build/perf/zalloc.o LINK /tmp/build/perf/plugin_jbd2.so LINK /tmp/build/perf/plugin_hrtimer.so INSTALL /tmp/build/perf/libbpf/include/bpf/btf.h CC /tmp/build/perf/xyarray.o CC /tmp/build/perf/trace-seq.o LD /tmp/build/perf/plugin_mac80211-in.o LD /tmp/build/perf/libapi-in.o LD /tmp/build/perf/plugin_kvm-in.o CC /tmp/build/perf/parse-filter.o CC /tmp/build/perf/parse-utils.o LD /tmp/build/perf/plugin_sched_switch-in.o CC /tmp/build/perf/kbuffer-parse.o CC /tmp/build/perf/tep_strerror.o HOSTLD /tmp/build/perf/pmu-events/jevents-in.o INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf_common.h INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf_legacy.h CC /tmp/build/perf/event-parse-api.o INSTALL /tmp/build/perf/libbpf/include/bpf/xsk.h INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_helpers.h AR /tmp/build/perf/libapi.a LD /tmp/build/perf/plugin_function-in.o INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_tracing.h LINK /tmp/build/perf/plugin_kmem.so LINK /tmp/build/perf/plugin_mac80211.so LINK /tmp/build/perf/plugin_kvm.so LD /tmp/build/perf/plugin_xen-in.o LINK /tmp/build/perf/plugin_sched_switch.so LD /tmp/build/perf/plugin_cfg80211-in.o CC /tmp/build/perf/lib.o INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_endian.h LD /tmp/build/perf/plugin_futex-in.o LD /tmp/build/perf/plugin_scsi-in.o INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_core_read.h LINK /tmp/build/perf/pmu-events/jevents LD /tmp/build/perf/plugin_tlb-in.o LINK /tmp/build/perf/plugin_function.so LINK /tmp/build/perf/plugin_xen.so INSTALL /tmp/build/perf/libbpf/include/bpf/skel_internal.h LINK /tmp/build/perf/plugin_cfg80211.so INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf_version.h LINK /tmp/build/perf/plugin_futex.so INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h LINK /tmp/build/perf/plugin_scsi.so LD /tmp/build/perf/jvmti/jvmti-in.o LINK /tmp/build/perf/plugin_tlb.so MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ LD /tmp/build/perf/libsubcmd-in.o MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ CC /tmp/build/perf/libbpf/staticobjs/xsk.o CC /tmp/build/perf/libbpf/staticobjs/libbpf.o LINK /tmp/build/perf/libperf-jvmti.so CC /tmp/build/perf/libbpf/staticobjs/bpf.o CC /tmp/build/perf/libbpf/staticobjs/nlattr.o CC /tmp/build/perf/libbpf/staticobjs/btf.o CC /tmp/build/perf/libbpf/staticobjs/libbpf_errno.o CC /tmp/build/perf/libbpf/staticobjs/hashmap.o CC /tmp/build/perf/libbpf/staticobjs/str_error.o CC /tmp/build/perf/libbpf/staticobjs/netlink.o CC /tmp/build/perf/libbpf/staticobjs/btf_dump.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/ringbuf.o CC /tmp/build/perf/libbpf/staticobjs/strset.o GEN /tmp/build/perf/libtraceevent-dynamic-list CC /tmp/build/perf/libbpf/staticobjs/linker.o CC /tmp/build/perf/libbpf/staticobjs/gen_loader.o CC /tmp/build/perf/libbpf/staticobjs/relo_core.o AR /tmp/build/perf/libsubcmd.a LD /tmp/build/perf/libtraceevent-in.o GEN /tmp/build/perf/pmu-events/pmu-events.c LINK /tmp/build/perf/libtraceevent.a LD /tmp/build/perf/libperf-in.o AR /tmp/build/perf/libperf.a GEN /tmp/build/perf/python/perf.so CC /tmp/build/perf/pmu-events/pmu-events.o Auto-detecting system features: ... libbfd: [ on ] ... disassembler-four-args: [ on ] ... zlib: [ on ] ... libcap: [ on ] ... clang-bpf-co-re: [ 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 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_common.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/xsk.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_endian.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/skel_internal.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/bpf_helper_defs.h MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ 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/libbpf.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/bpf.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/ringbuf.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/strset.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/xsk.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/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/relo_core.o LD /tmp/build/perf/pmu-events/pmu-events-in.o LD /tmp/build/perf/libbpf/staticobjs/libbpf-in.o LINK /tmp/build/perf/libbpf/libbpf.a 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/common.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/main.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/xlated_dumper.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/btf.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/btf_dumper.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/disasm.o LINK /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/bpftool GEN /tmp/build/perf/util/bpf_skel/vmlinux.h CLANG /tmp/build/perf/util/bpf_skel/.tmp/bpf_prog_profiler.bpf.o CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_follower.bpf.o CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_cgroup.bpf.o GENSKEL /tmp/build/perf/util/bpf_skel/bpf_prog_profiler.skel.h GENSKEL /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h libbpf: elf: skipping unrecognized data section(9) .eh_frame libbpf: elf: skipping relo section(15) .rel.eh_frame for section(9) .eh_frame libbpf: elf: skipping unrecognized data section(7) .eh_frame libbpf: elf: skipping relo section(12) .rel.eh_frame for section(7) .eh_frame libbpf: map 'prev_readings': unexpected def kind var. Error: failed to open BPF object file: Invalid argument make[2]: *** [Makefile.perf:1076: /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h] Error 255 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [Makefile.perf:240: sub-make] Error 2 make: *** [Makefile:70: all] Error 2 make: Leaving directory '/git/perf-5.16.0-rc3/tools/perf' + exit 1 [perfbuilder@five 32]$ ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-03 13:28 ` Arnaldo Carvalho de Melo @ 2021-12-03 14:23 ` Arnaldo Carvalho de Melo 2021-12-03 19:40 ` Song Liu 2021-12-03 20:05 ` Song Liu 1 sibling, 1 reply; 16+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-12-03 14:23 UTC (permalink / raw) To: Song Liu Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users Em Fri, Dec 03, 2021 at 10:28:00AM -0300, Arnaldo Carvalho de Melo escreveu: > Em Fri, Dec 03, 2021 at 10:10:42AM -0300, Arnaldo Carvalho de Melo escreveu: > > Hi Song, > > > > So I'm changing all my containers to build with BUILD_BPF_SKEL=1 > > to then make this the default, so far older containers fail either > > because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1 > > env var to disable that in those containers and then there is this other > > case where clang is recent enough but: > > > > util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' > > __uint(map_flags, BPF_F_PRESERVE_ELEMS); > > > > Because the system's /usr/include/linux/bpf.h doesn't have that > > BPF_F_PRESERVE_ELEMS enum entry. > > > > These are enums to make them available via BTF, but then I can't use > > the: > > > > #ifdef BPF_F_PRESERVE_ELEMS > > #define BPF_F_PRESERVE_ELEMS (1U << 11) > > #endif > > > > approach. > > > > But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship: > > > > $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h > > BPF_F_PRESERVE_ELEMS = (1U << 11), > > $ > > so we need to switch to using it somehow, this way we can build in more > > systems and make bperf and other BPF enabled features. > > From a quick look I couldn't find where to add > > $(sourcedir)/tools/include/uapi/ to the include path used to build > > util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look? > The failure for fedora:32, which seems to be on the threshold for clang > to be considered recent enough for building skels fails differently: > clang version 10.0.1 (Fedora 10.0.1-3.fc32) Amazon Linux 2 fails differently: clang version 11.1.0 (Amazon Linux 2 11.1.0-1.amzn2.0.2) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/7 Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/7 Selected GCC installation: /usr/lib/gcc/x86_64-redhat-linux/7 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Selected multilib: .;@m64 + '[' '!' ']' + rm -rf /tmp/build/perf + mkdir /tmp/build/perf + make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= BUILD_BPF_SKEL=1 -C tools/perf O=/tmp/build/perf make: Entering directory `/git/perf-5.16.0-rc3/tools/perf' BUILD: Doing 'make -j32' parallel build HOSTCC /tmp/build/perf/fixdep.o HOSTLD /tmp/build/perf/fixdep-in.o LINK /tmp/build/perf/fixdep Makefile.config:780: Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev Makefile.config:997: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev Auto-detecting system features: ... dwarf: [ on ] ... dwarf_getlocations: [ on ] ... glibc: [ on ] ... libbfd: [ on ] ... libbfd-buildid: [ on ] ... libcap: [ on ] ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ on ] ... libperl: [ OFF ] ... libpython: [ on ] ... libcrypto: [ on ] ... libunwind: [ on ] ... libdw-dwarf-unwind: [ on ] ... zlib: [ on ] ... lzma: [ on ] ... get_cpuid: [ on ] ... bpf: [ on ] ... libaio: [ on ] ... libzstd: [ on ] ... disassembler-four-args: [ on ] GEN /tmp/build/perf/common-cmds.h PERF_VERSION = 5.16.rc3.g0c338bcdfdb1 GEN perf-archive CC /tmp/build/perf/cpu.o GEN perf-with-kcore MKDIR /tmp/build/perf/fd/ CC /tmp/build/perf/exec-cmd.o MKDIR /tmp/build/perf/fs/ MKDIR /tmp/build/perf/jvmti/ CC /tmp/build/perf/debug.o CC /tmp/build/perf/help.o MKDIR /tmp/build/perf/fs/ GEN perf-iostat CC /tmp/build/perf/str_error_r.o CC /tmp/build/perf/fd/array.o CC /tmp/build/perf/pager.o CC /tmp/build/perf/fs/fs.o CC /tmp/build/perf/jvmti/libjvmti.o CC /tmp/build/perf/parse-options.o CC /tmp/build/perf/fs/tracing_path.o CC /tmp/build/perf/dlfilters/dlfilter-test-api-v0.o MKDIR /tmp/build/perf/jvmti/ CC /tmp/build/perf/run-command.o MKDIR /tmp/build/perf/fs/ CC /tmp/build/perf/event-parse.o CC /tmp/build/perf/jvmti/libstring.o CC /tmp/build/perf/sigchain.o MKDIR /tmp/build/perf/pmu-events/ CC /tmp/build/perf/event-plugin.o CC /tmp/build/perf/subcmd-config.o CC /tmp/build/perf/jvmti/jvmti_agent.o MKDIR /tmp/build/perf/pmu-events/ CC /tmp/build/perf/trace-seq.o CC /tmp/build/perf/fs/cgroup.o CC /tmp/build/perf/jvmti/libctype.o HOSTCC /tmp/build/perf/pmu-events/json.o CC /tmp/build/perf/core.o HOSTCC /tmp/build/perf/pmu-events/jsmn.o CC /tmp/build/perf/cpumap.o CC /tmp/build/perf/plugin_jbd2.o CC /tmp/build/perf/dlfilters/dlfilter-show-cycles.o MKDIR /tmp/build/perf/pmu-events/ CC /tmp/build/perf/parse-filter.o CC /tmp/build/perf/threadmap.o HOSTCC /tmp/build/perf/pmu-events/jevents.o CC /tmp/build/perf/plugin_hrtimer.o CC /tmp/build/perf/parse-utils.o CC /tmp/build/perf/evsel.o CC /tmp/build/perf/plugin_kmem.o CC /tmp/build/perf/kbuffer-parse.o LD /tmp/build/perf/fd/libapi-in.o CC /tmp/build/perf/evlist.o CC /tmp/build/perf/plugin_kvm.o CC /tmp/build/perf/tep_strerror.o CC /tmp/build/perf/mmap.o CC /tmp/build/perf/event-parse-api.o CC /tmp/build/perf/plugin_mac80211.o LD /tmp/build/perf/plugin_jbd2-in.o CC /tmp/build/perf/zalloc.o LINK /tmp/build/perf/dlfilters/dlfilter-test-api-v0.so CC /tmp/build/perf/plugin_sched_switch.o LINK /tmp/build/perf/dlfilters/dlfilter-show-cycles.so CC /tmp/build/perf/plugin_function.o CC /tmp/build/perf/xyarray.o LD /tmp/build/perf/fs/libapi-in.o LD /tmp/build/perf/plugin_hrtimer-in.o CC /tmp/build/perf/plugin_futex.o CC /tmp/build/perf/lib.o CC /tmp/build/perf/plugin_xen.o LD /tmp/build/perf/libapi-in.o LD /tmp/build/perf/plugin_kmem-in.o make[3]: *** No rule to make target `kernelversion'. Stop. CC /tmp/build/perf/plugin_scsi.o CC /tmp/build/perf/plugin_cfg80211.o CC /tmp/build/perf/plugin_tlb.o LINK /tmp/build/perf/plugin_jbd2.so GEN /tmp/build/perf/libbpf/bpf_helper_defs.h LINK /tmp/build/perf/plugin_hrtimer.so INSTALL /tmp/build/perf/libbpf/include/bpf/bpf.h LINK /tmp/build/perf/plugin_kmem.so AR /tmp/build/perf/libapi.a INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf.h LD /tmp/build/perf/plugin_kvm-in.o LD /tmp/build/perf/plugin_sched_switch-in.o INSTALL /tmp/build/perf/libbpf/include/bpf/btf.h LD /tmp/build/perf/plugin_mac80211-in.o INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf_common.h INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf_legacy.h INSTALL /tmp/build/perf/libbpf/include/bpf/xsk.h HOSTLD /tmp/build/perf/pmu-events/jevents-in.o INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_helpers.h INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_tracing.h LD /tmp/build/perf/plugin_function-in.o LINK /tmp/build/perf/plugin_kvm.so INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_endian.h LINK /tmp/build/perf/plugin_sched_switch.so INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_core_read.h INSTALL /tmp/build/perf/libbpf/include/bpf/skel_internal.h LINK /tmp/build/perf/plugin_mac80211.so INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf_version.h LINK /tmp/build/perf/pmu-events/jevents LD /tmp/build/perf/plugin_futex-in.o LINK /tmp/build/perf/plugin_function.so LD /tmp/build/perf/plugin_xen-in.o LINK /tmp/build/perf/plugin_futex.so LD /tmp/build/perf/plugin_cfg80211-in.o LD /tmp/build/perf/plugin_tlb-in.o LINK /tmp/build/perf/plugin_xen.so LD /tmp/build/perf/jvmti/jvmti-in.o LINK /tmp/build/perf/plugin_cfg80211.so LINK /tmp/build/perf/plugin_tlb.so LD /tmp/build/perf/plugin_scsi-in.o INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ LINK /tmp/build/perf/libperf-jvmti.so MKDIR /tmp/build/perf/libbpf/staticobjs/ LINK /tmp/build/perf/plugin_scsi.so MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ MKDIR /tmp/build/perf/libbpf/staticobjs/ CC /tmp/build/perf/libbpf/staticobjs/libbpf.o CC /tmp/build/perf/libbpf/staticobjs/btf_dump.o CC /tmp/build/perf/libbpf/staticobjs/bpf.o CC /tmp/build/perf/libbpf/staticobjs/nlattr.o CC /tmp/build/perf/libbpf/staticobjs/btf.o CC /tmp/build/perf/libbpf/staticobjs/libbpf_errno.o CC /tmp/build/perf/libbpf/staticobjs/str_error.o CC /tmp/build/perf/libbpf/staticobjs/ringbuf.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/xsk.o CC /tmp/build/perf/libbpf/staticobjs/strset.o CC /tmp/build/perf/libbpf/staticobjs/hashmap.o CC /tmp/build/perf/libbpf/staticobjs/linker.o CC /tmp/build/perf/libbpf/staticobjs/gen_loader.o CC /tmp/build/perf/libbpf/staticobjs/relo_core.o LD /tmp/build/perf/libsubcmd-in.o GEN /tmp/build/perf/pmu-events/pmu-events.c GEN /tmp/build/perf/libtraceevent-dynamic-list AR /tmp/build/perf/libsubcmd.a LD /tmp/build/perf/libtraceevent-in.o LINK /tmp/build/perf/libtraceevent.a LD /tmp/build/perf/libperf-in.o AR /tmp/build/perf/libperf.a GEN /tmp/build/perf/python/perf.so CC /tmp/build/perf/pmu-events/pmu-events.o Auto-detecting system features: ... libbfd: [ on ] ... disassembler-four-args: [ on ] ... zlib: [ on ] ... libcap: [ on ] ... clang-bpf-co-re: [ 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 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_common.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/xsk.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_endian.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/skel_internal.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/bpf_helper_defs.h MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/xsk.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/bpf.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/hashmap.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/netlink.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/libbpf_probes.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/relo_core.o LD /tmp/build/perf/pmu-events/pmu-events-in.o LD /tmp/build/perf/libbpf/staticobjs/libbpf-in.o LINK /tmp/build/perf/libbpf/libbpf.a 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/json_writer.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/gen.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/common.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/btf.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/xlated_dumper.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/btf_dumper.o CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/disasm.o LINK /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/bpftool GEN /tmp/build/perf/util/bpf_skel/vmlinux.h CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o CLANG /tmp/build/perf/util/bpf_skel/.tmp/bpf_prog_profiler.bpf.o CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_cgroup.bpf.o CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_follower.bpf.o util/bpf_skel/bpf_prog_profiler.bpf.c:18:21: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' __uint(value_size, sizeof(struct bpf_perf_event_value)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /tmp/build/perf/libbpf/include/bpf/bpf_helpers.h:13:39: note: expanded from macro '__uint' #define __uint(name, val) int (*name)[val] ^~~ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:26:21: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' __uint(value_size, sizeof(struct bpf_perf_event_value)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /tmp/build/perf/libbpf/include/bpf/bpf_helpers.h:13:39: note: expanded from macro '__uint' #define __uint(name, val) int (*name)[val] ^~~ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:45:59: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' err = bpf_perf_event_read_value(&events, key, ptr, sizeof(*ptr)); ^~~~~~ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:55:39: error: variable has incomplete type 'struct bpf_perf_event_value' struct bpf_perf_event_value *before, diff; ^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:60:22: error: incomplete definition of type 'struct bpf_perf_event_value' if (before && before->counter) { ~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:63:23: error: incomplete definition of type 'struct bpf_perf_event_value' diff.counter = after->counter - before->counter; ~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:63:41: error: incomplete definition of type 'struct bpf_perf_event_value' diff.counter = after->counter - before->counter; ~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:64:23: error: incomplete definition of type 'struct bpf_perf_event_value' diff.enabled = after->enabled - before->enabled; ~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:64:41: error: incomplete definition of type 'struct bpf_perf_event_value' diff.enabled = after->enabled - before->enabled; ~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:65:23: error: incomplete definition of type 'struct bpf_perf_event_value' diff.running = after->running - before->running; ~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:65:41: error: incomplete definition of type 'struct bpf_perf_event_value' diff.running = after->running - before->running; ~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:69:9: error: incomplete definition of type 'struct bpf_perf_event_value' accum->counter += diff.counter; ~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:70:9: error: incomplete definition of type 'struct bpf_perf_event_value' accum->enabled += diff.enabled; ~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:71:9: error: incomplete definition of type 'struct bpf_perf_event_value' accum->running += diff.running; ~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:79:30: error: variable has incomplete type 'struct bpf_perf_event_value' struct bpf_perf_event_value reading; ^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ 15 errors generated. In file included from util/bpf_skel/bperf_follower.bpf.c:7: util/bpf_skel/bperf.h:10:21: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' In file included from util/bpf_skel/bperf_leader.bpf.c:7: util/bpf_skel/bperf.h:10: __uint(value_size, sizeof(struct bpf_perf_event_value));21 : ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value'/tmp/build/perf/libbpf/include/bpf/bpf_helpers.h :13:39: note: expanded from macro '__uint' #define __uint(name, val) int (*name)[val] ^~~ __uint(value_size, sizeof(struct bpf_perf_event_value)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /tmp/build/perf/libbpf/include/bpf/bpf_helpers.h:13:39: note: expanded from macro '__uint' #define __uint(name, val) int (*name)[val] ^~~ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:62:11: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->counter += diff_val->counter; ~~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:62:32: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->counter += diff_val->counter; ~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:63:11: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->enabled += diff_val->enabled; ~~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:63:32: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->enabled += diff_val->enabled; ~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:64:11: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->running += diff_val->running; ~~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:64:32: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->running += diff_val->running; ~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' __uint(map_flags, BPF_F_PRESERVE_ELEMS); ^ 7 errors generated. util/bpf_skel/bperf_leader.bpf.c:22:30: error: variable has incomplete type 'struct bpf_perf_event_value' struct bpf_perf_event_value val, *prev_val, *diff_val; ^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:39:10: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->counter = val.counter - prev_val->counter; ~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:39:44: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->counter = val.counter - prev_val->counter; ~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:40:10: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->enabled = val.enabled - prev_val->enabled; ~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:40:44: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->enabled = val.enabled - prev_val->enabled; ~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:41:10: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->running = val.running - prev_val->running; ~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:41:44: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->running = val.running - prev_val->running; ~~~~~~~~^ /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' struct bpf_perf_event_value; ^ 9 errors generated. make[2]: *** [/tmp/build/perf/util/bpf_skel/.tmp/bpf_prog_profiler.bpf.o] Error 1 make[2]: *** Waiting for unfinished jobs.... make[2]: *** [/tmp/build/perf/util/bpf_skel/.tmp/bperf_follower.bpf.o] Error 1 make[2]: *** [/tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o] Error 1 make[1]: *** [sub-make] Error 2 make: *** [all] Error 2 make: Leaving directory `/git/perf-5.16.0-rc3/tools/perf' + exit 1 29.38 amazonlinux:2 : FAIL clang version 11.1.0 (Amazon Linux 2 11.1.0-1.amzn2.0.2) util/bpf_skel/bpf_prog_profiler.bpf.c:18:21: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' __uint(value_size, sizeof(struct bpf_perf_event_value)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define __uint(name, val) int (*name)[val] ^~~ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:26:21: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' __uint(value_size, sizeof(struct bpf_perf_event_value)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define __uint(name, val) int (*name)[val] ^~~ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:45:59: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' err = bpf_perf_event_read_value(&events, key, ptr, sizeof(*ptr)); ^~~~~~ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:55:39: error: variable has incomplete type 'struct bpf_perf_event_value' struct bpf_perf_event_value *before, diff; ^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:60:22: error: incomplete definition of type 'struct bpf_perf_event_value' if (before && before->counter) { ~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:63:23: error: incomplete definition of type 'struct bpf_perf_event_value' diff.counter = after->counter - before->counter; ~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:63:41: error: incomplete definition of type 'struct bpf_perf_event_value' diff.counter = after->counter - before->counter; ~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:64:23: error: incomplete definition of type 'struct bpf_perf_event_value' diff.enabled = after->enabled - before->enabled; ~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:64:41: error: incomplete definition of type 'struct bpf_perf_event_value' diff.enabled = after->enabled - before->enabled; ~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:65:23: error: incomplete definition of type 'struct bpf_perf_event_value' diff.running = after->running - before->running; ~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:65:41: error: incomplete definition of type 'struct bpf_perf_event_value' diff.running = after->running - before->running; ~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:69:9: error: incomplete definition of type 'struct bpf_perf_event_value' accum->counter += diff.counter; ~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:70:9: error: incomplete definition of type 'struct bpf_perf_event_value' accum->enabled += diff.enabled; ~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:71:9: error: incomplete definition of type 'struct bpf_perf_event_value' accum->running += diff.running; ~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bpf_prog_profiler.bpf.c:79:30: error: variable has incomplete type 'struct bpf_perf_event_value' struct bpf_perf_event_value reading; ^ struct bpf_perf_event_value; ^ 15 errors generated. In file included from util/bpf_skel/bperf_follower.bpf.c:7: util/bpf_skel/bperf.h:10:21: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' In file included from util/bpf_skel/bperf_leader.bpf.c:7: util/bpf_skel/bperf.h:10: __uint(value_size, sizeof(struct bpf_perf_event_value));21 : ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :13:39: note: expanded from macro '__uint' #define __uint(name, val) int (*name)[val] ^~~ __uint(value_size, sizeof(struct bpf_perf_event_value)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define __uint(name, val) int (*name)[val] ^~~ struct bpf_perf_event_value; ^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:62:11: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->counter += diff_val->counter; ~~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:62:32: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->counter += diff_val->counter; ~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:63:11: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->enabled += diff_val->enabled; ~~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:63:32: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->enabled += diff_val->enabled; ~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:64:11: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->running += diff_val->running; ~~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_follower.bpf.c:64:32: error: incomplete definition of type 'struct bpf_perf_event_value' accum_val->running += diff_val->running; ~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' __uint(map_flags, BPF_F_PRESERVE_ELEMS); ^ 7 errors generated. util/bpf_skel/bperf_leader.bpf.c:22:30: error: variable has incomplete type 'struct bpf_perf_event_value' struct bpf_perf_event_value val, *prev_val, *diff_val; ^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:39:10: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->counter = val.counter - prev_val->counter; ~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:39:44: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->counter = val.counter - prev_val->counter; ~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:40:10: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->enabled = val.enabled - prev_val->enabled; ~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:40:44: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->enabled = val.enabled - prev_val->enabled; ~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:41:10: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->running = val.running - prev_val->running; ~~~~~~~~^ struct bpf_perf_event_value; ^ util/bpf_skel/bperf_leader.bpf.c:41:44: error: incomplete definition of type 'struct bpf_perf_event_value' diff_val->running = val.running - prev_val->running; ~~~~~~~~^ struct bpf_perf_event_value; ^ 9 errors generated. 2 29.3792 real 0m30.510s user 0m0.535s sys 0m0.485s [perfbuilder@five 2]$ [perfbuilder@five 2]$ pwd /var/home/perfbuilder/git/linux-perf-tools-build/amazonlinux/2 [perfbuilder@five 2]$ ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-03 14:23 ` Arnaldo Carvalho de Melo @ 2021-12-03 19:40 ` Song Liu 0 siblings, 0 replies; 16+ messages in thread From: Song Liu @ 2021-12-03 19:40 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users > On Dec 3, 2021, at 6:23 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > Em Fri, Dec 03, 2021 at 10:28:00AM -0300, Arnaldo Carvalho de Melo escreveu: >> Em Fri, Dec 03, 2021 at 10:10:42AM -0300, Arnaldo Carvalho de Melo escreve [...] > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_cgroup.bpf.o > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_follower.bpf.o > util/bpf_skel/bpf_prog_profiler.bpf.c:18:21: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' > __uint(value_size, sizeof(struct bpf_perf_event_value)); > ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > /tmp/build/perf/libbpf/include/bpf/bpf_helpers.h:13:39: note: expanded from macro '__uint' > #define __uint(name, val) int (*name)[val] > ^~~ > /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h:7:8: note: forward declaration of 'struct bpf_perf_event_value' > struct bpf_perf_event_value; > ^ > util/bpf_skel/bpf_prog_profiler.bpf.c:26:21: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_perf_event_value' > __uint(value_size, sizeof(struct bpf_perf_event_value)); > ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ I guess the vmlinux.h fix should also resolve this one? Thanks, Song ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-03 13:28 ` Arnaldo Carvalho de Melo 2021-12-03 14:23 ` Arnaldo Carvalho de Melo @ 2021-12-03 20:05 ` Song Liu 2021-12-06 12:32 ` Arnaldo Carvalho de Melo 1 sibling, 1 reply; 16+ messages in thread From: Song Liu @ 2021-12-03 20:05 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users > On Dec 3, 2021, at 5:28 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > Em Fri, Dec 03, 2021 at 10:10:42AM -0300, Arnaldo Carvalho de Melo escreveu: >> Hi Song, >> >> So I'm changing all my containers to build with BUILD_BPF_SKEL=1 >> to then make this the default, so far older containers fail either >> because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1 >> env var to disable that in those containers and then there is this other >> case where clang is recent enough but: >> >> util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' >> __uint(map_flags, BPF_F_PRESERVE_ELEMS); >> >> Because the system's /usr/include/linux/bpf.h doesn't have that >> BPF_F_PRESERVE_ELEMS enum entry. >> >> These are enums to make them available via BTF, but then I can't use >> the: >> >> #ifdef BPF_F_PRESERVE_ELEMS >> #define BPF_F_PRESERVE_ELEMS (1U << 11) >> #endif >> >> approach. >> >> But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship: >> >> $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h >> BPF_F_PRESERVE_ELEMS = (1U << 11), >> $ >> >> so we need to switch to using it somehow, this way we can build in more >> systems and make bperf and other BPF enabled features. >> >> From a quick look I couldn't find where to add >> $(sourcedir)/tools/include/uapi/ to the include path used to build >> util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look? > > The failure for fedora:32, which seems to be on the threshold for clang > to be considered recent enough for building skels fails differently: > > clang version 10.0.1 (Fedora 10.0.1-3.fc32) > Target: x86_64-unknown-linux-gnu > Thread model: posix > InstalledDir: /usr/bin > Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 > Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/10 > Selected GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 > Candidate multilib: .;@m64 > Candidate multilib: 32;@m32 > Selected multilib: .;@m64 > + '[' '!' ']' > + rm -rf /tmp/build/perf > + mkdir /tmp/build/perf > + make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= BUILD_BPF_SKEL=1 -C tools/perf O=/tmp/build/perf > make: Entering directory '/git/perf-5.16.0-rc3/tools/perf' > BUILD: Doing 'make -j32' parallel build > HOSTCC /tmp/build/perf/fixdep.o > HOSTLD /tmp/build/perf/fixdep-in.o > LINK /tmp/build/perf/fixdep > /bin/sh: -c: line 0: syntax error near unexpected token `(' > /bin/sh: -c: line 0: `expr bison (GNU Bison) 3.5 \>\= 371' > Makefile.config:997: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev > > Auto-detecting system features: > ... dwarf: [ on ] > ... dwarf_getlocations: [ on ] > ... glibc: [ on ] > ... libbfd: [ on ] > ... libbfd-buildid: [ on ] > ... libcap: [ on ] > ... libelf: [ on ] > ... libnuma: [ on ] > ... numa_num_possible_cpus: [ on ] > ... libperl: [ on ] > ... libpython: [ on ] > ... libcrypto: [ on ] > ... libunwind: [ on ] > ... libdw-dwarf-unwind: [ on ] > ... zlib: [ on ] > ... lzma: [ on ] > ... get_cpuid: [ on ] > ... bpf: [ on ] > ... libaio: [ on ] > ... libzstd: [ on ] > ... disassembler-four-args: [ on ] > > > GEN /tmp/build/perf/common-cmds.h > PERF_VERSION = 5.16.rc3.g0c338bcdfdb1 > CC /tmp/build/perf/exec-cmd.o > CC /tmp/build/perf/help.o > CC /tmp/build/perf/cpu.o > CC /tmp/build/perf/pager.o > CC /tmp/build/perf/debug.o > GEN perf-archive > CC /tmp/build/perf/parse-options.o > CC /tmp/build/perf/str_error_r.o > GEN perf-with-kcore > CC /tmp/build/perf/run-command.o > CC /tmp/build/perf/sigchain.o > GEN perf-iostat > MKDIR /tmp/build/perf/fd/ > MKDIR /tmp/build/perf/fs/ > CC /tmp/build/perf/subcmd-config.o > MKDIR /tmp/build/perf/jvmti/ > MKDIR /tmp/build/perf/fs/ > MKDIR /tmp/build/perf/jvmti/ > CC /tmp/build/perf/dlfilters/dlfilter-test-api-v0.o > CC /tmp/build/perf/dlfilters/dlfilter-show-cycles.o > MKDIR /tmp/build/perf/jvmti/ > CC /tmp/build/perf/fd/array.o > MKDIR /tmp/build/perf/fs/ > CC /tmp/build/perf/fs/fs.o > MKDIR /tmp/build/perf/jvmti/ > MKDIR /tmp/build/perf/pmu-events/ > CC /tmp/build/perf/event-parse.o > MKDIR /tmp/build/perf/pmu-events/ > CC /tmp/build/perf/jvmti/libjvmti.o > CC /tmp/build/perf/jvmti/jvmti_agent.o > CC /tmp/build/perf/fs/tracing_path.o > CC /tmp/build/perf/jvmti/libstring.o > CC /tmp/build/perf/fs/cgroup.o > HOSTCC /tmp/build/perf/pmu-events/json.o > CC /tmp/build/perf/jvmti/libctype.o > CC /tmp/build/perf/core.o > HOSTCC /tmp/build/perf/pmu-events/jsmn.o > MKDIR /tmp/build/perf/pmu-events/ > HOSTCC /tmp/build/perf/pmu-events/jevents.o > CC /tmp/build/perf/cpumap.o > CC /tmp/build/perf/plugin_jbd2.o > CC /tmp/build/perf/plugin_hrtimer.o > CC /tmp/build/perf/plugin_kmem.o > CC /tmp/build/perf/threadmap.o > CC /tmp/build/perf/plugin_kvm.o > CC /tmp/build/perf/evsel.o > CC /tmp/build/perf/plugin_mac80211.o > LINK /tmp/build/perf/dlfilters/dlfilter-show-cycles.so > CC /tmp/build/perf/plugin_sched_switch.o > make[3]: *** No rule to make target 'kernelversion'. Stop. > CC /tmp/build/perf/plugin_function.o > LD /tmp/build/perf/fd/libapi-in.o > CC /tmp/build/perf/event-plugin.o > GEN /tmp/build/perf/libbpf/bpf_helper_defs.h > CC /tmp/build/perf/plugin_futex.o > CC /tmp/build/perf/plugin_xen.o > CC /tmp/build/perf/plugin_scsi.o > CC /tmp/build/perf/evlist.o > INSTALL /tmp/build/perf/libbpf/include/bpf/bpf.h > LD /tmp/build/perf/plugin_jbd2-in.o > CC /tmp/build/perf/plugin_cfg80211.o > INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf.h > LD /tmp/build/perf/plugin_hrtimer-in.o > LD /tmp/build/perf/fs/libapi-in.o > LD /tmp/build/perf/plugin_kmem-in.o > CC /tmp/build/perf/plugin_tlb.o > LINK /tmp/build/perf/dlfilters/dlfilter-test-api-v0.so > CC /tmp/build/perf/mmap.o > CC /tmp/build/perf/zalloc.o > LINK /tmp/build/perf/plugin_jbd2.so > LINK /tmp/build/perf/plugin_hrtimer.so > INSTALL /tmp/build/perf/libbpf/include/bpf/btf.h > CC /tmp/build/perf/xyarray.o > CC /tmp/build/perf/trace-seq.o > LD /tmp/build/perf/plugin_mac80211-in.o > LD /tmp/build/perf/libapi-in.o > LD /tmp/build/perf/plugin_kvm-in.o > CC /tmp/build/perf/parse-filter.o > CC /tmp/build/perf/parse-utils.o > LD /tmp/build/perf/plugin_sched_switch-in.o > CC /tmp/build/perf/kbuffer-parse.o > CC /tmp/build/perf/tep_strerror.o > HOSTLD /tmp/build/perf/pmu-events/jevents-in.o > INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf_common.h > INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf_legacy.h > CC /tmp/build/perf/event-parse-api.o > INSTALL /tmp/build/perf/libbpf/include/bpf/xsk.h > INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_helpers.h > AR /tmp/build/perf/libapi.a > LD /tmp/build/perf/plugin_function-in.o > INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_tracing.h > LINK /tmp/build/perf/plugin_kmem.so > LINK /tmp/build/perf/plugin_mac80211.so > LINK /tmp/build/perf/plugin_kvm.so > LD /tmp/build/perf/plugin_xen-in.o > LINK /tmp/build/perf/plugin_sched_switch.so > LD /tmp/build/perf/plugin_cfg80211-in.o > CC /tmp/build/perf/lib.o > INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_endian.h > LD /tmp/build/perf/plugin_futex-in.o > LD /tmp/build/perf/plugin_scsi-in.o > INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_core_read.h > LINK /tmp/build/perf/pmu-events/jevents > LD /tmp/build/perf/plugin_tlb-in.o > LINK /tmp/build/perf/plugin_function.so > LINK /tmp/build/perf/plugin_xen.so > INSTALL /tmp/build/perf/libbpf/include/bpf/skel_internal.h > LINK /tmp/build/perf/plugin_cfg80211.so > INSTALL /tmp/build/perf/libbpf/include/bpf/libbpf_version.h > LINK /tmp/build/perf/plugin_futex.so > INSTALL /tmp/build/perf/libbpf/include/bpf/bpf_helper_defs.h > LINK /tmp/build/perf/plugin_scsi.so > LD /tmp/build/perf/jvmti/jvmti-in.o > LINK /tmp/build/perf/plugin_tlb.so > MKDIR /tmp/build/perf/libbpf/staticobjs/ > MKDIR /tmp/build/perf/libbpf/staticobjs/ > MKDIR /tmp/build/perf/libbpf/staticobjs/ > MKDIR /tmp/build/perf/libbpf/staticobjs/ > MKDIR /tmp/build/perf/libbpf/staticobjs/ > LD /tmp/build/perf/libsubcmd-in.o > MKDIR /tmp/build/perf/libbpf/staticobjs/ > MKDIR /tmp/build/perf/libbpf/staticobjs/ > MKDIR /tmp/build/perf/libbpf/staticobjs/ > MKDIR /tmp/build/perf/libbpf/staticobjs/ > CC /tmp/build/perf/libbpf/staticobjs/xsk.o > CC /tmp/build/perf/libbpf/staticobjs/libbpf.o > LINK /tmp/build/perf/libperf-jvmti.so > CC /tmp/build/perf/libbpf/staticobjs/bpf.o > CC /tmp/build/perf/libbpf/staticobjs/nlattr.o > CC /tmp/build/perf/libbpf/staticobjs/btf.o > CC /tmp/build/perf/libbpf/staticobjs/libbpf_errno.o > CC /tmp/build/perf/libbpf/staticobjs/hashmap.o > CC /tmp/build/perf/libbpf/staticobjs/str_error.o > CC /tmp/build/perf/libbpf/staticobjs/netlink.o > CC /tmp/build/perf/libbpf/staticobjs/btf_dump.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/ringbuf.o > CC /tmp/build/perf/libbpf/staticobjs/strset.o > GEN /tmp/build/perf/libtraceevent-dynamic-list > CC /tmp/build/perf/libbpf/staticobjs/linker.o > CC /tmp/build/perf/libbpf/staticobjs/gen_loader.o > CC /tmp/build/perf/libbpf/staticobjs/relo_core.o > AR /tmp/build/perf/libsubcmd.a > LD /tmp/build/perf/libtraceevent-in.o > GEN /tmp/build/perf/pmu-events/pmu-events.c > LINK /tmp/build/perf/libtraceevent.a > LD /tmp/build/perf/libperf-in.o > AR /tmp/build/perf/libperf.a > GEN /tmp/build/perf/python/perf.so > CC /tmp/build/perf/pmu-events/pmu-events.o > > Auto-detecting system features: > ... libbfd: [ on ] > ... disassembler-four-args: [ on ] > ... zlib: [ on ] > ... libcap: [ on ] > ... clang-bpf-co-re: [ 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 > 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_common.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/xsk.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_endian.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/skel_internal.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/bpf_helper_defs.h > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > MKDIR /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/ > 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/libbpf.o > CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/libbpf/staticobjs/bpf.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/ringbuf.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/strset.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/xsk.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/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/relo_core.o > LD /tmp/build/perf/pmu-events/pmu-events-in.o > LD /tmp/build/perf/libbpf/staticobjs/libbpf-in.o > LINK /tmp/build/perf/libbpf/libbpf.a > 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/common.o > CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/main.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/xlated_dumper.o > CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/btf.o > CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/btf_dumper.o > CC /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/disasm.o > LINK /tmp/build/perf/util/bpf_skel/.tmp//bootstrap/bpftool > GEN /tmp/build/perf/util/bpf_skel/vmlinux.h > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bpf_prog_profiler.bpf.o > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_follower.bpf.o > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_cgroup.bpf.o > GENSKEL /tmp/build/perf/util/bpf_skel/bpf_prog_profiler.skel.h > GENSKEL /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h > libbpf: elf: skipping unrecognized data section(9) .eh_frame > libbpf: elf: skipping relo section(15) .rel.eh_frame for section(9) .eh_frame > libbpf: elf: skipping unrecognized data section(7) .eh_frame > libbpf: elf: skipping relo section(12) .rel.eh_frame for section(7) .eh_frame > libbpf: map 'prev_readings': unexpected def kind var. > Error: failed to open BPF object file: Invalid argument > make[2]: *** [Makefile.perf:1076: /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h] Error 255 > make[2]: *** Waiting for unfinished jobs.... > make[1]: *** [Makefile.perf:240: sub-make] Error 2 > make: *** [Makefile:70: all] Error 2 > make: Leaving directory '/git/perf-5.16.0-rc3/tools/perf' > + exit 1 > [perfbuilder@five 32]$ Cc Andrii. Could you please try the fix below? If it doesn't work, could you please dump btf for debugging? bpftool btf dump file /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o Thanks, Song diff --git i/tools/perf/util/bpf_skel/bperf_follower.bpf.c w/tools/perf/util/bpf_skel/bperf_follower.bpf.c index 4a6acfde14937..bd191c9bc49bc 100644 --- i/tools/perf/util/bpf_skel/bperf_follower.bpf.c +++ w/tools/perf/util/bpf_skel/bperf_follower.bpf.c @@ -6,8 +6,19 @@ #include "bperf.h" #include "bperf_u.h" -reading_map diff_readings SEC(".maps"); -reading_map accum_readings SEC(".maps"); +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} diff_readings SEC(".maps"); + +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} accum_readings SEC(".maps"); struct { __uint(type, BPF_MAP_TYPE_HASH); diff --git i/tools/perf/util/bpf_skel/bperf_leader.bpf.c w/tools/perf/util/bpf_skel/bperf_leader.bpf.c index 40d962b058634..d52a335e63f0f 100644 --- i/tools/perf/util/bpf_skel/bperf_leader.bpf.c +++ w/tools/perf/util/bpf_skel/bperf_leader.bpf.c @@ -12,8 +12,19 @@ struct { __uint(map_flags, BPF_F_PRESERVE_ELEMS); } events SEC(".maps"); -reading_map prev_readings SEC(".maps"); -reading_map diff_readings SEC(".maps"); +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} prev_readings SEC(".maps"); + +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} diff_readings SEC(".maps"); SEC("raw_tp/sched_switch") int BPF_PROG(on_switch) ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-03 20:05 ` Song Liu @ 2021-12-06 12:32 ` Arnaldo Carvalho de Melo 2021-12-06 17:08 ` Song Liu 0 siblings, 1 reply; 16+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-12-06 12:32 UTC (permalink / raw) To: Song Liu Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users Em Fri, Dec 03, 2021 at 08:05:59PM +0000, Song Liu escreveu: > > On Dec 3, 2021, at 5:28 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > The failure for fedora:32, which seems to be on the threshold for clang > > to be considered recent enough for building skels fails differently: > > clang version 10.0.1 (Fedora 10.0.1-3.fc32) > > Target: x86_64-unknown-linux-gnu > > Thread model: posix > > InstalledDir: /usr/bin > > Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 > > Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/10 > > Selected GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 > > Candidate multilib: .;@m64 > > Candidate multilib: 32;@m32 > > Selected multilib: .;@m64 > > + '[' '!' ']' > > + rm -rf /tmp/build/perf > > + mkdir /tmp/build/perf > > + make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= BUILD_BPF_SKEL=1 -C tools/perf O=/tmp/build/perf > > make: Entering directory '/git/perf-5.16.0-rc3/tools/perf' > > BUILD: Doing 'make -j32' parallel build > > HOSTCC /tmp/build/perf/fixdep.o > > HOSTLD /tmp/build/perf/fixdep-in.o > > LINK /tmp/build/perf/fixdep > > /bin/sh: -c: line 0: syntax error near unexpected token `(' > > /bin/sh: -c: line 0: `expr bison (GNU Bison) 3.5 \>\= 371' > > Makefile.config:997: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev > > > > Auto-detecting system features: > > ... dwarf: [ on ] > > ... dwarf_getlocations: [ on ] > > ... glibc: [ on ] > > ... libbfd: [ on ] > > ... libbfd-buildid: [ on ] > > ... libcap: [ on ] > > ... libelf: [ on ] > > ... libnuma: [ on ] > > ... numa_num_possible_cpus: [ on ] > > ... libperl: [ on ] > > ... libpython: [ on ] > > ... libcrypto: [ on ] > > ... libunwind: [ on ] > > ... libdw-dwarf-unwind: [ on ] > > ... zlib: [ on ] > > ... lzma: [ on ] > > ... get_cpuid: [ on ] > > ... bpf: [ on ] > > ... libaio: [ on ] > > ... libzstd: [ on ] > > ... disassembler-four-args: [ on ] > > <SNIP> > > GEN /tmp/build/perf/util/bpf_skel/vmlinux.h > > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bpf_prog_profiler.bpf.o > > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o > > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_follower.bpf.o > > CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_cgroup.bpf.o > > GENSKEL /tmp/build/perf/util/bpf_skel/bpf_prog_profiler.skel.h > > GENSKEL /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h > > libbpf: elf: skipping unrecognized data section(9) .eh_frame > > libbpf: elf: skipping relo section(15) .rel.eh_frame for section(9) .eh_frame > > libbpf: elf: skipping unrecognized data section(7) .eh_frame > > libbpf: elf: skipping relo section(12) .rel.eh_frame for section(7) .eh_frame > > libbpf: map 'prev_readings': unexpected def kind var. > > Error: failed to open BPF object file: Invalid argument > > make[2]: *** [Makefile.perf:1076: /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h] Error 255 > > make[2]: *** Waiting for unfinished jobs.... > > make[1]: *** [Makefile.perf:240: sub-make] Error 2 > > make: *** [Makefile:70: all] Error 2 > > make: Leaving directory '/git/perf-5.16.0-rc3/tools/perf' > > + exit 1 > > [perfbuilder@five 32]$ > > Cc Andrii. > > Could you please try the fix below? > > If it doesn't work, could you please dump btf for debugging? > > bpftool btf dump file /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o It fixes the issue on Alpine Linux 3.12 and 3.13, Alt Linux p9 and fedora:32, probably others, still testing. Can you please provide a cset commit log for me to stamp on it? - Arnaldo > Thanks, > Song > > > > > diff --git i/tools/perf/util/bpf_skel/bperf_follower.bpf.c w/tools/perf/util/bpf_skel/bperf_follower.bpf.c > index 4a6acfde14937..bd191c9bc49bc 100644 > --- i/tools/perf/util/bpf_skel/bperf_follower.bpf.c > +++ w/tools/perf/util/bpf_skel/bperf_follower.bpf.c > @@ -6,8 +6,19 @@ > #include "bperf.h" > #include "bperf_u.h" > > -reading_map diff_readings SEC(".maps"); > -reading_map accum_readings SEC(".maps"); > +struct { > + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); > + __uint(key_size, sizeof(__u32)); > + __uint(value_size, sizeof(struct bpf_perf_event_value)); > + __uint(max_entries, 1); > +} diff_readings SEC(".maps"); > + > +struct { > + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); > + __uint(key_size, sizeof(__u32)); > + __uint(value_size, sizeof(struct bpf_perf_event_value)); > + __uint(max_entries, 1); > +} accum_readings SEC(".maps"); > > struct { > __uint(type, BPF_MAP_TYPE_HASH); > diff --git i/tools/perf/util/bpf_skel/bperf_leader.bpf.c w/tools/perf/util/bpf_skel/bperf_leader.bpf.c > index 40d962b058634..d52a335e63f0f 100644 > --- i/tools/perf/util/bpf_skel/bperf_leader.bpf.c > +++ w/tools/perf/util/bpf_skel/bperf_leader.bpf.c > @@ -12,8 +12,19 @@ struct { > __uint(map_flags, BPF_F_PRESERVE_ELEMS); > } events SEC(".maps"); > > -reading_map prev_readings SEC(".maps"); > -reading_map diff_readings SEC(".maps"); > +struct { > + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); > + __uint(key_size, sizeof(__u32)); > + __uint(value_size, sizeof(struct bpf_perf_event_value)); > + __uint(max_entries, 1); > +} prev_readings SEC(".maps"); > + > +struct { > + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); > + __uint(key_size, sizeof(__u32)); > + __uint(value_size, sizeof(struct bpf_perf_event_value)); > + __uint(max_entries, 1); > +} diff_readings SEC(".maps"); > > SEC("raw_tp/sched_switch") > int BPF_PROG(on_switch) ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-06 12:32 ` Arnaldo Carvalho de Melo @ 2021-12-06 17:08 ` Song Liu 2021-12-06 20:00 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 16+ messages in thread From: Song Liu @ 2021-12-06 17:08 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users > On Dec 6, 2021, at 4:32 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > Em Fri, Dec 03, 2021 at 08:05:59PM +0000, Song Liu escreveu: >>> On Dec 3, 2021, at 5:28 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: >>> The failure for fedora:32, which seems to be on the threshold for clang >>> to be considered recent enough for building skels fails differently: > >>> clang version 10.0.1 (Fedora 10.0.1-3.fc32) >>> Target: x86_64-unknown-linux-gnu >>> Thread model: posix >>> InstalledDir: /usr/bin >>> Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 >>> Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/10 >>> Selected GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 >>> Candidate multilib: .;@m64 >>> Candidate multilib: 32;@m32 >>> Selected multilib: .;@m64 >>> + '[' '!' ']' >>> + rm -rf /tmp/build/perf >>> + mkdir /tmp/build/perf >>> + make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= BUILD_BPF_SKEL=1 -C tools/perf O=/tmp/build/perf >>> make: Entering directory '/git/perf-5.16.0-rc3/tools/perf' >>> BUILD: Doing 'make -j32' parallel build >>> HOSTCC /tmp/build/perf/fixdep.o >>> HOSTLD /tmp/build/perf/fixdep-in.o >>> LINK /tmp/build/perf/fixdep >>> /bin/sh: -c: line 0: syntax error near unexpected token `(' >>> /bin/sh: -c: line 0: `expr bison (GNU Bison) 3.5 \>\= 371' >>> Makefile.config:997: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev >>> >>> Auto-detecting system features: >>> ... dwarf: [ on ] >>> ... dwarf_getlocations: [ on ] >>> ... glibc: [ on ] >>> ... libbfd: [ on ] >>> ... libbfd-buildid: [ on ] >>> ... libcap: [ on ] >>> ... libelf: [ on ] >>> ... libnuma: [ on ] >>> ... numa_num_possible_cpus: [ on ] >>> ... libperl: [ on ] >>> ... libpython: [ on ] >>> ... libcrypto: [ on ] >>> ... libunwind: [ on ] >>> ... libdw-dwarf-unwind: [ on ] >>> ... zlib: [ on ] >>> ... lzma: [ on ] >>> ... get_cpuid: [ on ] >>> ... bpf: [ on ] >>> ... libaio: [ on ] >>> ... libzstd: [ on ] >>> ... disassembler-four-args: [ on ] >>> > > <SNIP> > >>> GEN /tmp/build/perf/util/bpf_skel/vmlinux.h >>> CLANG /tmp/build/perf/util/bpf_skel/.tmp/bpf_prog_profiler.bpf.o >>> CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o >>> CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_follower.bpf.o >>> CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_cgroup.bpf.o >>> GENSKEL /tmp/build/perf/util/bpf_skel/bpf_prog_profiler.skel.h >>> GENSKEL /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h >>> libbpf: elf: skipping unrecognized data section(9) .eh_frame >>> libbpf: elf: skipping relo section(15) .rel.eh_frame for section(9) .eh_frame >>> libbpf: elf: skipping unrecognized data section(7) .eh_frame >>> libbpf: elf: skipping relo section(12) .rel.eh_frame for section(7) .eh_frame >>> libbpf: map 'prev_readings': unexpected def kind var. >>> Error: failed to open BPF object file: Invalid argument >>> make[2]: *** [Makefile.perf:1076: /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h] Error 255 >>> make[2]: *** Waiting for unfinished jobs.... >>> make[1]: *** [Makefile.perf:240: sub-make] Error 2 >>> make: *** [Makefile:70: all] Error 2 >>> make: Leaving directory '/git/perf-5.16.0-rc3/tools/perf' >>> + exit 1 >>> [perfbuilder@five 32]$ >> >> Cc Andrii. >> >> Could you please try the fix below? >> >> If it doesn't work, could you please dump btf for debugging? >> >> bpftool btf dump file /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o > > It fixes the issue on Alpine Linux 3.12 and 3.13, Alt Linux p9 and fedora:32, probably others, still testing. > > Can you please provide a cset commit log for me to stamp on it? Please see the following commit log. Thanks, Song ====================================== 8< ======================================== perf/bpf_skel: use vmlinux.h in skeletons When building bpf_skel in perf on a system with older linux/bpf.h header, we got errors like: util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' __uint(map_flags, BPF_F_PRESERVE_ELEMS); Fix this by using vmlinux.h instead. Also remove include of perf_event.h, as it redefines structs in vmlinux.h. Fixes: fa853c4b839e ("perf stat: Enable counting events for BPF programs") Fixes: 7fac83aaf2ee ("perf stat: Introduce 'bperf' to share hardware PMCs with BPF") Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com> Tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Signed-off-by: Song Liu <songliubraving@fb.com> ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-06 17:08 ` Song Liu @ 2021-12-06 20:00 ` Arnaldo Carvalho de Melo 2021-12-06 22:34 ` Song Liu 0 siblings, 1 reply; 16+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-12-06 20:00 UTC (permalink / raw) To: Song Liu Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users Em Mon, Dec 06, 2021 at 05:08:21PM +0000, Song Liu escreveu: > > > > On Dec 6, 2021, at 4:32 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > > > Em Fri, Dec 03, 2021 at 08:05:59PM +0000, Song Liu escreveu: > >>> On Dec 3, 2021, at 5:28 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > >>> The failure for fedora:32, which seems to be on the threshold for clang > >>> to be considered recent enough for building skels fails differently: > > > >>> clang version 10.0.1 (Fedora 10.0.1-3.fc32) > >>> Target: x86_64-unknown-linux-gnu > >>> Thread model: posix > >>> InstalledDir: /usr/bin > >>> Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 > >>> Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/10 > >>> Selected GCC installation: /usr/bin/../lib/gcc/x86_64-redhat-linux/10 > >>> Candidate multilib: .;@m64 > >>> Candidate multilib: 32;@m32 > >>> Selected multilib: .;@m64 > >>> + '[' '!' ']' > >>> + rm -rf /tmp/build/perf > >>> + mkdir /tmp/build/perf > >>> + make ARCH= CROSS_COMPILE= EXTRA_CFLAGS= BUILD_BPF_SKEL=1 -C tools/perf O=/tmp/build/perf > >>> make: Entering directory '/git/perf-5.16.0-rc3/tools/perf' > >>> BUILD: Doing 'make -j32' parallel build > >>> HOSTCC /tmp/build/perf/fixdep.o > >>> HOSTLD /tmp/build/perf/fixdep-in.o > >>> LINK /tmp/build/perf/fixdep > >>> /bin/sh: -c: line 0: syntax error near unexpected token `(' > >>> /bin/sh: -c: line 0: `expr bison (GNU Bison) 3.5 \>\= 371' > >>> Makefile.config:997: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev > >>> > >>> Auto-detecting system features: > >>> ... dwarf: [ on ] > >>> ... dwarf_getlocations: [ on ] > >>> ... glibc: [ on ] > >>> ... libbfd: [ on ] > >>> ... libbfd-buildid: [ on ] > >>> ... libcap: [ on ] > >>> ... libelf: [ on ] > >>> ... libnuma: [ on ] > >>> ... numa_num_possible_cpus: [ on ] > >>> ... libperl: [ on ] > >>> ... libpython: [ on ] > >>> ... libcrypto: [ on ] > >>> ... libunwind: [ on ] > >>> ... libdw-dwarf-unwind: [ on ] > >>> ... zlib: [ on ] > >>> ... lzma: [ on ] > >>> ... get_cpuid: [ on ] > >>> ... bpf: [ on ] > >>> ... libaio: [ on ] > >>> ... libzstd: [ on ] > >>> ... disassembler-four-args: [ on ] > >>> > > > > <SNIP> > > > >>> GEN /tmp/build/perf/util/bpf_skel/vmlinux.h > >>> CLANG /tmp/build/perf/util/bpf_skel/.tmp/bpf_prog_profiler.bpf.o > >>> CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o > >>> CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_follower.bpf.o > >>> CLANG /tmp/build/perf/util/bpf_skel/.tmp/bperf_cgroup.bpf.o > >>> GENSKEL /tmp/build/perf/util/bpf_skel/bpf_prog_profiler.skel.h > >>> GENSKEL /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h > >>> libbpf: elf: skipping unrecognized data section(9) .eh_frame > >>> libbpf: elf: skipping relo section(15) .rel.eh_frame for section(9) .eh_frame > >>> libbpf: elf: skipping unrecognized data section(7) .eh_frame > >>> libbpf: elf: skipping relo section(12) .rel.eh_frame for section(7) .eh_frame > >>> libbpf: map 'prev_readings': unexpected def kind var. > >>> Error: failed to open BPF object file: Invalid argument > >>> make[2]: *** [Makefile.perf:1076: /tmp/build/perf/util/bpf_skel/bperf_leader.skel.h] Error 255 > >>> make[2]: *** Waiting for unfinished jobs.... > >>> make[1]: *** [Makefile.perf:240: sub-make] Error 2 > >>> make: *** [Makefile:70: all] Error 2 > >>> make: Leaving directory '/git/perf-5.16.0-rc3/tools/perf' > >>> + exit 1 > >>> [perfbuilder@five 32]$ > >> > >> Cc Andrii. > >> > >> Could you please try the fix below? > >> > >> If it doesn't work, could you please dump btf for debugging? > >> > >> bpftool btf dump file /tmp/build/perf/util/bpf_skel/.tmp/bperf_leader.bpf.o > > > > It fixes the issue on Alpine Linux 3.12 and 3.13, Alt Linux p9 and fedora:32, probably others, still testing. > > > > Can you please provide a cset commit log for me to stamp on it? > > Please see the following commit log. This is for the other one, where I stamped this: commit ce71038e673ee8291c64631359e56c48c8616dc7 (HEAD -> perf/urgent) Author: Song Liu <songliubraving@fb.com> Date: Fri Dec 3 19:32:34 2021 +0000 perf bpf: Fix building perf with BUILD_BPF_SKEL=1 by default in more distros Arnaldo reported that building all his containers with BUILD_BPF_SKEL=1 to then make this the default he found problems in some distros where the system linux/bpf.h file was being used and lacked this: util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' __uint(map_flags, BPF_F_PRESERVE_ELEMS); So use instead the vmlinux.h file generated by bpftool from BTF info. This fixed these as well, getting the build back working on debian:11, debian:experimental and ubuntu:21.10: In file included from In file included from util/bpf_skel/bperf_leader.bpf.cutil/bpf_skel/bpf_prog_profiler.bpf.c::33: : In file included from In file included from /usr/include/linux/bpf.h/usr/include/linux/bpf.h::1111: : /usr/include/linux/types.h/usr/include/linux/types.h::55::1010:: In file included from util/bpf_skel/bperf_follower.bpf.c:3fatal errorfatal error: : : In file included from /usr/include/linux/bpf.h:'asm/types.h' file not found11'asm/types.h' file not found: /usr/include/linux/types.h:5:10: fatal error: 'asm/types.h' file not found #include <asm/types.h>#include <asm/types.h> ^~~~~~~~~~~~~ ^~~~~~~~~~~~~ #include <asm/types.h> ^~~~~~~~~~~~~ 1 error generated. Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Song Liu <song@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lore.kernel.org/lkml/CF175681-8101-43D1-ABDB-449E644BE986@fb.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> For this patch: diff --git a/tools/perf/util/bpf_skel/bperf_follower.bpf.c b/tools/perf/util/bpf_skel/bperf_follower.bpf.c index b8fa3cb2da230803..4a6acfde14937704 100644 --- a/tools/perf/util/bpf_skel/bperf_follower.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_follower.bpf.c @@ -1,7 +1,6 @@ // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) // Copyright (c) 2021 Facebook -#include <linux/bpf.h> -#include <linux/perf_event.h> +#include "vmlinux.h" #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> #include "bperf.h" diff --git a/tools/perf/util/bpf_skel/bperf_leader.bpf.c b/tools/perf/util/bpf_skel/bperf_leader.bpf.c index 4f70d1459e86cb99..40d962b05863421e 100644 --- a/tools/perf/util/bpf_skel/bperf_leader.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_leader.bpf.c @@ -1,7 +1,6 @@ // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) // Copyright (c) 2021 Facebook -#include <linux/bpf.h> -#include <linux/perf_event.h> +#include "vmlinux.h" #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> #include "bperf.h" diff --git a/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c b/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c index ab12b4c4ece21a9a..97037d3b3d9fa4cd 100644 --- a/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c +++ b/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) // Copyright (c) 2020 Facebook -#include <linux/bpf.h> +#include "vmlinux.h" #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> But what I asked now was a commit log message for this other one: diff --git a/tools/perf/util/bpf_skel/bperf_follower.bpf.c b/tools/perf/util/bpf_skel/bperf_follower.bpf.c index 4a6acfde14937704..ace00ebbd8e5701f 100644 --- a/tools/perf/util/bpf_skel/bperf_follower.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_follower.bpf.c @@ -6,8 +6,19 @@ #include "bperf.h" #include "bperf_u.h" -reading_map diff_readings SEC(".maps"); -reading_map accum_readings SEC(".maps"); +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} diff_readings SEC(".maps"); + +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} accum_readings SEC(".maps"); struct { __uint(type, BPF_MAP_TYPE_HASH); diff --git a/tools/perf/util/bpf_skel/bperf_leader.bpf.c b/tools/perf/util/bpf_skel/bperf_leader.bpf.c index 40d962b05863421e..22ef924f8396f8e0 100644 --- a/tools/perf/util/bpf_skel/bperf_leader.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_leader.bpf.c @@ -12,8 +12,19 @@ struct { __uint(map_flags, BPF_F_PRESERVE_ELEMS); } events SEC(".maps"); -reading_map prev_readings SEC(".maps"); -reading_map diff_readings SEC(".maps"); +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} prev_readings SEC(".maps"); + +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} diff_readings SEC(".maps"); SEC("raw_tp/sched_switch") int BPF_PROG(on_switch) > Thanks, > Song > > ====================================== 8< ======================================== > > perf/bpf_skel: use vmlinux.h in skeletons > > When building bpf_skel in perf on a system with older linux/bpf.h header, > we got errors like: > > util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared > identifier 'BPF_F_PRESERVE_ELEMS' > __uint(map_flags, BPF_F_PRESERVE_ELEMS); > > Fix this by using vmlinux.h instead. Also remove include of perf_event.h, > as it redefines structs in vmlinux.h. > > Fixes: fa853c4b839e ("perf stat: Enable counting events for BPF programs") > Fixes: 7fac83aaf2ee ("perf stat: Introduce 'bperf' to share hardware PMCs with BPF") > Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com> > Tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com> > Signed-off-by: Song Liu <songliubraving@fb.com> > -- - Arnaldo ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-06 20:00 ` Arnaldo Carvalho de Melo @ 2021-12-06 22:34 ` Song Liu 2021-12-07 0:49 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 16+ messages in thread From: Song Liu @ 2021-12-06 22:34 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users > On Dec 6, 2021, at 12:00 PM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > Em Mon, Dec 06, 2021 at 05:08:21PM +0000, Song Liu escreveu: >> >> >>> On Dec 6, 2021, at 4:32 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: >>> [...] >> >> Please see the following commit log. > > This is for the other one, where I stamped this: > > commit ce71038e673ee8291c64631359e56c48c8616dc7 (HEAD -> perf/urgent) > Author: Song Liu <songliubraving@fb.com> > Date: Fri Dec 3 19:32:34 2021 +0000 > > perf bpf: Fix building perf with BUILD_BPF_SKEL=1 by default in more distros > > Arnaldo reported that building all his containers with BUILD_BPF_SKEL=1 > to then make this the default he found problems in some distros where > the system linux/bpf.h file was being used and lacked this: > > util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' > __uint(map_flags, BPF_F_PRESERVE_ELEMS); > > So use instead the vmlinux.h file generated by bpftool from BTF info. > > This fixed these as well, getting the build back working on debian:11, > debian:experimental and ubuntu:21.10: > > In file included from In file included from util/bpf_skel/bperf_leader.bpf.cutil/bpf_skel/bpf_prog_profiler.bpf.c::33: > : > In file included from In file included from /usr/include/linux/bpf.h/usr/include/linux/bpf.h::1111: > : > /usr/include/linux/types.h/usr/include/linux/types.h::55::1010:: In file included from util/bpf_skel/bperf_follower.bpf.c:3fatal errorfatal error: > : : In file included from /usr/include/linux/bpf.h:'asm/types.h' file not found11'asm/types.h' file not found: > > /usr/include/linux/types.h:5:10: fatal error: 'asm/types.h' file not found > #include <asm/types.h>#include <asm/types.h> > > ^~~~~~~~~~~~~ ^~~~~~~~~~~~~ > > #include <asm/types.h> > ^~~~~~~~~~~~~ > 1 error generated. > > Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com> > Signed-off-by: Song Liu <song@kernel.org> > Cc: Jiri Olsa <jolsa@kernel.org> > Cc: Namhyung Kim <namhyung@kernel.org> > Link: http://lore.kernel.org/lkml/CF175681-8101-43D1-ABDB-449E644BE986@fb.com > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > For this patch: > > diff --git a/tools/perf/util/bpf_skel/bperf_follower.bpf.c b/tools/perf/util/bpf_skel/bperf_follower.bpf.c > index b8fa3cb2da230803..4a6acfde14937704 100644 > --- a/tools/perf/util/bpf_skel/bperf_follower.bpf.c > +++ b/tools/perf/util/bpf_skel/bperf_follower.bpf.c > @@ -1,7 +1,6 @@ > // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > // Copyright (c) 2021 Facebook > -#include <linux/bpf.h> > -#include <linux/perf_event.h> > +#include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > #include "bperf.h" > diff --git a/tools/perf/util/bpf_skel/bperf_leader.bpf.c b/tools/perf/util/bpf_skel/bperf_leader.bpf.c > index 4f70d1459e86cb99..40d962b05863421e 100644 > --- a/tools/perf/util/bpf_skel/bperf_leader.bpf.c > +++ b/tools/perf/util/bpf_skel/bperf_leader.bpf.c > @@ -1,7 +1,6 @@ > // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > // Copyright (c) 2021 Facebook > -#include <linux/bpf.h> > -#include <linux/perf_event.h> > +#include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > #include "bperf.h" > diff --git a/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c b/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c > index ab12b4c4ece21a9a..97037d3b3d9fa4cd 100644 > --- a/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c > +++ b/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c > @@ -1,6 +1,6 @@ > // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > // Copyright (c) 2020 Facebook > -#include <linux/bpf.h> > +#include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > > > But what I asked now was a commit log message for this other one: Sorry for the confusion. Please use this one, which also removes bperf.h (which holds the typedef). Thanks, Song ====================================== 8< ======================================== From e033fd36657288ece383ba528aaff7b56eebfee2 Mon Sep 17 00:00:00 2001 From: Song Liu <songliubraving@fb.com> Date: Fri, 3 Dec 2021 15:14:41 -0800 Subject: [PATCH] perf/bpf_skel: do not use typedef to avoid error on old clang When building bpf_skel with clang-10, typedef causes confusions like: libbpf: map 'prev_readings': unexpected def kind var. Fix this by removing the typedef. Fixes: 7fac83aaf2ee ("perf stat: Introduce 'bperf' to share hardware PMCs with BPF") Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Song Liu <songliubraving@fb.com> --- tools/perf/util/bpf_skel/bperf.h | 14 -------------- tools/perf/util/bpf_skel/bperf_follower.bpf.c | 16 +++++++++++++--- tools/perf/util/bpf_skel/bperf_leader.bpf.c | 16 +++++++++++++--- 3 files changed, 26 insertions(+), 20 deletions(-) delete mode 100644 tools/perf/util/bpf_skel/bperf.h diff --git a/tools/perf/util/bpf_skel/bperf.h b/tools/perf/util/bpf_skel/bperf.h deleted file mode 100644 index 186a5551ddb9d..0000000000000 --- a/tools/perf/util/bpf_skel/bperf.h +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) -// Copyright (c) 2021 Facebook - -#ifndef __BPERF_STAT_H -#define __BPERF_STAT_H - -typedef struct { - __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); - __uint(key_size, sizeof(__u32)); - __uint(value_size, sizeof(struct bpf_perf_event_value)); - __uint(max_entries, 1); -} reading_map; - -#endif /* __BPERF_STAT_H */ diff --git a/tools/perf/util/bpf_skel/bperf_follower.bpf.c b/tools/perf/util/bpf_skel/bperf_follower.bpf.c index 4a6acfde14937..f193998530d43 100644 --- a/tools/perf/util/bpf_skel/bperf_follower.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_follower.bpf.c @@ -3,11 +3,21 @@ #include "vmlinux.h" #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> -#include "bperf.h" #include "bperf_u.h" -reading_map diff_readings SEC(".maps"); -reading_map accum_readings SEC(".maps"); +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} diff_readings SEC(".maps"); + +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} accum_readings SEC(".maps"); struct { __uint(type, BPF_MAP_TYPE_HASH); diff --git a/tools/perf/util/bpf_skel/bperf_leader.bpf.c b/tools/perf/util/bpf_skel/bperf_leader.bpf.c index 40d962b058634..e2a2d4cd7779c 100644 --- a/tools/perf/util/bpf_skel/bperf_leader.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_leader.bpf.c @@ -3,7 +3,6 @@ #include "vmlinux.h" #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> -#include "bperf.h" struct { __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); @@ -12,8 +11,19 @@ struct { __uint(map_flags, BPF_F_PRESERVE_ELEMS); } events SEC(".maps"); -reading_map prev_readings SEC(".maps"); -reading_map diff_readings SEC(".maps"); +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} prev_readings SEC(".maps"); + +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct bpf_perf_event_value)); + __uint(max_entries, 1); +} diff_readings SEC(".maps"); SEC("raw_tp/sched_switch") int BPF_PROG(on_switch) -- 2.30.2 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-06 22:34 ` Song Liu @ 2021-12-07 0:49 ` Arnaldo Carvalho de Melo 2021-12-07 1:07 ` Song Liu 0 siblings, 1 reply; 16+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-12-07 0:49 UTC (permalink / raw) To: Song Liu Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users Em Mon, Dec 06, 2021 at 10:34:31PM +0000, Song Liu escreveu: > >From e033fd36657288ece383ba528aaff7b56eebfee2 Mon Sep 17 00:00:00 2001 > From: Song Liu <songliubraving@fb.com> > Date: Fri, 3 Dec 2021 15:14:41 -0800 > Subject: [PATCH] perf/bpf_skel: do not use typedef to avoid error on old clang > > When building bpf_skel with clang-10, typedef causes confusions like: > > libbpf: map 'prev_readings': unexpected def kind var. > > Fix this by removing the typedef. > > Fixes: 7fac83aaf2ee ("perf stat: Introduce 'bperf' to share hardware PMCs with BPF") Please get a larger sha abbrev: ⬢[acme@toolbox perf]$ grep core -A1 ~/.gitconfig [core] abbrev = 16 ⬢[acme@toolbox perf]$ Thanks, applied. - Arnaldo ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-07 0:49 ` Arnaldo Carvalho de Melo @ 2021-12-07 1:07 ` Song Liu 0 siblings, 0 replies; 16+ messages in thread From: Song Liu @ 2021-12-07 1:07 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users > On Dec 6, 2021, at 4:49 PM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > Em Mon, Dec 06, 2021 at 10:34:31PM +0000, Song Liu escreveu: >>> From e033fd36657288ece383ba528aaff7b56eebfee2 Mon Sep 17 00:00:00 2001 >> From: Song Liu <songliubraving@fb.com> >> Date: Fri, 3 Dec 2021 15:14:41 -0800 >> Subject: [PATCH] perf/bpf_skel: do not use typedef to avoid error on old clang >> >> When building bpf_skel with clang-10, typedef causes confusions like: >> >> libbpf: map 'prev_readings': unexpected def kind var. >> >> Fix this by removing the typedef. >> >> Fixes: 7fac83aaf2ee ("perf stat: Introduce 'bperf' to share hardware PMCs with BPF") > > Please get a larger sha abbrev: > > ⬢[acme@toolbox perf]$ grep core -A1 ~/.gitconfig > [core] > abbrev = 16 > ⬢[acme@toolbox perf]$ Hmm.. I think the rule is to have 12 letters sha in the Fixes tag. Did we change something recently? Thanks, Song ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-03 13:10 Building perf with BUILD_BPF_SKEL=1 by default Arnaldo Carvalho de Melo 2021-12-03 13:28 ` Arnaldo Carvalho de Melo @ 2021-12-03 19:32 ` Song Liu 2021-12-05 13:06 ` Arnaldo Carvalho de Melo 2021-12-06 14:16 ` Athira Rajeev 1 sibling, 2 replies; 16+ messages in thread From: Song Liu @ 2021-12-03 19:32 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users > On Dec 3, 2021, at 5:10 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > Hi Song, > > So I'm changing all my containers to build with BUILD_BPF_SKEL=1 > to then make this the default, so far older containers fail either > because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1 > env var to disable that in those containers and then there is this other > case where clang is recent enough but: > > util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' > __uint(map_flags, BPF_F_PRESERVE_ELEMS); > > Because the system's /usr/include/linux/bpf.h doesn't have that > BPF_F_PRESERVE_ELEMS enum entry. > > These are enums to make them available via BTF, but then I can't use > the: > > #ifdef BPF_F_PRESERVE_ELEMS > #define BPF_F_PRESERVE_ELEMS (1U << 11) > #endif > > approach. > > But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship: > > $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h > BPF_F_PRESERVE_ELEMS = (1U << 11), > $ > > so we need to switch to using it somehow, this way we can build in more > systems and make bperf and other BPF enabled features. > > From a quick look I couldn't find where to add > $(sourcedir)/tools/include/uapi/ to the include path used to build > util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look? > > Thanks, > > - Arnaldo I think the following should fix it Thanks, Song diff --git i/tools/perf/util/bpf_skel/bperf_follower.bpf.c w/tools/perf/util/bpf_skel/bperf_follower.bpf.c index b8fa3cb2da230..4a6acfde14937 100644 --- i/tools/perf/util/bpf_skel/bperf_follower.bpf.c +++ w/tools/perf/util/bpf_skel/bperf_follower.bpf.c @@ -1,7 +1,6 @@ // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) // Copyright (c) 2021 Facebook -#include <linux/bpf.h> -#include <linux/perf_event.h> +#include "vmlinux.h" #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> #include "bperf.h" diff --git i/tools/perf/util/bpf_skel/bperf_leader.bpf.c w/tools/perf/util/bpf_skel/bperf_leader.bpf.c index 4f70d1459e86c..40d962b058634 100644 --- i/tools/perf/util/bpf_skel/bperf_leader.bpf.c +++ w/tools/perf/util/bpf_skel/bperf_leader.bpf.c @@ -1,7 +1,6 @@ // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) // Copyright (c) 2021 Facebook -#include <linux/bpf.h> -#include <linux/perf_event.h> +#include "vmlinux.h" #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> #include "bperf.h" diff --git i/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c w/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c index ab12b4c4ece21..97037d3b3d9fa 100644 --- i/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c +++ w/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) // Copyright (c) 2020 Facebook -#include <linux/bpf.h> +#include "vmlinux.h" #include <bpf/bpf_helpers.h> #include <bpf/bpf_tracing.h> ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-03 19:32 ` Song Liu @ 2021-12-05 13:06 ` Arnaldo Carvalho de Melo 2021-12-05 13:38 ` Arnaldo Carvalho de Melo 2021-12-06 3:47 ` Song Liu 2021-12-06 14:16 ` Athira Rajeev 1 sibling, 2 replies; 16+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-12-05 13:06 UTC (permalink / raw) To: Song Liu Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users Em Fri, Dec 03, 2021 at 07:32:34PM +0000, Song Liu escreveu: > > > > On Dec 3, 2021, at 5:10 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > > > Hi Song, > > > > So I'm changing all my containers to build with BUILD_BPF_SKEL=1 > > to then make this the default, so far older containers fail either > > because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1 > > env var to disable that in those containers and then there is this other > > case where clang is recent enough but: > > > > util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' > > __uint(map_flags, BPF_F_PRESERVE_ELEMS); > > > > Because the system's /usr/include/linux/bpf.h doesn't have that > > BPF_F_PRESERVE_ELEMS enum entry. > > > > These are enums to make them available via BTF, but then I can't use > > the: > > > > #ifdef BPF_F_PRESERVE_ELEMS > > #define BPF_F_PRESERVE_ELEMS (1U << 11) > > #endif > > > > approach. > > > > But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship: > > > > $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h > > BPF_F_PRESERVE_ELEMS = (1U << 11), > > $ > > > > so we need to switch to using it somehow, this way we can build in more > > systems and make bperf and other BPF enabled features. > > > > From a quick look I couldn't find where to add > > $(sourcedir)/tools/include/uapi/ to the include path used to build > > util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look? > > > > Thanks, > > > > - Arnaldo > > I think the following should fix it I'm trying this now and tentatively sticking a Signed-off-by: you to it, ok? - Arnaldo > Thanks, > Song > > > diff --git i/tools/perf/util/bpf_skel/bperf_follower.bpf.c w/tools/perf/util/bpf_skel/bperf_follower.bpf.c > index b8fa3cb2da230..4a6acfde14937 100644 > --- i/tools/perf/util/bpf_skel/bperf_follower.bpf.c > +++ w/tools/perf/util/bpf_skel/bperf_follower.bpf.c > @@ -1,7 +1,6 @@ > // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > // Copyright (c) 2021 Facebook > -#include <linux/bpf.h> > -#include <linux/perf_event.h> > +#include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > #include "bperf.h" > diff --git i/tools/perf/util/bpf_skel/bperf_leader.bpf.c w/tools/perf/util/bpf_skel/bperf_leader.bpf.c > index 4f70d1459e86c..40d962b058634 100644 > --- i/tools/perf/util/bpf_skel/bperf_leader.bpf.c > +++ w/tools/perf/util/bpf_skel/bperf_leader.bpf.c > @@ -1,7 +1,6 @@ > // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > // Copyright (c) 2021 Facebook > -#include <linux/bpf.h> > -#include <linux/perf_event.h> > +#include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > #include "bperf.h" > diff --git i/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c w/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c > index ab12b4c4ece21..97037d3b3d9fa 100644 > --- i/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c > +++ w/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c > @@ -1,6 +1,6 @@ > // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > // Copyright (c) 2020 Facebook > -#include <linux/bpf.h> > +#include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > -- - Arnaldo ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-05 13:06 ` Arnaldo Carvalho de Melo @ 2021-12-05 13:38 ` Arnaldo Carvalho de Melo 2021-12-06 3:47 ` Song Liu 1 sibling, 0 replies; 16+ messages in thread From: Arnaldo Carvalho de Melo @ 2021-12-05 13:38 UTC (permalink / raw) To: Song Liu Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users Em Sun, Dec 05, 2021 at 10:06:42AM -0300, Arnaldo Carvalho de Melo escreveu: > Em Fri, Dec 03, 2021 at 07:32:34PM +0000, Song Liu escreveu: > > > > > > > On Dec 3, 2021, at 5:10 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > > > > > Hi Song, > > > > > > So I'm changing all my containers to build with BUILD_BPF_SKEL=1 > > > to then make this the default, so far older containers fail either > > > because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1 > > > env var to disable that in those containers and then there is this other > > > case where clang is recent enough but: > > > > > > util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' > > > __uint(map_flags, BPF_F_PRESERVE_ELEMS); > > > > > > Because the system's /usr/include/linux/bpf.h doesn't have that > > > BPF_F_PRESERVE_ELEMS enum entry. > > > > > > These are enums to make them available via BTF, but then I can't use > > > the: > > > > > > #ifdef BPF_F_PRESERVE_ELEMS > > > #define BPF_F_PRESERVE_ELEMS (1U << 11) > > > #endif > > > > > > approach. > > > > > > But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship: > > > > > > $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h > > > BPF_F_PRESERVE_ELEMS = (1U << 11), > > > $ > > > > > > so we need to switch to using it somehow, this way we can build in more > > > systems and make bperf and other BPF enabled features. > > > > > > From a quick look I couldn't find where to add > > > $(sourcedir)/tools/include/uapi/ to the include path used to build > > > util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look? > > > > > > Thanks, > > > > > > - Arnaldo > > > > I think the following should fix it > > I'm trying this now and tentatively sticking a Signed-off-by: you to it, > ok? Fixed these as well (debian:11, debian:experimental, some recent ubuntus): In file included from util/bpf_skel/bperf_follower.bpf.c:3: In file included from /usr/include/linux/bpf.h:11: In file included from /usr/include/linux/types.hutil/bpf_skel/bperf_leader.bpf.c::5In file included from :3util/bpf_skel/bpf_prog_profiler.bpf.c10: ::In file included from 3 /usr/include/linux/bpf.h: :In file included from 11/usr/include/linux/bpf.h: fatal error:: 11/usr/include/linux/types.h: :'asm/types.h' file not found5:/usr/include/linux/types.h10 ::5 :10: fatal errorfatal error: : 'asm/types.h' file not found'asm/types.h' file not found#include <asm/types.h> ^~~~~~~~~~~~~ #include <asm/types.h>#include <asm/types.h> ^~~~~~~~~~~~~ ^~~~~~~~~~~~~ 1 error generated. 1 error generated. 1 error generated. make[2]: *** [Makefile.perf:1072: /tmp/build/perf/util/bpf_skel/.tmp/bperf_follower.bpf.o] Error 1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-05 13:06 ` Arnaldo Carvalho de Melo 2021-12-05 13:38 ` Arnaldo Carvalho de Melo @ 2021-12-06 3:47 ` Song Liu 1 sibling, 0 replies; 16+ messages in thread From: Song Liu @ 2021-12-06 3:47 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users > On Dec 5, 2021, at 5:06 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: > > Em Fri, Dec 03, 2021 at 07:32:34PM +0000, Song Liu escreveu: >> >> >>> On Dec 3, 2021, at 5:10 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: >>> >>> Hi Song, >>> >>> So I'm changing all my containers to build with BUILD_BPF_SKEL=1 >>> to then make this the default, so far older containers fail either >>> because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1 >>> env var to disable that in those containers and then there is this other >>> case where clang is recent enough but: >>> >>> util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' >>> __uint(map_flags, BPF_F_PRESERVE_ELEMS); >>> >>> Because the system's /usr/include/linux/bpf.h doesn't have that >>> BPF_F_PRESERVE_ELEMS enum entry. >>> >>> These are enums to make them available via BTF, but then I can't use >>> the: >>> >>> #ifdef BPF_F_PRESERVE_ELEMS >>> #define BPF_F_PRESERVE_ELEMS (1U << 11) >>> #endif >>> >>> approach. >>> >>> But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship: >>> >>> $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h >>> BPF_F_PRESERVE_ELEMS = (1U << 11), >>> $ >>> >>> so we need to switch to using it somehow, this way we can build in more >>> systems and make bperf and other BPF enabled features. >>> >>> From a quick look I couldn't find where to add >>> $(sourcedir)/tools/include/uapi/ to the include path used to build >>> util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look? >>> >>> Thanks, >>> >>> - Arnaldo >> >> I think the following should fix it > > I'm trying this now and tentatively sticking a Signed-off-by: you to it, > ok? Thanks for verifying this! I should learn to do these container tests myself. Yes, you can include Signed-off-by: Song Liu <song@kernel.org> (or my fb email, either one works. ) Thanks, Song ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Building perf with BUILD_BPF_SKEL=1 by default 2021-12-03 19:32 ` Song Liu 2021-12-05 13:06 ` Arnaldo Carvalho de Melo @ 2021-12-06 14:16 ` Athira Rajeev 1 sibling, 0 replies; 16+ messages in thread From: Athira Rajeev @ 2021-12-06 14:16 UTC (permalink / raw) To: Song Liu Cc: Arnaldo Carvalho de Melo, Jiri Olsa, Namhyung Kim, Linux Kernel Mailing List, linux-perf-users > On 04-Dec-2021, at 1:02 AM, Song Liu <songliubraving@fb.com> wrote: > > > >> On Dec 3, 2021, at 5:10 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote: >> >> Hi Song, >> >> So I'm changing all my containers to build with BUILD_BPF_SKEL=1 >> to then make this the default, so far older containers fail either >> because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1 >> env var to disable that in those containers and then there is this other >> case where clang is recent enough but: >> >> util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' >> __uint(map_flags, BPF_F_PRESERVE_ELEMS); >> >> Because the system's /usr/include/linux/bpf.h doesn't have that >> BPF_F_PRESERVE_ELEMS enum entry. >> >> These are enums to make them available via BTF, but then I can't use >> the: >> >> #ifdef BPF_F_PRESERVE_ELEMS >> #define BPF_F_PRESERVE_ELEMS (1U << 11) >> #endif >> >> approach. >> >> But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship: >> >> $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h >> BPF_F_PRESERVE_ELEMS = (1U << 11), >> $ >> >> so we need to switch to using it somehow, this way we can build in more >> systems and make bperf and other BPF enabled features. >> >> From a quick look I couldn't find where to add >> $(sourcedir)/tools/include/uapi/ to the include path used to build >> util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look? >> >> Thanks, >> >> - Arnaldo > > I think the following should fix it > > Thanks, > Song > Hi, Encountered this error while building perf with BUILD_BPF_SKEL. util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS' __uint(map_flags, BPF_F_PRESERVE_ELEMS); And verified this patch fixes this issue. Tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Thanks Athira > > diff --git i/tools/perf/util/bpf_skel/bperf_follower.bpf.c w/tools/perf/util/bpf_skel/bperf_follower.bpf.c > index b8fa3cb2da230..4a6acfde14937 100644 > --- i/tools/perf/util/bpf_skel/bperf_follower.bpf.c > +++ w/tools/perf/util/bpf_skel/bperf_follower.bpf.c > @@ -1,7 +1,6 @@ > // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > // Copyright (c) 2021 Facebook > -#include <linux/bpf.h> > -#include <linux/perf_event.h> > +#include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > #include "bperf.h" > diff --git i/tools/perf/util/bpf_skel/bperf_leader.bpf.c w/tools/perf/util/bpf_skel/bperf_leader.bpf.c > index 4f70d1459e86c..40d962b058634 100644 > --- i/tools/perf/util/bpf_skel/bperf_leader.bpf.c > +++ w/tools/perf/util/bpf_skel/bperf_leader.bpf.c > @@ -1,7 +1,6 @@ > // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > // Copyright (c) 2021 Facebook > -#include <linux/bpf.h> > -#include <linux/perf_event.h> > +#include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > #include "bperf.h" > diff --git i/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c w/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c > index ab12b4c4ece21..97037d3b3d9fa 100644 > --- i/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c > +++ w/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c > @@ -1,6 +1,6 @@ > // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > // Copyright (c) 2020 Facebook > -#include <linux/bpf.h> > +#include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > > ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2021-12-07 1:07 UTC | newest] Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-12-03 13:10 Building perf with BUILD_BPF_SKEL=1 by default Arnaldo Carvalho de Melo 2021-12-03 13:28 ` Arnaldo Carvalho de Melo 2021-12-03 14:23 ` Arnaldo Carvalho de Melo 2021-12-03 19:40 ` Song Liu 2021-12-03 20:05 ` Song Liu 2021-12-06 12:32 ` Arnaldo Carvalho de Melo 2021-12-06 17:08 ` Song Liu 2021-12-06 20:00 ` Arnaldo Carvalho de Melo 2021-12-06 22:34 ` Song Liu 2021-12-07 0:49 ` Arnaldo Carvalho de Melo 2021-12-07 1:07 ` Song Liu 2021-12-03 19:32 ` Song Liu 2021-12-05 13:06 ` Arnaldo Carvalho de Melo 2021-12-05 13:38 ` Arnaldo Carvalho de Melo 2021-12-06 3:47 ` Song Liu 2021-12-06 14:16 ` Athira Rajeev
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).