]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Add support for referencing specific symbol versions
authorFlorian Weimer <fweimer@redhat.com>
Tue, 2 Aug 2016 15:18:08 +0000 (17:18 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Tue, 2 Aug 2016 15:18:08 +0000 (17:18 +0200)
This is needed for writing tests of compat symbols.

ChangeLog
include/libc-symbols.h
include/shlib-compat.h

index 3edcce4d9dc87e4c5f9af9a070e298bc21c42472..8c2eb8e48f18b9e7f27796fc2b301637356f8b4b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2016-08-02  Florian Weimer  <fweimer@redhat.com>
+
+       Support linking against compatibility symbols, for use in tests.
+       * include/libc-symbols.h (symbol_version_reference): New macro.
+       (symbol_version): Use it.
+       * include/shlib-compat.h: Unconditionally include <abi-versions.h>.
+       (compat_symbol): Use compat_symbol_reference.
+       (compat_symbol_1, compat_symbol_2): Remove.
+       (compat_symbol_reference, compat_symbol_reference_1)
+       (compat_symbol_reference_2): New macro.  Use
+       symbol_version_reference.
+
 2016-08-02  Florian Weimer  <fweimer@redhat.com>
 
        [BZ #19469]
index 4548e097dc90827f7f30fd327e34e7b95aa332e6..c2b499ae36df0c6349d1eb4baa86e6037e1ee081 100644 (file)
@@ -282,19 +282,28 @@ for linking")
    past the last element in SET.  */
 #define symbol_set_end_p(set, ptr) ((ptr) >= (void *const *) &__stop_##set)
 
+/* Use symbol_version_reference to specify the version a symbol
+   reference should link to.  Use symbol_version or
+   default_symbol_version for the definition of a versioned symbol.
+   The difference is that the latter is a no-op in non-shared
+   builds.  */
+#ifdef __ASSEMBLER__
+# define symbol_version_reference(real, name, version) \
+     .symver real, name##@##version
+#else  /* !__ASSEMBLER__ */
+# define symbol_version_reference(real, name, version) \
+  __asm__ (".symver " #real "," #name "@" #version)
+#endif
+
 #ifdef SHARED
 # define symbol_version(real, name, version) \
-     _symbol_version(real, name, version)
+  symbol_version_reference(real, name, version)
 # define default_symbol_version(real, name, version) \
      _default_symbol_version(real, name, version)
 # ifdef __ASSEMBLER__
-#  define _symbol_version(real, name, version) \
-     .symver real, name##@##version
 #  define _default_symbol_version(real, name, version) \
      .symver real, name##@##@##version
 # else
-#  define _symbol_version(real, name, version) \
-     __asm__ (".symver " #real "," #name "@" #version)
 #  define _default_symbol_version(real, name, version) \
      __asm__ (".symver " #real "," #name "@@" #version)
 # endif
index c1c5e2c3b1a294008b833f4d0149e6ad35791d81..025c7316ddcf1a9e600798297c1773a813e1a246 100644 (file)
 #ifndef _SHLIB_COMPAT_H
 #define _SHLIB_COMPAT_H        1
 
-#ifdef SHARED
-
 # include <abi-versions.h>
 
+#ifdef SHARED
+
 /* The file abi-versions.h (generated by scripts/abi-versions.awk) defines
    symbols like `ABI_libm_GLIBC_2_0' for each version set in the source
    code for each library.  For a version set that is subsumed by a later
   default_symbol_version (local, symbol, name)
 
 # define compat_symbol(lib, local, symbol, version) \
-  compat_symbol_1 (lib, local, symbol, version)
-# define compat_symbol_1(lib, local, symbol, version) \
-  compat_symbol_2 (local, symbol, VERSION_##lib##_##version)
-# define compat_symbol_2(local, symbol, name) \
-  symbol_version (local, symbol, name)
+  compat_symbol_reference (lib, local, symbol, version)
 
 #else
 
 
 #endif
 
+/* Use compat_symbol_reference for a reference to a specific version
+   of a symbol.  Use compat_symbol to define such a symbol.  */
+#define compat_symbol_reference(lib, local, symbol, version) \
+  compat_symbol_reference_1 (lib, local, symbol, version)
+#define compat_symbol_reference_1(lib, local, symbol, version) \
+  compat_symbol_reference_2 (local, symbol, VERSION_##lib##_##version)
+#define compat_symbol_reference_2(local, symbol, name) \
+  symbol_version_reference (local, symbol, name)
 
 # ifdef LINK_OBSOLETE_RPC
 /* Export the symbol for both static and dynamic linking.  */