summaryrefslogtreecommitdiff
path: root/internal/generate/bpfhandler.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-20 11:38:19 +0300
committerPaul Buetow <paul@buetow.org>2026-05-20 11:38:19 +0300
commit9310b54d439d4a1a8d4d337987aa63884df0af76 (patch)
treec6fb38085891a04ce81672f977af316a2e96b2fd /internal/generate/bpfhandler.go
parent5fd613562e2aa2ab3aac3349f44db88330046c1c (diff)
feat: add syscall aggregate sampling infrastructure (task 17)
Diffstat (limited to 'internal/generate/bpfhandler.go')
-rw-r--r--internal/generate/bpfhandler.go12
1 files changed, 10 insertions, 2 deletions
diff --git a/internal/generate/bpfhandler.go b/internal/generate/bpfhandler.go
index e3d0d67..9e6f5d7 100644
--- a/internal/generate/bpfhandler.go
+++ b/internal/generate/bpfhandler.go
@@ -31,10 +31,10 @@ func generateBPFHandler(tp GeneratedTracepoint) string {
eventTypeConst := eventTypeConstant(tp.Classification.Kind, isEnter)
extra := generateExtra(tp, isEnter)
- return renderHandler(f.Name, ctxStruct, eventStruct, comment, eventTypeConst, extra)
+ return renderHandler(f.Name, ctxStruct, eventStruct, comment, eventTypeConst, extra, isEnter)
}
-func renderHandler(name, ctxStruct, eventStruct, comment, eventTypeConst, extra string) string {
+func renderHandler(name, ctxStruct, eventStruct, comment, eventTypeConst, extra string, isEnter bool) string {
var b strings.Builder
fmt.Fprintf(&b, "/// %s is a struct %s\n", name, comment)
fmt.Fprintf(&b, "SEC(\"tracepoint/syscalls/%s\")\n", name)
@@ -43,6 +43,14 @@ func renderHandler(name, ctxStruct, eventStruct, comment, eventTypeConst, extra
b.WriteString(" if (filter(&pid, &tid))\n")
b.WriteString(" return 0;\n")
b.WriteString("\n")
+ if isEnter {
+ fmt.Fprintf(&b, " if (!ior_on_syscall_enter(tid, %s))\n", strings.ToUpper(name))
+ b.WriteString(" return 0;\n")
+ } else {
+ fmt.Fprintf(&b, " if (!ior_on_syscall_exit(tid, %s, ctx->ret))\n", strings.ToUpper(name))
+ b.WriteString(" return 0;\n")
+ }
+ b.WriteString("\n")
fmt.Fprintf(&b, " struct %s *ev = bpf_ringbuf_reserve(&event_map, sizeof(struct %s), 0);\n", eventStruct, eventStruct)
b.WriteString(" if (!ev)\n")
b.WriteString(" return 0;\n")