diff options
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/gcc.scm | 17 | ||||
-rw-r--r-- | gnu/packages/patches/gcc-libsanitizer-fix.patch | 113 |
3 files changed, 129 insertions, 2 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index 289bbad164..6308a81e66 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -650,6 +650,7 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-asan-missing-include.patch \ %D%/packages/patches/gcc-cross-environment-variables.patch \ %D%/packages/patches/gcc-fix-texi2pod.patch \ + %D%/packages/patches/gcc-libsanitizer-fix.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 020d2a7138..350a9bd3fb 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -444,10 +444,23 @@ Go. It also includes runtime support libraries for these languages.") (sha256 (base32 "1m0lr7938lw5d773dkvwld90hjlcq2282517d1gwvrfzmwgg42w5")) - (patches (search-patches "gcc-strmov-store-file-names.patch" + (patches (search-patches "gcc-libsanitizer-fix.patch" + "gcc-strmov-store-file-names.patch" "gcc-6-source-date-epoch-1.patch" "gcc-6-source-date-epoch-2.patch" - "gcc-5.0-libvtv-runpath.patch")))) + "gcc-5.0-libvtv-runpath.patch")) + (modules '((guix build utils))) + ;; This is required for building with glibc-2.26. + ;; This can be removed when gcc-6.5.0 is released. + ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712 + (snippet + '(for-each + (lambda (dir) + (substitute* (string-append "libgcc/config/" + dir "/linux-unwind.h") + (("struct ucontext") "ucontext_t"))) + '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2" + "pa" "sh" "tilepro" "xtensa"))))) (inputs `(("isl" ,isl) ,@(package-inputs gcc-4.7))))) diff --git a/gnu/packages/patches/gcc-libsanitizer-fix.patch b/gnu/packages/patches/gcc-libsanitizer-fix.patch new file mode 100644 index 0000000000..67aa44bed4 --- /dev/null +++ b/gnu/packages/patches/gcc-libsanitizer-fix.patch @@ -0,0 +1,113 @@ +https://gcc.gnu.org/git/?p=gcc.git;a=patch;h=8937b94d1a643fd9760714642296d034a45254a8 +https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81066 + +This patch can be removed when gcc-6.5.0 is released + +From 8937b94d1a643fd9760714642296d034a45254a8 Mon Sep 17 00:00:00 2001 +From: doko <doko@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Thu, 7 Sep 2017 07:15:24 +0000 +Subject: [PATCH] 2017-09-07 Matthias Klose <doko@ubuntu.com> + + 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-6-branch@251828 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + libsanitizer/ChangeLog | 11 +++++++++++ + libsanitizer/sanitizer_common/sanitizer_linux.cc | 3 +-- + libsanitizer/sanitizer_common/sanitizer_linux.h | 4 +--- + .../sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc | 2 +- + libsanitizer/tsan/tsan_platform_linux.cc | 2 +- + 5 files changed, 15 insertions(+), 7 deletions(-) + +diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog +index 252cd09..d988b28 100644 +--- a/libsanitizer/ChangeLog ++++ b/libsanitizer/ChangeLog +@@ -1,3 +1,14 @@ ++2017-09-07 Matthias Klose <doko@ubuntu.com> ++ ++ 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. ++ + 2017-07-04 Release Manager + + * GCC 6.4.0 released. +diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc +index 2cefa20..223d9c6 100644 +--- a/libsanitizer/sanitizer_common/sanitizer_linux.cc ++++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc +@@ -546,8 +546,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 4497702..1594058 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); + void internal_sigfillset(__sanitizer_sigset_t *set); +diff --git a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc +index c919e4f..014162af 100644 +--- a/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc ++++ b/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc +@@ -267,7 +267,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 09cec5f..908f4fe 100644 +--- a/libsanitizer/tsan/tsan_platform_linux.cc ++++ b/libsanitizer/tsan/tsan_platform_linux.cc +@@ -291,7 +291,7 @@ bool IsGlobalVar(uptr addr) { + int ExtractResolvFDs(void *state, int *fds, int nfd) { + #if SANITIZER_LINUX + 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]; +-- +2.9.3 + |