Various fixes, see ChangeLog for details
diff --git a/syscall.c b/syscall.c
index cea9e67..5ff3906 100644
--- a/syscall.c
+++ b/syscall.c
@@ -394,7 +394,7 @@
}
}
-enum subcall_style { shift_style, deref_style, mask_style };
+enum subcall_style { shift_style, deref_style, mask_style, door_style };
#if !(defined(LINUX) && defined(ALPHA))
@@ -480,6 +480,16 @@
if (sysent[tcp->scno].nargs != -1)
tcp->u_nargs = sysent[tcp->scno].nargs;
break;
+ case door_style:
+ /*
+ * Oh, yuck. The call code is the *sixth* argument.
+ */
+ tcp->scno = subcall + tcp->u_arg[5];
+ if (sysent[tcp->scno].nargs != -1)
+ tcp->u_nargs = sysent[tcp->scno].nargs;
+ else
+ tcp->u_nargs--;
+ break;
}
}
#endif
@@ -1201,6 +1211,12 @@
SYS_context_nsubcalls, shift_style);
break;
#endif /* SYS_context_subcall */
+#ifdef SYS_door_subcall
+ case SYS_door:
+ decode_subcall(tcp, SYS_door_subcall,
+ SYS_door_nsubcalls, door_style);
+ break;
+#endif /* SYS_door_subcall */
#endif /* SVR4 */
#ifdef SUNOS4
case SYS_semsys: