diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-21 08:28:37 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-21 08:28:37 +0300 |
| commit | a0d6f222864301c11afd9c1d3306e6bfe8446d5d (patch) | |
| tree | 5c8c206146f5f41d930971284082cdc30e6b6a04 /internal/generate | |
| parent | be8735fe701f7398c19c17c394f4827614eab875 (diff) | |
f7 wire eventfd kind for fd-from-air IPC syscalls
Diffstat (limited to 'internal/generate')
| -rw-r--r-- | internal/generate/bpfhandler.go | 10 | ||||
| -rw-r--r-- | internal/generate/classify.go | 24 | ||||
| -rw-r--r-- | internal/generate/classify_test.go | 28 | ||||
| -rw-r--r-- | internal/generate/tracepointsgo.go | 2 |
4 files changed, 63 insertions, 1 deletions
diff --git a/internal/generate/bpfhandler.go b/internal/generate/bpfhandler.go index dce776a..ee56f17 100644 --- a/internal/generate/bpfhandler.go +++ b/internal/generate/bpfhandler.go @@ -262,6 +262,16 @@ func generateExtraEventfd(f *Format, isEnter bool) string { switch f.Name { case "sys_enter_eventfd2": flagsExpr = "(__s32)ctx->args[1]" + case "sys_enter_memfd_create": + flagsExpr = "(__s32)ctx->args[1]" + case "sys_enter_memfd_secret": + flagsExpr = "(__s32)ctx->args[0]" + case "sys_enter_userfaultfd": + flagsExpr = "(__s32)ctx->args[0]" + case "sys_enter_signalfd4": + flagsExpr = "(__s32)ctx->args[3]" + case "sys_enter_timerfd_create": + flagsExpr = "(__s32)ctx->args[1]" case "sys_enter_fsmount": flagsExpr = "(__s32)ctx->args[1]" case "sys_enter_fsopen": diff --git a/internal/generate/classify.go b/internal/generate/classify.go index 9e9df9c..ad9d694 100644 --- a/internal/generate/classify.go +++ b/internal/generate/classify.go @@ -179,6 +179,30 @@ func classifyNameOnly(name string) (ClassificationResult, bool) { return ClassificationResult{Kind: KindEventfd}, true case "sys_exit_eventfd2": return ClassificationResult{Kind: KindEventfd}, true + case "sys_enter_memfd_create": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_exit_memfd_create": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_enter_memfd_secret": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_exit_memfd_secret": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_enter_userfaultfd": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_exit_userfaultfd": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_enter_signalfd": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_exit_signalfd": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_enter_signalfd4": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_exit_signalfd4": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_enter_timerfd_create": + return ClassificationResult{Kind: KindEventfd}, true + case "sys_exit_timerfd_create": + return ClassificationResult{Kind: KindEventfd}, true case "sys_enter_bind": return ClassificationResult{Kind: KindFd}, true case "sys_enter_connect": diff --git a/internal/generate/classify_test.go b/internal/generate/classify_test.go index 5d6424b..79e6240 100644 --- a/internal/generate/classify_test.go +++ b/internal/generate/classify_test.go @@ -377,6 +377,34 @@ func TestClassifyExitEventfd2(t *testing.T) { } } +func TestClassifyEventfdSpecializedFdFromAirSyscalls(t *testing.T) { + tests := []string{ + "sys_enter_memfd_create", + "sys_exit_memfd_create", + "sys_enter_memfd_secret", + "sys_exit_memfd_secret", + "sys_enter_userfaultfd", + "sys_exit_userfaultfd", + "sys_enter_signalfd", + "sys_exit_signalfd", + "sys_enter_signalfd4", + "sys_exit_signalfd4", + "sys_enter_timerfd_create", + "sys_exit_timerfd_create", + } + for _, name := range tests { + t.Run(name, func(t *testing.T) { + r, ok := classifyNameOnly(name) + if !ok { + t.Fatalf("classifyNameOnly(%q) did not match", name) + } + if r.Kind != KindEventfd { + t.Fatalf("classifyNameOnly(%q) kind = %v, want KindEventfd", name, r.Kind) + } + }) + } +} + func TestClassifyEpollCtl(t *testing.T) { r := classifyFromData(t, FormatEpollCtl) if r.Kind != KindEpollCtl { diff --git a/internal/generate/tracepointsgo.go b/internal/generate/tracepointsgo.go index 9d92047..47c2e8f 100644 --- a/internal/generate/tracepointsgo.go +++ b/internal/generate/tracepointsgo.go @@ -10,7 +10,7 @@ import ( ) var secRe = regexp.MustCompile(`^SEC.*sys_((?:enter|exit)_[a-z_0-9]+)`) -var kindLineRe = regexp.MustCompile(`^(sys_enter_[a-z0-9_]+)\s+is a struct\s+([a-z0-9_]+)\s*$`) +var kindLineRe = regexp.MustCompile(`^(sys_enter_[a-z0-9_]+)\s+is a struct\s+([a-z0-9_]+)(?:\s+.*)?$`) // ExtractTracepoints reads generated C code and extracts tracepoint names from // SEC annotations, producing the generated_tracepoints.go content. |
