summaryrefslogtreecommitdiff
path: root/internal/generate
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-21 17:55:49 +0300
committerPaul Buetow <paul@buetow.org>2026-05-21 17:55:49 +0300
commit47091d7d25da2bb80ce8ad2209575e098f726075 (patch)
tree8d50f931b1eba985d848a3bbc8be8969bf23e9ca /internal/generate
parent61f0da12457ffc27b42565e79ac8c2ec9db0e4e7 (diff)
l7 classify numa and process memory syscalls
Diffstat (limited to 'internal/generate')
-rw-r--r--internal/generate/classify.go24
-rw-r--r--internal/generate/classify_test.go35
-rw-r--r--internal/generate/codegen_test.go10
3 files changed, 69 insertions, 0 deletions
diff --git a/internal/generate/classify.go b/internal/generate/classify.go
index 191b41e..3fa8d23 100644
--- a/internal/generate/classify.go
+++ b/internal/generate/classify.go
@@ -376,6 +376,30 @@ func classifyNameOnly(name string) (ClassificationResult, bool) {
return ClassificationResult{Kind: KindSysVOp}, true
case "sys_enter_shmctl":
return ClassificationResult{Kind: KindSysVOp}, true
+ case "sys_enter_pkey_alloc":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_pkey_free":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_mbind":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_set_mempolicy":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_get_mempolicy":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_set_mempolicy_home_node":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_migrate_pages":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_move_pages":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_mlockall":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_munlockall":
+ return ClassificationResult{Kind: KindNull}, true
+ case "sys_enter_process_madvise":
+ return ClassificationResult{Kind: KindFd}, true
+ case "sys_enter_process_mrelease":
+ return ClassificationResult{Kind: KindFd}, true
case "sys_enter_clone":
return ClassificationResult{Kind: KindProc}, true
case "sys_enter_clone3":
diff --git a/internal/generate/classify_test.go b/internal/generate/classify_test.go
index bbf33d6..07445ec 100644
--- a/internal/generate/classify_test.go
+++ b/internal/generate/classify_test.go
@@ -745,6 +745,41 @@ func TestClassifyH7NameOnlyKinds(t *testing.T) {
}
}
+func TestClassifyL7NameOnlyKinds(t *testing.T) {
+ tests := []struct {
+ name string
+ want TracepointKind
+ }{
+ {"sys_enter_pkey_alloc", KindNull},
+ {"sys_enter_pkey_free", KindNull},
+ {"sys_enter_mbind", KindNull},
+ {"sys_enter_set_mempolicy", KindNull},
+ {"sys_enter_get_mempolicy", KindNull},
+ {"sys_enter_set_mempolicy_home_node", KindNull},
+ {"sys_enter_migrate_pages", KindNull},
+ {"sys_enter_move_pages", KindNull},
+ {"sys_enter_mlockall", KindNull},
+ {"sys_enter_munlockall", KindNull},
+ {"sys_enter_process_madvise", KindFd},
+ {"sys_enter_process_mrelease", KindFd},
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ r := ClassifyFormat(&Format{
+ Name: tt.name,
+ ExternalFields: []Field{
+ {Type: "long", Name: "__syscall_nr"},
+ {Type: "long", Name: "arg0"},
+ },
+ })
+ if r.Kind != tt.want {
+ t.Fatalf("%s: got kind %d, want %d", tt.name, r.Kind, tt.want)
+ }
+ })
+ }
+}
+
func TestClassify67NameOnlyKinds(t *testing.T) {
tests := []struct {
name string
diff --git a/internal/generate/codegen_test.go b/internal/generate/codegen_test.go
index 7614ab1..220d77e 100644
--- a/internal/generate/codegen_test.go
+++ b/internal/generate/codegen_test.go
@@ -33,6 +33,16 @@ func TestGeneratePidfdGetfdHandlerUsesPidfdArgument(t *testing.T) {
requireContains(t, output, "ev->fd = (__s32)ctx->args[0];")
}
+func TestGenerateProcessMadviseHandlerUsesFirstArgumentAsFd(t *testing.T) {
+ output := GenerateTracepointsC(mustParseAll(t, syntheticPair("process_madvise")))
+
+ requireContains(t, output, `SEC("tracepoint/syscalls/sys_enter_process_madvise")`)
+ requireContains(t, output, "struct fd_event *ev")
+ requireContains(t, output, "ev->event_type = ENTER_FD_EVENT;")
+ requireContains(t, output, "ev->trace_id = SYS_ENTER_PROCESS_MADVISE;")
+ requireContains(t, output, "ev->fd = (__s32)ctx->args[0];")
+}
+
func TestGenerateOpenHandler(t *testing.T) {
output := generateFromPair(t, FormatOpenat, FormatExitOpenat)