summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark W. Krentel <krentel@rice.edu>2018-12-11 22:54:12 -0600
committerAdam J. Stewart <ajstewart426@gmail.com>2018-12-11 22:54:12 -0600
commitab8870fd519d524f6796ac66549212e7edb5c2ef (patch)
treec841ba98b5de39a05f493bb71ea7e9fd694b2587
parent92229e46e38ea0f7be607ca8071924dc8a85531a (diff)
downloadspack-ab8870fd519d524f6796ac66549212e7edb5c2ef.tar.gz
spack-ab8870fd519d524f6796ac66549212e7edb5c2ef.tar.bz2
spack-ab8870fd519d524f6796ac66549212e7edb5c2ef.tar.xz
spack-ab8870fd519d524f6796ac66549212e7edb5c2ef.zip
gcc: fix sys_ustat.h patch for gcc 4.8 and 4.9 (#10081)
The sys_ustat.h.patch to file sanitizer_platform_limits_posix.cc from PR #10046 does not apply cleanly to gcc 4.8 or 4.9 (or earlier). GCC up to 4.8.x either don't have libsanitizer or else don't include ustat.h in sanitizer_platform_limits_posix.cc. GCC 4.9.x includes ustat.h, but needs a slightly different patch. The patch applies to GCC 5.x up to 6.4, and 7.x up to 7.3 and also 8.1.0. The patch is already included in the tar files for gcc 6.5.0, 7.4.0 and 8.2.0.
-rw-r--r--var/spack/repos/builtin/packages/gcc/package.py3
-rw-r--r--var/spack/repos/builtin/packages/gcc/sys_ustat-4.9.patch34
2 files changed, 36 insertions, 1 deletions
diff --git a/var/spack/repos/builtin/packages/gcc/package.py b/var/spack/repos/builtin/packages/gcc/package.py
index 8a89ec7fc0..13f1af27f8 100644
--- a/var/spack/repos/builtin/packages/gcc/package.py
+++ b/var/spack/repos/builtin/packages/gcc/package.py
@@ -175,7 +175,8 @@ class Gcc(AutotoolsPackage):
# https://bugs.busybox.net/show_bug.cgi?id=10061
patch('signal.patch', when='@4.9,5.1:5.4')
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85835
- patch('sys_ustat.h.patch', when='@4:6.4,7:7.3')
+ patch('sys_ustat.h.patch', when='@5.0:6.4,7.0:7.3,8.1')
+ patch('sys_ustat-4.9.patch', when='@4.9')
build_directory = 'spack-build'
diff --git a/var/spack/repos/builtin/packages/gcc/sys_ustat-4.9.patch b/var/spack/repos/builtin/packages/gcc/sys_ustat-4.9.patch
new file mode 100644
index 0000000000..75453af338
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gcc/sys_ustat-4.9.patch
@@ -0,0 +1,34 @@
+The sys_ustat.h patch modified for gcc 4.9.x.
+
+diff -Naurb gcc-4.9.4.orig/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc gcc-4.9.4/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
+--- gcc-4.9.4.orig/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc 2013-12-19 06:54:11.000000000 -0600
++++ gcc-4.9.4/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc 2018-12-11 15:57:46.901800462 -0600
+@@ -81,7 +81,6 @@
+ #include <sys/statvfs.h>
+ #include <sys/timex.h>
+ #include <sys/user.h>
+-#include <sys/ustat.h>
+ #include <linux/cyclades.h>
+ #include <linux/if_eql.h>
+ #include <linux/if_plip.h>
+@@ -163,7 +162,19 @@
+ unsigned struct_old_utsname_sz = sizeof(struct old_utsname);
+ unsigned struct_oldold_utsname_sz = sizeof(struct oldold_utsname);
+ unsigned struct_itimerspec_sz = sizeof(struct itimerspec);
+- unsigned struct_ustat_sz = sizeof(struct ustat);
++ // Use pre-computed size of struct ustat to avoid <sys/ustat.h> 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;
+ #endif // SANITIZER_LINUX
+
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID