Sourceware Bugzilla – Bug 1864
bad struct statvfs declaration on Alpha when _FILE_OFFSET_BITS is defined
Last modified: 2012-02-15 18:16:37 UTC
GNU C Library development release version 2.3.5, by Roland McGrath et al.
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
Compiled by GNU CC version 4.0.1 20050727 (Red Hat 4.0.1-5).
Compiled on a Linux 2.4.20 system on 2005-11-01.
The following test program shows invalid behavior:
void print(struct statvfs value)
int main(int argc, char*argv)
struct statvfs st;
printf("usage: checkstat <path>\n");
falk@juist:/tmp% df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 127383 88516 32290 74% /
falk@juist:/tmp% gcc test.c && ./a.out /
falk@juist:/tmp% gcc -D_FILE_OFFSET_BITS=64 test.c && ./a.out /
The problem seems to be that ./sysdeps/unix/sysv/linux/alpha/bits/typesizes.h is
different from ./sysdeps/generic/bits/typesizes.h and defines
__FSBLKCNT_T_TYPE, __FSBLKCNT64_T_TYPE, __FSFILCNT_T_TYPE, __FSFILCNT64_T_TYPE
macros as 32 and 64 bits. I guess the glibc is build with 32 bits
(__FSBLKCNT_T_TYPE, __FSFILCNT_T_TYPE) by default.
What is the correct way to fix it? To define above macros the same way as it is
done in generic version?
It seems that in 1999 there was change that converted __FSBLKCNT_T_TYPE,
__FSFILCNT_T_TYPE from 64 bits to 32 bits for alpha. So the question is how it
should work with _FILE_OFFSET_BITS defined.
Encountered the same problem when trying to run net-snmp (daemon) on alpha
(latest gentoo stable). Worked around it by hacking into typesizes.h (yes, very
dirty). A clean fix would be really nice.
Mmm, looking at kernel source, it looks likes alpha is indeed the only 64bit arch that has a 32bit stat/statfs interface (probably because that's the oldest one). And although work has been done to expose a 64bit interface to userland for stat, it wasn't for statfs, and applications have been compiled with a dual 32/64bit interface. Could you try the attached patch?
Created attachment 2903 [details]
make alpha use a dual 32/64bit interface for *stat*fs*
Alpha is not in the main tree anymore since we have no maintainer. Somebody has
to step up and volunteer to be the maintainer of the alpha ports tree or nothing
This has been fixed since
Author: Richard Henderson <firstname.lastname@example.org>
Date: Wed May 5 08:12:11 2010 -0700
alpha: Do the 32/64-bit split on statfs routines.