summaryrefslogtreecommitdiff
path: root/internal/c
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-03-06 11:40:52 +0200
committerPaul Buetow <paul@buetow.org>2024-03-06 11:40:52 +0200
commitb215bafceeecbe97de19fb3111dc080196224ab9 (patch)
tree0fb2a826776557e6e2511bb073b06978cbf8997c /internal/c
parentdbc5a6a2f3554f98579b742fec012dde9a9417e2 (diff)
Addresses https://codeberg.org/snonux/ioriotng/issues/23 - fix parameter
positions
Diffstat (limited to 'internal/c')
-rw-r--r--internal/c/generated/tracepoints.c146
-rw-r--r--internal/c/generated/tracepoints.raku50
2 files changed, 109 insertions, 87 deletions
diff --git a/internal/c/generated/tracepoints.c b/internal/c/generated/tracepoints.c
index 21b38d7..89c473a 100644
--- a/internal/c/generated/tracepoints.c
+++ b/internal/c/generated/tracepoints.c
@@ -1,71 +1,71 @@
// Code generated - don't change manually!
-#define SYS_EXIT_CACHESTAT 520
-#define SYS_ENTER_CACHESTAT 521
-#define SYS_EXIT_CLOSE_RANGE 692
-#define SYS_ENTER_CLOSE_RANGE 693
-#define SYS_EXIT_CLOSE 694
-#define SYS_ENTER_CLOSE 695
-#define SYS_EXIT_FCHOWN 704
-#define SYS_ENTER_FCHOWN 705
-#define SYS_EXIT_FCHMOD 718
-#define SYS_ENTER_FCHMOD 719
-#define SYS_EXIT_FCHDIR 722
-#define SYS_ENTER_FCHDIR 723
-#define SYS_EXIT_FTRUNCATE 734
-#define SYS_ENTER_FTRUNCATE 735
-#define SYS_EXIT_COPY_FILE_RANGE 738
-#define SYS_ENTER_COPY_FILE_RANGE 739
-#define SYS_EXIT_PWRITE64 754
-#define SYS_ENTER_PWRITE64 755
-#define SYS_EXIT_PREAD64 756
-#define SYS_ENTER_PREAD64 757
-#define SYS_EXIT_WRITE 758
-#define SYS_ENTER_WRITE 759
-#define SYS_EXIT_READ 760
-#define SYS_ENTER_READ 761
-#define SYS_EXIT_LSEEK 762
-#define SYS_ENTER_LSEEK 763
-#define SYS_EXIT_NEWFSTAT 770
-#define SYS_ENTER_NEWFSTAT 771
-#define SYS_EXIT_RENAME 786
-#define SYS_ENTER_RENAME 787
-#define SYS_EXIT_RENAMEAT 788
-#define SYS_ENTER_RENAMEAT 789
-#define SYS_EXIT_RENAMEAT2 790
-#define SYS_ENTER_RENAMEAT2 791
-#define SYS_EXIT_LINK 792
-#define SYS_ENTER_LINK 793
-#define SYS_EXIT_LINKAT 794
-#define SYS_ENTER_LINKAT 795
-#define SYS_EXIT_SYMLINK 796
-#define SYS_ENTER_SYMLINK 797
-#define SYS_EXIT_SYMLINKAT 798
-#define SYS_ENTER_SYMLINKAT 799
-#define SYS_EXIT_FCNTL 814
-#define SYS_ENTER_FCNTL 815
-#define SYS_EXIT_IOCTL 816
-#define SYS_ENTER_IOCTL 817
-#define SYS_EXIT_GETDENTS64 818
-#define SYS_ENTER_GETDENTS64 819
-#define SYS_EXIT_GETDENTS 820
-#define SYS_ENTER_GETDENTS 821
-#define SYS_EXIT_SYNC_FILE_RANGE 914
-#define SYS_ENTER_SYNC_FILE_RANGE 915
-#define SYS_EXIT_FDATASYNC 916
-#define SYS_ENTER_FDATASYNC 917
-#define SYS_EXIT_FSYNC 918
-#define SYS_ENTER_FSYNC 919
-#define SYS_EXIT_FSTATFS 936
-#define SYS_ENTER_FSTATFS 937
-#define SYS_EXIT_FLOCK 1012
-#define SYS_ENTER_FLOCK 1013
-#define SYS_EXIT_QUOTACTL_FD 1043
-#define SYS_ENTER_QUOTACTL_FD 1044
-#define SYS_EXIT_IO_URING_REGISTER 1366
-#define SYS_ENTER_IO_URING_REGISTER 1367
-#define SYS_EXIT_IO_URING_ENTER 1370
-#define SYS_ENTER_IO_URING_ENTER 1371
+#define SYS_EXIT_CACHESTAT 527
+#define SYS_ENTER_CACHESTAT 528
+#define SYS_EXIT_CLOSE_RANGE 700
+#define SYS_ENTER_CLOSE_RANGE 701
+#define SYS_EXIT_CLOSE 702
+#define SYS_ENTER_CLOSE 703
+#define SYS_EXIT_FCHOWN 712
+#define SYS_ENTER_FCHOWN 713
+#define SYS_EXIT_FCHMOD 726
+#define SYS_ENTER_FCHMOD 727
+#define SYS_EXIT_FCHDIR 730
+#define SYS_ENTER_FCHDIR 731
+#define SYS_EXIT_FTRUNCATE 742
+#define SYS_ENTER_FTRUNCATE 743
+#define SYS_EXIT_COPY_FILE_RANGE 746
+#define SYS_ENTER_COPY_FILE_RANGE 747
+#define SYS_EXIT_PWRITE64 762
+#define SYS_ENTER_PWRITE64 763
+#define SYS_EXIT_PREAD64 764
+#define SYS_ENTER_PREAD64 765
+#define SYS_EXIT_WRITE 766
+#define SYS_ENTER_WRITE 767
+#define SYS_EXIT_READ 768
+#define SYS_ENTER_READ 769
+#define SYS_EXIT_LSEEK 770
+#define SYS_ENTER_LSEEK 771
+#define SYS_EXIT_NEWFSTAT 778
+#define SYS_ENTER_NEWFSTAT 779
+#define SYS_EXIT_RENAME 794
+#define SYS_ENTER_RENAME 795
+#define SYS_EXIT_RENAMEAT 796
+#define SYS_ENTER_RENAMEAT 797
+#define SYS_EXIT_RENAMEAT2 798
+#define SYS_ENTER_RENAMEAT2 799
+#define SYS_EXIT_LINK 800
+#define SYS_ENTER_LINK 801
+#define SYS_EXIT_LINKAT 802
+#define SYS_ENTER_LINKAT 803
+#define SYS_EXIT_SYMLINK 804
+#define SYS_ENTER_SYMLINK 805
+#define SYS_EXIT_SYMLINKAT 806
+#define SYS_ENTER_SYMLINKAT 807
+#define SYS_EXIT_FCNTL 822
+#define SYS_ENTER_FCNTL 823
+#define SYS_EXIT_IOCTL 824
+#define SYS_ENTER_IOCTL 825
+#define SYS_EXIT_GETDENTS64 826
+#define SYS_ENTER_GETDENTS64 827
+#define SYS_EXIT_GETDENTS 828
+#define SYS_ENTER_GETDENTS 829
+#define SYS_EXIT_SYNC_FILE_RANGE 922
+#define SYS_ENTER_SYNC_FILE_RANGE 923
+#define SYS_EXIT_FDATASYNC 924
+#define SYS_ENTER_FDATASYNC 925
+#define SYS_EXIT_FSYNC 926
+#define SYS_ENTER_FSYNC 927
+#define SYS_EXIT_FSTATFS 944
+#define SYS_ENTER_FSTATFS 945
+#define SYS_EXIT_FLOCK 1020
+#define SYS_ENTER_FLOCK 1021
+#define SYS_EXIT_QUOTACTL_FD 1051
+#define SYS_ENTER_QUOTACTL_FD 1052
+#define SYS_EXIT_IO_URING_REGISTER 1377
+#define SYS_ENTER_IO_URING_REGISTER 1378
+#define SYS_EXIT_IO_URING_ENTER 1381
+#define SYS_ENTER_IO_URING_ENTER 1382
SEC("tracepoint/syscalls/sys_exit_cachestat")
int handle_sys_exit_cachestat(struct trace_event_raw_sys_exit *ctx) {
@@ -736,8 +736,8 @@ int handle_sys_enter_renameat(struct trace_event_raw_sys_enter *ctx) {
ev->tid = tid;
ev->time = bpf_ktime_get_ns() / 1000;
__builtin_memset(&(ev->oldname), 0, sizeof(ev->oldname) + sizeof(ev->newname));
- bpf_probe_read_user_str(ev->oldname, sizeof(ev->oldname), (void*)ctx->args[0]);
- bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[1]);
+ bpf_probe_read_user_str(ev->oldname, sizeof(ev->oldname), (void*)ctx->args[1]);
+ bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[3]);
bpf_ringbuf_submit(ev, 0);
return 0;
@@ -780,8 +780,8 @@ int handle_sys_enter_renameat2(struct trace_event_raw_sys_enter *ctx) {
ev->tid = tid;
ev->time = bpf_ktime_get_ns() / 1000;
__builtin_memset(&(ev->oldname), 0, sizeof(ev->oldname) + sizeof(ev->newname));
- bpf_probe_read_user_str(ev->oldname, sizeof(ev->oldname), (void*)ctx->args[0]);
- bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[1]);
+ bpf_probe_read_user_str(ev->oldname, sizeof(ev->oldname), (void*)ctx->args[1]);
+ bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[3]);
bpf_ringbuf_submit(ev, 0);
return 0;
@@ -868,8 +868,8 @@ int handle_sys_enter_linkat(struct trace_event_raw_sys_enter *ctx) {
ev->tid = tid;
ev->time = bpf_ktime_get_ns() / 1000;
__builtin_memset(&(ev->oldname), 0, sizeof(ev->oldname) + sizeof(ev->newname));
- bpf_probe_read_user_str(ev->oldname, sizeof(ev->oldname), (void*)ctx->args[0]);
- bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[1]);
+ bpf_probe_read_user_str(ev->oldname, sizeof(ev->oldname), (void*)ctx->args[1]);
+ bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[3]);
bpf_ringbuf_submit(ev, 0);
return 0;
@@ -957,7 +957,7 @@ int handle_sys_enter_symlinkat(struct trace_event_raw_sys_enter *ctx) {
ev->time = bpf_ktime_get_ns() / 1000;
__builtin_memset(&(ev->oldname), 0, sizeof(ev->oldname) + sizeof(ev->newname));
bpf_probe_read_user_str(ev->oldname, sizeof(ev->oldname), (void*)ctx->args[0]);
- bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[1]);
+ bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[2]);
bpf_ringbuf_submit(ev, 0);
return 0;
diff --git a/internal/c/generated/tracepoints.raku b/internal/c/generated/tracepoints.raku
index cc78fbb..ad95559 100644
--- a/internal/c/generated/tracepoints.raku
+++ b/internal/c/generated/tracepoints.raku
@@ -4,8 +4,8 @@ use v6.d;
#use Grammar::Debugger;
grammar SysTraceFormat {
- rule TOP { <wholeformatsection>* }
- rule wholeformatsection { <name> <id> <format> <print-fmt> }
+ rule TOP { <whole-format-section>* }
+ rule whole-format-section { <name> <id> <format> <print-fmt> }
rule name { 'name:' <identifier> }
rule id { 'ID:' <number> }
rule format { 'format:' <field>* }
@@ -33,9 +33,16 @@ class Field {
}
class Format {
+ # Fields not accessible from raw tracepoints.
+ has Field @!internal-fields;
+ # Fields accessible from raw tracepoints.
+ has Field @!external-fields;
+ # Track internal/external field sections.
+ has Bool $!is-external = False;
+
has Str $.name is rw;
has Int $.id is rw;
- has Field @.fields is rw;
+
# file descriptor passed to syscalls.
has Bool $.has-fd is rw = False;
# Has tracepoint has got oldname and name
@@ -43,19 +50,32 @@ class Format {
# Syscall returns with a long value (e.g. bytes read/written)
has Bool $.has-long-ret is rw = False;
- method push(Field $field) {
- push @!fields: $field;
- if ($field.name eq 'fd' && $field.type eq 'unsigned int') {
+ method push(Field \field) {
+ # External fields start from this field name.
+ $!is-external = True if field.name eq '__syscall_nr';
+
+ if $!is-external {
+ push @!external-fields: field;
+ } else {
+ push @!internal-fields: field;
+ return;
+ }
+
+ if (field.name eq 'fd' && field.type eq 'unsigned int') {
$!has-fd = True;
- } elsif ($field.name eq 'newname' && $field.type eq 'const char *') {
+ } elsif (field.name eq 'newname' && field.type eq 'const char *') {
$!has-name = True;
- } elsif ($field.name eq 'ret' && $field.type eq 'long') {
+ } elsif (field.name eq 'ret' && field.type eq 'long') {
$.has-long-ret = True;
}
}
+ method !field-number(Str \field-name) {
+ @!external-fields.first(*.name eq field-name, :k) - 1;
+ }
+
method generate-constant returns Str {
- "#define {$!name.uc} {$!id}"
+ "#define {$!name.uc} {$!id}";
}
method generate-probe returns Str {
@@ -69,10 +89,12 @@ class Format {
my \extra-data = do if $!has-fd { 'ev->fd = (__s32)ctx->args[0];' }
elsif $!has-long-ret { 'ev->ret = ctx->ret;' }
elsif $!has-name {
- q:to/END/.trim-trailing;
- __builtin_memset(&(ev->oldname), 0, sizeof(ev->oldname) + sizeof(ev->newname));
- bpf_probe_read_user_str(ev->oldname, sizeof(ev->oldname), (void*)ctx->args[0]);
- bpf_probe_read_user_str(ev->newname, sizeof(ev->newname), (void*)ctx->args[1]);
+ my Int \oldname-index = self!field-number('oldname');
+ my Int \newname-index = self!field-number('newname');
+ qq:to/END/.trim-trailing;
+ __builtin_memset(\&(ev->oldname), 0, sizeof(ev->oldname) + sizeof(ev->newname));
+ 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
}
else { '' };
@@ -108,7 +130,7 @@ class SysTraceFormatActions {
method TOP($/) { make @!formats }
- method wholeformatsection($/) {
+ method whole-format-section($/) {
push @!formats: $!current-format;
$!current-format = Format.new;
}