aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--NEWS5
-rw-r--r--sysdeps/unix/make-syscalls.sh2
-rw-r--r--sysdeps/unix/sysv/linux/lseek64.c11
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/llseek.S1
6 files changed, 26 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 22785e1e02..6c9331b894 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2018-05-22 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #18471]
+ * sysdeps/unix/make-syscalls.sh (emit_weak_aliases): Use weak
+ aliases for non-libc case of versioned symbols.
+ * sysdeps/unix/sysv/linux/lseek64.c: Include <shlib-compat.h>.
+ (llseek): Define as compat symbol if
+ [SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_28)], not as weak alias
+ with link warning.
+ * sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list (llseek):
+ Make into a compat symbol, disabled for minimum symbol version
+ GLIBC_2.28 and later.
+ * sysdeps/unix/sysv/linux/x86_64/x32/llseek.S: Remove file.
+
2018-05-22 Florian Weimer <fweimer@redhat.com>
* sysdeps/i386/Makefile [$(subdir) == math] (sysdep-CFLAGS): Do
diff --git a/NEWS b/NEWS
index bade9e4765..7838f79ab2 100644
--- a/NEWS
+++ b/NEWS
@@ -74,6 +74,11 @@ Deprecated and removed features, and other changes affecting compatibility:
and could not usefully be used with the GNU C Library on systems with
version 3.1 or later of the Linux kernel.
+* The obsolete function name llseek is no longer available to newly linked
+ binaries. This function was specific to systems using the Linux kernel
+ and was not declared in a header. Programs should use the lseek64 name
+ for this function instead.
+
Changes to build and runtime requirements:
[Add changes to build and runtime requirements here]
diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
index 874ad691cd..e39b2d6d52 100644
--- a/sysdeps/unix/make-syscalls.sh
+++ b/sysdeps/unix/make-syscalls.sh
@@ -103,7 +103,7 @@ emit_weak_aliases()
fi
echo " echo 'versioned_symbol (libc, $source, $base, $ver)'; \\"
echo " echo '#else'; \\"
- echo " echo 'strong_alias ($strong, $base)'; \\"
+ echo " echo 'weak_alias ($strong, $base)'; \\"
echo " echo '#endif'; \\"
;;
*@*)
diff --git a/sysdeps/unix/sysv/linux/lseek64.c b/sysdeps/unix/sysv/linux/lseek64.c
index 504d008782..2ad6a610c8 100644
--- a/sysdeps/unix/sysv/linux/lseek64.c
+++ b/sysdeps/unix/sysv/linux/lseek64.c
@@ -21,6 +21,7 @@
#include <sys/types.h>
#include <sysdep.h>
#include <errno.h>
+#include <shlib-compat.h>
off64_t
__lseek64 (int fd, off64_t offset, int whence)
@@ -46,9 +47,7 @@ libc_hidden_def (__lseek)
strong_alias (__lseek64, __libc_lseek64)
weak_alias (__lseek64, lseek64)
-/* llseek doesn't have a prototype. Since the second parameter is a
- 64bit type, this results in wrong behaviour if no prototype is
- provided. */
-weak_alias (__lseek64, llseek)
-link_warning (llseek, "\
-the `llseek' function may be dangerous; use `lseek64' instead.")
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_28)
+strong_alias (__lseek64, __compat_llseek)
+compat_symbol (libc, __compat_llseek, llseek, GLIBC_2_0);
+#endif
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list b/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list
index 33d968fe0a..9e6a584685 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list
@@ -2,7 +2,7 @@
# C syscall macros cannot be used because this syscall has a 64-bit
# return value.
-lseek64 - lseek i:iii __lseek64 __libc_lseek64 lseek64 llseek
+lseek64 - lseek i:iii __lseek64 __libc_lseek64 lseek64@@GLIBC_2.2 llseek@GLIBC_2.0:GLIBC_2.28
prlimit64 EXTRA prlimit64 i:iipp prlimit64
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/llseek.S b/sysdeps/unix/sysv/linux/x86_64/x32/llseek.S
deleted file mode 100644
index 5084d0ebd2..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/x32/llseek.S
+++ /dev/null
@@ -1 +0,0 @@
-/* No llseek for x32. */