* Build failure bft for trace-cmd and libtraceevent @ 2026-02-08 20:53 Giulio Benetti 2026-02-08 21:32 ` Steven Rostedt 0 siblings, 1 reply; 7+ messages in thread From: Giulio Benetti @ 2026-02-08 20:53 UTC (permalink / raw) To: linux-trace-devel, Steven Rostedt Hi Steven, All, in Buildroot I'm bumping libtraceevent to 1.9.0 and trace-cmd to 3.4 and experiencing build failures because of the change of uapi/linux/bft.h defines/enums I see as possible solution to create a bft_compat.h to deal with different Linux versions, but this is not a quick solution. Otherwise the solution could be to switch according to Linux version between print_args() with and without bft support, basically re-adding the function here: https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/commit/?id=e798103c0815e6642e74d9317c325b2c62681f2e What do you think about it? Best regards Giulio Benetti ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Build failure bft for trace-cmd and libtraceevent 2026-02-08 20:53 Build failure bft for trace-cmd and libtraceevent Giulio Benetti @ 2026-02-08 21:32 ` Steven Rostedt 2026-02-08 21:44 ` Giulio Benetti 0 siblings, 1 reply; 7+ messages in thread From: Steven Rostedt @ 2026-02-08 21:32 UTC (permalink / raw) To: Giulio Benetti; +Cc: linux-trace-devel On Sun, 8 Feb 2026 21:53:31 +0100 Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > Otherwise the solution could be to switch according to Linux version > between print_args() with and without bft support, basically re-adding > the function here: > https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/commit/?id=e798103c0815e6642e74d9317c325b2c62681f2e > > What do you think about it? Is the failure found at runtime? That is, the loaded BTF file doesn't parse correctly? What is the error exactly? I guess if the tep_btf_print_args() fails, it should just print the raw args then. -- Steve ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Build failure bft for trace-cmd and libtraceevent 2026-02-08 21:32 ` Steven Rostedt @ 2026-02-08 21:44 ` Giulio Benetti 2026-02-08 22:01 ` Steven Rostedt 0 siblings, 1 reply; 7+ messages in thread From: Giulio Benetti @ 2026-02-08 21:44 UTC (permalink / raw) To: Steven Rostedt; +Cc: linux-trace-devel On 08/02/2026 22:32, Steven Rostedt wrote: > On Sun, 8 Feb 2026 21:53:31 +0100 > Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > >> Otherwise the solution could be to switch according to Linux version >> between print_args() with and without bft support, basically re-adding >> the function here: >> https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/commit/?id=e798103c0815e6642e74d9317c325b2c62681f2e >> >> What do you think about it? > > Is the failure found at runtime? That is, the loaded BTF file doesn't > parse correctly? What is the error exactly? > > I guess if the tep_btf_print_args() fails, it should just print the raw > args then. Oh, I've forgotten to post the build failure, here it is and it's due to dealing with different Linux versions: [8/40] Compiling C object src/libtraceevent.so.1.9.0.p/trace-btf.c.o FAILED: [code=1] src/libtraceevent.so.1.9.0.p/trace-btf.c.o /home/giuliobenetti/git/upstream/test-libtraceevent/bootlin-armv5-uclibc/host/bin/arm-linux-gcc -Isrc/libtraceevent.so.1.9.0.p -Isrc -I../src -Iinclude -I../include -Iinclude/traceevent -I../include/traceevent -fdiagnostics-color=always -Wall -Winvalid-pch -std=gnu99 -O3 -D_GNU_SOURCE '-DPLUGIN_DIR="/usr/lib/traceevent/plugins"' -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g0 -fPIC -MD -MQ src/libtraceevent.so.1.9.0.p/trace-btf.c.o -MF src/libtraceevent.so.1.9.0.p/trace-btf.c.o.d -o src/libtraceevent.so.1.9.0.p/trace-btf.c.o -c ../src/trace-btf.c ../src/trace-btf.c:60:10: error: ‘BTF_KIND_FLOAT’ undeclared here (not in a function); did you mean ‘BTF_KIND_CONST’? 60 | [BTF_KIND_FLOAT] = "FLOAT", | ^~~~~~~~~~~~~~ | BTF_KIND_CONST ../src/trace-btf.c:60:10: error: array index in initializer not of integer type ../src/trace-btf.c:60:10: note: (near initialization for ‘btf_kind_str’) ../src/trace-btf.c:60:35: warning: excess elements in array initializer 60 | [BTF_KIND_FLOAT] = "FLOAT", | ^~~~~~~ ../src/trace-btf.c:60:35: note: (near initialization for ‘btf_kind_str’) ../src/trace-btf.c:61:10: error: ‘BTF_KIND_DECL_TAG’ undeclared here (not in a function) 61 | [BTF_KIND_DECL_TAG] = "DECL_TAG", | ^~~~~~~~~~~~~~~~~ ../src/trace-btf.c:61:10: error: array index in initializer not of integer type ../src/trace-btf.c:61:10: note: (near initialization for ‘btf_kind_str’) ../src/trace-btf.c:61:35: warning: excess elements in array initializer 61 | [BTF_KIND_DECL_TAG] = "DECL_TAG", | ^~~~~~~~~~ ../src/trace-btf.c:61:35: note: (near initialization for ‘btf_kind_str’) ../src/trace-btf.c:62:10: error: ‘BTF_KIND_TYPE_TAG’ undeclared here (not in a function); did you mean ‘BTF_KIND_TYPEDEF’? 62 | [BTF_KIND_TYPE_TAG] = "TYPE_TAG", | ^~~~~~~~~~~~~~~~~ | BTF_KIND_TYPEDEF ../src/trace-btf.c:62:10: error: array index in initializer not of integer type ../src/trace-btf.c:62:10: note: (near initialization for ‘btf_kind_str’) ../src/trace-btf.c:62:35: warning: excess elements in array initializer 62 | [BTF_KIND_TYPE_TAG] = "TYPE_TAG", | ^~~~~~~~~~ ../src/trace-btf.c:62:35: note: (near initialization for ‘btf_kind_str’) ../src/trace-btf.c:63:10: error: ‘BTF_KIND_ENUM64’ undeclared here (not in a function); did you mean ‘BTF_KIND_ENUM’? 63 | [BTF_KIND_ENUM64] = "ENUM64", | ^~~~~~~~~~~~~~~ | BTF_KIND_ENUM ../src/trace-btf.c:63:10: error: array index in initializer not of integer type ../src/trace-btf.c:63:10: note: (near initialization for ‘btf_kind_str’) ../src/trace-btf.c:63:35: warning: excess elements in array initializer 63 | [BTF_KIND_ENUM64] = "ENUM64", | ^~~~~~~~ ../src/trace-btf.c:63:35: note: (near initialization for ‘btf_kind_str’) ../src/trace-btf.c: In function ‘btf_type_size’: ../src/trace-btf.c:115:38: error: invalid application of ‘sizeof’ to incomplete type ‘struct btf_decl_tag’ 115 | return size + sizeof(struct btf_decl_tag); | ^~~~~~ ../src/trace-btf.c:119:38: error: invalid application of ‘sizeof’ to incomplete type ‘struct btf_enum64’ 119 | return size + sizeof(struct btf_enum64) * BTF_INFO_VLEN(type->info); | ^~~~~~ [9/40] Compiling C object plugins/plugin_kmem.so.p/plugin_kmem.c.o [10/40] Compiling C object plugins/plugin_tlb.so.p/plugin_tlb.c.o [11/40] Compiling C object plugins/plugin_net.so.p/plugin_net.c.o [12/40] Compiling C object src/libtraceevent.so.1.9.0.p/parse-utils.c.o [13/40] Compiling C object plugins/plugin_sched_switch.so.p/plugin_sched_switch.c.o [14/40] Compiling C object samples/test-event.p/test-event.c.o [15/40] Compiling C object plugins/plugin_scsi.so.p/plugin_scsi.c.o [16/40] Compiling C object src/libtraceevent.so.1.9.0.p/event-parse-api.c.o [17/40] Compiling C object plugins/plugin_function.so.p/plugin_function.c.o [18/40] Compiling C object src/libtraceevent.so.1.9.0.p/trace-seq.c.o [19/40] Compiling C object plugins/plugin_kvm.so.p/plugin_kvm.c.o [20/40] Compiling C object src/libtraceevent.so.1.9.0.p/event-plugin.c.o [21/40] Compiling C object src/libtraceevent.so.1.9.0.p/kbuffer-parse.c.o [22/40] Compiling C object src/libtraceevent.so.1.9.0.p/parse-filter.c.o [23/40] Compiling C object src/libtraceevent.so.1.9.0.p/event-parse.c.o ninja: build stopped: subcommand failed. make[1]: *** [package/pkg-generic.mk:273: /home/giuliobenetti/git/upstream/test-libtraceevent/bootlin-armv5-uclibc/build/libtraceevent-1.9.0/.stamp_built] Error 1 make: *** [Makefile:83: _all] Error 2 Giulio ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Build failure bft for trace-cmd and libtraceevent 2026-02-08 21:44 ` Giulio Benetti @ 2026-02-08 22:01 ` Steven Rostedt 2026-02-08 22:14 ` Giulio Benetti 0 siblings, 1 reply; 7+ messages in thread From: Steven Rostedt @ 2026-02-08 22:01 UTC (permalink / raw) To: Giulio Benetti; +Cc: linux-trace-devel On Sun, 8 Feb 2026 22:44:24 +0100 Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > Oh, I've forgotten to post the build failure, here it is and it's due to > dealing with different Linux versions: OK, if it is a build failure, we should add logic to make sure it builds properly and if not, warn and build without BTF. Kind of like what trace-cmd did when I was first started developing this: https://lore.kernel.org/20260203233451.2118849-5-rostedt@goodmis.org -- Steve ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Build failure bft for trace-cmd and libtraceevent 2026-02-08 22:01 ` Steven Rostedt @ 2026-02-08 22:14 ` Giulio Benetti 2026-02-08 22:22 ` Steven Rostedt 0 siblings, 1 reply; 7+ messages in thread From: Giulio Benetti @ 2026-02-08 22:14 UTC (permalink / raw) To: Steven Rostedt; +Cc: linux-trace-devel > Il giorno 8 feb 2026, alle ore 23:01, Steven Rostedt <rostedt@goodmis.org> ha scritto: > > On Sun, 8 Feb 2026 22:44:24 +0100 > Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > >> Oh, I've forgotten to post the build failure, here it is and it's due to >> dealing with different Linux versions: > > OK, if it is a build failure, we should add logic to make sure it > builds properly and if not, warn and build without BTF. Kind of like > what trace-cmd did when I was first started developing this: > > https://lore.kernel.org/20260203233451.2118849-5-rostedt@goodmis.org Oh, ok. I’m going to follow that commit and add btf option to disable btf to trace-cmd too. At the moment it only checks for libtraceevent version and that won’t be sufficient. Thank you for taking care Best regards Giulio > > -- Steve ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Build failure bft for trace-cmd and libtraceevent 2026-02-08 22:14 ` Giulio Benetti @ 2026-02-08 22:22 ` Steven Rostedt 2026-02-10 18:01 ` Giulio Benetti 0 siblings, 1 reply; 7+ messages in thread From: Steven Rostedt @ 2026-02-08 22:22 UTC (permalink / raw) To: Giulio Benetti; +Cc: linux-trace-devel On Sun, 8 Feb 2026 23:14:32 +0100 Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > Oh, ok. I’m going to follow that commit and add btf option to disable btf to trace-cmd too. > At the moment it only checks for libtraceevent version and that won’t be sufficient. I don't think you need to change trace-cmd. We can just make the tep_btf_print_args() just print the arguments passed in if it is not supported, and have the list_args just fail. Here's an update to the libtraceevent Makefile to do this. Will need something similar for the meson build. -- Steve diff --git a/Makefile b/Makefile index e1a10a02a560..bd88a981d373 100644 --- a/Makefile +++ b/Makefile @@ -27,6 +27,13 @@ $(call allow-override,PKG_CONFIG,pkg-config) $(call allow-override,LD_SO_CONF_PATH,/etc/ld.so.conf.d/) $(call allow-override,LDCONFIG,ldconfig) +# Set compile option CFLAGS +ifdef EXTRA_CFLAGS + CFLAGS ?= $(EXTRA_CFLAGS) +else + CFLAGS ?= -g -Wall +endif + EXT = -std=gnu99 INSTALL = install @@ -37,6 +44,20 @@ INSTALL = install DESTDIR ?= DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))' +test-build = $(if $(shell sh -c 'echo "$(1)" | tee /tmp/t.c| \ + $(CC) -o /dev/null -x c - > /dev/null 2>&1 && echo y'), $2) + +define BTF_LATEST_SOURCE +#include <linux/btf.h> +int main(void) { return BTF_KIND_ENUM64; } +endef + +BTF_OK := $(call test-build,$(BTF_LATEST_SOURCE),y) + +ifneq ($(strip $(BTF_OK)), y) +CFLAGS += -DNO_BTF +endif + LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1) ifeq ($(LP64), 1) libdir_relative_temp = lib64 @@ -123,13 +144,6 @@ INCLUDES = -I. -I $(srctree)/include -I $(EP_HEADERS_DIR) $(CONFIG_INCLUDES) export LIBTRACEEVENT_STATIC LIBTRACEEVENT_SHARED EP_HEADERS_DIR -# Set compile option CFLAGS -ifdef EXTRA_CFLAGS - CFLAGS := $(EXTRA_CFLAGS) -else - CFLAGS := -g -Wall -endif - LIBS ?= -ldl export LIBS ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: Build failure bft for trace-cmd and libtraceevent 2026-02-08 22:22 ` Steven Rostedt @ 2026-02-10 18:01 ` Giulio Benetti 0 siblings, 0 replies; 7+ messages in thread From: Giulio Benetti @ 2026-02-10 18:01 UTC (permalink / raw) To: Steven Rostedt; +Cc: linux-trace-devel [-- Attachment #1: Type: text/plain, Size: 2173 bytes --] Hi Steve, On 2/8/26 23:22, Steven Rostedt wrote: > On Sun, 8 Feb 2026 23:14:32 +0100 > Giulio Benetti <giulio.benetti@benettiengineering.com> wrote: > >> Oh, ok. I’m going to follow that commit and add btf option to disable btf to trace-cmd too. >> At the moment it only checks for libtraceevent version and that won’t be sufficient. > > I don't think you need to change trace-cmd. We can just make the > tep_btf_print_args() just print the arguments passed in if it is not > supported, it is not that clear to me here > and have the list_args just fail. Ok. Attached you find a patch to be tested. Giulio > > Here's an update to the libtraceevent Makefile to do this. Will need > something similar for the meson build. > > -- Steve > > diff --git a/Makefile b/Makefile > index e1a10a02a560..bd88a981d373 100644 > --- a/Makefile > +++ b/Makefile > @@ -27,6 +27,13 @@ $(call allow-override,PKG_CONFIG,pkg-config) > $(call allow-override,LD_SO_CONF_PATH,/etc/ld.so.conf.d/) > $(call allow-override,LDCONFIG,ldconfig) > > +# Set compile option CFLAGS > +ifdef EXTRA_CFLAGS > + CFLAGS ?= $(EXTRA_CFLAGS) > +else > + CFLAGS ?= -g -Wall > +endif > + > EXT = -std=gnu99 > INSTALL = install > > @@ -37,6 +44,20 @@ INSTALL = install > DESTDIR ?= > DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))' > > +test-build = $(if $(shell sh -c 'echo "$(1)" | tee /tmp/t.c| \ > + $(CC) -o /dev/null -x c - > /dev/null 2>&1 && echo y'), $2) > + > +define BTF_LATEST_SOURCE > +#include <linux/btf.h> > +int main(void) { return BTF_KIND_ENUM64; } > +endef > + > +BTF_OK := $(call test-build,$(BTF_LATEST_SOURCE),y) > + > +ifneq ($(strip $(BTF_OK)), y) > +CFLAGS += -DNO_BTF > +endif > + > LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1) > ifeq ($(LP64), 1) > libdir_relative_temp = lib64 > @@ -123,13 +144,6 @@ INCLUDES = -I. -I $(srctree)/include -I $(EP_HEADERS_DIR) $(CONFIG_INCLUDES) > > export LIBTRACEEVENT_STATIC LIBTRACEEVENT_SHARED EP_HEADERS_DIR > > -# Set compile option CFLAGS > -ifdef EXTRA_CFLAGS > - CFLAGS := $(EXTRA_CFLAGS) > -else > - CFLAGS := -g -Wall > -endif > - > LIBS ?= -ldl > export LIBS > [-- Attachment #2: 0001-Fix-build-failure-due-to-btf-on-Linux-6.0.patch --] [-- Type: text/x-patch, Size: 4030 bytes --] From e14139e63b68eccd2800406c4f5ad049015a8cf6 Mon Sep 17 00:00:00 2001 From: Giulio Benetti <giulio.benetti@benettiengineering.com> Date: Tue, 10 Feb 2026 17:57:52 +0100 Subject: [PATCH] Fix build failure due to btf on Linux < 6.0 With commit: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6089fb325cf737eeb2c4d236c94697112ca860da enum BTF_KIND_ENUM64 has been firstly introduced and this is the latest BTF_KIND_* enumaration to be added to libtraceevent. So let's check in runtime, both in Makefile and meson, if BTF_KIND_ENUM64 does exist. If it's not there let's disable btf support. Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> Co-authored-by: Giulio Benetti <giulio.benetti@benettiengineering.com> Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com> --- Makefile | 28 +++++++++++++++++++++------- src/meson.build | 12 ++++++++++++ src/trace-btf.c | 9 +++++++++ 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index e1a10a0..bd88a98 100644 --- a/Makefile +++ b/Makefile @@ -27,6 +27,13 @@ $(call allow-override,PKG_CONFIG,pkg-config) $(call allow-override,LD_SO_CONF_PATH,/etc/ld.so.conf.d/) $(call allow-override,LDCONFIG,ldconfig) +# Set compile option CFLAGS +ifdef EXTRA_CFLAGS + CFLAGS ?= $(EXTRA_CFLAGS) +else + CFLAGS ?= -g -Wall +endif + EXT = -std=gnu99 INSTALL = install @@ -37,6 +44,20 @@ INSTALL = install DESTDIR ?= DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))' +test-build = $(if $(shell sh -c 'echo "$(1)" | tee /tmp/t.c| \ + $(CC) -o /dev/null -x c - > /dev/null 2>&1 && echo y'), $2) + +define BTF_LATEST_SOURCE +#include <linux/btf.h> +int main(void) { return BTF_KIND_ENUM64; } +endef + +BTF_OK := $(call test-build,$(BTF_LATEST_SOURCE),y) + +ifneq ($(strip $(BTF_OK)), y) +CFLAGS += -DNO_BTF +endif + LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1) ifeq ($(LP64), 1) libdir_relative_temp = lib64 @@ -123,13 +144,6 @@ INCLUDES = -I. -I $(srctree)/include -I $(EP_HEADERS_DIR) $(CONFIG_INCLUDES) export LIBTRACEEVENT_STATIC LIBTRACEEVENT_SHARED EP_HEADERS_DIR -# Set compile option CFLAGS -ifdef EXTRA_CFLAGS - CFLAGS := $(EXTRA_CFLAGS) -else - CFLAGS := -g -Wall -endif - LIBS ?= -ldl export LIBS diff --git a/src/meson.build b/src/meson.build index 3a7a082..23b43ff 100644 --- a/src/meson.build +++ b/src/meson.build @@ -17,6 +17,18 @@ sources= [ cc = meson.get_compiler('c') dl_dep = cc.find_library('dl') +btf_enum64_test_code = ''' +#include <linux/btf.h> +int main(void) { + int x = BTF_KIND_ENUM64; + return 0; +} +''' + +if cc.compiles(btf_enum64_test_code, name : 'BTF_KIND_ENUM64 check') + add_project_arguments('-DNO_BTF', language : 'c') +endif + libtraceevent = library( 'traceevent', sources, diff --git a/src/trace-btf.c b/src/trace-btf.c index 859b086..c7102d8 100644 --- a/src/trace-btf.c +++ b/src/trace-btf.c @@ -471,6 +471,9 @@ static int init_btf_func(struct tep_btf *btf, struct trace_seq *s, */ int tep_btf_list_args(struct tep_handle *tep, struct trace_seq *s, const char *func) { +#ifdef NO_BTF + return -1; +#else struct tep_btf *btf = tep->btf; struct btf_type *type = tep_btf_find_func(btf, func); struct btf_param *param; @@ -520,6 +523,7 @@ int tep_btf_list_args(struct tep_handle *tep, struct trace_seq *s, const char *f trace_seq_printf(s, "%s", param_name); } return p; +#endif } /** @@ -543,6 +547,10 @@ int tep_btf_list_args(struct tep_handle *tep, struct trace_seq *s, const char *f int tep_btf_print_args(struct tep_handle *tep, struct trace_seq *s, void *args, int nmem, int size, const char *func) { +#ifdef NO_BTF + tep_warning("BTF not supported. Args: ??? \n"); + return -1; +#else struct tep_btf *btf = tep->btf; struct btf_type *type = tep_btf_find_func(btf, func); struct btf_param *param; @@ -646,4 +654,5 @@ int tep_btf_print_args(struct tep_handle *tep, struct trace_seq *s, void *args, } } return 0; +#endif } -- 2.47.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-02-10 18:04 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-02-08 20:53 Build failure bft for trace-cmd and libtraceevent Giulio Benetti 2026-02-08 21:32 ` Steven Rostedt 2026-02-08 21:44 ` Giulio Benetti 2026-02-08 22:01 ` Steven Rostedt 2026-02-08 22:14 ` Giulio Benetti 2026-02-08 22:22 ` Steven Rostedt 2026-02-10 18:01 ` Giulio Benetti
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox