diff options
Diffstat (limited to 'libc/sysdeps')
| -rw-r--r-- | libc/sysdeps/linux/mips/Makefile | 2 | ||||
| -rw-r--r-- | libc/sysdeps/linux/mips/clone.S | 26 | 
2 files changed, 20 insertions, 8 deletions
| diff --git a/libc/sysdeps/linux/mips/Makefile b/libc/sysdeps/linux/mips/Makefile index 15bdf9b1b..80694efc9 100644 --- a/libc/sysdeps/linux/mips/Makefile +++ b/libc/sysdeps/linux/mips/Makefile @@ -30,7 +30,7 @@ TARGET_MACHINE_TYPE=$(shell $(CC) -dumpmachine)  CRT0=crt0.S  CRT0_OBJ=$(patsubst %.S,%.o, $(CRT0)) -SSRC=bsd-_setjmp.S bsd-setjmp.S setjmp.S #fork.S clone.S +SSRC=bsd-_setjmp.S bsd-setjmp.S setjmp.S clone.S #fork.S  SOBJS=$(patsubst %.S,%.o, $(SSRC))  CSRC=__longjmp.c  brk.c vfork.c setjmp_aux.c _mmap.c pipe.c diff --git a/libc/sysdeps/linux/mips/clone.S b/libc/sysdeps/linux/mips/clone.S index 6f6a6c5b7..4091f6b65 100644 --- a/libc/sysdeps/linux/mips/clone.S +++ b/libc/sysdeps/linux/mips/clone.S @@ -21,14 +21,21 @@     and invokes a function in the right context after its all over.  */  #include <asm/unistd.h> -#include <sysdep.h> +#include <sys/regdef.h>  #define _ERRNO_H	1  #include <bits/errno.h> +#include <asm/asm.h>  /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) */  	.text -NESTED(__clone,4*SZREG,sp) +.globl   __clone ; +	.align       2; +	.type         __clone,@function; +	.ent        __clone, 0; +	 +__clone: +	.frame	    sp, 4*SZREG, sp  #ifdef __PIC__  	.set		noreorder  	.cpload		$25 @@ -66,7 +73,7 @@ NESTED(__clone,4*SZREG,sp)  	/* Successful return from the parent */  	addiu		sp,32 -	ret +	j $31  ; nop  	/* Something bad happened -- no child created */  error: @@ -77,13 +84,17 @@ error:  #else  	j		__syscall_error  #endif -	END(__clone) +	.end  __clone  /* Load up the arguments to the function.  Put this block of code in     its own function so that we can terminate the stack trace with our     debug info.  */ -ENTRY(__thread_start) +.globl  __thread_start; +	.align 2; +	.ent  __thread_start, 0; + +__thread_start:  	/* cp is already loaded.  */  	.cprestore	16  	/* The stackframe has been created on entry of clone().  */ @@ -102,6 +113,7 @@ ENTRY(__thread_start)  #else  	jal		_exit  #endif -	END(__thread_start) +	.end  __thread_start -weak_alias(__clone, clone) +.weak clone; +	clone = __clone | 
