From 7588880f50f551cb60a99e2dd2068fdc170e5435 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 13 Mar 2003 01:51:12 +0000 Subject: [PATCH] Update. * sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Add libc_multiple_threads. * sysdeps/unix/sysv/linux/libc_pthread_init.c: Move definition of __libc_multiple_threads to... * sysdeps/unix/sysv/linux/libc_multiple_threads.c: ...here. New file. * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Remove unnecessary versioning. * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Likewise. * sysdeps/unix/sysv/linux/x86_64/pthread_once.S (__pthread_once_internal): Define. * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Use shlib-compat.h macros instead of .symver directly. * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Likewise. * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Likewise. --- nptl/ChangeLog | 19 ++++++++++++++ nptl/sysdeps/unix/sysv/linux/Makefile | 3 ++- .../unix/sysv/linux/libc_multiple_threads.c | 26 +++++++++++++++++++ .../unix/sysv/linux/libc_pthread_init.c | 2 +- .../unix/sysv/linux/x86_64/pthread_once.S | 4 +++ .../sysdeps/unix/sysv/linux/x86_64/sem_post.S | 14 +++------- .../unix/sysv/linux/x86_64/sem_trywait.S | 15 ++++------- .../sysdeps/unix/sysv/linux/x86_64/sem_wait.S | 14 +++------- 8 files changed, 65 insertions(+), 32 deletions(-) create mode 100644 nptl/sysdeps/unix/sysv/linux/libc_multiple_threads.c diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 4313df0fc4..5031d3a8ee 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,24 @@ 2003-03-12 Ulrich Drepper + * sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Add + libc_multiple_threads. + * sysdeps/unix/sysv/linux/libc_pthread_init.c: Move definition of + __libc_multiple_threads to... + * sysdeps/unix/sysv/linux/libc_multiple_threads.c: ...here. New file. + + * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Remove unnecessary + versioning. + * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Likewise. + + * sysdeps/unix/sysv/linux/x86_64/pthread_once.S + (__pthread_once_internal): Define. + + * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Use shlib-compat.h + macros instead of .symver directly. + * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Likewise. + * sysdeps/x86_64/tls.h [__ASSEMBLER__]: Include tcb-offsets.h. * sysdeps/x86_64/tcb-offsets.sym: New file. * sysdeps/x86_64/Makefile: New file. diff --git a/nptl/sysdeps/unix/sysv/linux/Makefile b/nptl/sysdeps/unix/sysv/linux/Makefile index d25135ac80..5701887c06 100644 --- a/nptl/sysdeps/unix/sysv/linux/Makefile +++ b/nptl/sysdeps/unix/sysv/linux/Makefile @@ -18,7 +18,8 @@ # 02111-1307 USA. */ ifeq ($(subdir),nptl) -sysdep_routines += register-atfork unregister-atfork libc_pthread_init +sysdep_routines += register-atfork unregister-atfork libc_pthread_init \ + libc_multiple_threads libpthread-sysdep_routines += pt-fork diff --git a/nptl/sysdeps/unix/sysv/linux/libc_multiple_threads.c b/nptl/sysdeps/unix/sysv/linux/libc_multiple_threads.c new file mode 100644 index 0000000000..a96f174900 --- /dev/null +++ b/nptl/sysdeps/unix/sysv/linux/libc_multiple_threads.c @@ -0,0 +1,26 @@ +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include + +#ifndef NOT_IN_libc +# ifndef TLS_MULTIPLE_THREADS_IN_TCB +int __libc_multiple_threads attribute_hidden; +# endif +#endif diff --git a/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c b/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c index f8c79a22be..3891501927 100644 --- a/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c +++ b/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c @@ -33,7 +33,7 @@ struct fork_handler __pthread_child_handler attribute_hidden; #ifdef TLS_MULTIPLE_THREADS_IN_TCB void #else -int __libc_multiple_threads attribute_hidden; +extern int __libc_multiple_threads attribute_hidden; int * #endif diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S index 97a21d0a9f..c01da52649 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S @@ -118,6 +118,10 @@ __pthread_once: .size __pthread_once,.-__pthread_once + + .globl __pthread_once_internal +__pthread_once_internal = __pthread_once + .globl pthread_once pthread_once = __pthread_once diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S index 43e73e2152..21ec6fd226 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S @@ -33,10 +33,10 @@ .text - .globl __new_sem_post - .type __new_sem_post,@function + .globl sem_post + .type sem_post,@function .align 16 -__new_sem_post: +sem_post: movl $1, %edx LOCK xaddl %edx, (%rdi) @@ -63,10 +63,4 @@ __new_sem_post: orl $-1, %eax retq - .size __new_sem_post,.-__new_sem_post - .symver __new_sem_post, sem_post@@GLIBC_2.1 -#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1) - .global __old_sem_post -__old_sem_post = __new_sem_post - .symver __old_sem_post, sem_post@GLIBC_2.0 -#endif + .size sem_post,.-sem_post diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S index 8c93dcaa07..5f0f3d5d12 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S @@ -33,10 +33,10 @@ .text - .globl __new_sem_trywait - .type __new_sem_trywait,@function + .globl sem_trywait + .type sem_trywait,@function .align 16 -__new_sem_trywait: +sem_trywait: movl (%rdi), %eax 2: testl %eax, %eax jz 1f @@ -59,10 +59,5 @@ __new_sem_trywait: #endif orl $-1, %eax retq - .size __new_sem_trywait,.-__new_sem_trywait - .symver __new_sem_trywait, sem_trywait@@GLIBC_2.1 -#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1) - .global __old_sem_trywait -__old_sem_trywait = __new_sem_trywait - .symver __old_sem_trywait, sem_trywait@GLIBC_2.0 -#endif + .size sem_trywait,.-sem_trywait + versioned_symbol(libpthread, __new_sem_trywait, sem_trywait, GLIBC_2_1) diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S index 2d13a95da5..877ee4c4dc 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S @@ -32,10 +32,10 @@ .text - .globl __new_sem_wait - .type __new_sem_wait,@function + .globl sem_wait + .type sem_wait,@function .align 16 -__new_sem_wait: +sem_wait: 3: movl (%rdi), %eax 2: testl %eax, %eax je 1f @@ -69,10 +69,4 @@ __new_sem_wait: #endif orl $-1, %eax retq - .size __new_sem_wait,.-__new_sem_wait - .symver __new_sem_wait, sem_wait@@GLIBC_2.1 -#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1) - .global __old_sem_wait -__old_sem_wait = __new_sem_wait - .symver __old_sem_wait, sem_wait@GLIBC_2.0 -#endif + .size sem_wait,.-sem_wait