diff options
Diffstat (limited to 'libpthread/linuxthreads')
13 files changed, 260 insertions, 744 deletions
| diff --git a/libpthread/linuxthreads/sysdeps/sparc/pspinlock.c b/libpthread/linuxthreads/sysdeps/sparc/pspinlock.c index 72a9af5b1..4de152be3 100644 --- a/libpthread/linuxthreads/sysdeps/sparc/pspinlock.c +++ b/libpthread/linuxthreads/sysdeps/sparc/pspinlock.c @@ -1,14 +1,87 @@ -#include <features.h> -#include <bits/wordsize.h> +/* POSIX spinlock implementation.  SPARC32 version. +   Copyright (C) 2000 Free Software Foundation, Inc. +   This file is part of the GNU C Library. -#if __WORDSIZE == 32 +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. -# if defined(__CONFIG_SPARC_V9B__) -#  include "sparc32/sparcv9b/pspinlock.c" -# else -#  include "sparc32/pspinlock.c" -# endif +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. -#else -# include "sparc64/pspinlock.c" -#endif +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; see the file COPYING.LIB.  If +   not, see <http://www.gnu.org/licenses/>.  */ + +#include <errno.h> +#include <pthread.h> +#include "internals.h" + +/* This implementation is similar to the one used in the Linux kernel.  */ +int +__pthread_spin_lock (pthread_spinlock_t *lock) +{ +  __asm__ __volatile__ +    ("1: ldstub [%0], %%g2\n" +     "   orcc   %%g2, 0x0, %%g0\n" +     "   bne,a  2f\n" +     "   ldub   [%0], %%g2\n" +     ".subsection 2\n" +     "2: orcc   %%g2, 0x0, %%g0\n" +     "   bne,a  2b\n" +     "   ldub   [%0], %%g2\n" +     "   b,a    1b\n" +     ".previous" +     : /* no outputs */ +     : "r" (lock) +     : "g2", "memory", "cc"); +  return 0; +} +weak_alias (__pthread_spin_lock, pthread_spin_lock) + + +int +__pthread_spin_trylock (pthread_spinlock_t *lock) +{ +  int result; +  __asm__ __volatile__ +    ("ldstub [%1], %0" +     : "=r" (result) +     : "r" (lock) +     : "memory"); +  return result == 0 ? 0 : EBUSY; +} +weak_alias (__pthread_spin_trylock, pthread_spin_trylock) + + +int +__pthread_spin_unlock (pthread_spinlock_t *lock) +{ +  *lock = 0; +  return 0; +} +weak_alias (__pthread_spin_unlock, pthread_spin_unlock) + + +int +__pthread_spin_init (pthread_spinlock_t *lock, int pshared) +{ +  /* We can ignore the `pshared' parameter.  Since we are busy-waiting +     all processes which can access the memory location `lock' points +     to can use the spinlock.  */ +  *lock = 0; +  return 0; +} +weak_alias (__pthread_spin_init, pthread_spin_init) + + +int +__pthread_spin_destroy (pthread_spinlock_t *lock) +{ +  /* Nothing to do.  */ +  return 0; +} +weak_alias (__pthread_spin_destroy, pthread_spin_destroy) diff --git a/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h b/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h index ab90810f1..d502c759a 100644 --- a/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h +++ b/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h @@ -1,8 +1,82 @@ -#include <features.h> -#include <bits/wordsize.h> +/* Machine-dependent pthreads configuration and inline functions. +   sparc version. +   Copyright (C) 1996-1998, 2000-2003 Free Software Foundation, Inc. +   This file is part of the GNU C Library. +   Contributed by Richard Henderson <rth@tamu.edu>. -#if __WORDSIZE == 32 -# include "sparc32/pt-machine.h" -#else -# include "sparc64/pt-machine.h" +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. + +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; see the file COPYING.LIB.  If +   not, see <http://www.gnu.org/licenses/>.  */ + +#ifndef _PT_MACHINE_H +#define _PT_MACHINE_H   1 + +#ifndef PT_EI +# define PT_EI __extern_always_inline  #endif + +extern long int testandset (int *spinlock); +extern int __compare_and_swap (long int *p, long int oldval, long int newval); + +/* Spinlock implementation; required.  */ +PT_EI long int +testandset (int *spinlock) +{ +  int ret; + +  __asm__ __volatile__("ldstub %1,%0" +	: "=r"(ret), "=m"(*spinlock) +	: "m"(*spinlock)); + +  return ret; +} + + +/* Memory barrier; default is to do nothing */ +#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory") + + +/* Get some notion of the current stack.  Need not be exactly the top +   of the stack, just something somewhere in the current frame.  */ +#define CURRENT_STACK_FRAME  (stack_pointer + (2 * 64)) +register char *stack_pointer __asm__("%sp"); + + +/* Registers %g6 and %g7 are reserved by the ABI for "system use". +   %g7 is specified in the TLS ABI as thread pointer -- we do the same.  */ +struct _pthread_descr_struct; +register struct _pthread_descr_struct *__thread_self __asm__("%g7"); + +/* Return the thread descriptor for the current thread.  */ +#define THREAD_SELF  __thread_self + +/* Initialize the thread-unique value.  */ +#define INIT_THREAD_SELF(descr, nr)  (__thread_self = (descr)) + +/* Access to data in the thread descriptor is easy.  */ +#define THREAD_GETMEM(descr, member) \ +  ((void) sizeof (descr), THREAD_SELF->member) +#define THREAD_GETMEM_NC(descr, member) \ +  ((void) sizeof (descr), THREAD_SELF->member) +#define THREAD_SETMEM(descr, member, value) \ +  ((void) sizeof (descr), THREAD_SELF->member = (value)) +#define THREAD_SETMEM_NC(descr, member, value) \ +  ((void) sizeof (descr), THREAD_SELF->member = (value)) + +/* We want the OS to assign stack addresses.  */ +#define FLOATING_STACKS 1 + +/* Maximum size of the stack if the rlimit is unlimited.  */ +#define ARCH_STACK_MAX_SIZE     8*1024*1024 + +#endif /* pt-machine.h */ diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c b/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c deleted file mode 100644 index 4de152be3..000000000 --- a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c +++ /dev/null @@ -1,87 +0,0 @@ -/* POSIX spinlock implementation.  SPARC32 version. -   Copyright (C) 2000 Free Software Foundation, Inc. -   This file is part of the GNU C Library. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public License as -   published by the Free Software Foundation; either version 2.1 of the -   License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; see the file COPYING.LIB.  If -   not, see <http://www.gnu.org/licenses/>.  */ - -#include <errno.h> -#include <pthread.h> -#include "internals.h" - -/* This implementation is similar to the one used in the Linux kernel.  */ -int -__pthread_spin_lock (pthread_spinlock_t *lock) -{ -  __asm__ __volatile__ -    ("1: ldstub [%0], %%g2\n" -     "   orcc   %%g2, 0x0, %%g0\n" -     "   bne,a  2f\n" -     "   ldub   [%0], %%g2\n" -     ".subsection 2\n" -     "2: orcc   %%g2, 0x0, %%g0\n" -     "   bne,a  2b\n" -     "   ldub   [%0], %%g2\n" -     "   b,a    1b\n" -     ".previous" -     : /* no outputs */ -     : "r" (lock) -     : "g2", "memory", "cc"); -  return 0; -} -weak_alias (__pthread_spin_lock, pthread_spin_lock) - - -int -__pthread_spin_trylock (pthread_spinlock_t *lock) -{ -  int result; -  __asm__ __volatile__ -    ("ldstub [%1], %0" -     : "=r" (result) -     : "r" (lock) -     : "memory"); -  return result == 0 ? 0 : EBUSY; -} -weak_alias (__pthread_spin_trylock, pthread_spin_trylock) - - -int -__pthread_spin_unlock (pthread_spinlock_t *lock) -{ -  *lock = 0; -  return 0; -} -weak_alias (__pthread_spin_unlock, pthread_spin_unlock) - - -int -__pthread_spin_init (pthread_spinlock_t *lock, int pshared) -{ -  /* We can ignore the `pshared' parameter.  Since we are busy-waiting -     all processes which can access the memory location `lock' points -     to can use the spinlock.  */ -  *lock = 0; -  return 0; -} -weak_alias (__pthread_spin_init, pthread_spin_init) - - -int -__pthread_spin_destroy (pthread_spinlock_t *lock) -{ -  /* Nothing to do.  */ -  return 0; -} -weak_alias (__pthread_spin_destroy, pthread_spin_destroy) diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h b/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h deleted file mode 100644 index d502c759a..000000000 --- a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Machine-dependent pthreads configuration and inline functions. -   sparc version. -   Copyright (C) 1996-1998, 2000-2003 Free Software Foundation, Inc. -   This file is part of the GNU C Library. -   Contributed by Richard Henderson <rth@tamu.edu>. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public License as -   published by the Free Software Foundation; either version 2.1 of the -   License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; see the file COPYING.LIB.  If -   not, see <http://www.gnu.org/licenses/>.  */ - -#ifndef _PT_MACHINE_H -#define _PT_MACHINE_H   1 - -#ifndef PT_EI -# define PT_EI __extern_always_inline -#endif - -extern long int testandset (int *spinlock); -extern int __compare_and_swap (long int *p, long int oldval, long int newval); - -/* Spinlock implementation; required.  */ -PT_EI long int -testandset (int *spinlock) -{ -  int ret; - -  __asm__ __volatile__("ldstub %1,%0" -	: "=r"(ret), "=m"(*spinlock) -	: "m"(*spinlock)); - -  return ret; -} - - -/* Memory barrier; default is to do nothing */ -#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory") - - -/* Get some notion of the current stack.  Need not be exactly the top -   of the stack, just something somewhere in the current frame.  */ -#define CURRENT_STACK_FRAME  (stack_pointer + (2 * 64)) -register char *stack_pointer __asm__("%sp"); - - -/* Registers %g6 and %g7 are reserved by the ABI for "system use". -   %g7 is specified in the TLS ABI as thread pointer -- we do the same.  */ -struct _pthread_descr_struct; -register struct _pthread_descr_struct *__thread_self __asm__("%g7"); - -/* Return the thread descriptor for the current thread.  */ -#define THREAD_SELF  __thread_self - -/* Initialize the thread-unique value.  */ -#define INIT_THREAD_SELF(descr, nr)  (__thread_self = (descr)) - -/* Access to data in the thread descriptor is easy.  */ -#define THREAD_GETMEM(descr, member) \ -  ((void) sizeof (descr), THREAD_SELF->member) -#define THREAD_GETMEM_NC(descr, member) \ -  ((void) sizeof (descr), THREAD_SELF->member) -#define THREAD_SETMEM(descr, member, value) \ -  ((void) sizeof (descr), THREAD_SELF->member = (value)) -#define THREAD_SETMEM_NC(descr, member, value) \ -  ((void) sizeof (descr), THREAD_SELF->member = (value)) - -/* We want the OS to assign stack addresses.  */ -#define FLOATING_STACKS 1 - -/* Maximum size of the stack if the rlimit is unlimited.  */ -#define ARCH_STACK_MAX_SIZE     8*1024*1024 - -#endif /* pt-machine.h */ diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c b/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c deleted file mode 100644 index fb49ca37e..000000000 --- a/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c +++ /dev/null @@ -1,93 +0,0 @@ -/* POSIX spinlock implementation.  SPARC v9 version. -   Copyright (C) 2000 Free Software Foundation, Inc. -   This file is part of the GNU C Library. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public License as -   published by the Free Software Foundation; either version 2.1 of the -   License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; see the file COPYING.LIB.  If -   not, see <http://www.gnu.org/licenses/>.  */ - -#include <errno.h> -#include <pthread.h> -#include "internals.h" - - -/* This implementation is similar to the one used in the Linux kernel.  */ -int -__pthread_spin_lock (pthread_spinlock_t *lock) -{ -  __asm__ __volatile__ -    ("1: ldstub  [%0], %%g2\n" -     "   brnz,pn %%g2, 2f\n" -     "    membar #StoreLoad | #StoreStore\n" -     ".subsection 2\n" -     "2: ldub    [%0], %%g2\n" -     "   brnz,pt %%g2, 2b\n" -     "    membar #LoadLoad\n" -     "   b,a,pt  %%xcc, 1b\n" -     ".previous" -     : /* no outputs */ -     : "r" (lock) -     : "g2", "memory"); -  return 0; -} -weak_alias (__pthread_spin_lock, pthread_spin_lock) - - -int -__pthread_spin_trylock (pthread_spinlock_t *lock) -{ -  int result; -  __asm__ __volatile__ -    ("ldstub [%1], %0\n" -     "membar #StoreLoad | #StoreStore" -     : "=r" (result) -     : "r" (lock) -     : "memory"); -  return result == 0 ? 0 : EBUSY; -} -weak_alias (__pthread_spin_trylock, pthread_spin_trylock) - - -int -__pthread_spin_unlock (pthread_spinlock_t *lock) -{ -  __asm__ __volatile__ -    ("membar #StoreStore | #LoadStore\n" -     "stb    %%g0, [%0]" -     : -     : "r" (lock) -     : "memory"); -  return 0; -} -weak_alias (__pthread_spin_unlock, pthread_spin_unlock) - - -int -__pthread_spin_init (pthread_spinlock_t *lock, int pshared) -{ -  /* We can ignore the `pshared' parameter.  Since we are busy-waiting -     all processes which can access the memory location `lock' points -     to can use the spinlock.  */ -  *lock = 0; -  return 0; -} -weak_alias (__pthread_spin_init, pthread_spin_init) - - -int -__pthread_spin_destroy (pthread_spinlock_t *lock) -{ -  /* Nothing to do.  */ -  return 0; -} -weak_alias (__pthread_spin_destroy, pthread_spin_destroy) diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c b/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c deleted file mode 100644 index 743cb77bf..000000000 --- a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c +++ /dev/null @@ -1,92 +0,0 @@ -/* POSIX spinlock implementation.  SPARC64 version. -   Copyright (C) 2000 Free Software Foundation, Inc. -   This file is part of the GNU C Library. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public License as -   published by the Free Software Foundation; either version 2.1 of the -   License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; see the file COPYING.LIB.  If -   not, see <http://www.gnu.org/licenses/>.  */ - -#include <errno.h> -#include <pthread.h> -#include "internals.h" - -/* This implementation is similar to the one used in the Linux kernel.  */ -int -__pthread_spin_lock (pthread_spinlock_t *lock) -{ -  __asm__ __volatile__ -    ("1: ldstub  [%0], %%g5\n" -     "   brnz,pn %%g5, 2f\n" -     "    membar #StoreLoad | #StoreStore\n" -     ".subsection 2\n" -     "2: ldub    [%0], %%g5\n" -     "   brnz,pt %%g5, 2b\n" -     "    membar #LoadLoad\n" -     "   b,a,pt  %%xcc, 1b\n" -     ".previous" -     : /* no outputs */ -     : "r" (lock) -     : "g5", "memory"); -  return 0; -} -weak_alias (__pthread_spin_lock, pthread_spin_lock) - - -int -__pthread_spin_trylock (pthread_spinlock_t *lock) -{ -  int result; -  __asm__ __volatile__ -    ("ldstub [%1], %0\n" -     "membar #StoreLoad | #StoreStore" -     : "=r" (result) -     : "r" (lock) -     : "memory"); -  return result == 0 ? 0 : EBUSY; -} -weak_alias (__pthread_spin_trylock, pthread_spin_trylock) - - -int -__pthread_spin_unlock (pthread_spinlock_t *lock) -{ -  __asm__ __volatile__ -    ("membar #StoreStore | #LoadStore\n" -     "stb    %%g0, [%0]" -     : -     : "r" (lock) -     : "memory"); -  return 0; -} -weak_alias (__pthread_spin_unlock, pthread_spin_unlock) - - -int -__pthread_spin_init (pthread_spinlock_t *lock, int pshared) -{ -  /* We can ignore the `pshared' parameter.  Since we are busy-waiting -     all processes which can access the memory location `lock' points -     to can use the spinlock.  */ -  *lock = 0; -  return 0; -} -weak_alias (__pthread_spin_init, pthread_spin_init) - - -int -__pthread_spin_destroy (pthread_spinlock_t *lock) -{ -  /* Nothing to do.  */ -  return 0; -} -weak_alias (__pthread_spin_destroy, pthread_spin_destroy) diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h b/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h deleted file mode 100644 index e3c73d967..000000000 --- a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Machine-dependent pthreads configuration and inline functions. -   Sparc v9 version. -   Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc. -   This file is part of the GNU C Library. -   Contributed by Richard Henderson <rth@tamu.edu>. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public License as -   published by the Free Software Foundation; either version 2.1 of the -   License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; see the file COPYING.LIB.  If -   not, see <http://www.gnu.org/licenses/>.  */ - -#ifndef _PT_MACHINE_H -#define _PT_MACHINE_H   1 - -#ifndef PT_EI -# define PT_EI __extern_always_inline -#endif - -extern long int testandset (int *spinlock); -extern int __compare_and_swap (long int *p, long int oldval, long int newval); - -/* Spinlock implementation; required.  */ -PT_EI long int -testandset (int *spinlock) -{ -  int ret; - -  __asm__ __volatile__("ldstub %1,%0" -	: "=r" (ret), "=m" (*spinlock) : "m" (*spinlock)); - -  return ret; -} - - -/* Memory barrier; default is to do nothing */ -#define MEMORY_BARRIER() \ -     __asm__ __volatile__("membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore" : : : "memory") -/* Read barrier.  */ -#define READ_MEMORY_BARRIER() \ -     __asm__ __volatile__("membar #LoadLoad | #LoadStore" : : : "memory") -/* Write barrier.  */ -#define WRITE_MEMORY_BARRIER() \ -     __asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory") - - -/* Get some notion of the current stack.  Need not be exactly the top -   of the stack, just something somewhere in the current frame.  */ -#define CURRENT_STACK_FRAME  (stack_pointer + (2 * 128)) -register char *stack_pointer __asm__ ("%sp"); - - -/* Registers %g6 and %g7 are reserved by the ABI for "system use".  The -   TLS ABI specifies %g7 as the thread pointer.  */ -struct _pthread_descr_struct; -register struct _pthread_descr_struct *__thread_self __asm__ ("%g7"); - -/* Return the thread descriptor for the current thread.  */ -#define THREAD_SELF  __thread_self - -/* Initialize the thread-unique value.  */ -#define INIT_THREAD_SELF(descr, nr)  (__thread_self = (descr)) - - -/* Compare-and-swap for semaphores. */ - -#define HAS_COMPARE_AND_SWAP -PT_EI int -__compare_and_swap (long int *p, long int oldval, long int newval) -{ -  long int readval; - -  __asm__ __volatile__ ("casx	[%4], %2, %0" -			: "=r"(readval), "=m"(*p) -			: "r"(oldval), "m"(*p), "r"(p), "0"(newval)); -  MEMORY_BARRIER(); -  return readval == oldval; -} - -/* Access to data in the thread descriptor is easy.  */ -#define THREAD_GETMEM(descr, member) \ -  ((void) sizeof (descr), THREAD_SELF->member) -#define THREAD_GETMEM_NC(descr, member) \ -  ((void) sizeof (descr), THREAD_SELF->member) -#define THREAD_SETMEM(descr, member, value) \ -  ((void) sizeof (descr), THREAD_SELF->member = (value)) -#define THREAD_SETMEM_NC(descr, member, value) \ -  ((void) sizeof (descr), THREAD_SELF->member = (value)) - -/* We want the OS to assign stack addresses.  */ -#define FLOATING_STACKS 1 - -/* Maximum size of the stack if the rlimit is unlimited.  */ -#define ARCH_STACK_MAX_SIZE     32*1024*1024 - -#endif /* pt-machine.h */ diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h deleted file mode 100644 index bd9bb0d6a..000000000 --- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. -   This file is part of the GNU C Library. -   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 2.1 of the License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; if not, see -   <http://www.gnu.org/licenses/>.  */ - -#include <tls.h> -#ifndef __ASSEMBLER__ -# include <linuxthreads/internals.h> -#endif - -#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args)				      \ -	.text;								      \ -ENTRY(name)								      \ -	ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;			      \ -	cmp %g1, 0;							      \ -	bne 1f;								      \ -	 mov SYS_ify(syscall_name), %g1;				      \ -	ta 0x10;							      \ -	bcs __syscall_error_handler;					      \ -	 nop;								      \ -	.subsection 2;							      \ -1:	save %sp, -96, %sp;						      \ -	CENABLE;							      \ -	 nop;								      \ -	mov %o0, %l0;							      \ -	COPY_ARGS_##args						      \ -	mov SYS_ify(syscall_name), %g1;					      \ -	ta 0x10;							      \ -	bcs __syscall_error_handler2;					      \ -	 mov %o0, %l1;							      \ -	CDISABLE;							      \ -	 mov %l0, %o0;							      \ -	jmpl %i7 + 8, %g0;						      \ -	 restore %g0, %l1, %o0;						      \ -	.previous;							      \ -	SYSCALL_ERROR_HANDLER						      \ -	SYSCALL_ERROR_HANDLER2 - -#define SYSCALL_ERROR_HANDLER2						      \ -SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2)			      \ -	.global __errno_location;					      \ -        .type   __errno_location,@function;				      \ -	CDISABLE;							      \ -	 mov	%l0, %o0;						      \ -	call	__errno_location;					      \ -	 nop;								      \ -	st	%l1, [%o0];						      \ -	jmpl	%i7 + 8, %g0;						      \ -	 restore %g0, -1, %o0;						      \ -	.previous; - -# ifdef IS_IN_libpthread -#  define CENABLE	call __pthread_enable_asynccancel -#  define CDISABLE	call __pthread_disable_asynccancel -# elif !defined NOT_IN_libc -#  define CENABLE	call __libc_enable_asynccancel -#  define CDISABLE	call __libc_disable_asynccancel -# else -#  define CENABLE	call __librt_enable_asynccancel -#  define CDISABLE	call __librt_disable_asynccancel -# endif - -#define COPY_ARGS_0	/* Nothing */ -#define COPY_ARGS_1	COPY_ARGS_0 mov %i0, %o0; -#define COPY_ARGS_2	COPY_ARGS_1 mov %i1, %o1; -#define COPY_ARGS_3	COPY_ARGS_2 mov %i2, %o2; -#define COPY_ARGS_4	COPY_ARGS_3 mov %i3, %o3; -#define COPY_ARGS_5	COPY_ARGS_4 mov %i4, %o4; -#define COPY_ARGS_6	COPY_ARGS_5 mov %i5, %o5; - -# ifndef __ASSEMBLER__ -#  define SINGLE_THREAD_P \ -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \ -				   p_header.data.multiple_threads) == 0, 1) -# else -#  define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 -# endif - -#elif !defined __ASSEMBLER__ - -/* This code should never be used but we define it anyhow.  */ -# define SINGLE_THREAD_P (1) - -#endif diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c deleted file mode 100644 index d57283ad2..000000000 --- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../ia64/pt-sigsuspend.c" diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h deleted file mode 100644 index 9972ee408..000000000 --- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. -   This file is part of the GNU C Library. -   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 2.1 of the License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; if not, see -   <http://www.gnu.org/licenses/>.  */ - -#include <tls.h> -#ifndef __ASSEMBLER__ -# include <linuxthreads/internals.h> -#endif - -#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args)				      \ -	.text;								      \ -ENTRY(name)								      \ -	ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;			      \ -	brnz,pn %g1, 1f;						      \ -	 mov SYS_ify(syscall_name), %g1;				      \ -	ta 0x6d;							      \ -	bcs,pn %xcc, __syscall_error_handler;				      \ -	 nop;								      \ -	.subsection 2;							      \ -1:	save %sp, -192, %sp;						      \ -	CENABLE;							      \ -	 nop;								      \ -	mov %o0, %l0;							      \ -	COPY_ARGS_##args						      \ -	mov SYS_ify(syscall_name), %g1;					      \ -	ta 0x6d;							      \ -	bcs,pn %xcc, __syscall_error_handler2;				      \ -	 mov %o0, %l1;							      \ -	CDISABLE;							      \ -	 mov %l0, %o0;							      \ -	jmpl %i7 + 8, %g0;						      \ -	 restore %g0, %l1, %o0;						      \ -	.previous;							      \ -	SYSCALL_ERROR_HANDLER						      \ -	SYSCALL_ERROR_HANDLER2 - -#define SYSCALL_ERROR_HANDLER2						      \ -SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2)			      \ -	.global __errno_location;					      \ -        .type   __errno_location,@function;				      \ -	CDISABLE;							      \ -	 mov	%l0, %o0;						      \ -	call	__errno_location;					      \ -	 nop;								      \ -	st	%l1, [%o0];						      \ -	jmpl	%i7 + 8, %g0;						      \ -	 restore %g0, -1, %o0;						      \ -	.previous; - -# ifdef IS_IN_libpthread -#  define CENABLE	call __pthread_enable_asynccancel -#  define CDISABLE	call __pthread_disable_asynccancel -# elif !defined NOT_IN_libc -#  define CENABLE	call __libc_enable_asynccancel -#  define CDISABLE	call __libc_disable_asynccancel -# else -#  define CENABLE	call __librt_enable_asynccancel -#  define CDISABLE	call __librt_disable_asynccancel -# endif - -#define COPY_ARGS_0	/* Nothing */ -#define COPY_ARGS_1	COPY_ARGS_0 mov %i0, %o0; -#define COPY_ARGS_2	COPY_ARGS_1 mov %i1, %o1; -#define COPY_ARGS_3	COPY_ARGS_2 mov %i2, %o2; -#define COPY_ARGS_4	COPY_ARGS_3 mov %i3, %o3; -#define COPY_ARGS_5	COPY_ARGS_4 mov %i4, %o4; -#define COPY_ARGS_6	COPY_ARGS_5 mov %i5, %o5; - -# ifndef __ASSEMBLER__ -#  define SINGLE_THREAD_P \ -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \ -				   p_header.data.multiple_threads) == 0, 1) -# else -#  define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 -# endif - -#elif !defined __ASSEMBLER__ - -/* This code should never be used but we define it anyhow.  */ -# define SINGLE_THREAD_P (1) - -#endif diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S deleted file mode 100644 index 3ff16b115..000000000 --- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. -   This file is part of the GNU C Library. -   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. - -   The GNU C Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Lesser General Public -   License as published by the Free Software Foundation; either -   version 2.1 of the License, or (at your option) any later version. - -   The GNU C Library is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public -   License along with the GNU C Library; if not, see -   <http://www.gnu.org/licenses/>.  */ - -#include <sysdep-cancel.h> - -#ifdef SHARED -.LLGETPC0: -	retl -	 add	%o7, %o0, %o0 -#endif -ENTRY(__vfork) -#ifdef SHARED -	mov	%o7, %o1 -	sethi	%hi(_GLOBAL_OFFSET_TABLE_-4), %o0 -	call	.LLGETPC0 -	 add	%o0, %lo(_GLOBAL_OFFSET_TABLE_+4), %o0 -	sethi	%hi(__libc_pthread_functions), %o2 -	mov	%o1, %o7 -	or	%o2, %lo(__libc_pthread_functions), %o2 -	ldx	[%o0 + %o2], %o2 -	ldx	[%o2], %o0 -#else -	.weak	pthread_create -	sethi	%hi(pthread_create), %o0 -	or	%o0, %lo(pthread_create), %o0 -#endif -#if defined SHARED && !defined BROKEN_SPARC_WDISP22 -	cmp	%o0, 0 -	bne	HIDDEN_JUMPTARGET(fork) -#else -	brnz,pn	%o0, 1f -#endif -	 mov	__NR_vfork, %g1 -	ta	0x6d -	bcs,pn	%xcc, __syscall_error_handler -	 nop -	sub	%o1, 1, %o1 -	retl -	 and	%o0, %o1, %o0 -#if !defined SHARED || defined BROKEN_SPARC_WDISP22 -1:	mov	%o7, %g1 -	call	HIDDEN_JUMPTARGET(fork) -	 mov	%g1, %o7 -#endif -	SYSCALL_ERROR_HANDLER -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) -weak_alias (__vfork, vfork) diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h index fa656b34e..bd9bb0d6a 100644 --- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h +++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h @@ -1,10 +1,100 @@ -#ifndef SPARC_SYSDEP_CANCEL_H -#define SPARC_SYSDEP_CANCEL_H +/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +   This file is part of the GNU C Library. +   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. -#if defined(__arch64__) -#include <sparc64/sysdep-cancel.h> -#else -#include <sparc32/sysdep-cancel.h> +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. + +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; if not, see +   <http://www.gnu.org/licenses/>.  */ + +#include <tls.h> +#ifndef __ASSEMBLER__ +# include <linuxthreads/internals.h>  #endif +#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt + +# undef PSEUDO +# define PSEUDO(name, syscall_name, args)				      \ +	.text;								      \ +ENTRY(name)								      \ +	ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;			      \ +	cmp %g1, 0;							      \ +	bne 1f;								      \ +	 mov SYS_ify(syscall_name), %g1;				      \ +	ta 0x10;							      \ +	bcs __syscall_error_handler;					      \ +	 nop;								      \ +	.subsection 2;							      \ +1:	save %sp, -96, %sp;						      \ +	CENABLE;							      \ +	 nop;								      \ +	mov %o0, %l0;							      \ +	COPY_ARGS_##args						      \ +	mov SYS_ify(syscall_name), %g1;					      \ +	ta 0x10;							      \ +	bcs __syscall_error_handler2;					      \ +	 mov %o0, %l1;							      \ +	CDISABLE;							      \ +	 mov %l0, %o0;							      \ +	jmpl %i7 + 8, %g0;						      \ +	 restore %g0, %l1, %o0;						      \ +	.previous;							      \ +	SYSCALL_ERROR_HANDLER						      \ +	SYSCALL_ERROR_HANDLER2 + +#define SYSCALL_ERROR_HANDLER2						      \ +SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2)			      \ +	.global __errno_location;					      \ +        .type   __errno_location,@function;				      \ +	CDISABLE;							      \ +	 mov	%l0, %o0;						      \ +	call	__errno_location;					      \ +	 nop;								      \ +	st	%l1, [%o0];						      \ +	jmpl	%i7 + 8, %g0;						      \ +	 restore %g0, -1, %o0;						      \ +	.previous; + +# ifdef IS_IN_libpthread +#  define CENABLE	call __pthread_enable_asynccancel +#  define CDISABLE	call __pthread_disable_asynccancel +# elif !defined NOT_IN_libc +#  define CENABLE	call __libc_enable_asynccancel +#  define CDISABLE	call __libc_disable_asynccancel +# else +#  define CENABLE	call __librt_enable_asynccancel +#  define CDISABLE	call __librt_disable_asynccancel +# endif + +#define COPY_ARGS_0	/* Nothing */ +#define COPY_ARGS_1	COPY_ARGS_0 mov %i0, %o0; +#define COPY_ARGS_2	COPY_ARGS_1 mov %i1, %o1; +#define COPY_ARGS_3	COPY_ARGS_2 mov %i2, %o2; +#define COPY_ARGS_4	COPY_ARGS_3 mov %i3, %o3; +#define COPY_ARGS_5	COPY_ARGS_4 mov %i4, %o4; +#define COPY_ARGS_6	COPY_ARGS_5 mov %i5, %o5; + +# ifndef __ASSEMBLER__ +#  define SINGLE_THREAD_P \ +  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \ +				   p_header.data.multiple_threads) == 0, 1) +# else +#  define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 +# endif + +#elif !defined __ASSEMBLER__ + +/* This code should never be used but we define it anyhow.  */ +# define SINGLE_THREAD_P (1) +  #endif diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/vfork.S index ab2286ee8..ab2286ee8 100644 --- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S +++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/vfork.S | 
