diff --git a/syscall.c b/syscall.c
index b94ad65..3f69c18 100644
--- a/syscall.c
+++ b/syscall.c
@@ -43,19 +43,19 @@
 #include <sys/param.h>
 
 #ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#ifndef PTRACE_PEEKUSR
-# define PTRACE_PEEKUSR PTRACE_PEEKUSER
-#endif
+# include <sys/reg.h>
+# ifndef PTRACE_PEEKUSR
+#  define PTRACE_PEEKUSR PTRACE_PEEKUSER
+# endif
 #elif defined(HAVE_LINUX_PTRACE_H)
-#undef PTRACE_SYSCALL
+# undef PTRACE_SYSCALL
 # ifdef HAVE_STRUCT_IA64_FPREG
 #  define ia64_fpreg XXX_ia64_fpreg
 # endif
 # ifdef HAVE_STRUCT_PT_ALL_USER_REGS
 #  define pt_all_user_regs XXX_pt_all_user_regs
 # endif
-#include <linux/ptrace.h>
+# include <linux/ptrace.h>
 # undef ia64_fpreg
 # undef pt_all_user_regs
 #endif
@@ -73,28 +73,29 @@
 #endif
 
 #ifndef ERESTARTSYS
-#define ERESTARTSYS	512
+# define ERESTARTSYS	512
 #endif
-#ifndef ERESTARTNOINTR
-#define ERESTARTNOINTR	513
+# ifndef ERESTARTNOINTR
+# define ERESTARTNOINTR	513
 #endif
-#ifndef ERESTARTNOHAND
-#define ERESTARTNOHAND	514	/* restart if no handler.. */
+# ifndef ERESTARTNOHAND
+# define ERESTARTNOHAND	514	/* restart if no handler.. */
 #endif
-#ifndef ENOIOCTLCMD
-#define ENOIOCTLCMD	515	/* No ioctl command */
+# ifndef ENOIOCTLCMD
+# define ENOIOCTLCMD	515	/* No ioctl command */
 #endif
-#ifndef ERESTART_RESTARTBLOCK
-#define ERESTART_RESTARTBLOCK 516	/* restart by calling sys_restart_syscall */
+# ifndef ERESTART_RESTARTBLOCK
+# define ERESTART_RESTARTBLOCK 516	/* restart by calling sys_restart_syscall */
 #endif
+
 #ifndef NSIG
-#warning: NSIG is not defined, using 32
-#define NSIG 32
+# warning: NSIG is not defined, using 32
+# define NSIG 32
 #endif
 #ifdef ARM
 /* Ugh. Is this really correct? ARM has no RT signals?! */
-#undef NSIG
-#define NSIG 32
+# undef NSIG
+# define NSIG 32
 #endif
 
 #include "syscall.h"
@@ -115,13 +116,13 @@
 
 #if SUPPORTED_PERSONALITIES >= 2
 static const struct sysent sysent1[] = {
-#include "syscallent1.h"
+# include "syscallent1.h"
 };
 #endif
 
 #if SUPPORTED_PERSONALITIES >= 3
 static const struct sysent sysent2[] = {
-#include "syscallent2.h"
+# include "syscallent2.h"
 };
 #endif
 
@@ -162,13 +163,13 @@
 
 #if SUPPORTED_PERSONALITIES >= 2
 static const char *const errnoent1[] = {
-#include "errnoent1.h"
+# include "errnoent1.h"
 };
 static const char *const signalent1[] = {
-#include "signalent1.h"
+# include "signalent1.h"
 };
 static const struct ioctlent ioctlent1[] = {
-#include "ioctlent1.h"
+# include "ioctlent1.h"
 };
 enum { nsyscalls1 = ARRAY_SIZE(sysent1) };
 enum { nerrnos1 = ARRAY_SIZE(errnoent1) };
@@ -179,13 +180,13 @@
 
 #if SUPPORTED_PERSONALITIES >= 3
 static const char *const errnoent2[] = {
-#include "errnoent2.h"
+# include "errnoent2.h"
 };
 static const char *const signalent2[] = {
-#include "signalent2.h"
+# include "signalent2.h"
 };
 static const struct ioctlent ioctlent2[] = {
-#include "ioctlent2.h"
+# include "ioctlent2.h"
 };
 enum { nsyscalls2 = ARRAY_SIZE(sysent2) };
 enum { nerrnos2 = ARRAY_SIZE(errnoent2) };
@@ -280,13 +281,13 @@
 		return;
 	tcp->currpers = personality;
 
-#if defined(POWERPC64) || defined(X86_64)
+# if defined(POWERPC64) || defined(X86_64)
 	if (!qflag) {
 		static const char *const names[] = {"64 bit", "32 bit"};
 		fprintf(stderr, "[ Process PID=%d runs in %s mode. ]\n",
 			tcp->pid, names[personality]);
 	}
-#endif
+# endif
 }
 #endif
 
@@ -338,7 +339,7 @@
 		else
 			qual_flags1[n] |= bitflag;
 	}
-#endif /* SUPPORTED_PERSONALITIES >= 2 */
+#endif
 
 #if SUPPORTED_PERSONALITIES >= 3
 	if (pers == 2 || pers < 0) {
@@ -347,7 +348,7 @@
 		else
 			qual_flags2[n] |= bitflag;
 	}
-#endif /* SUPPORTED_PERSONALITIES >= 3 */
+#endif
 }
 
 static int
@@ -375,7 +376,7 @@
 			qualify_one(i, bitflag, not, 1);
 			rc = 0;
 		}
-#endif /* SUPPORTED_PERSONALITIES >= 2 */
+#endif
 
 #if SUPPORTED_PERSONALITIES >= 3
 	for (i = 0; i < nsyscalls2; i++)
@@ -383,7 +384,7 @@
 			qualify_one(i, bitflag, not, 2);
 			rc = 0;
 		}
-#endif /* SUPPORTED_PERSONALITIES >= 3 */
+#endif
 
 	return rc;
 }
@@ -501,13 +502,13 @@
 			for (i = 0; i < nsyscalls1; i++)
 				if (sysent1[i].sys_flags & n)
 					qualify_one(i, opt->bitflag, not, 1);
-#endif /* SUPPORTED_PERSONALITIES >= 2 */
+#endif
 
 #if SUPPORTED_PERSONALITIES >= 3
 			for (i = 0; i < nsyscalls2; i++)
 				if (sysent2[i].sys_flags & n)
 					qualify_one(i, opt->bitflag, not, 2);
-#endif /* SUPPORTED_PERSONALITIES >= 3 */
+#endif
 
 			continue;
 		}
@@ -606,7 +607,7 @@
 {
 	long val = -1;
 
-#if defined (SPARC) || defined (SPARC64)
+#if defined(SPARC) || defined(SPARC64)
 	struct pt_regs regs;
 	if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)&regs, 0) < 0)
 		return -1;
@@ -619,12 +620,9 @@
 		return -1;
 #endif
 
-
-
 	return val;
 }
 
-
 int
 is_restart_error(struct tcb *tcp)
 {
@@ -640,9 +638,9 @@
 	return 0;
 }
 
-# if defined(I386)
+#if defined(I386)
 struct pt_regs i386_regs;
-# elif defined(X86_64)
+#elif defined(X86_64)
 /*
  * On 32 bits, pt_regs and user_regs_struct are the same,
  * but on 64 bits, user_regs_struct has six more fields:
@@ -650,46 +648,46 @@
  * PTRACE_GETREGS fills them too, so struct pt_regs would overflow.
  */
 static struct user_regs_struct x86_64_regs;
-# elif defined (IA64)
+#elif defined(IA64)
 long r8, r10, psr; /* TODO: make static? */
 long ia32 = 0; /* not static */
-# elif defined (POWERPC)
+#elif defined(POWERPC)
 static long result;
-# elif defined (M68K)
+#elif defined(M68K)
 static long d0;
-# elif defined(BFIN)
+#elif defined(BFIN)
 static long r0;
-# elif defined (ARM)
+#elif defined(ARM)
 static struct pt_regs regs;
-# elif defined (ALPHA)
+#elif defined(ALPHA)
 static long r0;
 static long a3;
-# elif defined(AVR32)
+#elif defined(AVR32)
 static struct pt_regs regs;
-# elif defined (SPARC) || defined (SPARC64)
+#elif defined(SPARC) || defined(SPARC64)
 static struct pt_regs regs;
 static unsigned long trap;
-# elif defined(LINUX_MIPSN32)
+#elif defined(LINUX_MIPSN32)
 static long long a3;
 static long long r2;
-# elif defined(MIPS)
+#elif defined(MIPS)
 static long a3;
 static long r2;
-# elif defined(S390) || defined(S390X)
+#elif defined(S390) || defined(S390X)
 static long gpr2;
 static long pc;
 static long syscall_mode;
-# elif defined(HPPA)
+#elif defined(HPPA)
 static long r28;
-# elif defined(SH)
+#elif defined(SH)
 static long r0;
-# elif defined(SH64)
+#elif defined(SH64)
 static long r9;
-# elif defined(CRISV10) || defined(CRISV32)
+#elif defined(CRISV10) || defined(CRISV32)
 static long r10;
-# elif defined(MICROBLAZE)
+#elif defined(MICROBLAZE)
 static long r3;
-# endif
+#endif
 
 /* Returns:
  * 0: "ignore this ptrace stop", bail out of trace_syscall() silently.
@@ -703,7 +701,7 @@
 {
 	long scno = 0;
 
-# if defined(S390) || defined(S390X)
+#if defined(S390) || defined(S390X)
 	if (upeek(tcp, PT_GPR2, &syscall_mode) < 0)
 		return -1;
 
@@ -771,11 +769,11 @@
 			scno = ptrace(PTRACE_PEEKTEXT, tcp->pid, svc_addr, 0);
 			if (errno)
 				return -1;
-#  if defined(S390X)
+# if defined(S390X)
 			scno >>= 48;
-#  else
+# else
 			scno >>= 16;
-#  endif
+# endif
 			tmp = 0;
 			offset_reg = (opcode & 0x00f00000) >> 20;
 			if (offset_reg && (upeek(tcp, gpr_offset[offset_reg], &tmp) < 0))
@@ -784,10 +782,10 @@
 			scno = (scno | tmp) & 0xff;
 		}
 	}
-# elif defined (POWERPC)
+#elif defined(POWERPC)
 	if (upeek(tcp, sizeof(unsigned long)*PT_R0, &scno) < 0)
 		return -1;
-#  ifdef POWERPC64
+# ifdef POWERPC64
 	/* TODO: speed up strace by not doing this at every syscall.
 	 * We only need to do it after execve.
 	 */
@@ -804,20 +802,20 @@
 	else
 		currpers = 1;
 	update_personality(tcp, currpers);
-#  endif
-# elif defined(AVR32)
+# endif
+#elif defined(AVR32)
 	/* Read complete register set in one go. */
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, &regs) < 0)
 		return -1;
 	scno = regs.r8;
-# elif defined(BFIN)
+#elif defined(BFIN)
 	if (upeek(tcp, PT_ORIG_P0, &scno))
 		return -1;
-# elif defined (I386)
+#elif defined(I386)
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &i386_regs) < 0)
 		return -1;
 	scno = i386_regs.orig_eax;
-# elif defined (X86_64)
+#elif defined(X86_64)
 	int currpers;
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &x86_64_regs) < 0)
 		return -1;
@@ -837,7 +835,7 @@
 			currpers = current_personality;
 			break;
 	}
-#  if 0
+# if 0
 	/* This version analyzes the opcode of a syscall instruction.
 	 * (int 0x80 on i386 vs. syscall on x86-64)
 	 * It works, but is too complicated.
@@ -867,9 +865,9 @@
 				"PID=%d\n", (int)call, tcp->pid);
 			break;
 	}
-#  endif
+# endif
 	update_personality(tcp, currpers);
-# elif defined(IA64)
+#elif defined(IA64)
 #	define IA64_PSR_IS	((long)1 << 34)
 	if (upeek(tcp, PT_CR_IPSR, &psr) >= 0)
 		ia32 = (psr & IA64_PSR_IS) != 0;
@@ -880,7 +878,7 @@
 		if (upeek(tcp, PT_R15, &scno) < 0)
 			return -1;
 	}
-# elif defined (ARM)
+#elif defined(ARM)
 	/* Read complete register set in one go. */
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)&regs) == -1)
 		return -1;
@@ -939,10 +937,10 @@
 		fprintf(stderr, "pid %d stray syscall entry\n", tcp->pid);
 		tcp->flags |= TCB_INSYSCALL;
 	}
-# elif defined (M68K)
+#elif defined(M68K)
 	if (upeek(tcp, 4*PT_ORIG_D0, &scno) < 0)
 		return -1;
-# elif defined (LINUX_MIPSN32)
+#elif defined(LINUX_MIPSN32)
 	unsigned long long regs[38];
 
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &regs) < 0)
@@ -958,7 +956,7 @@
 			return 0;
 		}
 	}
-# elif defined (MIPS)
+#elif defined(MIPS)
 	if (upeek(tcp, REG_A3, &a3) < 0)
 		return -1;
 	if (upeek(tcp, REG_V0, &scno) < 0)
@@ -971,7 +969,7 @@
 			return 0;
 		}
 	}
-# elif defined (ALPHA)
+#elif defined(ALPHA)
 	if (upeek(tcp, REG_A3, &a3) < 0)
 		return -1;
 	if (upeek(tcp, REG_R0, &scno) < 0)
@@ -988,7 +986,7 @@
 			return 0;
 		}
 	}
-# elif defined (SPARC) || defined (SPARC64)
+#elif defined(SPARC) || defined(SPARC64)
 	/* Everything we need is in the current register set. */
 	if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)&regs, 0) < 0)
 		return -1;
@@ -996,12 +994,12 @@
 	/* Disassemble the syscall trap. */
 	/* Retrieve the syscall trap instruction. */
 	errno = 0;
-#  if defined(SPARC64)
+# if defined(SPARC64)
 	trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)regs.tpc, 0);
 	trap >>= 32;
-#  else
+# else
 	trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)regs.pc, 0);
-#  endif
+# endif
 	if (errno)
 		return -1;
 
@@ -1032,11 +1030,11 @@
 		update_personality(tcp, 1);
 		break;
 	default:
-#  if defined (SPARC64)
+# if defined(SPARC64)
 		fprintf(stderr, "syscall: unknown syscall trap %08lx %016lx\n", trap, regs.tpc);
-#  else
+# else
 		fprintf(stderr, "syscall: unknown syscall trap %08lx %08lx\n", trap, regs.pc);
-#  endif
+# endif
 		return -1;
 	}
 
@@ -1049,10 +1047,10 @@
 		scno = regs.u_regs[U_REG_O0];
 		memmove(&regs.u_regs[U_REG_O0], &regs.u_regs[U_REG_O1], 7*sizeof(regs.u_regs[0]));
 	}
-# elif defined(HPPA)
+#elif defined(HPPA)
 	if (upeek(tcp, PT_GR20, &scno) < 0)
 		return -1;
-# elif defined(SH)
+#elif defined(SH)
 	/*
 	 * In the new syscall ABI, the system call number is in R3.
 	 */
@@ -1072,22 +1070,22 @@
 				correct_scno);
 		scno = correct_scno;
 	}
-# elif defined(SH64)
+#elif defined(SH64)
 	if (upeek(tcp, REG_SYSCALL, &scno) < 0)
 		return -1;
 	scno &= 0xFFFF;
-# elif defined(CRISV10) || defined(CRISV32)
+#elif defined(CRISV10) || defined(CRISV32)
 	if (upeek(tcp, 4*PT_R9, &scno) < 0)
 		return -1;
-# elif defined(TILE)
+#elif defined(TILE)
 	if (upeek(tcp, PTREGS_OFFSET_REG(10), &scno) < 0)
 		return -1;
-# elif defined(MICROBLAZE)
+#elif defined(MICROBLAZE)
 	if (upeek(tcp, 0, &scno) < 0)
 		return -1;
-# endif
+#endif
 
-#if   defined(SH)
+#if defined(SH)
 	/* new syscall ABI returns result in R0 */
 	if (upeek(tcp, 4*REG_REG0, (long *)&r0) < 0)
 		return -1;
@@ -1097,7 +1095,6 @@
 		return -1;
 #endif
 
-
 	tcp->scno = scno;
 	return 1;
 }
@@ -1112,16 +1109,14 @@
 static int
 syscall_fixup_on_sysenter(struct tcb *tcp)
 {
-
-
 	/* A common case of "not a syscall entry" is post-execve SIGTRAP */
-#if defined (I386)
+#if defined(I386)
 	if (i386_regs.eax != -ENOSYS) {
 		if (debug)
 			fprintf(stderr, "not a syscall entry (eax = %ld)\n", i386_regs.eax);
 		return 0;
 	}
-#elif defined (X86_64)
+#elif defined(X86_64)
 	{
 		long rax = x86_64_regs.rax;
 		if (current_personality == 1)
@@ -1132,7 +1127,7 @@
 			return 0;
 		}
 	}
-#elif defined (S390) || defined (S390X)
+#elif defined(S390) || defined(S390X)
 	/* TODO: we already fetched PT_GPR2 in get_scno
 	 * and stored it in syscall_mode, reuse it here
 	 * instead of re-fetching?
@@ -1146,7 +1141,7 @@
 			fprintf(stderr, "not a syscall entry (gpr2 = %ld)\n", gpr2);
 		return 0;
 	}
-#elif defined (M68K)
+#elif defined(M68K)
 	/* TODO? Eliminate upeek's in arches below like we did in x86 */
 	if (upeek(tcp, 4*PT_D0, &d0) < 0)
 		return -1;
@@ -1228,15 +1223,15 @@
 	else
 		nargs = tcp->u_nargs = MAX_ARGS;
 
-# if defined(S390) || defined(S390X)
+#if defined(S390) || defined(S390X)
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, i==0 ? PT_ORIGGPR2 : PT_GPR2 + i*sizeof(long), &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(ALPHA)
+#elif defined(ALPHA)
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, REG_A0+i, &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(IA64)
+#elif defined(IA64)
 	if (!ia32) {
 		unsigned long *out0, cfm, sof, sol;
 		long rbs_end;
@@ -1274,7 +1269,7 @@
 			tcp->u_arg[i] &= 0xffffffff;
 		}
 	}
-# elif defined(LINUX_MIPSN32) || defined(LINUX_MIPSN64)
+#elif defined(LINUX_MIPSN32) || defined(LINUX_MIPSN64)
 	/* N32 and N64 both use up to six registers.  */
 	unsigned long long regs[38];
 
@@ -1283,11 +1278,11 @@
 
 	for (i = 0; i < nargs; ++i) {
 		tcp->u_arg[i] = regs[REG_A0 + i];
-#  if defined(LINUX_MIPSN32)
+# if defined(LINUX_MIPSN32)
 		tcp->ext_arg[i] = regs[REG_A0 + i];
-#  endif
+# endif
 	}
-# elif defined(MIPS)
+#elif defined(MIPS)
 	if (nargs > 4) {
 		long sp;
 
@@ -1303,10 +1298,10 @@
 			if (upeek(tcp, REG_A0 + i, &tcp->u_arg[i]) < 0)
 				return -1;
 	}
-# elif defined(POWERPC)
-#  ifndef PT_ORIG_R3
-#   define PT_ORIG_R3 34
-#  endif
+#elif defined(POWERPC)
+# ifndef PT_ORIG_R3
+#  define PT_ORIG_R3 34
+# endif
 	for (i = 0; i < nargs; ++i) {
 		if (upeek(tcp, (i==0) ?
 			(sizeof(unsigned long) * PT_ORIG_R3) :
@@ -1314,17 +1309,17 @@
 				&tcp->u_arg[i]) < 0)
 			return -1;
 	}
-# elif defined(SPARC) || defined(SPARC64)
+#elif defined(SPARC) || defined(SPARC64)
 	for (i = 0; i < nargs; ++i)
 		tcp->u_arg[i] = regs.u_regs[U_REG_O0 + i];
-# elif defined(HPPA)
+#elif defined(HPPA)
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, PT_GR26-4*i, &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(ARM)
+#elif defined(ARM)
 	for (i = 0; i < nargs; ++i)
 		tcp->u_arg[i] = regs.uregs[i];
-# elif defined(AVR32)
+#elif defined(AVR32)
 	(void)i;
 	(void)nargs;
 	tcp->u_arg[0] = regs.r12;
@@ -1333,13 +1328,13 @@
 	tcp->u_arg[3] = regs.r9;
 	tcp->u_arg[4] = regs.r5;
 	tcp->u_arg[5] = regs.r3;
-# elif defined(BFIN)
+#elif defined(BFIN)
 	static const int argreg[MAX_ARGS] = { PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5 };
 
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, argreg[i], &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(SH)
+#elif defined(SH)
 	static const int syscall_regs[MAX_ARGS] = {
 		4 * (REG_REG0+4), 4 * (REG_REG0+5), 4 * (REG_REG0+6),
 		4 * (REG_REG0+7), 4 * (REG_REG0  ), 4 * (REG_REG0+1)
@@ -1348,7 +1343,7 @@
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, syscall_regs[i], &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(SH64)
+#elif defined(SH64)
 	int i;
 	/* Registers used by SH5 Linux system calls for parameters */
 	static const int syscall_regs[MAX_ARGS] = { 2, 3, 4, 5, 6, 7 };
@@ -1356,7 +1351,7 @@
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, REG_GENERAL(syscall_regs[i]), &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(X86_64)
+#elif defined(X86_64)
 	(void)i;
 	(void)nargs;
 	if (current_personality == 0) { /* x86-64 ABI */
@@ -1375,11 +1370,11 @@
 		tcp->u_arg[4] = (long)(int)x86_64_regs.rdi;
 		tcp->u_arg[5] = (long)(int)x86_64_regs.rbp;
 	}
-# elif defined(MICROBLAZE)
+#elif defined(MICROBLAZE)
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, (5 + i) * 4, &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(CRISV10) || defined(CRISV32)
+#elif defined(CRISV10) || defined(CRISV32)
 	static const int crisregs[MAX_ARGS] = {
 		4*PT_ORIG_R10, 4*PT_R11, 4*PT_R12,
 		4*PT_R13     , 4*PT_MOF, 4*PT_SRP
@@ -1388,15 +1383,15 @@
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, crisregs[i], &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(TILE)
+#elif defined(TILE)
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, PTREGS_OFFSET_REG(i), &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(M68K)
+#elif defined(M68K)
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, (i < 5 ? i : i + 2)*4, &tcp->u_arg[i]) < 0)
 			return -1;
-# elif defined(I386)
+#elif defined(I386)
 	(void)i;
 	(void)nargs;
 	tcp->u_arg[0] = i386_regs.ebx;
@@ -1405,11 +1400,11 @@
 	tcp->u_arg[3] = i386_regs.esi;
 	tcp->u_arg[4] = i386_regs.edi;
 	tcp->u_arg[5] = i386_regs.ebp;
-# else /* Other architecture (32bits specific) */
+#else /* Other architecture (32bits specific) */
 	for (i = 0; i < nargs; ++i)
 		if (upeek(tcp, i*4, &tcp->u_arg[i]) < 0)
 			return -1;
-# endif
+#endif
 	return 1;
 }
 
@@ -1456,25 +1451,24 @@
 
 #if defined(SYS_socket_subcall) || defined(SYS_ipc_subcall)
 	while (SCNO_IN_RANGE(tcp->scno)) {
-#ifdef SYS_socket_subcall
+# ifdef SYS_socket_subcall
 		if (sysent[tcp->scno].sys_func == sys_socketcall) {
 			decode_subcall(tcp, SYS_socket_subcall,
 				SYS_socket_nsubcalls, deref_style);
 			break;
 		}
-#endif
-#ifdef SYS_ipc_subcall
+# endif
+# ifdef SYS_ipc_subcall
 		if (sysent[tcp->scno].sys_func == sys_ipc) {
 			decode_subcall(tcp, SYS_ipc_subcall,
 				SYS_ipc_nsubcalls, shift_style);
 			break;
 		}
-#endif
+# endif
 		break;
 	}
 #endif /* SYS_socket_subcall || SYS_ipc_subcall */
 
-
 	internal_syscall(tcp);
 
 	if ((SCNO_IN_RANGE(tcp->scno) &&
@@ -1523,10 +1517,10 @@
 static int
 get_syscall_result(struct tcb *tcp)
 {
-# if defined(S390) || defined(S390X)
+#if defined(S390) || defined(S390X)
 	if (upeek(tcp, PT_GPR2, &gpr2) < 0)
 		return -1;
-# elif defined (POWERPC)
+#elif defined(POWERPC)
 # define SO_MASK 0x10000000
 	{
 		long flags;
@@ -1537,20 +1531,20 @@
 		if (flags & SO_MASK)
 			result = -result;
 	}
-# elif defined(AVR32)
+#elif defined(AVR32)
 	/* Read complete register set in one go. */
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, &regs) < 0)
 		return -1;
-# elif defined(BFIN)
+#elif defined(BFIN)
 	if (upeek(tcp, PT_R0, &r0) < 0)
 		return -1;
-# elif defined (I386)
+#elif defined(I386)
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &i386_regs) < 0)
 		return -1;
-# elif defined (X86_64)
+#elif defined(X86_64)
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &x86_64_regs) < 0)
 		return -1;
-# elif defined(IA64)
+#elif defined(IA64)
 #	define IA64_PSR_IS	((long)1 << 34)
 	if (upeek(tcp, PT_CR_IPSR, &psr) >= 0)
 		ia32 = (psr & IA64_PSR_IS) != 0;
@@ -1558,49 +1552,49 @@
 		return -1;
 	if (upeek(tcp, PT_R10, &r10) < 0)
 		return -1;
-# elif defined (ARM)
+#elif defined(ARM)
 	/* Read complete register set in one go. */
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)&regs) == -1)
 		return -1;
-# elif defined (M68K)
+#elif defined(M68K)
 	if (upeek(tcp, 4*PT_D0, &d0) < 0)
 		return -1;
-# elif defined (LINUX_MIPSN32)
+#elif defined(LINUX_MIPSN32)
 	unsigned long long regs[38];
 
 	if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long) &regs) < 0)
 		return -1;
 	a3 = regs[REG_A3];
 	r2 = regs[REG_V0];
-# elif defined (MIPS)
+#elif defined(MIPS)
 	if (upeek(tcp, REG_A3, &a3) < 0)
 		return -1;
 	if (upeek(tcp, REG_V0, &r2) < 0)
 		return -1;
-# elif defined (ALPHA)
+#elif defined(ALPHA)
 	if (upeek(tcp, REG_A3, &a3) < 0)
 		return -1;
 	if (upeek(tcp, REG_R0, &r0) < 0)
 		return -1;
-# elif defined (SPARC) || defined (SPARC64)
+#elif defined(SPARC) || defined(SPARC64)
 	/* Everything we need is in the current register set. */
 	if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)&regs, 0) < 0)
 		return -1;
-# elif defined(HPPA)
+#elif defined(HPPA)
 	if (upeek(tcp, PT_GR28, &r28) < 0)
 		return -1;
-# elif defined(SH)
-# elif defined(SH64)
-# elif defined(CRISV10) || defined(CRISV32)
+#elif defined(SH)
+#elif defined(SH64)
+#elif defined(CRISV10) || defined(CRISV32)
 	if (upeek(tcp, 4*PT_R10, &r10) < 0)
 		return -1;
-# elif defined(TILE)
-# elif defined(MICROBLAZE)
+#elif defined(TILE)
+#elif defined(MICROBLAZE)
 	if (upeek(tcp, 3 * 4, &r3) < 0)
 		return -1;
-# endif
+#endif
 
-#if   defined(SH)
+#if defined(SH)
 	/* new syscall ABI returns result in R0 */
 	if (upeek(tcp, 4*REG_REG0, (long *)&r0) < 0)
 		return -1;
@@ -1610,7 +1604,6 @@
 		return -1;
 #endif
 
-
 	return 1;
 }
 
@@ -1624,9 +1617,7 @@
 static int
 syscall_fixup_on_sysexit(struct tcb *tcp)
 {
-
-
-# if defined (S390) || defined (S390X)
+#if defined(S390) || defined(S390X)
 	if (syscall_mode != -ENOSYS)
 		syscall_mode = tcp->scno;
 	if ((tcp->flags & TCB_WAITEXECVE)
@@ -1638,7 +1629,7 @@
 		 */
 		gpr2 = 0;
 	}
-# endif
+#endif
 	return 1;
 }
 
@@ -1650,12 +1641,12 @@
 is_negated_errno(unsigned long int val)
 {
 	unsigned long int max = -(long int) nerrnos;
-# if SUPPORTED_PERSONALITIES > 1
+#if SUPPORTED_PERSONALITIES > 1
 	if (personality_wordsize[current_personality] < sizeof(val)) {
 		val = (unsigned int) val;
 		max = (unsigned int) max;
 	}
-# endif
+#endif
 	return val > max;
 }
 
@@ -1668,7 +1659,7 @@
 	    sysent[tcp->scno].sys_flags & SYSCALL_NEVER_FAILS) {
 		check_errno = 0;
 	}
-# if defined(S390) || defined(S390X)
+#if defined(S390) || defined(S390X)
 	if (check_errno && is_negated_errno(gpr2)) {
 		tcp->u_rval = -1;
 		u_error = -gpr2;
@@ -1676,7 +1667,7 @@
 	else {
 		tcp->u_rval = gpr2;
 	}
-# elif defined(I386)
+#elif defined(I386)
 	if (check_errno && is_negated_errno(i386_regs.eax)) {
 		tcp->u_rval = -1;
 		u_error = -i386_regs.eax;
@@ -1684,7 +1675,7 @@
 	else {
 		tcp->u_rval = i386_regs.eax;
 	}
-# elif defined(X86_64)
+#elif defined(X86_64)
 	if (check_errno && is_negated_errno(x86_64_regs.rax)) {
 		tcp->u_rval = -1;
 		u_error = -x86_64_regs.rax;
@@ -1692,7 +1683,7 @@
 	else {
 		tcp->u_rval = x86_64_regs.rax;
 	}
-# elif defined(IA64)
+#elif defined(IA64)
 	if (ia32) {
 		int err;
 
@@ -1712,14 +1703,14 @@
 			tcp->u_rval = r8;
 		}
 	}
-# elif defined(MIPS)
+#elif defined(MIPS)
 	if (check_errno && a3) {
 		tcp->u_rval = -1;
 		u_error = r2;
 	} else {
 		tcp->u_rval = r2;
 	}
-# elif defined(POWERPC)
+#elif defined(POWERPC)
 	if (check_errno && is_negated_errno(result)) {
 		tcp->u_rval = -1;
 		u_error = -result;
@@ -1727,7 +1718,7 @@
 	else {
 		tcp->u_rval = result;
 	}
-# elif defined(M68K)
+#elif defined(M68K)
 	if (check_errno && is_negated_errno(d0)) {
 		tcp->u_rval = -1;
 		u_error = -d0;
@@ -1735,7 +1726,7 @@
 	else {
 		tcp->u_rval = d0;
 	}
-# elif defined(ARM)
+#elif defined(ARM)
 	if (check_errno && is_negated_errno(regs.ARM_r0)) {
 		tcp->u_rval = -1;
 		u_error = -regs.ARM_r0;
@@ -1743,7 +1734,7 @@
 	else {
 		tcp->u_rval = regs.ARM_r0;
 	}
-# elif defined(AVR32)
+#elif defined(AVR32)
 	if (check_errno && regs.r12 && (unsigned) -regs.r12 < nerrnos) {
 		tcp->u_rval = -1;
 		u_error = -regs.r12;
@@ -1751,14 +1742,14 @@
 	else {
 		tcp->u_rval = regs.r12;
 	}
-# elif defined(BFIN)
+#elif defined(BFIN)
 	if (check_errno && is_negated_errno(r0)) {
 		tcp->u_rval = -1;
 		u_error = -r0;
 	} else {
 		tcp->u_rval = r0;
 	}
-# elif defined(ALPHA)
+#elif defined(ALPHA)
 	if (check_errno && a3) {
 		tcp->u_rval = -1;
 		u_error = r0;
@@ -1766,7 +1757,7 @@
 	else {
 		tcp->u_rval = r0;
 	}
-# elif defined(SPARC)
+#elif defined(SPARC)
 	if (check_errno && regs.psr & PSR_C) {
 		tcp->u_rval = -1;
 		u_error = regs.u_regs[U_REG_O0];
@@ -1774,7 +1765,7 @@
 	else {
 		tcp->u_rval = regs.u_regs[U_REG_O0];
 	}
-# elif defined(SPARC64)
+#elif defined(SPARC64)
 	if (check_errno && regs.tstate & 0x1100000000UL) {
 		tcp->u_rval = -1;
 		u_error = regs.u_regs[U_REG_O0];
@@ -1782,7 +1773,7 @@
 	else {
 		tcp->u_rval = regs.u_regs[U_REG_O0];
 	}
-# elif defined(HPPA)
+#elif defined(HPPA)
 	if (check_errno && is_negated_errno(r28)) {
 		tcp->u_rval = -1;
 		u_error = -r28;
@@ -1790,7 +1781,7 @@
 	else {
 		tcp->u_rval = r28;
 	}
-# elif defined(SH)
+#elif defined(SH)
 	if (check_errno && is_negated_errno(r0)) {
 		tcp->u_rval = -1;
 		u_error = -r0;
@@ -1798,7 +1789,7 @@
 	else {
 		tcp->u_rval = r0;
 	}
-# elif defined(SH64)
+#elif defined(SH64)
 	if (check_errno && is_negated_errno(r9)) {
 		tcp->u_rval = -1;
 		u_error = -r9;
@@ -1806,7 +1797,7 @@
 	else {
 		tcp->u_rval = r9;
 	}
-# elif defined(CRISV10) || defined(CRISV32)
+#elif defined(CRISV10) || defined(CRISV32)
 	if (check_errno && r10 && (unsigned) -r10 < nerrnos) {
 		tcp->u_rval = -1;
 		u_error = -r10;
@@ -1814,7 +1805,7 @@
 	else {
 		tcp->u_rval = r10;
 	}
-# elif defined(TILE)
+#elif defined(TILE)
 	long rval;
 	if (upeek(tcp, PTREGS_OFFSET_REG(0), &rval) < 0)
 		return -1;
@@ -1825,7 +1816,7 @@
 	else {
 		tcp->u_rval = rval;
 	}
-# elif defined(MICROBLAZE)
+#elif defined(MICROBLAZE)
 	if (check_errno && is_negated_errno(r3)) {
 		tcp->u_rval = -1;
 		u_error = -r3;
@@ -1833,7 +1824,7 @@
 	else {
 		tcp->u_rval = r3;
 	}
-# endif
+#endif
 	tcp->u_error = u_error;
 	return 1;
 }
