Browse Source

Fix issue Ubuntu and GCCCore 6.4 with intel

Pierre-Yves Barriat 6 years ago
parent
commit
7d927ec822
2 changed files with 156 additions and 0 deletions
  1. 61 0
      intel-2017b/GCCcore-6.4.0.eb
  2. 95 0
      intel-2017b/GCCcore-6.4.0_fix-sanitizer_linux.patch

+ 61 - 0
intel-2017b/GCCcore-6.4.0.eb

@@ -0,0 +1,61 @@
+easyblock = 'EB_GCC'
+
+name = 'GCCcore'
+version = '6.4.0'
+
+homepage = 'http://gcc.gnu.org/'
+
+description = """
+ The GNU Compiler Collection includes front ends for C, C++, Objective-C,
+ Fortran, Java, and Ada, as well as libraries for these languages (libstdc++,
+ libgcj,...).  [NOTE: This module does not include Objective-C, Java or Ada]
+"""
+
+toolchain = {'name': 'dummy', 'version': ''}
+
+mpfr_version = '3.1.5'
+
+source_urls = [
+    'http://ftpmirror.gnu.org/gnu/gcc/gcc-%(version)s',  # GCC auto-resolving HTTP mirror
+    'http://ftpmirror.gnu.org/gnu/gmp',  # idem for GMP
+    'http://ftpmirror.gnu.org/gnu/mpfr',  # idem for MPFR
+    'http://ftpmirror.gnu.org/gnu/mpc',  # idem for MPC
+    'ftp://gcc.gnu.org/pub/gcc/infrastructure/',  # GCC dependencies
+    'http://gcc.cybermirror.org/infrastructure/',  # HTTP mirror for GCC dependencies
+    'http://isl.gforge.inria.fr/',  # original HTTP source for ISL
+]
+sources = [
+    'gcc-%(version)s.tar.gz',
+    'gmp-6.1.2.tar.bz2',
+    'mpfr-%s.tar.bz2' % mpfr_version,
+    'mpc-1.0.3.tar.gz',
+    'isl-0.16.1.tar.bz2',
+]
+patches = [
+    ('mpfr-%s-allpatches-20170606.patch' % mpfr_version, '../mpfr-%s' % mpfr_version),
+    'GCCcore-6.2.0-fix-find-isl.patch',
+    'GCCcore-%(version)s_fix-linux-unwind-fix-ucontext.patch',
+    'GCCcore-6.4.0_fix-sanitizer_linux.patch',
+]
+checksums = [
+    '4715f02413f8a91d02d967521c084990c99ce1a671b8a450a80fbd4245f4b728',  # gcc-6.4.0.tar.gz
+    '5275bb04f4863a13516b2f39392ac5e272f5e1bb8057b18aec1c9b79d73d8fb2',  # gmp-6.1.2.tar.bz2
+    'ca498c1c7a74dd37a576f353312d1e68d490978de4395fa28f1cbd46a364e658',  # mpfr-3.1.5.tar.bz2
+    '617decc6ea09889fb08ede330917a00b16809b8db88c29c31bfbb49cbf88ecc3',  # mpc-1.0.3.tar.gz
+    '412538bb65c799ac98e17e8cfcdacbb257a57362acfaaff254b0fcae970126d2',  # isl-0.16.1.tar.bz2
+    '137108952139486755e8c1bee30314ffa9233cc05cddfd848aa85503a6fea9d7',  # mpfr-3.1.5-allpatches-20170606.patch
+    '5ad909606d17d851c6ad629b4fddb6c1621844218b8d139fed18c502a7696c68',  # GCCcore-6.2.0-fix-find-isl.patch
+    # GCCcore-6.4.0_fix-linux-unwind-fix-ucontext.patch
+    '368d027a7c0ef711188445c6b2efe1837150d9658872c6936162e43822e32ae4',
+]
+
+builddependencies = [
+    ('M4', '1.4.18'),
+    ('binutils', '2.28'),
+]
+
+languages = ['c', 'c++', 'fortran']
+
+withisl = True
+
+moduleclass = 'compiler'

+ 95 - 0
intel-2017b/GCCcore-6.4.0_fix-sanitizer_linux.patch

@@ -0,0 +1,95 @@
+The following error was encountered when building GCCcore-6.4.0:
+
+../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: In function ‘int __sanitizer::TracerThread(void*)’:
+../../../../libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc:270:22: error: aggregate ‘sigaltstack handler_stack’ has incomplete type and cannot be defined
+   struct sigaltstack handler_stack;
+
+This happened due to a glibc patch: https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=7553131847151d04d58a02300673f13d73861cbb
+
+The bug was been fixed upstream and was cherry picked in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81066 back to 6.4.0.
+Patch taken from: https://github.com/gcc-mirror/gcc/commit/72edc2c02f8b4768ad660f46a1c7e2400c0a8e06.patch
+
+From 72edc2c02f8b4768ad660f46a1c7e2400c0a8e06 Mon Sep 17 00:00:00 2001
+From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Mon, 17 Jul 2017 19:41:08 +0000
+Subject: [PATCH] 	Backported from mainline 	2017-07-14  Jakub
+ Jelinek  <jakub@redhat.com>
+
+	PR sanitizer/81066
+	* sanitizer_common/sanitizer_linux.h: Cherry-pick upstream r307969.
+	* sanitizer_common/sanitizer_linux.cc: Likewise.
+	* sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: Likewise.
+	* tsan/tsan_platform_linux.cc: Likewise.
+
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@250287 138bc75d-0d04-0410-961f-82ee72b054a4
+---
+ libsanitizer/ChangeLog                                | 11 +++++++++++
+ libsanitizer/sanitizer_common/sanitizer_linux.cc      |  3 +--
+ libsanitizer/sanitizer_common/sanitizer_linux.h       |  4 +---
+ .../sanitizer_stoptheworld_linux_libcdep.cc           |  2 +-
+ libsanitizer/tsan/tsan_platform_linux.cc              |  2 +-
+ 5 files changed, 15 insertions(+), 7 deletions(-)
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+index 806fcd5e2847..5b6f18602e7d 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc
+@@ -605,8 +605,7 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5) {
+ }
+ #endif
+ 
+-uptr internal_sigaltstack(const struct sigaltstack *ss,
+-                         struct sigaltstack *oss) {
++uptr internal_sigaltstack(const void *ss, void *oss) {
+   return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
+ }
+ 
+diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.h b/libsanitizer/sanitizer_common/sanitizer_linux.h
+index 895bfc18195c..a42df5764052 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_linux.h
++++ b/libsanitizer/sanitizer_common/sanitizer_linux.h
+@@ -19,7 +19,6 @@
+ #include "sanitizer_platform_limits_posix.h"
+ 
+ struct link_map;  // Opaque type returned by dlopen().
+-struct sigaltstack;
+ 
+ namespace __sanitizer {
+ // Dirent structure for getdents(). Note that this structure is different from
+@@ -28,8 +27,7 @@ struct linux_dirent;
+ 
+ // Syscall wrappers.
+ uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);
+-uptr internal_sigaltstack(const struct sigaltstack* ss,
+-                          struct sigaltstack* oss);
++uptr internal_sigaltstack(const void* ss, void* oss);
+ uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
+     __sanitizer_sigset_t *oldset);
+ 
+diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+index 891386dc0ba7..234e8c652c67 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc
+@@ -273,7 +273,7 @@ static int TracerThread(void* argument) {
+ 
+   // Alternate stack for signal handling.
+   InternalScopedBuffer<char> handler_stack_memory(kHandlerStackSize);
+-  struct sigaltstack handler_stack;
++  stack_t handler_stack;
+   internal_memset(&handler_stack, 0, sizeof(handler_stack));
+   handler_stack.ss_sp = handler_stack_memory.data();
+   handler_stack.ss_size = kHandlerStackSize;
+diff --git a/libsanitizer/tsan/tsan_platform_linux.cc b/libsanitizer/tsan/tsan_platform_linux.cc
+index 2ed5718a12e3..6f972ab0dd64 100644
+--- a/libsanitizer/tsan/tsan_platform_linux.cc
++++ b/libsanitizer/tsan/tsan_platform_linux.cc
+@@ -287,7 +287,7 @@ void InitializePlatform() {
+ int ExtractResolvFDs(void *state, int *fds, int nfd) {
+ #if SANITIZER_LINUX && !SANITIZER_ANDROID
+   int cnt = 0;
+-  __res_state *statp = (__res_state*)state;
++  struct __res_state *statp = (struct __res_state*)state;
+   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
+     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
+       fds[cnt++] = statp->_u._ext.nssocks[i];