summaryrefslogtreecommitdiff
path: root/desc.c
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2013-07-18 18:10:13 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2013-07-18 18:10:13 +0200
commit8a1ebbbee95a3412a3c7bfee21f6d33c11293d30 (patch)
treed92a07decdc72d4c8979951f026a47113c0677f8 /desc.c
parente600ac67ee7b11600773e73ab9772392dd6e6d04 (diff)
downloadstrace-8a1ebbbee95a3412a3c7bfee21f6d33c11293d30.tar.gz
strace-8a1ebbbee95a3412a3c7bfee21f6d33c11293d30.tar.bz2
strace-8a1ebbbee95a3412a3c7bfee21f6d33c11293d30.tar.xz
Add compat support for sys_pselect6
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'desc.c')
-rw-r--r--desc.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/desc.c b/desc.c
index ac07ca7..9bfe4d0 100644
--- a/desc.c
+++ b/desc.c
@@ -1048,16 +1048,29 @@ sys_pselect6(struct tcb *tcp)
{
int rc = decode_select(tcp, tcp->u_arg, BITNESS_CURRENT);
if (entering(tcp)) {
+ long r;
struct {
- void *ss;
+ unsigned long ptr;
unsigned long len;
} data;
- if (umove(tcp, tcp->u_arg[5], &data) < 0)
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+ if (current_wordsize == 4) {
+ struct {
+ uint32_t ptr;
+ uint32_t len;
+ } data32;
+ r = umove(tcp, tcp->u_arg[5], &data32);
+ data.ptr = data32.ptr;
+ data.len = data32.len;
+ } else
+#endif
+ r = umove(tcp, tcp->u_arg[5], &data);
+ if (r < 0)
tprintf(", %#lx", tcp->u_arg[5]);
else {
tprints(", {");
/* NB: kernel requires data.len == NSIG / 8 */
- print_sigset_addr_len(tcp, (long)data.ss, data.len);
+ print_sigset_addr_len(tcp, data.ptr, data.len);
tprintf(", %lu}", data.len);
}
}