From 63c324cb11bec09f26d4461242bb20040491bc8b Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Fri, 9 Aug 2002 13:41:25 +0000 Subject: New and improved fork for mips, thanks to the fine folks at Brecis Communications. --- libc/sysdeps/linux/mips/fork.S | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 libc/sysdeps/linux/mips/fork.S (limited to 'libc/sysdeps/linux/mips/fork.S') diff --git a/libc/sysdeps/linux/mips/fork.S b/libc/sysdeps/linux/mips/fork.S new file mode 100644 index 000000000..6d2b33dba --- /dev/null +++ b/libc/sysdeps/linux/mips/fork.S @@ -0,0 +1,65 @@ +#include + +#define ALIGN 2 + +/* Note: .abicalls goes at top of routine, and only one of them. */ +#if defined(USER_ABICALLS) +#define ABISETUP \ + .set noreorder; \ + .cpload t9; \ + .set reorder; + + .abicalls +#else +#define ABISETUP +#endif + +#ifndef __UCLIBC_USE_UNIFIED_SYSCALL__ +#define SYSCALL__(name) \ + .text; \ + .align ALIGN; \ + .globl name; \ + .ent name, 0; \ + name: ; \ + ABISETUP \ + li v0, __NR_##name ; \ + syscall; \ + la t3, errno; \ + beqz a3, 1f; \ + negu a1, v0; \ + sw a1, 0(t3); \ + li v0, -1; \ + 1: ; \ + j ra; \ + .end name; \ + .size name,.-name; +#else /* Unified syscall */ +#define SYSCALL__(name) \ + .text; \ +/* .align ALIGN;*/ \ + .globl name; \ + .ent name, 0; \ + name: ; \ + ABISETUP \ + .set push; \ + .set noreorder; \ + j __uClibc_syscall; \ + addiu v0, zero, __NR_##name ; \ + .set pop; \ + .end name; \ + .size name,.-name; +#endif /* __UCLIBC_USE_UNIFIED_SYSCALL__ */ + +#undef ALIGN +#define __ASSEMBLY__ +#include +#include +#include +#include +/* #include */ + +#undef ALIGN +#define ALIGN 2 +#define _SYSCALL0(type,name) SYSCALL__(name) +_SYSCALL0(pid_t, fork); + -- cgit v1.2.3