On Sat, Jan 14, 2017 at 09:45:11PM +0800, JingPiao Chen wrote: > * ustat.c: New file. > * configure.ac (AC_CHECK_HEADERS): Add ustat.h. > * Makefile.am (strace_SOURCES): Add it.
Add what? > * 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 + > configure.ac | 1 + > linux/dummy.h | 1 - > tests/.gitignore | 1 + > tests/Makefile.am | 2 ++ > tests/ustat.c | 83 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > tests/ustat.test | 6 ++++ > ustat.c | 55 ++++++++++++++++++++++++++++++++++++ > 8 files changed, 149 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/configure.ac b/configure.ac > index 8fc35a8..9b7ce19 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -396,6 +396,7 @@ AC_CHECK_HEADERS(m4_normalize([ > sys/shm.h > sys/signalfd.h > sys/xattr.h > + ustat.h > ])) > > AC_CHECK_HEADERS([asm/sigcontext.h],,, [#include <signal.h>]) > 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..99f1f9d > --- /dev/null > +++ b/tests/ustat.c > @@ -0,0 +1,83 @@ > +/* > + * 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> > +# ifdef HAVE_USTAT_H > +# include <ustat.h> > +# endif > + > +int > +main(void) > +{ > + kernel_ulong_t magic = (kernel_ulong_t) 0xfacefeedffffffff; > + unsigned int dev; > + long rc; > + > +#ifdef HAVE_USTAT_H > + struct ustat *ust = tail_alloc(sizeof(*ust)); > + struct stat st; > + if (stat(".", &st) == -1) > + perror_msg_and_fail("stat"); > + dev = (unsigned int) st.st_dev; > + rc = syscall(__NR_ustat, dev, ust); > + if (rc == -1) > + printf("ustat(makedev(%u, %u), %p) = %s\n", > + major(dev), minor(dev), ust, sprintrc(rc)); > + else > + printf("ustat(makedev(%u, %u)" > + ", {f_tfree=%llu, f_tinode=%llu}) = %s\n", > + major(dev), minor(dev), > + zero_extend_signed_to_ull(ust->f_tfree), > + zero_extend_signed_to_ull(ust->f_tinode), sprintrc(rc)); Let's check against 0 instead: if (rc) printf("ustat(makedev(%u, %u), %p) = %s\n", major(dev), minor(dev), ust, sprintrc(rc)); else printf("ustat(makedev(%u, %u)" ", {f_tfree=%llu, f_tinode=%llu}) = 0\n", major(dev), minor(dev), zero_extend_signed_to_ull(ust->f_tfree), zero_extend_signed_to_ull(ust->f_tinode)); > +#endif /* HAVE_USTAT_H */ > + > + dev = (unsigned int) magic; > + 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, (void *) magic); > + printf("ustat(makedev(%u, %u), %p) = %s\n", > + major(dev), minor(dev), (void *) magic, sprintrc(rc)); Why are you reusing magic as a pointer? Let's provide a valid buffer instead, e.g. unsigned long long buf[4]; btw, "(void *) magic" might be diagnosed as a cast to pointer from integer of different size on some systems. > + > + 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..e6c800d > --- /dev/null > +++ b/tests/ustat.test > @@ -0,0 +1,6 @@ > +#!/bin/sh > + > +# Check ustat syscall decoding. > + > +. "${srcdir=.}/init.sh" > +run_strace_match_diff -a36 > diff --git a/ustat.c b/ustat.c > new file mode 100644 > index 0000000..19478dd > --- /dev/null > +++ b/ustat.c > @@ -0,0 +1,55 @@ > +/* > + * 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" > +#ifdef HAVE_USTAT_H > +# include DEF_MPERS_TYPE(struct_ustat) > +# include <ustat.h> > +typedef struct ustat struct_ustat; > +# include MPERS_DEFS > +#endif /* HAVE_USTAT_H */ Does it build for you at all? I see the following build error: mpers-mx32/struct_ustat.c:29:0: error: unterminated #ifdef #ifdef HAVE_USTAT_H make: *** [mpers-mx32.stamp] Error 1 mpers-m32/struct_ustat.c:29:0: error: unterminated #ifdef #ifdef HAVE_USTAT_H make: *** [mpers-m32.stamp] Error 1 In short, you cannot have #include MPERS_DEFS inside an #ifdef condition. > + > +SYS_FUNC(ustat) > +{ > + if (entering(tcp)) > + print_dev_t((unsigned int) tcp->u_arg[0]); > + else { > + tprints(", "); > +#ifdef HAVE_USTAT_H > + struct_ustat ust; > + > + 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)); > +#else /* !HAVE_USTAT_H */ > + printaddr(tcp->u_arg[1]); > +#endif /* HAVE_USTAT_H */ > + } > + > + return 0; > +} -- ldv
pgpzOe9nywfwk.pgp
Description: PGP signature
------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today. http://sdm.link/xeonphi
_______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel