From 4e67c348ef1dc2c0d08f3e90c2affb555b205d0e Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 23 May 2026 20:10:43 +0300 Subject: 2c fix epoll_create and pidfd_open flags in BPF codegen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit epoll_create(size) was recording size (args[0]) as flags — hardcode to 0 since the syscall has no flags argument. pidfd_open(pid, flags) was recording pid (args[0]) as flags — use args[1] instead. Add test fixtures and codegen tests that verify the correct argument indexes and reject the old wrong ones. Regenerate generated_tracepoints.c. Co-Authored-By: Claude Opus 4.7 --- internal/generate/testdata.go | 59 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'internal/generate/testdata.go') diff --git a/internal/generate/testdata.go b/internal/generate/testdata.go index d94c141..9b57983 100644 --- a/internal/generate/testdata.go +++ b/internal/generate/testdata.go @@ -1775,3 +1775,62 @@ format: field:int __syscall_nr; offset:8; size:4; signed:1; field:long ret; offset:16; size:8; signed:1; ` + +// epoll_create(int size) — single argument, no flags. +const FormatEpollCreate = `name: sys_enter_epoll_create +ID: 1451 +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:int size; offset:16; size:8; signed:0; + +print fmt: "size: 0x%08lx", ((unsigned long)(REC->size)) +` + +const FormatExitEpollCreate = `name: sys_exit_epoll_create +ID: 1450 +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 +` + +// pidfd_open(pid_t pid, unsigned int flags) — flags at args[1], not args[0]. +const FormatPidfdOpen = `name: sys_enter_pidfd_open +ID: 1461 +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:pid_t pid; offset:16; size:8; signed:0; + field:unsigned int flags; offset:24; size:8; signed:0; + +print fmt: "pid: 0x%08lx, flags: 0x%08lx", ((unsigned long)(REC->pid)), ((unsigned long)(REC->flags)) +` + +const FormatExitPidfdOpen = `name: sys_exit_pidfd_open +ID: 1460 +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 +` -- cgit v1.2.3