From: David Smith Date: Mon, 10 Jun 2013 16:06:27 +0000 (-0500) Subject: Fix 'syscall.io_getevents' probe. X-Git-Tag: release-2.3~169 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=d4c32f88147c761141ec1f6211392f168cb96df9;p=systemtap.git Fix 'syscall.io_getevents' probe. * tapset/linux/syscalls.stp: Split 'syscall.io_getevents' into 'syscall.io_getevents' and 'compat_syscall.io_getevents', since the kernel function 'compat_sys_io_getevents' gets a 'struct compat_timespec', not a 'struct timespec'. * testsuite/buildok/syscalls-details.stp: Add 'compat_syscall.io_getevents' and 'compat_syscall.io_getevents.return' tests. --- diff --git a/tapset/linux/syscalls.stp b/tapset/linux/syscalls.stp index 037c694f9..03bdc4579 100644 --- a/tapset/linux/syscalls.stp +++ b/tapset/linux/syscalls.stp @@ -2004,8 +2004,7 @@ probe syscall.io_destroy.return = kernel.function("sys_io_destroy").return # struct io_event __user *events, # struct compat_timespec __user *timeout) # -probe syscall.io_getevents = kernel.function("compat_sys_io_getevents").call ?, - kernel.function("sys_io_getevents").call ? +probe syscall.io_getevents = kernel.function("sys_io_getevents").call ? { name = "io_getevents" ctx_id = $ctx_id @@ -2017,8 +2016,26 @@ probe syscall.io_getevents = kernel.function("compat_sys_io_getevents").call ?, argstr = sprintf("%d, %d, %d, %p, %p, %s", $ctx_id, $min_nr, $nr, $events, $timeout, timestr) } -probe syscall.io_getevents.return = kernel.function("compat_sys_io_getevents").return ?, - kernel.function("sys_io_getevents").return ? +probe syscall.io_getevents.return = kernel.function("sys_io_getevents").return ? +{ + name = "io_getevents" + retstr = return_str(1, $return) +} +probe syscall.compat_io_getevents = + kernel.function("compat_sys_io_getevents").call ? +{ + name = "io_getevents" + ctx_id = $ctx_id + min_nr = $min_nr + nr = $nr + events_uaddr = $events + timeout_uaddr = $timeout + timestr = _struct_compat_timespec_u($timeout, 1) + argstr = sprintf("%d, %d, %d, %p, %p, %s", $ctx_id, $min_nr, + $nr, $events, $timeout, timestr) +} +probe syscall.compat_io_getevents.return = + kernel.function("compat_sys_io_getevents").return ? { name = "io_getevents" retstr = return_str(1, $return) diff --git a/testsuite/buildok/syscalls-detailed.stp b/testsuite/buildok/syscalls-detailed.stp index e23ad50a7..2b1712723 100755 --- a/testsuite/buildok/syscalls-detailed.stp +++ b/testsuite/buildok/syscalls-detailed.stp @@ -877,13 +877,13 @@ probe syscall.io_destroy.return printf("%s, %s\n", name, retstr) } -probe syscall.io_getevents +probe syscall.io_getevents, syscall.compat_io_getevents { printf("%s, %s\n", name, argstr) printf("%d, %d, %d, %p, %p, %s\n", ctx_id, min_nr, nr, events_uaddr, timeout_uaddr, timestr) } -probe syscall.io_getevents.return +probe syscall.io_getevents.return, syscall.compat_io_getevents.return { printf("%s, %s\n", name, retstr) }