qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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


  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).