From: Laurent Vivier <laurent@vivier.eu>
To: Filip Bozuta <filip.bozuta@syrmia.com>, qemu-devel@nongnu.org
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 [thread overview]
Message-ID: <214b3da5-db76-a1ca-8ea2-5d10cc3370d8@vivier.eu> (raw)
In-Reply-To: <20200611155109.3648-2-filip.bozuta@syrmia.com>
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
next prev parent reply other threads:[~2020-06-15 11:45 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-11 15:51 [PATCH v3 0/6] Add strace support for printing arguments of selected syscalls Filip Bozuta
2020-06-11 15:51 ` [PATCH v3 1/6] linux-user: Extend strace support to enable argument printing after syscall execution Filip Bozuta
2020-06-15 11:44 ` Laurent Vivier [this message]
2020-06-11 15:51 ` [PATCH v3 2/6] linux-user: Add strace support for a group of syscalls Filip Bozuta
2020-06-11 15:51 ` [PATCH v3 3/6] linux-user: Add strace support for printing argument of syscalls used for extended attributes Filip Bozuta
2020-06-15 11:52 ` Laurent Vivier
2020-06-11 15:51 ` [PATCH v3 4/6] linux-user: Add strace support for printing arguments of lseek() Filip Bozuta
2020-06-11 15:51 ` [PATCH v3 5/6] linux-user: Add strace support for printing arguments of chown()/lchown() Filip Bozuta
2020-06-11 15:51 ` [PATCH v3 6/6] linux-user: Add strace support for printing arguments of fallocate() Filip Bozuta
2020-06-15 11:58 ` Laurent Vivier
2020-06-15 12:42 ` Filip Bozuta
2020-06-11 19:58 ` [PATCH v3 0/6] Add strace support for printing arguments of selected syscalls no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=214b3da5-db76-a1ca-8ea2-5d10cc3370d8@vivier.eu \
--to=laurent@vivier.eu \
--cc=filip.bozuta@syrmia.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).