diff options
author | David S. Miller <davem@davemloft.net> | 2014-06-13 14:41:58 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-06-13 14:47:53 -0700 |
commit | f6fdf53382922f51569f9dae0a0552e780a88fd6 (patch) | |
tree | 1bbff9c212c30f3a435d5b650c2736c5f3f5d791 /sysdeps/unix | |
parent | f5d71e140d9a5adfc7f6c190032d6bdaa3c3a171 (diff) | |
download | glibc-f6fdf53382922f51569f9dae0a0552e780a88fd6.tar.gz |
Consolidate sparc clone, fork, and vfork implementations.
* nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S: Delete.
* nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S: Delete.
* nptl/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S: Moved ...
* sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S: ... here.
* nptl/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S: Delete.
* nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S: Delete.
* nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S: Moved ...
* sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S: ... here.
* sysdeps/unix/sysv/linux/sparc/fork.S: Delete.
* sysdeps/unix/sysv/linux/sparc/pt-vfork.S: New file.
* sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__thread_start):
Remove RESET_PID cpp guards.
* sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__thread_start):
Remove RESET_PID cpp guards.
* sysdeps/unix/sysv/linux/sparc/vfork.S: Delete.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/pt-vfork.S | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/clone.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S (renamed from sysdeps/unix/sysv/linux/sparc/vfork.S) | 35 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/clone.S | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S (renamed from sysdeps/unix/sysv/linux/sparc/fork.S) | 40 |
5 files changed, 59 insertions, 21 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/pt-vfork.S b/sysdeps/unix/sysv/linux/sparc/pt-vfork.S new file mode 100644 index 0000000000..65cc3823ac --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/pt-vfork.S @@ -0,0 +1 @@ +#include <sysdeps/unix/sysv/linux/alpha/pt-vfork.S> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S index e007d5debc..66d34f3d82 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S @@ -80,7 +80,6 @@ END(__clone) .type __thread_start,@function __thread_start: -#ifdef RESET_PID sethi %hi(CLONE_THREAD), %l0 andcc %g4, %l0, %g0 bne 1f @@ -93,7 +92,6 @@ __thread_start: st %o0,[%g7 + PID] st %o0,[%g7 + TID] 1: -#endif mov %g0, %fp /* terminate backtrace */ call %g2 mov %g3,%o0 diff --git a/sysdeps/unix/sysv/linux/sparc/vfork.S b/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S index 09c073e8f7..549769a9c0 100644 --- a/sysdeps/unix/sysv/linux/sparc/vfork.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S @@ -1,6 +1,6 @@ -/* Copyright (C) 1999-2014 Free Software Foundation, Inc. +/* Copyright (C) 2004-2014 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999. + Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -17,12 +17,33 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> +#include <tcb-offsets.h> -PSEUDO (__vfork, vfork, 0) - sub %o1, 1, %o1 - retl - and %o0, %o1, %o0 + .text + .globl __syscall_error +ENTRY(__vfork) + ld [%g7 + PID], %o5 + cmp %o5, 0 + bne 1f + sub %g0, %o5, %o4 + sethi %hi(0x80000000), %o4 +1: st %o4, [%g7 + PID] + + LOADSYSCALL(vfork) + ta 0x10 + bcc 2f + mov %o7, %g1 + st %o5, [%g7 + PID] + call __syscall_error + mov %g1, %o7 +2: sub %o1, 1, %o1 + andcc %o0, %o1, %o0 + bne,a 1f + st %o5, [%g7 + PID] +1: retl + nop +END(__vfork) -PSEUDO_END (__vfork) libc_hidden_def (__vfork) weak_alias (__vfork, vfork) +strong_alias (__vfork, __libc_vfork) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S index 57d75d2d26..87f944c142 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S @@ -77,7 +77,6 @@ END(__clone) .type __thread_start,@function __thread_start: -#ifdef RESET_PID sethi %hi(CLONE_THREAD), %l0 andcc %g4, %l0, %g0 bne,pt %icc, 1f @@ -89,7 +88,6 @@ __thread_start: 2: st %o0,[%g7 + PID] st %o0,[%g7 + TID] 1: -#endif mov %g0, %fp /* terminate backtrace */ call %g2 mov %g3,%o0 diff --git a/sysdeps/unix/sysv/linux/sparc/fork.S b/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S index f3a83e6351..6d0628b4b2 100644 --- a/sysdeps/unix/sysv/linux/sparc/fork.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S @@ -1,6 +1,6 @@ -/* Copyright (C) 1997-2014 Free Software Foundation, Inc. +/* Copyright (C) 2004-2014 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997. + Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -17,13 +17,33 @@ <http://www.gnu.org/licenses/>. */ #include <sysdep.h> +#include <tcb-offsets.h> -PSEUDO (__libc_fork, fork, 0) - sub %o1, 1, %o1 - retl - and %o0, %o1, %o0 -PSEUDO_END (__libc_fork) + .text + .globl __syscall_error +ENTRY(__vfork) + ld [%g7 + PID], %o5 + sethi %hi(0x80000000), %o3 + cmp %o5, 0 + sub %g0, %o5, %o4 + move %icc, %o3, %o4 + st %o4, [%g7 + PID] -weak_alias (__libc_fork, __fork) -libc_hidden_def (__fork) -weak_alias (__libc_fork, fork) + LOADSYSCALL(vfork) + ta 0x6d + bcc,pt %xcc, 2f + mov %o7, %g1 + st %o5, [%g7 + PID] + call __syscall_error + mov %g1, %o7 +2: sub %o1, 1, %o1 + andcc %o0, %o1, %o0 + bne,a,pt %icc, 1f + st %o5, [%g7 + PID] +1: retl + nop +END(__vfork) + +libc_hidden_def (__vfork) +weak_alias (__vfork, vfork) +strong_alias (__vfork, __libc_vfork) |