perf bpf: Fix build with libbpf 0.7.0 by checking if bpf_program__set_insns() is available

During the transition to libbpf 1.0 some functions that perf used were
deprecated and finally removed from libbpf, so bpf_program__set_insns()
was introduced for perf to continue to use its bpf loader.

But when build with LIBBPF_DYNAMIC=1 we now need to check if that
function is available so that perf can build with older libbpf versions,
even if the end result is emitting a warning to the user that the use
of the perf BPF loader requires a newer libbpf, since bpf_program__set_insns()
touches libbpf objects internal state.

This affects only 'perf trace' when using bpf C code or pre-compiled
bytecode as an event.

Noticed on RHEL9, that has libbpf 0.7.0, where bpf_program__set_insns()
isn't available.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Arnaldo Carvalho de Melo
2022-10-19 08:44:17 -04:00
parent 409fb6bdd6
commit f1bdebbb67
5 changed files with 36 additions and 0 deletions

View File

@@ -36,6 +36,24 @@
#include <internal/xyarray.h>
#ifndef HAVE_LIBBPF_BPF_PROGRAM__SET_INSNS
int bpf_program__set_insns(struct bpf_program *prog __maybe_unused,
struct bpf_insn *new_insns __maybe_unused, size_t new_insn_cnt __maybe_unused)
{
pr_err("%s: not support, update libbpf\n", __func__);
return -ENOTSUP;
}
int libbpf_register_prog_handler(const char *sec __maybe_unused,
enum bpf_prog_type prog_type __maybe_unused,
enum bpf_attach_type exp_attach_type __maybe_unused,
const struct libbpf_prog_handler_opts *opts __maybe_unused)
{
pr_err("%s: not support, update libbpf\n", __func__);
return -ENOTSUP;
}
#endif
/* temporarily disable libbpf deprecation warnings */
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"