diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-23 09:55:29 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-23 09:55:29 +0200 |
| commit | 9e7b820cfacb50299720b9d391de907d6f3fbdec (patch) | |
| tree | 9c61cfffa44e407003d369ff1ba5ab99eb64c3f9 /internal/generate | |
| parent | 55f33883838336c70d483779b0435c6e781b615e (diff) | |
Fix integration trace expectations and fd/open event handling
Diffstat (limited to 'internal/generate')
| -rw-r--r-- | internal/generate/bpfhandler.go | 4 | ||||
| -rw-r--r-- | internal/generate/codegen_test.go | 10 | ||||
| -rw-r--r-- | internal/generate/testdata.go | 33 |
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: |
