From: dwilder Date: Mon, 30 Jul 2007 22:29:12 +0000 (+0000) Subject: fixed support for pread and pwrite for s390x. Added tests for pread and pwrite. X-Git-Tag: release-0.6~345 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=e6e233c657a0336c1a621ff513820383e2c41c2f;p=systemtap.git fixed support for pread and pwrite for s390x. Added tests for pread and pwrite. --- diff --git a/tapset/ChangeLog b/tapset/ChangeLog index 4aedbfc53..b9462633f 100644 --- a/tapset/ChangeLog +++ b/tapset/ChangeLog @@ -1,3 +1,10 @@ +2007-07-30 Dave Wilder + PR 4794 + * syscalls2.stp (syscall.pread and syscall.pread32) + For s390x only changed the $buf argument to $ubuf. + Change the format for count and position from %p to %d + to make it consistant with sys_read and sys_write. + 2007-07-25 Mike Mason PR 4386 diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp index 7c5b4854e..0554f3cfe 100644 --- a/tapset/syscalls2.stp +++ b/tapset/syscalls2.stp @@ -396,7 +396,7 @@ probe syscall.pread = kernel.function("sys_pread64") { buf_uaddr = $buf count = $count offset = $pos - argstr = sprintf("%d, %p, %p, %p", $fd, $buf, $count, $pos) + argstr = sprintf("%d, %p, %d, %d", $fd, $buf, $count, $pos) } probe syscall.pread.return = kernel.function("sys_pread64").return { name = "pread" @@ -410,7 +410,13 @@ probe syscall.pread32 = kernel.function("sys32_pread64") ? { buf_uaddr = $buf count = $count offset = ($poshi << 32) + $poslo - argstr = sprintf("%d, %p, %p, %p", $fd, $buf, $count, ($poshi << 32) + $poslo) +%( arch == "s390x" %? + buf_uaddr = $ubuf + argstr = sprintf("%d, %p, %d, %d", $fd, $ubuf, $count, ($poshi << 32) + $poslo) +%: + buf_uaddr = $buf + argstr = sprintf("%d, %p, %d, %d", $fd, $buf, $count, ($poshi << 32) + $poslo) +%) } probe syscall.pread32.return = kernel.function("sys32_pread64").return ? { name = "pread" @@ -517,9 +523,17 @@ probe syscall.pwrite32 = kernel.function("sys32_pwrite64") ? { buf_uaddr = $buf count = $count offset = ($poshi << 32) + $poslo +%( arch == "s390x" %? + buf_uaddr = $ubuf + argstr = sprintf("%d, %s, %d, %d", $fd, + text_strn(user_string($ubuf),syscall_string_trunc,1), + $count, ($poshi << 32) + $poslo) +%: + buf_uaddr = $buf argstr = sprintf("%d, %s, %d, %d", $fd, text_strn(user_string($buf),syscall_string_trunc,1), $count, ($poshi << 32) + $poslo) +%) } probe syscall.pwrite32.return = kernel.function("sys32_pwrite64").return ? { name = "pwrite" diff --git a/testsuite/systemtap.syscall/ChangeLog b/testsuite/systemtap.syscall/ChangeLog index 848bafae0..1070cde69 100644 --- a/testsuite/systemtap.syscall/ChangeLog +++ b/testsuite/systemtap.syscall/ChangeLog @@ -1,3 +1,7 @@ +2007-07-30 David Wilder + + * readdwrite.c: Added pwrite and pread test + 2007-07-17 Martin Hunt * poll.c (main): Don't hardcode fd. diff --git a/testsuite/systemtap.syscall/readwrite.c b/testsuite/systemtap.syscall/readwrite.c index 71d8d774d..b0e964b6d 100644 --- a/testsuite/systemtap.syscall/readwrite.c +++ b/testsuite/systemtap.syscall/readwrite.c @@ -33,6 +33,9 @@ int main() write(fd,"Hello world abcdefghijklmnopqrstuvwxyz 01234567890123456789", 59); // write (NNNN, "Hello world abcdefghijklmnopqrstuvwxyz 012345"..., 59) = 59 + pwrite(fd,"Hello Again",11,12); + // pwrite (NNNN, "Hello Again", 11, 12) = 11 + writev(fd, v, 3); // writev (NNNN, XXXX, 3) = 15 @@ -70,6 +73,9 @@ int main() read(fd, buf, 50); // read (NNNN, XXXX, 50) = 50 + pread(fd, buf, 11, 10); + // pread (NNNN, XXXX, 11, 10) = 11 + x[0].iov_base = buf1; x[0].iov_len = sizeof(STRING1); x[1].iov_base = buf2;