diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/c/generated_tracepoints.c | 8 | ||||
| -rw-r--r-- | internal/c/generated_tracepoints_result.txt | 8 | ||||
| -rw-r--r-- | internal/generate/classify.go | 11 | ||||
| -rw-r--r-- | internal/generate/classify_test.go | 24 | ||||
| -rw-r--r-- | internal/generate/codegen_test.go | 4 | ||||
| -rw-r--r-- | internal/generate/kindregistry.go | 1 | ||||
| -rw-r--r-- | internal/tracepoints/dimension_selector_test.go | 15 | ||||
| -rw-r--r-- | internal/tracepoints/generated_tracepoints.go | 8 |
8 files changed, 66 insertions, 13 deletions
diff --git a/internal/c/generated_tracepoints.c b/internal/c/generated_tracepoints.c index 70f25ab..d5caceb 100644 --- a/internal/c/generated_tracepoints.c +++ b/internal/c/generated_tracepoints.c @@ -19026,7 +19026,7 @@ int handle_sys_exit_set_tid_address(struct syscall_trace_exit *ctx) { return 0; } -/// sys_enter_fork is a struct null_event (kind=null) +/// sys_enter_fork is a struct null_event (kind=proc) SEC("tracepoint/syscalls/sys_enter_fork") int handle_sys_enter_fork(struct syscall_trace_enter *ctx) { __u32 pid, tid; @@ -19076,7 +19076,7 @@ int handle_sys_exit_fork(struct syscall_trace_exit *ctx) { return 0; } -/// sys_enter_vfork is a struct null_event (kind=null) +/// sys_enter_vfork is a struct null_event (kind=proc) SEC("tracepoint/syscalls/sys_enter_vfork") int handle_sys_enter_vfork(struct syscall_trace_enter *ctx) { __u32 pid, tid; @@ -19126,7 +19126,7 @@ int handle_sys_exit_vfork(struct syscall_trace_exit *ctx) { return 0; } -/// sys_enter_clone is a struct null_event (kind=null) +/// sys_enter_clone is a struct null_event (kind=proc) SEC("tracepoint/syscalls/sys_enter_clone") int handle_sys_enter_clone(struct syscall_trace_enter *ctx) { __u32 pid, tid; @@ -19176,7 +19176,7 @@ int handle_sys_exit_clone(struct syscall_trace_exit *ctx) { return 0; } -/// sys_enter_clone3 is a struct null_event (kind=null) +/// sys_enter_clone3 is a struct null_event (kind=proc) SEC("tracepoint/syscalls/sys_enter_clone3") int handle_sys_enter_clone3(struct syscall_trace_enter *ctx) { __u32 pid, tid; diff --git a/internal/c/generated_tracepoints_result.txt b/internal/c/generated_tracepoints_result.txt index f822594..dfdf987 100644 --- a/internal/c/generated_tracepoints_result.txt +++ b/internal/c/generated_tracepoints_result.txt @@ -21,8 +21,8 @@ sys_enter_clock_getres is a struct null_event (kind=null) sys_enter_clock_gettime is a struct null_event (kind=null) sys_enter_clock_nanosleep is a struct sleep_event (kind=sleep) sys_enter_clock_settime is a struct null_event (kind=null) -sys_enter_clone is a struct null_event (kind=null) -sys_enter_clone3 is a struct null_event (kind=null) +sys_enter_clone is a struct null_event (kind=proc) +sys_enter_clone3 is a struct null_event (kind=proc) sys_enter_close is a struct fd_event (kind=fd) sys_enter_close_range is a struct fd_event (kind=fd) sys_enter_connect is a struct fd_event (kind=fd) @@ -64,7 +64,7 @@ sys_enter_file_setattr is a struct path_event (kind=pathname) sys_enter_finit_module is a struct fd_event (kind=fd) sys_enter_flistxattr is a struct fd_event (kind=fd) sys_enter_flock is a struct fd_event (kind=fd) -sys_enter_fork is a struct null_event (kind=null) +sys_enter_fork is a struct null_event (kind=proc) sys_enter_fremovexattr is a struct fd_event (kind=fd) sys_enter_fsconfig is a struct fd_event (kind=fd) sys_enter_fsetxattr is a struct fd_event (kind=fd) @@ -358,7 +358,7 @@ sys_enter_ustat is a struct null_event (kind=null) sys_enter_utime is a struct path_event (kind=pathname) sys_enter_utimensat is a struct path_event (kind=pathname) sys_enter_utimes is a struct path_event (kind=pathname) -sys_enter_vfork is a struct null_event (kind=null) +sys_enter_vfork is a struct null_event (kind=proc) sys_enter_vhangup is a struct null_event (kind=null) sys_enter_vmsplice is a struct fd_event (kind=fd) sys_enter_wait4 is a struct null_event (kind=null) diff --git a/internal/generate/classify.go b/internal/generate/classify.go index 9c37646..3b2fb53 100644 --- a/internal/generate/classify.go +++ b/internal/generate/classify.go @@ -35,6 +35,7 @@ const ( KindModule KindSysVId KindSysVOp + KindProc ) func (k TracepointKind) MetadataName() string { @@ -97,6 +98,8 @@ func (k TracepointKind) MetadataName() string { return "sysv-id" case KindSysVOp: return "sysv-op" + case KindProc: + return "proc" default: return "none" } @@ -362,6 +365,14 @@ func classifyNameOnly(name string) (ClassificationResult, bool) { return ClassificationResult{Kind: KindSysVOp}, true case "sys_enter_shmctl": return ClassificationResult{Kind: KindSysVOp}, true + case "sys_enter_clone": + return ClassificationResult{Kind: KindProc}, true + case "sys_enter_clone3": + return ClassificationResult{Kind: KindProc}, true + case "sys_enter_fork": + return ClassificationResult{Kind: KindProc}, true + case "sys_enter_vfork": + return ClassificationResult{Kind: KindProc}, true case "sys_enter_pidfd_send_signal": return ClassificationResult{Kind: KindFd}, true case "sys_enter_kexec_file_load": diff --git a/internal/generate/classify_test.go b/internal/generate/classify_test.go index 364de2c..d6d339b 100644 --- a/internal/generate/classify_test.go +++ b/internal/generate/classify_test.go @@ -941,6 +941,30 @@ func TestClassifyB7NameOnlyKinds(t *testing.T) { } } +func TestClassify37NameOnlyKinds(t *testing.T) { + tests := []string{ + "sys_enter_clone", + "sys_enter_clone3", + "sys_enter_fork", + "sys_enter_vfork", + } + + for _, name := range tests { + t.Run(name, func(t *testing.T) { + r := ClassifyFormat(&Format{ + Name: name, + ExternalFields: []Field{ + {Type: "long", Name: "__syscall_nr"}, + {Type: "long", Name: "arg0"}, + }, + }) + if r.Kind != KindProc { + t.Fatalf("%s: got kind %d, want KindProc", name, r.Kind) + } + }) + } +} + func TestClassifyAcctPathname(t *testing.T) { r := ClassifyFormat(&Format{ Name: "sys_enter_acct", diff --git a/internal/generate/codegen_test.go b/internal/generate/codegen_test.go index c431f5c..ffa65d9 100644 --- a/internal/generate/codegen_test.go +++ b/internal/generate/codegen_test.go @@ -586,6 +586,7 @@ func TestGenerateAllEventTypes(t *testing.T) { {KindModule, "ENTER_NULL_EVENT", "EXIT_NULL_EVENT"}, {KindSysVId, "ENTER_NULL_EVENT", "EXIT_NULL_EVENT"}, {KindSysVOp, "ENTER_NULL_EVENT", "EXIT_NULL_EVENT"}, + {KindProc, "ENTER_NULL_EVENT", "EXIT_NULL_EVENT"}, } for _, tt := range tests { @@ -632,6 +633,7 @@ func TestEventStructNames(t *testing.T) { {KindModule, "null_event"}, {KindSysVId, "null_event"}, {KindSysVOp, "null_event"}, + {KindProc, "null_event"}, } for _, tt := range tests { @@ -650,7 +652,7 @@ func TestEnterReject(t *testing.T) { t.Error("KindNone should be enter-rejected") } - accepted := []TracepointKind{KindFd, KindOpen, KindMqOpen, KindExec, KindPathname, KindName, KindFcntl, KindNull, KindDup3, KindOpenByHandleAt, KindSocket, KindSocketpair, KindAccept, KindPipe, KindEventfd, KindPidfd, KindEpollCtl, KindTwoFd, KindPoll, KindMem, KindSleep, KindKeyctl, KindPtrace, KindPerfOpen, KindSeccomp, KindModule, KindSysVId, KindSysVOp} + accepted := []TracepointKind{KindFd, KindOpen, KindMqOpen, KindExec, KindPathname, KindName, KindFcntl, KindNull, KindDup3, KindOpenByHandleAt, KindSocket, KindSocketpair, KindAccept, KindPipe, KindEventfd, KindPidfd, KindEpollCtl, KindTwoFd, KindPoll, KindMem, KindSleep, KindKeyctl, KindPtrace, KindPerfOpen, KindSeccomp, KindModule, KindSysVId, KindSysVOp, KindProc} for _, k := range accepted { if isEnterRejected(k) { t.Errorf("kind %d should NOT be enter-rejected", k) diff --git a/internal/generate/kindregistry.go b/internal/generate/kindregistry.go index 8f83e69..8ef0f61 100644 --- a/internal/generate/kindregistry.go +++ b/internal/generate/kindregistry.go @@ -45,6 +45,7 @@ var kindRegistry = map[TracepointKind]kindMeta{ KindModule: {structName: "null_event", enterAccepted: true}, KindSysVId: {structName: "null_event", enterAccepted: true}, KindSysVOp: {structName: "null_event", enterAccepted: true}, + KindProc: {structName: "null_event", enterAccepted: true}, // KindNone is intentionally absent: it represents "unclassified" and is // never enter-accepted. lookupKind returns the zero kindMeta (enterAccepted=false) // for any unregistered kind, so KindNone is implicitly rejected. diff --git a/internal/tracepoints/dimension_selector_test.go b/internal/tracepoints/dimension_selector_test.go index c952e67..439a153 100644 --- a/internal/tracepoints/dimension_selector_test.go +++ b/internal/tracepoints/dimension_selector_test.go @@ -123,6 +123,21 @@ func TestParseSelectorWithDimensionsSysVOpKindOnly(t *testing.T) { } } +func TestParseSelectorWithDimensionsProcKindOnly(t *testing.T) { + sel, err := ParseSelectorWithDimensions("", "", DimensionSelectorConfig{ + TraceKinds: "proc", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if !sel.ShouldAttach("sys_enter_clone3") { + t.Fatal("expected clone3 to be attached for proc kind") + } + if sel.ShouldAttach("sys_enter_openat") { + t.Fatal("expected openat to be excluded when only proc kind is enabled") + } +} + func TestParseSelectorWithDimensionsSyscallOnly(t *testing.T) { sel, err := ParseSelectorWithDimensions("", "", DimensionSelectorConfig{ TraceSyscalls: "openat", diff --git a/internal/tracepoints/generated_tracepoints.go b/internal/tracepoints/generated_tracepoints.go index 12261c6..cf9296f 100644 --- a/internal/tracepoints/generated_tracepoints.go +++ b/internal/tracepoints/generated_tracepoints.go @@ -1132,8 +1132,8 @@ var syscallKinds = map[string]string{ "clock_gettime": "null", "clock_nanosleep": "sleep", "clock_settime": "null", - "clone": "null", - "clone3": "null", + "clone": "proc", + "clone3": "proc", "close": "fd", "close_range": "fd", "connect": "fd", @@ -1175,7 +1175,7 @@ var syscallKinds = map[string]string{ "finit_module": "fd", "flistxattr": "fd", "flock": "fd", - "fork": "null", + "fork": "proc", "fremovexattr": "fd", "fsconfig": "fd", "fsetxattr": "fd", @@ -1469,7 +1469,7 @@ var syscallKinds = map[string]string{ "utime": "pathname", "utimensat": "pathname", "utimes": "pathname", - "vfork": "null", + "vfork": "proc", "vhangup": "null", "vmsplice": "fd", "wait4": "null", |
