Optimize tabto()

tabto is used in many lines of strace output.
On glibc, tprintf("%*s", col - curcol, "") is noticeably slow
compared to tprintf("                 "). Use the latter.
Observed ~15% reduction of time spent in userspace.

* defs.h: Drop extern declaration of acolumn. Make tabto()
take no parameters.
* process.c (sys_exit): Call tabto() with no parameters.
* syscall.c (trace_syscall_exiting): Call tabto() with no parameters.
* strace.c: Make acolumn static, add static char *acolumn_spaces.
(main): Allocate acolumn_spaces as a string of spaces.
(printleader): Call tabto() with no parameters.
(tabto): Use simpler method to print lots of spaces.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
diff --git a/strace.c b/strace.c
index 04af6b5..02324f7 100644
--- a/strace.c
+++ b/strace.c
@@ -119,8 +119,9 @@
 static uid_t run_uid;
 static gid_t run_gid;
 
-int acolumn = DEFAULT_ACOLUMN;
 int max_strlen = DEFAULT_STRLEN;
+static int acolumn = DEFAULT_ACOLUMN;
+static char *acolumn_spaces;
 static char *outfname = NULL;
 static FILE *outf;
 static int curcol;
@@ -1033,6 +1034,8 @@
 			break;
 		case 'a':
 			acolumn = atoi(optarg);
+			if (acolumn < 0)
+				error_msg_and_die("Bad column width '%s'", optarg);
 			break;
 		case 'e':
 			qualify(optarg);
@@ -1086,6 +1089,12 @@
 		}
 	}
 
+	acolumn_spaces = malloc(acolumn + 1);
+	if (!acolumn_spaces)
+		error_msg_and_die("Out of memory");
+	memset(acolumn_spaces, ' ', acolumn);
+	acolumn_spaces[acolumn] = '\0';
+
 	if ((optind == argc) == !pflag_seen)
 		usage(stderr, 1);
 
@@ -2641,7 +2650,7 @@
 		if (tcp_last->ptrace_errno) {
 			if (tcp_last->flags & TCB_INSYSCALL) {
 				tprintf(" <unavailable>) ");
-				tabto(acolumn);
+				tabto();
 			}
 			tprintf("= ? <unavailable>\n");
 			tcp_last->ptrace_errno = 0;
@@ -2687,10 +2696,10 @@
 }
 
 void
-tabto(int col)
+tabto(void)
 {
-	if (curcol < col)
-		tprintf("%*s", col - curcol, "");
+	if (curcol < acolumn)
+		tprintf(acolumn_spaces + curcol);
 }
 
 void