I think the attached patch, courtesy of Gentoo, should finally fix the statvfs problem on Alpha. Without the patch eglibc 2.13 causes major problems on Alpha such as recent versions of apt-get failing to establish the correct free space on the disk and refusing to install any packages. I have been using the patch since eglibc 2.13-4 up to 2.13-8 and everything works dandy. Even the test program by Martin Loewis gives the same answer with and without -D_FILE_OFFSET_BITS=64 when running a libc with this patch.
Cheers Michael.
>From cd96467fcfa0b2a9be52dfc4e013d8051a827edc Mon Sep 17 00:00:00 2001 From: Mike Frysinger <vap...@gentoo.org> Date: Sun, 3 Apr 2011 16:54:50 -0400 Subject: [PATCH] alpha: do not assume statfs64 support In the past, the alpha port used the wordsize-64/statfs64.c stub which allowed the statfs64() func to alias to statfs(). But after the move to the ports tree, some shuffling happened and now alpha's statfs64.c will pull in the standard 32bit linux statfs64.c file. The problem with this is that the code expands into a stub function if the 64bit syscall is not defined and __ASSUME_STATFS64 is defined (which is currently the case for alpha). Since the alpha port has never had a statfs64 func, but has always had only a 32bit struct version with the kernel ABI, it is wrong to alias statfs64 to statfs. So rather than restore the stub statfs64.c file, undef __ASSUME_STATFS64 in the alpha kernel-features.h. This way the common code will do the right thing -- use the 32bit statfs syscall and translate the result in userspace from the 32bit struct to the 64bit struct. Signed-off-by: Mike Frysinger <vap...@gentoo.org> --- sysdeps/unix/sysv/linux/alpha/kernel-features.h | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h b/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h index 9c640f9..5217ca8 100644 --- a/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h +++ b/ports/sysdeps/unix/sysv/linux/alpha/kernel-features.h @@ -70,6 +70,9 @@ #undef __ASSUME_ST_INO_64_BIT +/* Alpha does not have a 64bit syscall, and its native syscall is 32bits. */ +#undef __ASSUME_STATFS64 + /* pselect/ppoll were introduced on alpha just after 2.6.22-rc1. */ #if __LINUX_KERNEL_VERSION < 0x020617 # undef __ASSUME_PSELECT -- 1.7.4.1