diff options
Diffstat (limited to 'libpthread/nptl')
81 files changed, 113 insertions, 5710 deletions
diff --git a/libpthread/nptl/allocatestack.c b/libpthread/nptl/allocatestack.c index 7ef884543..941ef22f0 100644 --- a/libpthread/nptl/allocatestack.c +++ b/libpthread/nptl/allocatestack.c @@ -24,6 +24,7 @@ #include <unistd.h> #include <sys/mman.h> #include <sys/param.h> +#include <dl-tls.h> #include <tls.h> #include <lowlevellock.h> #include <link.h> @@ -241,6 +242,10 @@ get_cached_stack (size_t *sizep, void **memp) /* Clear the DTV. */ dtv_t *dtv = GET_DTV (TLS_TPADJ (result)); + for (size_t cnt = 0; cnt < dtv[-1].counter; ++cnt) + if (! dtv[1 + cnt].pointer.is_static + && dtv[1 + cnt].pointer.val != TLS_DTV_UNALLOCATED) + free (dtv[1 + cnt].pointer.val); memset (dtv, '\0', (dtv[-1].counter + 1) * sizeof (dtv_t)); /* Re-initialize the TLS. */ diff --git a/libpthread/nptl/pthread_create.c b/libpthread/nptl/pthread_create.c index 697af20e0..3d83a51fe 100644 --- a/libpthread/nptl/pthread_create.c +++ b/libpthread/nptl/pthread_create.c @@ -551,11 +551,11 @@ pthread_create ( return 0; } - + /* Information for libthread_db. */ #include "../nptl_db/db_info.c" - + /* If pthread_create is present, libgcc_eh.a and libsupc++.a expects some other POSIX thread functions to be present as well. */ PTHREAD_STATIC_FN_REQUIRE (pthread_mutex_lock) diff --git a/libpthread/nptl/sysdeps/arc/dl-tls.h b/libpthread/nptl/sysdeps/arc/dl-tls.h index 34e54e4d3..e81c0c187 100644 --- a/libpthread/nptl/sysdeps/arc/dl-tls.h +++ b/libpthread/nptl/sysdeps/arc/dl-tls.h @@ -26,3 +26,6 @@ typedef struct extern void *__tls_get_addr (tls_index *ti); + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/arm/dl-tls.h b/libpthread/nptl/sysdeps/arm/dl-tls.h index a728455e4..a79ea7160 100644 --- a/libpthread/nptl/sysdeps/arm/dl-tls.h +++ b/libpthread/nptl/sysdeps/arm/dl-tls.h @@ -26,3 +26,6 @@ typedef struct extern void *__tls_get_addr (tls_index *ti); + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/csky/dl-tls.h b/libpthread/nptl/sysdeps/csky/dl-tls.h index ebf1a7dc3..7171d47ea 100644 --- a/libpthread/nptl/sysdeps/csky/dl-tls.h +++ b/libpthread/nptl/sysdeps/csky/dl-tls.h @@ -14,3 +14,5 @@ typedef struct extern void *__tls_get_addr (tls_index *ti); +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/generic/dl-tls.c b/libpthread/nptl/sysdeps/generic/dl-tls.c index 7d25e4706..7b7991be8 100644 --- a/libpthread/nptl/sysdeps/generic/dl-tls.c +++ b/libpthread/nptl/sysdeps/generic/dl-tls.c @@ -45,8 +45,6 @@ to allow dynamic loading of modules defining IE-model TLS data. */ # define TLS_STATIC_SURPLUS 64 + DL_NNS * 100 -/* Value used for dtv entries for which the allocation is delayed. */ -# define TLS_DTV_UNALLOCATED ((void *) -1l) #ifndef SHARED extern dtv_t static_dtv; diff --git a/libpthread/nptl/sysdeps/i386/dl-tls.h b/libpthread/nptl/sysdeps/i386/dl-tls.h index 32495c1e0..004082407 100644 --- a/libpthread/nptl/sysdeps/i386/dl-tls.h +++ b/libpthread/nptl/sysdeps/i386/dl-tls.h @@ -59,3 +59,6 @@ strong_alias (___tls_get_addr, ___tls_get_addr_internal) # endif #endif + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/metag/dl-tls.h b/libpthread/nptl/sysdeps/metag/dl-tls.h index 81632e057..811d6254f 100644 --- a/libpthread/nptl/sysdeps/metag/dl-tls.h +++ b/libpthread/nptl/sysdeps/metag/dl-tls.h @@ -26,3 +26,6 @@ typedef struct extern void *__tls_get_addr (tls_index *ti); + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/microblaze/dl-tls.h b/libpthread/nptl/sysdeps/microblaze/dl-tls.h index 5613e21e2..ded8714bd 100644 --- a/libpthread/nptl/sysdeps/microblaze/dl-tls.h +++ b/libpthread/nptl/sysdeps/microblaze/dl-tls.h @@ -24,3 +24,6 @@ typedef struct } tls_index; extern void *__tls_get_addr (tls_index *ti); + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/mips/dl-tls.h b/libpthread/nptl/sysdeps/mips/dl-tls.h index e26aa388b..63ec2bc00 100644 --- a/libpthread/nptl/sysdeps/mips/dl-tls.h +++ b/libpthread/nptl/sysdeps/mips/dl-tls.h @@ -43,3 +43,6 @@ extern void *__tls_get_addr (tls_index *ti); # define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) # define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/nds32/dl-tls.h b/libpthread/nptl/sysdeps/nds32/dl-tls.h index 3b11e7f42..f0107cacb 100644 --- a/libpthread/nptl/sysdeps/nds32/dl-tls.h +++ b/libpthread/nptl/sysdeps/nds32/dl-tls.h @@ -50,7 +50,7 @@ struct tlsdesc_dynamic_arg extern void *__tls_get_addr (tls_index *ti); extern ptrdiff_t attribute_hidden - _dl_tlsdesc_return(struct tlsdesc_dynamic_arg *); + _dl_tlsdesc_return(struct tlsdesc *); extern void *_dl_make_tlsdesc_dynamic (struct link_map *map, size_t ti_offset); extern ptrdiff_t attribute_hidden diff --git a/libpthread/nptl/sysdeps/or1k/dl-tls.h b/libpthread/nptl/sysdeps/or1k/dl-tls.h index 5613e21e2..ded8714bd 100644 --- a/libpthread/nptl/sysdeps/or1k/dl-tls.h +++ b/libpthread/nptl/sysdeps/or1k/dl-tls.h @@ -24,3 +24,6 @@ typedef struct } tls_index; extern void *__tls_get_addr (tls_index *ti); + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/powerpc/dl-tls.h b/libpthread/nptl/sysdeps/powerpc/dl-tls.h index c322ade60..ae50098c7 100644 --- a/libpthread/nptl/sysdeps/powerpc/dl-tls.h +++ b/libpthread/nptl/sysdeps/powerpc/dl-tls.h @@ -46,3 +46,6 @@ extern void *__tls_get_addr (tls_index *ti); # define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) # define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) #endif + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/riscv32/dl-tls.h b/libpthread/nptl/sysdeps/riscv32/dl-tls.h index 31991be0d..4124b7c78 100644 --- a/libpthread/nptl/sysdeps/riscv32/dl-tls.h +++ b/libpthread/nptl/sysdeps/riscv32/dl-tls.h @@ -32,3 +32,6 @@ extern void *__tls_get_addr (tls_index *ti); #define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) #define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/riscv64/dl-tls.h b/libpthread/nptl/sysdeps/riscv64/dl-tls.h index 31991be0d..4124b7c78 100644 --- a/libpthread/nptl/sysdeps/riscv64/dl-tls.h +++ b/libpthread/nptl/sysdeps/riscv64/dl-tls.h @@ -32,3 +32,6 @@ extern void *__tls_get_addr (tls_index *ti); #define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET) #define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET) + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/sh/dl-tls.h b/libpthread/nptl/sysdeps/sh/dl-tls.h index f5f90beaf..e0d13eec4 100644 --- a/libpthread/nptl/sysdeps/sh/dl-tls.h +++ b/libpthread/nptl/sysdeps/sh/dl-tls.h @@ -26,3 +26,6 @@ typedef struct extern void *__tls_get_addr (tls_index *ti); + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/sparc/dl-tls.h b/libpthread/nptl/sysdeps/sparc/dl-tls.h index 7d9e8f0f7..aac9d5b30 100644 --- a/libpthread/nptl/sysdeps/sparc/dl-tls.h +++ b/libpthread/nptl/sysdeps/sparc/dl-tls.h @@ -26,3 +26,6 @@ typedef struct extern void *__tls_get_addr (tls_index *ti); + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch index ee38a6988..c244b1f62 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch @@ -5,9 +5,8 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -libpthread_linux_arch_SSRC = pthread_spin_unlock.S pthread_once.S -libpthread_linux_arch_CSRC = pthread_spin_init.c +libpthread_linux_arch_SSRC = pthread_once.S +libpthread_linux_arch_CSRC = libc_linux_arch_CSRC = fork.c -ASFLAGS += -DUSE___THREAD diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S deleted file mode 100644 index 74dda472f..000000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@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 "lowlevellock.S" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S deleted file mode 100644 index ff9a7847f..000000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S +++ /dev/null @@ -1,464 +0,0 @@ -/* Copyright (C) 2002-2004, 2006, 2007, 2009 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@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 ho |