linux: Move {f}xstat{at} to compat symbols

They are no interna uses anymore.  The riscv32 ABI was added on 2.33,
so it is safe to remove the old __{f,l}stat{at} symbols and just
provide the newer {f,l}stat{at} ones.

Checked with a build for all affected ABIs. I also checked on x86_64,
i686, powerpc, powerpc64le, sparcv9, sparc64, s390, and s390x.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
This commit is contained in:
Adhemerval Zanella 2020-07-18 10:21:25 -03:00
parent 6073bae64c
commit 20b39d5946
21 changed files with 181 additions and 31 deletions

View file

@ -22,9 +22,11 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__fxstat64 (int vers, int fd, struct stat64 *buf)
{
switch (vers)
@ -42,4 +44,12 @@ __fxstat64 (int vers, int fd, struct stat64 *buf)
}
}
}
strong_alias (__fxstat64, __fxstat);
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
strong_alias (__fxstat64, __fxstat_compat)
compat_symbol (libc, __fxstat_compat, __fxstat, GLIBC_2_0);
#endif
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
compat_symbol (libc, __fxstat64, __fxstat64, GLIBC_2_1);
#endif

View file

@ -22,11 +22,18 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
{
return INLINE_SYSCALL_CALL (fstatat64, fd, file, st, flag);
}
strong_alias (__fxstatat64, __fxstatat);
strong_alias (__fxstatat64, __fxstatat_compat)
compat_symbol (libc, __fxstatat_compat, __fxstatat, GLIBC_2_4);
compat_symbol (libc, __fxstatat64, __fxstatat64, GLIBC_2_4);
#endif

View file

@ -23,9 +23,11 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__lxstat64 (int vers, const char *name, struct stat64 *buf)
{
switch (vers)
@ -43,4 +45,12 @@ __lxstat64 (int vers, const char *name, struct stat64 *buf)
}
}
}
weak_alias (__lxstat64, __lxstat);
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
strong_alias (__lxstat64, __lxstat_compat)
compat_symbol (libc, __lxstat_compat, __lxstat, GLIBC_2_0);
#endif
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
compat_symbol (libc, __lxstat64, __lxstat64, GLIBC_2_1);
#endif

View file

@ -23,9 +23,11 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__xstat64 (int vers, const char *name, struct stat64 *buf)
{
switch (vers)
@ -43,4 +45,12 @@ __xstat64 (int vers, const char *name, struct stat64 *buf)
}
}
}
weak_alias (__xstat64, __xstat);
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
strong_alias (__xstat64, __xstat_compat)
compat_symbol (libc, __xstat_compat, __xstat, GLIBC_2_0);
#endif
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
compat_symbol (libc, __xstat64, __xstat64, GLIBC_2_1);
#endif

View file

@ -24,9 +24,13 @@
#if !XSTAT_IS_XSTAT64
# include <xstatconv.h>
# include <xstatover.h>
# include <shlib-compat.h>
# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file FD in BUF. */
int
attribute_compat_text_section
__fxstat (int vers, int fd, struct stat *buf)
{
switch (vers)
@ -57,4 +61,8 @@ __fxstat (int vers, int fd, struct stat *buf)
}
}
}
compat_symbol (libc, __fxstat, __fxstat, GLIBC_2_0);
# endif /* SHLIB_COMPAT */
#endif /* XSTAT_IS_XSTAT64 */

View file

@ -24,10 +24,14 @@
#include <sysdep.h>
#include <xstatconv.h>
#include <statx_cp.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file FD in BUF. */
int
attribute_compat_text_section
___fxstat64 (int vers, int fd, struct stat64 *buf)
{
#if XSTAT_IS_XSTAT64
@ -63,16 +67,18 @@ ___fxstat64 (int vers, int fd, struct stat64 *buf)
#endif /* XSTAT_IS_XSTAT64 */
}
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
versioned_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2);
compat_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2);
strong_alias (___fxstat64, __old__fxstat64)
compat_symbol (libc, __old__fxstat64, __fxstat64, GLIBC_2_1);
#else
strong_alias (___fxstat64, __fxstat64)
compat_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2);
#endif
#if XSTAT_IS_XSTAT64
strong_alias (__fxstat64, __fxstat);
strong_alias (___fxstat64, __fxstat_compat)
compat_symbol (libc, __fxstat_compat, __fxstat, GLIBC_2_2);
#endif
#endif /* SHLIB_COMPAT */

View file

@ -24,9 +24,13 @@
#if !XSTAT_IS_XSTAT64
# include <xstatconv.h>
# include <xstatover.h>
# include <shlib-compat.h>
# if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
/* Get information about the file FD in BUF. */
int
attribute_compat_text_section
__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
{
#if STAT_IS_KERNEL_STAT
@ -46,4 +50,8 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
return r ?: __xstat32_conv (vers, &st64, st);
#endif
}
compat_symbol (libc, __fxstatat, __fxstatat, GLIBC_2_4);
# endif /* SHLIB_COMPAT */
#endif /* XSTAT_IS_XSTAT64 */

View file

@ -24,10 +24,14 @@
#include <sysdep.h>
#include <xstatconv.h>
#include <statx_cp.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
/* Get information about the file FD in BUF. */
int
attribute_compat_text_section
__fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
{
#if XSTAT_IS_XSTAT64
@ -61,6 +65,12 @@ __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
#endif
return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
}
compat_symbol (libc, __fxstatat64, __fxstatat64, GLIBC_2_4);
#if XSTAT_IS_XSTAT64
strong_alias (__fxstatat64, __fxstatat);
strong_alias (__fxstatat64, __fxstatat_compat)
compat_symbol (libc, __fxstatat_compat, __fxstatat, GLIBC_2_4);
#endif
#endif /* SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33) */

View file

@ -20,13 +20,17 @@
#include <fcntl.h>
#include <kernel_stat.h>
#include <sysdep.h>
#include <shlib-compat.h>
#if !XSTAT_IS_XSTAT64
# include <xstatconv.h>
# include <xstatover.h>
# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__lxstat (int vers, const char *name, struct stat *buf)
{
switch (vers)
@ -58,4 +62,8 @@ __lxstat (int vers, const char *name, struct stat *buf)
}
}
}
compat_symbol (libc, __lxstat, __lxstat, GLIBC_2_0);
# endif /* SHLIB_COMPAT */
#endif /* XSTAT_IS_XSTAT64 */

View file

@ -24,10 +24,14 @@
#include <sysdep.h>
#include <xstatconv.h>
#include <statx_cp.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
___lxstat64 (int vers, const char *name, struct stat64 *buf)
{
#if XSTAT_IS_XSTAT64
@ -80,17 +84,18 @@ ___lxstat64 (int vers, const char *name, struct stat64 *buf)
return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
}
#if XSTAT_IS_XSTAT64
weak_alias (___lxstat64, __lxstat);
weak_alias (___lxstat64, __GI___lxstat);
#endif
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
versioned_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2);
compat_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2);
strong_alias (___lxstat64, __old__lxstat64)
compat_symbol (libc, __old__lxstat64, __lxstat64, GLIBC_2_1);
#else
strong_alias (___lxstat64, __lxstat64);
compat_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2);
#endif
#if XSTAT_IS_XSTAT64
strong_alias (___lxstat64,__lxstat_compat)
compat_symbol (libc, __lxstat_compat, __lxstat, GLIBC_2_2);
#endif
#endif /* SHLIB_COMPAT */

View file

@ -21,9 +21,13 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__fxstat (int vers, int fd, struct stat *buf)
{
switch (vers)
@ -39,3 +43,7 @@ __fxstat (int vers, int fd, struct stat *buf)
}
}
}
compat_symbol (libc, __fxstat, __fxstat, GLIBC_2_0);
#endif

View file

@ -21,9 +21,13 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__lxstat (int vers, const char *name, struct stat *buf)
{
switch (vers)
@ -39,3 +43,7 @@ __lxstat (int vers, const char *name, struct stat *buf)
}
}
}
compat_symbol (libc, __lxstat, __lxstat, GLIBC_2_0);
#endif

View file

@ -20,10 +20,14 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_33)
/* Get information about the file FD in BUF. */
int
attribute_compat_text_section
__fxstat64 (int vers, int fd, struct stat64 *buf)
{
struct kernel_stat kbuf;
@ -31,3 +35,7 @@ __fxstat64 (int vers, int fd, struct stat64 *buf)
return r ?: __xstat64_conv (vers, &kbuf, buf);
}
compat_symbol (libc, __fxstat64, __fxstat64, GLIBC_2_2);
#endif

View file

@ -21,12 +21,20 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
/* Get information about the file FD in BUF. */
int
attribute_compat_text_section
__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
{
struct kernel_stat kst;
int r = INLINE_SYSCALL_CALL (newfstatat, fd, file, &kst, flag);
return r ?: __xstat_conv (vers, &kst, st);
}
compat_symbol (libc, __fxstatat, __fxstatat, GLIBC_2_4);
#endif

View file

@ -19,10 +19,14 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
{
if (vers == _STAT_VER_LINUX)
@ -33,3 +37,7 @@ __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
}
return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
}
compat_symbol (libc, __fxstatat64, __fxstatat64, GLIBC_2_4);
#endif

View file

@ -20,12 +20,20 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__lxstat64 (int vers, const char *name, struct stat64 *buf)
{
struct kernel_stat kbuf;
int r = INLINE_SYSCALL_CALL (lstat, name, &kbuf);
return r ?: __xstat64_conv (vers, &kbuf, buf);
}
compat_symbol (libc, __lxstat64, __lxstat64, GLIBC_2_2);
#endif

View file

@ -20,13 +20,20 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__xstat64 (int vers, const char *name, struct stat64 *buf)
{
struct kernel_stat kbuf;
int r = INLINE_SYSCALL_CALL (stat, name, &kbuf);
return r ?: __xstat64_conv (vers, &kbuf, buf);
}
compat_symbol (libc, __xstat64, __xstat64, GLIBC_2_2);
#endif

View file

@ -21,9 +21,13 @@
#include <kernel_stat.h>
#include <sysdep.h>
#include <xstatconv.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__xstat (int vers, const char *name, struct stat *buf)
{
switch (vers)
@ -39,3 +43,7 @@ __xstat (int vers, const char *name, struct stat *buf)
}
}
}
compat_symbol (libc, __xstat, __xstat, GLIBC_2_0);
#endif

View file

@ -201,10 +201,6 @@ GLIBC_2.33 __fsetlocking F
GLIBC_2.33 __fwprintf_chk F
GLIBC_2.33 __fwritable F
GLIBC_2.33 __fwriting F
GLIBC_2.33 __fxstat F
GLIBC_2.33 __fxstat64 F
GLIBC_2.33 __fxstatat F
GLIBC_2.33 __fxstatat64 F
GLIBC_2.33 __getauxval F
GLIBC_2.33 __getcwd_chk F
GLIBC_2.33 __getdelim F
@ -287,8 +283,6 @@ GLIBC_2.33 __libc_start_main F
GLIBC_2.33 __libc_valloc F
GLIBC_2.33 __longjmp_chk F
GLIBC_2.33 __lseek F
GLIBC_2.33 __lxstat F
GLIBC_2.33 __lxstat64 F
GLIBC_2.33 __malloc_hook D 0x4
GLIBC_2.33 __mbrlen F
GLIBC_2.33 __mbrtowc F
@ -489,8 +483,6 @@ GLIBC_2.33 __xmknodat F
GLIBC_2.33 __xpg_basename F
GLIBC_2.33 __xpg_sigpause F
GLIBC_2.33 __xpg_strerror_r F
GLIBC_2.33 __xstat F
GLIBC_2.33 __xstat64 F
GLIBC_2.33 _dl_mcount_wrapper F
GLIBC_2.33 _dl_mcount_wrapper_check F
GLIBC_2.33 _environ D 0x4

View file

@ -20,13 +20,17 @@
#include <fcntl.h>
#include <kernel_stat.h>
#include <sysdep.h>
#include <shlib-compat.h>
#if !XSTAT_IS_XSTAT64
# include <xstatconv.h>
# include <xstatover.h>
# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
__xstat (int vers, const char *name, struct stat *buf)
{
switch (vers)
@ -57,4 +61,8 @@ __xstat (int vers, const char *name, struct stat *buf)
}
}
}
compat_symbol (libc, __xstat, __xstat, GLIBC_2_0);
# endif /* SHLIB_COMPAT */
#endif /* XSTAT_IS_XSTAT64 */

View file

@ -24,10 +24,14 @@
#include <sysdep.h>
#include <xstatconv.h>
#include <statx_cp.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int
attribute_compat_text_section
___xstat64 (int vers, const char *name, struct stat64 *buf)
{
#if XSTAT_IS_XSTAT64
@ -78,16 +82,17 @@ ___xstat64 (int vers, const char *name, struct stat64 *buf)
}
#if XSTAT_IS_XSTAT64
weak_alias (___xstat64, __xstat);
weak_alias (___xstat64, __GI___xstat);
strong_alias (___xstat64, __xstat_compat)
compat_symbol (libc, __xstat_compat, __xstat, GLIBC_2_2);
#endif
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
versioned_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2);
compat_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2);
strong_alias (___xstat64, __old__xstat64)
compat_symbol (libc, __old__xstat64, __xstat64, GLIBC_2_1);
#else
strong_alias (___xstat64, __xstat64)
compat_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2);
#endif
#endif /* SHLIB_COMPAT */