about summary refs log tree commit diff
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.  */