/* * This file contains the system call macros and syscall * numbers used by the shared library loader. Taken from * Linux/MIPS 2.4.17 version kernel. */ #define __NR_SYSCALL_BASE 4000 #define __NR_exit (__NR_SYSCALL_BASE + 1) #define __NR_read (__NR_SYSCALL_BASE + 3) #define __NR_write (__NR_SYSCALL_BASE + 4) #define __NR_open (__NR_SYSCALL_BASE + 5) #define __NR_close (__NR_SYSCALL_BASE + 6) #define __NR_getuid (__NR_SYSCALL_BASE + 24) #define __NR_getgid (__NR_SYSCALL_BASE + 47) #define __NR_geteuid (__NR_SYSCALL_BASE + 49) #define __NR_getegid (__NR_SYSCALL_BASE + 50) #define __NR_readlink (__NR_SYSCALL_BASE + 85) #define __NR_mmap (__NR_SYSCALL_BASE + 90) #define __NR_munmap (__NR_SYSCALL_BASE + 91) #define __NR_stat (__NR_SYSCALL_BASE + 106) #define __NR_mprotect (__NR_SYSCALL_BASE + 125) /* Here are the macros which define how this platform makes * system calls. This particular variant does _not_ set * errno (note how it is disabled in __syscall_return) since * these will get called before the errno symbol is dynamicly * linked. */ #define _syscall0(type,name) \ type name(void) \ { \ register unsigned long __v0 asm("$2") = __NR_##name; \ register unsigned long __a3 asm("$7"); \ \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ "li\t$2, %2\t\t\t# " #name "\n\t" \ "syscall\n\t" \ ".set\treorder" \ : "=&r" (__v0), "=r" (__a3) \ : "i" (__NR_##name) \ : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \ \ if (__a3 == 0) \ return (type) __v0; \ return -1; \ } #define _syscall1(type,name,atype,a) \ type name(atype a) \ { \ register unsigned long __v0 asm("$2") = __NR_##name; \ register unsigned long __a0 asm("$4") = (unsigned long) a; \ register unsigned long __a3 asm("$7"); \ \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ "li\t$2, %3\t\t\t# " #name "\n\t" \ "syscall\n\t" \ ".set\treorder" \ : "=&r" (__v0), "=r" (__a3) \ : "r" (__a0), "i" (__NR_##name) \ : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \ \ if (__a3 == 0) \ return (type) __v0; \ return (type) -1; \ } #define _syscall2(type,name,atype,a,btype,b) \ type name(atype a, btype b) \ { \ 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 __a3 asm("$7"); \ \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ "li\t$2, %4\t\t\t# " #name "\n\t" \ "syscall\n\t" \ ".set\treorder" \ : "=&r" (__v0), "=r" (__a3) \ : "r" (__a0), "r" (__a1), "i" (__NR_##name) \ : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \ \ if (__a3 == 0) \ return (type) __v0; \ return (type) -1; \ } #define _syscall3(type,name,atype,a,btype,b,ctype,c) \ type name(atype a, btype b, ctype c) \ { \ 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"); \ \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ "li\t$2, %5\t\t\t# " #name "\n\t" \ "syscall\n\t" \ ".set\treorder" \ : "=&r" (__v0), "=r" (__a3) \ : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \ : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \ \ if (__a3 == 0) \ return (type) __v0; \ return (type) -1; \ } #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \ type name(atype a, btype b, ctype c, dtype d) \ { \ 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" \ "li\t$2, %5\t\t\t# " #name "\n\t" \ "syscall\n\t" \ ".set\treorder" \ : "=&r" (__v0), "+r" (__a3) \ : "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_##name) \ : "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24"); \ \ if (__a3 == 0) \ return (type) __v0; \ return (type) -1; \ }