summaryrefslogtreecommitdiff
path: root/include/trace
diff options
context:
space:
mode:
authorMykyta Yatsenko <yatsenko@meta.com>2026-07-30 17:17:39 -0700
committerSteven Rostedt <rostedt@goodmis.org>2026-08-05 22:02:29 -0400
commitd5b201ed4feb7a11da242a97669424efeb724031 (patch)
tree4d42d8fd6abb228e89fa0a37eb9e9b20139bf839 /include/trace
parentefdcfd9b4f4f07aa70663ee02a79dbdf980bf582 (diff)
downloadlinux-d5b201ed4feb7a11da242a97669424efeb724031.tar.gz
linux-d5b201ed4feb7a11da242a97669424efeb724031.zip
tracing: Make per-template BTF id lists file-local
DECLARE_EVENT_CLASS emitted __bpf_trace_btf_ids_<call> through BTF_ID_LIST_GLOBAL, i.e. a global symbol named after the event class. The class name is not unique across the kernel, so the symbol multiply-defines whenever two translation units instantiate the same class. Switch to the file-local BTF_ID_LIST: the list is reached only through the event_class_<call>.btf_ids pointer, initialised in the same unit, so tracefs readers never reference the symbol by name and resolve_btfids still fills the now-local .BTF_ids entries. The handcrafted syscall classes are the one cross-unit consumer: give them their own local BTF_ID_LIST rather than importing the generated sys_{enter,exit} lists. Link: https://patch.msgid.link/20260730-b4-fix_btf_tracefs-v2-1-6b66da8dc103@meta.com Fixes: eadc0725ab8d3 ("tracing: Expose tracepoint BTF ids via tracefs") Reported-by: Mark Brown <broonie@kernel.org> Closes: https://lore.kernel.org/all/ff58b01c-3f5e-4d55-be82-609d2faaf12e@sirena.org.uk/ Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com> Acked-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'include/trace')
-rw-r--r--include/trace/trace_events.h7
1 files changed, 3 insertions, 4 deletions
diff --git a/include/trace/trace_events.h b/include/trace/trace_events.h
index 09ad57ac4b73..93011f800d0f 100644
--- a/include/trace/trace_events.h
+++ b/include/trace/trace_events.h
@@ -398,7 +398,7 @@ static inline notrace int trace_event_get_offsets_##call( \
#define _TRACE_PERF_INIT(call)
#endif /* CONFIG_PERF_EVENTS */
-#ifdef CONFIG_BPF_EVENTS
+#if defined(CONFIG_BPF_EVENTS) && defined(CONFIG_DEBUG_INFO_BTF)
/*
* Per-template BTF id list, populated at link time by resolve_btfids:
* [0] FUNC __bpf_trace_<call> (the BPF dispatcher)
@@ -406,8 +406,7 @@ static inline notrace int trace_event_get_offsets_##call( \
* Exposed via the events/<sys>/<name>/btf_ids tracefs file.
*/
#define _TRACE_BTF_IDS_DECLARE(call) \
- extern u32 __bpf_trace_btf_ids_##call[]; \
- BTF_ID_LIST_GLOBAL(__bpf_trace_btf_ids_##call, 2) \
+ BTF_ID_LIST(__bpf_trace_btf_ids_##call) \
BTF_ID(func, __bpf_trace_##call) \
BTF_ID(struct, trace_event_raw_##call)
@@ -417,7 +416,7 @@ static inline notrace int trace_event_get_offsets_##call( \
#else
#define _TRACE_BTF_IDS_DECLARE(call)
#define _TRACE_BTF_IDS_INIT(call)
-#endif /* CONFIG_BPF_EVENTS */
+#endif /* CONFIG_BPF_EVENTS && CONFIG_DEBUG_INFO_BTF */
#include "stages/stage6_event_callback.h"