@@ -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