summaryrefslogtreecommitdiff
path: root/mit-pthreads/machdep/syscall-i386-sco-3.2v5.S
diff options
context:
space:
mode:
Diffstat (limited to 'mit-pthreads/machdep/syscall-i386-sco-3.2v5.S')
-rw-r--r--mit-pthreads/machdep/syscall-i386-sco-3.2v5.S442
1 files changed, 442 insertions, 0 deletions
diff --git a/mit-pthreads/machdep/syscall-i386-sco-3.2v5.S b/mit-pthreads/machdep/syscall-i386-sco-3.2v5.S
new file mode 100644
index 00000000000..0a60dcdd866
--- /dev/null
+++ b/mit-pthreads/machdep/syscall-i386-sco-3.2v5.S
@@ -0,0 +1,442 @@
+/* ==== syscall.S ============================================================
+ * Copyright (c) 1990 The Regents of the University of California.
+ * Copyright (c) 1995 Chris Provenzano, proven@mit.edu
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * William Jolitz.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Description : Machine dependent syscalls for i386/i486/i586
+ *
+ */
+
+#ifndef lint
+ .text
+ .asciz "syscall-i386-sco-3.2v5.S,v 1.2 1995/05/26 07:44:29 proven Exp";
+#endif
+
+#if defined(SYSLIBC_SCCS) && !defined(lint)
+ .asciz "@(#)syscall.s 5.1 (Berkeley) 4/23/90"
+#endif /* SYSLIBC_SCCS and not lint */
+
+#include <sys/errno.h>
+#include <sys/syscall.h>
+
+#ifdef _SCO_ELF
+
+#define NAME(X) machdep_sys_##X
+#define GETADDR(X) \
+ call 1f; \
+1: \
+ popl %ebx; \
+ addl $NAME(X)+[.-1b], %ebx
+
+#define END(X) 1: ; .type NAME(X),@function ; .size NAME(X),1b - NAME(X)
+
+#else
+
+#define NAME(X) _machdep_sys_##X
+#define END(X)
+
+#endif
+
+#ifdef __STDC__
+
+#define SYSCALL(x) \
+ .globl NAME(x); \
+ \
+NAME(x): \
+ movl $(SYS_##x##), %eax; \
+ lcall $7, $0; \
+ jae 1f; \
+ cmp $(ERESTART), %eax; \
+ je NAME(x); \
+ neg %eax; \
+1: \
+ ret; \
+\
+ END(x)
+
+
+#else
+
+#define SYSCALL(x) \
+ .globl NAME(x); \
+ \
+NAME(x): \
+ \
+ movl $(SYS_/**/x), %eax; \
+ lcall $7, $0; \
+ jb 1b; \
+ ret; \
+ END(x)
+
+#endif
+
+
+/*
+ * Initial asm stuff for all functions.
+ */
+ .text
+ .align 2
+
+/* ==========================================================================
+ * machdep_sys_fork()
+ */
+ .globl NAME(fork);
+
+NAME(fork):;
+ movl $(SYS_fork), %eax
+ lcall $7, $0
+ jae 1f
+ neg %eax
+ ret
+1:
+ test %edx, %edx
+ je 2f
+ xor %eax, %eax
+2:
+ ret;
+ END(fork)
+
+/* ==========================================================================
+ * NAME(getdents)
+ */
+ .globl NAME(getdents);
+
+NAME(getdents):
+ movl $(SYS_getdents), %eax;
+ lcall $7, $0
+ jae 1f
+ neg %eax
+1:
+ ret;
+ END(getdents)
+
+/* ==========================================================================
+ * NAME(fxstat)
+ */
+ .globl NAME(fxstat);
+
+NAME(fxstat):;
+ movl $(SYS_fxstat), %eax;
+ lcall $7, $0
+ jae 1f
+ neg %eax;
+ ret;
+1:
+ xor %eax, %eax;
+ ret;
+ END(fxstat)
+
+/* ==========================================================================
+ * NAME(signal)
+ */
+ .globl NAME(signal);
+
+NAME(signal):;
+ movl 4(%esp), %ecx
+ movl $(SYS_signal),%eax
+#if 0
+ call .L1
+.L1:
+ popl %edx
+ addl $(NAME(sigreturn)+[.-.L1]), %edx
+#else
+ movl $NAME(sigreturn), %edx
+#endif
+ lcall $7,$0
+ jae 1f
+# movl %eax, 12(%esp)
+ neg %eax
+ ret
+1:
+# xor %eax, %eax
+# movl %eax, 12(%esp)
+ ret
+ END(signal)
+
+/* ==========================================================================
+ * NAME(sigaction)
+ */
+ .globl NAME(sigaction);
+
+NAME(sigaction):
+ movl $(SYS_sigaction),%eax
+#if 0
+ call .L2
+.L2:
+ popl %edx
+ addl $(NAME(sigreturn)+[.-.L2]), %edx
+#else
+ movl $NAME(sigreturn), %edx
+#endif
+ lcall $7, $0
+ jb 1f
+ xor %eax, %eax
+ ret
+1:
+ neg %eax
+ ret
+ END(sigaction)
+
+ .globl NAME(sigreturn)
+NAME(sigreturn):
+ addl $4,%esp
+ lcall $0xf, $0
+ nop
+ nop
+ END(sigreturn)
+
+/* ==========================================================================
+ * NAME(waitpid)
+ */
+ .globl NAME(waitpid);
+
+NAME(waitpid):
+ .byte 0x9c
+ popl %eax
+ orl $0x8c4, %eax
+ pushl %eax
+ .byte 0x9d
+ movl $(SYS_wait), %eax
+ lcall $7, $0
+ jae 2f
+ cmpl $(ERESTART), %al
+ je NAME(waitpid)
+ neg %eax
+3:
+ ret
+2:
+ movl 8(%esp), %ecx
+ test %ecx,%ecx
+ je 3b
+ mov %edx, (%ecx)
+ ret
+ END(waitpid)
+
+/* ==========================================================================
+ * NAME(uname)
+ */
+ .globl NAME(uname);
+
+NAME(uname):
+ pushl $0
+ pushl $0
+ pushl 12(%esp)
+ subl $4, %esp
+ movl $(SYS_utssys), %eax
+ .byte 0x9a; .long 0; .word 7;
+ jb 1f
+ addl $16, %esp
+ ret
+1:
+ addl $16, %esp
+ neg %eax
+ ret
+ END(uname)
+
+
+/* ==========================================================================
+ * machdep_sys_ftruncate
+ */
+
+SYSCALL(ftruncate)
+
+/* ==========================================================================
+ * machdep_sys_ftime
+ */
+
+SYSCALL(ftime)
+
+/* ==========================================================================
+ * machdep_sys_gettimeofday()
+ */
+
+SYSCALL(gettimeofday)
+
+/* ==========================================================================
+ * machdep_sys_kill()
+ */
+
+SYSCALL(kill)
+
+/* ==========================================================================
+ * pthread_sys_setitimer
+ */
+ .globl NAME(setitimer);
+
+NAME(setitimer):;
+ movl $(SYS_setitimer), %eax;
+ lcall $7, $0
+ jae 1f
+ neg %eax
+ ret
+1:
+ xor %eax, %eax
+ ret;
+ END(setitimer)
+
+/* ==========================================================================
+ * pthread_sys_sysconf
+ */
+ .globl NAME(sysconf);
+
+NAME(sysconf):;
+ movl $(SYS_sysconf), %eax;
+ lcall $7, $0
+ jae 1f
+ neg %eax
+1:
+ ret;
+ END(sysconf)
+
+/* ==========================================================================
+ * pthread_sys_sysi86()
+ */
+ .globl NAME(sysi86);
+
+NAME(sysi86):;
+ movl $(SYS_sysi86), %eax
+ lcall $7, $0
+ jae 1f
+ neg %eax
+1:
+ ret;
+ END(sysi86)
+
+
+/* ==========================================================================
+ * machdep_sys_brk()
+ */
+ .globl NAME(brk);
+
+NAME(brk):;
+ movl $(SYS_break), %eax
+ lcall $7, $0
+ jae 1f
+ neg %eax
+ ret
+1:
+ xor %eax, %eax
+ ret;
+ END(brk)
+
+/* ==========================================================================
+ * machdep_sys_pipe()
+ */
+ .globl NAME(pipe);
+
+NAME(pipe):;
+ movl $(SYS_pipe), %eax;
+ lcall $7, $0
+ jae 1f
+ neg %eax
+ ret
+1:
+ movl 4(%esp), %ecx
+ movl %eax, (%ecx)
+ movl %edx, 4(%ecx)
+ xor %eax, %eax
+ ret;
+ END(brk)
+
+/* ==========================================================================
+ * machdep_sys_fcntl()
+ */
+ .globl NAME(fcntl);
+
+NAME(fcntl):;
+ movl $(SYS_fcntl), %eax
+ lcall $7, $0
+ jae 1f
+ neg %eax
+1:
+ ret
+ END(fcntl)
+
+
+/* ==========================================================================
+ * machdep_sys_select()
+ */
+ .globl NAME(select);
+
+NAME(select):;
+ movl $(SYS_select), %eax
+ lcall $7, $0
+ jae 1f
+ cmp $(ERESTART), %eax
+ jne 2f
+ movl $(EINTR), %eax
+2:
+ neg %eax
+1:
+ ret
+ END(select)
+
+
+/* ==========================================================================
+ * setjmp()
+ */
+ .globl setjmp;
+
+setjmp:
+ movl 4(%esp),%eax
+ movl %ebx,(%eax)
+ movl %esi,4(%eax)
+ movl %edi,8(%eax)
+ movl %ebp,12(%eax)
+ popl %edx
+ movl %esp,16(%eax)
+ movl %edx,20(%eax)
+ subl %eax,%eax
+ jmp *%edx
+1: ; .type setjmp,@function ; .size setjmp,1b - setjmp
+
+/* ==========================================================================
+ * longjmp()
+ */
+ .globl longjmp;
+
+longjmp:
+ movl 4(%esp),%edx
+ movl 8(%esp),%eax
+ movl 0(%edx),%ebx
+ movl 4(%edx),%esi
+ movl 8(%edx),%edi
+ movl 12(%edx),%ebp
+ movl 16(%edx),%esp
+ test %eax,%eax
+ jne 1f
+ inc %eax
+1:
+ jmp *20(%edx)
+1: ; .type longjmp,@function ; .size longjmp,1b - longjmp