* ustat.c: New file. * Makefile.am (strace_SOURCES): Add it. * linux/dummy.h: Remove. * tests/ustat.c: New file. * tests/ustat.test: New test. * tests/.gitignore: Add ustat. * tests/Makefile.am (check_PROGRAMS): Likewise. (DECODER_TESTS): Add ustat.test. --- Makefile.am | 1 + linux/dummy.h | 1 - tests/.gitignore | 1 + tests/Makefile.am | 2 ++ tests/ustat.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/ustat.test | 6 +++++ ustat.c | 49 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 tests/ustat.c create mode 100755 tests/ustat.test create mode 100644 ustat.c
diff --git a/Makefile.am b/Makefile.am index 3369e1e..f50e311 100644 --- a/Makefile.am +++ b/Makefile.am @@ -247,6 +247,7 @@ strace_SOURCES = \ umount.c \ uname.c \ userfaultfd.c \ + ustat.c \ util.c \ utime.c \ utimes.c \ diff --git a/linux/dummy.h b/linux/dummy.h index 0aee35b..2758cfb 100644 --- a/linux/dummy.h +++ b/linux/dummy.h @@ -156,7 +156,6 @@ #define sys_timerfd printargs #define sys_tuxcall printargs #define sys_ulimit printargs -#define sys_ustat printargs #define sys_vserver printargs /* deprecated */ diff --git a/tests/.gitignore b/tests/.gitignore index cec446e..f0c9e93 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -357,6 +357,7 @@ unlink unlinkat unshare userfaultfd +ustat utime utimensat utimes diff --git a/tests/Makefile.am b/tests/Makefile.am index 8c7cdd0..d1c13d8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -414,6 +414,7 @@ check_PROGRAMS = \ unlinkat \ unshare \ userfaultfd \ + ustat \ utime \ utimensat \ utimes \ @@ -800,6 +801,7 @@ DECODER_TESTS = \ unlinkat.test \ unshare.test \ userfaultfd.test \ + ustat.test \ utime.test \ utimensat.test \ utimes.test \ diff --git a/tests/ustat.c b/tests/ustat.c new file mode 100644 index 0000000..3e82f12 --- /dev/null +++ b/tests/ustat.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2017 JingPiao Chen <chenjingp...@gmail.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "tests.h" +#include <asm/unistd.h> + +#ifdef __NR_ustat + +# include <stdio.h> +# include <sys/stat.h> +# include <sys/sysmacros.h> +# include <unistd.h> +# include <ustat.h> + +int +main(void) +{ + kernel_ulong_t magic = (kernel_ulong_t) 0xfacefeedffffffff; + unsigned int dev = (unsigned int) magic; + struct ustat *ust = tail_alloc(sizeof(*ust)); + struct stat st; + + long rc = syscall(__NR_ustat, magic, 0); + printf("ustat(makedev(%u, %u), NULL) = %s\n", major(dev), + minor(dev), sprintrc(rc)); + + rc = syscall(__NR_ustat, magic, ust); + printf("ustat(makedev(%u, %u), %p) = %s\n", major(dev), minor(dev), + ust, sprintrc(rc)); + + if (stat("/", &st) == -1) + perror_msg_and_fail("stat"); + rc = syscall(__NR_ustat, st.st_dev, ust); + printf("ustat(makedev(%u, %u), {f_tfree=%llu, f_tinode=%llu}) = %s\n", + major(st.st_dev), minor(st.st_dev), (unsigned long long) ust->f_tfree, + (unsigned long long) ust->f_tinode, sprintrc(rc)); + + puts("+++ exited with 0 +++"); + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__NR_ustat") + +#endif diff --git a/tests/ustat.test b/tests/ustat.test new file mode 100755 index 0000000..ff49e3c --- /dev/null +++ b/tests/ustat.test @@ -0,0 +1,6 @@ +#!/bin/sh + +# Check ustat syscall decoding. + +. "${srcdir=.}/init.sh" +run_strace_match_diff -a26 diff --git a/ustat.c b/ustat.c new file mode 100644 index 0000000..1e501ee --- /dev/null +++ b/ustat.c @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 JingPiao Chen <chenjingp...@gmail.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "defs.h" +#include DEF_MPERS_TYPE(struct_ustat) +#include <ustat.h> +typedef struct ustat struct_ustat; +#include MPERS_DEFS + +SYS_FUNC(ustat) +{ + if (entering(tcp)) + print_dev_t((unsigned int) tcp->u_arg[0]); + else { + struct_ustat ust; + + tprints(", "); + if (!umove_or_printaddr(tcp, tcp->u_arg[1], &ust)) + tprintf("{f_tfree=%llu, f_tinode=%llu}", + zero_extend_signed_to_ull(ust.f_tfree), + zero_extend_signed_to_ull(ust.f_tinode)); + } + + return 0; +} -- 1.9.1 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel