From: Abhishek Tiwari Date: Wed, 29 Mar 2017 09:03:34 +0000 (+0530) Subject: Implement -e trace=%statfs option X-Git-Tag: v4.17~125 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2fa95ae1697654d80b85c992a6890442a17b7d69;p=strace Implement -e trace=%statfs option linux/*/syscallent*.h part is modified automatically by: sed -i 's/TF\(,[[:space:]]*SEN.*[_"]statv\?fs\)/TF|TSF\1/' \ linux/*/syscallent*.h [ldv: rewritten trace_statfs.test using sched.test as a template] * sysent.h (TRACE_STATFS): New macro. * syscall.c: Alias TSF to TRACE_STATFS around syscallent.h inclusion. * qualify.c (lookup_class): Add SCHED_STATFS for "%statfs". * strace.1 (.SS Filtering): Add information about %statfs syscall class. * NEWS: Mention this change. * linux/64/syscallent.h (statfs): Add TSF flag. * linux/aarch64/syscallent.h: Likewise. * linux/x32/syscallent.h: Likewise. * linux/x86_64/syscallent.h: Likewise. * linux/mips/syscallent-n64.h: Likewise. * linux/32/syscallent.h (statfs64): Likewise. * linux/arm/syscallent.h (statfs, statfs64): 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-n32.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/xtensa/syscallent.h: Likewise. * linux/alpha/syscallent.h (osf_statfs, osf_statfs64, statfs): Likewise. * linux/mips/syscallent-compat.h (*_statfs, *_statvfs): Likewise. * tests/trace_statfs.test: New test. * tests/Makefile.am (DECODER_TESTS): Add it. * tests/ksysent.c (TSF): New macro, defined to 0. * tests/nsyscalls.c: Likewise. --- diff --git a/NEWS b/NEWS index 18d217ec..80e2031a 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,8 @@ Noteworthy changes in release ?.?? (????-??-??) * Enhanced decoding of sched_setattr syscall. * Added -e trace=%sched option for tracing sched_* syscalls. * Added -e trace=%clock option for tracing clock_* syscalls. + * Added -e trace=%statfs option for tracing statfs, statfs64 and statvfs + syscalls. * Implemented decoding of signal mask in rt_sigreturn syscall on alpha, arc, arm, avr32, bfin, cris, hppa, m68k, metag, microblaze, mips, nios2, or1k, powerpc, powerpc64, riscv, sh, sh64, sparc, sparc64, tile, x86, and xtensa diff --git a/linux/32/syscallent.h b/linux/32/syscallent.h index 236ac10e..530645f3 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|TSF, 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 e263bb01..9d2edecf 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|TSF, 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 6b23f8c2..e760fdc4 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|TSF, SEN(statfs), "statfs" }, [1057] = { 3, TD, SEN(lseek), "lseek" }, [1058] = { 6, TD|TM|SI, SEN(mmap), "mmap" }, [1059] = { 1, 0, SEN(alarm), "alarm" }, diff --git a/linux/alpha/syscallent.h b/linux/alpha/syscallent.h index 8a427308..e8d21f3f 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, TF, SEN(osf_statfs), "osf_statfs" }, +[160] = { 3, TF|TSF, SEN(osf_statfs), "osf_statfs" }, [161] = { 3, TD, SEN(osf_fstatfs), "osf_fstatfs" }, [162] = { }, [163] = { 5, 0, SEN(printargs), "osf_asynch_daemon" }, /* not implemented */ @@ -230,7 +230,7 @@ [224] = { 2, TF, SEN(printargs), "osf_stat" }, [225] = { 2, TF, SEN(printargs), "osf_lstat" }, [226] = { 2, TD, SEN(printargs), "osf_fstat" }, -[227] = { 3, TF, SEN(osf_statfs), "osf_statfs64" }, +[227] = { 3, TF|TSF, SEN(osf_statfs), "osf_statfs64" }, [228] = { 3, TD, SEN(osf_fstatfs), "osf_fstatfs64" }, [229 ... 232] = { }, [233] = { 1, 0, SEN(getpgid), "getpgid" }, @@ -291,7 +291,7 @@ [325] = { 1, NF, SEN(setfsuid), "setfsuid" }, [326] = { 1, NF, SEN(setfsgid), "setfsgid" }, [327] = { 2, 0, SEN(ustat), "ustat" }, -[328] = { 2, TF, SEN(statfs), "statfs" }, +[328] = { 2, TF|TSF, 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 6444e4ff..749e02e1 100644 --- a/linux/arm/syscallent.h +++ b/linux/arm/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_gettime), "clock_gettime" }, [264] = { 2, TCL, SEN(clock_getres), "clock_getres" }, [265] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, -[266] = { 3, TF, SEN(statfs64), "statfs64" }, +[266] = { 3, TF|TSF, 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 84e409d1..9388cdbc 100644 --- a/linux/avr32/syscallent.h +++ b/linux/avr32/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_gettime), "clock_gettime" }, [217] = { 2, TCL, SEN(clock_getres), "clock_getres" }, [218] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, -[219] = { 3, TF, SEN(statfs64), "statfs64" }, +[219] = { 3, TF|TSF, 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 83e49c20..c7fab128 100644 --- a/linux/bfin/syscallent.h +++ b/linux/bfin/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_gettime), "clock_gettime" }, [267] = { 2, TCL, SEN(clock_getres), "clock_getres" }, [268] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, -[269] = { 3, TF, SEN(statfs64), "statfs64" }, +[269] = { 3, TF|TSF, 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 a66792d0..42a91f3e 100644 --- a/linux/crisv10/syscallent.h +++ b/linux/crisv10/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_gettime), "clock_gettime" }, [266] = { 2, TCL, SEN(clock_getres), "clock_getres" }, [267] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, -[268] = { 3, TF, SEN(statfs64), "statfs64" }, +[268] = { 3, TF|TSF, 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 f95944d2..28cfd9d3 100644 --- a/linux/hppa/syscallent.h +++ b/linux/hppa/syscallent.h @@ -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|TSF, 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|TSF, 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 7966eb1d..6222ac55 100644 --- a/linux/i386/syscallent.h +++ b/linux/i386/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_gettime), "clock_gettime" }, [266] = { 2, TCL, SEN(clock_getres), "clock_getres" }, [267] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, -[268] = { 3, TF, SEN(statfs64), "statfs64" }, +[268] = { 3, TF|TSF, 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 c226bc6e..110622cc 100644 --- a/linux/ia64/syscallent.h +++ b/linux/ia64/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_getres), "clock_getres" }, [1256] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, [1257] = { 3, TD, SEN(fstatfs64), "fstatfs64" }, -[1258] = { 3, TF, SEN(statfs64), "statfs64" }, +[1258] = { 3, TF|TSF, 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 0364ab97..b22f6a18 100644 --- a/linux/m68k/syscallent.h +++ b/linux/m68k/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_gettime), "clock_gettime" }, [261] = { 2, TCL, SEN(clock_getres), "clock_getres" }, [262] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, -[263] = { 3, TF, SEN(statfs64), "statfs64" }, +[263] = { 3, TF|TSF, 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 e7cb98c5..2b873c79 100644 --- a/linux/microblaze/syscallent.h +++ b/linux/microblaze/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_gettime), "clock_gettime" }, [266] = { 2, TCL, SEN(clock_getres), "clock_getres" }, [267] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, -[268] = { 3, TF, SEN(statfs64), "statfs64" }, +[268] = { 3, TF|TSF, 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 5d449184..c30b00c9 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, TF, SEN(printargs), "svr4_statfs" }, +[ 35] = { 0, TF|TSF, SEN(printargs), "svr4_statfs" }, [ 36] = { 0, 0, SEN(printargs), "svr4_sync" }, [ 37] = { 0, 0, SEN(printargs), "svr4_kill" }, [ 38] = { 0, TD, SEN(printargs), "svr4_fstatfs" }, @@ -96,7 +96,7 @@ [ 100] = { 0, 0, SEN(printargs), "svr4_setcontext" }, [ 101] = { 0, 0, SEN(printargs), "svr4_evsys" }, [ 102] = { 0, 0, SEN(printargs), "svr4_evtrapret" }, -[ 103] = { 0, TF, SEN(printargs), "svr4_statvfs" }, +[ 103] = { 0, TF|TSF, SEN(printargs), "svr4_statvfs" }, [ 104] = { 0, TD, SEN(printargs), "svr4_fstatvfs" }, [ 105] = { }, [ 106] = { 0, 0, SEN(printargs), "svr4_nfssys" }, @@ -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, TF, SEN(printargs), "sysv_statfs" }, +[1035] = { 0, TF|TSF, SEN(printargs), "sysv_statfs" }, [1036] = { 0, 0, SEN(printargs), "sysv_sync" }, [1037] = { 0, 0, SEN(printargs), "sysv_kill" }, [1038] = { 0, TD, SEN(printargs), "sysv_fstatfs" }, @@ -318,7 +318,7 @@ [1171] = { 0, 0, SEN(printargs), "sysv_sigstack" }, [1172] = { 0, 0, SEN(printargs), "sysv_sigaltstack" }, [1173] = { 0, 0, SEN(printargs), "sysv_sigsendset" }, -[1174] = { 0, TF, SEN(printargs), "sysv_statvfs" }, +[1174] = { 0, TF|TSF, SEN(printargs), "sysv_statvfs" }, [1175] = { 0, TD, SEN(printargs), "sysv_fstatvfs" }, [1176] = { 0, 0, SEN(printargs), "sysv_getpmsg" }, [1177] = { 0, 0, SEN(printargs), "sysv_putpmsg" }, @@ -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, TF, SEN(printargs), "bsd43_statfs" }, +[2160] = { 0, TF|TSF, SEN(printargs), "bsd43_statfs" }, [2161] = { 0, TD, 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, TF, SEN(printargs), "posix_statfs" }, +[3035] = { 0, TF|TSF, SEN(printargs), "posix_statfs" }, [3036] = { 0, 0, SEN(printargs), "posix_sync" }, [3037] = { 0, 0, SEN(printargs), "posix_kill" }, [3038] = { 0, TD, SEN(printargs), "posix_fstatfs" }, diff --git a/linux/mips/syscallent-n32.h b/linux/mips/syscallent-n32.h index bce788fb..9a08c898 100644 --- a/linux/mips/syscallent-n32.h +++ b/linux/mips/syscallent-n32.h @@ -134,7 +134,7 @@ [6131] = { 3, TF, SEN(mknod), "mknod" }, [6132] = { 1, NF, SEN(personality), "personality" }, [6133] = { 2, 0, SEN(ustat), "ustat" }, -[6134] = { 2, TF, SEN(statfs), "statfs" }, +[6134] = { 2, TF|TSF, 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|TSF, 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 37c20240..7f8273a7 100644 --- a/linux/mips/syscallent-n64.h +++ b/linux/mips/syscallent-n64.h @@ -134,7 +134,7 @@ [5131] = { 3, TF, SEN(mknod), "mknod" }, [5132] = { 1, NF, SEN(personality), "personality" }, [5133] = { 2, 0, SEN(ustat), "ustat" }, -[5134] = { 2, TF, SEN(statfs), "statfs" }, +[5134] = { 2, TF|TSF, 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 4e5797ea..58ba6211 100644 --- a/linux/mips/syscallent-o32.h +++ b/linux/mips/syscallent-o32.h @@ -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|TSF, 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|TSF, 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 86e3a3f6..d8dd2f63 100644 --- a/linux/powerpc/syscallent.h +++ b/linux/powerpc/syscallent.h @@ -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|TSF, 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|TSF, 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 77f91fa6..18d5af2a 100644 --- a/linux/powerpc64/syscallent.h +++ b/linux/powerpc64/syscallent.h @@ -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|TSF, 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|TSF, 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 3b5dc5b0..009a700b 100644 --- a/linux/s390/syscallent.h +++ b/linux/s390/syscallent.h @@ -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|TSF, 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, TCL, 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|TSF, 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 0e82385a..d71b0935 100644 --- a/linux/s390x/syscallent.h +++ b/linux/s390x/syscallent.h @@ -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|TSF, SEN(statfs), "statfs" }, [100] = { 2, TD, SEN(fstatfs), "fstatfs" }, [101] = { }, [102] = { 2, TD, SEN(socketcall), "socketcall" }, @@ -277,7 +277,7 @@ [262] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, [263] = { 5, 0, SEN(vserver), "vserver" }, [264] = { }, -[265] = { 3, TF, SEN(statfs64), "statfs64" }, +[265] = { 3, TF|TSF, 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 92ec4224..7e95c84d 100644 --- a/linux/sh/syscallent.h +++ b/linux/sh/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_gettime), "clock_gettime" }, [266] = { 2, TCL, SEN(clock_getres), "clock_getres" }, [267] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, -[268] = { 3, TF, SEN(statfs64), "statfs64" }, +[268] = { 3, TF|TSF, 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 cf64fe4e..3d8f9806 100644 --- a/linux/sh64/syscallent.h +++ b/linux/sh64/syscallent.h @@ -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|TSF, 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, TCL, SEN(clock_gettime), "clock_gettime" }, [294] = { 2, TCL, SEN(clock_getres), "clock_getres" }, [295] = { 4, TCL, SEN(clock_nanosleep), "clock_nanosleep" }, -[296] = { 3, TF, SEN(statfs64), "statfs64" }, +[296] = { 3, TF|TSF, 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 3c3c9462..346c26e1 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|TSF, SEN(statfs), "statfs" }, [158] = { 2, TD, SEN(fstatfs), "fstatfs" }, [159] = { 1, TF, SEN(umount), "umount" }, [160] = { 3, TSC, SEN(sched_setaffinity), "sched_set_affinity" }, @@ -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|TSF, 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 be6a3d99..ba53df45 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|TSF, SEN(statfs), "statfs" }, [158] = { 2, TD, SEN(fstatfs), "fstatfs" }, [159] = { 1, TF, SEN(umount), "umount" }, [160] = { 3, TSC, SEN(sched_setaffinity), "sched_set_affinity" }, @@ -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|TSF, 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 f8be3253..a3630574 100644 --- a/linux/x32/syscallent.h +++ b/linux/x32/syscallent.h @@ -135,7 +135,7 @@ [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" }, +[137] = { 2, TF|TSF, 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 2aa20bd9..46bea58c 100644 --- a/linux/x86_64/syscallent.h +++ b/linux/x86_64/syscallent.h @@ -135,7 +135,7 @@ [134] = { 1, TF, SEN(uselib), "uselib" }, [135] = { 1, NF, SEN(personality), "personality" }, [136] = { 2, 0, SEN(ustat), "ustat" }, -[137] = { 2, TF, SEN(statfs), "statfs" }, +[137] = { 2, TF|TSF, 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 21dea9fd..2215b6ab 100644 --- a/linux/xtensa/syscallent.h +++ b/linux/xtensa/syscallent.h @@ -176,9 +176,9 @@ [181] = { 1, NF, SEN(setfsgid), "setfsgid" }, [182] = { 3, 0, SEN(sysfs), "sysfs" }, [183] = { 2, 0, SEN(ustat), "ustat" }, -[184] = { 2, TF, SEN(statfs), "statfs" }, +[184] = { 2, TF|TSF, SEN(statfs), "statfs" }, [185] = { 2, TD, SEN(fstatfs), "fstatfs" }, -[186] = { 3, TF, SEN(statfs64), "statfs64" }, +[186] = { 3, TF|TSF, 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 6ab30339..157d3138 100644 --- a/qualify.c +++ b/qualify.c @@ -221,6 +221,7 @@ lookup_class(const char *s) { "%network", TRACE_NETWORK }, { "%sched", TRACE_SCHED }, { "%clock", TRACE_CLOCK }, + { "%statfs", TRACE_STATFS }, }; unsigned int i; diff --git a/strace.1 b/strace.1 index 0c0f1a7a..84ff4ee8 100644 --- a/strace.1 +++ b/strace.1 @@ -432,6 +432,9 @@ Trace all scheduler-related (sched_*) system calls. .BR "\-e\ trace" = %clock Trace all clock-related (clock_*) system calls. .TP +.BR "\-e\ trace" = %statfs +Trace statfs, statfs64, and statvfs 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 5ca46d1e..36d57fb6 100644 --- a/syscall.c +++ b/syscall.c @@ -78,6 +78,7 @@ #define TM TRACE_MEMORY #define TSC TRACE_SCHED #define TCL TRACE_CLOCK +#define TSF TRACE_STATFS #define NF SYSCALL_NEVER_FAILS #define MA MAX_ARGS #define SI STACKTRACE_INVALIDATE_CACHE @@ -115,6 +116,7 @@ static const struct_sysent sysent2[] = { #undef TM #undef TSC #undef TCL +#undef TSF #undef NF #undef MA #undef SI diff --git a/sysent.h b/sysent.h index 53a4a0a8..dce9188b 100644 --- a/sysent.h +++ b/sysent.h @@ -23,5 +23,6 @@ typedef struct sysent { #define COMPAT_SYSCALL_TYPES 04000 /* A compat syscall that uses compat types. */ #define TRACE_SCHED 010000 /* Trace scheduler-related syscalls. */ #define TRACE_CLOCK 020000 /* Trace clock-related syscalls. */ +#define TRACE_STATFS 040000 /* Trace statfs, statfs64, and statvfs syscalls. */ #endif /* !STRACE_SYSENT_H */ diff --git a/tests/Makefile.am b/tests/Makefile.am index a1b4d9df..96dcb6ee 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -542,6 +542,7 @@ DECODER_TESTS = \ sigaltstack.test \ statfs.test \ sun_path.test \ + trace_statfs.test \ uio.test \ umount.test \ umount2.test \ diff --git a/tests/ksysent.c b/tests/ksysent.c index 72413692..1b210e6d 100644 --- a/tests/ksysent.c +++ b/tests/ksysent.c @@ -42,6 +42,7 @@ #define TM 0 #define TSC 0 #define TCL 0 +#define TSF 0 #define NF 0 #define MA 0 #define SI 0 diff --git a/tests/nsyscalls.c b/tests/nsyscalls.c index 10943898..b060bd1b 100644 --- a/tests/nsyscalls.c +++ b/tests/nsyscalls.c @@ -43,6 +43,7 @@ #define TM 0 #define TSC 0 #define TCL 0 +#define TSF 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 00000000..df213b90 --- /dev/null +++ b/tests/trace_statfs.test @@ -0,0 +1,48 @@ +#!/bin/sh +# +# Check -e trace=%statfs option. +# +# 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. + +. "${srcdir=.}/init.sh" + +while read w s; do { + try_run_prog "../$s" || continue + run_strace -a$w -e%statfs ../$s > "$EXP" + match_diff "$LOG" "$EXP" +} < /dev/null; done << EOF +17 statfs +23 statfs64 +EOF + +grep -E -v '^(#|statfs)' \ + < "$srcdir/pure_executables.list" > negative.list + +while read s; do { + try_run_prog "../$s" || continue + run_strace -qq -esignal=none -e%statfs ../$s > /dev/null + match_diff "$LOG" /dev/null +} < /dev/null; done < negative.list