aboutsummaryrefslogtreecommitdiff
path: root/rt
diff options
context:
space:
mode:
Diffstat (limited to 'rt')
-rw-r--r--rt/Makefile4
-rw-r--r--rt/Versions6
-rw-r--r--rt/aio_read.c32
-rw-r--r--rt/aio_read64.c20
4 files changed, 52 insertions, 10 deletions
diff --git a/rt/Makefile b/rt/Makefile
index 119b757d2a..ec2aff9ce4 100644
--- a/rt/Makefile
+++ b/rt/Makefile
@@ -29,8 +29,6 @@ routines = \
shm_unlink \
librt-routines = \
- aio_read \
- aio_read64 \
aio_return \
aio_suspend \
aio_write \
@@ -62,6 +60,8 @@ $(librt-routines-var) += \
aio_fsync \
aio_misc \
aio_notify \
+ aio_read \
+ aio_read64 \
aio_sigqueue \
tests := tst-shm tst-timer tst-timer2 \
diff --git a/rt/Versions b/rt/Versions
index 1a0aa77fd0..6db40bebc4 100644
--- a/rt/Versions
+++ b/rt/Versions
@@ -8,6 +8,8 @@ libc {
aio_error64;
aio_fsync;
aio_fsync64;
+ aio_read;
+ aio_read64;
%endif
}
GLIBC_2.2 {
@@ -23,6 +25,8 @@ libc {
aio_error64;
aio_fsync;
aio_fsync64;
+ aio_read;
+ aio_read64;
%endif
shm_open;
shm_unlink;
@@ -51,9 +55,9 @@ librt {
aio_fsync;
aio_fsync64;
aio_init;
-%endif
aio_read;
aio_read64;
+%endif
aio_return;
aio_return64;
aio_suspend;
diff --git a/rt/aio_read.c b/rt/aio_read.c
index 4698e48b1c..61cf8bc99a 100644
--- a/rt/aio_read.c
+++ b/rt/aio_read.c
@@ -17,14 +17,40 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <aio.h>
+#include <bits/wordsize.h>
+#if __WORDSIZE == 64
+# define aio_read64 XXX
+# include <aio.h>
+/* And undo the hack. */
+# undef aio_read64
+#else
+# include <aio.h>
+#endif
#include <aio_misc.h>
-
+#include <shlib-compat.h>
int
-aio_read (struct aiocb *aiocbp)
+__aio_read (struct aiocb *aiocbp)
{
return (__aio_enqueue_request ((aiocb_union *) aiocbp, LIO_READ) == NULL
? -1 : 0);
}
+
+#if PTHREAD_IN_LIBC
+versioned_symbol (libc, __aio_read, aio_read, GLIBC_2_34);
+# if __WORDSIZE == 64
+versioned_symbol (libc, __aio_read, aio_read64, GLIBC_2_34);
+# endif
+# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
+compat_symbol (librt, __aio_read, aio_read, GLIBC_2_1);
+# if __WORDSIZE == 64
+compat_symbol (librt, __aio_read, aio_read64, GLIBC_2_1);
+# endif
+# endif
+#else /* !PTHREAD_IN_LIBC */
+strong_alias (__aio_read, aio_read)
+# if __WORDSIZE == 64
+weak_alias (__aio_read, aio_read64)
+#endif
+#endif /* !PTHREAD_IN_LIBC */
diff --git a/rt/aio_read64.c b/rt/aio_read64.c
index 26b9b0b380..3aa169fbf3 100644
--- a/rt/aio_read64.c
+++ b/rt/aio_read64.c
@@ -17,14 +17,26 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <aio.h>
-
-#include <aio_misc.h>
+#include <bits/wordsize.h>
+#if __WORDSIZE != 64
+# include <aio.h>
+# include <aio_misc.h>
+# include <shlib-compat.h>
int
-aio_read64 (struct aiocb64 *aiocbp)
+__aio_read64 (struct aiocb64 *aiocbp)
{
return (__aio_enqueue_request ((aiocb_union *) aiocbp, LIO_READ64) == NULL
? -1 : 0);
}
+
+# if PTHREAD_IN_LIBC
+versioned_symbol (libc, __aio_read64, aio_read64, GLIBC_2_34);
+# if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_34)
+compat_symbol (librt, __aio_read64, aio_read64, GLIBC_2_1);
+# endif
+# else /* !PTHREAD_IN_LIBC */
+strong_alias (__aio_read64, aio_read64)
+# endif
+#endif /* __WORDSIZE != 64 */