mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
gnu: gcc@4.9: Fix FTBFS with Glibc >= 2.28.
* gnu/packages/commencement.scm (gcc-for-libstdc++): New variable. (libstdc++-boot0): Inherit from GCC-FOR-LIBSTDC++ instead of GCC-4.9. * gnu/packages/gcc.scm (gcc-4.9)[source](patches): Add "gcc-4.9-libsanitizer-ustat.patch". * gnu/packages/patches/gcc-4.9-libsanitizer-ustat.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it.
This commit is contained in:
parent
a446cf26d7
commit
3469a5ea47
4 changed files with 53 additions and 1 deletions
|
@ -700,6 +700,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/gcc-fix-texi2pod.patch \
|
||||
%D%/packages/patches/gcc-4.8-libsanitizer-fix.patch \
|
||||
%D%/packages/patches/gcc-4.9-libsanitizer-fix.patch \
|
||||
%D%/packages/patches/gcc-4.9-libsanitizer-ustat.patch \
|
||||
%D%/packages/patches/gcc-libsanitizer-fix.patch \
|
||||
%D%/packages/patches/gcc-libsanitizer-ustat.patch \
|
||||
%D%/packages/patches/gcc-libvtv-runpath.patch \
|
||||
|
|
|
@ -186,12 +186,25 @@ (define (remove-triplet-prefix name)
|
|||
,cf)))))
|
||||
(inputs %boot0-inputs))))
|
||||
|
||||
;; Use a "fixed" package source for this early libstdc++ variant so we can
|
||||
;; update GCC 4.9 without triggering a full rebuild.
|
||||
(define gcc-for-libstdc++
|
||||
(package
|
||||
(inherit gcc-4.9)
|
||||
(source (origin
|
||||
(inherit (package-source gcc-4.9))
|
||||
(patches (search-patches "gcc-4.9-libsanitizer-fix.patch"
|
||||
"gcc-arm-bug-71399.patch"
|
||||
"gcc-asan-missing-include.patch"
|
||||
"gcc-libvtv-runpath.patch"
|
||||
"gcc-fix-texi2pod.patch"))))))
|
||||
|
||||
(define libstdc++-boot0
|
||||
;; GCC's libcc1 is always built as a shared library (the top-level
|
||||
;; 'Makefile.def' forcefully adds --enable-shared) and thus needs to refer
|
||||
;; to libstdc++.so. We cannot build libstdc++-5.3 because it relies on
|
||||
;; C++14 features missing in some of our bootstrap compilers.
|
||||
(let ((lib (package-with-bootstrap-guile (make-libstdc++ gcc-4.9))))
|
||||
(let ((lib (package-with-bootstrap-guile (make-libstdc++ gcc-for-libstdc++))))
|
||||
(package
|
||||
(inherit lib)
|
||||
(name "libstdc++-boot0")
|
||||
|
|
|
@ -398,6 +398,7 @@ (define-public gcc-4.9
|
|||
(base32
|
||||
"14l06m7nvcvb0igkbip58x59w3nq6315k6jcz3wr9ch1rn9d44bc"))
|
||||
(patches (search-patches "gcc-4.9-libsanitizer-fix.patch"
|
||||
"gcc-4.9-libsanitizer-ustat.patch"
|
||||
"gcc-arm-bug-71399.patch"
|
||||
"gcc-asan-missing-include.patch"
|
||||
"gcc-libvtv-runpath.patch"
|
||||
|
|
37
gnu/packages/patches/gcc-4.9-libsanitizer-ustat.patch
Normal file
37
gnu/packages/patches/gcc-4.9-libsanitizer-ustat.patch
Normal file
|
@ -0,0 +1,37 @@
|
|||
Remove use of deprecated ustat interface in glibc 2.28:
|
||||
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85835
|
||||
|
||||
Adapted to GCC 4 series from this upstream patch:
|
||||
https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=260684
|
||||
|
||||
--- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
|
||||
+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
|
||||
@@ -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
|
Loading…
Reference in a new issue