diff mbox series

[1/3] linux-user: Add strace support for printing arguments of truncate()/ftruncate() and getsid()

Message ID 20200626213937.20333-2-Filip.Bozuta@syrmia.com
State New
Headers show
Series Add strace support for printing arguments for a group of selected syscalls | expand

Commit Message

Filip Bozuta June 26, 2020, 9:39 p.m. UTC
This patch implements strace argument printing functionality for following syscalls:

    * truncate, ftruncate - truncate a file to a specified length

        int truncate(const char *path, off_t length)
        int ftruncate(int fd, off_t length)
        man page: https://man7.org/linux/man-pages/man2/truncate.2.html

    * getsid - get session ID

        pid_t getsid(pid_t pid)
        man page: https://man7.org/linux/man-pages/man2/getsid.2.html

Implementation notes:

    Syscalls truncate/truncate64 takes string as argument type and thus a
    separate print function "print_truncate/print_truncate64" is stated in
    file "strace.list". This function is defined and implemented in "strace.c"
    by using an existing function used to print string arguments: "print_string()".
    The other syscalls have only primitive argument types, so the rest of the
    implementation was handled by stating an appropriate printing format in file
    "strace.list".

Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
---
 linux-user/strace.c    | 14 ++++++++++++++
 linux-user/strace.list | 10 +++++-----
 2 files changed, 19 insertions(+), 5 deletions(-)

Comments

Laurent Vivier July 2, 2020, 5:06 p.m. UTC | #1
Le 26/06/2020 à 23:39, Filip Bozuta a écrit :
> This patch implements strace argument printing functionality for following syscalls:
> 
>     * truncate, ftruncate - truncate a file to a specified length
> 
>         int truncate(const char *path, off_t length)
>         int ftruncate(int fd, off_t length)
>         man page: https://man7.org/linux/man-pages/man2/truncate.2.html
> 
>     * getsid - get session ID
> 
>         pid_t getsid(pid_t pid)
>         man page: https://man7.org/linux/man-pages/man2/getsid.2.html
> 
> Implementation notes:
> 
>     Syscalls truncate/truncate64 takes string as argument type and thus a
>     separate print function "print_truncate/print_truncate64" is stated in
>     file "strace.list". This function is defined and implemented in "strace.c"
>     by using an existing function used to print string arguments: "print_string()".
>     The other syscalls have only primitive argument types, so the rest of the
>     implementation was handled by stating an appropriate printing format in file
>     "strace.list".
> 
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> ---
>  linux-user/strace.c    | 14 ++++++++++++++
>  linux-user/strace.list | 10 +++++-----
>  2 files changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index 6044c66954..dccfbc46e9 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -1925,6 +1925,20 @@ print_lseek(const struct syscallname *name,
>  }
>  #endif
>  
> +#ifdef TARGET_NR_truncate
> +static void
> +print_truncate(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(TARGET_ABI_FMT_ld, arg1, 1);
> +    print_syscall_epilogue(name);
> +}
> +#define print_truncate64     print_truncate
> +#endif
> +
>  #if defined(TARGET_NR_socket)
>  static void
>  print_socket(const struct syscallname *name,
> diff --git a/linux-user/strace.list b/linux-user/strace.list
> index 10e3e4a814..3b77b22daf 100644
> --- a/linux-user/strace.list
> +++ b/linux-user/strace.list
> @@ -258,10 +258,10 @@
>  { TARGET_NR_ftime, "ftime" , NULL, NULL, NULL },
>  #endif
>  #ifdef TARGET_NR_ftruncate
> -{ TARGET_NR_ftruncate, "ftruncate" , NULL, NULL, NULL },
> +{ TARGET_NR_ftruncate, "ftruncate" , "%s(%d," TARGET_ABI_FMT_ld ")", NULL, NULL },
>  #endif
>  #ifdef TARGET_NR_ftruncate64
> -{ TARGET_NR_ftruncate64, "ftruncate64" , NULL, NULL, NULL },
> +{ TARGET_NR_ftruncate64, "ftruncate64" , "%s(%d," TARGET_ABI_FMT_ld ")", NULL, NULL },

This a little bit more complicated, see function target_ftruncate64().

>  #endif
>  #ifdef TARGET_NR_futex
>  { TARGET_NR_futex, "futex" , NULL, print_futex, NULL },
> @@ -372,7 +372,7 @@
>  { TARGET_NR_getrusage, "getrusage" , NULL, NULL, NULL },
>  #endif
>  #ifdef TARGET_NR_getsid
> -{ TARGET_NR_getsid, "getsid" , NULL, NULL, NULL },
> +{ TARGET_NR_getsid, "getsid" , "%s(%d)", NULL, NULL },
>  #endif
>  #ifdef TARGET_NR_getsockname
>  { TARGET_NR_getsockname, "getsockname" , NULL, NULL, NULL },
> @@ -1534,10 +1534,10 @@
>  { TARGET_NR_tkill, "tkill" , NULL, print_tkill, NULL },
>  #endif
>  #ifdef TARGET_NR_truncate
> -{ TARGET_NR_truncate, "truncate" , NULL, NULL, NULL },
> +{ TARGET_NR_truncate, "truncate" , NULL, print_truncate, NULL },
>  #endif
>  #ifdef TARGET_NR_truncate64
> -{ TARGET_NR_truncate64, "truncate64" , NULL, NULL, NULL },
> +{ TARGET_NR_truncate64, "truncate64" , NULL, print_truncate64, NULL },

See target_truncate64() for the arguments decoding.

>  #endif
>  #ifdef TARGET_NR_tuxcall
>  { TARGET_NR_tuxcall, "tuxcall" , NULL, NULL, NULL },
> 

Thanks,
Laurent
diff mbox series

Patch

diff --git a/linux-user/strace.c b/linux-user/strace.c
index 6044c66954..dccfbc46e9 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -1925,6 +1925,20 @@  print_lseek(const struct syscallname *name,
 }
 #endif
 
+#ifdef TARGET_NR_truncate
+static void
+print_truncate(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(TARGET_ABI_FMT_ld, arg1, 1);
+    print_syscall_epilogue(name);
+}
+#define print_truncate64     print_truncate
+#endif
+
 #if defined(TARGET_NR_socket)
 static void
 print_socket(const struct syscallname *name,
diff --git a/linux-user/strace.list b/linux-user/strace.list
index 10e3e4a814..3b77b22daf 100644
--- a/linux-user/strace.list
+++ b/linux-user/strace.list
@@ -258,10 +258,10 @@ 
 { TARGET_NR_ftime, "ftime" , NULL, NULL, NULL },
 #endif
 #ifdef TARGET_NR_ftruncate
-{ TARGET_NR_ftruncate, "ftruncate" , NULL, NULL, NULL },
+{ TARGET_NR_ftruncate, "ftruncate" , "%s(%d," TARGET_ABI_FMT_ld ")", NULL, NULL },
 #endif
 #ifdef TARGET_NR_ftruncate64
-{ TARGET_NR_ftruncate64, "ftruncate64" , NULL, NULL, NULL },
+{ TARGET_NR_ftruncate64, "ftruncate64" , "%s(%d," TARGET_ABI_FMT_ld ")", NULL, NULL },
 #endif
 #ifdef TARGET_NR_futex
 { TARGET_NR_futex, "futex" , NULL, print_futex, NULL },
@@ -372,7 +372,7 @@ 
 { TARGET_NR_getrusage, "getrusage" , NULL, NULL, NULL },
 #endif
 #ifdef TARGET_NR_getsid
-{ TARGET_NR_getsid, "getsid" , NULL, NULL, NULL },
+{ TARGET_NR_getsid, "getsid" , "%s(%d)", NULL, NULL },
 #endif
 #ifdef TARGET_NR_getsockname
 { TARGET_NR_getsockname, "getsockname" , NULL, NULL, NULL },
@@ -1534,10 +1534,10 @@ 
 { TARGET_NR_tkill, "tkill" , NULL, print_tkill, NULL },
 #endif
 #ifdef TARGET_NR_truncate
-{ TARGET_NR_truncate, "truncate" , NULL, NULL, NULL },
+{ TARGET_NR_truncate, "truncate" , NULL, print_truncate, NULL },
 #endif
 #ifdef TARGET_NR_truncate64
-{ TARGET_NR_truncate64, "truncate64" , NULL, NULL, NULL },
+{ TARGET_NR_truncate64, "truncate64" , NULL, print_truncate64, NULL },
 #endif
 #ifdef TARGET_NR_tuxcall
 { TARGET_NR_tuxcall, "tuxcall" , NULL, NULL, NULL },