Fix printing tracee's long integers
Replace ambiguous printnum_long that used to fetch native long integers from tracee's memory with printnum_ptr, printnum_slong, and printnum_ulong that fetch tracee's pointer, signed long, and unsigned long integers. * defs.h (printnum_long, printpair_long): Remove prototypes. (printnum_int64, printpair_int64): Remove macros, declare functions unconditionally. [SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4] (printnum_long_int): New prototype. (printnum_ptr, printnum_slong, printnum_ulong): New macros. * aio.c (sys_io_setup): Use printnum_ulong. * block.c (block_ioctl): Use printnum_slong and printnum_ulong. * get_robust_list.c (sys_get_robust_list): Use printnum_ptr and printnum_ulong. * io.c (print_off_t): Remove. (sys_sendfile): Use printnum_ulong. * ipc.c (sys_semctl): Use printnum_ptr. * prctl.c (sys_prctl): Likewise. * process.c (sys_ptrace): Likewise. * rtc.c (rtc_ioctl): Use printnum_ulong. * util.c (printnum_long, printpair_long): Remove. (printnum_int64, printpair_int64): Define unconditionally. [SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4] (printnum_long_int): New function. Signed-off-by: Dmitry V. Levin <ldv@altlinux.org> Signed-off-by: Elvira Khabirova <lineprinter0@gmail.com>
This commit is contained in:
parent
f9b455cfd2
commit
2479ef0bce
6
aio.c
6
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;
|
||||
}
|
||||
|
||||
|
4
block.c
4
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
|
||||
|
37
defs.h
37
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}"))
|
||||
|
@ -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;
|
||||
}
|
||||
|
11
io.c
11
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;
|
||||
|
5
ipc.c
5
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]);
|
||||
}
|
||||
|
4
prctl.c
4
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;
|
||||
}
|
||||
|
||||
|
@ -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: {
|
||||
|
2
rtc.c
2
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);
|
||||
|
15
util.c
15
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 *
|
||||
|
Loading…
x
Reference in New Issue
Block a user