about summary refs log tree commit diff
path: root/nptl/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-03-13 01:51:12 +0000
committerUlrich Drepper <drepper@redhat.com>2003-03-13 01:51:12 +0000
commit7588880f50f551cb60a99e2dd2068fdc170e5435 (patch)
tree9d1a5e21e3289c84973ff351b40172c08f2d4967 /nptl/sysdeps
parent959c5bbfeee074dbd3dcef98acd41b2e53d14cec (diff)
downloadglibc-7588880f50f551cb60a99e2dd2068fdc170e5435.tar.gz
glibc-7588880f50f551cb60a99e2dd2068fdc170e5435.tar.xz
glibc-7588880f50f551cb60a99e2dd2068fdc170e5435.zip
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.
Diffstat (limited to 'nptl/sysdeps')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/Makefile3
-rw-r--r--nptl/sysdeps/unix/sysv/linux/libc_multiple_threads.c26
-rw-r--r--nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c2
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S4
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S14
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S15
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S14
7 files changed, 46 insertions, 32 deletions
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 <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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <pthreadP.h>
+
+#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