qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] linux-user: Add strace support for statx.


From: Laurent Vivier
Subject: Re: [Qemu-devel] [PATCH] linux-user: Add strace support for statx.
Date: Wed, 19 Jun 2019 12:27:01 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0

Le 19/06/2019 à 01:53, Jim Wilson a écrit :
> All of the flags need to be conditional as old systems don't have statx
> support.  Otherwise it works the same as other stat family syscalls.
> This requires the pending patch to add statx support.
> 
> Tested on Ubuntu 16.04 (no host statx) and Ubuntu 19.04 (with host statx)
> using a riscv32-linux toolchain.
> 
> Signed-off-by: Jim Wilson <address@hidden>
> ---
>  linux-user/strace.c    | 86 
> ++++++++++++++++++++++++++++++++++++++++++++++++++
>  linux-user/strace.list |  3 ++
>  2 files changed, 89 insertions(+)
> 
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index 6f72a74..c80e93b 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -976,6 +976,76 @@ UNUSED static struct flags msg_flags[] = {
>      FLAG_END,
>  };
>  
> +UNUSED static struct flags statx_flags[] = {
> +#ifdef AT_EMPTY_PATH
> +    FLAG_GENERIC(AT_EMPTY_PATH),
> +#endif
> +#ifdef AT_NO_AUTOMOUNT
> +    FLAG_GENERIC(AT_NO_AUTOMOUNT),
> +#endif
> +#ifdef AT_SYMLINK_NOFOLLOW
> +    FLAG_GENERIC(AT_SYMLINK_NOFOLLOW),
> +#endif
> +#ifdef AT_STATX_SYNC_AS_STAT
> +    FLAG_GENERIC(AT_STATX_SYNC_AS_STAT),
> +#endif
> +#ifdef AT_STATX_FORCE_SYNC
> +    FLAG_GENERIC(AT_STATX_FORCE_SYNC),
> +#endif
> +#ifdef AT_STATX_DONT_SYNC
> +    FLAG_GENERIC(AT_STATX_DONT_SYNC),
> +#endif
> +    FLAG_END,
> +};
> +
> +UNUSED static struct flags statx_mask[] = {
> +/* This must come first, because it includes everything.  */
> +#ifdef STATX_ALL
> +    FLAG_GENERIC(STATX_ALL),
> +#endif
> +/* This must come second; it includes everything except STATX_BTIME.  */
> +#ifdef STATX_BASIC_STATS
> +    FLAG_GENERIC(STATX_BASIC_STATS),
> +#endif
> +#ifdef STATX_TYPE
> +    FLAG_GENERIC(STATX_TYPE),
> +#endif
> +#ifdef STATX_MODE
> +    FLAG_GENERIC(STATX_MODE),
> +#endif
> +#ifdef STATX_NLINK
> +    FLAG_GENERIC(STATX_NLINK),
> +#endif
> +#ifdef STATX_UID
> +    FLAG_GENERIC(STATX_UID),
> +#endif
> +#ifdef STATX_GID
> +    FLAG_GENERIC(STATX_GID),
> +#endif
> +#ifdef STATX_ATIME
> +    FLAG_GENERIC(STATX_ATIME),
> +#endif
> +#ifdef STATX_MTIME
> +    FLAG_GENERIC(STATX_MTIME),
> +#endif
> +#ifdef STATX_CTIME
> +    FLAG_GENERIC(STATX_CTIME),
> +#endif
> +#ifdef STATX_INO
> +    FLAG_GENERIC(STATX_INO),
> +#endif
> +#ifdef STATX_SIZE
> +    FLAG_GENERIC(STATX_SIZE),
> +#endif
> +#ifdef STATX_BLOCKS
> +    FLAG_GENERIC(STATX_BLOCKS),
> +#endif
> +#ifdef STATX_BTIME
> +    FLAG_GENERIC(STATX_BTIME),
> +#endif
> +    FLAG_END,
> +};
> +
>  /*
>   * print_xxx utility functions.  These are used to print syscall
>   * parameters in certain format.  All of these have parameter
> @@ -2611,6 +2681,22 @@ print_tgkill(const struct syscallname *name,
>  }
>  #endif
>  
> +#ifdef TARGET_NR_statx
> +static void
> +print_statx(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_at_dirfd(arg0, 0);
> +    print_string(arg1, 0);
> +    print_flags(statx_flags, arg2, 0);
> +    print_flags(statx_mask, arg3, 0);
> +    print_pointer(arg4, 1);
> +    print_syscall_epilogue(name);
> +}
> +#endif
> +
>  /*
>   * An array of all of the syscalls we know about
>   */
> diff --git a/linux-user/strace.list b/linux-user/strace.list
> index db21ce4..63a9466 100644
> --- a/linux-user/strace.list
> +++ b/linux-user/strace.list
> @@ -1650,3 +1650,6 @@
>  #ifdef TARGET_NR_atomic_barrier
>  { TARGET_NR_atomic_barrier, "atomic_barrier", NULL, NULL, NULL },
>  #endif
> +#ifdef TARGET_NR_statx
> +{ TARGET_NR_statx, "statx", NULL, print_statx, NULL },
> +#endif
> 

Reviewed-by: Laurent Vivier <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]