diff options
Diffstat (limited to 'internal/generate/bpfhandler.go')
| -rw-r--r-- | internal/generate/bpfhandler.go | 13 |
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 { |
