diff options
| author | Paul Buetow <paul@buetow.org> | 2024-03-08 08:46:00 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-03-08 08:46:00 +0200 |
| commit | 0b94a7cced7d4bb9a44c9e9e827c4e3b09e5e8dc (patch) | |
| tree | 3401f36473884d72f88de53339def3e314cf7c1b /internal/c/generated/tracepoints.raku | |
| parent | b215bafceeecbe97de19fb3111dc080196224ab9 (diff) | |
as per https://codeberg.org/snonux/ioriotng/issues/19
Diffstat (limited to 'internal/c/generated/tracepoints.raku')
| -rw-r--r-- | internal/c/generated/tracepoints.raku | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/internal/c/generated/tracepoints.raku b/internal/c/generated/tracepoints.raku index ad95559..de801a7 100644 --- a/internal/c/generated/tracepoints.raku +++ b/internal/c/generated/tracepoints.raku @@ -45,8 +45,10 @@ class Format { # file descriptor passed to syscalls. has Bool $.has-fd is rw = False; - # Has tracepoint has got oldname and name + # Tracepoint has oldname/newname has Bool $.has-name is rw = False; + # Tracepoint has pathname + has Bool $.has-path is rw = False; # Syscall returns with a long value (e.g. bytes read/written) has Bool $.has-long-ret is rw = False; @@ -65,6 +67,8 @@ class Format { $!has-fd = True; } elsif (field.name eq 'newname' && field.type eq 'const char *') { $!has-name = True; + } elsif (field.name eq 'pathname' && field.type eq 'const char *') { + $!has-path = True; } elsif (field.name eq 'ret' && field.type eq 'long') { $.has-long-ret = True; } @@ -85,6 +89,7 @@ class Format { my \event-struct = do if $!has-fd { 'fd_event' } elsif $!has-long-ret { 'ret_event' } elsif $!has-name { 'name_event' } + elsif $!has-path { 'path_event' } else { 'null_event' }; my \extra-data = do if $!has-fd { 'ev->fd = (__s32)ctx->args[0];' } elsif $!has-long-ret { 'ev->ret = ctx->ret;' } @@ -96,6 +101,12 @@ class Format { bpf_probe_read_user_str(ev->oldname, sizeof(ev->oldname), (void*)ctx->args[{oldname-index}]); bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[{newname-index}]); END + } elsif $!has-path { + my Int \pathname-index = self!field-number('pathname'); + qq:to/END/.trim-trailing; + __builtin_memset(\&(ev->pathname), 0, sizeof(ev->pathname)); + bpf_probe_read_user_str(ev->pathname, sizeof(ev->pathname), (void*)ctx->args[{pathname-index}]); + END } else { '' }; qq:to/END/; @@ -154,7 +165,7 @@ my Format @formats = gather for SysTraceFormat .parse($*IN.slurp,:actions(SysTraceFormatActions.new)).made # For each enter there is an exit tracepoint. E.g. sys_enter_open and sys_exit_open .classify(*.name.split('_').tail).values - .grep({ $_.grep(*.has-fd) || $_.grep(*.has-name) }) -> @_ { .take for @_ } + .grep({ $_.grep(*.has-fd) || $_.grep(*.has-name) || $_.grep(*.has-path) }) -> @_ { .take for @_ } @formats .= sort(*.id); |
