summaryrefslogtreecommitdiff
path: root/ldso/ldso/mips/dl-syscalls.h
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-04-02 21:12:37 +0000
committerEric Andersen <andersen@codepoet.org>2002-04-02 21:12:37 +0000
commit96749a768287761528a05670560402a16f6839ac (patch)
treec53550a3ec7458f02da07d465c74bae3f752f499 /ldso/ldso/mips/dl-syscalls.h
parentabdb41c778c5892d51fe92879d383eb8ba000028 (diff)
Steven J. Hill's latest mips dynamic loader updates
Diffstat (limited to 'ldso/ldso/mips/dl-syscalls.h')
-rw-r--r--ldso/ldso/mips/dl-syscalls.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/ldso/ldso/mips/dl-syscalls.h b/ldso/ldso/mips/dl-syscalls.h
index feb54d4cf..da17d63b9 100644
--- a/ldso/ldso/mips/dl-syscalls.h
+++ b/ldso/ldso/mips/dl-syscalls.h
@@ -142,4 +142,34 @@ type name(atype a, btype b, ctype c, dtype d) \
return (type) -1; \
}
+#define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
+type name(atype a, btype b, ctype c, dtype d, etype e, ftype f) \
+{ \
+ register unsigned long __v0 asm("$2") = __NR_##name; \
+ register unsigned long __a0 asm("$4") = (unsigned long) a; \
+ register unsigned long __a1 asm("$5") = (unsigned long) b; \
+ register unsigned long __a2 asm("$6") = (unsigned long) c; \
+ register unsigned long __a3 asm("$7") = (unsigned long) d; \
+ \
+ __asm__ volatile ( \
+ ".set\tnoreorder\n\t" \
+ "lw\t$2, %6\n\t" \
+ "lw\t$8, %7\n\t" \
+ "subu\t$29, 32\n\t" \
+ "sw\t$2, 16($29)\n\t" \
+ "sw\t$8, 20($29)\n\t" \
+ "li\t$2, %5\t\t\t# " #name "\n\t" \
+ "syscall\n\t" \
+ "addiu\t$29, 32\n\t" \
+ ".set\treorder" \
+ : "=&r" (__v0), "+r" (__a3) \
+ : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name), \
+ "m" ((unsigned long)e), "m" ((unsigned long)f) \
+ : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \
+ \
+ if (__a3 == 0) \
+ return (type) __v0; \
+ return (type) -1; \
+}
+
#endif