summaryrefslogtreecommitdiff
path: root/internal/generate
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-23 09:55:29 +0200
committerPaul Buetow <paul@buetow.org>2026-02-23 09:55:29 +0200
commit9e7b820cfacb50299720b9d391de907d6f3fbdec (patch)
tree9c61cfffa44e407003d369ff1ba5ab99eb64c3f9 /internal/generate
parent55f33883838336c70d483779b0435c6e781b615e (diff)
Fix integration trace expectations and fd/open event handling
Diffstat (limited to 'internal/generate')
-rw-r--r--internal/generate/bpfhandler.go4
-rw-r--r--internal/generate/codegen_test.go10
-rw-r--r--internal/generate/testdata.go33
3 files changed, 47 insertions, 0 deletions
diff --git a/internal/generate/bpfhandler.go b/internal/generate/bpfhandler.go
index 1ce6d3e..eb9c4c4 100644
--- a/internal/generate/bpfhandler.go
+++ b/internal/generate/bpfhandler.go
@@ -59,6 +59,10 @@ func generateExtra(tp GeneratedTracepoint, isEnter bool) string {
switch tp.Classification.Kind {
case KindFd:
+ fdIdx := f.FieldNumber("fd")
+ if fdIdx >= 0 {
+ return fmt.Sprintf(" ev->fd = (__s32)ctx->args[%d];\n", fdIdx)
+ }
return " ev->fd = (__s32)ctx->args[0];\n"
case KindDup3:
diff --git a/internal/generate/codegen_test.go b/internal/generate/codegen_test.go
index 6402214..3e48c79 100644
--- a/internal/generate/codegen_test.go
+++ b/internal/generate/codegen_test.go
@@ -149,6 +149,16 @@ func TestGenerateIoUringRegisterHandler(t *testing.T) {
requireContains(t, output, "ev->fd = (__s32)ctx->args[0];")
}
+func TestGenerateMmapHandlerUsesFdArgumentIndex(t *testing.T) {
+ output := generateFromPair(t, FormatMmap, FormatExitMmap)
+
+ requireContains(t, output, `SEC("tracepoint/syscalls/sys_enter_mmap")`)
+ requireContains(t, output, "struct fd_event *ev")
+ requireContains(t, output, "ev->event_type = ENTER_FD_EVENT;")
+ requireContains(t, output, "ev->trace_id = SYS_ENTER_MMAP;")
+ requireContains(t, output, "ev->fd = (__s32)ctx->args[4];")
+}
+
func TestGenerateDup3Handler(t *testing.T) {
output := generateFromPair(t, FormatDup3, FormatExitDup3)
diff --git a/internal/generate/testdata.go b/internal/generate/testdata.go
index 76228a3..fb68dfb 100644
--- a/internal/generate/testdata.go
+++ b/internal/generate/testdata.go
@@ -168,6 +168,39 @@ format:
print fmt: "start: 0x%08lx, len: 0x%08lx, flags: 0x%08lx", ((unsigned long)(REC->start)), ((unsigned long)(REC->len)), ((unsigned long)(REC->flags))
`
+const FormatMmap = `name: sys_enter_mmap
+ID: 100
+format:
+ field:unsigned short common_type; offset:0; size:2; signed:0;
+ field:unsigned char common_flags; offset:2; size:1; signed:0;
+ field:unsigned char common_preempt_count; offset:3; size:1; signed:0;
+ field:int common_pid; offset:4; size:4; signed:1;
+
+ field:int __syscall_nr; offset:8; size:4; signed:1;
+ field:unsigned long addr; offset:16; size:8; signed:0;
+ field:unsigned long len; offset:24; size:8; signed:0;
+ field:unsigned long prot; offset:32; size:8; signed:0;
+ field:unsigned long flags; offset:40; size:8; signed:0;
+ field:unsigned long fd; offset:48; size:8; signed:0;
+ field:unsigned long off; offset:56; size:8; signed:0;
+
+print fmt: "addr: 0x%08lx, len: 0x%08lx, prot: 0x%08lx, flags: 0x%08lx, fd: 0x%08lx, off: 0x%08lx", ((unsigned long)(REC->addr)), ((unsigned long)(REC->len)), ((unsigned long)(REC->prot)), ((unsigned long)(REC->flags)), ((unsigned long)(REC->fd)), ((unsigned long)(REC->off))
+`
+
+const FormatExitMmap = `name: sys_exit_mmap
+ID: 99
+format:
+ field:unsigned short common_type; offset:0; size:2; signed:0;
+ field:unsigned char common_flags; offset:2; size:1; signed:0;
+ field:unsigned char common_preempt_count; offset:3; size:1; signed:0;
+ field:int common_pid; offset:4; size:4; signed:1;
+
+ field:int __syscall_nr; offset:8; size:4; signed:1;
+ field:long ret; offset:16; size:8; signed:1;
+
+print fmt: "0x%lx", REC->ret
+`
+
const FormatExitMsync = `name: sys_exit_msync
ID: 1028
format: