Re: [PATCH v2 1/4] perf: detect support for libbpf's emit_strings option

From: Namhyung Kim
Date: Fri Jun 06 2025 - 15:05:05 EST


On Thu, Jun 05, 2025 at 04:39:31PM -0700, Blake Jones wrote:
> This creates a config option that detects libbpf's ability to display
> character arrays as strings, which was just added to the BPF tree
> (https://git.kernel.org/bpf/bpf-next/c/87c9c79a02b4).
>
> To test this change, I built perf (from later in this patch set) with:
>
> - static libbpf (default, using source from kernel tree)
> - dynamic libbpf (LIBBPF_DYNAMIC=1 LIBBPF_INCLUDE=/usr/local/include)
>
> For both the static and dynamic versions, I used headers with and without
> the ".emit_strings" option.
>
> I verified that of the four resulting binaries, the two with
> ".emit_strings" would successfully record BPF_METADATA events, and the two
> without wouldn't. All four binaries would successfully display
> BPF_METADATA events, because the relevant bit of libbpf code is only used
> during "perf record".
>
> Signed-off-by: Blake Jones <blakejones@xxxxxxxxxx>
> ---
> tools/build/Makefile.feature | 1 +
> tools/build/feature/Makefile | 4 ++++
> tools/build/feature/test-libbpf-strings.c | 10 ++++++++++
> tools/perf/Documentation/perf-check.txt | 1 +
> tools/perf/Makefile.config | 12 ++++++++++++
> tools/perf/builtin-check.c | 1 +
> 6 files changed, 29 insertions(+)
> create mode 100644 tools/build/feature/test-libbpf-strings.c
>
> diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
> index 57bd995ce6af..541ea3cc53e9 100644
> --- a/tools/build/Makefile.feature
> +++ b/tools/build/Makefile.feature
> @@ -126,6 +126,7 @@ FEATURE_TESTS_EXTRA := \
> llvm \
> clang \
> libbpf \
> + libbpf-strings \
> libbpf-btf__load_from_kernel_by_id \
> libbpf-bpf_prog_load \
> libbpf-bpf_object__next_program \

Please check out tmp.perf-tools-next branch which made some changes in
the area.

Thanks,
Namhyung


> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index b8b5fb183dd4..327bb501fd2b 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -59,6 +59,7 @@ FILES= \
> test-lzma.bin \
> test-bpf.bin \
> test-libbpf.bin \
> + test-libbpf-strings.bin \
> test-get_cpuid.bin \
> test-sdt.bin \
> test-cxx.bin \
> @@ -360,6 +361,9 @@ $(OUTPUT)test-libbpf-bpf_program__set_insns.bin:
> $(OUTPUT)test-libbpf-btf__raw_data.bin:
> $(BUILD) -lbpf
>
> +$(OUTPUT)test-libbpf-strings.bin:
> + $(BUILD)
> +
> $(OUTPUT)test-sdt.bin:
> $(BUILD)
>
> diff --git a/tools/build/feature/test-libbpf-strings.c b/tools/build/feature/test-libbpf-strings.c
> new file mode 100644
> index 000000000000..83e6c45f5c85
> --- /dev/null
> +++ b/tools/build/feature/test-libbpf-strings.c
> @@ -0,0 +1,10 @@
> +// SPDX-License-Identifier: GPL-2.0
> +#include <bpf/btf.h>
> +
> +int main(void)
> +{
> + struct btf_dump_type_data_opts opts;
> +
> + opts.emit_strings = 0;
> + return opts.emit_strings;
> +}
> diff --git a/tools/perf/Documentation/perf-check.txt b/tools/perf/Documentation/perf-check.txt
> index a764a4629220..799982d8d868 100644
> --- a/tools/perf/Documentation/perf-check.txt
> +++ b/tools/perf/Documentation/perf-check.txt
> @@ -52,6 +52,7 @@ feature::
> dwarf-unwind / HAVE_DWARF_UNWIND_SUPPORT
> auxtrace / HAVE_AUXTRACE_SUPPORT
> libbfd / HAVE_LIBBFD_SUPPORT
> + libbpf-strings / HAVE_LIBBPF_STRINGS_SUPPORT
> libcapstone / HAVE_LIBCAPSTONE_SUPPORT
> libcrypto / HAVE_LIBCRYPTO_SUPPORT
> libdw-dwarf-unwind / HAVE_LIBDW_SUPPORT
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index d1ea7bf44964..647ade45e4e5 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -595,8 +595,20 @@ ifndef NO_LIBELF
> LIBBPF_STATIC := 1
> $(call detected,CONFIG_LIBBPF)
> CFLAGS += -DHAVE_LIBBPF_SUPPORT
> + ifneq ($(OUTPUT),)
> + LIBBPF_INCLUDE = $(abspath $(OUTPUT))/libbpf/include
> + else
> + LIBBPF_INCLUDE = $(CURDIR)/libbpf/include
> + endif
> endif
> endif
> +
> + FEATURE_CHECK_CFLAGS-libbpf-strings="-I$(LIBBPF_INCLUDE)"
> + $(call feature_check,libbpf-strings)
> + ifeq ($(feature-libbpf-strings), 1)
> + $(call detected,CONFIG_LIBBPF_STRINGS)
> + CFLAGS += -DHAVE_LIBBPF_STRINGS_SUPPORT
> + endif
> endif
> endif # NO_LIBBPF
> endif # NO_LIBELF
> diff --git a/tools/perf/builtin-check.c b/tools/perf/builtin-check.c
> index 9a509cb3bb9a..f4827f0ddb47 100644
> --- a/tools/perf/builtin-check.c
> +++ b/tools/perf/builtin-check.c
> @@ -43,6 +43,7 @@ struct feature_status supported_features[] = {
> FEATURE_STATUS("dwarf-unwind", HAVE_DWARF_UNWIND_SUPPORT),
> FEATURE_STATUS("auxtrace", HAVE_AUXTRACE_SUPPORT),
> FEATURE_STATUS_TIP("libbfd", HAVE_LIBBFD_SUPPORT, "Deprecated, license incompatibility, use BUILD_NONDISTRO=1 and install binutils-dev[el]"),
> + FEATURE_STATUS("libbpf-strings", HAVE_LIBBPF_STRINGS_SUPPORT),
> FEATURE_STATUS("libcapstone", HAVE_LIBCAPSTONE_SUPPORT),
> FEATURE_STATUS("libcrypto", HAVE_LIBCRYPTO_SUPPORT),
> FEATURE_STATUS("libdw-dwarf-unwind", HAVE_LIBDW_SUPPORT),
> --
> 2.50.0.rc0.604.gd4ff7b7c86-goog
>