summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-21 17:51:06 +0300
committerPaul Buetow <paul@buetow.org>2026-05-21 17:51:06 +0300
commit291b5a18c144123c3329b84ef2d0ba64d8db74d3 (patch)
tree08b6e63bfeef533b23e3ff70da17da0302eab44e
parente06f421493bc1c95e787b0f49dd655863e7baf81 (diff)
37 classify clone family as proc kind
-rw-r--r--internal/c/generated_tracepoints.c8
-rw-r--r--internal/c/generated_tracepoints_result.txt8
-rw-r--r--internal/generate/classify.go11
-rw-r--r--internal/generate/classify_test.go24
-rw-r--r--internal/generate/codegen_test.go4
-rw-r--r--internal/generate/kindregistry.go1
-rw-r--r--internal/tracepoints/dimension_selector_test.go15
-rw-r--r--internal/tracepoints/generated_tracepoints.go8
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",