summaryrefslogtreecommitdiff
path: root/mit-pthreads/machdep/syscall-template-ip22-irix-5.2.S
diff options
context:
space:
mode:
Diffstat (limited to 'mit-pthreads/machdep/syscall-template-ip22-irix-5.2.S')
-rw-r--r--mit-pthreads/machdep/syscall-template-ip22-irix-5.2.S51
1 files changed, 51 insertions, 0 deletions
diff --git a/mit-pthreads/machdep/syscall-template-ip22-irix-5.2.S b/mit-pthreads/machdep/syscall-template-ip22-irix-5.2.S
new file mode 100644
index 00000000000..722b001671b
--- /dev/null
+++ b/mit-pthreads/machdep/syscall-template-ip22-irix-5.2.S
@@ -0,0 +1,51 @@
+#include <sys.s>
+#include <sys/regdef.h>
+/* #include <sys/asm.h> */
+
+/*
+ Kernel syscall interface:
+ Input:
+ v0 syscall number
+ Output:
+
+ This macro is similar to SYSCALL in sys/syscall.h, but not completely.
+ There's room for optimization, if we assume this will continue to
+ be assembled as one file.
+
+ Compile with -DPIC for pic code.
+*/
+
+#ifdef PIC
+#define PICOPT .option pic2
+#else
+#define PICOPT
+#endif
+
+
+#define YSYSCALL(x) \
+ PICOPT; \
+ .globl machdep_sys_##x; \
+ .ent machdep_sys_##x, 0; \
+machdep_sys_##x:; \
+ .frame sp,0,ra; \
+ .set noreorder; \
+ li v0, SYS_##x; \
+ syscall; \
+ bne a3, zero, 1b; \
+ nop; \
+ j ra; \
+ nop; \
+ .end machdep_sys_##x
+
+/* ==========================================================================
+ * error code for all syscalls. The error value is returned as the negative
+ * of the errno value.
+ */
+
+1:
+ subu v0,zero,v0;
+ j ra;
+
+#define XSYSCALL(x) YSYSCALL(x)
+
+XSYSCALL(SYSCALL_NAME)