From 93adcc21339b0f90892ae56a2cb310720d9fc17c Mon Sep 17 00:00:00 2001 From: David Smith Date: Wed, 23 Apr 2014 14:37:51 -0500 Subject: [PATCH] PR16716 partial fix: Better types passed to _dfd_str() from syscall probes. * tapset/linux/syscalls.stp: Fixed calls to _dfd_str() in facessat, fchownat, futimesat, compat_futimesat, and linkat syscall probes. (syscall.futimesat): Added 'dirfd_str' variable. Fixed nesting. (syscall.compat_futimesat): Ditto. * tapset/linux/nd_syscalls.stp (nd_syscall.futimesat): Added 'dirfd_str' variable. Fixed nesting. (nd_syscall.compat_futimesat): Ditto. * tapset/linux/syscalls2.stp: Fixed calls to _dfd_str() in openat, readlinkat, renameat, symlinkat, unlinkat, and utimensat syscall probes. (syscall.openat): Added 'dfd' and 'dfd_str' variables. (syscall.readlinkat): Added 'dfd_str' variable. (syscall.utimensat): Added 'dfd', 'dfd_str', 'filename_uaddr', 'filename', 'tsp_uaddr', 'flags', and 'flags_str' variables. (syscall.compat_utimensat): Ditto. * tapset/linux/nd_syscalls2.stp (nd_syscall.openat): Added 'dfd' and 'dfd_str' variables. (nd_syscall.readlinkat): Added 'dfd_str' variable. (nd_syscall.utimensat): Added 'dfd', 'dfd_str', 'filename_uaddr', 'filename', 'tsp_uaddr', 'flags', and 'flags_str' variables. (nd_syscall.compat_utimensat): Ditto. * tapset/linux/aux_syscalls.stp (_dfd_str): Improve to not ignore compatibility mode wrong value (instead, values passed in were fixed). * runtime/linux/compat_unistd.h: Add '__NR_compat_futimesat' define. * testsuite/systemtap.syscall/alarm.c: Add more tests. * testsuite/systemtap.syscall/futimes.c: Ditto. * testsuite/buildok/syscalls-detailed.stp: Added basic test for new variables. * testsuite/buildok/syscalls2-detailed.stp: Ditto. * testsuite/buildok/nd_syscalls-detailed.stp: Ditto. * testsuite/buildok/nd_syscalls2-detailed.stp: Ditto. --- runtime/linux/compat_unistd.h | 5 ++ tapset/linux/aux_syscalls.stp | 6 +- tapset/linux/nd_syscalls.stp | 22 ++++--- tapset/linux/nd_syscalls2.stp | 45 +++++++++---- tapset/linux/syscalls.stp | 49 +++++++++------ tapset/linux/syscalls2.stp | 70 ++++++++++++++------- testsuite/buildok/nd_syscalls-detailed.stp | 4 +- testsuite/buildok/nd_syscalls2-detailed.stp | 18 +++++- testsuite/buildok/syscalls-detailed.stp | 4 +- testsuite/buildok/syscalls2-detailed.stp | 18 +++++- testsuite/systemtap.syscall/alarm.c | 3 + testsuite/systemtap.syscall/futimes.c | 50 ++++++++++++++- 12 files changed, 217 insertions(+), 77 deletions(-) diff --git a/runtime/linux/compat_unistd.h b/runtime/linux/compat_unistd.h index ddfdb57a8..b04bb9cce 100644 --- a/runtime/linux/compat_unistd.h +++ b/runtime/linux/compat_unistd.h @@ -33,6 +33,9 @@ #ifndef __NR_ia32_fchownat #define __NR_ia32_fchownat 298 #endif +#ifndef __NR_ia32_futimesat +#define __NR_ia32_futimesat 299 +#endif #ifndef __NR_ia32_getpgid #define __NR_ia32_getpgid 132 #endif @@ -79,6 +82,7 @@ #define __NR_compat_faccessat __NR_ia32_faccessat #define __NR_compat_fchmodat __NR_ia32_fchmodat #define __NR_compat_fchownat __NR_ia32_fchownat +#define __NR_compat_futimesat __NR_ia32_futimesat #define __NR_compat_getpgid __NR_ia32_getpgid #define __NR_compat_inotify_init1 __NR_ia32_inotify_init1 #define __NR_compat_linkat __NR_ia32_linkat @@ -105,6 +109,7 @@ #define __NR_compat_faccessat __NR_faccessat #define __NR_compat_fchmodat __NR_fchmodat #define __NR_compat_fchownat __NR_fchownat +#define __NR_compat_futimesat __NR_futimesat #define __NR_compat_getpgid __NR_getpgid #define __NR_compat_inotify_init1 __NR_inotify_init1 #define __NR_compat_linkat __NR_linkat diff --git a/tapset/linux/aux_syscalls.stp b/tapset/linux/aux_syscalls.stp index a563da832..aa6ddeb2e 100644 --- a/tapset/linux/aux_syscalls.stp +++ b/tapset/linux/aux_syscalls.stp @@ -2121,9 +2121,9 @@ function __ulong:long(val:long) %{ /* pure */ %} # For utimensat and futimesat, the directory fd can have a special value -function _dfd_str(d) { - # 0xffffff9c is a 32-bit -100, for compatability mode. - if((d == -100) || (d == 0xffffff9c)) return "AT_FDCWD" +function _dfd_str:string(d:long) +{ + if (d == %{ AT_FDCWD %}) return "AT_FDCWD" return sprint(d) } diff --git a/tapset/linux/nd_syscalls.stp b/tapset/linux/nd_syscalls.stp index 0a3c67f4c..13bd8db16 100644 --- a/tapset/linux/nd_syscalls.stp +++ b/tapset/linux/nd_syscalls.stp @@ -1688,33 +1688,41 @@ probe nd_syscall.compat_futex.return = kprobe.function("compat_sys_futex").retur probe nd_syscall.futimesat = kprobe.function("sys_futimesat") ? { - name = "futimesat" asmlinkage() + @__syscall_gate(%{ __NR_futimesat %}) + name = "futimesat" dirfd = int_arg(1) + dirfd_str = _dfd_str(dirfd) filename_uaddr = pointer_arg(2) filename = user_string_quoted(filename_uaddr) tvp_uaddr = pointer_arg(3) - argstr = sprintf("%s, %s, %s", _dfd_str(dirfd), user_string_quoted(filename_uaddr), - _struct_timeval_u(tvp_uaddr, 2)) + argstr = sprintf("%s, %s, %s", _dfd_str(dirfd), + user_string_quoted(filename_uaddr), + _struct_timeval_u(tvp_uaddr, 2)) } probe nd_syscall.compat_futimesat = kprobe.function("compat_sys_futimesat") ? { - name = "futimesat" asmlinkage() - dirfd = uint_arg(1) + @__compat_syscall_gate(%{ __NR_compat_futimesat %}) + name = "futimesat" + dirfd = int_arg(1) + dirfd_str = _dfd_str(dirfd) filename_uaddr = pointer_arg(2) filename = user_string_quoted(pointer_arg(2)) tvp_uaddr = pointer_arg(3) - argstr = sprintf("%s, %s, %s", _dfd_str(uint_arg(1)), user_string_quoted(pointer_arg(2)), - _struct_compat_timeval_u(pointer_arg(3), 2)) + argstr = sprintf("%s, %s, %s", _dfd_str(int_arg(1)), + user_string_quoted(pointer_arg(2)), + _struct_compat_timeval_u(pointer_arg(3), 2)) } probe nd_syscall.futimesat.return = kprobe.function("sys_futimesat").return ? { + @__syscall_gate(%{ __NR_futimesat %}) name = "futimesat" retstr = returnstr(1) } probe nd_syscall.compat_futimesat.return = kprobe.function("compat_sys_futimesat").return ? { + @__compat_syscall_gate(%{ __NR_compat_futimesat %}) name = "futimesat" retstr = returnstr(1) } diff --git a/tapset/linux/nd_syscalls2.stp b/tapset/linux/nd_syscalls2.stp index e70fb1c5d..ad598fd86 100644 --- a/tapset/linux/nd_syscalls2.stp +++ b/tapset/linux/nd_syscalls2.stp @@ -151,17 +151,19 @@ probe nd_syscall.openat = kprobe.function("compat_sys_openat") ?, { name = "openat" asmlinkage() + dfd = int_arg(1) + dfd_str = _dfd_str(dfd) filename = user_string_quoted(pointer_arg(2)) flags = int_arg(3) mode = int_arg(4) if (flags & 64) - argstr = sprintf("%s, %s, %s, %#o", _dfd_str(int_arg(1)), - user_string_quoted(pointer_arg(2)), - _sys_open_flag_str(flags), mode) + argstr = sprintf("%s, %s, %s, %#o", _dfd_str(dfd), + user_string_quoted(pointer_arg(2)), + _sys_open_flag_str(flags), mode) else - argstr = sprintf("%s, %s, %s", _dfd_str(int_arg(1)), - user_string_quoted(pointer_arg(2)), - _sys_open_flag_str(flags)) + argstr = sprintf("%s, %s, %s", _dfd_str(dfd), + user_string_quoted(pointer_arg(2)), + _sys_open_flag_str(flags)) } probe nd_syscall.openat.return = kprobe.function("compat_sys_openat").return ?, kprobe.function("sys_openat").return ? @@ -835,11 +837,12 @@ probe nd_syscall.readlinkat = kprobe.function("sys_readlinkat") ? name = "readlinkat" asmlinkage() dfd = int_arg(1) + dfd_str = _dfd_str(dfd) path = user_string_quoted(pointer_arg(2)) buf_uaddr = pointer_arg(3) bufsiz = int_arg(4) - argstr = sprintf("%s, %s, %p, %d", _dfd_str(dfd), user_string_quoted(pointer_arg(2)), - buf_uaddr, bufsiz) + argstr = sprintf("%s, %s, %p, %d", _dfd_str(dfd), + user_string_quoted(pointer_arg(2)), buf_uaddr, bufsiz) } probe nd_syscall.readlinkat.return = kprobe.function("sys_readlinkat").return ? { @@ -4194,15 +4197,33 @@ probe nd_syscall.utimensat = kprobe.function("sys_utimensat") ? { name = "utimensat" asmlinkage() - argstr = sprintf("%s, %s, %s, %s", _dfd_str(int_arg(1)), user_string_quoted(pointer_arg(2)), - _struct_timespec_u(pointer_arg(3), 2), _at_flag_str(int_arg(4))) + dfd = int_arg(1) + dfd_str = _dfd_str(dfd) + filename_uaddr = pointer_arg(2) + filename = user_string_quoted(filename_uaddr) + tsp_uaddr = pointer_arg(3) + flags = int_arg(4) + flags_str = _at_flag_str(flags) + argstr = sprintf("%s, %s, %s, %s", _dfd_str(dfd), + user_string_quoted(filename_uaddr), + _struct_timespec_u(tsp_uaddr, 2), + _at_flag_str(flags)) } probe nd_syscall.compat_utimensat = kprobe.function("compat_sys_utimensat") ? { name = "utimensat" asmlinkage() - argstr = sprintf("%s, %s, %s, %s", _dfd_str(uint_arg(1)), user_string_quoted(pointer_arg(2)), - _struct_compat_timespec_u(pointer_arg(3), 2), _at_flag_str(int_arg(4))) + dfd = int_arg(1) + dfd_str = _dfd_str(dfd) + filename_uaddr = pointer_arg(2) + filename = user_string_quoted(filename_uaddr) + tsp_uaddr = pointer_arg(3) + flags = int_arg(4) + flags_str = _at_flag_str(flags) + argstr = sprintf("%s, %s, %s, %s", _dfd_str(dfd), + user_string_quoted(filename_uaddr), + _struct_compat_timespec_u(tsp_uaddr, 2), + _at_flag_str(flags)) } probe nd_syscall.utimensat.return = kprobe.function("sys_utimensat").return ? { diff --git a/tapset/linux/syscalls.stp b/tapset/linux/syscalls.stp index 7b534d1ac..b12fb247e 100644 --- a/tapset/linux/syscalls.stp +++ b/tapset/linux/syscalls.stp @@ -996,8 +996,8 @@ probe syscall.faccessat = kernel.function("sys_faccessat").call ? @__syscall_compat_gate(%{ __NR_faccessat %}, %{ __NR_compat_faccessat %}) name = "faccessat" - dirfd = $dfd - dirfd_str = _dfd_str($dfd) + dirfd = __int32($dfd) + dirfd_str = _dfd_str(__int32($dfd)) pathname = user_string_quoted($filename) mode = __int32($mode) mode_str = _access_mode_str(__int32($mode)) @@ -1086,8 +1086,8 @@ probe syscall.fchmodat = kernel.function("sys_fchmodat").call ? @__syscall_compat_gate(%{ __NR_fchmodat %}, %{ __NR_compat_fchmodat %}) name = "fchmodat" - dirfd = $dfd - dirfd_str = _dfd_str($dfd) + dirfd = __int32($dfd) + dirfd_str = _dfd_str(__int32($dfd)) pathname = user_string_quoted($filename) mode = $mode argstr = sprintf("%s, %s, %#o", dirfd_str, user_string_quoted($filename), $mode) @@ -1141,8 +1141,8 @@ probe syscall.fchownat = kernel.function("sys_fchownat").call ? @__syscall_compat_gate(%{ __NR_fchownat %}, %{ __NR_compat_fchownat %}) name = "fchownat" - dirfd = $dfd - dirfd_str = _dfd_str($dfd) + dirfd = __int32($dfd) + dirfd_str = _dfd_str(__int32($dfd)) pathname = user_string_quoted($filename) owner = __int32($user) group = __int32($group) @@ -1529,31 +1529,40 @@ probe syscall.compat_futex.return = kernel.function("compat_sys_futex").return ? probe syscall.futimesat = kernel.function("sys_futimesat").call ? { + @__syscall_gate(%{ __NR_futimesat %}) name = "futimesat" - dirfd = $dfd + dirfd = __int32($dfd) + dirfd_str = _dfd_str(__int32($dfd)) filename_uaddr = $filename filename = user_string_quoted($filename) tvp_uaddr = $utimes - argstr = sprintf("%s, %s, %s", _dfd_str($dfd), user_string_quoted($filename), - _struct_timeval_u($utimes, 2)) + argstr = sprintf("%s, %s, %s", _dfd_str(__int32($dfd)), + user_string_quoted($filename), + _struct_timeval_u($utimes, 2)) } probe syscall.compat_futimesat = kernel.function("compat_sys_futimesat").call ? { + @__compat_syscall_gate(%{ __NR_compat_futimesat %}) name = "futimesat" - dirfd = $dfd + dirfd = __int32($dfd) + dirfd_str = _dfd_str(__int32($dfd)) filename_uaddr = $filename filename = user_string_quoted($filename) tvp_uaddr = $t - argstr = sprintf("%s, %s, %s", _dfd_str($dfd), user_string_quoted($filename), - _struct_compat_timeval_u($t, 2)) + argstr = sprintf("%s, %s, %s", _dfd_str(__int32($dfd)), + user_string_quoted($filename), + _struct_compat_timeval_u($t, 2)) } probe syscall.futimesat.return = kernel.function("sys_futimesat").return ? { + @__syscall_gate(%{ __NR_futimesat %}) name = "futimesat" retstr = return_str(1, $return) } -probe syscall.compat_futimesat.return = kernel.function("compat_sys_futimesat").return ? +probe syscall.compat_futimesat.return = + kernel.function("compat_sys_futimesat").return ? { + @__compat_syscall_gate(%{ __NR_compat_futimesat %}) name = "futimesat" retstr = return_str(1, $return) } @@ -2552,18 +2561,18 @@ probe syscall.linkat = kernel.function("sys_linkat").call ? { @__syscall_compat_gate(%{ __NR_linkat %}, %{ __NR_compat_linkat %}) name = "linkat" - olddirfd = $olddfd - olddirfd_str = _dfd_str($olddfd) + olddirfd = __int32($olddfd) + olddirfd_str = _dfd_str(__int32($olddfd)) oldpath = user_string_quoted($oldname) - newdirfd = $newdfd - newdirfd_str = _dfd_str($newdfd) + newdirfd = __int32($newdfd) + newdirfd_str = _dfd_str(__int32($newdfd)) newpath = user_string_quoted($newname) flags = $flags flags_str = _at_flag_str($flags) argstr = sprintf("%s, %s, %s, %s, %s", - olddirfd_str, user_string_quoted($oldname), - newdirfd_str, user_string_quoted($newname), - flags_str) + olddirfd_str, user_string_quoted($oldname), + newdirfd_str, user_string_quoted($newname), + flags_str) } probe syscall.linkat.return = kernel.function("sys_linkat").return ? { diff --git a/tapset/linux/syscalls2.stp b/tapset/linux/syscalls2.stp index e61032244..6e526ca4c 100644 --- a/tapset/linux/syscalls2.stp +++ b/tapset/linux/syscalls2.stp @@ -162,17 +162,19 @@ probe syscall.openat = kernel.function("compat_sys_openat").call ?, kernel.function("sys_openat").call ? { name = "openat" + dfd = __int32($dfd) + dfd_str = _dfd_str(__int32($dfd)) filename = user_string_quoted($filename) flags = $flags mode = __int32($mode) if ($flags & 64) - argstr = sprintf("%s, %s, %s, %#o", _dfd_str($dfd), - user_string_quoted($filename), - _sys_open_flag_str($flags), __int32($mode)) + argstr = sprintf("%s, %s, %s, %#o", _dfd_str(__int32($dfd)), + user_string_quoted($filename), + _sys_open_flag_str($flags), __int32($mode)) else - argstr = sprintf("%s, %s, %s", _dfd_str($dfd), - user_string_quoted($filename), - _sys_open_flag_str($flags)) + argstr = sprintf("%s, %s, %s", _dfd_str(__int32($dfd)), + user_string_quoted($filename), + _sys_open_flag_str(__int32($flags))) } probe syscall.openat.return = kernel.function("compat_sys_openat").return ?, kernel.function("sys_openat").return ? @@ -883,11 +885,12 @@ probe syscall.readlinkat = kernel.function("sys_readlinkat").call ? @__syscall_compat_gate(%{ __NR_readlinkat %}, %{ __NR_compat_readlinkat %}) name = "readlinkat" - dfd = $dfd + dfd = __int32($dfd) + dfd_str = _dfd_str(__int32($dfd)) buf_uaddr = $buf bufsiz = $bufsiz path = user_string_quoted(@choose_defined($pathname, $path)) - argstr = sprintf("%s, %s, %p, %d", _dfd_str($dfd), + argstr = sprintf("%s, %s, %p, %d", _dfd_str(__int32($dfd)), user_string_quoted(@choose_defined($pathname, $path)), $buf, $bufsiz) } @@ -1270,17 +1273,17 @@ probe syscall.renameat = kernel.function("sys_renameat").call ? { @__syscall_compat_gate(%{ __NR_renameat %}, %{ __NR_compat_renameat %}) name = "renameat" - olddfd = $olddfd - olddfd_str = _dfd_str($olddfd) + olddfd = __int32($olddfd) + olddfd_str = _dfd_str(__int32($olddfd)) oldname = $oldname oldname_str = user_string_quoted($oldname) - newdfd = $newdfd - newdfd_str = _dfd_str($newdfd) + newdfd = __int32($newdfd) + newdfd_str = _dfd_str(__int32($newdfd)) newname = $newname newname_str = user_string_quoted($newname) - argstr = sprintf("%s, %s, %s, %s", - olddfd_str, user_string_quoted($oldname), - newdfd_str, user_string_quoted($newname)) + argstr = sprintf("%s, %s, %s, %s", olddfd_str, + user_string_quoted($oldname), + newdfd_str, user_string_quoted($newname)) } probe syscall.renameat.return = kernel.function("sys_renameat").return ? { @@ -3375,8 +3378,8 @@ probe syscall.symlinkat = kernel.function("sys_symlinkat").call ? name = "symlinkat" oldname = $oldname oldname_str = user_string_quoted($oldname) - newdfd = $newdfd - newdfd_str = _dfd_str($newdfd) + newdfd = __int32($newdfd) + newdfd_str = _dfd_str(__int32($newdfd)) newname = $newname newname_str = user_string_quoted($newname) argstr = sprintf("%s, %s, %s", user_string_quoted($oldname), @@ -3861,13 +3864,14 @@ probe syscall.unlink.return = kernel.function("sys_unlink").return probe syscall.unlinkat = kernel.function("sys_unlinkat").call ? { name = "unlinkat" - dfd = $dfd - dfd_str = _dfd_str($dfd) + dfd = __int32($dfd) + dfd_str = _dfd_str(__int32($dfd)) pathname = $pathname pathname_str = user_string_quoted($pathname) flag = $flag flag_str = _at_flag_str($flag) - argstr = sprintf("%s, %s, %s", dfd_str, user_string_quoted($pathname), flag_str) + argstr = sprintf("%s, %s, %s", dfd_str, user_string_quoted($pathname), + flag_str) } probe syscall.unlinkat.return = kernel.function("sys_unlinkat").return ? { @@ -4023,14 +4027,32 @@ probe syscall.compat_sys_utimes.return = kernel.function("compat_sys_utimes").re probe syscall.utimensat = kernel.function("sys_utimensat").call ? { name = "utimensat" - argstr = sprintf("%s, %s, %s, %s", _dfd_str($dfd), user_string_quoted($filename), _struct_timespec_u($utimes, 2), - _at_flag_str($flags)) + dfd = __int32($dfd) + dfd_str = _dfd_str(__int32($dfd)) + filename_uaddr = $filename + filename = user_string_quoted($filename) + tsp_uaddr = $utimes + flags = __int32($flags) + flags_str = _at_flag_str(__int32($flags)) + argstr = sprintf("%s, %s, %s, %s", _dfd_str(__int32($dfd)), + user_string_quoted($filename), + _struct_timespec_u($utimes, 2), + _at_flag_str(__int32($flags))) } probe syscall.compat_utimensat = kernel.function("compat_sys_utimensat").call ? { name = "utimensat" - argstr = sprintf("%s, %s, %s, %s", _dfd_str($dfd), user_string_quoted($filename), _struct_compat_timespec_u($t, 2), - _at_flag_str($flags)) + dfd = __int32($dfd) + dfd_str = _dfd_str(__int32($dfd)) + filename_uaddr = $filename + filename = user_string_quoted($filename) + tsp_uaddr = $t + flags = __int32($flags) + flags_str = _at_flag_str(__int32($flags)) + argstr = sprintf("%s, %s, %s, %s", _dfd_str(__int32($dfd)), + user_string_quoted($filename), + _struct_compat_timespec_u($t, 2), + _at_flag_str(__int32($flags))) } probe syscall.utimensat.return = kernel.function("sys_utimensat").return ? { diff --git a/testsuite/buildok/nd_syscalls-detailed.stp b/testsuite/buildok/nd_syscalls-detailed.stp index 55b20fc2c..8afef9cfc 100755 --- a/testsuite/buildok/nd_syscalls-detailed.stp +++ b/testsuite/buildok/nd_syscalls-detailed.stp @@ -583,8 +583,8 @@ probe nd_syscall.futex.return, nd_syscall.compat_futex.return ? probe nd_syscall.futimesat ?, nd_syscall.compat_futimesat ? { printf("%s, %s\n", name, argstr) - printf("%d, %p(%s), %p\n", dirfd, filename_uaddr, filename, - tvp_uaddr) + printf("%d(%s), %p(%s), %p\n", dirfd, dirfd_str, filename_uaddr, + filename, tvp_uaddr) } probe nd_syscall.futimesat.return ?, nd_syscall.compat_futimesat.return ? { diff --git a/testsuite/buildok/nd_syscalls2-detailed.stp b/testsuite/buildok/nd_syscalls2-detailed.stp index 6693ef289..d13e17514 100755 --- a/testsuite/buildok/nd_syscalls2-detailed.stp +++ b/testsuite/buildok/nd_syscalls2-detailed.stp @@ -42,12 +42,22 @@ probe nd_syscall.ni_syscall.return printf("%s %s\n", name, retstr) } -probe nd_syscall.open, nd_syscall.openat ? +probe nd_syscall.open { printf("%s(%s)\n", name, argstr) printf("%s %d %d\n", filename, flags, mode) } -probe nd_syscall.open.return, nd_syscall.openat.return ? +probe nd_syscall.open.return +{ + printf("%s %s\n", name, retstr) +} + +probe nd_syscall.openat ? +{ + printf("%s(%s)\n", name, argstr) + printf("%d(%s) %s %d %d\n", dfd, dfd_str, filename, flags, mode) +} +probe nd_syscall.openat.return ? { printf("%s %s\n", name, retstr) } @@ -245,7 +255,7 @@ probe nd_syscall.readlink.return probe nd_syscall.readlinkat ? { printf("%s(%s)\n", name, argstr) - printf("%d %s %p %d\n", dfd, path, buf_uaddr, bufsiz) + printf("%d(%s) %s %p %d\n", dfd, dfd_str, path, buf_uaddr, bufsiz) } probe nd_syscall.readlinkat.return ? { @@ -1391,6 +1401,8 @@ probe nd_syscall.utime.return ?, nd_syscall.compat_utime.return ? probe nd_syscall.utimensat ?, nd_syscall.compat_utimensat ? { printf("%s, %s\n", name, argstr) + printf("%d(%s), %p(%s), %p, %d(%s)\n", dfd, dfd_str, filename_uaddr, + filename, tsp_uaddr, flags, flags_str) } probe nd_syscall.utimensat.return ?, nd_syscall.compat_utimensat.return ? { diff --git a/testsuite/buildok/syscalls-detailed.stp b/testsuite/buildok/syscalls-detailed.stp index acc72c97a..c2382b5eb 100755 --- a/testsuite/buildok/syscalls-detailed.stp +++ b/testsuite/buildok/syscalls-detailed.stp @@ -583,8 +583,8 @@ probe syscall.futex.return, syscall.compat_futex.return ? probe syscall.futimesat ?, syscall.compat_futimesat ? { printf("%s, %s\n", name, argstr) - printf("%d, %p(%s), %p\n", dirfd, filename_uaddr, filename, - tvp_uaddr) + printf("%d(%s), %p(%s), %p\n", dirfd, dirfd_str, filename_uaddr, + filename, tvp_uaddr) } probe syscall.futimesat.return ?, syscall.compat_futimesat.return ? { diff --git a/testsuite/buildok/syscalls2-detailed.stp b/testsuite/buildok/syscalls2-detailed.stp index 4b66cf40e..4bcd7e838 100755 --- a/testsuite/buildok/syscalls2-detailed.stp +++ b/testsuite/buildok/syscalls2-detailed.stp @@ -42,12 +42,22 @@ probe syscall.ni_syscall.return printf("%s %s\n", name, retstr) } -probe syscall.open, syscall.openat ? +probe syscall.open { printf("%s(%s)\n", name, argstr) printf("%s %d %d\n", filename, flags, mode) } -probe syscall.open.return, syscall.openat.return ? +probe syscall.open.return +{ + printf("%s %s\n", name, retstr) +} + +probe syscall.openat ? +{ + printf("%s(%s)\n", name, argstr) + printf("%d(%s) %s %d %d\n", dfd, dfd_str, filename, flags, mode) +} +probe syscall.openat.return ? { printf("%s %s\n", name, retstr) } @@ -242,7 +252,7 @@ probe syscall.readlink.return probe syscall.readlinkat ? { printf("%s(%s)\n", name, argstr) - printf("%d %s %p %d\n", dfd, path, buf_uaddr, bufsiz) + printf("%d(%s) %s %p %d\n", dfd, dfd_str, path, buf_uaddr, bufsiz) } probe syscall.readlinkat.return ? { @@ -1387,6 +1397,8 @@ probe syscall.utime.return ?, syscall.compat_utime.return ? probe syscall.utimensat ?, syscall.compat_utimensat ? { printf("%s, %s\n", name, argstr) + printf("%d(%s), %p(%s), %p, %d(%s)\n", dfd, dfd_str, filename_uaddr, + filename, tsp_uaddr, flags, flags_str) } probe syscall.utimensat.return ?, syscall.compat_utimensat.return ? { diff --git a/testsuite/systemtap.syscall/alarm.c b/testsuite/systemtap.syscall/alarm.c index cb0e108ec..578e83298 100644 --- a/testsuite/systemtap.syscall/alarm.c +++ b/testsuite/systemtap.syscall/alarm.c @@ -39,6 +39,9 @@ int main() //staptest// alarm (0) = 0 #endif + alarm(-1); + alarm(0); + sleep(1); //staptest// nanosleep (\[1.000000000\], XXXX) = 0 diff --git a/testsuite/systemtap.syscall/futimes.c b/testsuite/systemtap.syscall/futimes.c index 08e6871fe..c80c5db58 100644 --- a/testsuite/systemtap.syscall/futimes.c +++ b/testsuite/systemtap.syscall/futimes.c @@ -33,11 +33,31 @@ int main() times.modtime = 2000000000; syscall(__NR_utime, "foobar", × ); //staptest// utime ("foobar", \[Sun Sep 9 01:46:40 2001, Wed May 18 03:33:20 2033]) -#endif /* __NR_utimes */ + + syscall(__NR_utime, (char *)-1, × ); +#ifdef __s390__ + //staptest// utime ([7]?[f]+, \[Sun Sep 9 01:46:40 2001, Wed May 18 03:33:20 2033]) = -NNNN +#else + //staptest// utime ([f]+, \[Sun Sep 9 01:46:40 2001, Wed May 18 03:33:20 2033]) = -NNNN +#endif + + syscall(__NR_utime, "foobar", (struct utimbuf *)-1 ); + //staptest// utime ("foobar", \[Thu Jan 1 00:00:00 1970, Thu Jan 1 00:00:00 1970\]) = -NNNN (EFAULT) +#endif /* __NR_utime */ #ifdef __NR_utimes syscall(__NR_utimes, "foobar", tv); //staptest// utimes ("foobar", \[1000000000.001234\]\[2000000000.005678\]) + + syscall(__NR_utimes, (char *)-1, tv); +#ifdef __s390__ + //staptest// utimes ([7]?[f]+, \[1000000000.001234\]\[2000000000.005678\]) +#else + //staptest// utimes ([f]+, \[1000000000.001234\]\[2000000000.005678\]) +#endif + + syscall(__NR_utimes, "foobar", (struct timeval *)-1); + //staptest// utimes ("foobar", UNKNOWN) = -NNNN #endif /* __NR_utimes */ #ifdef __NR_futimesat @@ -46,6 +66,19 @@ int main() syscall(__NR_futimesat, AT_FDCWD, "foobar", tv); //staptest// futimesat (AT_FDCWD, "foobar", \[1000000000.001234\]\[2000000000.005678\]) + + syscall(__NR_futimesat, -1, "foobar", tv); + //staptest// futimesat (-1, "foobar", \[1000000000.001234\]\[2000000000.005678\]) = -NNNN + + syscall(__NR_futimesat, AT_FDCWD, (char *)-1, tv); +#ifdef __s390__ + //staptest// futimesat (AT_FDCWD, [7]?[f]+, \[1000000000.001234\]\[2000000000.005678\]) = -NNNN +#else + //staptest// futimesat (AT_FDCWD, [f]+, \[1000000000.001234\]\[2000000000.005678\]) = -NNNN +#endif + + syscall(__NR_futimesat, AT_FDCWD, "foobar", (struct timeval *)-1); + //staptest// futimesat (AT_FDCWD, "foobar", UNKNOWN) = -NNNN #endif /* __NR_futimesat */ #if defined(__NR_utimensat) && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) @@ -66,6 +99,21 @@ int main() syscall(__NR_utimensat, 22, "foobar", ts, 0x42); //staptest// utimensat (22, "foobar", \[UTIME_NOW\]\[UTIME_OMIT\], 0x42) + syscall(__NR_utimensat, -1, "foobar", ts, AT_SYMLINK_NOFOLLOW); + //staptest// utimensat (-1, "foobar", \[UTIME_NOW\]\[UTIME_OMIT\], AT_SYMLINK_NOFOLLOW) = -NNNN + + syscall(__NR_utimensat, AT_FDCWD, (char *)-1, ts, AT_SYMLINK_NOFOLLOW); +#ifdef __s390__ + //staptest// utimensat (AT_FDCWD, [7]?[f]+, \[UTIME_NOW\]\[UTIME_OMIT\], AT_SYMLINK_NOFOLLOW) +#else + //staptest// utimensat (AT_FDCWD, [f]+, \[UTIME_NOW\]\[UTIME_OMIT\], AT_SYMLINK_NOFOLLOW) +#endif + + syscall(__NR_utimensat, AT_FDCWD, "foobar", (struct timespec *)-1, AT_SYMLINK_NOFOLLOW); + //staptest// utimensat (AT_FDCWD, "foobar", UNKNOWN, AT_SYMLINK_NOFOLLOW) + + syscall(__NR_utimensat, AT_FDCWD, "foobar", ts, -1); + //staptest// utimensat (AT_FDCWD, "foobar", \[UTIME_NOW\]\[UTIME_OMIT\], 0x[f]+) #endif return 0; -- 2.43.5