Message ID | 20200602115331.1659-2-filip.bozuta@syrmia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add strace support for printing arguments of selected syscalls | expand |
Le 02/06/2020 à 13:53, Filip Bozuta a écrit : > From: Filip Bozuta <Filip.Bozuta@syrmia.com> > > This patch implements strace argument printing functionality for following syscalls: > > *acct - switch process accounting on or off > > int acct(const char *filename) > man page: https://www.man7.org/linux/man-pages/man2/acct.2.html > > *fsync, fdatasync - synchronize a file's in-core state with storage device > > int fsync(int fd) > int fdatasync(int fd) > man page: https://www.man7.org/linux/man-pages/man2/fsync.2.html > > *listen - listen for connections on a socket > > int listen(int sockfd, int backlog) > man page: https://www.man7.org/linux/man-pages/man2/listen.2.html > > Implementation notes: > > Syscall acct() takes string as its only argument and thus a separate > print function "print_acct" is stated in file "strace.list". This > function is defined and implemented in "strace.c" by using an > existing function used to print string arguments: "print_string()". > All the other syscalls have only primitive argument types, so the > rest of the implementation was handled by stating an appropriate > printing format in file "strace.list". > > Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> > --- > linux-user/strace.c | 13 ++++++++++++- > linux-user/strace.list | 8 ++++---- > 2 files changed, 16 insertions(+), 5 deletions(-) > > diff --git a/linux-user/strace.c b/linux-user/strace.c > index 0d9095c674..c578876d22 100644 > --- a/linux-user/strace.c > +++ b/linux-user/strace.c > @@ -1353,6 +1353,18 @@ print_access(const struct syscallname *name, > } > #endif > > +#ifdef TARGET_NR_acct > +static void > +print_acct(const struct syscallname *name, > + abi_long arg0, abi_long arg1, abi_long arg2, > + abi_long arg3, abi_long arg4, abi_long arg5) > +{ > + print_syscall_prologue(name); > + print_string(arg0, 1); > + print_syscall_epilogue(name); > +} > +#endif > + > #ifdef TARGET_NR_brk > static void > print_brk(const struct syscallname *name, > @@ -1617,7 +1629,6 @@ print_fcntl(const struct syscallname *name, > #define print_fcntl64 print_fcntl > #endif > > - > #ifdef TARGET_NR_futimesat > static void > print_futimesat(const struct syscallname *name, > diff --git a/linux-user/strace.list b/linux-user/strace.list > index d49a1e92a8..fb9799e7e6 100644 > --- a/linux-user/strace.list > +++ b/linux-user/strace.list > @@ -13,7 +13,7 @@ > { TARGET_NR_access, "access" , NULL, print_access, NULL }, > #endif > #ifdef TARGET_NR_acct > -{ TARGET_NR_acct, "acct" , NULL, NULL, NULL }, > +{ TARGET_NR_acct, "acct" , NULL, print_acct, NULL }, > #endif > #ifdef TARGET_NR_add_key > { TARGET_NR_add_key, "add_key" , NULL, NULL, NULL }, > @@ -215,7 +215,7 @@ > { TARGET_NR_fcntl64, "fcntl64" , NULL, print_fcntl64, NULL }, > #endif > #ifdef TARGET_NR_fdatasync > -{ TARGET_NR_fdatasync, "fdatasync" , NULL, NULL, NULL }, > +{ TARGET_NR_fdatasync, "fdatasync" , "%s(%d)", NULL, NULL }, > #endif > #ifdef TARGET_NR_fgetxattr > { TARGET_NR_fgetxattr, "fgetxattr" , NULL, NULL, NULL }, > @@ -251,7 +251,7 @@ > { TARGET_NR_fstatfs64, "fstatfs64" , "%s(%d,%p)", NULL, NULL }, > #endif > #ifdef TARGET_NR_fsync > -{ TARGET_NR_fsync, "fsync" , NULL, NULL, NULL }, > +{ TARGET_NR_fsync, "fsync" , "%s(%d)", NULL, NULL }, > #endif > #ifdef TARGET_NR_ftime > { TARGET_NR_ftime, "ftime" , NULL, NULL, NULL }, > @@ -492,7 +492,7 @@ > { TARGET_NR_Linux, "Linux" , NULL, NULL, NULL }, > #endif > #ifdef TARGET_NR_listen > -{ TARGET_NR_listen, "listen" , NULL, NULL, NULL }, > +{ TARGET_NR_listen, "listen" , "%s(%d,%d)", NULL, NULL }, > #endif > #ifdef TARGET_NR_listxattr > { TARGET_NR_listxattr, "listxattr" , NULL, NULL, NULL }, > Reviewed-by: Laurent Vivier <laurent@vivier.eu>
diff --git a/linux-user/strace.c b/linux-user/strace.c index 0d9095c674..c578876d22 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -1353,6 +1353,18 @@ print_access(const struct syscallname *name, } #endif +#ifdef TARGET_NR_acct +static void +print_acct(const struct syscallname *name, + abi_long arg0, abi_long arg1, abi_long arg2, + abi_long arg3, abi_long arg4, abi_long arg5) +{ + print_syscall_prologue(name); + print_string(arg0, 1); + print_syscall_epilogue(name); +} +#endif + #ifdef TARGET_NR_brk static void print_brk(const struct syscallname *name, @@ -1617,7 +1629,6 @@ print_fcntl(const struct syscallname *name, #define print_fcntl64 print_fcntl #endif - #ifdef TARGET_NR_futimesat static void print_futimesat(const struct syscallname *name, diff --git a/linux-user/strace.list b/linux-user/strace.list index d49a1e92a8..fb9799e7e6 100644 --- a/linux-user/strace.list +++ b/linux-user/strace.list @@ -13,7 +13,7 @@ { TARGET_NR_access, "access" , NULL, print_access, NULL }, #endif #ifdef TARGET_NR_acct -{ TARGET_NR_acct, "acct" , NULL, NULL, NULL }, +{ TARGET_NR_acct, "acct" , NULL, print_acct, NULL }, #endif #ifdef TARGET_NR_add_key { TARGET_NR_add_key, "add_key" , NULL, NULL, NULL }, @@ -215,7 +215,7 @@ { TARGET_NR_fcntl64, "fcntl64" , NULL, print_fcntl64, NULL }, #endif #ifdef TARGET_NR_fdatasync -{ TARGET_NR_fdatasync, "fdatasync" , NULL, NULL, NULL }, +{ TARGET_NR_fdatasync, "fdatasync" , "%s(%d)", NULL, NULL }, #endif #ifdef TARGET_NR_fgetxattr { TARGET_NR_fgetxattr, "fgetxattr" , NULL, NULL, NULL }, @@ -251,7 +251,7 @@ { TARGET_NR_fstatfs64, "fstatfs64" , "%s(%d,%p)", NULL, NULL }, #endif #ifdef TARGET_NR_fsync -{ TARGET_NR_fsync, "fsync" , NULL, NULL, NULL }, +{ TARGET_NR_fsync, "fsync" , "%s(%d)", NULL, NULL }, #endif #ifdef TARGET_NR_ftime { TARGET_NR_ftime, "ftime" , NULL, NULL, NULL }, @@ -492,7 +492,7 @@ { TARGET_NR_Linux, "Linux" , NULL, NULL, NULL }, #endif #ifdef TARGET_NR_listen -{ TARGET_NR_listen, "listen" , NULL, NULL, NULL }, +{ TARGET_NR_listen, "listen" , "%s(%d,%d)", NULL, NULL }, #endif #ifdef TARGET_NR_listxattr { TARGET_NR_listxattr, "listxattr" , NULL, NULL, NULL },