~ruther/guix-local

c5d8e688dc79f8ea2094adf04d2274332cf5cb6c — Ludovic Courtès 10 years ago 140b4bc
gnu: glibc: Patch 'openat64', which was buggy on 32-bit platforms.

* gnu/packages/patches/glibc-o-largefile.patch: New file.
* gnu/packages/base.scm (glibc)[source]: Add it to 'patches'.
* gnu-system.am (dist_patch_DATA): Add it.
3 files changed, 29 insertions(+), 1 deletions(-)

M gnu-system.am
M gnu/packages/base.scm
A gnu/packages/patches/glibc-o-largefile.patch
M gnu-system.am => gnu-system.am +1 -0
@@ 473,6 473,7 @@ dist_patch_DATA =						\
  gnu/packages/patches/glibc-bootstrap-system.patch		\
  gnu/packages/patches/glibc-ldd-x86_64.patch			\
  gnu/packages/patches/glibc-locales.patch			\
  gnu/packages/patches/glibc-o-largefile.patch			\
  gnu/packages/patches/gmp-arm-asm-nothumb.patch		\
  gnu/packages/patches/gnutls-doc-fix.patch			\
  gnu/packages/patches/gobject-introspection-absolute-shlib-path.patch \

M gnu/packages/base.scm => gnu/packages/base.scm +3 -1
@@ 471,7 471,9 @@ store.")
                (("use_ldconfig=yes")
                 "use_ldconfig=no")))
            (modules '((guix build utils)))
            (patches (list (search-patch "glibc-ldd-x86_64.patch")))))
            (patches (map search-patch
                          '("glibc-ldd-x86_64.patch"
                            "glibc-o-largefile.patch")))))
   (build-system gnu-build-system)

   ;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc

A gnu/packages/patches/glibc-o-largefile.patch => gnu/packages/patches/glibc-o-largefile.patch +25 -0
@@ 0,0 1,25 @@
This fixes <https://sourceware.org/bugzilla/show_bug.cgi?id=18781>
whereby, on 32-bit platforms, libc 2.22 would fail to pass O_LARGEFILE
to 'openat'.  This was caught by 'tests/sparse03.at' in the tar
test suite.

commit eb32b0d40308166c4d8f6330cc2958cb1e545075
Author: Andreas Schwab <schwab@suse.de>
Date:   Mon Aug 10 14:12:47 2015 +0200

    Readd O_LARGEFILE flag for openat64 (bug 18781)

--- a/sysdeps/unix/sysv/linux/openat.c
+++ b/sysdeps/unix/sysv/linux/openat.c
@@ -68,6 +68,11 @@ __OPENAT (int fd, const char *file, int oflag, ...)
       va_end (arg);
     }
 
+  /* We have to add the O_LARGEFILE flag for openat64.  */
+#ifdef MORE_OFLAGS
+  oflag |= MORE_OFLAGS;
+#endif
+
   return SYSCALL_CANCEL (openat, fd, file, oflag, mode);
 }
 libc_hidden_def (__OPENAT)