svn commit: r204534 - user/jmallett/octeon/sys/mips/mips

Juli Mallett jmallett at FreeBSD.org
Mon Mar 1 20:42:30 UTC 2010


Author: jmallett
Date: Mon Mar  1 20:42:29 2010
New Revision: 204534
URL: http://svn.freebsd.org/changeset/base/204534

Log:
  Add support for N32 and N64 syscalls -- take additional arguments from ta[0-4].
  
  XXX I did this by breaking O32 support, but I only care about N32 right now.

Modified:
  user/jmallett/octeon/sys/mips/mips/trap.c

Modified: user/jmallett/octeon/sys/mips/mips/trap.c
==============================================================================
--- user/jmallett/octeon/sys/mips/mips/trap.c	Mon Mar  1 20:41:27 2010	(r204533)
+++ user/jmallett/octeon/sys/mips/mips/trap.c	Mon Mar  1 20:42:29 2010	(r204534)
@@ -286,7 +286,6 @@ trap(struct trapframe *trapframe)
 	pt_entry_t *pte;
 	unsigned int entry;
 	pmap_t pmap;
-	int quad_syscall = 0;
 	int access_type;
 	ksiginfo_t ksi;
 	char *msg = NULL;
@@ -632,6 +631,7 @@ dofault:
 
 			switch (code) {
 			case SYS_syscall:
+			case SYS___syscall:
 				/*
 				 * Code is first argument, followed by
 				 * actual args.
@@ -640,24 +640,11 @@ dofault:
 				args[0] = locr0->a1;
 				args[1] = locr0->a2;
 				args[2] = locr0->a3;
-				nsaved = 3;
-				break;
-
-			case SYS___syscall:
-				/*
-				 * Like syscall, but code is a quad, so as
-				 * to maintain quad alignment for the rest
-				 * of the arguments.
-				 */
-				if (_QUAD_LOWWORD == 0) {
-					code = locr0->a0;
-				} else {
-					code = locr0->a1;
-				}
-				args[0] = locr0->a2;
-				args[1] = locr0->a3;
-				nsaved = 2;
-				quad_syscall = 1;
+				args[3] = locr0->t4;
+				args[4] = locr0->t5;
+				args[5] = locr0->t6;
+				args[6] = locr0->t7;
+				nsaved = 7;
 				break;
 
 			default:
@@ -665,7 +652,11 @@ dofault:
 				args[1] = locr0->a1;
 				args[2] = locr0->a2;
 				args[3] = locr0->a3;
-				nsaved = 4;
+				args[4] = locr0->t4;
+				args[5] = locr0->t5;
+				args[6] = locr0->t6;
+				args[7] = locr0->t7;
+				nsaved = 8;
 			}
 #ifdef TRAP_DEBUG
 			printf("SYSCALL #%d pid:%u\n", code, p->p_pid);
@@ -695,6 +686,11 @@ dofault:
 					goto done;
 				}
 			}
+#ifdef TRAP_DEBUG
+			for (i = 0; i < nargs; i++) {
+				printf("args[%d] = %#llx\n", i, args[i]);
+			}
+#endif
 #ifdef KTRACE
 			if (KTRPOINT(td, KTR_SYSCALL))
 				ktrsyscall(code, nargs, args);


More information about the svn-src-user mailing list