Jiri Slaby 2021-02-19 09:10:49 +00:00 committed by Git OBS Bridge
parent 882245671a
commit f96b173698

View File

@ -12,48 +12,38 @@ But we relied on the renames to build `fd_64.c` properly. With glibc
2.33, we now see link failures of the POSIX runtime:
error: Linking globals named '__xstat': symbol multiply defined!
Rename the function directly in the code as `__USE_FILE_OFFSET64` case
(which we defined at the top of the file) did exactly that using
`__REDIRECT_NTH`.
Rename the functions using `__REDIRECT_NTH` in the code as
`__USE_FILE_OFFSET64` case (which we define at the top of the file by
`#define _FILE_OFFSET_BITS 64`) did exactly that.
Fixes #1384.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
---
runtime/POSIX/fd_64.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
runtime/POSIX/fd_64.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/runtime/POSIX/fd_64.c b/runtime/POSIX/fd_64.c
index eec41f113024..29a9c848712b 100644
index eec41f113024..c8796475aca8 100644
--- a/runtime/POSIX/fd_64.c
+++ b/runtime/POSIX/fd_64.c
@@ -77,7 +77,7 @@ off64_t lseek(int fd, off64_t offset, int whence) {
@@ -73,6 +73,16 @@ int openat(int fd, const char *pathname, int flags, ...) {
return __fd_openat(fd, pathname, flags, mode);
}
+/* removed in glibc 2.33 */
+#ifdef __REDIRECT_NTH
+extern int __REDIRECT_NTH(__fxstat, (int __ver, int __fildes,
+ struct stat *__stat_buf), __fxstat64);
+extern int __REDIRECT_NTH (__xstat, (int __ver, const char *__filename,
+ struct stat *__stat_buf), __xstat64);
+extern int __REDIRECT_NTH (__lxstat, (int __ver, const char *__filename,
+ struct stat *__stat_buf), __lxstat64);
+#endif
+
off64_t lseek(int fd, off64_t offset, int whence) {
return __fd_lseek(fd, offset, whence);
}
-int __xstat(int vers, const char *path, struct stat *buf) {
+int __xstat64(int vers, const char *path, struct stat *buf) {
return __fd_stat(path, (struct stat64*) buf);
}
@@ -85,7 +85,7 @@ int stat(const char *path, struct stat *buf) {
return __fd_stat(path, (struct stat64*) buf);
}
-int __lxstat(int vers, const char *path, struct stat *buf) {
+int __lxstat64(int vers, const char *path, struct stat *buf) {
return __fd_lstat(path, (struct stat64*) buf);
}
@@ -93,7 +93,7 @@ int lstat(const char *path, struct stat *buf) {
return __fd_lstat(path, (struct stat64*) buf);
}
-int __fxstat(int vers, int fd, struct stat *buf) {
+int __fxstat64(int vers, int fd, struct stat *buf) {
return __fd_fstat(fd, (struct stat64*) buf);
}
--
2.30.1