]> sourceware.org Git - systemtap.git/commitdiff
Small syscall/nd_syscall tapset and testsuite fixes and improvements.
authorDavid Smith <dsmith@redhat.com>
Fri, 28 Feb 2014 20:27:56 +0000 (14:27 -0600)
committerDavid Smith <dsmith@redhat.com>
Fri, 28 Feb 2014 20:27:56 +0000 (14:27 -0600)
* tapset/linux/syscalls.stp (syscall.bind): Make 'fd' variable an integer
  instead of a long.
* tapset/linux/nd_syscalls2.stp (nd_syscall.readv): Make 'fd' and 'count'
  variables integers instead of longs.
  (nd_syscall.writev): Ditto.
* testsuite/systemtap.syscall/rename.c (main): Fix typo in expected test
  output.
* testsuite/systemtap.syscall/bind.c: New testcase.

tapset/linux/nd_syscalls2.stp
tapset/linux/syscalls.stp
testsuite/systemtap.syscall/bind.c [new file with mode: 0644]
testsuite/systemtap.syscall/rename.c

index 2eded10834810517b722f7a26152d354e5ecfc95..f1da09d93d48f6bb952fcf420b7e702d2781ae25 100644 (file)
@@ -1016,8 +1016,8 @@ probe nd_syscall.readv = kprobe.function("compat_sys_readv") ?,
        // argstr = sprintf("%d, %p, %d", $fd, $vec, $vlen)
        asmlinkage()
        vector_uaddr = pointer_arg(2)
-       count = ulong_arg(3)
-       fd = ulong_arg(1)
+       count = int_arg(3)
+       fd = int_arg(1)
        argstr = sprintf("%d, %p, %d", fd, vector_uaddr, count)
 }
 probe nd_syscall.readv.return = kprobe.function("compat_sys_readv").return ?,
@@ -4764,8 +4764,8 @@ probe nd_syscall.writev = kprobe.function("compat_sys_writev") ?,
        // argstr = sprintf("%d, %p, %d", $fd, $vec, $vlen)
        asmlinkage()
        vector_uaddr = pointer_arg(2)
-       count = ulong_arg(3)
-       fd = ulong_arg(1)
+       count = int_arg(3)
+       fd = int_arg(1)
        argstr = sprintf("%d, %p, %d", fd, vector_uaddr, count)
 }
 
index 38a00b479a12967a6a838e682be726a400bda599..12238c46d621efa513b274355c3f08af24a0d928 100644 (file)
@@ -198,11 +198,11 @@ probe syscall.bdflush.return = kernel.function("sys_bdflush").return ?
 probe syscall.bind = kernel.function("sys_bind").call ?
 {
        name = "bind"
-       sockfd = $fd
+       sockfd = __int32($fd)
        my_addr_uaddr = $umyaddr
        addrlen = $addrlen
        @_af_inet_info_u(my_addr_uaddr, addrlen)
-       argstr = sprintf("%d, %s, %d", $fd, _struct_sockaddr_u($umyaddr, $addrlen), $addrlen)
+       argstr = sprintf("%d, %s, %d", __int32($fd), _struct_sockaddr_u($umyaddr, $addrlen), $addrlen)
 }
 probe syscall.bind.return = kernel.function("sys_bind").return ?
 {
diff --git a/testsuite/systemtap.syscall/bind.c b/testsuite/systemtap.syscall/bind.c
new file mode 100644 (file)
index 0000000..1a2f4d2
--- /dev/null
@@ -0,0 +1,78 @@
+/* COVERAGE: bind */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+
+int main()
+{
+  char buf[1024];
+  int sock_inet_stream;
+  int sock_local;
+  int fd_null;
+  struct sockaddr_in sin1, sin2, sin3;
+  struct sockaddr_un sun1;
+
+  sin1.sin_family = AF_INET;
+  /* this port must be unused! */
+  sin1.sin_port = htons((getpid() % 32768) + 10000);
+  sin1.sin_addr.s_addr = INADDR_ANY;
+
+  sin2.sin_family = AF_INET;
+  sin2.sin_port = 0;
+  sin2.sin_addr.s_addr = INADDR_ANY;
+
+  sin3.sin_family = AF_INET;
+  sin3.sin_port = 0;
+  /* assumes 10.255.254.253 is not a local interface address! */
+  sin3.sin_addr.s_addr = htonl(0x0AFFFEFD);
+
+  sun1.sun_family = AF_UNIX;
+  strncpy(sun1.sun_path, ".", sizeof(sun1.sun_path));
+
+  sock_inet_stream = socket(PF_INET, SOCK_STREAM, 0);
+  //staptest// socket (PF_INET, SOCK_STREAM, IPPROTO_IP) = NNNN
+
+  sock_local = socket(PF_LOCAL, SOCK_STREAM, 0);
+  //staptest// socket (PF_LOCAL, SOCK_STREAM, 0) = NNNN
+
+  fd_null = open("/dev/null", O_WRONLY);
+  //staptest// open ("/dev/null", O_WRONLY) = NNNN
+
+  bind(-1, (struct sockaddr *)&sin1, sizeof(sin1));
+  //staptest// bind (-1, {AF_INET, 0.0.0.0, NNNN}, 16) = -NNNN (EBADF)
+
+  bind(sock_inet_stream, (struct sockaddr *)-1, sizeof(struct sockaddr_in));
+  //staptest// bind (NNNN, \[\.\.\.\], 16) = -NNNN (EFAULT)
+
+  bind(sock_inet_stream, (struct sockaddr *)&sin1, 3);
+  //staptest// bind (NNNN, {.+}, 3) = -NNNN (EINVAL)
+
+  bind(fd_null, (struct sockaddr *)&sin1, sizeof(sin1));
+  //staptest// bind (NNNN, {AF_INET, 0.0.0.0, NNNN}, 16) = -NNNN (ENOTSOCK)
+
+  bind(sock_inet_stream, (struct sockaddr *)&sin2, sizeof(sin2));
+  //staptest// bind (NNNN, {AF_INET, 0.0.0.0, 0}, 16) = 0
+
+  bind(sock_local, (struct sockaddr *)&sun1, sizeof(sun1));
+  //staptest// bind (NNNN, {AF_UNIX, \.}, 110) = -NNNN (EADDRINUSE)
+
+  bind(sock_inet_stream, (struct sockaddr *)&sin3, sizeof(sin3));
+  //staptest// bind (NNNN, {AF_INET, 10.255.254.253, 0}, 16) = -NNNN (EADDRNOTAVAIL)
+
+  close(sock_inet_stream);
+  //staptest// close (NNNN) = 0
+
+  close(sock_local);
+  //staptest// close (NNNN) = 0
+
+  close(fd_null);
+  //staptest// close (NNNN) = 0
+
+  return 0;
+}
index e6cbb44f156a3293890038cbb59f2e7d7419fedb..34adf59dfb59bb995e4a447133f1ec8425912878 100644 (file)
@@ -64,7 +64,7 @@ int main()
 
   // This will fail since the target isn't empty.
   renameat(AT_FDCWD, "dir1", AT_FDCWD, "dir3");
-  //staptest// rename (AT_FDCWD, "dir1", AT_FDCWD, "dir3") = -NNNN (ENOTEMPTY!!!!EEXIST)
+  //staptest// renameat (AT_FDCWD, "dir1", AT_FDCWD, "dir3") = -NNNN (ENOTEMPTY!!!!EEXIST)
 
   // This will fail since you can't rename a file to a directory.
   renameat(AT_FDCWD, "file1", AT_FDCWD, "dir1");
This page took 0.047083 seconds and 5 git commands to generate.