remove constant number of system calls
authorBill Joy <root@ucbvax.Berkeley.EDU>
Sun, 25 Jul 1982 09:23:46 +0000 (01:23 -0800)
committerBill Joy <root@ucbvax.Berkeley.EDU>
Sun, 25 Jul 1982 09:23:46 +0000 (01:23 -0800)
SCCS-vsn: sys/vax/vax/trap.c 4.14

usr/src/sys/vax/vax/trap.c

index 76f2f65..6c673f0 100644 (file)
@@ -1,4 +1,4 @@
-/*     trap.c  4.13    82/07/12        */
+/*     trap.c  4.14    82/07/18        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -17,7 +17,8 @@
 
 #define        USER    040             /* user-mode flag added to type */
 
 
 #define        USER    040             /* user-mode flag added to type */
 
-struct sysent  sysent[128];
+struct sysent  sysent[];
+int    nsysent;
 
 char   *trap_type[] = {
        "Reserved addressing mode",
 
 char   *trap_type[] = {
        "Reserved addressing mode",
@@ -157,7 +158,7 @@ out:
  */
 /*ARGSUSED*/
 syscall(sp, type, code, pc, psl)
  */
 /*ARGSUSED*/
 syscall(sp, type, code, pc, psl)
-unsigned code;
+       unsigned code;
 {
        register int *locr0 = ((int *)&psl)-PS;
        register caddr_t params;                /* known to be r10 below */
 {
        register int *locr0 = ((int *)&psl)-PS;
        register caddr_t params;                /* known to be r10 below */
@@ -176,11 +177,11 @@ unsigned code;
        opc = pc - 2;
        if (code > 63)
                opc -= 2;
        opc = pc - 2;
        if (code > 63)
                opc -= 2;
-       callp = &sysent[code&0177];
+       callp = (code >= nsysent) ? &sysent[63] : &sysent[code];
        if (callp == sysent) {
                i = fuword(params);
                params += NBPW;
        if (callp == sysent) {
                i = fuword(params);
                params += NBPW;
-               callp = &sysent[i&0177];
+               callp = (code >= nsysent) ? &sysent[63] : &sysent[code];
        }
        if (i = callp->sy_narg * sizeof (int)) {
                asm("prober $3,r9,(r10)");              /* GROT */
        }
        if (i = callp->sy_narg * sizeof (int)) {
                asm("prober $3,r9,(r10)");              /* GROT */