From a334319f6530564d22e775935d9c91663623a1b4 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 22 Dec 2004 20:10:10 +0000 Subject: (CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4. --- sysdeps/unix/sysv/linux/sparc/sparc64/clone.S | 75 ++++++++------------------- 1 file changed, 21 insertions(+), 54 deletions(-) (limited to 'sysdeps/unix/sysv/linux/sparc/sparc64/clone.S') diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S index ebfce9e2c5..a7c248b2e8 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S @@ -22,52 +22,34 @@ #include #include -#include -#include -#define CLONE_VM 0x00000100 -#define CLONE_THREAD 0x00010000 - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, void *tls, pid_t *ctid); */ - - .register %g2,#scratch - .register %g3,#scratch +/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */ .text + .align 4 + .globl __clone + .type __clone,@function -ENTRY (__clone) +__clone: save %sp, -192, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) /* sanity check arguments */ - brz,pn %i0, 99f /* fn non-NULL? */ - mov %i0, %g2 - brz,pn %i1, 99f /* child_stack non-NULL? */ - mov %i2, %o0 /* clone flags */ - - /* The child_stack is the top of the stack, allocate one - whole stack frame from that as this is what the kernel - expects. Also, subtract STACK_BIAS. */ - sub %i1, 192 + 0x7ff, %o1 - mov %i3, %g3 - mov %i2, %g4 - - mov %i4,%o2 /* PTID */ - mov %i5,%o3 /* TLS */ - ldx [%fp+0x7ff+176],%o4 /* CTID */ + brz,pn %i0, 99f + mov %i0, %l0 /* save fn */ + brz,pn %i1, 99f + mov %i3, %l3 /* save arg */ /* Do the system call */ + sub %i1, 0x7ff, %o1 + mov %i2, %o0 set __NR_clone, %g1 ta 0x6d bcs,pn %xcc, 99f nop brnz,pn %o1, __thread_start - nop - jmpl %i7 + 8, %g0 - restore %o0, %g0, %o0 + mov %o0, %i0 + ret + restore 99: #ifndef _LIBC_REENTRANT #ifdef PIC @@ -89,33 +71,18 @@ ENTRY (__clone) nop st %i0, [%o0] #endif - jmpl %i7 + 8, %g0 + ret restore %g0,-1,%o0 -END(__clone) + .size __clone, .-__clone .type __thread_start,@function __thread_start: - cfi_startproc -#ifdef RESET_PID - sethi %hi(CLONE_THREAD), %l0 - andcc %g4, %l0, %g0 - bne,pt %icc, 1f - andcc %g4, CLONE_VM, %g0 - bne,a,pn %icc, 2f - mov -1,%o0 - set __NR_getpid,%g1 - ta 0x6d -2: st %o0,[%g7 + PID] - st %o0,[%g7 + TID] -1: -#endif mov %g0, %fp /* terminate backtrace */ - call %g2 - mov %g3,%o0 + sub %sp, 6*8, %sp /* provide arg storage */ + call %l0 + mov %l3,%o0 call _exit,0 nop - cfi_endproc - - .size __thread_start, .-__thread_start + .size __thread_start, .-__thread_start -weak_alias (__clone, clone) +weak_alias(__clone, clone) -- cgit 1.4.1