summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-12-03 20:32:49 +0000
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-12-09 15:04:56 -0300
commit0487ebed2278b20971af4cabf186fd3681adccf0 (patch)
tree3d5424fedbc56d2436e0857dbf2e48cbda4c6077
parent7badf7b06fe796b3f549663d0d65d3012a7e0457 (diff)
nptl: Add more missing placeholder abi symbol from nanosleep move
This patch adds the missing __libpthread_version_placeholder for GLIBC_2.2.6 version from the nanosleep implementation move from libpthread to libc (79a547b162). It also fixes the wrong compat symbol definitions added by changing back the version used on vfork check and remove the __libpthread_version_placeholder added on some ABI (4f4bb489e0dd). The __libpthread_version_placeholder is also refactored to make it simpler to add new compat_symbols by adding a new macro compat_symbol_unique which uses the compiler extension __COUNTER__ to generate unique strong alias to be used with compat_symbol. Checked with a updated-abi on the all affected abis of the nanosleep move. Change-Id: I347a4dbdc931bb42b359456932dd1e17aa4d4078
-rw-r--r--include/shlib-compat.h36
-rw-r--r--nptl/libpthread-compat.c26
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libpthread.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libpthread.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/i386/libpthread.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/ia64/libpthread.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libpthread.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libpthread.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist2
17 files changed, 69 insertions, 17 deletions
diff --git a/include/shlib-compat.h b/include/shlib-compat.h
index f1c2fd8ed9..fafb5268a6 100644
--- a/include/shlib-compat.h
+++ b/include/shlib-compat.h
@@ -64,6 +64,41 @@
# define compat_symbol(lib, local, symbol, version) \
compat_symbol_reference (lib, local, symbol, version)
+/* This is similar to compat_symbol, but allows versioning the same symbol
+ to multiple version without having multiple symbol definitions. For
+ instance:
+
+ #if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2))
+ compat_symbol_unique (libc, old_foo, GLIBC_2_1_2)
+ #endif
+
+ #if (SHLIB_COMPAT (libpthread, GLIBC_2_2_6, GLIBC_2_3))
+ compat_symbol_unique (libc, old_foo, GLIBC_2_2_6)
+ #endif
+
+ Internally it creates a unique strong alias to the input symbol and
+ creates one compat_symbol on the alias. Using the above example,
+ it is similar to:
+
+ #if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2))
+ strong_alias (old_foo, old_foo__COUNTER__)
+ compat_symbol (libc, old_foo__COUNTER__, foo, GLIBC_2_2)
+ #endif.
+
+ With __COUNTER__ being a monotonic number generated by the compiler. */
+
+# define __compat_symbol_unique_concat(x, y) x ## y
+# define _compat_symbol_unique_concat(x, y) \
+ __compat_symbol_unique_concat (x, y)
+# define _compat_symbol_unique_alias(name) \
+ _compat_symbol_unique_concat (name, __COUNTER__)
+# define _compat_symbol_unique(lib, orig_name, name, version) \
+ strong_alias (orig_name, name) \
+ compat_symbol (lib, name, orig_name, version)
+# define compat_symbol_unique(lib, name, version) \
+ _compat_symbol_unique (lib, name, _compat_symbol_unique_alias (name), \
+ version)
+
#else
/* Not compiling ELF shared libraries at all, so never any old versions. */
@@ -75,6 +110,7 @@
/* This should not appear outside `#if SHLIB_COMPAT (...)'. */
# define compat_symbol(lib, local, symbol, version) ...
+# define compat_symbol_unique(lib, name, version) ...
#endif
diff --git a/nptl/libpthread-compat.c b/nptl/libpthread-compat.c
index 7398f5e92d..e2db3f2a42 100644
--- a/nptl/libpthread-compat.c
+++ b/nptl/libpthread-compat.c
@@ -16,8 +16,18 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
+#include <sys/cdefs.h>
#include <shlib-compat.h>
+#ifdef SHARED
+static void
+attribute_compat_text_section
+__attribute_used__
+__libpthread_version_placeholder (void)
+{
+}
+#endif
+
/* This is an unused compatibility symbol definition, to prevent ld
from creating a weak version definition for GLIBC_2.1.2. (__vfork
used to be defined at that version, but it is now provided by libc,
@@ -26,12 +36,12 @@
version or later, the placeholder symbol is not needed because
there are plenty of other symbols which populate those later
versions. */
-#if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2_6))
-void
-attribute_compat_text_section
-__libpthread_version_placeholder (void)
-{
-}
-compat_symbol (libpthread, __libpthread_version_placeholder,
- __libpthread_version_placeholder, GLIBC_2_1_2);
+#if (SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_2))
+compat_symbol_unique (libpthread,
+ __libpthread_version_placeholder, GLIBC_2_1_2);
+#endif
+
+#if (SHLIB_COMPAT (libpthread, GLIBC_2_2_6, GLIBC_2_3))
+compat_symbol_unique (libpthread,
+ __libpthread_version_placeholder, GLIBC_2_2_6);
#endif
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index f42bcffd1e..da5e9979a8 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -192,6 +192,7 @@ GLIBC_2.2 pwrite F
GLIBC_2.2 pwrite64 F
GLIBC_2.2 sem_timedwait F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index d87fadf3d8..15b72c4264 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __libc_allocate_rtsig F
GLIBC_2.2 __libc_current_sigrtmax F
GLIBC_2.2 __libc_current_sigrtmin F
-GLIBC_2.2 __libpthread_version_placeholder F
GLIBC_2.2 __lseek F
GLIBC_2.2 __open F
GLIBC_2.2 __open64 F
@@ -185,6 +184,7 @@ GLIBC_2.2 wait F
GLIBC_2.2 waitpid F
GLIBC_2.2 write F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 5d1bf0f5ab..68fd15047c 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -192,6 +192,7 @@ GLIBC_2.2 pwrite F
GLIBC_2.2 pwrite64 F
GLIBC_2.2 sem_timedwait F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index c065ddbf67..4c844da957 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __libc_allocate_rtsig F
GLIBC_2.2 __libc_current_sigrtmax F
GLIBC_2.2 __libc_current_sigrtmin F
-GLIBC_2.2 __libpthread_version_placeholder F
GLIBC_2.2 __lseek F
GLIBC_2.2 __open F
GLIBC_2.2 __open64 F
@@ -185,6 +184,7 @@ GLIBC_2.2 wait F
GLIBC_2.2 waitpid F
GLIBC_2.2 write F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 5d1bf0f5ab..68fd15047c 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -192,6 +192,7 @@ GLIBC_2.2 pwrite F
GLIBC_2.2 pwrite64 F
GLIBC_2.2 sem_timedwait F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 1b5fd5e751..aefbfa44ae 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -117,7 +117,6 @@ GLIBC_2.18 pthread_setattr_default_np F
GLIBC_2.2 __libc_allocate_rtsig F
GLIBC_2.2 __libc_current_sigrtmax F
GLIBC_2.2 __libc_current_sigrtmin F
-GLIBC_2.2 __libpthread_version_placeholder F
GLIBC_2.2 __open64 F
GLIBC_2.2 __pread64 F
GLIBC_2.2 __pthread_rwlock_destroy F
@@ -192,6 +191,7 @@ GLIBC_2.2 sem_trywait F
GLIBC_2.2 sem_unlink F
GLIBC_2.2 sem_wait F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 1b5fd5e751..aefbfa44ae 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -117,7 +117,6 @@ GLIBC_2.18 pthread_setattr_default_np F
GLIBC_2.2 __libc_allocate_rtsig F
GLIBC_2.2 __libc_current_sigrtmax F
GLIBC_2.2 __libc_current_sigrtmin F
-GLIBC_2.2 __libpthread_version_placeholder F
GLIBC_2.2 __open64 F
GLIBC_2.2 __pread64 F
GLIBC_2.2 __pthread_rwlock_destroy F
@@ -192,6 +191,7 @@ GLIBC_2.2 sem_trywait F
GLIBC_2.2 sem_unlink F
GLIBC_2.2 sem_wait F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 0245103a0b..88d6d732a7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -192,6 +192,7 @@ GLIBC_2.2 pwrite F
GLIBC_2.2 pwrite64 F
GLIBC_2.2 sem_timedwait F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 429d8b6224..bfa1d5e879 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -194,6 +194,7 @@ GLIBC_2.2 pwrite F
GLIBC_2.2 pwrite64 F
GLIBC_2.2 sem_timedwait F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index d42e1fc4b0..8cf9afe511 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -20,7 +20,6 @@ GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __libc_allocate_rtsig F
GLIBC_2.2 __libc_current_sigrtmax F
GLIBC_2.2 __libc_current_sigrtmin F
-GLIBC_2.2 __libpthread_version_placeholder F
GLIBC_2.2 __lseek F
GLIBC_2.2 __open F
GLIBC_2.2 __open64 F
@@ -187,6 +186,7 @@ GLIBC_2.2 wait F
GLIBC_2.2 waitpid F
GLIBC_2.2 write F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index d87fadf3d8..15b72c4264 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __libc_allocate_rtsig F
GLIBC_2.2 __libc_current_sigrtmax F
GLIBC_2.2 __libc_current_sigrtmin F
-GLIBC_2.2 __libpthread_version_placeholder F
GLIBC_2.2 __lseek F
GLIBC_2.2 __open F
GLIBC_2.2 __open64 F
@@ -185,6 +184,7 @@ GLIBC_2.2 wait F
GLIBC_2.2 waitpid F
GLIBC_2.2 write F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index d87fadf3d8..15b72c4264 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __libc_allocate_rtsig F
GLIBC_2.2 __libc_current_sigrtmax F
GLIBC_2.2 __libc_current_sigrtmin F
-GLIBC_2.2 __libpthread_version_placeholder F
GLIBC_2.2 __lseek F
GLIBC_2.2 __open F
GLIBC_2.2 __open64 F
@@ -185,6 +184,7 @@ GLIBC_2.2 wait F
GLIBC_2.2 waitpid F
GLIBC_2.2 write F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index f42bcffd1e..da5e9979a8 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -192,6 +192,7 @@ GLIBC_2.2 pwrite F
GLIBC_2.2 pwrite64 F
GLIBC_2.2 sem_timedwait F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index c065ddbf67..4c844da957 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.2 __h_errno_location F
GLIBC_2.2 __libc_allocate_rtsig F
GLIBC_2.2 __libc_current_sigrtmax F
GLIBC_2.2 __libc_current_sigrtmin F
-GLIBC_2.2 __libpthread_version_placeholder F
GLIBC_2.2 __lseek F
GLIBC_2.2 __open F
GLIBC_2.2 __open64 F
@@ -185,6 +184,7 @@ GLIBC_2.2 wait F
GLIBC_2.2 waitpid F
GLIBC_2.2 write F
GLIBC_2.2.3 pthread_getattr_np F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 610562bd40..a46fcc6f6e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -18,7 +18,6 @@ GLIBC_2.2.5 __h_errno_location F
GLIBC_2.2.5 __libc_allocate_rtsig F
GLIBC_2.2.5 __libc_current_sigrtmax F
GLIBC_2.2.5 __libc_current_sigrtmin F
-GLIBC_2.2.5 __libpthread_version_placeholder F
GLIBC_2.2.5 __lseek F
GLIBC_2.2.5 __open F
GLIBC_2.2.5 __open64 F
@@ -185,6 +184,7 @@ GLIBC_2.2.5 tcdrain F
GLIBC_2.2.5 wait F
GLIBC_2.2.5 waitpid F
GLIBC_2.2.5 write F
+GLIBC_2.2.6 __libpthread_version_placeholder F
GLIBC_2.28 call_once F
GLIBC_2.28 cnd_broadcast F
GLIBC_2.28 cnd_destroy F