Change printnum_* printers to honor syserror

With this change, printnum_* printers will not attempt to fetch data
in case of exiting(tcp) && syserror(tcp).
All "at exiting" decoders that call these printers have been made
ready for this change in previous commits.

* util.c (DEF_PRINTNUM, DEF_PRINTPAIR): Use umove_or_printaddr.
* prctl.c (prctl_exit): Use printnum_int and printnum_long.
(sys_arch_prctl): Do not check for syserror.
diff --git a/prctl.c b/prctl.c
index 4a6bd25..364a43d 100644
--- a/prctl.c
+++ b/prctl.c
@@ -175,7 +175,6 @@
 static int
 prctl_exit(struct tcb *tcp)
 {
-	unsigned long addr;
 	unsigned int i;
 
 	switch (tcp->u_arg[0]) {
@@ -194,13 +193,7 @@
 	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:
@@ -234,13 +227,7 @@
 
 	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:
@@ -299,8 +286,6 @@
 	case ARCH_GET_GS:
 	case ARCH_GET_FS:
 		if (exiting(tcp)) {
-			if (syserror(tcp))
-				break;
 			tprints(", ");
 			printnum_long(tcp, tcp->u_arg[1], "%#lx");
 		}
diff --git a/util.c b/util.c
index ed2da67..a7d2bd8 100644
--- a/util.c
+++ b/util.c
@@ -389,11 +389,7 @@
 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("]");						\
@@ -405,12 +401,7 @@
 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(", ");						\