Signed-off-by: Jing Huang <jing.huang....@gmail.com> --- linux-user/syscall.c | 15 +++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 2228b1f..7521746 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -1350,8 +1350,17 @@ static inline abi_long host_to_target_cmsg(struct target_msghdr *target_msgh, target_cmsg->cmsg_len = tswapal(TARGET_CMSG_LEN(len)); if (cmsg->cmsg_level != TARGET_SOL_SOCKET || cmsg->cmsg_type != SCM_RIGHTS) { - gemu_log("Unsupported ancillary data: %d/%d\n", cmsg->cmsg_level, cmsg->cmsg_type); - memcpy(target_data, data, len); + if ((cmsg->cmsg_type == SO_TIMESTAMP) && + (len == sizeof(struct timeval))) { + /* copy struct timeval to target */ + struct timeval *tv = (struct timeval *)data; + struct timeval *target_tv = (struct timeval *)target_data; + + tv->tv_sec = tswap32(target_tv->tv_sec); + tv->tv_usec = tswap32(target_tv->tv_usec); + } else { + gemu_log("Unsupported ancillary data: %d/%d\n", + cmsg->cmsg_level, cmsg->cmsg_type); + memcpy(target_data, data, len); + } } else { int *fd = (int *)data; int *target_fd = (int *)target_data; -- 1.7.8.6