aboutsummaryrefslogtreecommitdiff
path: root/contrib/guix/patches/glibc-2.27-no-librt.patch
blob: 4f2092ba7eca56823f35b916894d8f0609d1bfe2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
This patch can be dropped when we are building with glibc 2.30+.

commit 6e41ef56c9baab719a02f1377b1e7ce7bff61e73
Author: Florian Weimer <fweimer@redhat.com>
Date:   Fri Feb 8 10:21:56 2019 +0100

    rt: Turn forwards from librt to libc into compat symbols [BZ #24194]
    
    As the  result of commit 6e6249d0b461b952d0f544792372663feb6d792a
    ("BZ#14743: Move clock_* symbols from librt to libc."), in glibc 2.17,
    clock_gettime, clock_getres, clock_settime, clock_getcpuclockid,
    clock_nanosleep were added to libc, and the file rt/clock-compat.c
    was added with forwarders to the actual implementations in libc.
    These forwarders were wrapped in

    #if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_17)
    
    so that they are not present for newer architectures (such as
    powerpc64le) with a 2.17 or later ABI baseline.  But the forwarders
    were not marked as compatibility symbols.  As a result, on older
    architectures, historic configure checks such as
    
    AC_CHECK_LIB(rt, clock_gettime)
    
    still cause linking against librt, even though this is completely
    unnecessary.  It also creates a needless porting hazard because
    architectures behave differently when it comes to symbol availability.
    
    Reviewed-by: Carlos O'Donell <carlos@redhat.com>

diff --git a/rt/clock-compat.c b/rt/clock-compat.c
index f816973c05..11e71aa890 100644
--- a/rt/clock-compat.c
+++ b/rt/clock-compat.c
@@ -30,14 +30,16 @@
 #if HAVE_IFUNC
 # undef INIT_ARCH
 # define INIT_ARCH()
-# define COMPAT_REDIRECT(name, proto, arglist) libc_ifunc (name, &__##name)
+# define COMPAT_REDIRECT(name, proto, arglist) libc_ifunc (name, &__##name) \
+    compat_symbol (librt, name, name, GLIBC_2_2);
 #else
 # define COMPAT_REDIRECT(name, proto, arglist)				      \
   int									      \
   name proto								      \
   {									      \
     return __##name arglist;						      \
-  }
+  }									      \
+  compat_symbol (librt, name, name, GLIBC_2_2);
 #endif
 
 COMPAT_REDIRECT (clock_getres,