$NetBSD: patch-au,v 1.1 1998/12/28 22:22:02 bad Exp $

--- /dev/null	Sun Oct 25 03:17:31 1998
+++ machdep/syscall-sparc-netbsd-1.3.S	Sat Oct 24 21:39:15 1998
@@ -0,0 +1,171 @@
+/* ==== syscall.S ============================================================
+ * Copyright (c) 1994 Chris Provenzano, proven@mit.edu
+ * All rights reserved.
+ *
+ */
+
+#ifndef lint
+	.text
+	.asciz "$Id: patch-au,v 1.1 1998/12/28 22:22:02 bad Exp $";
+#endif
+ 
+#include <sys/syscall.h>
+
+#define	SYSCALL(x)					\
+	.globl _machdep_sys_##x;		\
+									\
+_machdep_sys_##x:;					\
+									\
+	mov SYS_##x, %g1;   			\
+	ta 0;							\
+	bcs,a 2b;						\
+	sub %r0,%o0,%o0;				\
+	retl							
+
+
+/*
+ * Initial asm stuff for all functions.
+ */
+	.text
+	.align	4
+
+/* ==========================================================================
+ * error code for all syscalls. The error value is returned as the negative
+ * of the errno value.
+ */
+
+1:
+	sub		%r0, %o0, %o0
+2:
+	retl
+	nop
+
+/* ==========================================================================
+ * machdep_sys_pipe()
+ */
+    .globl _machdep_sys_pipe
+
+_machdep_sys_pipe:
+    mov  %o0, %o2
+    mov  SYS_pipe, %g1
+    ta  0
+    bcs 1b
+    nop
+    st  %o0, [ %o2 ]
+    st  %o1, [ %o2 + 4 ]
+    retl 
+    mov  %g0, %o0
+
+/* ==========================================================================
+ * machdep_sys_fork()
+ */
+    .globl _machdep_sys_fork;
+
+_machdep_sys_fork:;
+
+    mov SYS_fork, %g1;
+    ta 0;
+    bcs 1b;
+    nop;
+	dec %o1;
+    retl;
+	and %o0, %o1, %o0;	! return 0 in child, pid in parent
+
+#ifndef SYS___sigprocmask14
+/* ==========================================================================
+ * machdep_sys_sigprocmask()
+ */
+    .globl _machdep_sys_sigprocmask;
+
+_machdep_sys_sigprocmask:;
+
+	ld [%o1], %o1; 
+    mov SYS_sigprocmask, %g1;
+    ta 0;
+    bcs 1b;
+    nop;
+    retl
+	nop
+#endif
+
+#ifndef SYS___sigsuspend14
+/* ==========================================================================
+ * machdep_sys_sigsuspend()
+ */
+    .globl _machdep_sys_sigsuspend;
+
+_machdep_sys_sigsuspend:;
+
+	ld [%o0], %o0; 
+    mov SYS_sigsuspend, %g1;
+    ta 0;
+    bcs 1b;
+    nop;
+    retl
+	nop
+#endif
+
+/* ==========================================================================
+ * machdep_sys_fstat()
+ */
+    .globl _machdep_sys_fstat;
+
+_machdep_sys_fstat:;
+
+    mov SYS___fstat13, %g1;
+    ta 0;
+    bcs 1b;
+    nop;
+    retl
+	nop
+
+/* ==========================================================================
+ * machdep_sys___syscall()
+ */
+_machdep_sys___syscall:;
+
+    mov SYS___syscall, %g1;
+    ta 0;
+    bcs 1b;
+    nop;
+    retl
+	nop
+
+/* ==========================================================================
+ * machdep_sys_lseek()
+ */
+	.global _machdep_sys_lseek
+
+_machdep_sys_lseek:
+	save %sp,-112,%sp
+	mov %i1,%o4
+	mov %i2,%o5
+	st %i3,[%sp+92]
+	mov 0,%o0
+	mov SYS_lseek,%o1
+	mov %i0,%o2
+	call _machdep_sys___syscall,0
+	mov 0,%o3
+	mov %o0,%i0
+	mov %o1,%i1
+	ret
+	restore
+
+/* ==========================================================================
+ * machdep_sys_ftruncate()
+ */
+	.global _machdep_sys_ftruncate
+
+_machdep_sys_ftruncate:
+	save %sp,-104,%sp
+	mov %i1,%o4
+	mov %i2,%o5
+	mov 0,%o0
+	mov SYS_ftruncate,%o1
+	mov %i0,%o2
+	call _machdep_sys___syscall,0
+	mov 0,%o3
+	mov %o0,%o1
+	sra %o0,31,%o0
+	ret
+	restore %g0,%o1,%o0