Danny Milosavljevic writes: > Hi Marius, > > On Thu, 24 Sep 2020 20:17:14 +0200 > Marius Bakke wrote: > >> As mentioned in that issue, and which this patch states on no uncertain >> terms, a workaround is to use -D_FILE_OFFSET_BITS=64 on 32-bit platforms. > > Yeah. The problem is how to find all those places where we need to add it, > and how to keep finding them as we maintain stuff (read: as upstream changes > stuff). > >> Won't this break _everything_ that uses readdir() without 64-bit >> offsets? > > That's the goal of that patch. Because it won't work at runtime anyway, when > run on a guix x86_64 build machine, building for ARM (which is the usual way > we build stuff for ARM). Why is this not an issue with i686 on x86_64 kernels? Or armhf on AArch64? This problem only manifests when using QEMUs syscall emulation, right? > Maybe we can find out whether dirent.h is #included for compiling for one of > the main Guix platforms (I prefer this latter solution, if possible). > > It's either that or we stop qemu transparent emulation on the build farm, > because the result isn't reliable. This time it was "caught" because of > an overabundance of caution on behalf of the glibc people. We won't be > so lucky next time. Arguably running code for foreign architectures through QEMU binfmt is something of a hack. Mandating that every package *must* be patched to support it seems user-hostile. I'm more in favor of dropping it on the build farm, or just keep fixing things on a per-package basis. A less user-hostile solution could perhaps be to (setenv "CFLAGS" "-D_FILE_OFFSET_BITS=64") on 32-bit architectures in gnu-build-system. Not sure whether that could cause any adverse effects. But again, I don't like the idea of optimizing for QEMUs user-mode emulation.