summaryrefslogtreecommitdiff
path: root/internal/generate/codegen_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-29 10:02:18 +0300
committerPaul Buetow <paul@buetow.org>2026-05-29 10:02:18 +0300
commite77aa19957b5f38fd47dc8de0a701ecf8482697b (patch)
treef014235d87df591878f2e3befffb2a91cef610a5 /internal/generate/codegen_test.go
parent3bcdbe94d8b72ebcd829dbf7c1a582d2268fef45 (diff)
test(epoll_create): lock in epoll_create1 args[0] flags capture
Audited epoll_create/epoll_create1 against man 2 epoll_create. Implementation already correct: both classify as KindEventfd (fd-creating), epoll_create(size) hardcodes flags=0 (no flags arg), epoll_create1(flags) reads ctx->args[0], and exit captures the returned fd via ev->ret. Add FormatEpollCreate1/FormatExitEpollCreate1 fixtures and TestGenerateEpollCreate1HandlerUsesArg0Flags as the positive counterpart to the existing TestGenerateEpollCreateHandlerUsesZeroFlags negative test, asserting the enter handler captures args[0] as flags rather than 0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'internal/generate/codegen_test.go')
-rw-r--r--internal/generate/codegen_test.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/internal/generate/codegen_test.go b/internal/generate/codegen_test.go
index d74939b..b0e6f75 100644
--- a/internal/generate/codegen_test.go
+++ b/internal/generate/codegen_test.go
@@ -397,6 +397,24 @@ func TestGenerateEpollCreateHandlerUsesZeroFlags(t *testing.T) {
requireContains(t, output, "ev->ret = ctx->ret;")
}
+func TestGenerateEpollCreate1HandlerUsesArg0Flags(t *testing.T) {
+ output := generateFromPair(t, FormatEpollCreate1, FormatExitEpollCreate1)
+
+ requireContains(t, output, "struct eventfd_event *ev")
+ requireContains(t, output, "ev->event_type = ENTER_EVENTFD_EVENT;")
+ requireContains(t, output, "ev->trace_id = SYS_ENTER_EPOLL_CREATE1;")
+ // epoll_create1(flags) carries its flags (e.g. EPOLL_CLOEXEC) in args[0];
+ // the generated enter handler must capture it rather than hardcoding 0.
+ requireContains(t, output, "__s32 flags = (__s32)ctx->args[0];")
+ if strings.Contains(output, "__s32 flags = 0;\n bpf_map_update_elem") {
+ t.Error("epoll_create1 enter handler must read ctx->args[0] as flags, not 0")
+ }
+ requireContains(t, output, "ev->ret = -1;")
+ requireContains(t, output, "SEC(\"tracepoint/syscalls/sys_exit_epoll_create1\")")
+ requireContains(t, output, "ev->event_type = EXIT_EVENTFD_EVENT;")
+ requireContains(t, output, "ev->ret = ctx->ret;")
+}
+
func TestGeneratePidfdOpenHandlerUsesArg1Flags(t *testing.T) {
output := generateFromPair(t, FormatPidfdOpen, FormatExitPidfdOpen)