summaryrefslogtreecommitdiff
path: root/lib/libpthread/machdep/syscall-template-i386-sco-3.2v5.S
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libpthread/machdep/syscall-template-i386-sco-3.2v5.S')
-rw-r--r--lib/libpthread/machdep/syscall-template-i386-sco-3.2v5.S67
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/libpthread/machdep/syscall-template-i386-sco-3.2v5.S b/lib/libpthread/machdep/syscall-template-i386-sco-3.2v5.S
new file mode 100644
index 00000000000..753475b5c3d
--- /dev/null
+++ b/lib/libpthread/machdep/syscall-template-i386-sco-3.2v5.S
@@ -0,0 +1,67 @@
+#include <sys/errno.h>
+#include <sys/syscall.h>
+
+#ifdef _SCO_ELF
+
+#define NAME(X) machdep_sys_##X
+#define END(X) 1: ; .type NAME(X),@function ; .size NAME(X),1b - NAME(X)
+#define GETBX(X) \
+ push %ebx; \
+ call 1f; \
+1: \
+ popl %ebx;
+#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; \
+ .byte 0x9a; .long 0; .word 7; \
+ jae 1f; \
+ cmp $(ERESTART), %eax; \
+ je NAME(x); \
+ neg %eax; \
+1: \
+ ret; \
+ END(x)
+
+#else
+
+#define SYSCALL(x) \
+ .globl _machdep_sys_/**/x; \
+ \
+machdep_sys_/**/x:; \
+ \
+ movl $(SYS_/**/x), %eax; \
+ .byte 0x9a; .long 0; .word 7; \
+ jae 1f; \
+ neg %eax;
+1: \
+ ret;
+
+#endif
+
+
+/*
+ * Initial asm stuff for all functions.
+ */
+ .text
+ .align 2
+
+
+/* ==========================================================================
+ * error code for all syscalls. The error value is returned as the negative
+ * of the errno value.
+ */
+
+#define XSYSCALL(NAME) SYSCALL(NAME)
+
+XSYSCALL(SYSCALL_NAME)