summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aio.c6
-rw-r--r--block.c4
-rw-r--r--defs.h37
-rw-r--r--get_robust_list.c4
-rw-r--r--io.c11
-rw-r--r--ipc.c5
-rw-r--r--prctl.c4
-rw-r--r--process.c2
-rw-r--r--rtc.c2
-rw-r--r--util.c15
10 files changed, 49 insertions, 41 deletions
diff --git a/aio.c b/aio.c
index fd10553f7..3b6cf5038 100644
--- a/aio.c
+++ b/aio.c
@@ -43,11 +43,7 @@ SYS_FUNC(io_setup)
if (entering(tcp))
tprintf("%ld, ", tcp->u_arg[0]);
else
-#ifdef X32
- printnum_int64(tcp, tcp->u_arg[1], "%" PRIu64);
-#else
- printnum_long(tcp, tcp->u_arg[1], "%lu");
-#endif
+ printnum_ulong(tcp, tcp->u_arg[1]);
return 0;
}
diff --git a/block.c b/block.c
index 3b1de5138..1e02fa71b 100644
--- a/block.c
+++ b/block.c
@@ -165,7 +165,7 @@ block_ioctl(struct tcb *tcp, const unsigned int code, const long arg)
if (entering(tcp))
return 0;
tprints(", ");
- printnum_long(tcp, arg, "%ld");
+ printnum_slong(tcp, arg);
break;
/* returns an unsigned long */
@@ -173,7 +173,7 @@ block_ioctl(struct tcb *tcp, const unsigned int code, const long arg)
if (entering(tcp))
return 0;
tprints(", ");
- printnum_long(tcp, arg, "%lu");
+ printnum_ulong(tcp, arg);
break;
#ifdef HAVE_BLKGETSIZE64
diff --git a/defs.h b/defs.h
index 29c2131e2..857175def 100644
--- a/defs.h
+++ b/defs.h
@@ -534,24 +534,39 @@ extern void printnum_short(struct tcb *, long, const char *)
ATTRIBUTE_FORMAT((printf, 3, 0));
extern void printnum_int(struct tcb *, long, const char *)
ATTRIBUTE_FORMAT((printf, 3, 0));
-extern void printnum_long(struct tcb *, long, const char *)
- ATTRIBUTE_FORMAT((printf, 3, 0));
-#if SIZEOF_LONG == 8
-# define printnum_int64 printnum_long
-#else
extern void printnum_int64(struct tcb *, long, const char *)
ATTRIBUTE_FORMAT((printf, 3, 0));
+
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+extern void printnum_long_int(struct tcb *, long, const char *, const char *)
+ ATTRIBUTE_FORMAT((printf, 3, 0))
+ ATTRIBUTE_FORMAT((printf, 4, 0));
+# define printnum_slong(tcp, addr) \
+ printnum_long_int((tcp), (addr), "%" PRId64, "%d")
+# define printnum_ulong(tcp, addr) \
+ printnum_long_int((tcp), (addr), "%" PRIu64, "%u")
+# define printnum_ptr(tcp, addr) \
+ printnum_long_int((tcp), (addr), "%#" PRIx64, "%#x")
+#elif SIZEOF_LONG > 4
+# define printnum_slong(tcp, addr) \
+ printnum_int64((tcp), (addr), "%" PRId64)
+# define printnum_ulong(tcp, addr) \
+ printnum_int64((tcp), (addr), "%" PRIu64)
+# define printnum_ptr(tcp, addr) \
+ printnum_int64((tcp), (addr), "%#" PRIx64)
+#else
+# define printnum_slong(tcp, addr) \
+ printnum_int((tcp), (addr), "%d")
+# define printnum_ulong(tcp, addr) \
+ printnum_int((tcp), (addr), "%u")
+# define printnum_ptr(tcp, addr) \
+ printnum_int((tcp), (addr), "%#x")
#endif
+
extern void printpair_int(struct tcb *, long, const char *)
ATTRIBUTE_FORMAT((printf, 3, 0));
-extern void printpair_long(struct tcb *, long, const char *)
- ATTRIBUTE_FORMAT((printf, 3, 0));
-#if SIZEOF_LONG == 8
-# define printpair_int64 printpair_long
-#else
extern void printpair_int64(struct tcb *, long, const char *)
ATTRIBUTE_FORMAT((printf, 3, 0));
-#endif
extern void printpath(struct tcb *, long);
extern void printpathn(struct tcb *, long, unsigned int);
#define TIMESPEC_TEXT_BUFSIZE (sizeof(long)*3 * 2 + sizeof("{%u, %u}"))
diff --git a/get_robust_list.c b/get_robust_list.c
index 02f814827..beec52b38 100644
--- a/get_robust_list.c
+++ b/get_robust_list.c
@@ -5,9 +5,9 @@ SYS_FUNC(get_robust_list)
if (entering(tcp)) {
tprintf("%ld, ", (long) (pid_t) tcp->u_arg[0]);
} else {
- printnum_long(tcp, tcp->u_arg[1], "%#lx");
+ printnum_ptr(tcp, tcp->u_arg[1]);
tprints(", ");
- printnum_long(tcp, tcp->u_arg[2], "%lu");
+ printnum_ulong(tcp, tcp->u_arg[2]);
}
return 0;
}
diff --git a/io.c b/io.c
index b701f81b7..69198ad7f 100644
--- a/io.c
+++ b/io.c
@@ -244,22 +244,13 @@ SYS_FUNC(pwritev)
return RVAL_DECODED;
}
-static void
-print_off_t(struct tcb *tcp, long addr)
-{
- if (current_wordsize == sizeof(int))
- printnum_int(tcp, addr, "%u");
- else
- printnum_long(tcp, addr, "%lu");
-}
-
SYS_FUNC(sendfile)
{
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
printfd(tcp, tcp->u_arg[1]);
tprints(", ");
- print_off_t(tcp, tcp->u_arg[2]);
+ printnum_ulong(tcp, tcp->u_arg[2]);
tprintf(", %lu", tcp->u_arg[3]);
return RVAL_DECODED;
diff --git a/ipc.c b/ipc.c
index c868e607c..ec491eb44 100644
--- a/ipc.c
+++ b/ipc.c
@@ -244,10 +244,7 @@ SYS_FUNC(semctl)
PRINTCTL(semctl_flags, tcp->u_arg[2], "SEM_???");
tprints(", ");
if (indirect_ipccall(tcp)) {
- if (current_wordsize == sizeof(int))
- printnum_int(tcp, tcp->u_arg[3], "%#x");
- else
- printnum_long(tcp, tcp->u_arg[3], "%#lx");
+ printnum_ptr(tcp, tcp->u_arg[3]);
} else {
tprintf("%#lx", tcp->u_arg[3]);
}
diff --git a/prctl.c b/prctl.c
index 90efe16ec..cfd117f1d 100644
--- a/prctl.c
+++ b/prctl.c
@@ -100,7 +100,7 @@ SYS_FUNC(prctl)
if (entering(tcp))
tprints(", ");
else
- printnum_long(tcp, tcp->u_arg[1], "%#lx");
+ printnum_ptr(tcp, tcp->u_arg[1]);
break;
case PR_GET_TSC:
@@ -292,7 +292,7 @@ SYS_FUNC(arch_prctl)
if (entering(tcp))
tprints(", ");
else
- printnum_long(tcp, tcp->u_arg[1], "%#lx");
+ printnum_ptr(tcp, tcp->u_arg[1]);
return 0;
}
diff --git a/process.c b/process.c
index deeb74171..862918426 100644
--- a/process.c
+++ b/process.c
@@ -127,7 +127,7 @@ SYS_FUNC(ptrace)
#ifdef IA64
return RVAL_HEX;
#else
- printnum_long(tcp, tcp->u_arg[3], "%#lx");
+ printnum_ptr(tcp, tcp->u_arg[3]);
break;
#endif
case PTRACE_GETSIGINFO: {
diff --git a/rtc.c b/rtc.c
index 0dd71f0dd..0806b0e43 100644
--- a/rtc.c
+++ b/rtc.c
@@ -90,7 +90,7 @@ rtc_ioctl(struct tcb *tcp, const unsigned int code, const long arg)
if (entering(tcp))
return 0;
tprints(", ");
- printnum_long(tcp, arg, "%lu");
+ printnum_ulong(tcp, arg);
break;
case RTC_WKALM_SET:
decode_rtc_wkalrm(tcp, arg);
diff --git a/util.c b/util.c
index 04cf413a6..2a22caccb 100644
--- a/util.c
+++ b/util.c
@@ -410,14 +410,23 @@ printpair_ ## name(struct tcb *tcp, const long addr, const char *fmt) \
} \
}
-DEF_PRINTNUM(long, long)
-DEF_PRINTPAIR(long, long)
DEF_PRINTNUM(int, int)
DEF_PRINTPAIR(int, int)
DEF_PRINTNUM(short, short)
-#if SIZEOF_LONG != 8
DEF_PRINTNUM(int64, uint64_t)
DEF_PRINTPAIR(int64, uint64_t)
+
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+void
+printnum_long_int(struct tcb *tcp, const long addr,
+ const char *fmt_long, const char *fmt_int)
+{
+ if (current_wordsize > sizeof(int)) {
+ printnum_int64(tcp, addr, fmt_long);
+ } else {
+ printnum_int(tcp, addr, fmt_int);
+ }
+}
#endif
const char *