From 1aef659e86242020c7ec813e9a1f6ad35431de9d Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Wed, 1 Aug 2018 23:19:28 +0200 Subject: [PATCH] gnu: gcc: Fix build with glibc >= 2.28. * gnu/packages/patches/gcc-libsanitizer-ustat.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/gcc.scm (gcc-5)[source](patches): Add it. --- gnu/local.mk | 1 + gnu/packages/gcc.scm | 1 + .../patches/gcc-libsanitizer-ustat.patch | 41 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 gnu/packages/patches/gcc-libsanitizer-ustat.patch diff --git a/gnu/local.mk b/gnu/local.mk index d1228b9261..9c79e843a8 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -690,6 +690,7 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-fix-texi2pod.patch \ %D%/packages/patches/gcc-4.9-libsanitizer-fix.patch \ %D%/packages/patches/gcc-libsanitizer-fix.patch \ + %D%/packages/patches/gcc-libsanitizer-ustat.patch \ %D%/packages/patches/gcc-libvtv-runpath.patch \ %D%/packages/patches/gcc-strmov-store-file-names.patch \ %D%/packages/patches/gcc-4-compile-with-gcc-5.patch \ diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index 46b70ce497..2e2135ab51 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -431,6 +431,7 @@ Go. It also includes runtime support libraries for these languages.") (base32 "11zd1hgzkli3b2v70qsm2hyqppngd4616qc96lmm9zl2kl9yl32k")) (patches (search-patches "gcc-arm-bug-71399.patch" + "gcc-libsanitizer-ustat.patch" "gcc-strmov-store-file-names.patch" "gcc-5.0-libvtv-runpath.patch" "gcc-5-source-date-epoch-1.patch" diff --git a/gnu/packages/patches/gcc-libsanitizer-ustat.patch b/gnu/packages/patches/gcc-libsanitizer-ustat.patch new file mode 100644 index 0000000000..a4e0c6affa --- /dev/null +++ b/gnu/packages/patches/gcc-libsanitizer-ustat.patch @@ -0,0 +1,41 @@ +Remove use of deprecated ustat interface in glibc 2.28: + +https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85835 + +Taken from upstream: + +https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=260684 + +diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc +index 858bb2184505..de18e56d11cf 100644 +--- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc ++++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc +@@ -157,7 +157,6 @@ typedef struct user_fpregs elf_fpregset_t; + # include + #endif + #include +-#include + #include + #include + #include +@@ -250,7 +249,19 @@ namespace __sanitizer { + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD + + #if SANITIZER_LINUX && !SANITIZER_ANDROID +- unsigned struct_ustat_sz = sizeof(struct ustat); ++ // Use pre-computed size of struct ustat to avoid which ++ // has been removed from glibc 2.28. ++#if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \ ++ || defined(__powerpc64__) || defined(__arch64__) || defined(__sparcv9) \ ++ || defined(__x86_64__) ++#define SIZEOF_STRUCT_USTAT 32 ++#elif defined(__arm__) || defined(__i386__) || defined(__mips__) \ ++ || defined(__powerpc__) || defined(__s390__) ++#define SIZEOF_STRUCT_USTAT 20 ++#else ++#error Unknown size of struct ustat ++#endif ++ unsigned struct_ustat_sz = SIZEOF_STRUCT_USTAT; + unsigned struct_rlimit64_sz = sizeof(struct rlimit64); + unsigned struct_statvfs64_sz = sizeof(struct statvfs64); + #endif // SANITIZER_LINUX && !SANITIZER_ANDROID