diff options
author | Eric Andersen <andersen@codepoet.org> | 2002-04-02 21:12:37 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2002-04-02 21:12:37 +0000 |
commit | 96749a768287761528a05670560402a16f6839ac (patch) | |
tree | c53550a3ec7458f02da07d465c74bae3f752f499 /ldso/ldso/mips/dl-syscalls.h | |
parent | abdb41c778c5892d51fe92879d383eb8ba000028 (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.h | 30 |
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 |