Message ID | 20200602115331.1659-5-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 syscalls: > > *chown, lchown - change ownership of a file > > int chown(const char *pathname, uid_t owner, gid_t group) > int lchown(const char *pathname, uid_t owner, gid_t group) > man page: https://www.man7.org/linux/man-pages/man2/lchown.2.html > > Implementation notes: > > Both syscalls use strings as arguments and thus a separate > printing function was stated in "strace.list" for them. > Both syscalls share the same number and types of arguments > and thus share a same definition in file "syscall.c". > This defintion uses existing functions "print_string()" to > print the string argument and "print_raw_param()" to print > other two arguments that are of basic types. > > Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> > --- > linux-user/strace.c | 15 +++++++++++++++ > linux-user/strace.list | 4 ++-- > 2 files changed, 17 insertions(+), 2 deletions(-) > > diff --git a/linux-user/strace.c b/linux-user/strace.c > index b7f012f1b5..542bfdeb91 100644 > --- a/linux-user/strace.c > +++ b/linux-user/strace.c > @@ -1414,6 +1414,21 @@ print_chmod(const struct syscallname *name, > } > #endif > > +#if defined(TARGET_NR_chown) || defined(TARGET_NR_lchown) > +static void > +print_chown(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, 0); > + print_raw_param("%d", arg1, 0); > + print_raw_param("%d", arg2, 1); > + print_syscall_epilogue(name); > +} > +#define print_lchown print_chown > +#endif > + > #ifdef TARGET_NR_clock_adjtime > static void > print_clock_adjtime(const struct syscallname *name, > diff --git a/linux-user/strace.list b/linux-user/strace.list > index 5a56212532..b72f757d3f 100644 > --- a/linux-user/strace.list > +++ b/linux-user/strace.list > @@ -71,7 +71,7 @@ > { TARGET_NR_chmod, "chmod" , NULL, print_chmod, NULL }, > #endif > #ifdef TARGET_NR_chown > -{ TARGET_NR_chown, "chown" , NULL, NULL, NULL }, > +{ TARGET_NR_chown, "chown" , NULL, print_chown, NULL }, > #endif > #ifdef TARGET_NR_chown32 > { TARGET_NR_chown32, "chown32" , NULL, NULL, NULL }, > @@ -474,7 +474,7 @@ > { TARGET_NR_kill, "kill", NULL, print_kill, NULL }, > #endif > #ifdef TARGET_NR_lchown > -{ TARGET_NR_lchown, "lchown" , NULL, NULL, NULL }, > +{ TARGET_NR_lchown, "lchown" , NULL, print_lchown, NULL }, > #endif > #ifdef TARGET_NR_lchown32 > { TARGET_NR_lchown32, "lchown32" , NULL, NULL, NULL }, > Reviewed-by: Laurent Vivier <laurent@vivier.eu>
diff --git a/linux-user/strace.c b/linux-user/strace.c index b7f012f1b5..542bfdeb91 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -1414,6 +1414,21 @@ print_chmod(const struct syscallname *name, } #endif +#if defined(TARGET_NR_chown) || defined(TARGET_NR_lchown) +static void +print_chown(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, 0); + print_raw_param("%d", arg1, 0); + print_raw_param("%d", arg2, 1); + print_syscall_epilogue(name); +} +#define print_lchown print_chown +#endif + #ifdef TARGET_NR_clock_adjtime static void print_clock_adjtime(const struct syscallname *name, diff --git a/linux-user/strace.list b/linux-user/strace.list index 5a56212532..b72f757d3f 100644 --- a/linux-user/strace.list +++ b/linux-user/strace.list @@ -71,7 +71,7 @@ { TARGET_NR_chmod, "chmod" , NULL, print_chmod, NULL }, #endif #ifdef TARGET_NR_chown -{ TARGET_NR_chown, "chown" , NULL, NULL, NULL }, +{ TARGET_NR_chown, "chown" , NULL, print_chown, NULL }, #endif #ifdef TARGET_NR_chown32 { TARGET_NR_chown32, "chown32" , NULL, NULL, NULL }, @@ -474,7 +474,7 @@ { TARGET_NR_kill, "kill", NULL, print_kill, NULL }, #endif #ifdef TARGET_NR_lchown -{ TARGET_NR_lchown, "lchown" , NULL, NULL, NULL }, +{ TARGET_NR_lchown, "lchown" , NULL, print_lchown, NULL }, #endif #ifdef TARGET_NR_lchown32 { TARGET_NR_lchown32, "lchown32" , NULL, NULL, NULL },