static int
prctl_exit(struct tcb *tcp)
{
- unsigned long addr;
unsigned int i;
switch (tcp->u_arg[0]) {
case PR_GET_FPEMU:
case PR_GET_FPEXC:
tprints(", ");
- /* cannot use printnum_int() because of syserror() */
- if (!tcp->u_arg[1])
- tprints("NULL");
- else if (syserror(tcp) || umove(tcp, tcp->u_arg[1], &i) < 0)
- tprintf("%#lx", tcp->u_arg[1]);
- else
- tprintf("[%u]", i);
+ printnum_int(tcp, tcp->u_arg[1], "%u");
break;
case PR_GET_NAME:
case PR_GET_TID_ADDRESS:
tprints(", ");
- /* cannot use printnum_long() because of syserror() */
- if (!tcp->u_arg[1])
- tprints("NULL");
- else if (syserror(tcp) || umove(tcp, tcp->u_arg[1], &addr) < 0)
- tprintf("%#lx", tcp->u_arg[1]);
- else
- tprintf("[%#lx]", addr);
+ printnum_long(tcp, tcp->u_arg[1], "%#lx");
break;
case PR_GET_TSC:
case ARCH_GET_GS:
case ARCH_GET_FS:
if (exiting(tcp)) {
- if (syserror(tcp))
- break;
tprints(", ");
printnum_long(tcp, tcp->u_arg[1], "%#lx");
}
printnum_ ## name(struct tcb *tcp, const long addr, const char *fmt) \
{ \
type num; \
- if (!addr) \
- tprints("NULL"); \
- else if (umove(tcp, addr, &num) < 0) \
- tprintf("%#lx", addr); \
- else { \
+ if (!umove_or_printaddr(tcp, addr, &num)) { \
tprints("["); \
tprintf(fmt, num); \
tprints("]"); \
printpair_ ## name(struct tcb *tcp, const long addr, const char *fmt) \
{ \
type pair[2]; \
- if (!addr) \
- tprints("NULL"); \
- else if ((exiting(tcp) && syserror(tcp)) || \
- umove(tcp, addr, &pair) < 0) \
- tprintf("%#lx", addr); \
- else { \
+ if (!umove_or_printaddr(tcp, addr, &pair)) { \
tprints("["); \
tprintf(fmt, pair[0]); \
tprints(", "); \