[glibc] io: fix ftw ABI on MIPS n64
Adhemerval Zanella via Glibc-cvs <[email protected]> Mon, 3 Aug 2026 19:14:53 +0000 (GMT)
| Newsgroups | gmane.comp.lib.glibc.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=6758def717175e679cb49b5051b6b5ec54ddfb2c commit 6758def717175e679cb49b5051b6b5ec54ddfb2c Author: Xi Ruoyao <[email protected]> Date: Wed Jul 22 19:26:10 2026 +0800 io: fix ftw ABI on MIPS n64 On MIPS n64 off_t is same as off64_t, but struct stat is not same as struct stat64 (very peculiar but see the "as tempting as it..." comment in linux/mips/kernel_stat.h). As the ftw/ftw64 callback accepts a pointer to a function who accepts struct stat/stat64, for MIPS n64 we must use different implementations for ftw and ftw64. Thus for testing if ftw64 can be aliased to ftw, we should check XSTAT_IS_XSTAT64 instead of __OFF_T_MATCHES_OFF64_T. This resolves the io/tst-ftw-lnk failure observed on MIPS n64. Link: https://sourceware.org/glibc/wiki/Testing/Tests/io/tst-ftw-lnk Signed-off-by: Xi Ruoyao <[email protected]> Reviewed-by: Adhemerval Zanella <[email protected]> Diff: --- io/ftw.c | 4 +++- io/ftw64.c | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/io/ftw.c b/io/ftw.c index ed0eeb3904..a9368a706e 100644 --- a/io/ftw.c +++ b/io/ftw.c @@ -18,7 +18,9 @@ #include <sys/types.h> -#ifndef __OFF_T_MATCHES_OFF64_T +#include <kernel_stat.h> + +#if !XSTAT_IS_XSTAT64 # include "ftw-common.c" versioned_symbol (libc, __new_nftw, nftw, GLIBC_2_3_3); diff --git a/io/ftw64.c b/io/ftw64.c index d3cd14c21a..fa7b05df22 100644 --- a/io/ftw64.c +++ b/io/ftw64.c @@ -31,6 +31,9 @@ #define ftw __rename_ftw #define nftw __rename_nftw +#include <sys/types.h> + +#include <kernel_stat.h> #include <shlib-compat.h> #include "ftw-common.c" @@ -44,7 +47,7 @@ versioned_symbol (libc, __new_nftw64, nftw64, GLIBC_2_3_3); compat_symbol (libc, __old_nftw64, nftw64, GLIBC_2_1); #endif -#ifdef __OFF_T_MATCHES_OFF64_T +#if XSTAT_IS_XSTAT64 weak_alias (__ftw64, ftw) versioned_symbol (libc, __new_nftw64, nftw, GLIBC_2_3_3); # if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_3_3)