[PATCH v3] io: fix ftw ABI on MIPS n64

Andreas K. Huettel dilfridge@gentoo.org
Fri Jul 24 10:16:14 GMT 2026


OK so at this point, no matter how simple it looks, I'd rather have mips n64 
(slightly) broken without a backport than risk breaking more by pushing a 
last-minute change with insufficient testing.

Unless there's a huge protest I'll go ahead with the release in a few hours.

Cheers,
Andreas


Am Mittwoch, 22. Juli 2026, 20:26:10 Japanische Normalzeit schrieb Xi Ruoyao:
> 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 <xry111@xry111.site>
> ---
> 
> Change from v2: retain/add sys/types.h inclusion as some targets need
> struct timespec definition in kernel_stat.h.
> 
> Tested on x86_64-linux, mips64-linux, and i686-linux.
> 
>  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)
> 


-- 
PD Dr. Andreas K. Hüttel
dilfridge@gentoo.org
Gentoo Linux developer 
(council, comrel, toolchain, base-system, perl, libreoffice)
https://wiki.gentoo.org/wiki/User:Dilfridge
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 870 bytes
Desc: This is a digitally signed message part.
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20260724/4747292c/attachment.sig>


More information about the Libc-alpha mailing list