[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 1/6] linux-user: Extend strace support to enable argument
From: |
Laurent Vivier |
Subject: |
Re: [PATCH v3 1/6] linux-user: Extend strace support to enable argument printing after syscall execution |
Date: |
Mon, 15 Jun 2020 13:44:39 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 |
Le 11/06/2020 à 17:51, Filip Bozuta a écrit :
> From: Filip Bozuta <Filip.Bozuta@syrmia.com>
>
> Structure "struct syscallname" in file "strace.c" is used for "-strace"
> to print arguments and return values of syscalls. The last field of
> this structure "result" represents the calling function that prints the
> return values. This field was extended in this patch so that this
> functions
> takes all syscalls arguments beside the return value. In this way, it
> enables
> "-strace" to print arguments of syscalls that have changed after the
> syscall
> execution. This extension will be useful as there are many syscalls that
> return values inside their arguments (i.e. listxattr() that returns the
> list
> of extended attributes inside the "list" argument).
>
> Implementation notes:
>
> Since there are already three existing "print_syscall_ret*" functions
> inside
> "strace.c" ("print_syscall_ret_addr()", "print_syscall_ret_adjtimex()",
> "print_syscall_ret_newselect()"), they were changed to have all syscall
> arguments
> beside the return value. This was done so that these functions don't
> cause build
> errors (even though syscall arguments are not used in these functions).
> There is code repetition in these functions for checking the return value
> and printing the approppriate error message (this code is also located in
> print_syscall_ret() at the end of "strace.c"). That is the reason why a
> generic
> function SYSCALL_RET_ERR() was added for this code and put inside these
> functions.
>
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> ---
> linux-user/qemu.h | 4 ++-
> linux-user/strace.c | 71 ++++++++++++++++++++++++++------------------
> linux-user/syscall.c | 2 +-
> 3 files changed, 46 insertions(+), 31 deletions(-)
>
> diff --git a/linux-user/qemu.h b/linux-user/qemu.h
> index ce902f5132..8f938b8105 100644
> --- a/linux-user/qemu.h
> +++ b/linux-user/qemu.h
> @@ -383,7 +383,9 @@ int host_to_target_waitstatus(int status);
> void print_syscall(int num,
> abi_long arg1, abi_long arg2, abi_long arg3,
> abi_long arg4, abi_long arg5, abi_long arg6);
> -void print_syscall_ret(int num, abi_long arg1);
> +void print_syscall_ret(int num, abi_long ret,
> + abi_long arg1, abi_long arg2, abi_long arg3,
> + abi_long arg4, abi_long arg5, abi_long arg6);
> /**
> * print_taken_signal:
> * @target_signum: target signal being taken
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index 0d9095c674..8678a2aeac 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -19,7 +19,9 @@ struct syscallname {
> void (*call)(const struct syscallname *,
> abi_long, abi_long, abi_long,
> abi_long, abi_long, abi_long);
> - void (*result)(const struct syscallname *, abi_long);
> + void (*result)(const struct syscallname *, abi_long,
> + abi_long, abi_long, abi_long,
> + abi_long, abi_long, abi_long);
> };
>
> #ifdef __GNUC__
> @@ -735,18 +737,29 @@ print_ipc(const struct syscallname *name,
> * Variants for the return value output function
> */
>
> +#define SYSCALL_RET_ERR(ret, errstr) \
> +{ \
> + qemu_log(" = "); \
> + if (ret < 0) { \
> + qemu_log("-1 errno=%d", errno); \
> + errstr = target_strerror(-ret); \
> + if (errstr) { \
> + qemu_log(" (%s)", errstr); \
> + } \
> + } \
> +}
You should move the declaration of errstr into this block, and then I
think it would be better to have function rather than a macro.
Thanks,
Laurent
- [PATCH v3 0/6] Add strace support for printing arguments of selected syscalls, Filip Bozuta, 2020/06/11
- [PATCH v3 1/6] linux-user: Extend strace support to enable argument printing after syscall execution, Filip Bozuta, 2020/06/11
- Re: [PATCH v3 1/6] linux-user: Extend strace support to enable argument printing after syscall execution,
Laurent Vivier <=
- [PATCH v3 3/6] linux-user: Add strace support for printing argument of syscalls used for extended attributes, Filip Bozuta, 2020/06/11
- [PATCH v3 4/6] linux-user: Add strace support for printing arguments of lseek(), Filip Bozuta, 2020/06/11
- [PATCH v3 5/6] linux-user: Add strace support for printing arguments of chown()/lchown(), Filip Bozuta, 2020/06/11
- [PATCH v3 6/6] linux-user: Add strace support for printing arguments of fallocate(), Filip Bozuta, 2020/06/11
- [PATCH v3 2/6] linux-user: Add strace support for a group of syscalls, Filip Bozuta, 2020/06/11
- Re: [PATCH v3 0/6] Add strace support for printing arguments of selected syscalls, no-reply, 2020/06/11