176 lines
3.6 KiB
Text
176 lines
3.6 KiB
Text
$NetBSD: patch-au,v 1.3 2001/04/19 13:28:49 wiz Exp $
|
|
--- machdep/syscall-sparc-netbsd-1.3.S.orig Thu Apr 12 06:57:19 2001
|
|
+++ machdep/syscall-sparc-netbsd-1.3.S Thu Apr 12 07:15:26 2001
|
|
@@ -0,0 +1,172 @@
|
|
+/* ==== syscall.S ============================================================
|
|
+ * Copyright (c) 1994 Chris Provenzano, proven@mit.edu
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef lint
|
|
+ .text
|
|
+ .asciz "$Id: patch-au,v 1.3 2001/04/19 13:28:49 wiz Exp $";
|
|
+#endif
|
|
+
|
|
+#include <machine/asm.h>
|
|
+#include <sys/syscall.h>
|
|
+
|
|
+#define SYSCALL(x) \
|
|
+ .globl _C_LABEL(machdep_sys_##x); \
|
|
+ \
|
|
+_C_LABEL(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 _C_LABEL(machdep_sys_pipe)
|
|
+
|
|
+_C_LABEL(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 _C_LABEL(machdep_sys_fork);
|
|
+
|
|
+_C_LABEL(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 _C_LABEL(machdep_sys_sigprocmask);
|
|
+
|
|
+_C_LABEL(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 _C_LABEL(machdep_sys_sigsuspend);
|
|
+
|
|
+_C_LABEL(machdep_sys_sigsuspend):;
|
|
+
|
|
+ ld [%o0], %o0;
|
|
+ mov SYS_sigsuspend, %g1;
|
|
+ ta 0;
|
|
+ bcs 1b;
|
|
+ nop;
|
|
+ retl
|
|
+ nop
|
|
+#endif
|
|
+
|
|
+/* ==========================================================================
|
|
+ * machdep_sys_fstat()
|
|
+ */
|
|
+ .globl _C_LABEL(machdep_sys_fstat);
|
|
+
|
|
+_C_LABEL(machdep_sys_fstat):;
|
|
+
|
|
+ mov SYS___fstat13, %g1;
|
|
+ ta 0;
|
|
+ bcs 1b;
|
|
+ nop;
|
|
+ retl
|
|
+ nop
|
|
+
|
|
+/* ==========================================================================
|
|
+ * machdep_sys___syscall()
|
|
+ */
|
|
+_C_LABEL(machdep_sys___syscall):;
|
|
+
|
|
+ mov SYS___syscall, %g1;
|
|
+ ta 0;
|
|
+ bcs 1b;
|
|
+ nop;
|
|
+ retl
|
|
+ nop
|
|
+
|
|
+/* ==========================================================================
|
|
+ * machdep_sys_lseek()
|
|
+ */
|
|
+ .global _C_LABEL(machdep_sys_lseek)
|
|
+
|
|
+_C_LABEL(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 _C_LABEL(machdep_sys___syscall),0
|
|
+ mov 0,%o3
|
|
+ mov %o0,%i0
|
|
+ mov %o1,%i1
|
|
+ ret
|
|
+ restore
|
|
+
|
|
+/* ==========================================================================
|
|
+ * machdep_sys_ftruncate()
|
|
+ */
|
|
+ .global _C_LABEL(machdep_sys_ftruncate)
|
|
+
|
|
+_C_LABEL(machdep_sys_ftruncate):
|
|
+ save %sp,-104,%sp
|
|
+ mov %i1,%o4
|
|
+ mov %i2,%o5
|
|
+ mov 0,%o0
|
|
+ mov SYS_ftruncate,%o1
|
|
+ mov %i0,%o2
|
|
+ call _C_LABEL(machdep_sys___syscall),0
|
|
+ mov 0,%o3
|
|
+ mov %o0,%o1
|
|
+ sra %o0,31,%o0
|
|
+ ret
|
|
+ restore %g0,%o1,%o0
|