about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/sparc/sparc32/clone.S')
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/clone.S46
1 files changed, 17 insertions, 29 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
index f91fc4f629..66cdbf3ca7 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
@@ -24,7 +24,6 @@
 #include <asm/errno.h>
 #include <asm/unistd.h>
 #include <tcb-offsets.h>
-#include <sysdep.h>
 
 #define CLONE_VM	0x00000100
 #define CLONE_THREAD	0x00010000
@@ -33,26 +32,19 @@
 	     pid_t *ptid, void *tls, pid_t *ctid); */
 
 	.text
-ENTRY (__clone)
+	.align	4
+	.globl	__clone
+	.type	__clone,@function
+
+__clone:
 	save	%sp,-96,%sp
-	cfi_def_cfa_register(%fp)
-	cfi_window_save
-	cfi_register(%o7, %i7)
 
 	/* sanity check arguments */
-	orcc	%i0,%g0,%g2
+	tst	%i0
 	be	.Lerror
 	 orcc	%i1,%g0,%o1
 	be	.Lerror
 	 mov	%i2,%o0
-
-	/* The child_stack is the top of the stack, allocate one
-	   whole stack frame from that as this is what the kernel
-	   expects.  */
-	sub	%o1, 96, %o1
-	mov	%i3, %g3
-	mov	%i2, %g4
-
 	/* ptid */
 	mov	%i4,%o2
 	/* tls */
@@ -67,43 +59,39 @@ ENTRY (__clone)
 	 tst	%o1
 	bne	__thread_start
 	 nop
-	jmpl	%i7 + 8, %g0
+	ret
 	 restore %o0,%g0,%o0
 
 .Lerror:
 	call	__errno_location
 	 or	%g0,EINVAL,%i0
 	st	%i0,[%o0]
-	jmpl	%i7 + 8, %g0
+	ret
 	 restore %g0,-1,%o0
-END(__clone)
+
+	.size	__clone, .-__clone
 
 	.type	__thread_start,@function
-__thread_start:
-	cfi_startproc
 
+__thread_start:
 #ifdef RESET_PID
 	sethi	%hi(CLONE_THREAD), %l0
-	andcc	%g4, %l0, %g0
+	andcc	%i2, %l0, %g0
 	bne	1f
-	 andcc	%g4, CLONE_VM, %g0
+	 andcc	%i2, CLONE_VM, %g0
 	bne,a	2f
 	 mov	-1,%o0
 	set	__NR_getpid,%g1
 	ta	0x10
-2:
-	st	%o0,[%g7 + PID]
+2:	st	%o0,[%g7 + PID]
 	st	%o0,[%g7 + TID]
 1:
 #endif
-	mov	%g0, %fp	/* terminate backtrace */
-	call	%g2
-	 mov	%g3,%o0
+	call	%i0
+	 mov	%i3,%o0
 	call	_exit,0
 	 nop
 
-	cfi_endproc
-
 	.size	__thread_start, .-__thread_start
 
-weak_alias (__clone, clone)
+weak_alias(__clone, clone)