The `too much stuff, just check the ChangeLog' update
diff --git a/syscall.c b/syscall.c
index 47bf16d..29a805e 100644
--- a/syscall.c
+++ b/syscall.c
@@ -775,7 +775,8 @@
 	scno = tcp->status.PR_WHAT;
 #endif /* !HAVE_PR_SYSCALL */
 #endif
-	tcp->scno = scno;
+	if (!(tcp->flags & TCB_INSYSCALL))
+		tcp->scno = scno;
 	return 1;
 }
 
@@ -1074,10 +1075,14 @@
 	}
 #elif defined (IA64)
 	{
-		unsigned long *bsp, i;
+		unsigned long *bsp, cfm, i;
 
 		if (upeek(pid, PT_AR_BSP, (long *) &bsp) < 0)
 			return -1;
+		if (upeek(pid, PT_CFM, (long *) &cfm) < 0)
+			return -1;
+
+		bsp = ia64_rse_skip_regs(bsp, -(cfm & 0x7f));
 
 		tcp->u_nargs = sysent[tcp->scno].nargs;
 		for (i = 0; i < tcp->u_nargs; ++i) {