From 13b5b5d10f32fde3543e7346c776f5734e6c9a6e Mon Sep 17 00:00:00 2001 From: Josselin Poiret Date: Mon, 15 Jan 2024 23:05:37 +0100 Subject: gnu: ghc: Fix build with binutils ≥ 2.39. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ld warns about exec stack now, making some tests fail. Fix them (and also remove an unwarranted exec stack from libHSrts along with it). * gnu/packages/patches/ghc-9-StgCRunAsm-only-when-needed.patch * gnu/packages/patches/ghc-testsuite-recomp015-execstack.patch: New patches. * gnu/local.mk (dist_patch_DATA): Register them. * gnu/packages/haskell.scm (ghc-8.6, ghc-8.8, ghc-8.10, ghc-9.0, ghc-9.2, ghc-9.4): Use them. Change-Id: I8e5fc71d7394527d44ff37b1f9bd59d4971ec010 --- gnu/local.mk | 2 ++ gnu/packages/haskell.scm | 27 ++++++++++++------ .../ghc-9-StgCRunAsm-only-when-needed.patch | 33 ++++++++++++++++++++++ .../ghc-testsuite-recomp015-execstack.patch | 10 +++++++ 4 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 gnu/packages/patches/ghc-9-StgCRunAsm-only-when-needed.patch create mode 100644 gnu/packages/patches/ghc-testsuite-recomp015-execstack.patch diff --git a/gnu/local.mk b/gnu/local.mk index 3ed6baeead..6e73bdb6d9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1355,9 +1355,11 @@ dist_patch_DATA = \ %D%/packages/patches/gettext-libunicode-update.patch \ %D%/packages/patches/ghc-8.0-fall-back-to-madv_dontneed.patch \ %D%/packages/patches/ghc-9.2-cabal-support-package-path.patch \ + %D%/packages/patches/ghc-9-StgCRunAsm-only-when-needed.patch \ %D%/packages/patches/ghc-9.2-grep-warnings.patch \ %D%/packages/patches/ghc-testsuite-dlopen-pie.patch \ %D%/packages/patches/ghc-testsuite-grep-compat.patch \ + %D%/packages/patches/ghc-testsuite-recomp015-execstack.patch \ %D%/packages/patches/ghc-aeson-encodeDouble.patch \ %D%/packages/patches/ghc-basement-fix-32bit.patch \ %D%/packages/patches/ghc-bytestring-handle-ghc9.patch \ diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm index 3f807dae36..10803f5afe 100644 --- a/gnu/packages/haskell.scm +++ b/gnu/packages/haskell.scm @@ -1174,7 +1174,8 @@ interactive environment for the functional language Haskell.") "https://www.haskell.org/ghc/dist/" version "/" name "-" version "-testsuite.tar.xz")) (patches (search-patches "ghc-testsuite-dlopen-pie.patch" - "ghc-testsuite-grep-compat.patch")) + "ghc-testsuite-grep-compat.patch" + "ghc-testsuite-recomp015-execstack.patch")) (sha256 (base32 "0pw9r91g2np3i806g2f4f8z4jfdd7mx226cmdizk4swa7av1qf91")) @@ -1256,7 +1257,8 @@ interactive environment for the functional language Haskell.") "https://www.haskell.org/ghc/dist/" version "/ghc-" version "-testsuite.tar.xz")) (patches (search-patches "ghc-testsuite-dlopen-pie.patch" - "ghc-testsuite-grep-compat.patch")) + "ghc-testsuite-grep-compat.patch" + "ghc-testsuite-recomp015-execstack.patch")) (sha256 (base32 "0c55pj2820q26rikhpf636sn4mjgqsxjrl94vsywrh79dxp3k14z")) @@ -1315,7 +1317,8 @@ interactive environment for the functional language Haskell.") "https://www.haskell.org/ghc/dist/" version "/ghc-" version "-testsuite.tar.xz")) (patches (search-patches "ghc-testsuite-dlopen-pie.patch" - "ghc-testsuite-grep-compat.patch")) + "ghc-testsuite-grep-compat.patch" + "ghc-testsuite-recomp015-execstack.patch")) (sha256 (base32 "1zl25gg6bpx5601k8h3cqnns1xfc0nqgwnh8jvn2s65ra3f2g1nz")) @@ -1398,7 +1401,8 @@ interactive environment for the functional language Haskell.") "/ghc-" version "-src.tar.xz")) (sha256 (base32 - "15wii8can2r3dcl6jjmd50h2jvn7rlmn05zb74d2scj6cfwl43hl")))) + "15wii8can2r3dcl6jjmd50h2jvn7rlmn05zb74d2scj6cfwl43hl")) + (patches (search-patches "ghc-9-StgCRunAsm-only-when-needed.patch")))) (native-inputs `(;; GHC 9.0.2 must be built with GHC >= 8.8 ("ghc-bootstrap" ,ghc-8.10) @@ -1411,7 +1415,8 @@ interactive environment for the functional language Haskell.") (sha256 (base32 "1m5fzhr4gjn9ni8gxx7ag3fkbw1rspjzgv39mnfb0nkm5mw70v3s")) - (patches (search-patches "ghc-9.2-grep-warnings.patch")) + (patches (search-patches "ghc-9.2-grep-warnings.patch" + "ghc-testsuite-recomp015-execstack.patch")) (modules '((guix build utils))) (snippet ;; collections.Iterable was moved to collections.abc in Python 3.10. @@ -1444,7 +1449,8 @@ interactive environment for the functional language Haskell.") (sha256 (base32 "18b7ln4gx2vy62jpv3z5slv3zfxmxnmkgajznks15zglddwd24sz")) - (patches (search-patches "ghc-9.2-cabal-support-package-path.patch")))) + (patches (search-patches "ghc-9.2-cabal-support-package-path.patch" + "ghc-9-StgCRunAsm-only-when-needed.patch")))) (arguments (substitute-keyword-arguments (package-arguments base) ((#:phases phases '%standard-phases) @@ -1475,7 +1481,8 @@ interactive environment for the functional language Haskell.") (sha256 (base32 "0cmmwhcwv9fjzvmgjj85d354858qqbmqfzaz5160xqj4yl9zk225")) - (patches (search-patches "ghc-9.2-grep-warnings.patch")))) + (patches (search-patches "ghc-9.2-grep-warnings.patch" + "ghc-testsuite-recomp015-execstack.patch")))) ,@(filter (match-lambda (("ghc-bootstrap" . _) #f) (("ghc-testsuite" . _) #f) @@ -1565,7 +1572,8 @@ interactive environment for the functional language Haskell.") "/ghc-" version "-src.tar.xz")) (sha256 (base32 - "1qk7rlqf02s3b6m6sqqngmjq1mxnrz88h159lz6k25gddmdg5kp8")))) + "1qk7rlqf02s3b6m6sqqngmjq1mxnrz88h159lz6k25gddmdg5kp8")) + (patches (search-patches "ghc-9-StgCRunAsm-only-when-needed.patch")))) (arguments (substitute-keyword-arguments (package-arguments base) ((#:phases phases '%standard-phases) @@ -1583,7 +1591,8 @@ interactive environment for the functional language Haskell.") version "/ghc-" version "-testsuite.tar.xz")) (sha256 (base32 - "04p2lawxxg3nyv6frzhyjyh3arhqqyh5ka3alxa2pxhcd2hdcja3")))) + "04p2lawxxg3nyv6frzhyjyh3arhqqyh5ka3alxa2pxhcd2hdcja3")) + (patches (search-patches "ghc-testsuite-recomp015-execstack.patch")))) ("ghc-alex" ,ghc-alex-bootstrap-for-9.4) ("ghc-happy" ,ghc-happy-bootstrap-for-9.4) ,@(filter (match-lambda diff --git a/gnu/packages/patches/ghc-9-StgCRunAsm-only-when-needed.patch b/gnu/packages/patches/ghc-9-StgCRunAsm-only-when-needed.patch new file mode 100644 index 0000000000..3e40da4cc6 --- /dev/null +++ b/gnu/packages/patches/ghc-9-StgCRunAsm-only-when-needed.patch @@ -0,0 +1,33 @@ +From d61f742876bdf2cd32e76f7bca389106ad99a316 Mon Sep 17 00:00:00 2001 +From: Ben Gamari +Date: Tue, 3 May 2022 12:40:43 -0400 +Subject: [PATCH] rts/ghc.mk: Only build StgCRunAsm.S when it is needed + +Previously the make build system unconditionally included StgCRunAsm.S +in the link, meaning that the RTS would require an execstack +unnecessarily. + +Fixes #21478. +--- + rts/ghc.mk | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/rts/ghc.mk b/rts/ghc.mk +index 36a82f9f2c8..0e56515a569 100644 +--- a/rts/ghc.mk ++++ b/rts/ghc.mk +@@ -57,8 +57,11 @@ ifneq "$(PORTING_HOST)" "YES" + + # unregisterised builds use the mini interpreter + ifneq "$(GhcUnregisterised)" "YES" ++# use StgCRunAsm.S on ppc, ppc64, s390x, and riscv64 ++ifneq "$(findstring $(TargetArch_CPP), ppc)$(findstring $(TargetArch_CPP), ppc64)$(findstring $(TargetArch_CPP), s390x)$(findstring $(TargetArch_CPP), riscv64)" "" + rts_S_SRCS += rts/StgCRunAsm.S + endif ++endif + + # select adjustor implementation. This much match the logic in rts.cabal.in. + ifneq "$(CLEANING)" "YES" +-- +GitLab + diff --git a/gnu/packages/patches/ghc-testsuite-recomp015-execstack.patch b/gnu/packages/patches/ghc-testsuite-recomp015-execstack.patch new file mode 100644 index 0000000000..cdaf5b180d --- /dev/null +++ b/gnu/packages/patches/ghc-testsuite-recomp015-execstack.patch @@ -0,0 +1,10 @@ +--- a/testsuite/tests/driver/recomp015/Makefile 2024-01-13 16:22:42.643106725 +0100 ++++ b/testsuite/tests/driver/recomp015/Makefile 2024-01-13 16:23:18.406867917 +0100 +@@ -26,6 +26,7 @@ + # number of sections) + '$(TEST_HC)' $(TEST_HC_OPTS) Generate.hs + ./Generate > ManySections.s ++ echo '.section .note.GNU-stack,"",@progbits' > ManySections.s + echo 'main = putStrLn "Running main..."' > Main.hs + '$(TEST_HC)' $(TEST_HC_OPTS) -c ManySections.s + '$(TEST_HC)' $(TEST_HC_OPTS) --make -O Main.hs ManySections.o -- cgit v1.2.3