# define widen_to_long(v) ((long)(v))
#endif
-#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
-# define widen_to_ulong(v) \
- (current_wordsize == 4 ? (unsigned long) (uint32_t) (v) : \
- (unsigned long) (v))
-#else
-# define widen_to_ulong(v) ((unsigned long)(v))
-#endif
+static inline kernel_ulong_t
+truncate_kulong_to_current_wordsize(const kernel_ulong_t v)
+{
+#if SIZEOF_KERNEL_LONG_T > 4 \
+ && (SIZEOF_LONG < SIZEOF_KERNEL_LONG_T || !defined current_wordsize)
+ if (current_wordsize < sizeof(v)) {
+ return (unsigned int) v;
+ } else
+#endif
+ {
+ return v;
+ }
+}
/*
* Cast a pointer or a pointer-sized integer to kernel_ulong_t.
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
} else {
- unsigned long len = widen_to_ulong(tcp->u_arg[2]);
+ kernel_ulong_t len =
+ truncate_kulong_to_current_wordsize(tcp->u_arg[2]);
tprint_iov_upto(tcp, len, tcp->u_arg[1],
syserror(tcp) ? IOV_DECODE_ADDR :
IOV_DECODE_STR, tcp->u_rval);
- tprintf(", %lu, ", len);
+ tprintf(", %" PRI_klu ", ", len);
print_lld_from_low_high_val(tcp, 3);
if (flags_arg >= 0) {
tprints(", ");
static int
do_pwritev(struct tcb *tcp, const int flags_arg)
{
- unsigned long len = widen_to_ulong(tcp->u_arg[2]);
+ kernel_ulong_t len =
+ truncate_kulong_to_current_wordsize(tcp->u_arg[2]);
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
tprint_iov(tcp, len, tcp->u_arg[1], IOV_DECODE_STR);
- tprintf(", %lu, ", len);
+ tprintf(", %" PRI_klu ", ", len);
print_lld_from_low_high_val(tcp, 3);
if (flags_arg >= 0) {
tprints(", ");