On Thu, Mar 16, 2017 at 9:53 AM, Abhishek Tiwari
<erabhishektiwar...@gmail.com> wrote:
> On Wed, Mar 15, 2017 at 11:14 PM, Abhishek Tiwari
> <erabhishektiwar...@gmail.com> wrote:
>> On Tue, Mar 14, 2017 at 8:44 AM, Abhishek Tiwari
>> <erabhishektiwar...@gmail.com> wrote:
>>> On Tue, Mar 14, 2017 at 2:00 AM, Dmitry V. Levin <l...@altlinux.org> wrote:
>>>> On Tue, Mar 14, 2017 at 12:40:46AM +0530, Abhishek Tiwari wrote:
>>>>> > Per-file summary is not in GNU change log format, please refer to
>>>>> > https://www.gnu.org/prep/standards/html_node/Style-of-Change-Logs.html .
>>>>> > Specifically, it lacks asterisks at the beginning of each new file
>>>>> > description and has excess spaces between file part and description,
>>>>> > otherwise looks fine.
>>>>> >
>>>>> > The patch wires up {,l}stat{,64}, fstatat/fstatat64 syscalls (used for
>>>>> > obtaining
>>>>> > file status), ustat syscall (which is a deprecated way to get some FS
>>>>> > statistics) and some statfs syscalls (which are more contemporary way
>>>>> > obtaining FS statistics information). On the other side, at least
>>>>> > fstat/fstat64, fstatfs/fstatfs64, old{,f,l}stat, osf_{,f}statfs, and
>>>>> > various
>>>>> > (mostly unsupported) syscalls with osf_, svr4_, sysv_, bsd43_, and
>>>>> > posix_
>>>>> > prefixes, present on alpha and mips, are omitted. I'm not sure whether
>>>>> > it was intended.
>>>>> >
>>>>> > There are minor tabulation irregularities introduced (at least) for
>>>>> > newfstatat and fstatat64 syscall entries, it is better to avoid this.
>>>>>
>>>>> I have fixed the commit entries.
>>>>> Now the patch includes all the stat-like syscalls that can be
>>>>> displayed by following command->
>>>>
>>>> The idea is not to throw all syscalls that do some kind of stat into a
>>>> single class, but to create a class of syscalls that could be useful.
>>>> As Eugene already noted, there is little use of grouping syscalls that
>>>> stat files with those that stat filesystems.
>>>>
>>>> Actually, there is a software project that could benefit from more
>>>> fine-grained classes, e.g. oldstat+stat+stat64, oldlstat+lstat+lstat64,
>>>> and newfstatat+fstatat64.
>>>
>>> Ok, so oldstat+stat+stat64 is one class that is to be grouped under
>>> %stat, oldstat+lstat+lstat64 as another class and
>>> fstatat+newfstatat+fstatat64 and some other class.
>>>
>>> I read in mailing list it is intended to group syscalls that perform
>>> same action across different versions.
>>>
>>> But it is little confusing to decide what to group into one class.
>>>
>>>
>>>> There may be some use of a class that groups all filesystem stat syscalls
>>>> like ustat and *statfs*. This might appear to be easier for you to
>>>> implement, especially the part that tests it.
>>>
>>> I would be doing this part first. Grouping ustat and *statfs* under
>>> %statfs. Is this class name fine?
>>>
>>>
>>>>> grep -nr stat linux/*/syscallent*
>>>>
>>>> btw, why do you pass -nr to this grep command?
>>>
>>> This grep command is just to display the places where I have made the
>>> change. The command actually used is mentioned in commit.
>>>>> >> --- a/syscall.c
>>>>> >> +++ b/syscall.c
>>>>> >> @@ -77,6 +77,7 @@
>>>>> >> #define TS TRACE_SIGNAL
>>>>> >> #define TM TRACE_MEMORY
>>>>> >> #define TSC TRACE_SCHED
>>>>> >> +#define TST TRACE_STAT
>>>>> > Tabulation is used for separating macro declaration and definition, but
>>>>> > neighbouring lines utilise space for this purpose.
>>>>>
>>>>> Please elaborate, i don't get what correction is intended here?
>>>>
>>>> The rule of thumb is simple:
>>>> when patching a piece of code, follow its coding style.
>>>>
>>>> If the code uses spaces, use spaces. If it uses tabs, use tabs.
>>>> strace has a long history with a lot of contributors so the style
>>>> used in different parts might differ slightly.
>>>
>>> Sorry, that space was not intensional.
>>>
>>>>> >> +++ b/tests/stat_like.test
>>>>> >> @@ -0,0 +1,58 @@
>>>>> >> +#!/bin/sh
>>>>> >> +
>>>>> >> +# Check how stat-like syscalls are traced.
>>>>> >> +#
>>>>> >> +# Copyright (c) 2017 The strace developers.
>>>>> >> +# 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.
>>>>> >> +
>>>>> >> +STAT_TESTS='21 fstat
>>>>> >> +33 ustat
>>>>> >> +32 statx
>>>>> >> +17 statfs
>>>>> >> +21 oldfstat'
>>>>> >> +
>>>>> >> +NON_STAT_TESTS='11 fchdir
>>>>> >> +27 futex
>>>>> >> +10 fsync'
>>>>> >> +
>>>>> >> +. "${srcdir=.}/init.sh"
>>>>> >> +
>>>>> >> +echo "$STAT_TESTS" | while read w i
>>>>> >> +do
>>>>> >> + run_prog ./$i > /dev/null
>>>>> >> + run_strace -a$w -e%stat ./$i > "$EXP"
>>>>> >> + match_diff "$LOG" "$EXP"
>>>>> >> +done
>>>>> >> +
>>>>> >> +echo '+++ exited with 0 +++' > "$EXP"
>>>>> >> +
>>>>> >> +echo "$NON_STAT_TESTS" | while read w i
>>>>> >> +do
>>>>> >> + run_prog ./$i > /dev/null
>>>>> >> + run_strace -a$w -e%stat ./$i > /dev/null
>>>>> >> + match_diff "$LOG" "$EXP"
>>>>> >> +done
>>>>> >> +
>>>>> >> +rm "$EXP"
>>>>> > This test produces the following diagnostics:
>>>>> >
>>>>> > 1,2c1,2
>>>>> > < fstat(0, 0x7f4dc9b2ffe0) = -1 EFAULT (Bad address)
>>>>> > < fstat(0, {st_dev=makedev(9, 1), st_ino=8761399,
>>>>> > st_mode=S_IFREG|0640, st_nlink=1, st_uid=1000, st_gid=1000,
>>>>> > st_blksize=4096, st_blocks=0, st_size=43147718418,
>>>>> > st_atime=1969-12-31T21:59:17+0100.000000135,
>>>>> > st_mtime=1969-12-31T21:59:19+0100.000000246,
>>>>> > st_ctime=2017-03-13T07:03:55+0100.962268762}) = 0
>>>>> > ---
>>>>> > > stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2246, ...})
>>>>> > = 0
>>>>> > > stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2246, ...})
>>>>> > = 0
>>>>> > stat_like.test: failed test: ../strace -a21 -e%stat ./fstat output
>>>>> > mismatch
>>>>> >
>>>>> > It exits with status 0, however.
>>>>>
>>>>> Please help me with this part, how can I run this test on my machine.
>>>>
>>>> Do you ask about running this particular test? I think it's as simple as
>>>> $ make check TESTS=stat_like VERBOSE=1
>>>
>>> Thank you, I just never did testing this way and I am new to this part.
>>>>
>>>> --
>>>> ldv
>>>>
>>>> ------------------------------------------------------------------------------
>>>> 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
>>>>
>>
>>
>> Is it fine to group statfs+ statfs64+ fstatfs + fstatfs64 + ustat as
>> %statfs or it should be (statfs+statfs64 + ustat) and
>> (fstatfs+ftsatfs64) i.e. two different classes ?
>
> Please reply
Implemented -e trace=%statfs option. It groups statfs+statfs64+ustat
Below is patch attached. Please review.
From 38ea98c7ba87bc485d8af34fc401f46b05b2c035 Mon Sep 17 00:00:00 2001
From: Abhishek Tiwari <erabhishektiwar...@gmail.com>
Date: Thu, 16 Mar 2017 16:55:44 +0530
Subject: [PATCH v4] Implement -e trace=%statfs option for tracing statfs like syscalls.
linux/*/syscallent.h part is modified automatically by:
git grep -Fl 'statfs' linux/*/syscallent* | xargs sed -i 's/TD\(,[[:space:]]*SEN(statfs\)/TD|SFS\1/'
git grep -Fl 'statfs' linux/*/syscallent* | xargs sed -i 's/TF\(,[[:space:]]*SEN(statfs\)/TF|SFS\1/'
git grep -Fl 'statfs' linux/*/syscallent* | xargs sed -i 's/0\(,[[:space:]]*SEN(osf_statfs\)/SFS\1/'
git grep -Fl 'statfs' linux/*/syscallent* | xargs sed -i 's/0\(,[[:space:]]*SEN(.*_statfs\)/SFS\1/'
git grep -Fl 'ustat' linux/*/syscallent* | xargs sed -i 's/0\(,[[:space:]]*SEN(.*_ustat\)/SFS\1/'
* linux/32/syscallent.h: Add SFS flag for stat-like sycalls.
* linux/64/syscallent.h: Likewise.
* linux/aarch64/syscallent.h: Likewise.
* linux/alpha/syscallent.h: Likewise.
* linux/arm/syscallent.h: Likewise.
* linux/avr32/syscallent.h: Likewise.
* linux/bfin/syscallent.h: Likewise.
* linux/crisv10/syscallent.h: Likewise.
* linux/hppa/syscallent.h: Likewise.
* linux/i386/syscallent.h: Likewise.
* linux/ia64/syscallent.h: Likewise.
* linux/m68k/syscallent.h: Likewise.
* linux/microblaze/syscallent.h: Likewise.
* linux/mips/syscallent-compat.h: Likewise.
* linux/mips/syscallent-n32.h: Likewise.
* linux/mips/syscallent-n64.h: Likewise.
* linux/mips/syscallent-o32.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/powerpc64/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/s390x/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* linux/x32/syscallent.h: Likewise.
* linux/x86_64/syscallent.h: Likewise.
* linux/xtensa/syscallent.h: Likewise.
* qualify.c (lookup_class): Add SCHED_STAT for "%statfs".
* strace.1 (.SS Filtering): Add information about %statfs syscall class.
* syscall.c: Alias SFS to TRACE_STATFS around syscallent.h inclusion.
* sysent.h (TRACE_STATFS): New definition.
* tests/Makefile.am (DECODER_TESTS): Add trace_statfs.test.
* tests/ksysent.c: Define SFS to 0.
* tests/nsyscalls.c: Likewise.
* tests/trace_statfs.test: New test.
---
linux/32/syscallent.h | 2 +-
linux/64/syscallent.h | 2 +-
linux/aarch64/syscallent.h | 4 +--
linux/alpha/syscallent.h | 8 +++---
linux/arm/syscallent.h | 6 ++---
linux/avr32/syscallent.h | 6 ++---
linux/bfin/syscallent.h | 6 ++---
linux/crisv10/syscallent.h | 6 ++---
linux/hppa/syscallent.h | 6 ++---
linux/i386/syscallent.h | 6 ++---
linux/ia64/syscallent.h | 6 ++---
linux/m68k/syscallent.h | 6 ++---
linux/microblaze/syscallent.h | 6 ++---
linux/mips/syscallent-compat.h | 8 +++---
linux/mips/syscallent-n32.h | 6 ++---
linux/mips/syscallent-n64.h | 4 +--
linux/mips/syscallent-o32.h | 6 ++---
linux/powerpc/syscallent.h | 6 ++---
linux/powerpc64/syscallent.h | 6 ++---
linux/s390/syscallent.h | 6 ++---
linux/s390x/syscallent.h | 6 ++---
linux/sh/syscallent.h | 6 ++---
linux/sh64/syscallent.h | 6 ++---
linux/sparc/syscallent.h | 6 ++---
linux/sparc64/syscallent.h | 6 ++---
linux/x32/syscallent.h | 4 +--
linux/x86_64/syscallent.h | 4 +--
linux/xtensa/syscallent.h | 6 ++---
qualify.c | 1 +
strace.1 | 3 +++
syscall.c | 2 ++
sysent.h | 1 +
tests/Makefile.am | 1 +
tests/ksysent.c | 1 +
tests/nsyscalls.c | 1 +
tests/trace_statfs.test | 55 ++++++++++++++++++++++++++++++++++++++++++
36 files changed, 143 insertions(+), 78 deletions(-)
create mode 100755 tests/trace_statfs.test
diff --git a/linux/32/syscallent.h b/linux/32/syscallent.h
index a8f9510..72a3ebe 100644
--- a/linux/32/syscallent.h
+++ b/linux/32/syscallent.h
@@ -44,7 +44,7 @@
[ 40] = { 5, TF, SEN(mount), "mount" },
[ 41] = { 2, TF, SEN(pivotroot), "pivot_root" },
[ 42] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
-[ 43] = { 3, TF, SEN(statfs64), "statfs64" },
+[ 43] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[ 44] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[ 45] = { 3, TF, SEN(truncate64), "truncate64" },
[ 46] = { 3, TD, SEN(ftruncate64), "ftruncate64" },
diff --git a/linux/64/syscallent.h b/linux/64/syscallent.h
index b5a09d4..413b91a 100644
--- a/linux/64/syscallent.h
+++ b/linux/64/syscallent.h
@@ -41,7 +41,7 @@
[ 40] = { 5, TF, SEN(mount), "mount" },
[ 41] = { 2, TF, SEN(pivotroot), "pivot_root" },
[ 42] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
-[ 43] = { 2, TF, SEN(statfs), "statfs" },
+[ 43] = { 2, TF|SFS, SEN(statfs), "statfs" },
[ 44] = { 2, TD, SEN(fstatfs), "fstatfs" },
[ 45] = { 2, TF, SEN(truncate), "truncate" },
[ 46] = { 2, TD, SEN(ftruncate), "ftruncate" },
diff --git a/linux/aarch64/syscallent.h b/linux/aarch64/syscallent.h
index 6b23f8c..4bd981e 100644
--- a/linux/aarch64/syscallent.h
+++ b/linux/aarch64/syscallent.h
@@ -45,7 +45,7 @@
[1053] = { 4, TD, SEN(fadvise64), "fadvise64" },
[1054] = { 4, TD|TF, SEN(newfstatat), "newfstatat" },
[1055] = { 2, TD, SEN(fstatfs), "fstatfs" },
-[1056] = { 2, TF, SEN(statfs), "statfs" },
+[1056] = { 2, TF|SFS, SEN(statfs), "statfs" },
[1057] = { 3, TD, SEN(lseek), "lseek" },
[1058] = { 6, TD|TM|SI, SEN(mmap), "mmap" },
[1059] = { 1, 0, SEN(alarm), "alarm" },
@@ -59,7 +59,7 @@
[1067] = { 5, TD, SEN(select), "select" },
[1068] = { 3, TD, SEN(poll), "poll" },
[1069] = { 4, TD, SEN(epoll_wait), "epoll_wait" },
-[1070] = { 2, 0, SEN(ustat), "ustat" },
+[1070] = { 2, SFS, SEN(ustat), "ustat" },
[1071] = { 0, TP, SEN(vfork), "vfork" },
[1072] = { 4, TP, SEN(wait4), "wait4" },
[1073] = { 4, TN, SEN(recv), "recv" },
diff --git a/linux/alpha/syscallent.h b/linux/alpha/syscallent.h
index 4449f22..7c1bc71 100644
--- a/linux/alpha/syscallent.h
+++ b/linux/alpha/syscallent.h
@@ -185,7 +185,7 @@
[157] = { 5, 0, SEN(printargs), "osf_sigwaitprim" }, /*not implemented */
[158] = { 5, 0, SEN(printargs), "osf_nfssvc" }, /*not implemented */
[159] = { 4, 0, SEN(printargs), "osf_getdirentries" },
-[160] = { 3, 0, SEN(osf_statfs), "osf_statfs" },
+[160] = { 3, SFS, SEN(osf_statfs), "osf_statfs" },
[161] = { 3, 0, SEN(osf_fstatfs), "osf_fstatfs" },
[162] = { },
[163] = { 5, 0, SEN(printargs), "osf_asynch_daemon" }, /*not implemented */
@@ -230,7 +230,7 @@
[224] = { 5, 0, SEN(printargs), "osf_stat" }, /*not implemented */
[225] = { 5, 0, SEN(printargs), "osf_lstat" }, /*not implemented */
[226] = { 5, 0, SEN(printargs), "osf_fstat" }, /*not implemented */
-[227] = { 3, 0, SEN(osf_statfs), "osf_statfs64" }, /*not implemented */
+[227] = { 3, SFS, SEN(osf_statfs), "osf_statfs64" }, /*not implemented */
[228] = { 3, 0, SEN(osf_fstatfs), "osf_fstatfs64" }, /*not implemented */
[229 ... 232] = { },
[233] = { 1, 0, SEN(getpgid), "getpgid" },
@@ -290,8 +290,8 @@
[324] = { 1, NF, SEN(personality), "personality" },
[325] = { 1, NF, SEN(setfsuid), "setfsuid" },
[326] = { 1, NF, SEN(setfsgid), "setfsgid" },
-[327] = { 2, 0, SEN(ustat), "ustat" },
-[328] = { 2, TF, SEN(statfs), "statfs" },
+[327] = { 2, SFS, SEN(ustat), "ustat" },
+[328] = { 2, TF|SFS, SEN(statfs), "statfs" },
[329] = { 2, TD, SEN(fstatfs), "fstatfs" },
[330] = { 2, TSC, SEN(sched_setparam), "sched_setparam" },
[331] = { 2, TSC, SEN(sched_getparam), "sched_getparam" },
diff --git a/linux/arm/syscallent.h b/linux/arm/syscallent.h
index ed9ec9a..006bb55 100644
--- a/linux/arm/syscallent.h
+++ b/linux/arm/syscallent.h
@@ -88,7 +88,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -125,7 +125,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -290,7 +290,7 @@
[263] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
[264] = { 2, 0, SEN(clock_getres), "clock_getres" },
[265] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
-[266] = { 3, TF, SEN(statfs64), "statfs64" },
+[266] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[267] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[268] = { 3, TS, SEN(tgkill), "tgkill" },
[269] = { 2, TF, SEN(utimes), "utimes" },
diff --git a/linux/avr32/syscallent.h b/linux/avr32/syscallent.h
index 7f50934..3aac256 100644
--- a/linux/avr32/syscallent.h
+++ b/linux/avr32/syscallent.h
@@ -87,7 +87,7 @@
[ 59] = { 3, 0, SEN(getresuid), "getresuid" },
[ 60] = { 2, 0, SEN(setreuid), "setreuid" },
[ 61] = { 2, 0, SEN(setregid), "setregid" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -124,7 +124,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, TP, SEN(wait4), "wait4" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 0, 0, SEN(vhangup), "vhangup" },
[102] = { 2, TS, SEN(sigaltstack), "sigaltstack" },
@@ -244,7 +244,7 @@
[216] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
[217] = { 2, 0, SEN(clock_getres), "clock_getres" },
[218] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
-[219] = { 3, TF, SEN(statfs64), "statfs64" },
+[219] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[220] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[221] = { 3, TS, SEN(tgkill), "tgkill" },
[222] = { },
diff --git a/linux/bfin/syscallent.h b/linux/bfin/syscallent.h
index 800b943..80b8951 100644
--- a/linux/bfin/syscallent.h
+++ b/linux/bfin/syscallent.h
@@ -88,7 +88,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -125,7 +125,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -294,7 +294,7 @@
[266] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
[267] = { 2, 0, SEN(clock_getres), "clock_getres" },
[268] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
-[269] = { 3, TF, SEN(statfs64), "statfs64" },
+[269] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[270] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[271] = { 3, TS, SEN(tgkill), "tgkill" },
[272] = { 2, TF, SEN(utimes), "utimes" },
diff --git a/linux/crisv10/syscallent.h b/linux/crisv10/syscallent.h
index 96fb6bd..acf3917 100644
--- a/linux/crisv10/syscallent.h
+++ b/linux/crisv10/syscallent.h
@@ -60,7 +60,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -97,7 +97,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -262,7 +262,7 @@
[265] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
[266] = { 2, 0, SEN(clock_getres), "clock_getres" },
[267] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
-[268] = { 3, TF, SEN(statfs64), "statfs64" },
+[268] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[269] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[270] = { 3, TS, SEN(tgkill), "tgkill" },
[271] = { 2, TF, SEN(utimes), "utimes" },
diff --git a/linux/hppa/syscallent.h b/linux/hppa/syscallent.h
index f59ea57..9fa9248 100644
--- a/linux/hppa/syscallent.h
+++ b/linux/hppa/syscallent.h
@@ -64,7 +64,7 @@
[ 59] = { 1, 0, SEN(uname), "uname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -101,7 +101,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, TN, SEN(recv), "recv" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 2, TF, SEN(stat64), "stat64" },
[102] = { },
@@ -300,7 +300,7 @@
[295] = { 6, TM, SEN(move_pages), "move_pages" },
[296] = { 3, 0, SEN(getcpu), "getcpu" },
[297] = { 6, TD, SEN(epoll_pwait), "epoll_pwait" },
-[298] = { 3, TF, SEN(statfs64), "statfs64" },
+[298] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[299] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[300] = { 4, 0, SEN(kexec_load), "kexec_load" },
[301] = { 4, TD|TF, SEN(utimensat), "utimensat" },
diff --git a/linux/i386/syscallent.h b/linux/i386/syscallent.h
index 8ef1b1c..eb07fc1 100644
--- a/linux/i386/syscallent.h
+++ b/linux/i386/syscallent.h
@@ -88,7 +88,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -125,7 +125,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -293,7 +293,7 @@
[265] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
[266] = { 2, 0, SEN(clock_getres), "clock_getres" },
[267] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
-[268] = { 3, TF, SEN(statfs64), "statfs64" },
+[268] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[269] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[270] = { 3, TS, SEN(tgkill), "tgkill" },
[271] = { 2, TF, SEN(utimes), "utimes" },
diff --git a/linux/ia64/syscallent.h b/linux/ia64/syscallent.h
index 47b71d6..915c871 100644
--- a/linux/ia64/syscallent.h
+++ b/linux/ia64/syscallent.h
@@ -86,7 +86,7 @@
[1066] = { 3, TD, SEN(fcntl), "fcntl" },
[1067] = { 1, NF, SEN(umask), "umask" },
[1068] = { 1, TF, SEN(chroot), "chroot" },
-[1069] = { 2, 0, SEN(ustat), "ustat" },
+[1069] = { 2, SFS, SEN(ustat), "ustat" },
[1070] = { 2, TD, SEN(dup2), "dup2" },
[1071] = { 2, 0, SEN(setreuid), "setreuid" },
[1072] = { 2, 0, SEN(setregid), "setregid" },
@@ -120,7 +120,7 @@
[1100] = { 3, TD, SEN(fchown), "fchown" },
[1101] = { 2, 0, SEN(getpriority), "getpriority" },
[1102] = { 3, 0, SEN(setpriority), "setpriority" },
-[1103] = { 2, TF, SEN(statfs), "statfs" },
+[1103] = { 2, TF|SFS, SEN(statfs), "statfs" },
[1104] = { 2, TD, SEN(fstatfs), "fstatfs" },
[1105] = { 0, NF, SEN(gettid), "gettid" },
[1106] = { 3, TI, SEN(semget), "semget" },
@@ -275,7 +275,7 @@
[1255] = { 2, 0, SEN(clock_getres), "clock_getres" },
[1256] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
[1257] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
-[1258] = { 3, TF, SEN(statfs64), "statfs64" },
+[1258] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[1259] = { 6, TM, SEN(mbind), "mbind" },
[1260] = { 5, TM, SEN(get_mempolicy), "get_mempolicy" },
[1261] = { 3, TM, SEN(set_mempolicy), "set_mempolicy" },
diff --git a/linux/m68k/syscallent.h b/linux/m68k/syscallent.h
index 8e7dd97..149f06f 100644
--- a/linux/m68k/syscallent.h
+++ b/linux/m68k/syscallent.h
@@ -88,7 +88,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -125,7 +125,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -288,7 +288,7 @@
[260] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
[261] = { 2, 0, SEN(clock_getres), "clock_getres" },
[262] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
-[263] = { 3, TF, SEN(statfs64), "statfs64" },
+[263] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[264] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[265] = { 3, TS, SEN(tgkill), "tgkill" },
[266] = { 2, TF, SEN(utimes), "utimes" },
diff --git a/linux/microblaze/syscallent.h b/linux/microblaze/syscallent.h
index 2a59eb3..f85de2f 100644
--- a/linux/microblaze/syscallent.h
+++ b/linux/microblaze/syscallent.h
@@ -88,7 +88,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -125,7 +125,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -293,7 +293,7 @@
[265] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
[266] = { 2, 0, SEN(clock_getres), "clock_getres" },
[267] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
-[268] = { 3, TF, SEN(statfs64), "statfs64" },
+[268] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[269] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[270] = { 3, TS, SEN(tgkill), "tgkill" },
[271] = { 2, TF, SEN(utimes), "utimes" },
diff --git a/linux/mips/syscallent-compat.h b/linux/mips/syscallent-compat.h
index 82a373b..c5214b7 100644
--- a/linux/mips/syscallent-compat.h
+++ b/linux/mips/syscallent-compat.h
@@ -33,7 +33,7 @@
[ 32] = { 0, 0, SEN(printargs), "svr4_gtty" },
[ 33] = { 0, 0, SEN(printargs), "svr4_access" },
[ 34] = { 0, 0, SEN(printargs), "svr4_nice" },
-[ 35] = { 0, 0, SEN(printargs), "svr4_statfs" },
+[ 35] = { 0, SFS, SEN(printargs), "svr4_statfs" },
[ 36] = { 0, 0, SEN(printargs), "svr4_sync" },
[ 37] = { 0, 0, SEN(printargs), "svr4_kill" },
[ 38] = { 0, 0, SEN(printargs), "svr4_fstatfs" },
@@ -184,7 +184,7 @@
[1032] = { 0, 0, SEN(printargs), "sysv_gtty" },
[1033] = { 0, 0, SEN(printargs), "sysv_access" },
[1034] = { 0, 0, SEN(printargs), "sysv_nice" },
-[1035] = { 0, 0, SEN(printargs), "sysv_statfs" },
+[1035] = { 0, SFS, SEN(printargs), "sysv_statfs" },
[1036] = { 0, 0, SEN(printargs), "sysv_sync" },
[1037] = { 0, 0, SEN(printargs), "sysv_kill" },
[1038] = { 0, 0, SEN(printargs), "sysv_fstatfs" },
@@ -494,7 +494,7 @@
[2157] = { 0, 0, SEN(printargs), "bsd43_nfs_mount" },
[2158] = { 0, 0, SEN(printargs), "bsd43_nfs_svc" },
[2159] = { 0, 0, SEN(printargs), "bsd43_getdirentries" },
-[2160] = { 0, 0, SEN(printargs), "bsd43_statfs" },
+[2160] = { 0, SFS, SEN(printargs), "bsd43_statfs" },
[2161] = { 0, 0, SEN(printargs), "bsd43_fstatfs" },
[2162] = { 0, 0, SEN(printargs), "bsd43_unmount" },
[2163] = { 0, 0, SEN(printargs), "bsd43_async_daemon" },
@@ -562,7 +562,7 @@
[3032] = { 0, 0, SEN(printargs), "posix_gtty" },
[3033] = { 0, 0, SEN(printargs), "posix_access" },
[3034] = { 0, 0, SEN(printargs), "posix_nice" },
-[3035] = { 0, 0, SEN(printargs), "posix_statfs" },
+[3035] = { 0, SFS, SEN(printargs), "posix_statfs" },
[3036] = { 0, 0, SEN(printargs), "posix_sync" },
[3037] = { 0, 0, SEN(printargs), "posix_kill" },
[3038] = { 0, 0, SEN(printargs), "posix_fstatfs" },
diff --git a/linux/mips/syscallent-n32.h b/linux/mips/syscallent-n32.h
index 052af4f..dfa3b1e 100644
--- a/linux/mips/syscallent-n32.h
+++ b/linux/mips/syscallent-n32.h
@@ -133,8 +133,8 @@
[6130] = { 2, TF, SEN(utime), "utime" },
[6131] = { 3, TF, SEN(mknod), "mknod" },
[6132] = { 1, NF, SEN(personality), "personality" },
-[6133] = { 2, 0, SEN(ustat), "ustat" },
-[6134] = { 2, TF, SEN(statfs), "statfs" },
+[6133] = { 2, SFS, SEN(ustat), "ustat" },
+[6134] = { 2, TF|SFS, SEN(statfs), "statfs" },
[6135] = { 2, TD, SEN(fstatfs), "fstatfs" },
[6136] = { 3, 0, SEN(sysfs), "sysfs" },
[6137] = { 2, 0, SEN(getpriority), "getpriority" },
@@ -217,7 +217,7 @@
[6214] = { 0, 0, SEN(restart_syscall), "restart_syscall" },
[6215] = { 4, TI, SEN(semtimedop), "semtimedop" },
[6216] = { 4, TD, SEN(fadvise64_64), "fadvise64" },
-[6217] = { 3, TF, SEN(statfs64), "statfs64" },
+[6217] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[6218] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[6219] = { 4, TD|TN, SEN(sendfile64), "sendfile64" },
[6220] = { 3, 0, SEN(timer_create), "timer_create" },
diff --git a/linux/mips/syscallent-n64.h b/linux/mips/syscallent-n64.h
index fdd778b..44c2acd 100644
--- a/linux/mips/syscallent-n64.h
+++ b/linux/mips/syscallent-n64.h
@@ -133,8 +133,8 @@
[5130] = { 2, TF, SEN(utime), "utime" },
[5131] = { 3, TF, SEN(mknod), "mknod" },
[5132] = { 1, NF, SEN(personality), "personality" },
-[5133] = { 2, 0, SEN(ustat), "ustat" },
-[5134] = { 2, TF, SEN(statfs), "statfs" },
+[5133] = { 2, SFS, SEN(ustat), "ustat" },
+[5134] = { 2, TF|SFS, SEN(statfs), "statfs" },
[5135] = { 2, TD, SEN(fstatfs), "fstatfs" },
[5136] = { 3, 0, SEN(sysfs), "sysfs" },
[5137] = { 2, 0, SEN(getpriority), "getpriority" },
diff --git a/linux/mips/syscallent-o32.h b/linux/mips/syscallent-o32.h
index 509a719..06219fa 100644
--- a/linux/mips/syscallent-o32.h
+++ b/linux/mips/syscallent-o32.h
@@ -62,7 +62,7 @@
[4059] = { 1, 0, SEN(oldolduname), "oldolduname" },
[4060] = { 1, NF, SEN(umask), "umask" },
[4061] = { 1, TF, SEN(chroot), "chroot" },
-[4062] = { 2, 0, SEN(ustat), "ustat" },
+[4062] = { 2, SFS, SEN(ustat), "ustat" },
[4063] = { 2, TD, SEN(dup2), "dup2" },
[4064] = { 0, NF, SEN(getppid), "getppid" },
[4065] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -99,7 +99,7 @@
[4096] = { 2, 0, SEN(getpriority), "getpriority" },
[4097] = { 3, 0, SEN(setpriority), "setpriority" },
[4098] = { 0, 0, SEN(profil), "profil" },
-[4099] = { 2, TF, SEN(statfs), "statfs" },
+[4099] = { 2, TF|SFS, SEN(statfs), "statfs" },
[4100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[4101] = { 3, 0, SEN(ioperm), "ioperm" },
[4102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -255,7 +255,7 @@
[4252] = { 1, 0, SEN(set_tid_address), "set_tid_address" },
[4253] = { 0, 0, SEN(restart_syscall), "restart_syscall" },
[4254] = { 7, TD, SEN(fadvise64_64), "fadvise64" },
-[4255] = { 3, TF, SEN(statfs64), "statfs64" },
+[4255] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[4256] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[4257] = { 3, 0, SEN(timer_create), "timer_create" },
[4258] = { 4, 0, SEN(timer_settime), "timer_settime" },
diff --git a/linux/powerpc/syscallent.h b/linux/powerpc/syscallent.h
index 1431f8a..618218c 100644
--- a/linux/powerpc/syscallent.h
+++ b/linux/powerpc/syscallent.h
@@ -88,7 +88,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -125,7 +125,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -278,7 +278,7 @@
[249] = { 2, 0, SEN(printargs), "swapcontext" },
[250] = { 3, TS, SEN(tgkill), "tgkill" },
[251] = { 2, TF, SEN(utimes), "utimes" },
-[252] = { 3, TF, SEN(statfs64), "statfs64" },
+[252] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[253] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[254] = { 6, TD, SEN(fadvise64_64), "fadvise64_64" },
[255] = { 1, 0, SEN(printargs), "rtas" },
diff --git a/linux/powerpc64/syscallent.h b/linux/powerpc64/syscallent.h
index eae3b57..20f6e8e 100644
--- a/linux/powerpc64/syscallent.h
+++ b/linux/powerpc64/syscallent.h
@@ -88,7 +88,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -125,7 +125,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -273,7 +273,7 @@
[249] = { 2, 0, SEN(printargs), "swapcontext" },
[250] = { 3, TS, SEN(tgkill), "tgkill" },
[251] = { 2, TF, SEN(utimes), "utimes" },
-[252] = { 3, TF, SEN(statfs64), "statfs64" },
+[252] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[253] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[254] = { },
[255] = { 1, 0, SEN(printargs), "rtas" },
diff --git a/linux/s390/syscallent.h b/linux/s390/syscallent.h
index 105e511..d3ba5fe 100644
--- a/linux/s390/syscallent.h
+++ b/linux/s390/syscallent.h
@@ -90,7 +90,7 @@
[ 59] = { },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -127,7 +127,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -293,7 +293,7 @@
[262] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
[263] = { 5, 0, SEN(vserver), "vserver" },
[264] = { 6, TD, SEN(fadvise64_64), "fadvise64_64" },
-[265] = { 3, TF, SEN(statfs64), "statfs64" },
+[265] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[266] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[267] = { 5, TM|SI, SEN(remap_file_pages), "remap_file_pages" },
[268] = { 6, TM, SEN(mbind), "mbind" },
diff --git a/linux/s390x/syscallent.h b/linux/s390x/syscallent.h
index d5b5459..80b68d7 100644
--- a/linux/s390x/syscallent.h
+++ b/linux/s390x/syscallent.h
@@ -89,7 +89,7 @@
[ 59] = { },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -121,7 +121,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -277,7 +277,7 @@
[262] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
[263] = { 5, 0, SEN(vserver), "vserver" },
[264] = { },
-[265] = { 3, TF, SEN(statfs64), "statfs64" },
+[265] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[266] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[267] = { 5, TM|SI, SEN(remap_file_pages), "remap_file_pages" },
[268] = { 6, TM, SEN(mbind), "mbind" },
diff --git a/linux/sh/syscallent.h b/linux/sh/syscallent.h
index 1388416..41de292 100644
--- a/linux/sh/syscallent.h
+++ b/linux/sh/syscallent.h
@@ -90,7 +90,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -127,7 +127,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -293,7 +293,7 @@
[265] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
[266] = { 2, 0, SEN(clock_getres), "clock_getres" },
[267] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
-[268] = { 3, TF, SEN(statfs64), "statfs64" },
+[268] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[269] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[270] = { 3, TS, SEN(tgkill), "tgkill" },
[271] = { 2, TF, SEN(utimes), "utimes" },
diff --git a/linux/sh64/syscallent.h b/linux/sh64/syscallent.h
index e935104..c5de8e1 100644
--- a/linux/sh64/syscallent.h
+++ b/linux/sh64/syscallent.h
@@ -88,7 +88,7 @@
[ 59] = { 1, 0, SEN(oldolduname), "oldolduname" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
-[ 62] = { 2, 0, SEN(ustat), "ustat" },
+[ 62] = { 2, SFS, SEN(ustat), "ustat" },
[ 63] = { 2, TD, SEN(dup2), "dup2" },
[ 64] = { 0, NF, SEN(getppid), "getppid" },
[ 65] = { 0, 0, SEN(getpgrp), "getpgrp" },
@@ -125,7 +125,7 @@
[ 96] = { 2, 0, SEN(getpriority), "getpriority" },
[ 97] = { 3, 0, SEN(setpriority), "setpriority" },
[ 98] = { 4, 0, SEN(profil), "profil" },
-[ 99] = { 2, TF, SEN(statfs), "statfs" },
+[ 99] = { 2, TF|SFS, SEN(statfs), "statfs" },
[100] = { 2, TD, SEN(fstatfs), "fstatfs" },
[101] = { 3, 0, SEN(ioperm), "ioperm" },
[102] = { 2, TD, SEN(socketcall), "socketcall" },
@@ -319,7 +319,7 @@
[293] = { 2, 0, SEN(clock_gettime), "clock_gettime" },
[294] = { 2, 0, SEN(clock_getres), "clock_getres" },
[295] = { 4, 0, SEN(clock_nanosleep), "clock_nanosleep" },
-[296] = { 3, TF, SEN(statfs64), "statfs64" },
+[296] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[297] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[298] = { 3, TS, SEN(tgkill), "tgkill" },
[299] = { 2, TF, SEN(utimes), "utimes" },
diff --git a/linux/sparc/syscallent.h b/linux/sparc/syscallent.h
index 30d8819..3988688 100644
--- a/linux/sparc/syscallent.h
+++ b/linux/sparc/syscallent.h
@@ -155,7 +155,7 @@
[154] = { 3, TD, SEN(getdents64), "getdents64" },
[155] = { 3, TD, SEN(fcntl64), "fcntl64" },
[156] = { 2, TD, SEN(inotify_rm_watch), "inotify_rm_watch" },
-[157] = { 2, TF, SEN(statfs), "statfs" },
+[157] = { 2, TF|SFS, SEN(statfs), "statfs" },
[158] = { 2, TD, SEN(fstatfs), "fstatfs" },
[159] = { 1, TF, SEN(umount), "umount" },
[160] = { 3, TSC, SEN(sched_setaffinity), "sched_set_affinity" },
@@ -166,7 +166,7 @@
[165] = { 4, TF, SEN(quotactl), "quotactl" },
[166] = { 1, 0, SEN(set_tid_address), "set_tid_address" },
[167] = { 5, TF, SEN(mount), "mount" },
-[168] = { 2, 0, SEN(ustat), "ustat" },
+[168] = { 2, SFS, SEN(ustat), "ustat" },
[169] = { 5, TF, SEN(setxattr), "setxattr" },
[170] = { 5, TF, SEN(setxattr), "lsetxattr" },
[171] = { 5, TD, SEN(fsetxattr), "fsetxattr" },
@@ -232,7 +232,7 @@
[231] = { 1, 0, SEN(time), "time" },
[232] = { 6, TD, SEN(splice), "splice" },
[233] = { 1, 0, SEN(stime), "stime" },
-[234] = { 3, TF, SEN(statfs64), "statfs64" },
+[234] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[235] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[236] = { 5, TD, SEN(llseek), "_llseek" },
[237] = { 2, TM, SEN(mlock), "mlock" },
diff --git a/linux/sparc64/syscallent.h b/linux/sparc64/syscallent.h
index 1137a3e..530faab 100644
--- a/linux/sparc64/syscallent.h
+++ b/linux/sparc64/syscallent.h
@@ -153,7 +153,7 @@
[154] = { 3, TD, SEN(getdents64), "getdents64" },
[155] = { },
[156] = { 2, TD, SEN(inotify_rm_watch), "inotify_rm_watch" },
-[157] = { 2, TF, SEN(statfs), "statfs" },
+[157] = { 2, TF|SFS, SEN(statfs), "statfs" },
[158] = { 2, TD, SEN(fstatfs), "fstatfs" },
[159] = { 1, TF, SEN(umount), "umount" },
[160] = { 3, TSC, SEN(sched_setaffinity), "sched_set_affinity" },
@@ -164,7 +164,7 @@
[165] = { 4, TF, SEN(quotactl), "quotactl" },
[166] = { 1, 0, SEN(set_tid_address), "set_tid_address" },
[167] = { 5, TF, SEN(mount), "mount" },
-[168] = { 2, 0, SEN(ustat), "ustat" },
+[168] = { 2, SFS, SEN(ustat), "ustat" },
[169] = { 5, TF, SEN(setxattr), "setxattr" },
[170] = { 5, TF, SEN(setxattr), "lsetxattr" },
[171] = { 5, TD, SEN(fsetxattr), "fsetxattr" },
@@ -230,7 +230,7 @@
[231] = { },
[232] = { 6, TD, SEN(splice), "splice" },
[233] = { 1, 0, SEN(stime), "stime" },
-[234] = { 3, TF, SEN(statfs64), "statfs64" },
+[234] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[235] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[236] = { 5, TD, SEN(llseek), "_llseek" },
[237] = { 2, TM, SEN(mlock), "mlock" },
diff --git a/linux/x32/syscallent.h b/linux/x32/syscallent.h
index 30a684a..088161f 100644
--- a/linux/x32/syscallent.h
+++ b/linux/x32/syscallent.h
@@ -134,8 +134,8 @@
[133] = { 3, TF, SEN(mknod), "mknod" },
[134] = { 1, TF, SEN(printargs), "64:uselib" },
[135] = { 1, NF, SEN(personality), "personality" },
-[136] = { 2, 0, SEN(ustat), "ustat" },
-[137] = { 2, TF, SEN(statfs), "statfs" },
+[136] = { 2, SFS, SEN(ustat), "ustat" },
+[137] = { 2, TF|SFS, SEN(statfs), "statfs" },
[138] = { 2, TD, SEN(fstatfs), "fstatfs" },
[139] = { 3, 0, SEN(sysfs), "sysfs" },
[140] = { 2, 0, SEN(getpriority), "getpriority" },
diff --git a/linux/x86_64/syscallent.h b/linux/x86_64/syscallent.h
index 62960d2..03cd44a 100644
--- a/linux/x86_64/syscallent.h
+++ b/linux/x86_64/syscallent.h
@@ -134,8 +134,8 @@
[133] = { 3, TF, SEN(mknod), "mknod" },
[134] = { 1, TF, SEN(uselib), "uselib" },
[135] = { 1, NF, SEN(personality), "personality" },
-[136] = { 2, 0, SEN(ustat), "ustat" },
-[137] = { 2, TF, SEN(statfs), "statfs" },
+[136] = { 2, SFS, SEN(ustat), "ustat" },
+[137] = { 2, TF|SFS, SEN(statfs), "statfs" },
[138] = { 2, TD, SEN(fstatfs), "fstatfs" },
[139] = { 3, 0, SEN(sysfs), "sysfs" },
[140] = { 2, 0, SEN(getpriority), "getpriority" },
diff --git a/linux/xtensa/syscallent.h b/linux/xtensa/syscallent.h
index 63995bc..dc956b0 100644
--- a/linux/xtensa/syscallent.h
+++ b/linux/xtensa/syscallent.h
@@ -175,10 +175,10 @@
[180] = { 1, NF, SEN(setfsuid), "setfsuid" },
[181] = { 1, NF, SEN(setfsgid), "setfsgid" },
[182] = { 3, 0, SEN(sysfs), "sysfs" },
-[183] = { 2, 0, SEN(ustat), "ustat" },
-[184] = { 2, TF, SEN(statfs), "statfs" },
+[183] = { 2, SFS, SEN(ustat), "ustat" },
+[184] = { 2, TF|SFS, SEN(statfs), "statfs" },
[185] = { 2, TD, SEN(fstatfs), "fstatfs" },
-[186] = { 3, TF, SEN(statfs64), "statfs64" },
+[186] = { 3, TF|SFS, SEN(statfs64), "statfs64" },
[187] = { 3, TD, SEN(fstatfs64), "fstatfs64" },
[188] = { 2, 0, SEN(setrlimit), "setrlimit" },
[189] = { 2, 0, SEN(getrlimit), "getrlimit" },
diff --git a/qualify.c b/qualify.c
index b5023f2..692f7ec 100644
--- a/qualify.c
+++ b/qualify.c
@@ -220,6 +220,7 @@ lookup_class(const char *s)
{ "%ipc", TRACE_IPC },
{ "%network", TRACE_NETWORK },
{ "%sched", TRACE_SCHED },
+ { "%statfs", TRACE_STATFS },
};
unsigned int i;
diff --git a/strace.1 b/strace.1
index 9b69ec2..155d215 100644
--- a/strace.1
+++ b/strace.1
@@ -429,6 +429,9 @@ Trace all memory mapping related system calls.
.BR "\-e\ trace" = %sched
Trace all scheduler-related (sched_*) system calls.
.TP
+.BR "\-e\ trace" = %statfs
+Trace all statfs-related (*statfs* or ustat) system calls.
+.TP
\fB\-e\ abbrev\fR=\,\fIset\fR
Abbreviate the output from printing each member of large structures.
The default is
diff --git a/syscall.c b/syscall.c
index 569055f..5925cb8 100644
--- a/syscall.c
+++ b/syscall.c
@@ -77,6 +77,7 @@
#define TS TRACE_SIGNAL
#define TM TRACE_MEMORY
#define TSC TRACE_SCHED
+#define SFS TRACE_STATFS
#define NF SYSCALL_NEVER_FAILS
#define MA MAX_ARGS
#define SI STACKTRACE_INVALIDATE_CACHE
@@ -113,6 +114,7 @@ static const struct_sysent sysent2[] = {
#undef TS
#undef TM
#undef TSC
+#undef SFS
#undef NF
#undef MA
#undef SI
diff --git a/sysent.h b/sysent.h
index f4eaa93..42cdbc5 100644
--- a/sysent.h
+++ b/sysent.h
@@ -22,5 +22,6 @@ typedef struct sysent {
#define TRACE_INDIRECT_SUBCALL 02000 /* Syscall is an indirect socket/ipc subcall. */
#define COMPAT_SYSCALL_TYPES 04000 /* A compat syscall that uses compat types. */
#define TRACE_SCHED 010000 /* Trace scheduler-related syscalls. */
+#define TRACE_STATFS 040000 /* Trace statfs-related syscalls. */
#endif /* !STRACE_SYSENT_H */
diff --git a/tests/Makefile.am b/tests/Makefile.am
index c5c124c..a4f34057 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -733,6 +733,7 @@ DECODER_TESTS = \
rt_sigtimedwait.test \
rt_tgsigqueueinfo.test \
sched.test \
+ trace_statfs.test \
sched_get_priority_mxx.test \
sched_rr_get_interval.test \
sched_xetaffinity.test \
diff --git a/tests/ksysent.c b/tests/ksysent.c
index 252feff..301d6e4 100644
--- a/tests/ksysent.c
+++ b/tests/ksysent.c
@@ -41,6 +41,7 @@
#define TS 0
#define TM 0
#define TSC 0
+#define SFS 0
#define NF 0
#define MA 0
#define SI 0
diff --git a/tests/nsyscalls.c b/tests/nsyscalls.c
index c2bdb20..881fc86 100644
--- a/tests/nsyscalls.c
+++ b/tests/nsyscalls.c
@@ -42,6 +42,7 @@
#define TS 0
#define TM 0
#define TSC 0
+#define SFS 0
#define NF 0
#define MA 0
#define SI 0
diff --git a/tests/trace_statfs.test b/tests/trace_statfs.test
new file mode 100755
index 0000000..abf97b3
--- /dev/null
+++ b/tests/trace_statfs.test
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+# Check how statfs-related syscalls are traced.
+#
+# Copyright (c) 2017 The strace developers.
+# 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.
+
+STATFS_TESTS='33 ustat
+17 statfs'
+
+NON_STATFS_TESTS='11 fchdir
+27 futex
+10 fsync'
+
+. "${srcdir=.}/init.sh"
+
+echo "$STATFS_TESTS" | while read w i
+do
+ run_prog ./$i > /dev/null
+ run_strace -a$w -e%statfs ./$i > "$EXP"
+ match_diff "$LOG" "$EXP"
+done
+
+echo '+++ exited with 0 +++' > "$EXP"
+
+echo "$NON_STATFS_TESTS" | while read w i
+do
+ run_prog ./$i > /dev/null
+ run_strace -a$w -e%statfs ./$i > /dev/null
+ match_diff "$LOG" "$EXP"
+done
+
+rm "$EXP"
--
2.7.4
------------------------------------------------------------------------------
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