[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 11/13] linux-user/strace: Add print_sockaddr_ptr(
From: |
Philippe Mathieu-Daudé |
Subject: |
[Qemu-devel] [PATCH v3 11/13] linux-user/strace: Add print_sockaddr_ptr() to handle plain/pointer addrlen |
Date: |
Mon, 2 Jul 2018 14:50:28 -0300 |
While very similar to send()/recv(), the format used by
sendto()/recvfrom() is slightly different: the 'addrlen'
is not a plain sockaddr_t but a pointer to it.
Split the current function to handle both formats.
Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
Tested-By: Guido Günther <address@hidden>
---
linux-user/strace.c | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/linux-user/strace.c b/linux-user/strace.c
index 85a1efef32..9ab11059e4 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -68,6 +68,7 @@ UNUSED static void print_timezone(abi_ulong, int);
UNUSED static void print_number(abi_long, int);
UNUSED static void print_signal(abi_ulong, int);
UNUSED static void print_sockaddr(abi_ulong addr, abi_long addrlen, int);
+UNUSED static void print_sockaddr_ptr(abi_ulong addr, abi_long addrlen_ptr,
int);
UNUSED static void print_socket_domain(int domain);
UNUSED static void print_socket_type(int type);
UNUSED static void print_socket_protocol(int domain, int type, int protocol);
@@ -336,7 +337,8 @@ static void print_siginfo(const target_siginfo_t *tinfo)
}
static void
-print_sockaddr(abi_ulong addr, abi_long addrlen, int last)
+print_sockaddr_ex(abi_ulong addr, abi_long addrlen,
+ bool addrlen_is_ptr, int last)
{
struct target_sockaddr *sa;
int i;
@@ -418,7 +420,29 @@ print_sockaddr(abi_ulong addr, abi_long addrlen, int last)
} else {
print_raw_param("0x"TARGET_ABI_FMT_lx, addr, 0);
}
- gemu_log(", "TARGET_ABI_FMT_ld"%s", addrlen, get_comma(last));
+ gemu_log(", %s"TARGET_ABI_FMT_ld"%s%s",
+ (addrlen_is_ptr ? "[" : ""), addrlen,
+ (addrlen_is_ptr ? "]" : ""), get_comma(last));
+}
+
+static void
+print_sockaddr(abi_ulong addr, abi_long addrlen, int last)
+{
+ print_sockaddr_ex(addr, addrlen, false, last);
+}
+
+static void
+print_sockaddr_ptr(abi_ulong addr, abi_long addrlen_ptr, int last)
+{
+ abi_ulong addrlen;
+
+ if (!addr) {
+ print_sockaddr_ex(0, 0, false, last);
+ return;
+ }
+
+ get_user_ual(addrlen, addrlen_ptr);
+ print_sockaddr_ex(addr, addrlen, true, last);
}
static void
--
2.18.0
- [Qemu-devel] [PATCH v3 02/13] linux-user/strace: Improve capget()/capset() output, (continued)
- [Qemu-devel] [PATCH v3 02/13] linux-user/strace: Improve capget()/capset() output, Philippe Mathieu-Daudé, 2018/07/02
- [Qemu-devel] [PATCH v3 05/13] linux-user/strace: Improve settimeofday(), Philippe Mathieu-Daudé, 2018/07/02
- [Qemu-devel] [PATCH v3 06/13] linux-user/strace: Dump AF_NETLINK sockaddr content, Philippe Mathieu-Daudé, 2018/07/02
- [Qemu-devel] [PATCH v3 07/13] linux-user/strace: Improve recvmsg() output, Philippe Mathieu-Daudé, 2018/07/02
- [Qemu-devel] [PATCH v3 10/13] linux-user/strace: Let print_sockaddr() have a 'last' argument, Philippe Mathieu-Daudé, 2018/07/02
- [Qemu-devel] [PATCH v3 12/13] linux-user/strace: Improve getsockname() output, Philippe Mathieu-Daudé, 2018/07/02
- [Qemu-devel] [PATCH v3 11/13] linux-user/strace: Add print_sockaddr_ptr() to handle plain/pointer addrlen,
Philippe Mathieu-Daudé <=
- [Qemu-devel] [PATCH v3 13/13] linux-user/strace: Improve recvfrom() output, Philippe Mathieu-Daudé, 2018/07/02
- Message not available
- Message not available
- Message not available
- Message not available