diff --git a/ChangeLog b/ChangeLog index 22785e1e02..6c9331b894 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2018-05-22 Joseph Myers + + [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 . + (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 * 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 #include #include +#include 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. */