From: "Ludovic Courtès" <ludo@gnu.org>
To: 46330@debbugs.gnu.org
Subject: bug#46330: Guile-provided GMP allocators interfere with GnuTLS
Date: Sun, 07 Feb 2021 22:24:52 +0100 [thread overview]
Message-ID: <87sg67y3iz.fsf@gnu.org> (raw)
In-Reply-To: <87v9b61md4.fsf@inria.fr> ("Ludovic Courtès"'s message of "Fri, 05 Feb 2021 17:59:51 +0100")
[-- Attachment #1: Type: text/plain, Size: 927 bytes --]
Ludovic Courtès <ludo@gnu.org> skribis:
> In a nutshell, Guile installs its own GMP memory allocation routines
> (when ‘scm_install_gmp_memory_functions’ is true, which is the default)
> so that GMP allocates via libgc. GnuTLS uses Nettle, which uses GMP, so
> Nettle too ends up allocating via libgc; however, since pointers to that
> memory are not scanned by libgc, they end up being reclaimed early.
For the record, one option I considered is to link GnuTLS against
Nettle-with-mini-GMP, whereby Nettle uses a bundled mini-GMP instead of
mini-GMP.
Another option is to build GnuTLS --with-nettle-mini, where GnuTLS links
against a bundled mini-Nettle, instead linked against a bundled mini-GMP (!).
Currently both options lead to build failures in GnuTLS:
https://lists.gnutls.org/pipermail/gnutls-help/2021-February/004680.html
(Package definitions attached for posterity.)
Ludo’.
[-- Attachment #2: Type: text/x-patch, Size: 3156 bytes --]
diff --git a/gnu/packages/nettle.scm b/gnu/packages/nettle.scm
index f5e7188ff0..875a858946 100644
--- a/gnu/packages/nettle.scm
+++ b/gnu/packages/nettle.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
;;;
@@ -89,3 +89,12 @@ themselves.")
;; Build "fat" binaries where the right implementation is chosen
;; at run time based on CPU features (starting from 3.1.)
`(cons "--enable-fat" ,flags))))))
+
+(define-public nettle/mini-gmp
+ (package/inherit nettle
+ (name "nettle-mini-gmp")
+ (arguments
+ (substitute-keyword-arguments (package-arguments nettle)
+ ((#:configure-flags flags)
+ `(cons "--enable-mini-gmp" ,flags))))
+ (propagated-inputs '())))
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 775e915534..fe2ec88a9e 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
@@ -165,6 +165,7 @@ living in the same process.")
(package
(name "gnutls")
(version "3.6.15")
+ (replacement gnutls/mini-nettle)
(source (origin
(method url-fetch)
;; Note: Releases are no longer on ftp.gnu.org since the
@@ -256,6 +257,31 @@ required structures.")
(properties '((ftp-server . "ftp.gnutls.org")
(ftp-directory . "/gcrypt/gnutls")))))
+;; (define-public gnutls/nettle-mini-gmp
+;; (package/inherit gnutls
+;; (arguments
+;; (substitute-keyword-arguments (package-arguments gnutls)
+;; ((#:phases phases '%standard-phases)
+;; `(modify-phases ,phases
+;; (add-before 'configure 'dont-link-against-libgmp
+;; (lambda _
+;; (substitute* "configure"
+;; (("GMP_LIBS=\"-lgmp\"")
+;; "GMP_LIBS=\"\""))))))))
+;; (propagated-inputs
+;; `(("nettle" ,nettle/mini-gmp)
+;; ,@(alist-delete "nettle" (package-propagated-inputs gnutls))))))
+
+(define-public gnutls/mini-nettle
+ (package/inherit gnutls
+ (arguments
+ (substitute-keyword-arguments (package-arguments gnutls)
+ ((#:configure-flags flags ''())
+ `(cons "--with-nettle-mini" ,flags))))
+ ;; (propagated-inputs
+ ;; (alist-delete "nettle" (package-propagated-inputs gnutls)))
+ ))
+
(define-public gnutls/guile-2.0
;; GnuTLS for Guile 2.0.
(package/inherit gnutls
prev parent reply other threads:[~2021-02-07 21:26 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-05 16:59 bug#46330: Guile-provided GMP allocators interfere with GnuTLS Ludovic Courtès
2021-02-05 17:13 ` Ludovic Courtès
2021-02-07 22:47 ` Ludovic Courtès
2021-05-23 14:47 ` Marius Bakke
2021-05-25 20:19 ` Ludovic Courtès
2021-02-07 21:24 ` Ludovic Courtès [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sg67y3iz.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=46330@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.