summaryrefslogtreecommitdiff
path: root/internal/generate/bpfhandler.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/generate/bpfhandler.go')
-rw-r--r--internal/generate/bpfhandler.go13
1 files changed, 13 insertions, 0 deletions
diff --git a/internal/generate/bpfhandler.go b/internal/generate/bpfhandler.go
index 9e6f5d7..5c42464 100644
--- a/internal/generate/bpfhandler.go
+++ b/internal/generate/bpfhandler.go
@@ -97,6 +97,8 @@ func generateExtra(tp GeneratedTracepoint, isEnter bool) string {
return generateExtraPoll(f.Name)
case KindMem:
return generateExtraMem(f.Name)
+ case KindSleep:
+ return generateExtraSleep(f.Name)
case KindOpen:
return generateExtraOpen(f)
case KindPathname:
@@ -243,6 +245,17 @@ func generateExtraMem(name string) string {
}
}
+func generateExtraSleep(name string) string {
+ ptrExpr := "0"
+ switch name {
+ case "sys_enter_nanosleep":
+ ptrExpr = "ctx->args[0]"
+ case "sys_enter_clock_nanosleep":
+ ptrExpr = "ctx->args[2]"
+ }
+ return " ev->requested_ns = -1;\n if (" + ptrExpr + " != 0) {\n struct __ior_timespec {\n __s64 tv_sec;\n __s64 tv_nsec;\n } ts = {};\n if (bpf_probe_read_user(&ts, sizeof(ts), (void *)" + ptrExpr + ") == 0) {\n ev->requested_ns = ts.tv_sec * 1000000000LL + ts.tv_nsec;\n }\n }\n"
+}
+
// eventStructName returns the C struct name for a TracepointKind. The mapping
// is driven by kindRegistry so adding a new kind only requires a registry entry.
func eventStructName(kind TracepointKind) string {