Revert "linux: Move {f}xstat{at} to compat symbols" for static build

This reverts commit 20b39d5946 for static
library.  This avoids the need to rebuild the world for the case where
libstdc++ (and potentially other libraries) are linked to a old glibc.

To avoid requering to provide xstat symbols for newer ABIs (such as
riscv32) a new LIB_COMPAT macro is added.  It is similar to SHLIB_COMPAT
but also works for static case (thus evaluating similar to SHLIB_COMPAT
for both shared and static case).

Checked with a check-abi on all affected ABIs. I also check if the
static library does contains the xstat symbols.
This commit is contained in:
Adhemerval Zanella 2020-12-29 13:21:29 +00:00
parent 28f2ce2772
commit 46c1c765d1
17 changed files with 40 additions and 37 deletions

View File

@ -21,8 +21,6 @@
# include <abi-versions.h>
#ifdef SHARED
/* The file abi-versions.h (generated by scripts/abi-versions.awk) defines
symbols like `ABI_libm_GLIBC_2_0' for each version set in the source
code for each library. For a version set that is subsumed by a later
@ -34,17 +32,24 @@
when the two version sets named are in fact two different ABIs we are
supporting. If these do not differ, then there is no need to compile in
extra code to support this version set where it has been superseded by a
newer version. The compatibility code should be conditionalized with
e.g. `#if SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_2)' for code introduced
in the GLIBC_2.0 version and obsoleted in the GLIBC_2.2 version. */
# define SHLIB_COMPAT(lib, introduced, obsoleted) \
_SHLIB_COMPAT (lib, introduced, obsoleted)
# define _SHLIB_COMPAT(lib, introduced, obsoleted) \
newer version. */
#define LIB_COMPAT(lib, introduced, obsoleted) \
_LIB_COMPAT (lib, introduced, obsoleted)
#define _LIB_COMPAT(lib, introduced, obsoleted) \
(IS_IN (lib) \
&& (!(ABI_##lib##_##obsoleted - 0) \
|| ((ABI_##lib##_##introduced - 0) < (ABI_##lib##_##obsoleted - 0))))
#ifdef SHARED
/* Similar to LIB_COMPAT, but evaluate to 0 for static build. The
compatibility code should be conditionalized with e.g.
`#if SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_2)' for code introduced
in the GLIBC_2.0 version and obsoleted in the GLIBC_2.2 version. */
# define SHLIB_COMPAT(lib, introduced, obsoleted) \
_LIB_COMPAT (lib, introduced, obsoleted)
/* That header also defines symbols like `VERSION_libm_GLIBC_2_1' to
the version set name to use for e.g. symbols first introduced into
libm in the GLIBC_2.1 version. Definitions of symbols with explicit

View File

@ -21,7 +21,7 @@
#include <hurd.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file descriptor FD in BUF. */
int
@ -34,4 +34,4 @@ __fxstat (int vers, int fd, struct stat *buf)
}
weak_alias (__fxstat, _fxstat)
#endif
#endif /* LIB_COMPAT */

View File

@ -21,7 +21,7 @@
#include <hurd.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
/* Get information about the file descriptor FD in BUF. */
int

View File

@ -22,7 +22,7 @@
#include <hurd.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
int
__fxstatat (int vers, int fd, const char *filename, struct stat *buf, int flag)
@ -32,5 +32,4 @@ __fxstatat (int vers, int fd, const char *filename, struct stat *buf, int flag)
return __fstatat (fd, filename, buf, flag);
}
#endif

View File

@ -23,7 +23,7 @@
#include <hurd.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
/* Get information about the file descriptor FD in BUF. */
int
@ -35,5 +35,4 @@ __fxstatat64 (int vers, int fd, const char *filename, struct stat64 *buf,
return __fstatat64 (fd, filename, buf, flag);
}
#endif

View File

@ -21,7 +21,7 @@
#include <hurd.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
int
__lxstat (int vers, const char *file, struct stat *buf)

View File

@ -22,7 +22,7 @@
#include <hurd.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
/* Get information about the file descriptor FD in BUF. */
int
@ -33,5 +33,4 @@ __lxstat64 (int vers, const char *file, struct stat64 *buf)
return __lstat64 (file, buf);
}
#endif

View File

@ -20,7 +20,7 @@
#include <hurd.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get file information about FILE in BUF. */
int

View File

@ -21,7 +21,7 @@
#include <hurd.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
/* Get information about the file descriptor FD in BUF. */
int

View File

@ -26,7 +26,7 @@
# include <xstatover.h>
# include <shlib-compat.h>
# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
# if LIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file FD in BUF. */
int
@ -61,6 +61,6 @@ __fxstat (int vers, int fd, struct stat *buf)
}
}
# endif /* SHLIB_COMPAT */
# endif /* LIB_COMPAT */
#endif /* XSTAT_IS_XSTAT64 */

View File

@ -26,7 +26,7 @@
#include <statx_cp.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file FD in BUF. */
@ -78,4 +78,4 @@ strong_alias (___fxstat64, __fxstat64)
strong_alias (___fxstat64, __fxstat)
#endif
#endif /* SHLIB_COMPAT */
#endif /* LIB_COMPAT */

View File

@ -26,7 +26,7 @@
# include <xstatover.h>
# include <shlib-compat.h>
# if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
# if LIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
/* Get information about the file FD in BUF. */
int
@ -50,6 +50,6 @@ __fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
#endif
}
# endif /* SHLIB_COMPAT */
# endif /* LIB_COMPAT */
#endif /* XSTAT_IS_XSTAT64 */

View File

@ -26,7 +26,7 @@
#include <statx_cp.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33)
/* Get information about the file FD in BUF. */
@ -69,4 +69,4 @@ __fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
strong_alias (__fxstatat64, __fxstatat)
#endif
#endif /* SHLIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33) */
#endif /* LIB_COMPAT(libc, GLIBC_2_4, GLIBC_2_33) */

View File

@ -26,7 +26,7 @@
# include <xstatconv.h>
# include <xstatover.h>
# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
# if LIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
int

View File

@ -26,7 +26,7 @@
#include <statx_cp.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
@ -95,4 +95,4 @@ strong_alias (___lxstat64, __lxstat64);
strong_alias (___lxstat64,__lxstat)
#endif
#endif /* SHLIB_COMPAT */
#endif /* LIB_COMPAT */

View File

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

View File

@ -26,7 +26,7 @@
#include <statx_cp.h>
#include <shlib-compat.h>
#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
#if LIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_33)
/* Get information about the file NAME in BUF. */
@ -92,4 +92,5 @@ compat_symbol (libc, __old__xstat64, __xstat64, GLIBC_2_1);
strong_alias (___xstat64, __xstat64)
#endif
#endif /* SHLIB_COMPAT */
#endif /* LIB_COMPAT */