summaryrefslogtreecommitdiff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/arpack-ng-propagate-rng-state.patch523
-rw-r--r--gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch110
-rw-r--r--gnu/packages/patches/bind-re-add-attr-constructor-priority.patch57
-rw-r--r--gnu/packages/patches/coq-fix-envvars.patch53
-rw-r--r--gnu/packages/patches/git-filter-repo-generate-doc.patch88
-rw-r--r--gnu/packages/patches/go-github-com-skip2-go-qrcode-fix-tests.patch37
-rw-r--r--gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch78
-rw-r--r--gnu/packages/patches/i3status-rust-enable-unstable-features.patch20
-rw-r--r--gnu/packages/patches/libgeotiff-fix-tests-on-i386.patch35
-rw-r--r--gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.0.patch51
-rw-r--r--gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.1.patch40
-rw-r--r--gnu/packages/patches/librime-fix-build-with-gcc10.patch41
-rw-r--r--gnu/packages/patches/libtommath-fix-linkage.patch55
-rw-r--r--gnu/packages/patches/libtommath-integer-overflow.patch140
-rw-r--r--gnu/packages/patches/maturin-no-cross-compile.patch20
-rw-r--r--gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch52
-rw-r--r--gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch133
-rw-r--r--gnu/packages/patches/ocaml-dose3-add-unix-dependency.patch25
-rw-r--r--gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch9
-rw-r--r--gnu/packages/patches/podman-program-lookup.patch120
-rw-r--r--gnu/packages/patches/python-telingo-fix-comparison.patch19
-rw-r--r--gnu/packages/patches/r-sgloptim.patch53
-rw-r--r--gnu/packages/patches/rdkit-unbundle-external-dependencies.patch208
-rw-r--r--gnu/packages/patches/restartd-update-robust.patch295
-rw-r--r--gnu/packages/patches/rust-cargo-edit-remove-ureq.patch33
-rw-r--r--gnu/packages/patches/rust-ring-0.16-missing-files.patch2293
-rw-r--r--gnu/packages/patches/rust-ring-0.16-test-files.patch54
-rw-r--r--gnu/packages/patches/rust-ring-0.17-ring-core.patch496
-rw-r--r--gnu/packages/patches/rust-rspec-1-remove-clippy.patch16
-rw-r--r--gnu/packages/patches/rust-trash-2-update-windows.patch132
-rw-r--r--gnu/packages/patches/rustc-1.54.0-src.patch237
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.03.0.patch52
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.04.0.patch291
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.09.0.patch20
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch129
-rw-r--r--gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch28
-rw-r--r--gnu/packages/patches/sdcc-disable-non-free-code.patch244
-rw-r--r--gnu/packages/patches/spdlog-fix-tests.patch26
-rw-r--r--gnu/packages/patches/tinydir-fix-cbehave-test.patch16
-rw-r--r--gnu/packages/patches/wlroots-hwdata-fallback.patch46
40 files changed, 2025 insertions, 4350 deletions
diff --git a/gnu/packages/patches/arpack-ng-propagate-rng-state.patch b/gnu/packages/patches/arpack-ng-propagate-rng-state.patch
deleted file mode 100644
index 4466bb8e50..0000000000
--- a/gnu/packages/patches/arpack-ng-propagate-rng-state.patch
+++ /dev/null
@@ -1,523 +0,0 @@
-Fix a bug that manifests while running the test suite of 'python-igraph':
-
- https://github.com/opencollab/arpack-ng/issues/401
- https://github.com/opencollab/arpack-ng/pull/414
-
-From d885b7be4ecdc9c1496f2d6f256f6c0d34962459 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Szabolcs=20Horva=CC=81t?= <szhorvat@gmail.com>
-Date: Sun, 9 Apr 2023 16:36:35 +0200
-Subject: [PATCH] fix: ensure that LAPACK RNG state is propagated
-
- - fixes #401, #410, #411
- - restores 'inits' variable removed in ce2e69a849da1d10dad5d6d3ec4db6120b3ecf50, ensuring that the RNG state is propagated
- - reverts e0d67054f573da351f12a226f7c7cc65a690ef3d to ensure that seed is different on each parallel thread
- - updates seed initialization of parallel pdgetv0/psgetv0 so that they match that of pzgetv0/pcgetv0
----
- PARPACK/SRC/MPI/pcgetv0.f | 48 +++++++++++++++++++++++----------------
- PARPACK/SRC/MPI/pdgetv0.f | 40 ++++++++++++++++++++++++++------
- PARPACK/SRC/MPI/psgetv0.f | 43 ++++++++++++++++++++++++++---------
- PARPACK/SRC/MPI/pzgetv0.f | 48 +++++++++++++++++++++++----------------
- SRC/cgetv0.f | 21 ++++++++++++-----
- SRC/dgetv0.f | 21 ++++++++++++-----
- SRC/sgetv0.f | 21 ++++++++++++-----
- SRC/zgetv0.f | 21 ++++++++++++-----
- 8 files changed, 183 insertions(+), 80 deletions(-)
-
-diff --git a/PARPACK/SRC/MPI/pcgetv0.f b/PARPACK/SRC/MPI/pcgetv0.f
-index 59e3d1658..24fe8a0f1 100644
---- a/PARPACK/SRC/MPI/pcgetv0.f
-+++ b/PARPACK/SRC/MPI/pcgetv0.f
-@@ -176,13 +176,13 @@ subroutine pcgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj, myid, igen
- Real
- & rnorm0
- Complex
- & cnorm, cnorm2
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- Complex
- & cnorm_buf, buf2(1)
-@@ -203,6 +203,12 @@ subroutine pcgetv0
- & ccdotc
- external ccdotc, pscnorm2, slapy2
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -213,26 +219,30 @@ subroutine pcgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-+ if (inits) then
- c
--c %-----------------------------------%
--c | Generate a seed on each processor |
--c | using process id (myid). |
--c | Note: the seed must be between 1 |
--c | and 4095. iseed(4) must be odd. |
--c %-----------------------------------%
-+c %-----------------------------------%
-+c | Generate a seed on each processor |
-+c | using process id (myid). |
-+c | Note: the seed must be between 1 |
-+c | and 4095. iseed(4) must be odd. |
-+c %-----------------------------------%
- c
-- call MPI_COMM_RANK(comm, myid, ierr)
-- igen = 1000 + 2*myid + 1
-- if (igen .gt. 4095) then
-- write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-- end if
-+ call MPI_COMM_RANK(comm, myid, ierr)
-+ igen = 1000 + 2*myid + 1
-+ if (igen .gt. 4095) then
-+ write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-+ end if
-+c
-+ iseed(1) = igen/1000
-+ igen = mod(igen,1000)
-+ iseed(2) = igen/100
-+ igen = mod(igen,100)
-+ iseed(3) = igen/10
-+ iseed(4) = mod(igen,10)
- c
-- iseed(1) = igen/1000
-- igen = mod(igen,1000)
-- iseed(2) = igen/100
-- igen = mod(igen,100)
-- iseed(3) = igen/10
-- iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/PARPACK/SRC/MPI/pdgetv0.f b/PARPACK/SRC/MPI/pdgetv0.f
-index 0f348b820..5a1956997 100644
---- a/PARPACK/SRC/MPI/pdgetv0.f
-+++ b/PARPACK/SRC/MPI/pdgetv0.f
-@@ -177,11 +177,11 @@ subroutine pdgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-- integer idist, iseed(4), iter, msglvl, jj
-+ logical first, inits, orth
-+ integer idist, iseed(4), iter, msglvl, jj, myid, igen
- Double precision
- & rnorm0, buf2(1)
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- Double precision
- & rnorm_buf
-@@ -206,6 +206,12 @@ subroutine pdgetv0
- c
- intrinsic abs, sqrt
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -216,10 +222,30 @@ subroutine pdgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+c
-+c %-----------------------------------%
-+c | Generate a seed on each processor |
-+c | using process id (myid). |
-+c | Note: the seed must be between 1 |
-+c | and 4095. iseed(4) must be odd. |
-+c %-----------------------------------%
-+c
-+ call MPI_COMM_RANK(comm, myid, ierr)
-+ igen = 1000 + 2*myid + 1
-+ if (igen .gt. 4095) then
-+ write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-+ end if
-+c
-+ iseed(1) = igen/1000
-+ igen = mod(igen,1000)
-+ iseed(2) = igen/100
-+ igen = mod(igen,100)
-+ iseed(3) = igen/10
-+ iseed(4) = mod(igen,10)
-+c
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/PARPACK/SRC/MPI/psgetv0.f b/PARPACK/SRC/MPI/psgetv0.f
-index d79a513b2..078e4fa8c 100644
---- a/PARPACK/SRC/MPI/psgetv0.f
-+++ b/PARPACK/SRC/MPI/psgetv0.f
-@@ -177,11 +177,11 @@ subroutine psgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-- integer idist, iseed(4), iter, msglvl, jj
-+ logical first, inits, orth
-+ integer idist, iseed(4), iter, msglvl, jj, myid, igen
- Real
- & rnorm0
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- Real
- & rnorm_buf
-@@ -206,20 +206,41 @@ subroutine psgetv0
- c
- intrinsic abs, sqrt
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
- c
- c
--c %-----------------------------------%
--c | Initialize the seed of the LAPACK |
--c | random number generator |
--c %-----------------------------------%
-+ if (inits) then
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+c %-----------------------------------%
-+c | Generate a seed on each processor |
-+c | using process id (myid). |
-+c | Note: the seed must be between 1 |
-+c | and 4095. iseed(4) must be odd. |
-+c %-----------------------------------%
-+c
-+ call MPI_COMM_RANK(comm, myid, ierr)
-+ igen = 1000 + 2*myid + 1
-+ if (igen .gt. 4095) then
-+ write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-+ end if
-+c
-+ iseed(1) = igen/1000
-+ igen = mod(igen,1000)
-+ iseed(2) = igen/100
-+ igen = mod(igen,100)
-+ iseed(3) = igen/10
-+ iseed(4) = mod(igen,10)
-+c
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/PARPACK/SRC/MPI/pzgetv0.f b/PARPACK/SRC/MPI/pzgetv0.f
-index 731fb319f..94fb705f3 100644
---- a/PARPACK/SRC/MPI/pzgetv0.f
-+++ b/PARPACK/SRC/MPI/pzgetv0.f
-@@ -176,13 +176,13 @@ subroutine pzgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj, myid, igen
- Double precision
- & rnorm0
- Complex*16
- & cnorm, cnorm2
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- Complex*16
- & cnorm_buf, buf2(1)
-@@ -203,6 +203,12 @@ subroutine pzgetv0
- & zzdotc
- external zzdotc , pdznorm2 , dlapy2
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -213,26 +219,30 @@ subroutine pzgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-+ if (inits) then
- c
--c %-----------------------------------%
--c | Generate a seed on each processor |
--c | using process id (myid). |
--c | Note: the seed must be between 1 |
--c | and 4095. iseed(4) must be odd. |
--c %-----------------------------------%
-+c %-----------------------------------%
-+c | Generate a seed on each processor |
-+c | using process id (myid). |
-+c | Note: the seed must be between 1 |
-+c | and 4095. iseed(4) must be odd. |
-+c %-----------------------------------%
- c
-- call MPI_COMM_RANK(comm, myid, ierr)
-- igen = 1000 + 2*myid + 1
-- if (igen .gt. 4095) then
-- write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-- end if
-+ call MPI_COMM_RANK(comm, myid, ierr)
-+ igen = 1000 + 2*myid + 1
-+ if (igen .gt. 4095) then
-+ write(0,*) 'Error in p_getv0: seed exceeds 4095!'
-+ end if
-+c
-+ iseed(1) = igen/1000
-+ igen = mod(igen,1000)
-+ iseed(2) = igen/100
-+ igen = mod(igen,100)
-+ iseed(3) = igen/10
-+ iseed(4) = mod(igen,10)
- c
-- iseed(1) = igen/1000
-- igen = mod(igen,1000)
-- iseed(2) = igen/100
-- igen = mod(igen,100)
-- iseed(3) = igen/10
-- iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/SRC/cgetv0.f b/SRC/cgetv0.f
-index b49e66708..c231eadcb 100644
---- a/SRC/cgetv0.f
-+++ b/SRC/cgetv0.f
-@@ -156,13 +156,13 @@ subroutine cgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj
- Real
- & rnorm0
- Complex
- & cnorm
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- c %----------------------%
- c | External Subroutines |
-@@ -180,6 +180,12 @@ subroutine cgetv0
- & ccdotc
- external ccdotc, scnrm2, slapy2
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -190,10 +196,13 @@ subroutine cgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+ iseed(1) = 1
-+ iseed(2) = 3
-+ iseed(3) = 5
-+ iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/SRC/dgetv0.f b/SRC/dgetv0.f
-index 8be4fa26d..1d6dc01bd 100644
---- a/SRC/dgetv0.f
-+++ b/SRC/dgetv0.f
-@@ -157,11 +157,11 @@ subroutine dgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj
- Double precision
- & rnorm0
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- c %----------------------%
- c | External Subroutines |
-@@ -183,6 +183,12 @@ subroutine dgetv0
- c
- intrinsic abs, sqrt
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -193,10 +199,13 @@ subroutine dgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+ iseed(1) = 1
-+ iseed(2) = 3
-+ iseed(3) = 5
-+ iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/SRC/sgetv0.f b/SRC/sgetv0.f
-index 26130a014..d861b2d6d 100644
---- a/SRC/sgetv0.f
-+++ b/SRC/sgetv0.f
-@@ -157,11 +157,11 @@ subroutine sgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj
- Real
- & rnorm0
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- c %----------------------%
- c | External Subroutines |
-@@ -183,6 +183,12 @@ subroutine sgetv0
- c
- intrinsic abs, sqrt
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -193,10 +199,13 @@ subroutine sgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+ iseed(1) = 1
-+ iseed(2) = 3
-+ iseed(3) = 5
-+ iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
-diff --git a/SRC/zgetv0.f b/SRC/zgetv0.f
-index cc13c3cfb..1fbd50851 100644
---- a/SRC/zgetv0.f
-+++ b/SRC/zgetv0.f
-@@ -156,13 +156,13 @@ subroutine zgetv0
- c | Local Scalars & Arrays |
- c %------------------------%
- c
-- logical first, orth
-+ logical first, inits, orth
- integer idist, iseed(4), iter, msglvl, jj
- Double precision
- & rnorm0
- Complex*16
- & cnorm
-- save first, iseed, iter, msglvl, orth, rnorm0
-+ save first, iseed, inits, iter, msglvl, orth, rnorm0
- c
- c %----------------------%
- c | External Subroutines |
-@@ -180,6 +180,12 @@ subroutine zgetv0
- & zzdotc
- external zzdotc, dznrm2, dlapy2
- c
-+c %-----------------%
-+c | Data Statements |
-+c %-----------------%
-+c
-+ data inits /.true./
-+c
- c %-----------------------%
- c | Executable Statements |
- c %-----------------------%
-@@ -190,10 +196,13 @@ subroutine zgetv0
- c | random number generator |
- c %-----------------------------------%
- c
-- iseed(1) = 1
-- iseed(2) = 3
-- iseed(3) = 5
-- iseed(4) = 7
-+ if (inits) then
-+ iseed(1) = 1
-+ iseed(2) = 3
-+ iseed(3) = 5
-+ iseed(4) = 7
-+ inits = .false.
-+ end if
- c
- if (ido .eq. 0) then
- c
diff --git a/gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch b/gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch
new file mode 100644
index 0000000000..c93a9869ed
--- /dev/null
+++ b/gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch
@@ -0,0 +1,110 @@
+Patches taken from the rdkit fork at this commit (there version
+AvalonToolkit_2.0.6-pre.2):
+https://github.com/rdkit/ava-formake/commit/d05bee0382b8f4696b2b4b05b0038fb7d559520a
+
+diff -ur a/src/main/C/common/reaccsio.c b/src/main/C/common/reaccsio.c
+--- a/src/main/C/common/reaccsio.c
++++ b/src/main/C/common/reaccsio.c
+@@ -322,34 +322,49 @@
+ fprintf(fp,"\n");
+ }
+
++#define MAX_BONDLINE_FIELDS 7
++#define BONDLINE_FIELD_LEN 3
++
+ int ReadREACCSBond(Fortran_FILE *fp, struct reaccs_bond_t *bp)
+ {
+- int nitems, i;
+- char buffer[MAX_BUFFER+1];
++ int nitems, i, j, k;
++ int bond_line_len, n_chars, pos;
++ int *ptrarray[MAX_BONDLINE_FIELDS];
++ char c;
++ char buffer[BONDLINE_FIELD_LEN+1];
+
+ if (fp->status != FORTRAN_NORMAL) return(fp->status);
+
+- strncpy(buffer,fp->buffer,MAX_BUFFER);
+- /* zero pad only atom numbers! */
+- for (i=0; i<6; i++) if (buffer[i] == ' ') buffer[i] = '0';
+-
+ bp->stereo_symbol = 0;
+ bp->dummy = 0;
+ bp->topography = 0;
+ bp->reaction_mark = NONE;
+- // make sure spaces are interpreted the Fortran-way
+- for (i=9; i<strlen(buffer) && i<21; i+=3)
+- {
+- if ((i+1)<strlen(buffer) && buffer[i+1]==' ') buffer[i+1] = '0';
+- if ((i+2)<strlen(buffer) && buffer[i+2]==' ') buffer[i+2] = '0';
++ ptrarray[0] = &bp->atoms[0];
++ ptrarray[1] = &bp->atoms[1];
++ ptrarray[2] = &bp->bond_type;
++ ptrarray[3] = &bp->stereo_symbol;
++ ptrarray[4] = &bp->dummy;
++ ptrarray[5] = &bp->topography;
++ ptrarray[6] = &bp->reaction_mark;
++ bond_line_len = strlen(fp->buffer);
++ nitems = bond_line_len ? (bond_line_len - 1) / BONDLINE_FIELD_LEN + 1 : 0;
++ if (nitems > MAX_BONDLINE_FIELDS)
++ nitems = MAX_BONDLINE_FIELDS;
++ for (i = 0; i < nitems; ++i)
++ {
++ pos = i * BONDLINE_FIELD_LEN;
++ memset(buffer, 0, BONDLINE_FIELD_LEN + 1);
++ n_chars = bond_line_len - pos;
++ if (n_chars > BONDLINE_FIELD_LEN)
++ n_chars = BONDLINE_FIELD_LEN;
++ for (j = 0, k = 0; j < n_chars; ++j)
++ {
++ c = fp->buffer[pos + j];
++ if (c != ' ')
++ buffer[k++] = c;
++ }
++ sscanf(buffer, "%3d", ptrarray[i]);
+ }
+- nitems = sscanf(buffer,
+- "%3d%3d%3d%3d%3d%3d%3d",
+- &bp->atoms[0], &bp->atoms[1],
+- &bp->bond_type, &bp->stereo_symbol,
+- &bp->dummy,
+- &bp->topography, &bp->reaction_mark);
+-
+ if (nitems >= 3)
+ {
+ GetBuffer(fp);
+@@ -1582,6 +1597,8 @@
+
+ PrintREACCSMolecule(fp, mp,"");
+
++ fputc('\0', fp);
++ fflush(fp);
+ rewind(fp);
+
+ MolStr = _ReadFile(fp);
+diff -ur a/src/main/C/programs/struchk.c b/src/main/C/programs/struchk.c
+--- a/src/main/C/programs/struchk.c
++++ b/src/main/C/programs/struchk.c
+@@ -1581,6 +1581,22 @@
+
+ if ((result & SIZE_CHECK_FAILED) == 0)
+ {
++ for (i = 0; i < mp->n_bonds; ++i) {
++ for (j = 0; j < 2; ++j) {
++ if (mp->bond_array[i].atoms[j] < 1 || mp->bond_array[i].atoms[j] > mp->n_atoms)
++ {
++ snprintf(msg_buffer, MAXMSG,
++ "%10s : illegal atom # (%d, max allowed is %d) in bond %d",
++ mp->name, mp->bond_array[i].atoms[j], mp->n_atoms, i + 1);
++ AddMsgToList(msg_buffer);
++ result |= SIZE_CHECK_FAILED;
++ }
++ }
++ }
++ }
++
++ if ((result & SIZE_CHECK_FAILED) == 0)
++ {
+ if (convert_atom_texts)
+ {
+ tmp = ConvertAtomAliases(mp);
diff --git a/gnu/packages/patches/bind-re-add-attr-constructor-priority.patch b/gnu/packages/patches/bind-re-add-attr-constructor-priority.patch
deleted file mode 100644
index 33e4f183f6..0000000000
--- a/gnu/packages/patches/bind-re-add-attr-constructor-priority.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 6361de07a35f2e9dc1d7201d6b26ca31da93ee69 Mon Sep 17 00:00:00 2001
-From: Tobias Geerinckx-Rice <me@tobias.gr>
-Date: Thu, 9 Dec 2021 01:07:32 +0100
-Subject: [PATCH] Revert "Remove priority from attribute
- constructor/destructor"
-
-This reverts commit 0340df46ec5897636dd071bc8b5c4272cfa7d7be. It works
-around an irrelevant operating system and breaks compilation on Guix:
-
-mem.c:873: fatal error: RUNTIME_CHECK(((pthread_mutex_lock(((&contextslock))) == 0) ? 0 : 34) == 0) failed
-/gnu/store/…-bash-minimal-5.0.16/bin/bash: line 1: 13768 Aborted ./${fuzzer}
-
-Let's simply revert it for now---there are securities at stake!
----
- lib/isc/include/isc/util.h | 8 ++++----
- lib/isc/lib.c | 4 ++--
- 2 files changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/lib/isc/include/isc/util.h b/lib/isc/include/isc/util.h
-index f0f7f85fa4..64c26587ac 100644
---- a/lib/isc/include/isc/util.h
-+++ b/lib/isc/include/isc/util.h
-@@ -49,11 +49,11 @@
- #endif /* __GNUC__ */
-
- #if HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR && HAVE_FUNC_ATTRIBUTE_DESTRUCTOR
--#define ISC_CONSTRUCTOR __attribute__((constructor))
--#define ISC_DESTRUCTOR __attribute__((destructor))
-+#define ISC_CONSTRUCTOR(priority) __attribute__((constructor(priority)))
-+#define ISC_DESTRUCTOR(priority) __attribute__((destructor(priority)))
- #elif WIN32
--#define ISC_CONSTRUCTOR
--#define ISC_DESTRUCTOR
-+#define ISC_CONSTRUCTOR(priority)
-+#define ISC_DESTRUCTOR(priority)
- #endif
-
- /*%
-diff --git a/lib/isc/lib.c b/lib/isc/lib.c
-index f3576b2659..2a167fec21 100644
---- a/lib/isc/lib.c
-+++ b/lib/isc/lib.c
-@@ -35,9 +35,9 @@ isc_lib_register(void) {
- }
-
- void
--isc__initialize(void) ISC_CONSTRUCTOR;
-+isc__initialize(void) ISC_CONSTRUCTOR(101);
- void
--isc__shutdown(void) ISC_DESTRUCTOR;
-+isc__shutdown(void) ISC_DESTRUCTOR(101);
-
- void
- isc__initialize(void) {
---
-2.34.0
-
diff --git a/gnu/packages/patches/coq-fix-envvars.patch b/gnu/packages/patches/coq-fix-envvars.patch
deleted file mode 100644
index 6c48224c64..0000000000
--- a/gnu/packages/patches/coq-fix-envvars.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 0e76cda958a4d3e4bcbb96e171c26b6b3478c6c2 Mon Sep 17 00:00:00 2001
-From: Julien Lepiller <julien@lepiller.eu>
-Date: Thu, 10 Feb 2022 16:44:10 +0100
-Subject: [PATCH] Fix environment variable usage.
-
----
- boot/env.ml | 26 +++++++++++++++++++-------
- 1 file changed, 19 insertions(+), 7 deletions(-)
-
-diff --git a/boot/env.ml b/boot/env.ml
-index e8521e7..d834a3a 100644
---- a/boot/env.ml
-+++ b/boot/env.ml
-@@ -32,17 +32,29 @@ let fail_msg =
-
- let fail s = Format.eprintf "%s@\n%!" fail_msg; exit 1
-
-+let path_to_list p =
-+ let sep = if String.equal Sys.os_type "Win32" then ';' else ':' in
-+ String.split_on_char sep p
-+
- (* This code needs to be refactored, for now it is just what used to be in envvars *)
- let guess_coqlib () =
- Util.getenv_else "COQLIB" (fun () ->
- let prelude = "theories/Init/Prelude.vo" in
-- Util.check_file_else
-- ~dir:Coq_config.coqlibsuffix
-- ~file:prelude
-- (fun () ->
-- if Sys.file_exists (Filename.concat Coq_config.coqlib prelude)
-- then Coq_config.coqlib
-- else fail ()))
-+ let coqlibpath = Util.getenv_else "COQLIBPATH" (fun () -> Coq_config.coqlibsuffix) in
-+ let paths = path_to_list coqlibpath in
-+ let valid_paths =
-+ List.filter
-+ (fun dir -> (Util.check_file_else ~dir:dir ~file:prelude (fun () -> "")) <> "")
-+ paths in
-+ match valid_paths with
-+ | [] ->
-+ if Sys.file_exists (Filename.concat Coq_config.coqlib prelude)
-+ then Coq_config.coqlib
-+ else
-+ fail "cannot guess a path for Coq libraries; please use -coqlib option \
-+ or ensure you have installed the package containing Coq's stdlib (coq-stdlib in OPAM) \
-+ If you intend to use Coq without a standard library, the -boot -noinit options must be used."
-+ | p::_ -> p)
-
- (* Build layout uses coqlib = coqcorelib *)
- let guess_coqcorelib lib =
---
-2.34.0
-
diff --git a/gnu/packages/patches/git-filter-repo-generate-doc.patch b/gnu/packages/patches/git-filter-repo-generate-doc.patch
new file mode 100644
index 0000000000..4535ae5bc4
--- /dev/null
+++ b/gnu/packages/patches/git-filter-repo-generate-doc.patch
@@ -0,0 +1,88 @@
+From 56e6857e71d2b2a2236625f3c8b112bd40a8b164 Mon Sep 17 00:00:00 2001
+From: Josselin Poiret <dev@jpoiret.xyz>
+Date: Fri, 16 Feb 2024 00:21:06 +0800
+Subject: [PATCH] Add documentation generation.
+
+This requires the manpage XSL and asciidoc config files from git 2.41.0.
+
+Modified-by: Hilton Chain <hako@ultrarare.space>
+---
+ Documentation/Makefile | 34 ++++++++++++++++++++++++++++++++++
+ Makefile | 17 +++--------------
+ 2 files changed, 37 insertions(+), 14 deletions(-)
+ create mode 100644 Documentation/Makefile
+
+diff --git a/Documentation/Makefile b/Documentation/Makefile
+new file mode 100644
+index 0000000..d81ffbe
+--- /dev/null
++++ b/Documentation/Makefile
+@@ -0,0 +1,34 @@
++MAN_BASE_URL := $(prefix)/share/doc/git-doc/
++VERSION := $(git log --pretty="%H" -n 1)
++
++ASCIIDOC := asciidoc
++ASCIIDOC_EXTRA :=
++ASCIIDOC_HTML := xhtml11
++ASCIIDOC_DOCBOOK := docbook
++ASCIIDOC_CONF := -f asciidoc.conf
++ASCIIDOC_COMMON := $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \
++ -amanmanual='git-filter-repo Manual' -amansource='git-filter-repo $(VERSION)'
++ASCIIDOC_DEPS := asciidoc.conf
++TXT_TO_HTML := $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML)
++TXT_TO_XML := $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK)
++MANPAGE_XSL := manpage-normal.xsl
++XMLTO := xmlto
++XMLTO_EXTRA := -m manpage-bold-literal.xsl \
++ --stringparam man.base.url.for.relative.links='$(MAN_BASE_URL)'
++
++manpage-prereqs := $(wildcard manpage*.xsl)
++manpage-cmd := $(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man
++
++%.xml : %.txt $(ASCIIDOC_DEPS)
++ $(TXT_TO_XML) -d manpage -o $@ $<
++
++man1/%.1 : %.xml $(manpage-prereqs)
++ mkdir -p man1
++ $(manpage-cmd) -o man1 $<
++
++html/%.html : %.txt $(ASCIIDOC_DEPS)
++ mkdir -p html
++ $(TXT_TO_HTML) -d manpage -o $@ $<
++
++man: man1/git-filter-repo.1
++html: html/git-filter-repo.html
+diff --git a/Makefile b/Makefile
+index a443450..d965ae5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -20,21 +20,10 @@ test:
+ fixup_locale:
+ sed -ie s%@@LOCALEDIR@@%$(localedir)% git-filter-repo
+
+-# People installing from tarball will already have man1/git-filter-repo.1 and
+-# html/git-filter-repo.html. But let's support people installing from a git
+-# clone too; for them, just cheat and snag a copy of the built docs that I
+-# record in a different branch.
+-snag_docs: Documentation/man1/git-filter-repo.1 Documentation/html/git-filter-repo.html
++doc:
++ $(MAKE) -C Documentation man html
+
+-Documentation/man1/git-filter-repo.1:
+- mkdir -p Documentation/man1
+- git show origin/docs:man1/git-filter-repo.1 >Documentation/man1/git-filter-repo.1
+-
+-Documentation/html/git-filter-repo.html:
+- mkdir -p Documentation/html
+- git show origin/docs:html/git-filter-repo.html >Documentation/html/git-filter-repo.html
+-
+-install: snag_docs #fixup_locale
++install: doc #fixup_locale
+ install -Dm0755 git-filter-repo "$(DESTDIR)/$(bindir)/git-filter-repo"
+ install -dm0755 "$(DESTDIR)/$(pythondir)"
+ ln -sf "$(bindir)/git-filter-repo" "$(DESTDIR)/$(pythondir)/git_filter_repo.py"
+
+base-commit: cbc6535694380d3a3bf3e5c96410d4ce7e8de94f
+--
+2.41.0
+
diff --git a/gnu/packages/patches/go-github-com-skip2-go-qrcode-fix-tests.patch b/gnu/packages/patches/go-github-com-skip2-go-qrcode-fix-tests.patch
new file mode 100644
index 0000000000..631cb0cdab
--- /dev/null
+++ b/gnu/packages/patches/go-github-com-skip2-go-qrcode-fix-tests.patch
@@ -0,0 +1,37 @@
+From dd203f29a36bf518deacbc03e8562b0195c8345f Mon Sep 17 00:00:00 2001
+From: Dominic Martinez <dom@dominicm.dev>
+Date: Mon, 4 Apr 2022 12:06:03 -0400
+Subject: [PATCH] Fix failing qr decode test
+
+First convert integers into runes before performing a string conversion.
+---
+ qrcode_decode_test.go | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/qrcode_decode_test.go b/qrcode_decode_test.go
+index 1f4b1d3..2b0756b 100644
+--- a/qrcode_decode_test.go
++++ b/qrcode_decode_test.go
+@@ -122,7 +122,7 @@ func TestDecodeAllCharacters(t *testing.T) {
+
+ // zbarimg has trouble with null bytes, hence start from ASCII 1.
+ for i := 1; i < 256; i++ {
+- content += string(i)
++ content += string(rune(i))
+ }
+
+ q, err := New(content, Low)
+@@ -154,7 +154,7 @@ func TestDecodeFuzz(t *testing.T) {
+ for j := 0; j < len; j++ {
+ // zbarimg seems to have trouble with special characters, test printable
+ // characters only for now.
+- content += string(32 + r.Intn(94))
++ content += string(rune(32 + r.Intn(94)))
+ }
+
+ for _, level := range []RecoveryLevel{Low, Medium, High, Highest} {
+
+base-commit: da1b6568686e89143e94f980a98bc2dbd5537f13
+--
+2.34.0
+
diff --git a/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch b/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch
deleted file mode 100644
index 436a11ad19..0000000000
--- a/gnu/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-diff --git a/configure.ac b/configure.ac
-index 107e6ca..20e9019 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -2,6 +2,7 @@ dnl Guile-Git --- GNU Guile bindings of libgit2
- dnl Copyright © 2016-2018 Erik Edrosa <erik.edrosa@gmail.com>
- dnl Copyright © 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
- dnl Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
-+dnl Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
- dnl
- dnl This file is part of Guile-Git.
- dnl
-@@ -43,15 +44,20 @@ AS_IF([test "x$LIBGIT2_LIBDIR" = "x"], [
- ])
- AC_SUBST([LIBGIT2_LIBDIR])
-
-+dnl Does the 'git_remote_callbacks' struct have a 'remote_ready' field?
-+dnl It was added in 1.2.0, obsoleting 'resolve_url'.
-+AC_CHECK_MEMBER([git_remote_callbacks.remote_ready],
-+ [HAVE_REMOTE_CALLBACKS_REMOTE_READY="#true"],
-+ [HAVE_REMOTE_CALLBACKS_REMOTE_READY="#false"],
-+ [[#include <git2.h>]])
-+AC_SUBST([HAVE_REMOTE_CALLBACKS_REMOTE_READY])
-+
- dnl Does the 'git_remote_callbacks' struct have a 'resolve_url' field?
- dnl It's missing in libgit2 0.28.5, added in 1.0.
--AC_CHECK_MEMBER([git_remote_callbacks.resolve_url], [], [],
-+AC_CHECK_MEMBER([git_remote_callbacks.resolve_url],
-+ [HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#true"],
-+ [HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#false"],
- [[#include <git2.h>]])
--if test "x$ac_cv_member_git_remote_callbacks_resolve_url" = "xyes"; then
-- HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#true"
--else
-- HAVE_REMOTE_CALLBACKS_RESOLVE_URL="#false"
--fi
- AC_SUBST([HAVE_REMOTE_CALLBACKS_RESOLVE_URL])
-
- dnl Those binaries are required for ssh authentication tests.
-diff --git a/git/configuration.scm.in b/git/configuration.scm.in
-index c45f698..64c4360 100644
---- a/git/configuration.scm.in
-+++ b/git/configuration.scm.in
-@@ -19,11 +19,17 @@
-
- (define-module (git configuration)
- #:export (%libgit2
-+ %have-remote-callbacks-remote-ready?
- %have-remote-callbacks-resolve-url?))
-
- (define %libgit2
- "@LIBGIT2_LIBDIR@/libgit2")
-
-+(define %have-remote-callbacks-remote-ready?
-+ ;; True if the 'git_remote_callbacks' struct has a
-+ ;; 'remote_ready' field.
-+ @HAVE_REMOTE_CALLBACKS_REMOTE_READY@)
-+
- (define %have-remote-callbacks-resolve-url?
- ;; True if the 'git_remote_callbacks' struct has a 'resolve_url' field.
- @HAVE_REMOTE_CALLBACKS_RESOLVE_URL@)
-diff --git a/git/structs.scm b/git/structs.scm
-index ca51728..be3d050 100644
---- a/git/structs.scm
-+++ b/git/structs.scm
-@@ -637,6 +637,12 @@ type to 'specified for this to take effect."
- (push-update-reference ,(bs:pointer uint8))
- (push-negotiation ,(bs:pointer uint8))
- (transport ,(bs:pointer uint8))
-+
-+ ;; Added in libgit2 1.2.0.
-+ ,@(if %have-remote-callbacks-remote-ready?
-+ `((remote-ready ,(bs:pointer uint8)))
-+ '())
-+
- (payload ,(bs:pointer uint8))
-
- ;; libgit2 1.0 added this field, which is missing from 0.28.5,
diff --git a/gnu/packages/patches/i3status-rust-enable-unstable-features.patch b/gnu/packages/patches/i3status-rust-enable-unstable-features.patch
deleted file mode 100644
index 535b45d865..0000000000
--- a/gnu/packages/patches/i3status-rust-enable-unstable-features.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From 3006390c0058f06c255d9850327163aebcdc3b40 Mon Sep 17 00:00:00 2001
-From: Petr Hodina <phodina@protonmail.com>
-Date: Mon, 11 Oct 2021 22:35:39 +0200
-Subject: [PATCH] Enable unstable features.
-
-
-diff --git a/src/main.rs b/src/main.rs
-index d9e964b..820e22e 100644
---- a/src/main.rs
-+++ b/src/main.rs
-@@ -1,3 +1,6 @@
-+#![feature(bool_to_option)]
-+#![feature(clamp)]
-+
- #[macro_use]
- mod de;
- #[macro_use]
---
-2.33.0
-
diff --git a/gnu/packages/patches/libgeotiff-fix-tests-on-i386.patch b/gnu/packages/patches/libgeotiff-fix-tests-on-i386.patch
new file mode 100644
index 0000000000..e84f726a3d
--- /dev/null
+++ b/gnu/packages/patches/libgeotiff-fix-tests-on-i386.patch
@@ -0,0 +1,35 @@
+From 9990160268fafb71751d4f3a9ad724df70cb9451 Mon Sep 17 00:00:00 2001
+From: Bas Couwenberg <sebastic@xs4all.nl>
+Date: Fri, 1 Dec 2023 10:35:46 +0100
+Subject: [PATCH] Fix test failure on i386.
+
+---
+https://github.com/OSGeo/libgeotiff/pull/107
+
+ test/testlistgeo | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/test/testlistgeo b/test/testlistgeo
+index 48e92eb..ceec2e6 100755
+--- a/test/testlistgeo
++++ b/test/testlistgeo
+@@ -218,6 +218,9 @@ echo "" >>${OUT}
+ sed "s/ETRS89-extended/ETRS89/g" < ${OUT} > ${OUT}.tmp
+ mv ${OUT}.tmp ${OUT}
+
++sed "s/ProjCenterLongGeoKey: 46.437229 ( 46d26'14.02\"E)/ProjCenterLongGeoKey: 46.437229 ( 46d26'14.03\"E)/" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++
+ sed "s/ETRS89-extended/ETRS89/g" < ${TEST_CLI_DIR}/testlistgeo_out.dist > testlistgeo_out.dist.normalized
+
+ sed "s/GCS: 4053\/Unspecified datum based upon the International 1924 Authalic Sphere/GCS: 10346\/NSIDC Authalic Sphere/g" < ${OUT} > ${OUT}.tmp
+@@ -230,6 +233,9 @@ mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+ sed "s/Datum: 6053\/Not specified (based on International 1924 Authalic Sphere)/Datum: 1360\/NSIDC International 1924 Authalic Sphere/g" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
+ mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+
++sed "s/ProjCenterLongGeoKey: 46.437229 ( 46d26'14.02\"E)/ProjCenterLongGeoKey: 46.437229 ( 46d26'14.03\"E)/" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
++
+ # do 'diff' with distribution results
+ # after cleaning for avoid spurios result due
+ # to different build dir
diff --git a/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.0.patch b/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.0.patch
new file mode 100644
index 0000000000..5d381d78e2
--- /dev/null
+++ b/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.0.patch
@@ -0,0 +1,51 @@
+From 3806fdab4a17f44641a2113faec778e756e2be3d Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Tue, 29 Aug 2023 19:04:25 +0200
+Subject: [PATCH] Fix 'make check' to pass with PROJ 9.3 (fixes #89)
+
+---
+https://github.com/OSGeo/libgeotiff/pull/90
+
+ test/testlistgeo | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/test/testlistgeo b/test/testlistgeo
+index 9a41e74..48e92eb 100755
+--- a/test/testlistgeo
++++ b/test/testlistgeo
+@@ -218,14 +218,24 @@ echo "" >>${OUT}
+ sed "s/ETRS89-extended/ETRS89/g" < ${OUT} > ${OUT}.tmp
+ mv ${OUT}.tmp ${OUT}
+
+-sed "s/ETRS89-extended/ETRS89/g" < ${TEST_CLI_DIR}/testlistgeo_out.dist > testlistgeo_out.dist.tmp
++sed "s/ETRS89-extended/ETRS89/g" < ${TEST_CLI_DIR}/testlistgeo_out.dist > testlistgeo_out.dist.normalized
++
++sed "s/GCS: 4053\/Unspecified datum based upon the International 1924 Authalic Sphere/GCS: 10346\/NSIDC Authalic Sphere/g" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++sed "s/Datum: 6053\/Not specified (based on International 1924 Authalic Sphere)/Datum: 1360\/NSIDC International 1924 Authalic Sphere/g" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++
++sed "s/GCS: 4053\/Unspecified datum based upon the International 1924 Authalic Sphere/GCS: 10346\/NSIDC Authalic Sphere/g" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
++sed "s/Datum: 6053\/Not specified (based on International 1924 Authalic Sphere)/Datum: 1360\/NSIDC International 1924 Authalic Sphere/g" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+
+ # do 'diff' with distribution results
+ # after cleaning for avoid spurios result due
+ # to different build dir
+ sed -e "s/Testing listgeo .*test/Testing listgeo ..\/test/" -i ${OUT}
+ echo "diff ${OUT} with testlistgeo_out.dist"
+-diff -u ${OUT} testlistgeo_out.dist.tmp
++diff -u ${OUT} testlistgeo_out.dist.normalized
+ if [ $? -ne 0 ] ; then
+ echo ""
+ echo "PROBLEMS HAVE OCCURRED"
+@@ -236,7 +246,7 @@ else
+ echo "TEST OK"
+ echo "test file ${OUT} removed"
+ echo
+- rm testlistgeo_out.dist.tmp
++ rm testlistgeo_out.dist.normalized
+ /bin/rm -f ${OUT}
+ exit 0
+ fi
diff --git a/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.1.patch b/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.1.patch
new file mode 100644
index 0000000000..e9a28d1fcd
--- /dev/null
+++ b/gnu/packages/patches/libgeotiff-fix-tests-with-proj-9.3.1.patch
@@ -0,0 +1,40 @@
+From 4f90e57fa1cac7afdd57e5f649775cb24aa15612 Mon Sep 17 00:00:00 2001
+From: Bas Couwenberg <sebastic@xs4all.nl>
+Date: Fri, 1 Dec 2023 08:23:20 +0100
+Subject: [PATCH] Fix test failure with PROJ 9.3.1.
+
+Closes: #104
+---
+https://github.com/OSGeo/libgeotiff/pull/105
+
+ test/testlistgeo | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/test/testlistgeo b/test/testlistgeo
+index 48e92eb..4331cc3 100755
+--- a/test/testlistgeo
++++ b/test/testlistgeo
+@@ -218,6 +218,11 @@ echo "" >>${OUT}
+ sed "s/ETRS89-extended/ETRS89/g" < ${OUT} > ${OUT}.tmp
+ mv ${OUT}.tmp ${OUT}
+
++sed "s/Projection = 15914 (BLM zone 14N (US survey .*))/Projection = 15914 (BLM zone 14N)/g" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++sed "s/Projection = 6753 (Oregon Columbia River West zone (.*))/Projection = 6753 (Oregon Columbia River West zone)/" < ${OUT} > ${OUT}.tmp
++mv ${OUT}.tmp ${OUT}
++
+ sed "s/ETRS89-extended/ETRS89/g" < ${TEST_CLI_DIR}/testlistgeo_out.dist > testlistgeo_out.dist.normalized
+
+ sed "s/GCS: 4053\/Unspecified datum based upon the International 1924 Authalic Sphere/GCS: 10346\/NSIDC Authalic Sphere/g" < ${OUT} > ${OUT}.tmp
+@@ -230,6 +235,11 @@ mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+ sed "s/Datum: 6053\/Not specified (based on International 1924 Authalic Sphere)/Datum: 1360\/NSIDC International 1924 Authalic Sphere/g" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
+ mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
+
++sed "s/Projection = 15914 (BLM zone 14N (US survey .*))/Projection = 15914 (BLM zone 14N)/" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
++sed "s/Projection = 6753 (Oregon Columbia River West zone (.*))/Projection = 6753 (Oregon Columbia River West zone)/" < testlistgeo_out.dist.normalized > testlistgeo_out.dist.normalized.tmp
++mv testlistgeo_out.dist.normalized.tmp testlistgeo_out.dist.normalized
++
+ # do 'diff' with distribution results
+ # after cleaning for avoid spurios result due
+ # to different build dir
diff --git a/gnu/packages/patches/librime-fix-build-with-gcc10.patch b/gnu/packages/patches/librime-fix-build-with-gcc10.patch
deleted file mode 100644
index 49ad011b57..0000000000
--- a/gnu/packages/patches/librime-fix-build-with-gcc10.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From: Felix Gruber <felgru@posteo.net>
-Date: Mon, 6 Sep 2021 19:38:17 +0200
-Subject: [PATCH] Add missing <cmath> includes
-
-Fix a build failure with GCC 10 that manifests like this:
-
-------
-/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc: In member function ‘void rime::ScriptTranslation::PrepareCandidate()’:
-/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc:490:23: error: ‘exp’ was not declared in this scope
- 490 | cand->set_quality(exp(entry->weight) +
- | ^~~
-/tmp/guix-build-librime-1.7.3.drv-0/source/src/rime/gear/script_translator.cc:504:23: error: ‘exp’ was not declared in this scope
- 504 | cand->set_quality(exp(entry->weight) +
- | ^~~
-make[2]: *** [src/CMakeFiles/rime.dir/build.make:1241: src/CMakeFiles/rime.dir/rime/gear/script_translator.cc.o] Error 1
-------
-
-diff --git a/src/rime/gear/script_translator.cc b/src/rime/gear/script_translator.cc
-index 4a45f05..515c8db 100644
---- a/src/rime/gear/script_translator.cc
-+++ b/src/rime/gear/script_translator.cc
-@@ -7,6 +7,7 @@
- // 2011-07-10 GONG Chen <chen.sst@gmail.com>
- //
- #include <algorithm>
-+#include <cmath>
- #include <stack>
- #include <boost/algorithm/string/join.hpp>
- #include <boost/range/adaptor/reversed.hpp>
-diff --git a/src/rime/gear/table_translator.cc b/src/rime/gear/table_translator.cc
-index 162ac02..dbea76a 100644
---- a/src/rime/gear/table_translator.cc
-+++ b/src/rime/gear/table_translator.cc
-@@ -4,6 +4,7 @@
- //
- // 2011-07-10 GONG Chen <chen.sst@gmail.com>
- //
-+#include <cmath>
- #include <boost/algorithm/string.hpp>
- #include <boost/range/adaptor/reversed.hpp>
- #include <utf8.h>
diff --git a/gnu/packages/patches/libtommath-fix-linkage.patch b/gnu/packages/patches/libtommath-fix-linkage.patch
deleted file mode 100644
index 1a9d46eb7c..0000000000
--- a/gnu/packages/patches/libtommath-fix-linkage.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-https://github.com/libtom/libtommath/commit/93dea3a4162527346cd8856bfda6f17ffe98ab04.patch
-
-From 93dea3a4162527346cd8856bfda6f17ffe98ab04 Mon Sep 17 00:00:00 2001
-From: Steffen Jaeckel <s@jaeckel.eu>
-Date: Thu, 31 Jan 2019 14:12:03 +0100
-Subject: [PATCH] makefile.shared: fix compilation and linkage
-
----
- makefile.shared | 15 ++++++++-------
- 1 file changed, 8 insertions(+), 7 deletions(-)
-
-diff --git a/makefile.shared b/makefile.shared
-index 3955f830..870b18d1 100644
---- a/makefile.shared
-+++ b/makefile.shared
-@@ -18,6 +18,7 @@ ifndef LIBTOOL
- endif
- endif
- LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC)
-+LTLINK = $(LIBTOOL) --mode=link --tag=CC $(CC)
-
- LCOV_ARGS=--directory .libs --directory .
-
-@@ -59,7 +60,7 @@ objs: $(OBJECTS)
- LOBJECTS = $(OBJECTS:.o=.lo)
-
- $(LIBNAME): $(OBJECTS)
-- $(LIBTOOL) --mode=link --tag=CC $(CC) $(LDFLAGS) $(LOBJECTS) -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION_SO) $(LIBTOOLFLAGS)
-+ $(LTLINK) $(LDFLAGS) $(LOBJECTS) -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION_SO) $(LIBTOOLFLAGS)
-
- install: $(LIBNAME)
- install -d $(DESTDIR)$(LIBPATH)
-@@ -76,16 +77,16 @@ uninstall:
- rm $(DESTDIR)$(LIBPATH)/pkgconfig/libtommath.pc
-
- test: $(LIBNAME) demo/demo.o
-- $(CC) $(CFLAGS) -c demo/demo.c -o demo/demo.o
-- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o test demo/demo.o $(LIBNAME)
-+ $(LTCOMPILE) $(CFLAGS) -c demo/demo.c -o demo/demo.o
-+ $(LTLINK) $(LDFLAGS) -o test demo/demo.o $(LIBNAME)
-
- test_standalone: $(LIBNAME) demo/demo.o
-- $(CC) $(CFLAGS) -c demo/demo.c -o demo/demo.o
-- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o test demo/demo.o $(LIBNAME)
-+ $(LTCOMPILE) $(CFLAGS) -c demo/demo.c -o demo/demo.o
-+ $(LTLINK) $(LDFLAGS) -o test demo/demo.o $(LIBNAME)
-
- .PHONY: mtest
- mtest:
-- cd mtest ; $(CC) $(CFLAGS) $(LDFLAGS) mtest.c -o mtest
-+ cd mtest ; $(CC) $(CFLAGS) -O0 mtest.c $(LDFLAGS) -o mtest
-
- timing: $(LIBNAME) demo/timing.c
-- $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -DTIMER demo/timing.c $(LIBNAME) -o timing
-+ $(LTLINK) $(CFLAGS) $(LDFLAGS) -DTIMER demo/timing.c $(LIBNAME) -o timing
diff --git a/gnu/packages/patches/libtommath-integer-overflow.patch b/gnu/packages/patches/libtommath-integer-overflow.patch
deleted file mode 100644
index 5241726775..0000000000
--- a/gnu/packages/patches/libtommath-integer-overflow.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-This patch is from upstream:
-https://github.com/libtom/libtommath/pull/546
-
-From beba892bc0d4e4ded4d667ab1d2a94f4d75109a9 Mon Sep 17 00:00:00 2001
-From: czurnieden <czurnieden@gmx.de>
-Date: Tue, 9 May 2023 17:17:12 +0200
-Subject: [PATCH] Fix possible integer overflow
-
----
- bn_mp_2expt.c | 4 ++++
- bn_mp_grow.c | 4 ++++
- bn_mp_init_size.c | 5 +++++
- bn_mp_mul_2d.c | 4 ++++
- bn_s_mp_mul_digs.c | 4 ++++
- bn_s_mp_mul_digs_fast.c | 4 ++++
- bn_s_mp_mul_high_digs.c | 4 ++++
- bn_s_mp_mul_high_digs_fast.c | 4 ++++
- 8 files changed, 33 insertions(+)
-
-diff --git a/bn_mp_2expt.c b/bn_mp_2expt.c
-index 0ae3df1bf..23de0c3c5 100644
---- a/bn_mp_2expt.c
-+++ b/bn_mp_2expt.c
-@@ -12,6 +12,10 @@ mp_err mp_2expt(mp_int *a, int b)
- {
- mp_err err;
-
-+ if (b < 0) {
-+ return MP_VAL;
-+ }
-+
- /* zero a as per default */
- mp_zero(a);
-
-diff --git a/bn_mp_grow.c b/bn_mp_grow.c
-index 9e904c547..2b1682651 100644
---- a/bn_mp_grow.c
-+++ b/bn_mp_grow.c
-@@ -9,6 +9,10 @@ mp_err mp_grow(mp_int *a, int size)
- int i;
- mp_digit *tmp;
-
-+ if (size < 0) {
-+ return MP_VAL;
-+ }
-+
- /* if the alloc size is smaller alloc more ram */
- if (a->alloc < size) {
- /* reallocate the array a->dp
-diff --git a/bn_mp_init_size.c b/bn_mp_init_size.c
-index d62268721..99573833f 100644
---- a/bn_mp_init_size.c
-+++ b/bn_mp_init_size.c
-@@ -6,6 +6,11 @@
- /* init an mp_init for a given size */
- mp_err mp_init_size(mp_int *a, int size)
- {
-+
-+ if (size < 0) {
-+ return MP_VAL;
-+ }
-+
- size = MP_MAX(MP_MIN_PREC, size);
-
- /* alloc mem */
-diff --git a/bn_mp_mul_2d.c b/bn_mp_mul_2d.c
-index 87354de20..bfeaf2eb2 100644
---- a/bn_mp_mul_2d.c
-+++ b/bn_mp_mul_2d.c
-@@ -9,6 +9,10 @@ mp_err mp_mul_2d(const mp_int *a, int b, mp_int *c)
- mp_digit d;
- mp_err err;
-
-+ if (b < 0) {
-+ return MP_VAL;
-+ }
-+
- /* copy */
- if (a != c) {
- if ((err = mp_copy(a, c)) != MP_OKAY) {
-diff --git a/bn_s_mp_mul_digs.c b/bn_s_mp_mul_digs.c
-index 64509d4cb..3682b4980 100644
---- a/bn_s_mp_mul_digs.c
-+++ b/bn_s_mp_mul_digs.c
-@@ -16,6 +16,10 @@ mp_err s_mp_mul_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs)
- mp_word r;
- mp_digit tmpx, *tmpt, *tmpy;
-
-+ if (digs < 0) {
-+ return MP_VAL;
-+ }
-+
- /* can we use the fast multiplier? */
- if ((digs < MP_WARRAY) &&
- (MP_MIN(a->used, b->used) < MP_MAXFAST)) {
-diff --git a/bn_s_mp_mul_digs_fast.c b/bn_s_mp_mul_digs_fast.c
-index b2a287b02..3c4176a87 100644
---- a/bn_s_mp_mul_digs_fast.c
-+++ b/bn_s_mp_mul_digs_fast.c
-@@ -26,6 +26,10 @@ mp_err s_mp_mul_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int digs)
- mp_digit W[MP_WARRAY];
- mp_word _W;
-
-+ if (digs < 0) {
-+ return MP_VAL;
-+ }
-+
- /* grow the destination as required */
- if (c->alloc < digs) {
- if ((err = mp_grow(c, digs)) != MP_OKAY) {
-diff --git a/bn_s_mp_mul_high_digs.c b/bn_s_mp_mul_high_digs.c
-index 2bb2a5098..c9dd355f8 100644
---- a/bn_s_mp_mul_high_digs.c
-+++ b/bn_s_mp_mul_high_digs.c
-@@ -15,6 +15,10 @@ mp_err s_mp_mul_high_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs)
- mp_word r;
- mp_digit tmpx, *tmpt, *tmpy;
-
-+ if (digs < 0) {
-+ return MP_VAL;
-+ }
-+
- /* can we use the fast multiplier? */
- if (MP_HAS(S_MP_MUL_HIGH_DIGS_FAST)
- && ((a->used + b->used + 1) < MP_WARRAY)
-diff --git a/bn_s_mp_mul_high_digs_fast.c b/bn_s_mp_mul_high_digs_fast.c
-index a2c4fb692..4ce7f590c 100644
---- a/bn_s_mp_mul_high_digs_fast.c
-+++ b/bn_s_mp_mul_high_digs_fast.c
-@@ -19,6 +19,10 @@ mp_err s_mp_mul_high_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int
- mp_digit W[MP_WARRAY];
- mp_word _W;
-
-+ if (digs < 0) {
-+ return MP_VAL;
-+ }
-+
- /* grow the destination as required */
- pa = a->used + b->used;
- if (c->alloc < pa) {
diff --git a/gnu/packages/patches/maturin-no-cross-compile.patch b/gnu/packages/patches/maturin-no-cross-compile.patch
index 7394d0854e..98af33d3c7 100644
--- a/gnu/packages/patches/maturin-no-cross-compile.patch
+++ b/gnu/packages/patches/maturin-no-cross-compile.patch
@@ -2,27 +2,27 @@ Remove dependencies on xwin and zig. We're not offering cross-compilation
options using these crates.
diff --git a/Cargo.toml b/Cargo.toml
-index 6cbdca3..22ea5ef 100644
+index 6704e46..ff126a9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
-@@ -76,16 +76,6 @@ version = "0.1.4"
+@@ -83,16 +83,6 @@ version = "0.1.16"
[dependencies.cargo-options]
- version = "0.6.0"
+ version = "0.7.2"
-[dependencies.cargo-xwin]
--version = "0.14.3"
+-version = "0.16.2"
-optional = true
-default-features = false
-
-[dependencies.cargo-zigbuild]
--version = "0.16.10"
+-version = "0.18.0"
-optional = true
-default-features = false
-
[dependencies.cargo_metadata]
- version = "0.15.3"
+ version = "0.18.0"
-@@ -310,8 +300,6 @@ version = "4.3.0"
+@@ -321,8 +311,6 @@ version = "5.0.0"
[features]
cli-completion = ["dep:clap_complete_command"]
cross-compile = [
@@ -31,7 +31,7 @@ index 6cbdca3..22ea5ef 100644
]
default = [
"full",
-@@ -330,7 +318,6 @@ log = ["tracing-subscriber"]
+@@ -341,7 +329,6 @@ log = ["tracing-subscriber"]
native-tls = [
"dep:native-tls",
"ureq?/native-tls",
@@ -39,7 +39,7 @@ index 6cbdca3..22ea5ef 100644
"dep:rustls-pemfile",
]
password-storage = [
-@@ -340,7 +327,6 @@ password-storage = [
+@@ -351,7 +338,6 @@ password-storage = [
rustls = [
"dep:rustls",
"ureq?/tls",
@@ -47,7 +47,7 @@ index 6cbdca3..22ea5ef 100644
"dep:rustls-pemfile",
]
scaffolding = [
-@@ -358,5 +344,3 @@ upload = [
+@@ -369,5 +355,3 @@ upload = [
"wild",
"dep:dirs",
]
diff --git a/gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch b/gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch
deleted file mode 100644
index 2c344af821..0000000000
--- a/gnu/packages/patches/ocaml-dose3-Fix-for-ocaml-4.06.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From aeca7656f499d7f4595319858f242276920e31bb Mon Sep 17 00:00:00 2001
-From: Louis Gesbert <louis.gesbert@ocamlpro.com>
-Date: Sat, 2 Dec 2017 12:51:01 +0100
-Subject: [PATCH] Fix for ocaml 4.06
-
----
- common/criteria_lexer.mll | 8 ++++----
- common/util.ml | 2 +-
- 2 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/common/criteria_lexer.mll b/common/criteria_lexer.mll
-index 71f9178..fc4eae3 100644
---- a/common/criteria_lexer.mll
-+++ b/common/criteria_lexer.mll
-@@ -18,7 +18,7 @@
- let c = Lexing.lexeme_char lexbuf 2 in (* the delimiter can be any character *)
- (* find the terminating delimiter *)
- let endpos =
-- try String.index_from lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) c with
-+ try Bytes.index_from lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) c with
- |Invalid_argument _ ->
- raise (Format822.Syntax_error (
- Format822.error lexbuf "String too short"))
-@@ -27,9 +27,9 @@
- Format822.error lexbuf (Printf.sprintf "cannot find: %c" c)))
- in
- let len = endpos - (lexbuf.lex_start_pos + 3) in
-- let s = String.sub lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) len in
-- lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_start_pos + ((String.length s)+4);
-- s
-+ let s = Bytes.sub lexbuf.lex_buffer (lexbuf.lex_start_pos + 3) len in
-+ lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_start_pos + ((Bytes.length s)+4);
-+ Bytes.to_string s
-
- }
-
-diff --git a/common/util.ml b/common/util.ml
-index 598f266..36ca3d1 100644
---- a/common/util.ml
-+++ b/common/util.ml
-@@ -87,7 +87,7 @@ module MakeMessages(X : sig val label : string end) = struct
- let clean label =
- try
- let s = Filename.chop_extension (Filename.basename label) in
-- String.capitalize s
-+ String.capitalize_ascii s
- with Invalid_argument _ -> label
-
- let create ?(enabled=false) label =
---
-2.11.0
-
diff --git a/gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch b/gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch
deleted file mode 100644
index 41494e7b3c..0000000000
--- a/gnu/packages/patches/ocaml-dose3-Install-mli-cmx-etc.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From b5314c20d8e3caf62fe0dc96ad937a2950158b23 Mon Sep 17 00:00:00 2001
-From: Louis Gesbert <louis.gesbert@ocamlpro.com>
-Date: Thu, 2 Mar 2017 12:19:56 +0100
-Subject: [PATCH] Install mli, cmx, etc.
-
----
- Makefile | 26 +++++++++++++-------------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index 09464ff..5044d7f 100644
---- a/Makefile
-+++ b/Makefile
-@@ -56,7 +56,7 @@ $(DOSELIBS)/cudf.%:
- @for i in _build/cudf/cudf.*; do \
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -67,7 +67,7 @@ $(DOSELIBS)/common.%: common/*.ml common/*.mli
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -78,7 +78,7 @@ $(DOSELIBS)/versioning.%: versioning/*.ml versioning/*.mli
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -88,7 +88,7 @@ $(DOSELIBS)/algo.%: algo/*.ml algo/*.mli $(DOSELIBS)/common.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -98,7 +98,7 @@ $(DOSELIBS)/debian.%: deb/*.ml deb/*.mli $(DOSELIBS)/pef.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -108,7 +108,7 @@ $(DOSELIBS)/opam.%: opam/*.ml opam/*.mli $(DOSELIBS)/pef.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -118,7 +118,7 @@ $(DOSELIBS)/npm.%: npm/*.ml npm/*.mli $(DOSELIBS)/versioning.% $(DOSELIBS)/pef.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -128,7 +128,7 @@ $(DOSELIBS)/rpm.%: rpm/*.ml $(DOSELIBS)/algo.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -138,7 +138,7 @@ $(DOSELIBS)/pef.%: pef/*.ml pef/*.mli
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -148,7 +148,7 @@ $(DOSELIBS)/csw.%: opencsw/*.ml $(DOSELIBS)/versioning.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ; \
-+ rm -f $(DOSELIBS)/*.mlpack ; \
- fi ; \
- done
-
-@@ -158,7 +158,7 @@ $(DOSELIBS)/doseparse.%: $(DOSELIBS)/pef.% $(DOSELIBS)/debian.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ; \
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx $(DOSELIBS)/*.ml ; \
-+ rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.ml ; \
- fi ; \
- done
-
-@@ -168,7 +168,7 @@ $(DOSELIBS)/doseparseNoRpm.%: $(DOSELIBS)/pef.% $(DOSELIBS)/debian.%
- if [ -e $$i ]; then \
- cp $$i $(DOSELIBS) ;\
- rm $$i ;\
-- rm -f $(DOSELIBS)/*.mlpack $(DOSELIBS)/*.cmx ;\
-+ rm -f $(DOSELIBS)/*.mlpack ;\
- fi ; \
- done
-
-@@ -223,7 +223,7 @@ INSTALL_STUFF_ = META
- INSTALL_STUFF_ += $(wildcard _build/doselibs/*.cma _build/doselibs/*.cmi)
- INSTALL_STUFF_ += $(wildcard _build/doselibs/*.cmxa _build/doselibs/*.cmxs)
- INSTALL_STUFF_ += $(wildcard _build/doselibs/*.a)
--#INSTALL_STUFF_ += $(wildcard _build/*/*.mli)
-+INSTALL_STUFF_ += $(wildcard _build/doselibs/*.mli) $(wildcard _build/doselibs/*.cmti) $(wildcard _build/doselibs/*.cmx)
- INSTALL_STUFF_ += $(wildcard _build/rpm/*.so)
-
- exclude_cudf = $(wildcard _build/doselibs/*cudf* _build/cudf/*)
---
-2.11.0
-
diff --git a/gnu/packages/patches/ocaml-dose3-add-unix-dependency.patch b/gnu/packages/patches/ocaml-dose3-add-unix-dependency.patch
deleted file mode 100644
index d2cc44c784..0000000000
--- a/gnu/packages/patches/ocaml-dose3-add-unix-dependency.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From b94cf24739818e5aff397e0a83b19ea32dc81f42 Mon Sep 17 00:00:00 2001
-From: Louis Gesbert <louis.gesbert@ocamlpro.com>
-Date: Tue, 6 Feb 2018 10:15:45 +0100
-Subject: [PATCH 3/3] Add "unix" as dependency to dose3.common in META.in
-
----
- META.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/META.in b/META.in
-index aa2cd8d..0f9d337 100644
---- a/META.in
-+++ b/META.in
-@@ -8,7 +8,7 @@ package "common" (
- version = "@PACKAGE_VERSION@"
- archive(byte) = "common.cma"
- archive(native) = "common.cmxa"
--requires = "extlib, re.pcre, cudf, @ZIP@, @BZ2@"
-+requires = "extlib, re.pcre, cudf, unix, @ZIP@, @BZ2@"
- )
-
- package "algo" (
---
-2.11.0
-
diff --git a/gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch b/gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch
deleted file mode 100644
index 84b6a3b81b..0000000000
--- a/gnu/packages/patches/ocaml-dose3-dont-make-printconf.patch
+++ /dev/null
@@ -1,9 +0,0 @@
---- a/configure
-+++ b/configure
-@@ -6552,6 +6552,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
- $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
- fi
--
--
--make printconf
diff --git a/gnu/packages/patches/podman-program-lookup.patch b/gnu/packages/patches/podman-program-lookup.patch
new file mode 100644
index 0000000000..27a9421285
--- /dev/null
+++ b/gnu/packages/patches/podman-program-lookup.patch
@@ -0,0 +1,120 @@
+From 914aed3e04f71453fbdc30f4287e13ca3ce63a36 Mon Sep 17 00:00:00 2001
+From: Tomas Volf <~@wolfsden.cz>
+Date: Wed, 14 Feb 2024 20:02:03 +0100
+Subject: [PATCH] Modify search for binaries to fit Guix model
+
+Podman basically looked into the $PATH and into its libexec. That does not fit
+Guix's model very well, to an additional option to specify additional
+directories during compilation was added.
+
+* pkg/rootless/rootless_linux.go
+(tryMappingTool): Also check /run/setuid-programs.
+* vendor/github.com/containers/common/pkg/config/config.go
+(extraGuixDir): New function.
+(FindHelperBinary): Use it.
+* vendor/github.com/containers/storage/pkg/unshare/unshare_linux.go
+(guixLookupSetuidPath): New function.
+(Start): Use it.
+---
+ pkg/rootless/rootless_linux.go | 3 +++
+ .../containers/common/pkg/config/config.go | 23 +++++++++++++++++++
+ .../storage/pkg/unshare/unshare_linux.go | 14 +++++++++--
+ 3 files changed, 38 insertions(+), 2 deletions(-)
+
+diff --git a/pkg/rootless/rootless_linux.go b/pkg/rootless/rootless_linux.go
+index d303c8b..0191d90 100644
+--- a/pkg/rootless/rootless_linux.go
++++ b/pkg/rootless/rootless_linux.go
+@@ -102,6 +102,9 @@ func tryMappingTool(uid bool, pid int, hostID int, mappings []idtools.IDMap) err
+ idtype = "setgid"
+ }
+ path, err := exec.LookPath(tool)
++ if err != nil {
++ path, err = exec.LookPath("/run/setuid-programs/" + tool)
++ }
+ if err != nil {
+ return fmt.Errorf("command required for rootless mode with multiple IDs: %w", err)
+ }
+diff --git a/vendor/github.com/containers/common/pkg/config/config.go b/vendor/github.com/containers/common/pkg/config/config.go
+index 75b917f..ed2f131 100644
+--- a/vendor/github.com/containers/common/pkg/config/config.go
++++ b/vendor/github.com/containers/common/pkg/config/config.go
+@@ -1102,6 +1102,24 @@ func findBindir() string {
+ return bindirCached
+ }
+
++func extraGuixDir(bin_name string) string {
++ if (bin_name == "slirp4netns") {
++ return "@SLIRP4NETNS_DIR@";
++ } else if (bin_name == "pasta") {
++ return "@PASST_DIR@";
++ } else if (strings.HasPrefix(bin_name, "qemu-")) {
++ return "@QEMU_DIR@";
++ } else if (bin_name == "gvproxy") {
++ return "@GVPROXY_DIR@";
++ } else if (bin_name == "netavark") {
++ return "@NETAVARK_DIR@";
++ } else if (bin_name == "aardvark-dns") {
++ return "@AARDVARK_DNS_DIR@";
++ } else {
++ return "";
++ }
++}
++
+ // FindHelperBinary will search the given binary name in the configured directories.
+ // If searchPATH is set to true it will also search in $PATH.
+ func (c *Config) FindHelperBinary(name string, searchPATH bool) (string, error) {
+@@ -1109,6 +1127,11 @@ func (c *Config) FindHelperBinary(name string, searchPATH bool) (string, error)
+ bindirPath := ""
+ bindirSearched := false
+
++ if dir := extraGuixDir(name); dir != "" {
++ /* If there is a Guix dir, skip the PATH search. */
++ dirList = append([]string{dir}, dirList...)
++ }
++
+ // If set, search this directory first. This is used in testing.
+ if dir, found := os.LookupEnv("CONTAINERS_HELPER_BINARY_DIR"); found {
+ dirList = append([]string{dir}, dirList...)
+diff --git a/vendor/github.com/containers/storage/pkg/unshare/unshare_linux.go b/vendor/github.com/containers/storage/pkg/unshare/unshare_linux.go
+index a8dc1ba..0b0d755 100644
+--- a/vendor/github.com/containers/storage/pkg/unshare/unshare_linux.go
++++ b/vendor/github.com/containers/storage/pkg/unshare/unshare_linux.go
+@@ -26,6 +26,16 @@ import (
+ "github.com/syndtr/gocapability/capability"
+ )
+
++func guixLookupSetuidPath(prog string) (string, error) {
++ path, err := exec.LookPath(prog)
++ if err != nil {
++ path, err = exec.LookPath("/run/setuid-programs/" + prog)
++ }
++ return path, err
++}
++
++
++
+ // Cmd wraps an exec.Cmd created by the reexec package in unshare(), and
+ // handles setting ID maps and other related settings by triggering
+ // initialization code in the child.
+@@ -237,7 +247,7 @@ func (c *Cmd) Start() error {
+ gidmapSet := false
+ // Set the GID map.
+ if c.UseNewgidmap {
+- path, err := exec.LookPath("newgidmap")
++ path, err := guixLookupSetuidPath("newgidmap")
+ if err != nil {
+ return fmt.Errorf("finding newgidmap: %w", err)
+ }
+@@ -297,7 +307,7 @@ func (c *Cmd) Start() error {
+ uidmapSet := false
+ // Set the UID map.
+ if c.UseNewuidmap {
+- path, err := exec.LookPath("newuidmap")
++ path, err := guixLookupSetuidPath("newuidmap")
+ if err != nil {
+ return fmt.Errorf("finding newuidmap: %w", err)
+ }
+--
+2.41.0
+
diff --git a/gnu/packages/patches/python-telingo-fix-comparison.patch b/gnu/packages/patches/python-telingo-fix-comparison.patch
deleted file mode 100644
index 6d05048dcb..0000000000
--- a/gnu/packages/patches/python-telingo-fix-comparison.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: source/telingo/transformers/head.py
-===================================================================
---- source.orig/telingo/transformers/head.py
-+++ source/telingo/transformers/head.py
-@@ -564,10 +564,12 @@ class HeadTransformer:
- cond = []
- diff = _ast.BinaryOperation(loc, _ast.BinaryOperator.Minus, param, shift)
- if lhs.ast_type != _ast.ASTType.SymbolicTerm or lhs.symbol.type != _clingo.SymbolType.Number or lhs.symbol.number > 0:
-- cond.append(_ast.Literal(loc, _ast.Sign.NoSign, _ast.Comparison(_ast.ComparisonOperator.LessEqual, lhs, diff)))
-+ cond.append(_ast.Literal(loc, _ast.Sign.NoSign,
-+ _ast.Comparison(lhs, [_ast.Guard(_ast.ComparisonOperator.LessEqual, diff)])))
-
- if rhs.ast_type != _ast.ASTType.SymbolicTerm or rhs.symbol.type != _clingo.SymbolType.Supremum:
-- cond.append(_ast.Literal(loc, _ast.Sign.NoSign, _ast.Comparison(_ast.ComparisonOperator.LessEqual, diff, rhs)))
-+ cond.append(_ast.Literal(loc, _ast.Sign.NoSign,
-+ _ast.Comparison(diff, [_ast.Guard(_ast.ComparisonOperator.LessEqual, rhs)])))
-
- elems.extend([_ast.ConditionalLiteral(loc, _ast.Literal(loc, _ast.Sign.NoSign, head), cond) for head in heads])
-
diff --git a/gnu/packages/patches/r-sgloptim.patch b/gnu/packages/patches/r-sgloptim.patch
new file mode 100644
index 0000000000..efba2c7013
--- /dev/null
+++ b/gnu/packages/patches/r-sgloptim.patch
@@ -0,0 +1,53 @@
+From cb9a15eb9d558b2b4b67f9e6806b394f65bff01f Mon Sep 17 00:00:00 2001
+From: Dirk Eddelbuettel <edd@debian.org>
+Date: Wed, 30 Nov 2022 20:15:42 -0600
+Subject: [PATCH] Simplify includes and only include RcppArmadillo.h
+
+---
+ inst/include/sgl.h | 14 +++++---------
+ 1 file changed, 5 insertions(+), 9 deletions(-)
+
+diff --git a/inst/include/sgl.h b/inst/include/sgl.h
+index a36011e..869a295 100644
+--- a/inst/include/sgl.h
++++ b/inst/include/sgl.h
+@@ -21,13 +21,12 @@
+
+ #define R_NO_REMAP
+
++//R, Rcpp, RcppArmadillo
++#include <RcppArmadillo.h>
++
+ //Progress monitor
+ #include <progress.hpp>
+
+-//Rcpp ect
+-#include <RcppCommon.h>
+-#include <Rconfig.h>
+-#include <RcppArmadilloConfig.h>
+
+ // Debugging
+ #ifdef SGL_DEBUG
+@@ -45,8 +44,10 @@
+ #else
+ // Do no debugging
+ #define ARMA_NO_DEBUG
++#ifndef NDEBUG
+ #define NDEBUG
+ #endif
++#endif
+
+ // Registration helper macros
+ #define STR_VALUE(x) #x
+@@ -59,11 +60,6 @@
+
+ #define CALL_METHOD(METHOD, MODULE, ARGS) {GET_STR_VALUE(FUN_NAME(METHOD,MODULE)), (DL_FUNC) &r_ ## MODULE ## _ ## METHOD, ARGS}
+
+-//Support for xl matrices
+-//#define ARMA_64BIT_WORD
+-
+-#include <armadillo>
+-#include <Rcpp.h>
+
+ //Boost
+ #include <boost/math/special_functions/fpclassify.hpp>
diff --git a/gnu/packages/patches/rdkit-unbundle-external-dependencies.patch b/gnu/packages/patches/rdkit-unbundle-external-dependencies.patch
index 8ee0611d3b..e22ff57ee0 100644
--- a/gnu/packages/patches/rdkit-unbundle-external-dependencies.patch
+++ b/gnu/packages/patches/rdkit-unbundle-external-dependencies.patch
@@ -58,99 +58,82 @@ diff --git a/External/AvalonTools/CMakeLists.txt b/External/AvalonTools/CMakeLis
index 3e31195fc..314ba35b5 100644
--- a/External/AvalonTools/CMakeLists.txt
+++ b/External/AvalonTools/CMakeLists.txt
-@@ -2,107 +2,14 @@ if(NOT RDK_BUILD_AVALON_SUPPORT)
+@@ -2,90 +2,8 @@ if(NOT RDK_BUILD_AVALON_SUPPORT)
return()
endif(NOT RDK_BUILD_AVALON_SUPPORT)
+-set(AVALON_VERSION "2.0.5-pre.3")
-if(NOT DEFINED AVALONTOOLS_DIR)
-- set(AVALONTOOLS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SourceDistribution")
-- set(fileToPatch "${CMAKE_CURRENT_SOURCE_DIR}/SourceDistribution/common/reaccsio.c")
+- set(AVALONTOOLS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ava-formake-AvalonToolkit_${AVALON_VERSION}")
+- set(fileToCheck "${AVALONTOOLS_DIR}/src/main/C/common/reaccsio.c")
- set(needDownload "TRUE")
-- if(EXISTS "${fileToPatch}")
-- file(READ "${fileToPatch}" buffer)
-- if("${buffer}" MATCHES "//MyFree\\(\\(char \\*\\)tempdir\\);")
-- set(needDownload "FALSE")
-- endif()
+- if(EXISTS "${fileToCheck}")
+- set(needDownload "FALSE")
- endif()
-else()
- string(REGEX REPLACE "\\\\" "/" AVALONTOOLS_DIR ${AVALONTOOLS_DIR})
- set(needDownload "FALSE")
-endif()
-
--set(AVALON_SRC_PATH ${AVALONTOOLS_DIR}/common)
+-set(AVALON_SRC_PATH "${AVALONTOOLS_DIR}/src/main/C")
+-set(AVALON_COMMON_PATH "${AVALON_SRC_PATH}/common")
+-set(AVALON_INCLUDE_PATH "${AVALON_SRC_PATH}/include")
+-set(AVALON_PROGRAMS_PATH "${AVALON_SRC_PATH}/programs")
-
-if(needDownload)
- if(NOT DEFINED AVALONTOOLS_URL)
-- set(AVALONTOOLS_URL "https://sourceforge.net/projects/avalontoolkit/files/AvalonToolkit_1.2/AvalonToolkit_1.2.0.source.tar")
+- set(AVALONTOOLS_URL "https://github.com/rdkit/ava-formake/archive/refs/tags/AvalonToolkit_${AVALON_VERSION}.tar.gz")
- endif()
- if(NOT DEFINED AVALONTOOLS_MD5SUM)
-- set(AVALONTOOLS_MD5SUM "092a94f421873f038aa67d4a6cc8cb54")
+- set(AVALONTOOLS_MD5SUM "7a20c25a7e79f3344e0f9f49afa03351")
- endif()
- if(NOT DEFINED AVALONTOOLS_BASE)
- string(REGEX REPLACE "^.*/" "" AVALONTOOLS_BASE "${AVALONTOOLS_URL}")
- endif()
- downloadAndCheckMD5(${AVALONTOOLS_URL} "${CMAKE_CURRENT_SOURCE_DIR}/${AVALONTOOLS_BASE}" ${AVALONTOOLS_MD5SUM})
-- execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf
-- ${CMAKE_CURRENT_SOURCE_DIR}/AvalonToolkit_1.2.0.source.tar
+- execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf
+- ${CMAKE_CURRENT_SOURCE_DIR}/AvalonToolkit_${AVALON_VERSION}.tar.gz
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
-- # apply patch to AvalonTools
-- configure_file("${fileToPatch}" "${fileToPatch}.orig" COPYONLY)
-- file(READ "${fileToPatch}" buffer)
-- string(REGEX REPLACE "MyFree\\(\\(char \\*\\)tempdir\\);"
-- "//MyFree((char *)tempdir);" buffer "${buffer}")
-- file(WRITE "${fileToPatch}" "${buffer}")
--endif()
-
- if (MSVC)
- add_definitions("/D_CRT_SECURE_NO_WARNINGS")
- add_compile_options(/wd4224 /wd4101 /wd4018 /wd4996 /wd4244 /wd4305 /wd4013 /wd4146 /wd4334 /wd4715 /wd4715 /nologo)
- endif(MSVC)
-
--set(avalon_clib_srcs ${AVALON_SRC_PATH}/layout.c
-- ${AVALON_SRC_PATH}/symboltable.c
-- ${AVALON_SRC_PATH}/patclean.c
-- ${AVALON_SRC_PATH}/utilities.c
-- ${AVALON_SRC_PATH}/symbol_lists.c
-- ${AVALON_SRC_PATH}/stereo.c
-- ${AVALON_SRC_PATH}/set.c
-- ${AVALON_SRC_PATH}/perceive.c
-- ${AVALON_SRC_PATH}/local.c
-- ${AVALON_SRC_PATH}/graph.c
-- ${AVALON_SRC_PATH}/geometry.c
-- ${AVALON_SRC_PATH}/forio.c
-- ${AVALON_SRC_PATH}/depictutil.c
-- ${AVALON_SRC_PATH}/denormal.c
-- ${AVALON_SRC_PATH}/casutils.c
-- ${AVALON_SRC_PATH}/ssmatch.c
-- ${AVALON_SRC_PATH}/rtutils.c
-- ${AVALON_SRC_PATH}/smi2mol.c
-- ${AVALON_SRC_PATH}/didepict.c
-- ${AVALON_SRC_PATH}/pattern.c
-- ${AVALON_SRC_PATH}/canonizer.c
-- ${AVALON_SRC_PATH}/aacheck.c
-- ${AVALON_SRC_PATH}/fixcharges.c
-- ${AVALON_SRC_PATH}/struchk.c
-- ${AVALON_SRC_PATH}/reaccsio.c
-- ${AVALON_SRC_PATH}/hashcode.c
-- )
--
--# we need this to ensure that builds continue
--# to work on linux systems with older versions
--# of glibc when we're building with gcc-4.1.
--# Without this flag, we'll endup requiring
--# glibc 2.7.
--if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-- add_definitions(-D_GNU_SOURCE=1)
-endif()
-
--if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-return-type -Wno-implicit-function-declaration -Wno-absolute-value -Wno-parentheses -Wno-logical-op-parentheses -Wno-dangling-else -Wno-format")
+-if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+- add_compile_options(-Wno-format-security -Wformat=0 -Wstringop-overflow=0 -Wformat-overflow=0 -Wno-unused-result )
-endif()
--if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result -Wformat-overflow=0 -Wformat=0 -Wno-format-security -Wno-implicit-function-declaration")
+-if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
+- add_compile_options(-Wno-absolute-value -Wno-return-type -Wno-tautological-overlap-compare)
-endif()
+-if (MSVC)
+- add_definitions("/D_CRT_SECURE_NO_WARNINGS")
+- add_compile_options(/wd4018 /wd4101 /wd4146 /wd4334 /wd4477 /wd4715 /wd4716 /wd4996 /nologo)
+-endif(MSVC)
-
--
+-set(avalon_clib_srcs ${AVALON_COMMON_PATH}/layout.c
+- ${AVALON_COMMON_PATH}/symboltable.c
+- ${AVALON_COMMON_PATH}/patclean.c
+- ${AVALON_COMMON_PATH}/utilities.c
+- ${AVALON_COMMON_PATH}/symbol_lists.c
+- ${AVALON_COMMON_PATH}/stereo.c
+- ${AVALON_COMMON_PATH}/set.c
+- ${AVALON_COMMON_PATH}/perceive.c
+- ${AVALON_COMMON_PATH}/local.c
+- ${AVALON_COMMON_PATH}/graph.c
+- ${AVALON_COMMON_PATH}/geometry.c
+- ${AVALON_COMMON_PATH}/forio.c
+- ${AVALON_COMMON_PATH}/depictutil.c
+- ${AVALON_COMMON_PATH}/denormal.c
+- ${AVALON_COMMON_PATH}/casutils.c
+- ${AVALON_COMMON_PATH}/ssmatch.c
+- ${AVALON_COMMON_PATH}/rtutils.c
+- ${AVALON_COMMON_PATH}/smi2mol.c
+- ${AVALON_COMMON_PATH}/didepict.c
+- ${AVALON_COMMON_PATH}/pattern.c
+- ${AVALON_COMMON_PATH}/canonizer.c
+- ${AVALON_COMMON_PATH}/aacheck.c
+- ${AVALON_COMMON_PATH}/fixcharges.c
+- ${AVALON_PROGRAMS_PATH}/struchk.c
+- ${AVALON_COMMON_PATH}/reaccsio.c
+- ${AVALON_COMMON_PATH}/hashcode.c
+- )
-
-rdkit_library(avalon_clib ${avalon_clib_srcs})
-target_compile_definitions(avalon_clib PRIVATE RDKIT_AVALONLIB_BUILD)
@@ -159,11 +142,11 @@ index 3e31195fc..314ba35b5 100644
-endif()
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
--include_directories(${AVALON_SRC_PATH})
+-include_directories(${AVALON_INCLUDE_PATH})
-
rdkit_library(AvalonLib AvalonTools.cpp SHARED
- LINK_LIBRARIES avalon_clib SubstructMatch FileParsers SmilesParse GraphMol DataStructs )
-+ LINK_LIBRARIES -lavalontoolkit SubstructMatch FileParsers SmilesParse GraphMol DataStructs )
++ LINK_LIBRARIES -lavalon4rdkit SubstructMatch FileParsers SmilesParse GraphMol DataStructs )
target_compile_definitions(AvalonLib PRIVATE RDKIT_AVALONLIB_BUILD)
rdkit_headers(AvalonTools.h DEST GraphMol)
rdkit_test(testAvalonLib1 test1.cpp
@@ -278,7 +261,7 @@ diff --git a/External/RingFamilies/CMakeLists.txt b/External/RingFamilies/CMakeL
index 08dd1fe04..66ecd5834 100644
--- a/External/RingFamilies/CMakeLists.txt
+++ b/External/RingFamilies/CMakeLists.txt
-@@ -1,47 +1,6 @@
+@@ -1,47 +1,7 @@
-add_custom_target(ringdecomposerlib_support ALL)
-
if(NOT RDK_USE_URF)
@@ -324,10 +307,9 @@ index 08dd1fe04..66ecd5834 100644
-rdkit_headers(${URFLIB_DIR}/RingDecomposerLib.h DEST "")
-
-
--set(RDK_URF_LIBS RingDecomposerLib
-- CACHE STRING "the libraries for the URF calculation" FORCE)
+rdkit_library(RingDecomposerLib dummy.cpp SHARED LINK_LIBRARIES -lRingDecomposerLib)
-+set(RDK_URF_LIBS RingDecomposerLib CACHE STRING "" FORCE)
+ set(RDK_URF_LIBS RingDecomposerLib
+ CACHE STRING "the libraries for the URF calculation" FORCE)
diff --git a/External/RingFamilies/dummy.cpp b/External/RingFamilies/dummy.cpp
new file mode 100644
index 000000000..e69de29bb
@@ -335,40 +317,60 @@ diff --git a/External/YAeHMOP/CMakeLists.txt b/External/YAeHMOP/CMakeLists.txt
index f1027b3bd..8bee2f910 100644
--- a/External/YAeHMOP/CMakeLists.txt
+++ b/External/YAeHMOP/CMakeLists.txt
-@@ -18,32 +18,8 @@ endif()
+@@ -4,52 +4,7 @@ endif(NOT RDK_BUILD_YAEHMOP_SUPPORT)
- include_directories( ${RDKit_ExternalDir}/YAeHMOP )
+ add_definitions(-DRDK_BUILD_YAEHMOP_SUPPORT)
--ExternalProject_Add(yaehmop_project
-- GIT_REPOSITORY https://github.com/greglandrum/yaehmop.git
-- GIT_TAG master
-- UPDATE_COMMAND ""
-- PATCH_COMMAND ""
-- PREFIX ${CMAKE_CURRENT_SOURCE_DIR}
-- SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/yaehmop"
-- SOURCE_SUBDIR "tightbind"
-- CMAKE_ARGS -DUSE_BLAS_LAPACK=OFF -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-- TEST_COMMAND "")
--
--include_directories(${PROJECT_BINARY_DIR}/include)
--link_directories(${PROJECT_BINARY_DIR}/lib)
--link_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/yaehmop_project-build)
+-if(NOT DEFINED YAEHMOP_DIR)
+- set(YAEHMOP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/yaehmop")
+-endif()
+-
+-if(NOT EXISTS "${YAEHMOP_DIR}/tightbind/bind.h")
+- set(RELEASE_NO "2023.03.1")
+- set(MD5 "e6450f13e02c54d024233b993c3c7ff6")
+- downloadAndCheckMD5("https://github.com/greglandrum/yaehmop/archive/refs/tags/v${RELEASE_NO}.tar.gz"
+- "${CMAKE_CURRENT_SOURCE_DIR}/yaehmop-${RELEASE_NO}.tar.gz" ${MD5})
+- execute_process(COMMAND ${CMAKE_COMMAND} -E tar zxf
+- ${CMAKE_CURRENT_SOURCE_DIR}/yaehmop-${RELEASE_NO}.tar.gz
+- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+-
+- file(RENAME "yaehmop-${RELEASE_NO}" "${YAEHMOP_DIR}")
+-else()
+- message("-- Found YAeHMOP source in ${YAEHMOP_DIR}")
+-endif()
+-
+-set(yaehmop_INCLUDE_DIRS ${YAEHMOP_DIR}/..
+- CACHE STRING "yaehmop Include File" FORCE)
+-include_directories(${yaehmop_INCLUDE_DIRS})
+-
+-if(CMAKE_COMPILER_IS_GNUCXX AND NOT CYGWIN)
+- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+-endif()
+-if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+-endif()
+-
+-# bring in the eHT code, but skip the targets (we'll get yaehmop_eht anyway because it's a dependency)
+-add_subdirectory(yaehmop/tightbind EXCLUDE_FROM_ALL True)
+-
+-# set install dir for the yaehmop library:
+-INSTALL(TARGETS yaehmop_eht EXPORT rdkit-targets
+- DESTINATION ${RDKit_LibDir}/${RDKLIB_DEST}
+- COMPONENT runtime )
+-
+-
+-
-
-set(EHT_PARAM_FILE ${CMAKE_CURRENT_SOURCE_DIR}/yaehmop/tightbind/eht_parms.dat )
-install(FILES ${EHT_PARAM_FILE}
- DESTINATION ${RDKit_ShareDir}/Data
- COMPONENT data)
-
--message("YAeHMOP include_dirs: ${PROJECT_BINARY_DIR}/include")
--message("YAeHMOP link_dirs: ${PROJECT_BINARY_DIR}/lib ${CMAKE_CURRENT_SOURCE_DIR}/src/yaehmop_project-build")
--
-rdkit_library(EHTLib EHTTools.cpp SHARED LINK_LIBRARIES yaehmop_eht GraphMol )
+rdkit_library(EHTLib EHTTools.cpp SHARED LINK_LIBRARIES -lyaehmop_eht GraphMol )
target_compile_definitions(EHTLib PRIVATE RDKIT_EHTLIB_BUILD)
--add_dependencies(EHTLib yaehmop_project)
rdkit_headers(EHTTools.h DEST GraphMol)
rdkit_catch_test(testEHTLib1 test1.cpp
- LINK_LIBRARIES EHTLib FileParsers SmilesParse )
diff --git a/External/YAeHMOP/EHTTools.cpp b/External/YAeHMOP/EHTTools.cpp
index 7a229f51f..71033dc5c 100644
--- a/External/YAeHMOP/EHTTools.cpp
@@ -382,3 +384,23 @@ index 7a229f51f..71033dc5c 100644
}
namespace RDKit {
+@@ -160,4 +160,4 @@ bool runMol(const ROMol &mol, EHTResults &results, int confId,
+ }
+
+ } // end of namespace EHTTools
+-} // end of namespace RDKit
+\ No newline at end of file
++} // end of namespace RDKit
+diff --git a/External/YAeHMOP/Wrap/CMakeLists.txt b/External/YAeHMOP/Wrap/CMakeLists.txt
+index 759a9f360..114d24532 100644
+--- a/External/YAeHMOP/Wrap/CMakeLists.txt
++++ b/External/YAeHMOP/Wrap/CMakeLists.txt
+@@ -4,6 +4,8 @@ rdkit_python_extension(rdEHTTools
+ DEST Chem
+ LINK_LIBRARIES
+ EHTLib )
++
++target_include_directories(rdEHTTools PRIVATE ${RDKit_ExternalDir}/YAeHMOP)
+
+ add_pytest(pyEHTTools
+ ${CMAKE_CURRENT_SOURCE_DIR}/testEHTTools.py)
diff --git a/gnu/packages/patches/restartd-update-robust.patch b/gnu/packages/patches/restartd-update-robust.patch
new file mode 100644
index 0000000000..d279ebd8ff
--- /dev/null
+++ b/gnu/packages/patches/restartd-update-robust.patch
@@ -0,0 +1,295 @@
+From 01cd2d15a9bf1109e0e71b3e31b835d63dcf9cd8 Mon Sep 17 00:00:00 2001
+From: Maxime Devos <maximedevos@telenet.be>, Yin Kangkai <yinkangkai@xiaomi.com>, Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+Subject: [PATCH]
+
+Fix segfault when run as normal user
+
+Also exit immediately when "restartd -h"
+Signed-off-by: Yin Kangkai <yinkangkai@xiaomi.com>
+
+Fix build with gcc-10
+
+Bug: https://bugs.debian.org/957761
+Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
+
+Handle memory allocation failures.
+
+This makes the code a little more robust.
+Signed-off-by: Maxime Devos <maximedevos@telenet.be>
+
+Handle fopen failures.
+
+This makes the code a little more robust. What if /var/run does not
+exist, or we do not have permission to open
+/var/run/restartd.pid (EPERM?) due to SELinux misconfiguration?
+Signed-off-by: Maxime Devos <maximedevos@telenet.be>
+
+Handle printf and fprintf failures.
+
+This makes the code a little more robust. What if the write was
+refused to the underlying device being removed?
+
+The --help, debug and stderr printfs were ignored because there error
+handling does not appear important to me.
+Signed-off-by: Maxime Devos <maximedevos@telenet.be>
+
+Handle fclose failures when writing.
+
+This makes the code a little more robust. What if a quotum is exceeded?
+Signed-off-by: Maxime Devos <maximedevos@telenet.be>
+---
+ config.c | 19 +++++++++----
+ config.h | 14 ++++++----
+ restartd.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++-------
+ 3 files changed, 92 insertions(+), 21 deletions(-)
+
+diff --git a/config.c b/config.c
+index f307b8a..5cc0271 100644
+--- a/config.c
++++ b/config.c
+@@ -57,7 +57,11 @@ int read_config(void)
+ config_process_number = 0;
+
+ line1 = (char *) malloc(MAX_LINE_LENGTH);
++ if (!line1)
++ oom_failure();
+ line2 = (char *) malloc(MAX_LINE_LENGTH);
++ if (!line2)
++ oom_failure();
+
+ if ((config_fd = fopen(config_file, "rt")) == NULL) {
+ fprintf(stderr, "Error at opening config file: %s\n", config_file);
+@@ -155,11 +159,16 @@ void dump_config(void) {
+ int i;
+
+ for(i=0; i<config_process_number; i++) {
+- printf("ID=%d\n name=%s\n regexp=%s\n running=%s\n not_running=%s\n", i,
+- config_process[i].name,
+- config_process[i].regexp,
+- config_process[i].running,
+- config_process[i].not_running);
++ if (printf("ID=%d\n name=%s\n regexp=%s\n running=%s\n not_running=%s\n", i,
++ config_process[i].name,
++ config_process[i].regexp,
++ config_process[i].running,
++ config_process[i].not_running) < 0) {
++ /* Maybe stdout points to a file and a file system quotum was exceeded? */
++ fprintf(stderr, "Failed to dump the configuration. Exiting.\n");
++ syslog(LOG_ERR, "Failed to dump the configuration. Exiting.");
++ exit(1);
++ }
+ }
+
+ }
+diff --git a/config.h b/config.h
+index fabaa2b..2ba1cbe 100644
+--- a/config.h
++++ b/config.h
+@@ -1,6 +1,7 @@
+ /* restartd - Process checker and/or restarter daemon
+ * Copyright (C) 2000-2002 Tibor Koleszar <oldw@debian.org>
+ * Copyright (C) 2006 Aurélien GÉRÔME <ag@roxor.cx>
++ * Copyright (C) 2022 Maxime Devos <maximedevos@telenet.be>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+@@ -25,12 +26,12 @@
+
+ #define DEFAULT_CONFIG "/etc/restartd.conf"
+
+-int debug;
+-int config_process_number;
+-int check_interval;
+-int foreground;
+-struct config_process_type *config_process;
+-char *config_file;
++extern int debug;
++extern int config_process_number;
++extern int check_interval;
++extern int foreground;
++extern struct config_process_type *config_process;
++extern char *config_file;
+
+ typedef struct config_process_type {
+ char name[64];
+@@ -43,5 +44,6 @@ typedef struct config_process_type {
+
+ int read_config(/* char *config_file */);
+ void dump_config(void);
++void oom_failure(void);
+
+ #endif /* RESTARTD_CONFIG_H */
+diff --git a/restartd.c b/restartd.c
+index 2aa720c..aa74334 100644
+--- a/restartd.c
++++ b/restartd.c
+@@ -1,6 +1,7 @@
+ /* restartd - Process checker and/or restarter daemon
+ * Copyright (C) 2000-2002 Tibor Koleszar <oldw@debian.org>
+ * Copyright (C) 2006 Aurélien GÉRÔME <ag@roxor.cx>
++ * Copyright (C) 2022 Maxime Devos <maximedevos@telenet.be>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+@@ -35,6 +36,13 @@
+
+ #include "config.h"
+
++int debug;
++int config_process_number;
++int check_interval;
++int foreground;
++struct config_process_type *config_process;
++char *config_file;
++
+ /* SIGTERM & SIGHUP handler */
+ void got_signal(int sig)
+ {
+@@ -52,6 +60,17 @@ void got_signal(int sig)
+ }
+ }
+
++/* Ignoring out-of-memory failures is risky on systems without virtual memory
++ where additionally at address 0 there is actually something important
++ mapped. Additionally, while often on Linux the OOM killer will kill processes
++ where an OOM happens, this is not always the case and there exist other systems
++ without an OOM killer (e.g. the Hurd). */
++void oom_failure()
++{
++ syslog(LOG_ERR, "Failed to allocate memory. Exiting.");
++ exit(1);
++}
++
+ int main(int argc, char *argv[])
+ {
+ DIR *procdir_id;
+@@ -75,15 +94,21 @@ int main(int argc, char *argv[])
+
+ /* Options */
+ config_file = strdup(DEFAULT_CONFIG);
++ if (!config_file)
++ oom_failure();
++
+ list_only = 0;
+
+ for(i = 0; i < argc; i++) {
+ if (!strcmp(argv[i], "-c") || !strcmp(argv[i], "--config")) {
+ config_file = strdup(argv[i + 1]);
++ if (!config_file)
++ oom_failure();
+ }
+ if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) {
+ printf("restard %s - Copyright 2000-2002 Tibor Koleszar <oldw@debian.org>\n"
+- " Copyright 2006 Aurélien GÉRÔME <ag@roxor.cx>\n",
++ " Copyright 2006 Aurélien GÉRÔME <ag@roxor.cx>\n"
++ " Copyright 2022 Maxime Devos <maximedevos@telenet.be>\n",
+ VERSION);
+ exit(0);
+ }
+@@ -118,10 +143,13 @@ int main(int argc, char *argv[])
+ " -i <interval_sec>: the check interval in second\n"
+ " -l : list configuration options\n"
+ " -h : help\n\n", VERSION);
++ exit(0);
+ }
+ }
+
+ config_process = malloc(sizeof(struct config_process_type) * 128);
++ if (!config_process)
++ oom_failure();
+
+ read_config();
+ if (list_only) {
+@@ -133,9 +161,17 @@ int main(int argc, char *argv[])
+ config_process_number);
+
+ procdir_dirent = malloc(sizeof(struct dirent));
++ if (!procdir_dirent)
++ oom_failure();
+ proc_cmdline_str = (char *) malloc(1024);
++ if (!proc_cmdline_str)
++ oom_failure();
+ proc_cmdline_name = (char *) malloc(1024);
++ if (!proc_cmdline_name)
++ oom_failure();
+ regc = malloc(1024);
++ if (!regc)
++ oom_failure();
+
+ /* Catch signals */
+ signal(SIGTERM, got_signal);
+@@ -187,8 +223,19 @@ int main(int argc, char *argv[])
+ }
+
+ out_proc = fopen("/var/run/restartd.pid", "wt");
+- fprintf(out_proc, "%d", getpid());
+- fclose(out_proc);
++ if (!out_proc) {
++ syslog(LOG_ERR, "Failed to open /var/run/restartd.pid");
++ return -1;
++ }
++ if (fprintf(out_proc, "%d", getpid()) < 0) {
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd.pid. Exiting.");
++ return -1;
++ }
++ if (fclose(out_proc) < 0) { /* errors can happen when flushing the buffer */
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd.pid. Exiting.");
++ return -1;
++ }
++
+
+ while(1) {
+ if ((procdir_id = opendir("/proc")) == NULL) {
+@@ -237,16 +284,23 @@ int main(int argc, char *argv[])
+ now = time(NULL);
+
+ out_proc = fopen("/var/run/restartd", "wt");
++ if (!out_proc) {
++ syslog(LOG_ERR, "Failed to open /var/run/restartd.pid");
++ return -1;
++ }
+
+- fprintf(out_proc, "%s\n", ctime(&now));
++ if (fprintf(out_proc, "%s\n", ctime(&now)) < 0) {
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd. Exiting.");
++ return -1;
++ }
+
+ for(i=0; i<config_process_number; i++) {
+ if (strlen(config_process[i].processes) > 0) {
+ if (strlen(config_process[i].running) > 0) {
+ strcpy(config_process[i].status, "running");
+- syslog(LOG_INFO, "%s is running, executing '%s'",
++ /* syslog(LOG_INFO, "%s is running, executing '%s'",
+ config_process[i].name,
+- config_process[i].running);
++ config_process[i].running); */
+ system(config_process[i].running);
+ } else {
+ strcpy(config_process[i].status, "running");
+@@ -267,12 +321,18 @@ int main(int argc, char *argv[])
+ strcpy(config_process[i].status, "not running");
+ }
+
+- fprintf(out_proc, "%-12s %-12s %s\n",
+- config_process[i].name, config_process[i].status,
+- config_process[i].processes);
++ if (fprintf(out_proc, "%-12s %-12s %s\n",
++ config_process[i].name, config_process[i].status,
++ config_process[i].processes) < 0) {
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd. Exiting.");
++ return -1;
++ }
+ }
+
+- fclose(out_proc);
++ if (fclose(out_proc) < 0) {
++ syslog(LOG_ERR, "Failed to write to /var/run/restartd.pid. Exiting.");
++ return -1;
++ }
+
+ sleep(check_interval);
+ }
+--
+2.37.3
+
diff --git a/gnu/packages/patches/rust-cargo-edit-remove-ureq.patch b/gnu/packages/patches/rust-cargo-edit-remove-ureq.patch
new file mode 100644
index 0000000000..99c58103c7
--- /dev/null
+++ b/gnu/packages/patches/rust-cargo-edit-remove-ureq.patch
@@ -0,0 +1,33 @@
+This is modeled after the upstream commit which removes ureq as a dependency.
+
+diff --git a/Cargo.toml b/Cargo.toml
+index 5a787e1..27171c7 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -201,26 +201,3 @@ test-external-apis = []
+ upgrade = ["cli"]
+ vendored-libgit2 = ["git2/vendored-libgit2"]
+ vendored-openssl = ["git2/vendored-openssl"]
+-
+-[target."cfg(any(target_arch = \"x86_64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"aarch64\"))".dependencies.ureq]
+-version = "2.7.1"
+-features = [
+- "tls",
+- "json",
+- "socks",
+- "socks-proxy",
+-]
+-default-features = false
+-
+-[target."cfg(not(any(target_arch = \"x86_64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"aarch64\")))".dependencies.native-tls]
+-version = "^0.2"
+-
+-[target."cfg(not(any(target_arch = \"x86_64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"aarch64\")))".dependencies.ureq]
+-version = "2.7.1"
+-features = [
+- "native-tls",
+- "json",
+- "socks",
+- "socks-proxy",
+-]
+-default-features = false
diff --git a/gnu/packages/patches/rust-ring-0.16-missing-files.patch b/gnu/packages/patches/rust-ring-0.16-missing-files.patch
deleted file mode 100644
index fa2f94a801..0000000000
--- a/gnu/packages/patches/rust-ring-0.16-missing-files.patch
+++ /dev/null
@@ -1,2293 +0,0 @@
-These 4 files exist in the git repository for rust-ring, and are from
-the same commit where 0.16.20 is taken from. They were not added to the
-include list in Cargo.toml, so they were not added to the tarball.
-
----
- crypto/curve25519/make_curve25519_tables.py | 222 +++++
- crypto/fipsmodule/aes/asm/vpaes-armv7.pl | 896 ++++++++++++++++++
- crypto/fipsmodule/aes/asm/vpaes-armv8.pl | 837 ++++++++++++++++
- .../fipsmodule/modes/asm/ghash-neon-armv8.pl | 294 ++++++
- 4 files changed, 2249 insertions(+)
- create mode 100755 crypto/curve25519/make_curve25519_tables.py
- create mode 100644 crypto/fipsmodule/aes/asm/vpaes-armv7.pl
- create mode 100755 crypto/fipsmodule/aes/asm/vpaes-armv8.pl
- create mode 100644 crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
-
-diff --git a/crypto/curve25519/make_curve25519_tables.py b/crypto/curve25519/make_curve25519_tables.py
-new file mode 100755
-index 0000000..50dee2a
---- /dev/null
-+++ b/crypto/curve25519/make_curve25519_tables.py
-@@ -0,0 +1,222 @@
-+#!/usr/bin/env python
-+# coding=utf-8
-+# Copyright (c) 2020, Google Inc.
-+#
-+# Permission to use, copy, modify, and/or distribute this software for any
-+# purpose with or without fee is hereby granted, provided that the above
-+# copyright notice and this permission notice appear in all copies.
-+#
-+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-+# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-+# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-+# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+
-+import StringIO
-+import subprocess
-+
-+# Base field Z_p
-+p = 2**255 - 19
-+
-+def modp_inv(x):
-+ return pow(x, p-2, p)
-+
-+# Square root of -1
-+modp_sqrt_m1 = pow(2, (p-1) // 4, p)
-+
-+# Compute corresponding x-coordinate, with low bit corresponding to
-+# sign, or return None on failure
-+def recover_x(y, sign):
-+ if y >= p:
-+ return None
-+ x2 = (y*y-1) * modp_inv(d*y*y+1)
-+ if x2 == 0:
-+ if sign:
-+ return None
-+ else:
-+ return 0
-+
-+ # Compute square root of x2
-+ x = pow(x2, (p+3) // 8, p)
-+ if (x*x - x2) % p != 0:
-+ x = x * modp_sqrt_m1 % p
-+ if (x*x - x2) % p != 0:
-+ return None
-+
-+ if (x & 1) != sign:
-+ x = p - x
-+ return x
-+
-+# Curve constant
-+d = -121665 * modp_inv(121666) % p
-+
-+# Base point
-+g_y = 4 * modp_inv(5) % p
-+g_x = recover_x(g_y, 0)
-+
-+# Points are represented as affine tuples (x, y).
-+
-+def point_add(P, Q):
-+ x1, y1 = P
-+ x2, y2 = Q
-+ x3 = ((x1*y2 + y1*x2) * modp_inv(1 + d*x1*x2*y1*y2)) % p
-+ y3 = ((y1*y2 + x1*x2) * modp_inv(1 - d*x1*x2*y1*y2)) % p
-+ return (x3, y3)
-+
-+# Computes Q = s * P
-+def point_mul(s, P):
-+ Q = (0, 1) # Neutral element
-+ while s > 0:
-+ if s & 1:
-+ Q = point_add(Q, P)
-+ P = point_add(P, P)
-+ s >>= 1
-+ return Q
-+
-+def to_bytes(x):
-+ ret = bytearray(32)
-+ for i in range(len(ret)):
-+ ret[i] = x % 256
-+ x >>= 8
-+ assert x == 0
-+ return ret
-+
-+def to_ge_precomp(P):
-+ # typedef struct {
-+ # fe_loose yplusx;
-+ # fe_loose yminusx;
-+ # fe_loose xy2d;
-+ # } ge_precomp;
-+ x, y = P
-+ return ((y + x) % p, (y - x) % p, (x * y * 2 * d) % p)
-+
-+def to_base_25_5(x):
-+ limbs = (26, 25, 26, 25, 26, 25, 26, 25, 26, 25)
-+ ret = []
-+ for l in limbs:
-+ ret.append(x & ((1<<l) - 1))
-+ x >>= l
-+ assert x == 0
-+ return ret
-+
-+def to_base_51(x):
-+ ret = []
-+ for _ in range(5):
-+ ret.append(x & ((1<<51) - 1))
-+ x >>= 51
-+ assert x == 0
-+ return ret
-+
-+def to_literal(x):
-+ ret = "{{\n#if defined(BORINGSSL_CURVE25519_64BIT)\n"
-+ ret += ", ".join(map(str, to_base_51(x)))
-+ ret += "\n#else\n"
-+ ret += ", ".join(map(str, to_base_25_5(x)))
-+ ret += "\n#endif\n}}"
-+ return ret
-+
-+def main():
-+ d2 = (2 * d) % p
-+
-+ small_precomp = bytearray()
-+ for i in range(1, 16):
-+ s = (i&1) | ((i&2) << (64-1)) | ((i&4) << (128-2)) | ((i&8) << (192-3))
-+ P = point_mul(s, (g_x, g_y))
-+ small_precomp += to_bytes(P[0])
-+ small_precomp += to_bytes(P[1])
-+
-+ large_precomp = []
-+ for i in range(32):
-+ large_precomp.append([])
-+ for j in range(8):
-+ P = point_mul((j + 1) << (i * 8), (g_x, g_y))
-+ large_precomp[-1].append(to_ge_precomp(P))
-+
-+ bi_precomp = []
-+ for i in range(8):
-+ P = point_mul(2*i + 1, (g_x, g_y))
-+ bi_precomp.append(to_ge_precomp(P))
-+
-+
-+ buf = StringIO.StringIO()
-+ buf.write("""/* Copyright (c) 2020, Google Inc.
-+ *
-+ * Permission to use, copy, modify, and/or distribute this software for any
-+ * purpose with or without fee is hereby granted, provided that the above
-+ * copyright notice and this permission notice appear in all copies.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-+
-+// This file is generated from
-+// ./make_curve25519_tables.py > curve25519_tables.h
-+
-+
-+static const fe d = """)
-+ buf.write(to_literal(d))
-+ buf.write(""";
-+
-+static const fe sqrtm1 = """)
-+ buf.write(to_literal(modp_sqrt_m1))
-+ buf.write(""";
-+
-+static const fe d2 = """)
-+ buf.write(to_literal(d2))
-+ buf.write(""";
-+
-+#if defined(OPENSSL_SMALL)
-+
-+// This block of code replaces the standard base-point table with a much smaller
-+// one. The standard table is 30,720 bytes while this one is just 960.
-+//
-+// This table contains 15 pairs of group elements, (x, y), where each field
-+// element is serialised with |fe_tobytes|. If |i| is the index of the group
-+// element then consider i+1 as a four-bit number: (i₀, i₁, i₂, i₃) (where i₀
-+// is the most significant bit). The value of the group element is then:
-+// (i₀×2^192 + i₁×2^128 + i₂×2^64 + i₃)G, where G is the generator.
-+static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = {""")
-+ for i, b in enumerate(small_precomp):
-+ buf.write("0x%02x, " % b)
-+ buf.write("""
-+};
-+
-+#else
-+
-+// k25519Precomp[i][j] = (j+1)*256^i*B
-+static const ge_precomp k25519Precomp[32][8] = {
-+""")
-+ for child in large_precomp:
-+ buf.write("{\n")
-+ for val in child:
-+ buf.write("{\n")
-+ for term in val:
-+ buf.write(to_literal(term) + ",\n")
-+ buf.write("},\n")
-+ buf.write("},\n")
-+ buf.write("""};
-+
-+#endif // OPENSSL_SMALL
-+
-+// Bi[i] = (2*i+1)*B
-+static const ge_precomp Bi[8] = {
-+""")
-+ for val in bi_precomp:
-+ buf.write("{\n")
-+ for term in val:
-+ buf.write(to_literal(term) + ",\n")
-+ buf.write("},\n")
-+ buf.write("""};
-+""")
-+
-+ proc = subprocess.Popen(["clang-format"], stdin=subprocess.PIPE)
-+ proc.communicate(buf.getvalue())
-+
-+if __name__ == "__main__":
-+ main()
-diff --git a/crypto/fipsmodule/aes/asm/vpaes-armv7.pl b/crypto/fipsmodule/aes/asm/vpaes-armv7.pl
-new file mode 100644
-index 0000000..d36a97a
---- /dev/null
-+++ b/crypto/fipsmodule/aes/asm/vpaes-armv7.pl
-@@ -0,0 +1,896 @@
-+#! /usr/bin/env perl
-+# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
-+#
-+# Licensed under the OpenSSL license (the "License"). You may not use
-+# this file except in compliance with the License. You can obtain a copy
-+# in the file LICENSE in the source distribution or at
-+# https://www.openssl.org/source/license.html
-+
-+
-+######################################################################
-+## Constant-time SSSE3 AES core implementation.
-+## version 0.1
-+##
-+## By Mike Hamburg (Stanford University), 2009
-+## Public domain.
-+##
-+## For details see http://shiftleft.org/papers/vector_aes/ and
-+## http://crypto.stanford.edu/vpaes/.
-+##
-+######################################################################
-+# Adapted from the original x86_64 version and <appro@openssl.org>'s ARMv8
-+# version.
-+#
-+# armv7, aarch64, and x86_64 differ in several ways:
-+#
-+# * x86_64 SSSE3 instructions are two-address (destination operand is also a
-+# source), while NEON is three-address (destination operand is separate from
-+# two sources).
-+#
-+# * aarch64 has 32 SIMD registers available, while x86_64 and armv7 have 16.
-+#
-+# * x86_64 instructions can take memory references, while ARM is a load/store
-+# architecture. This means we sometimes need a spare register.
-+#
-+# * aarch64 and x86_64 have 128-bit byte shuffle instructions (tbl and pshufb),
-+# while armv7 only has a 64-bit byte shuffle (vtbl).
-+#
-+# This means this armv7 version must be a mix of both aarch64 and x86_64
-+# implementations. armv7 and aarch64 have analogous SIMD instructions, so we
-+# base the instructions on aarch64. However, we cannot use aarch64's register
-+# allocation. x86_64's register count matches, but x86_64 is two-address.
-+# vpaes-armv8.pl already accounts for this in the comments, which use
-+# three-address AVX instructions instead of the original SSSE3 ones. We base
-+# register usage on these comments, which are preserved in this file.
-+#
-+# This means we do not use separate input and output registers as in aarch64 and
-+# cannot pin as many constants in the preheat functions. However, the load/store
-+# architecture means we must still deviate from x86_64 in places.
-+#
-+# Next, we account for the byte shuffle instructions. vtbl takes 64-bit source
-+# and destination and 128-bit table. Fortunately, armv7 also allows addressing
-+# upper and lower halves of each 128-bit register. The lower half of q{N} is
-+# d{2*N}. The upper half is d{2*N+1}. Instead of the following non-existent
-+# instruction,
-+#
-+# vtbl.8 q0, q1, q2 @ Index each of q2's 16 bytes into q1. Store in q0.
-+#
-+# we write:
-+#
-+# vtbl.8 d0, q1, d4 @ Index each of d4's 8 bytes into q1. Store in d0.
-+# vtbl.8 d1, q1, d5 @ Index each of d5's 8 bytes into q1. Store in d1.
-+#
-+# For readability, we write d0 and d1 as q0#lo and q0#hi, respectively and
-+# post-process before outputting. (This is adapted from ghash-armv4.pl.) Note,
-+# however, that destination (q0) and table (q1) registers may no longer match.
-+# We adjust the register usage from x86_64 to avoid this. (Unfortunately, the
-+# two-address pshufb always matched these operands, so this is common.)
-+#
-+# This file also runs against the limit of ARMv7's ADR pseudo-instruction. ADR
-+# expands to an ADD or SUB of the pc register to find an address. That immediate
-+# must fit in ARM's encoding scheme: 8 bits of constant and 4 bits of rotation.
-+# This means larger values must be more aligned.
-+#
-+# ARM additionally has two encodings, ARM and Thumb mode. Our assembly files may
-+# use either encoding (do we actually need to support this?). In ARM mode, the
-+# distances get large enough to require 16-byte alignment. Moving constants
-+# closer to their use resolves most of this, but common constants in
-+# _vpaes_consts are used by the whole file. Affected ADR instructions must be
-+# placed at 8 mod 16 (the pc register is 8 ahead). Instructions with this
-+# constraint have been commented.
-+#
-+# For details on ARM's immediate value encoding scheme, see
-+# https://alisdair.mcdiarmid.org/arm-immediate-value-encoding/
-+#
-+# Finally, a summary of armv7 and aarch64 SIMD syntax differences:
-+#
-+# * armv7 prefixes SIMD instructions with 'v', while aarch64 does not.
-+#
-+# * armv7 SIMD registers are named like q0 (and d0 for the half-width ones).
-+# aarch64 names registers like v0, and denotes half-width operations in an
-+# instruction suffix (see below).
-+#
-+# * aarch64 embeds size and lane information in register suffixes. v0.16b is
-+# 16 bytes, v0.8h is eight u16s, v0.4s is four u32s, and v0.2d is two u64s.
-+# armv7 embeds the total size in the register name (see above) and the size of
-+# each element in an instruction suffix, which may look like vmov.i8,
-+# vshr.u8, or vtbl.8, depending on instruction.
-+
-+use strict;
-+
-+my $flavour = shift;
-+my $output;
-+while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
-+
-+$0 =~ m/(.*[\/\\])[^\/\\]+$/;
-+my $dir=$1;
-+my $xlate;
-+( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-+( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or
-+die "can't locate arm-xlate.pl";
-+
-+open OUT,"| \"$^X\" $xlate $flavour $output";
-+*STDOUT=*OUT;
-+
-+my $code = "";
-+
-+$code.=<<___;
-+.syntax unified
-+
-+.arch armv7-a
-+.fpu neon
-+
-+#if defined(__thumb2__)
-+.thumb
-+#else
-+.code 32
-+#endif
-+
-+.text
-+
-+.type _vpaes_consts,%object
-+.align 7 @ totally strategic alignment
-+_vpaes_consts:
-+.Lk_mc_forward: @ mc_forward
-+ .quad 0x0407060500030201, 0x0C0F0E0D080B0A09
-+ .quad 0x080B0A0904070605, 0x000302010C0F0E0D
-+ .quad 0x0C0F0E0D080B0A09, 0x0407060500030201
-+ .quad 0x000302010C0F0E0D, 0x080B0A0904070605
-+.Lk_mc_backward:@ mc_backward
-+ .quad 0x0605040702010003, 0x0E0D0C0F0A09080B
-+ .quad 0x020100030E0D0C0F, 0x0A09080B06050407
-+ .quad 0x0E0D0C0F0A09080B, 0x0605040702010003
-+ .quad 0x0A09080B06050407, 0x020100030E0D0C0F
-+.Lk_sr: @ sr
-+ .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908
-+ .quad 0x030E09040F0A0500, 0x0B06010C07020D08
-+ .quad 0x0F060D040B020900, 0x070E050C030A0108
-+ .quad 0x0B0E0104070A0D00, 0x0306090C0F020508
-+
-+@
-+@ "Hot" constants
-+@
-+.Lk_inv: @ inv, inva
-+ .quad 0x0E05060F0D080180, 0x040703090A0B0C02
-+ .quad 0x01040A060F0B0780, 0x030D0E0C02050809
-+.Lk_ipt: @ input transform (lo, hi)
-+ .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808
-+ .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81
-+.Lk_sbo: @ sbou, sbot
-+ .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878
-+ .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA
-+.Lk_sb1: @ sb1u, sb1t
-+ .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF
-+ .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544
-+.Lk_sb2: @ sb2u, sb2t
-+ .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A
-+ .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD
-+
-+.asciz "Vector Permutation AES for ARMv7 NEON, Mike Hamburg (Stanford University)"
-+.size _vpaes_consts,.-_vpaes_consts
-+.align 6
-+___
-+
-+{
-+my ($inp,$out,$key) = map("r$_", (0..2));
-+
-+my ($invlo,$invhi) = map("q$_", (10..11));
-+my ($sb1u,$sb1t,$sb2u,$sb2t) = map("q$_", (12..15));
-+
-+$code.=<<___;
-+@@
-+@@ _aes_preheat
-+@@
-+@@ Fills q9-q15 as specified below.
-+@@
-+.type _vpaes_preheat,%function
-+.align 4
-+_vpaes_preheat:
-+ adr r10, .Lk_inv
-+ vmov.i8 q9, #0x0f @ .Lk_s0F
-+ vld1.64 {q10,q11}, [r10]! @ .Lk_inv
-+ add r10, r10, #64 @ Skip .Lk_ipt, .Lk_sbo
-+ vld1.64 {q12,q13}, [r10]! @ .Lk_sb1
-+ vld1.64 {q14,q15}, [r10] @ .Lk_sb2
-+ bx lr
-+
-+@@
-+@@ _aes_encrypt_core
-+@@
-+@@ AES-encrypt q0.
-+@@
-+@@ Inputs:
-+@@ q0 = input
-+@@ q9-q15 as in _vpaes_preheat
-+@@ [$key] = scheduled keys
-+@@
-+@@ Output in q0
-+@@ Clobbers q1-q5, r8-r11
-+@@ Preserves q6-q8 so you get some local vectors
-+@@
-+@@
-+.type _vpaes_encrypt_core,%function
-+.align 4
-+_vpaes_encrypt_core:
-+ mov r9, $key
-+ ldr r8, [$key,#240] @ pull rounds
-+ adr r11, .Lk_ipt
-+ @ vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo
-+ @ vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi
-+ vld1.64 {q2, q3}, [r11]
-+ adr r11, .Lk_mc_forward+16
-+ vld1.64 {q5}, [r9]! @ vmovdqu (%r9), %xmm5 # round0 key
-+ vand q1, q0, q9 @ vpand %xmm9, %xmm0, %xmm1
-+ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0
-+ vtbl.8 q1#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm2, %xmm1
-+ vtbl.8 q1#hi, {q2}, q1#hi
-+ vtbl.8 q2#lo, {q3}, q0#lo @ vpshufb %xmm0, %xmm3, %xmm2
-+ vtbl.8 q2#hi, {q3}, q0#hi
-+ veor q0, q1, q5 @ vpxor %xmm5, %xmm1, %xmm0
-+ veor q0, q0, q2 @ vpxor %xmm2, %xmm0, %xmm0
-+
-+ @ .Lenc_entry ends with a bnz instruction which is normally paired with
-+ @ subs in .Lenc_loop.
-+ tst r8, r8
-+ b .Lenc_entry
-+
-+.align 4
-+.Lenc_loop:
-+ @ middle of middle round
-+ add r10, r11, #0x40
-+ vtbl.8 q4#lo, {$sb1t}, q2#lo @ vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u
-+ vtbl.8 q4#hi, {$sb1t}, q2#hi
-+ vld1.64 {q1}, [r11]! @ vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[]
-+ vtbl.8 q0#lo, {$sb1u}, q3#lo @ vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t
-+ vtbl.8 q0#hi, {$sb1u}, q3#hi
-+ veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ vtbl.8 q5#lo, {$sb2t}, q2#lo @ vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u
-+ vtbl.8 q5#hi, {$sb2t}, q2#hi
-+ veor q0, q0, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ vtbl.8 q2#lo, {$sb2u}, q3#lo @ vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t
-+ vtbl.8 q2#hi, {$sb2u}, q3#hi
-+ vld1.64 {q4}, [r10] @ vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[]
-+ vtbl.8 q3#lo, {q0}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm3 # 0 = B
-+ vtbl.8 q3#hi, {q0}, q1#hi
-+ veor q2, q2, q5 @ vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A
-+ @ Write to q5 instead of q0, so the table and destination registers do
-+ @ not overlap.
-+ vtbl.8 q5#lo, {q0}, q4#lo @ vpshufb %xmm4, %xmm0, %xmm0 # 3 = D
-+ vtbl.8 q5#hi, {q0}, q4#hi
-+ veor q3, q3, q2 @ vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B
-+ vtbl.8 q4#lo, {q3}, q1#lo @ vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C
-+ vtbl.8 q4#hi, {q3}, q1#hi
-+ @ Here we restore the original q0/q5 usage.
-+ veor q0, q5, q3 @ vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D
-+ and r11, r11, #~(1<<6) @ and \$0x30, %r11 # ... mod 4
-+ veor q0, q0, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D
-+ subs r8, r8, #1 @ nr--
-+
-+.Lenc_entry:
-+ @ top of round
-+ vand q1, q0, q9 @ vpand %xmm0, %xmm9, %xmm1 # 0 = k
-+ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ vtbl.8 q5#lo, {$invhi}, q1#lo @ vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k
-+ vtbl.8 q5#hi, {$invhi}, q1#hi
-+ veor q1, q1, q0 @ vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ vtbl.8 q3#lo, {$invlo}, q0#lo @ vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ vtbl.8 q3#hi, {$invlo}, q0#hi
-+ vtbl.8 q4#lo, {$invlo}, q1#lo @ vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ vtbl.8 q4#hi, {$invlo}, q1#hi
-+ veor q3, q3, q5 @ vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ vtbl.8 q2#lo, {$invlo}, q3#lo @ vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak
-+ vtbl.8 q2#hi, {$invlo}, q3#hi
-+ vtbl.8 q3#lo, {$invlo}, q4#lo @ vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak
-+ vtbl.8 q3#hi, {$invlo}, q4#hi
-+ veor q2, q2, q1 @ vpxor %xmm1, %xmm2, %xmm2 # 2 = io
-+ veor q3, q3, q0 @ vpxor %xmm0, %xmm3, %xmm3 # 3 = jo
-+ vld1.64 {q5}, [r9]! @ vmovdqu (%r9), %xmm5
-+ bne .Lenc_loop
-+
-+ @ middle of last round
-+ add r10, r11, #0x80
-+
-+ adr r11, .Lk_sbo
-+ @ Read to q1 instead of q4, so the vtbl.8 instruction below does not
-+ @ overlap table and destination registers.
-+ vld1.64 {q1}, [r11]! @ vmovdqa -0x60(%r10), %xmm4 # 3 : sbou
-+ vld1.64 {q0}, [r11] @ vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16
-+ vtbl.8 q4#lo, {q1}, q2#lo @ vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou
-+ vtbl.8 q4#hi, {q1}, q2#hi
-+ vld1.64 {q1}, [r10] @ vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[]
-+ @ Write to q2 instead of q0 below, to avoid overlapping table and
-+ @ destination registers.
-+ vtbl.8 q2#lo, {q0}, q3#lo @ vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t
-+ vtbl.8 q2#hi, {q0}, q3#hi
-+ veor q4, q4, q5 @ vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ veor q2, q2, q4 @ vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ @ Here we restore the original q0/q2 usage.
-+ vtbl.8 q0#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm0
-+ vtbl.8 q0#hi, {q2}, q1#hi
-+ bx lr
-+.size _vpaes_encrypt_core,.-_vpaes_encrypt_core
-+
-+.globl GFp_vpaes_encrypt
-+.type GFp_vpaes_encrypt,%function
-+.align 4
-+GFp_vpaes_encrypt:
-+ @ _vpaes_encrypt_core uses r8-r11. Round up to r7-r11 to maintain stack
-+ @ alignment.
-+ stmdb sp!, {r7-r11,lr}
-+ @ _vpaes_encrypt_core uses q4-q5 (d8-d11), which are callee-saved.
-+ vstmdb sp!, {d8-d11}
-+
-+ vld1.64 {q0}, [$inp]
-+ bl _vpaes_preheat
-+ bl _vpaes_encrypt_core
-+ vst1.64 {q0}, [$out]
-+
-+ vldmia sp!, {d8-d11}
-+ ldmia sp!, {r7-r11, pc} @ return
-+.size GFp_vpaes_encrypt,.-GFp_vpaes_encrypt
-+___
-+}
-+{
-+my ($inp,$bits,$out,$dir)=("r0","r1","r2","r3");
-+my ($rcon,$s0F,$invlo,$invhi,$s63) = map("q$_",(8..12));
-+
-+$code.=<<___;
-+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-+@@ @@
-+@@ AES key schedule @@
-+@@ @@
-+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-+
-+@ This function diverges from both x86_64 and armv7 in which constants are
-+@ pinned. x86_64 has a common preheat function for all operations. aarch64
-+@ separates them because it has enough registers to pin nearly all constants.
-+@ armv7 does not have enough registers, but needing explicit loads and stores
-+@ also complicates using x86_64's register allocation directly.
-+@
-+@ We pin some constants for convenience and leave q14 and q15 free to load
-+@ others on demand.
-+
-+@
-+@ Key schedule constants
-+@
-+.type _vpaes_key_consts,%object
-+.align 4
-+_vpaes_key_consts:
-+.Lk_rcon: @ rcon
-+ .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81
-+
-+.Lk_opt: @ output transform
-+ .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808
-+ .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0
-+.Lk_deskew: @ deskew tables: inverts the sbox's "skew"
-+ .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A
-+ .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77
-+.size _vpaes_key_consts,.-_vpaes_key_consts
-+
-+.type _vpaes_key_preheat,%function
-+.align 4
-+_vpaes_key_preheat:
-+ adr r11, .Lk_rcon
-+ vmov.i8 $s63, #0x5b @ .Lk_s63
-+ adr r10, .Lk_inv @ Must be aligned to 8 mod 16.
-+ vmov.i8 $s0F, #0x0f @ .Lk_s0F
-+ vld1.64 {$invlo,$invhi}, [r10] @ .Lk_inv
-+ vld1.64 {$rcon}, [r11] @ .Lk_rcon
-+ bx lr
-+.size _vpaes_key_preheat,.-_vpaes_key_preheat
-+
-+.type _vpaes_schedule_core,%function
-+.align 4
-+_vpaes_schedule_core:
-+ @ We only need to save lr, but ARM requires an 8-byte stack alignment,
-+ @ so save an extra register.
-+ stmdb sp!, {r3,lr}
-+
-+ bl _vpaes_key_preheat @ load the tables
-+
-+ adr r11, .Lk_ipt @ Must be aligned to 8 mod 16.
-+ vld1.64 {q0}, [$inp]! @ vmovdqu (%rdi), %xmm0 # load key (unaligned)
-+
-+ @ input transform
-+ @ Use q4 here rather than q3 so .Lschedule_am_decrypting does not
-+ @ overlap table and destination.
-+ vmov q4, q0 @ vmovdqa %xmm0, %xmm3
-+ bl _vpaes_schedule_transform
-+ adr r10, .Lk_sr @ Must be aligned to 8 mod 16.
-+ vmov q7, q0 @ vmovdqa %xmm0, %xmm7
-+
-+ add r8, r8, r10
-+
-+ @ encrypting, output zeroth round key after transform
-+ vst1.64 {q0}, [$out] @ vmovdqu %xmm0, (%rdx)
-+
-+ @ *ring*: Decryption removed.
-+
-+.Lschedule_go:
-+ cmp $bits, #192 @ cmp \$192, %esi
-+ bhi .Lschedule_256
-+ @ 128: fall though
-+
-+@@
-+@@ .schedule_128
-+@@
-+@@ 128-bit specific part of key schedule.
-+@@
-+@@ This schedule is really simple, because all its parts
-+@@ are accomplished by the subroutines.
-+@@
-+.Lschedule_128:
-+ mov $inp, #10 @ mov \$10, %esi
-+
-+.Loop_schedule_128:
-+ bl _vpaes_schedule_round
-+ subs $inp, $inp, #1 @ dec %esi
-+ beq .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle @ write output
-+ b .Loop_schedule_128
-+
-+@@
-+@@ .aes_schedule_256
-+@@
-+@@ 256-bit specific part of key schedule.
-+@@
-+@@ The structure here is very similar to the 128-bit
-+@@ schedule, but with an additional "low side" in
-+@@ q6. The low side's rounds are the same as the
-+@@ high side's, except no rcon and no rotation.
-+@@
-+.align 4
-+.Lschedule_256:
-+ vld1.64 {q0}, [$inp] @ vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned)
-+ bl _vpaes_schedule_transform @ input transform
-+ mov $inp, #7 @ mov \$7, %esi
-+
-+.Loop_schedule_256:
-+ bl _vpaes_schedule_mangle @ output low result
-+ vmov q6, q0 @ vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6
-+
-+ @ high round
-+ bl _vpaes_schedule_round
-+ subs $inp, $inp, #1 @ dec %esi
-+ beq .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle
-+
-+ @ low round. swap xmm7 and xmm6
-+ vdup.32 q0, q0#hi[1] @ vpshufd \$0xFF, %xmm0, %xmm0
-+ vmov.i8 q4, #0
-+ vmov q5, q7 @ vmovdqa %xmm7, %xmm5
-+ vmov q7, q6 @ vmovdqa %xmm6, %xmm7
-+ bl _vpaes_schedule_low_round
-+ vmov q7, q5 @ vmovdqa %xmm5, %xmm7
-+
-+ b .Loop_schedule_256
-+
-+@@
-+@@ .aes_schedule_mangle_last
-+@@
-+@@ Mangler for last round of key schedule
-+@@ Mangles q0
-+@@ when encrypting, outputs out(q0) ^ 63
-+@@ when decrypting, outputs unskew(q0)
-+@@
-+@@ Always called right before return... jumps to cleanup and exits
-+@@
-+.align 4
-+.Lschedule_mangle_last:
-+ @ schedule last round key from xmm0
-+ adr r11, .Lk_deskew @ lea .Lk_deskew(%rip),%r11 # prepare to deskew
-+
-+ @ encrypting
-+ vld1.64 {q1}, [r8] @ vmovdqa (%r8,%r10),%xmm1
-+ adr r11, .Lk_opt @ lea .Lk_opt(%rip), %r11 # prepare to output transform
-+ add $out, $out, #32 @ add \$32, %rdx
-+ vmov q2, q0
-+ vtbl.8 q0#lo, {q2}, q1#lo @ vpshufb %xmm1, %xmm0, %xmm0 # output permute
-+ vtbl.8 q0#hi, {q2}, q1#hi
-+
-+.Lschedule_mangle_last_dec:
-+ sub $out, $out, #16 @ add \$-16, %rdx
-+ veor q0, q0, $s63 @ vpxor .Lk_s63(%rip), %xmm0, %xmm0
-+ bl _vpaes_schedule_transform @ output transform
-+ vst1.64 {q0}, [$out] @ vmovdqu %xmm0, (%rdx) # save last key
-+
-+ @ cleanup
-+ veor q0, q0, q0 @ vpxor %xmm0, %xmm0, %xmm0
-+ veor q1, q1, q1 @ vpxor %xmm1, %xmm1, %xmm1
-+ veor q2, q2, q2 @ vpxor %xmm2, %xmm2, %xmm2
-+ veor q3, q3, q3 @ vpxor %xmm3, %xmm3, %xmm3
-+ veor q4, q4, q4 @ vpxor %xmm4, %xmm4, %xmm4
-+ veor q5, q5, q5 @ vpxor %xmm5, %xmm5, %xmm5
-+ veor q6, q6, q6 @ vpxor %xmm6, %xmm6, %xmm6
-+ veor q7, q7, q7 @ vpxor %xmm7, %xmm7, %xmm7
-+ ldmia sp!, {r3,pc} @ return
-+.size _vpaes_schedule_core,.-_vpaes_schedule_core
-+
-+@@
-+@@ .aes_schedule_round
-+@@
-+@@ Runs one main round of the key schedule on q0, q7
-+@@
-+@@ Specifically, runs subbytes on the high dword of q0
-+@@ then rotates it by one byte and xors into the low dword of
-+@@ q7.
-+@@
-+@@ Adds rcon from low byte of q8, then rotates q8 for
-+@@ next rcon.
-+@@
-+@@ Smears the dwords of q7 by xoring the low into the
-+@@ second low, result into third, result into highest.
-+@@
-+@@ Returns results in q7 = q0.
-+@@ Clobbers q1-q4, r11.
-+@@
-+.type _vpaes_schedule_round,%function
-+.align 4
-+_vpaes_schedule_round:
-+ @ extract rcon from xmm8
-+ vmov.i8 q4, #0 @ vpxor %xmm4, %xmm4, %xmm4
-+ vext.8 q1, $rcon, q4, #15 @ vpalignr \$15, %xmm8, %xmm4, %xmm1
-+ vext.8 $rcon, $rcon, $rcon, #15 @ vpalignr \$15, %xmm8, %xmm8, %xmm8
-+ veor q7, q7, q1 @ vpxor %xmm1, %xmm7, %xmm7
-+
-+ @ rotate
-+ vdup.32 q0, q0#hi[1] @ vpshufd \$0xFF, %xmm0, %xmm0
-+ vext.8 q0, q0, q0, #1 @ vpalignr \$1, %xmm0, %xmm0, %xmm0
-+
-+ @ fall through...
-+
-+ @ low round: same as high round, but no rotation and no rcon.
-+_vpaes_schedule_low_round:
-+ @ The x86_64 version pins .Lk_sb1 in %xmm13 and .Lk_sb1+16 in %xmm12.
-+ @ We pin other values in _vpaes_key_preheat, so load them now.
-+ adr r11, .Lk_sb1
-+ vld1.64 {q14,q15}, [r11]
-+
-+ @ smear xmm7
-+ vext.8 q1, q4, q7, #12 @ vpslldq \$4, %xmm7, %xmm1
-+ veor q7, q7, q1 @ vpxor %xmm1, %xmm7, %xmm7
-+ vext.8 q4, q4, q7, #8 @ vpslldq \$8, %xmm7, %xmm4
-+
-+ @ subbytes
-+ vand q1, q0, $s0F @ vpand %xmm9, %xmm0, %xmm1 # 0 = k
-+ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ veor q7, q7, q4 @ vpxor %xmm4, %xmm7, %xmm7
-+ vtbl.8 q2#lo, {$invhi}, q1#lo @ vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k
-+ vtbl.8 q2#hi, {$invhi}, q1#hi
-+ veor q1, q1, q0 @ vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ vtbl.8 q3#lo, {$invlo}, q0#lo @ vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ vtbl.8 q3#hi, {$invlo}, q0#hi
-+ veor q3, q3, q2 @ vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ vtbl.8 q4#lo, {$invlo}, q1#lo @ vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ vtbl.8 q4#hi, {$invlo}, q1#hi
-+ veor q7, q7, $s63 @ vpxor .Lk_s63(%rip), %xmm7, %xmm7
-+ vtbl.8 q3#lo, {$invlo}, q3#lo @ vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak
-+ vtbl.8 q3#hi, {$invlo}, q3#hi
-+ veor q4, q4, q2 @ vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ vtbl.8 q2#lo, {$invlo}, q4#lo @ vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak
-+ vtbl.8 q2#hi, {$invlo}, q4#hi
-+ veor q3, q3, q1 @ vpxor %xmm1, %xmm3, %xmm3 # 2 = io
-+ veor q2, q2, q0 @ vpxor %xmm0, %xmm2, %xmm2 # 3 = jo
-+ vtbl.8 q4#lo, {q15}, q3#lo @ vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou
-+ vtbl.8 q4#hi, {q15}, q3#hi
-+ vtbl.8 q1#lo, {q14}, q2#lo @ vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t
-+ vtbl.8 q1#hi, {q14}, q2#hi
-+ veor q1, q1, q4 @ vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output
-+
-+ @ add in smeared stuff
-+ veor q0, q1, q7 @ vpxor %xmm7, %xmm1, %xmm0
-+ veor q7, q1, q7 @ vmovdqa %xmm0, %xmm7
-+ bx lr
-+.size _vpaes_schedule_round,.-_vpaes_schedule_round
-+
-+@@
-+@@ .aes_schedule_transform
-+@@
-+@@ Linear-transform q0 according to tables at [r11]
-+@@
-+@@ Requires that q9 = 0x0F0F... as in preheat
-+@@ Output in q0
-+@@ Clobbers q1, q2, q14, q15
-+@@
-+.type _vpaes_schedule_transform,%function
-+.align 4
-+_vpaes_schedule_transform:
-+ vld1.64 {q14,q15}, [r11] @ vmovdqa (%r11), %xmm2 # lo
-+ @ vmovdqa 16(%r11), %xmm1 # hi
-+ vand q1, q0, $s0F @ vpand %xmm9, %xmm0, %xmm1
-+ vshr.u8 q0, q0, #4 @ vpsrlb \$4, %xmm0, %xmm0
-+ vtbl.8 q2#lo, {q14}, q1#lo @ vpshufb %xmm1, %xmm2, %xmm2
-+ vtbl.8 q2#hi, {q14}, q1#hi
-+ vtbl.8 q0#lo, {q15}, q0#lo @ vpshufb %xmm0, %xmm1, %xmm0
-+ vtbl.8 q0#hi, {q15}, q0#hi
-+ veor q0, q0, q2 @ vpxor %xmm2, %xmm0, %xmm0
-+ bx lr
-+.size _vpaes_schedule_transform,.-_vpaes_schedule_transform
-+
-+@@
-+@@ .aes_schedule_mangle
-+@@
-+@@ Mangles q0 from (basis-transformed) standard version
-+@@ to our version.
-+@@
-+@@ On encrypt,
-+@@ xor with 0x63
-+@@ multiply by circulant 0,1,1,1
-+@@ apply shiftrows transform
-+@@
-+@@ On decrypt,
-+@@ xor with 0x63
-+@@ multiply by "inverse mixcolumns" circulant E,B,D,9
-+@@ deskew
-+@@ apply shiftrows transform
-+@@
-+@@
-+@@ Writes out to [r2], and increments or decrements it
-+@@ Keeps track of round number mod 4 in r8
-+@@ Preserves q0
-+@@ Clobbers q1-q5
-+@@
-+.type _vpaes_schedule_mangle,%function
-+.align 4
-+_vpaes_schedule_mangle:
-+ tst $dir, $dir
-+ vmov q4, q0 @ vmovdqa %xmm0, %xmm4 # save xmm0 for later
-+ adr r11, .Lk_mc_forward @ Must be aligned to 8 mod 16.
-+ vld1.64 {q5}, [r11] @ vmovdqa .Lk_mc_forward(%rip),%xmm5
-+
-+ @ encrypting
-+ @ Write to q2 so we do not overlap table and destination below.
-+ veor q2, q0, $s63 @ vpxor .Lk_s63(%rip), %xmm0, %xmm4
-+ add $out, $out, #16 @ add \$16, %rdx
-+ vtbl.8 q4#lo, {q2}, q5#lo @ vpshufb %xmm5, %xmm4, %xmm4
-+ vtbl.8 q4#hi, {q2}, q5#hi
-+ vtbl.8 q1#lo, {q4}, q5#lo @ vpshufb %xmm5, %xmm4, %xmm1
-+ vtbl.8 q1#hi, {q4}, q5#hi
-+ vtbl.8 q3#lo, {q1}, q5#lo @ vpshufb %xmm5, %xmm1, %xmm3
-+ vtbl.8 q3#hi, {q1}, q5#hi
-+ veor q4, q4, q1 @ vpxor %xmm1, %xmm4, %xmm4
-+ vld1.64 {q1}, [r8] @ vmovdqa (%r8,%r10), %xmm1
-+ veor q3, q3, q4 @ vpxor %xmm4, %xmm3, %xmm3
-+
-+.Lschedule_mangle_both:
-+ @ Write to q2 so table and destination do not overlap.
-+ vtbl.8 q2#lo, {q3}, q1#lo @ vpshufb %xmm1, %xmm3, %xmm3
-+ vtbl.8 q2#hi, {q3}, q1#hi
-+ add r8, r8, #64-16 @ add \$-16, %r8
-+ and r8, r8, #~(1<<6) @ and \$0x30, %r8
-+ vst1.64 {q2}, [$out] @ vmovdqu %xmm3, (%rdx)
-+ bx lr
-+.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
-+
-+.globl GFp_vpaes_set_encrypt_key
-+.type GFp_vpaes_set_encrypt_key,%function
-+.align 4
-+GFp_vpaes_set_encrypt_key:
-+ stmdb sp!, {r7-r11, lr}
-+ vstmdb sp!, {d8-d15}
-+
-+ lsr r9, $bits, #5 @ shr \$5,%eax
-+ add r9, r9, #5 @ \$5,%eax
-+ str r9, [$out,#240] @ mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5;
-+
-+ mov $dir, #0 @ mov \$0,%ecx
-+ mov r8, #0x30 @ mov \$0x30,%r8d
-+ bl _vpaes_schedule_core
-+ eor r0, r0, r0
-+
-+ vldmia sp!, {d8-d15}
-+ ldmia sp!, {r7-r11, pc} @ return
-+.size GFp_vpaes_set_encrypt_key,.-GFp_vpaes_set_encrypt_key
-+___
-+}
-+
-+{
-+my ($out, $inp) = map("r$_", (0..1));
-+my ($s0F, $s63, $s63_raw, $mc_forward) = map("q$_", (9..12));
-+
-+$code .= <<___;
-+
-+@ Additional constants for converting to bsaes.
-+.type _vpaes_convert_consts,%object
-+.align 4
-+_vpaes_convert_consts:
-+@ .Lk_opt_then_skew applies skew(opt(x)) XOR 0x63, where skew is the linear
-+@ transform in the AES S-box. 0x63 is incorporated into the low half of the
-+@ table. This was computed with the following script:
-+@
-+@ def u64s_to_u128(x, y):
-+@ return x | (y << 64)
-+@ def u128_to_u64s(w):
-+@ return w & ((1<<64)-1), w >> 64
-+@ def get_byte(w, i):
-+@ return (w >> (i*8)) & 0xff
-+@ def apply_table(table, b):
-+@ lo = b & 0xf
-+@ hi = b >> 4
-+@ return get_byte(table[0], lo) ^ get_byte(table[1], hi)
-+@ def opt(b):
-+@ table = [
-+@ u64s_to_u128(0xFF9F4929D6B66000, 0xF7974121DEBE6808),
-+@ u64s_to_u128(0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0),
-+@ ]
-+@ return apply_table(table, b)
-+@ def rot_byte(b, n):
-+@ return 0xff & ((b << n) | (b >> (8-n)))
-+@ def skew(x):
-+@ return (x ^ rot_byte(x, 1) ^ rot_byte(x, 2) ^ rot_byte(x, 3) ^
-+@ rot_byte(x, 4))
-+@ table = [0, 0]
-+@ for i in range(16):
-+@ table[0] |= (skew(opt(i)) ^ 0x63) << (i*8)
-+@ table[1] |= skew(opt(i<<4)) << (i*8)
-+@ print("\t.quad\t0x%016x, 0x%016x" % u128_to_u64s(table[0]))
-+@ print("\t.quad\t0x%016x, 0x%016x" % u128_to_u64s(table[1]))
-+.Lk_opt_then_skew:
-+ .quad 0x9cb8436798bc4763, 0x6440bb9f6044bf9b
-+ .quad 0x1f30062936192f00, 0xb49bad829db284ab
-+
-+@ void GFp_vpaes_encrypt_key_to_bsaes(AES_KEY *bsaes, const AES_KEY *vpaes);
-+.globl GFp_vpaes_encrypt_key_to_bsaes
-+.type GFp_vpaes_encrypt_key_to_bsaes,%function
-+.align 4
-+GFp_vpaes_encrypt_key_to_bsaes:
-+ stmdb sp!, {r11, lr}
-+
-+ @ See _vpaes_schedule_core for the key schedule logic. In particular,
-+ @ _vpaes_schedule_transform(.Lk_ipt) (section 2.2 of the paper),
-+ @ _vpaes_schedule_mangle (section 4.3), and .Lschedule_mangle_last
-+ @ contain the transformations not in the bsaes representation. This
-+ @ function inverts those transforms.
-+ @
-+ @ Note also that bsaes-armv7.pl expects aes-armv4.pl's key
-+ @ representation, which does not match the other aes_nohw_*
-+ @ implementations. The ARM aes_nohw_* stores each 32-bit word
-+ @ byteswapped, as a convenience for (unsupported) big-endian ARM, at the
-+ @ cost of extra REV and VREV32 operations in little-endian ARM.
-+
-+ vmov.i8 $s0F, #0x0f @ Required by _vpaes_schedule_transform
-+ adr r2, .Lk_mc_forward @ Must be aligned to 8 mod 16.
-+ add r3, r2, 0x90 @ .Lk_sr+0x10-.Lk_mc_forward = 0x90 (Apple's toolchain doesn't support the expression)
-+
-+ vld1.64 {$mc_forward}, [r2]
-+ vmov.i8 $s63, #0x5b @ .Lk_s63 from vpaes-x86_64
-+ adr r11, .Lk_opt @ Must be aligned to 8 mod 16.
-+ vmov.i8 $s63_raw, #0x63 @ .LK_s63 without .Lk_ipt applied
-+
-+ @ vpaes stores one fewer round count than bsaes, but the number of keys
-+ @ is the same.
-+ ldr r2, [$inp,#240]
-+ add r2, r2, #1
-+ str r2, [$out,#240]
-+
-+ @ The first key is transformed with _vpaes_schedule_transform(.Lk_ipt).
-+ @ Invert this with .Lk_opt.
-+ vld1.64 {q0}, [$inp]!
-+ bl _vpaes_schedule_transform
-+ vrev32.8 q0, q0
-+ vst1.64 {q0}, [$out]!
-+
-+ @ The middle keys have _vpaes_schedule_transform(.Lk_ipt) applied,
-+ @ followed by _vpaes_schedule_mangle. _vpaes_schedule_mangle XORs 0x63,
-+ @ multiplies by the circulant 0,1,1,1, then applies ShiftRows.
-+.Loop_enc_key_to_bsaes:
-+ vld1.64 {q0}, [$inp]!
-+
-+ @ Invert the ShiftRows step (see .Lschedule_mangle_both). Note we cycle
-+ @ r3 in the opposite direction and start at .Lk_sr+0x10 instead of 0x30.
-+ @ We use r3 rather than r8 to avoid a callee-saved register.
-+ vld1.64 {q1}, [r3]
-+ vtbl.8 q2#lo, {q0}, q1#lo
-+ vtbl.8 q2#hi, {q0}, q1#hi
-+ add r3, r3, #16
-+ and r3, r3, #~(1<<6)
-+ vmov q0, q2
-+
-+ @ Handle the last key differently.
-+ subs r2, r2, #1
-+ beq .Loop_enc_key_to_bsaes_last
-+
-+ @ Multiply by the circulant. This is its own inverse.
-+ vtbl.8 q1#lo, {q0}, $mc_forward#lo
-+ vtbl.8 q1#hi, {q0}, $mc_forward#hi
-+ vmov q0, q1
-+ vtbl.8 q2#lo, {q1}, $mc_forward#lo
-+ vtbl.8 q2#hi, {q1}, $mc_forward#hi
-+ veor q0, q0, q2
-+ vtbl.8 q1#lo, {q2}, $mc_forward#lo
-+ vtbl.8 q1#hi, {q2}, $mc_forward#hi
-+ veor q0, q0, q1
-+
-+ @ XOR and finish.
-+ veor q0, q0, $s63
-+ bl _vpaes_schedule_transform
-+ vrev32.8 q0, q0
-+ vst1.64 {q0}, [$out]!
-+ b .Loop_enc_key_to_bsaes
-+
-+.Loop_enc_key_to_bsaes_last:
-+ @ The final key does not have a basis transform (note
-+ @ .Lschedule_mangle_last inverts the original transform). It only XORs
-+ @ 0x63 and applies ShiftRows. The latter was already inverted in the
-+ @ loop. Note that, because we act on the original representation, we use
-+ @ $s63_raw, not $s63.
-+ veor q0, q0, $s63_raw
-+ vrev32.8 q0, q0
-+ vst1.64 {q0}, [$out]
-+
-+ @ Wipe registers which contained key material.
-+ veor q0, q0, q0
-+ veor q1, q1, q1
-+ veor q2, q2, q2
-+
-+ ldmia sp!, {r11, pc} @ return
-+.size GFp_vpaes_encrypt_key_to_bsaes,.-GFp_vpaes_encrypt_key_to_bsaes
-+___
-+}
-+
-+{
-+# Register-passed parameters.
-+my ($inp, $out, $len, $key) = map("r$_", 0..3);
-+# Temporaries. _vpaes_encrypt_core already uses r8..r11, so overlap $ivec and
-+# $tmp. $ctr is r7 because it must be preserved across calls.
-+my ($ctr, $ivec, $tmp) = map("r$_", 7..9);
-+
-+# void vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len,
-+# const AES_KEY *key, const uint8_t ivec[16]);
-+$code .= <<___;
-+.globl GFp_vpaes_ctr32_encrypt_blocks
-+.type GFp_vpaes_ctr32_encrypt_blocks,%function
-+.align 4
-+GFp_vpaes_ctr32_encrypt_blocks:
-+ mov ip, sp
-+ stmdb sp!, {r7-r11, lr}
-+ @ This function uses q4-q7 (d8-d15), which are callee-saved.
-+ vstmdb sp!, {d8-d15}
-+
-+ cmp $len, #0
-+ @ $ivec is passed on the stack.
-+ ldr $ivec, [ip]
-+ beq .Lctr32_done
-+
-+ @ _vpaes_encrypt_core expects the key in r2, so swap $len and $key.
-+ mov $tmp, $key
-+ mov $key, $len
-+ mov $len, $tmp
-+___
-+my ($len, $key) = ($key, $len);
-+$code .= <<___;
-+
-+ @ Load the IV and counter portion.
-+ ldr $ctr, [$ivec, #12]
-+ vld1.8 {q7}, [$ivec]
-+
-+ bl _vpaes_preheat
-+ rev $ctr, $ctr @ The counter is big-endian.
-+
-+.Lctr32_loop:
-+ vmov q0, q7
-+ vld1.8 {q6}, [$inp]! @ Load input ahead of time
-+ bl _vpaes_encrypt_core
-+ veor q0, q0, q6 @ XOR input and result
-+ vst1.8 {q0}, [$out]!
-+ subs $len, $len, #1
-+ @ Update the counter.
-+ add $ctr, $ctr, #1
-+ rev $tmp, $ctr
-+ vmov.32 q7#hi[1], $tmp
-+ bne .Lctr32_loop
-+
-+.Lctr32_done:
-+ vldmia sp!, {d8-d15}
-+ ldmia sp!, {r7-r11, pc} @ return
-+.size GFp_vpaes_ctr32_encrypt_blocks,.-GFp_vpaes_ctr32_encrypt_blocks
-+___
-+}
-+
-+foreach (split("\n",$code)) {
-+ s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo;
-+ print $_,"\n";
-+}
-+
-+close STDOUT;
-diff --git a/crypto/fipsmodule/aes/asm/vpaes-armv8.pl b/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
-new file mode 100755
-index 0000000..b31bbb8
---- /dev/null
-+++ b/crypto/fipsmodule/aes/asm/vpaes-armv8.pl
-@@ -0,0 +1,837 @@
-+#! /usr/bin/env perl
-+# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
-+#
-+# Licensed under the OpenSSL license (the "License"). You may not use
-+# this file except in compliance with the License. You can obtain a copy
-+# in the file LICENSE in the source distribution or at
-+# https://www.openssl.org/source/license.html
-+
-+
-+######################################################################
-+## Constant-time SSSE3 AES core implementation.
-+## version 0.1
-+##
-+## By Mike Hamburg (Stanford University), 2009
-+## Public domain.
-+##
-+## For details see http://shiftleft.org/papers/vector_aes/ and
-+## http://crypto.stanford.edu/vpaes/.
-+##
-+######################################################################
-+# ARMv8 NEON adaptation by <appro@openssl.org>
-+#
-+# Reason for undertaken effort is that there is at least one popular
-+# SoC based on Cortex-A53 that doesn't have crypto extensions.
-+#
-+# CBC enc ECB enc/dec(*) [bit-sliced enc/dec]
-+# Cortex-A53 21.5 18.1/20.6 [17.5/19.8 ]
-+# Cortex-A57 36.0(**) 20.4/24.9(**) [14.4/16.6 ]
-+# X-Gene 45.9(**) 45.8/57.7(**) [33.1/37.6(**) ]
-+# Denver(***) 16.6(**) 15.1/17.8(**) [8.80/9.93 ]
-+# Apple A7(***) 22.7(**) 10.9/14.3 [8.45/10.0 ]
-+# Mongoose(***) 26.3(**) 21.0/25.0(**) [13.3/16.8 ]
-+#
-+# (*) ECB denotes approximate result for parallelizable modes
-+# such as CBC decrypt, CTR, etc.;
-+# (**) these results are worse than scalar compiler-generated
-+# code, but it's constant-time and therefore preferred;
-+# (***) presented for reference/comparison purposes;
-+
-+$flavour = shift;
-+while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
-+
-+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-+( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-+( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or
-+die "can't locate arm-xlate.pl";
-+
-+open OUT,"| \"$^X\" $xlate $flavour $output";
-+*STDOUT=*OUT;
-+
-+$code.=<<___;
-+#include <GFp/arm_arch.h>
-+
-+.section .rodata
-+
-+.type _vpaes_consts,%object
-+.align 7 // totally strategic alignment
-+_vpaes_consts:
-+.Lk_mc_forward: // mc_forward
-+ .quad 0x0407060500030201, 0x0C0F0E0D080B0A09
-+ .quad 0x080B0A0904070605, 0x000302010C0F0E0D
-+ .quad 0x0C0F0E0D080B0A09, 0x0407060500030201
-+ .quad 0x000302010C0F0E0D, 0x080B0A0904070605
-+.Lk_mc_backward:// mc_backward
-+ .quad 0x0605040702010003, 0x0E0D0C0F0A09080B
-+ .quad 0x020100030E0D0C0F, 0x0A09080B06050407
-+ .quad 0x0E0D0C0F0A09080B, 0x0605040702010003
-+ .quad 0x0A09080B06050407, 0x020100030E0D0C0F
-+.Lk_sr: // sr
-+ .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908
-+ .quad 0x030E09040F0A0500, 0x0B06010C07020D08
-+ .quad 0x0F060D040B020900, 0x070E050C030A0108
-+ .quad 0x0B0E0104070A0D00, 0x0306090C0F020508
-+
-+//
-+// "Hot" constants
-+//
-+.Lk_inv: // inv, inva
-+ .quad 0x0E05060F0D080180, 0x040703090A0B0C02
-+ .quad 0x01040A060F0B0780, 0x030D0E0C02050809
-+.Lk_ipt: // input transform (lo, hi)
-+ .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808
-+ .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81
-+.Lk_sbo: // sbou, sbot
-+ .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878
-+ .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA
-+.Lk_sb1: // sb1u, sb1t
-+ .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF
-+ .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544
-+.Lk_sb2: // sb2u, sb2t
-+ .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A
-+ .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD
-+
-+//
-+// Key schedule constants
-+//
-+.Lk_dksd: // decryption key schedule: invskew x*D
-+ .quad 0xFEB91A5DA3E44700, 0x0740E3A45A1DBEF9
-+ .quad 0x41C277F4B5368300, 0x5FDC69EAAB289D1E
-+.Lk_dksb: // decryption key schedule: invskew x*B
-+ .quad 0x9A4FCA1F8550D500, 0x03D653861CC94C99
-+ .quad 0x115BEDA7B6FC4A00, 0xD993256F7E3482C8
-+.Lk_dkse: // decryption key schedule: invskew x*E + 0x63
-+ .quad 0xD5031CCA1FC9D600, 0x53859A4C994F5086
-+ .quad 0xA23196054FDC7BE8, 0xCD5EF96A20B31487
-+.Lk_dks9: // decryption key schedule: invskew x*9
-+ .quad 0xB6116FC87ED9A700, 0x4AED933482255BFC
-+ .quad 0x4576516227143300, 0x8BB89FACE9DAFDCE
-+
-+.Lk_rcon: // rcon
-+ .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81
-+
-+.Lk_opt: // output transform
-+ .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808
-+ .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0
-+.Lk_deskew: // deskew tables: inverts the sbox's "skew"
-+ .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A
-+ .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77
-+
-+.asciz "Vector Permutation AES for ARMv8, Mike Hamburg (Stanford University)"
-+.size _vpaes_consts,.-_vpaes_consts
-+.align 6
-+
-+.text
-+___
-+
-+{
-+my ($inp,$out,$key) = map("x$_",(0..2));
-+
-+my ($invlo,$invhi,$iptlo,$ipthi,$sbou,$sbot) = map("v$_.16b",(18..23));
-+my ($sb1u,$sb1t,$sb2u,$sb2t) = map("v$_.16b",(24..27));
-+my ($sb9u,$sb9t,$sbdu,$sbdt,$sbbu,$sbbt,$sbeu,$sbet)=map("v$_.16b",(24..31));
-+
-+$code.=<<___;
-+##
-+## _aes_preheat
-+##
-+## Fills register %r10 -> .aes_consts (so you can -fPIC)
-+## and %xmm9-%xmm15 as specified below.
-+##
-+.type _vpaes_encrypt_preheat,%function
-+.align 4
-+_vpaes_encrypt_preheat:
-+ adrp x10, :pg_hi21:.Lk_inv
-+ add x10, x10, :lo12:.Lk_inv
-+ movi v17.16b, #0x0f
-+ ld1 {v18.2d-v19.2d}, [x10],#32 // .Lk_inv
-+ ld1 {v20.2d-v23.2d}, [x10],#64 // .Lk_ipt, .Lk_sbo
-+ ld1 {v24.2d-v27.2d}, [x10] // .Lk_sb1, .Lk_sb2
-+ ret
-+.size _vpaes_encrypt_preheat,.-_vpaes_encrypt_preheat
-+
-+##
-+## _aes_encrypt_core
-+##
-+## AES-encrypt %xmm0.
-+##
-+## Inputs:
-+## %xmm0 = input
-+## %xmm9-%xmm15 as in _vpaes_preheat
-+## (%rdx) = scheduled keys
-+##
-+## Output in %xmm0
-+## Clobbers %xmm1-%xmm5, %r9, %r10, %r11, %rax
-+## Preserves %xmm6 - %xmm8 so you get some local vectors
-+##
-+##
-+.type _vpaes_encrypt_core,%function
-+.align 4
-+_vpaes_encrypt_core:
-+ mov x9, $key
-+ ldr w8, [$key,#240] // pull rounds
-+ adrp x11, :pg_hi21:.Lk_mc_forward+16
-+ add x11, x11, :lo12:.Lk_mc_forward+16
-+ // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo
-+ ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key
-+ and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1
-+ ushr v0.16b, v7.16b, #4 // vpsrlb \$4, %xmm0, %xmm0
-+ tbl v1.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1
-+ // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi
-+ tbl v2.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2
-+ eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0
-+ eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0
-+ b .Lenc_entry
-+
-+.align 4
-+.Lenc_loop:
-+ // middle of middle round
-+ add x10, x11, #0x40
-+ tbl v4.16b, {$sb1t}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u
-+ ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[]
-+ tbl v0.16b, {$sb1u}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t
-+ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ tbl v5.16b, {$sb2t}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ tbl v2.16b, {$sb2u}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t
-+ ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[]
-+ tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B
-+ eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A
-+ tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D
-+ eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B
-+ tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C
-+ eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D
-+ and x11, x11, #~(1<<6) // and \$0x30, %r11 # ... mod 4
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D
-+ sub w8, w8, #1 // nr--
-+
-+.Lenc_entry:
-+ // top of round
-+ and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k
-+ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ tbl v5.16b, {$invhi}, v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k
-+ eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ tbl v3.16b, {$invlo}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ tbl v4.16b, {$invlo}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ tbl v2.16b, {$invlo}, v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak
-+ tbl v3.16b, {$invlo}, v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak
-+ eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io
-+ eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo
-+ ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5
-+ cbnz w8, .Lenc_loop
-+
-+ // middle of last round
-+ add x10, x11, #0x80
-+ // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo
-+ // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16
-+ tbl v4.16b, {$sbou}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou
-+ ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[]
-+ tbl v0.16b, {$sbot}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t
-+ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0
-+ ret
-+.size _vpaes_encrypt_core,.-_vpaes_encrypt_core
-+
-+.globl GFp_vpaes_encrypt
-+.type GFp_vpaes_encrypt,%function
-+.align 4
-+GFp_vpaes_encrypt:
-+ AARCH64_SIGN_LINK_REGISTER
-+ stp x29,x30,[sp,#-16]!
-+ add x29,sp,#0
-+
-+ ld1 {v7.16b}, [$inp]
-+ bl _vpaes_encrypt_preheat
-+ bl _vpaes_encrypt_core
-+ st1 {v0.16b}, [$out]
-+
-+ ldp x29,x30,[sp],#16
-+ AARCH64_VALIDATE_LINK_REGISTER
-+ ret
-+.size GFp_vpaes_encrypt,.-GFp_vpaes_encrypt
-+
-+.type _vpaes_encrypt_2x,%function
-+.align 4
-+_vpaes_encrypt_2x:
-+ mov x9, $key
-+ ldr w8, [$key,#240] // pull rounds
-+ adrp x11, :pg_hi21:.Lk_mc_forward+16
-+ add x11, x11, :lo12:.Lk_mc_forward+16
-+ // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo
-+ ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key
-+ and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1
-+ ushr v0.16b, v14.16b, #4 // vpsrlb \$4, %xmm0, %xmm0
-+ and v9.16b, v15.16b, v17.16b
-+ ushr v8.16b, v15.16b, #4
-+ tbl v1.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1
-+ tbl v9.16b, {$iptlo}, v9.16b
-+ // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi
-+ tbl v2.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2
-+ tbl v10.16b, {$ipthi}, v8.16b
-+ eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0
-+ eor v8.16b, v9.16b, v16.16b
-+ eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0
-+ eor v8.16b, v8.16b, v10.16b
-+ b .Lenc_2x_entry
-+
-+.align 4
-+.Lenc_2x_loop:
-+ // middle of middle round
-+ add x10, x11, #0x40
-+ tbl v4.16b, {$sb1t}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u
-+ tbl v12.16b, {$sb1t}, v10.16b
-+ ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[]
-+ tbl v0.16b, {$sb1u}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t
-+ tbl v8.16b, {$sb1u}, v11.16b
-+ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ eor v12.16b, v12.16b, v16.16b
-+ tbl v5.16b, {$sb2t}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u
-+ tbl v13.16b, {$sb2t}, v10.16b
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ eor v8.16b, v8.16b, v12.16b
-+ tbl v2.16b, {$sb2u}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t
-+ tbl v10.16b, {$sb2u}, v11.16b
-+ ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[]
-+ tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B
-+ tbl v11.16b, {v8.16b}, v1.16b
-+ eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A
-+ eor v10.16b, v10.16b, v13.16b
-+ tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D
-+ tbl v8.16b, {v8.16b}, v4.16b
-+ eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B
-+ eor v11.16b, v11.16b, v10.16b
-+ tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C
-+ tbl v12.16b, {v11.16b},v1.16b
-+ eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D
-+ eor v8.16b, v8.16b, v11.16b
-+ and x11, x11, #~(1<<6) // and \$0x30, %r11 # ... mod 4
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D
-+ eor v8.16b, v8.16b, v12.16b
-+ sub w8, w8, #1 // nr--
-+
-+.Lenc_2x_entry:
-+ // top of round
-+ and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k
-+ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ and v9.16b, v8.16b, v17.16b
-+ ushr v8.16b, v8.16b, #4
-+ tbl v5.16b, {$invhi},v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k
-+ tbl v13.16b, {$invhi},v9.16b
-+ eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ eor v9.16b, v9.16b, v8.16b
-+ tbl v3.16b, {$invlo},v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ tbl v11.16b, {$invlo},v8.16b
-+ tbl v4.16b, {$invlo},v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ tbl v12.16b, {$invlo},v9.16b
-+ eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ eor v11.16b, v11.16b, v13.16b
-+ eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ eor v12.16b, v12.16b, v13.16b
-+ tbl v2.16b, {$invlo},v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak
-+ tbl v10.16b, {$invlo},v11.16b
-+ tbl v3.16b, {$invlo},v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak
-+ tbl v11.16b, {$invlo},v12.16b
-+ eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io
-+ eor v10.16b, v10.16b, v9.16b
-+ eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo
-+ eor v11.16b, v11.16b, v8.16b
-+ ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5
-+ cbnz w8, .Lenc_2x_loop
-+
-+ // middle of last round
-+ add x10, x11, #0x80
-+ // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo
-+ // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16
-+ tbl v4.16b, {$sbou}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou
-+ tbl v12.16b, {$sbou}, v10.16b
-+ ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[]
-+ tbl v0.16b, {$sbot}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t
-+ tbl v8.16b, {$sbot}, v11.16b
-+ eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
-+ eor v12.16b, v12.16b, v16.16b
-+ eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A
-+ eor v8.16b, v8.16b, v12.16b
-+ tbl v0.16b, {v0.16b},v1.16b // vpshufb %xmm1, %xmm0, %xmm0
-+ tbl v1.16b, {v8.16b},v1.16b
-+ ret
-+.size _vpaes_encrypt_2x,.-_vpaes_encrypt_2x
-+___
-+}
-+{
-+my ($inp,$bits,$out,$dir)=("x0","w1","x2","w3");
-+my ($invlo,$invhi,$iptlo,$ipthi,$rcon) = map("v$_.16b",(18..21,8));
-+
-+$code.=<<___;
-+########################################################
-+## ##
-+## AES key schedule ##
-+## ##
-+########################################################
-+.type _vpaes_key_preheat,%function
-+.align 4
-+_vpaes_key_preheat:
-+ adrp x10, :pg_hi21:.Lk_inv
-+ add x10, x10, :lo12:.Lk_inv
-+ movi v16.16b, #0x5b // .Lk_s63
-+ adrp x11, :pg_hi21:.Lk_sb1
-+ add x11, x11, :lo12:.Lk_sb1
-+ movi v17.16b, #0x0f // .Lk_s0F
-+ ld1 {v18.2d-v21.2d}, [x10] // .Lk_inv, .Lk_ipt
-+ adrp x10, :pg_hi21:.Lk_dksd
-+ add x10, x10, :lo12:.Lk_dksd
-+ ld1 {v22.2d-v23.2d}, [x11] // .Lk_sb1
-+ adrp x11, :pg_hi21:.Lk_mc_forward
-+ add x11, x11, :lo12:.Lk_mc_forward
-+ ld1 {v24.2d-v27.2d}, [x10],#64 // .Lk_dksd, .Lk_dksb
-+ ld1 {v28.2d-v31.2d}, [x10],#64 // .Lk_dkse, .Lk_dks9
-+ ld1 {v8.2d}, [x10] // .Lk_rcon
-+ ld1 {v9.2d}, [x11] // .Lk_mc_forward[0]
-+ ret
-+.size _vpaes_key_preheat,.-_vpaes_key_preheat
-+
-+.type _vpaes_schedule_core,%function
-+.align 4
-+_vpaes_schedule_core:
-+ AARCH64_SIGN_LINK_REGISTER
-+ stp x29, x30, [sp,#-16]!
-+ add x29,sp,#0
-+
-+ bl _vpaes_key_preheat // load the tables
-+
-+ ld1 {v0.16b}, [$inp],#16 // vmovdqu (%rdi), %xmm0 # load key (unaligned)
-+
-+ // input transform
-+ mov v3.16b, v0.16b // vmovdqa %xmm0, %xmm3
-+ bl _vpaes_schedule_transform
-+ mov v7.16b, v0.16b // vmovdqa %xmm0, %xmm7
-+
-+ adrp x10, :pg_hi21:.Lk_sr // lea .Lk_sr(%rip),%r10
-+ add x10, x10, :lo12:.Lk_sr
-+
-+ add x8, x8, x10
-+
-+ // encrypting, output zeroth round key after transform
-+ st1 {v0.2d}, [$out] // vmovdqu %xmm0, (%rdx)
-+
-+ cmp $bits, #192 // cmp \$192, %esi
-+ b.hi .Lschedule_256
-+ b.eq .Lschedule_192
-+ // 128: fall though
-+
-+##
-+## .schedule_128
-+##
-+## 128-bit specific part of key schedule.
-+##
-+## This schedule is really simple, because all its parts
-+## are accomplished by the subroutines.
-+##
-+.Lschedule_128:
-+ mov $inp, #10 // mov \$10, %esi
-+
-+.Loop_schedule_128:
-+ sub $inp, $inp, #1 // dec %esi
-+ bl _vpaes_schedule_round
-+ cbz $inp, .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle // write output
-+ b .Loop_schedule_128
-+
-+##
-+## .aes_schedule_192
-+##
-+## 192-bit specific part of key schedule.
-+##
-+## The main body of this schedule is the same as the 128-bit
-+## schedule, but with more smearing. The long, high side is
-+## stored in %xmm7 as before, and the short, low side is in
-+## the high bits of %xmm6.
-+##
-+## This schedule is somewhat nastier, however, because each
-+## round produces 192 bits of key material, or 1.5 round keys.
-+## Therefore, on each cycle we do 2 rounds and produce 3 round
-+## keys.
-+##
-+.align 4
-+.Lschedule_192:
-+ sub $inp, $inp, #8
-+ ld1 {v0.16b}, [$inp] // vmovdqu 8(%rdi),%xmm0 # load key part 2 (very unaligned)
-+ bl _vpaes_schedule_transform // input transform
-+ mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save short part
-+ eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 # clear 4
-+ ins v6.d[0], v4.d[0] // vmovhlps %xmm4, %xmm6, %xmm6 # clobber low side with zeros
-+ mov $inp, #4 // mov \$4, %esi
-+
-+.Loop_schedule_192:
-+ sub $inp, $inp, #1 // dec %esi
-+ bl _vpaes_schedule_round
-+ ext v0.16b, v6.16b, v0.16b, #8 // vpalignr \$8,%xmm6,%xmm0,%xmm0
-+ bl _vpaes_schedule_mangle // save key n
-+ bl _vpaes_schedule_192_smear
-+ bl _vpaes_schedule_mangle // save key n+1
-+ bl _vpaes_schedule_round
-+ cbz $inp, .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle // save key n+2
-+ bl _vpaes_schedule_192_smear
-+ b .Loop_schedule_192
-+
-+##
-+## .aes_schedule_256
-+##
-+## 256-bit specific part of key schedule.
-+##
-+## The structure here is very similar to the 128-bit
-+## schedule, but with an additional "low side" in
-+## %xmm6. The low side's rounds are the same as the
-+## high side's, except no rcon and no rotation.
-+##
-+.align 4
-+.Lschedule_256:
-+ ld1 {v0.16b}, [$inp] // vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned)
-+ bl _vpaes_schedule_transform // input transform
-+ mov $inp, #7 // mov \$7, %esi
-+
-+.Loop_schedule_256:
-+ sub $inp, $inp, #1 // dec %esi
-+ bl _vpaes_schedule_mangle // output low result
-+ mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6
-+
-+ // high round
-+ bl _vpaes_schedule_round
-+ cbz $inp, .Lschedule_mangle_last
-+ bl _vpaes_schedule_mangle
-+
-+ // low round. swap xmm7 and xmm6
-+ dup v0.4s, v0.s[3] // vpshufd \$0xFF, %xmm0, %xmm0
-+ movi v4.16b, #0
-+ mov v5.16b, v7.16b // vmovdqa %xmm7, %xmm5
-+ mov v7.16b, v6.16b // vmovdqa %xmm6, %xmm7
-+ bl _vpaes_schedule_low_round
-+ mov v7.16b, v5.16b // vmovdqa %xmm5, %xmm7
-+
-+ b .Loop_schedule_256
-+
-+##
-+## .aes_schedule_mangle_last
-+##
-+## Mangler for last round of key schedule
-+## Mangles %xmm0
-+## when encrypting, outputs out(%xmm0) ^ 63
-+## when decrypting, outputs unskew(%xmm0)
-+##
-+## Always called right before return... jumps to cleanup and exits
-+##
-+.align 4
-+.Lschedule_mangle_last:
-+ // schedule last round key from xmm0
-+ adrp x11, :pg_hi21:.Lk_deskew // lea .Lk_deskew(%rip),%r11 # prepare to deskew
-+ add x11, x11, :lo12:.Lk_deskew
-+
-+ cbnz $dir, .Lschedule_mangle_last_dec
-+
-+ // encrypting
-+ ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10),%xmm1
-+ adrp x11, :pg_hi21:.Lk_opt // lea .Lk_opt(%rip), %r11 # prepare to output transform
-+ add x11, x11, :lo12:.Lk_opt
-+ add $out, $out, #32 // add \$32, %rdx
-+ tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 # output permute
-+
-+.Lschedule_mangle_last_dec:
-+ ld1 {v20.2d-v21.2d}, [x11] // reload constants
-+ sub $out, $out, #16 // add \$-16, %rdx
-+ eor v0.16b, v0.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm0, %xmm0
-+ bl _vpaes_schedule_transform // output transform
-+ st1 {v0.2d}, [$out] // vmovdqu %xmm0, (%rdx) # save last key
-+
-+ // cleanup
-+ eor v0.16b, v0.16b, v0.16b // vpxor %xmm0, %xmm0, %xmm0
-+ eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1
-+ eor v2.16b, v2.16b, v2.16b // vpxor %xmm2, %xmm2, %xmm2
-+ eor v3.16b, v3.16b, v3.16b // vpxor %xmm3, %xmm3, %xmm3
-+ eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4
-+ eor v5.16b, v5.16b, v5.16b // vpxor %xmm5, %xmm5, %xmm5
-+ eor v6.16b, v6.16b, v6.16b // vpxor %xmm6, %xmm6, %xmm6
-+ eor v7.16b, v7.16b, v7.16b // vpxor %xmm7, %xmm7, %xmm7
-+ ldp x29, x30, [sp],#16
-+ AARCH64_VALIDATE_LINK_REGISTER
-+ ret
-+.size _vpaes_schedule_core,.-_vpaes_schedule_core
-+
-+##
-+## .aes_schedule_192_smear
-+##
-+## Smear the short, low side in the 192-bit key schedule.
-+##
-+## Inputs:
-+## %xmm7: high side, b a x y
-+## %xmm6: low side, d c 0 0
-+## %xmm13: 0
-+##
-+## Outputs:
-+## %xmm6: b+c+d b+c 0 0
-+## %xmm0: b+c+d b+c b a
-+##
-+.type _vpaes_schedule_192_smear,%function
-+.align 4
-+_vpaes_schedule_192_smear:
-+ movi v1.16b, #0
-+ dup v0.4s, v7.s[3]
-+ ins v1.s[3], v6.s[2] // vpshufd \$0x80, %xmm6, %xmm1 # d c 0 0 -> c 0 0 0
-+ ins v0.s[0], v7.s[2] // vpshufd \$0xFE, %xmm7, %xmm0 # b a _ _ -> b b b a
-+ eor v6.16b, v6.16b, v1.16b // vpxor %xmm1, %xmm6, %xmm6 # -> c+d c 0 0
-+ eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1
-+ eor v6.16b, v6.16b, v0.16b // vpxor %xmm0, %xmm6, %xmm6 # -> b+c+d b+c b a
-+ mov v0.16b, v6.16b // vmovdqa %xmm6, %xmm0
-+ ins v6.d[0], v1.d[0] // vmovhlps %xmm1, %xmm6, %xmm6 # clobber low side with zeros
-+ ret
-+.size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
-+
-+##
-+## .aes_schedule_round
-+##
-+## Runs one main round of the key schedule on %xmm0, %xmm7
-+##
-+## Specifically, runs subbytes on the high dword of %xmm0
-+## then rotates it by one byte and xors into the low dword of
-+## %xmm7.
-+##
-+## Adds rcon from low byte of %xmm8, then rotates %xmm8 for
-+## next rcon.
-+##
-+## Smears the dwords of %xmm7 by xoring the low into the
-+## second low, result into third, result into highest.
-+##
-+## Returns results in %xmm7 = %xmm0.
-+## Clobbers %xmm1-%xmm4, %r11.
-+##
-+.type _vpaes_schedule_round,%function
-+.align 4
-+_vpaes_schedule_round:
-+ // extract rcon from xmm8
-+ movi v4.16b, #0 // vpxor %xmm4, %xmm4, %xmm4
-+ ext v1.16b, $rcon, v4.16b, #15 // vpalignr \$15, %xmm8, %xmm4, %xmm1
-+ ext $rcon, $rcon, $rcon, #15 // vpalignr \$15, %xmm8, %xmm8, %xmm8
-+ eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7
-+
-+ // rotate
-+ dup v0.4s, v0.s[3] // vpshufd \$0xFF, %xmm0, %xmm0
-+ ext v0.16b, v0.16b, v0.16b, #1 // vpalignr \$1, %xmm0, %xmm0, %xmm0
-+
-+ // fall through...
-+
-+ // low round: same as high round, but no rotation and no rcon.
-+_vpaes_schedule_low_round:
-+ // smear xmm7
-+ ext v1.16b, v4.16b, v7.16b, #12 // vpslldq \$4, %xmm7, %xmm1
-+ eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7
-+ ext v4.16b, v4.16b, v7.16b, #8 // vpslldq \$8, %xmm7, %xmm4
-+
-+ // subbytes
-+ and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k
-+ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0 # 1 = i
-+ eor v7.16b, v7.16b, v4.16b // vpxor %xmm4, %xmm7, %xmm7
-+ tbl v2.16b, {$invhi}, v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k
-+ eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j
-+ tbl v3.16b, {$invlo}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
-+ eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
-+ tbl v4.16b, {$invlo}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
-+ eor v7.16b, v7.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm7, %xmm7
-+ tbl v3.16b, {$invlo}, v3.16b // vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak
-+ eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
-+ tbl v2.16b, {$invlo}, v4.16b // vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak
-+ eor v3.16b, v3.16b, v1.16b // vpxor %xmm1, %xmm3, %xmm3 # 2 = io
-+ eor v2.16b, v2.16b, v0.16b // vpxor %xmm0, %xmm2, %xmm2 # 3 = jo
-+ tbl v4.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou
-+ tbl v1.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t
-+ eor v1.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output
-+
-+ // add in smeared stuff
-+ eor v0.16b, v1.16b, v7.16b // vpxor %xmm7, %xmm1, %xmm0
-+ eor v7.16b, v1.16b, v7.16b // vmovdqa %xmm0, %xmm7
-+ ret
-+.size _vpaes_schedule_round,.-_vpaes_schedule_round
-+
-+##
-+## .aes_schedule_transform
-+##
-+## Linear-transform %xmm0 according to tables at (%r11)
-+##
-+## Requires that %xmm9 = 0x0F0F... as in preheat
-+## Output in %xmm0
-+## Clobbers %xmm1, %xmm2
-+##
-+.type _vpaes_schedule_transform,%function
-+.align 4
-+_vpaes_schedule_transform:
-+ and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1
-+ ushr v0.16b, v0.16b, #4 // vpsrlb \$4, %xmm0, %xmm0
-+ // vmovdqa (%r11), %xmm2 # lo
-+ tbl v2.16b, {$iptlo}, v1.16b // vpshufb %xmm1, %xmm2, %xmm2
-+ // vmovdqa 16(%r11), %xmm1 # hi
-+ tbl v0.16b, {$ipthi}, v0.16b // vpshufb %xmm0, %xmm1, %xmm0
-+ eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0
-+ ret
-+.size _vpaes_schedule_transform,.-_vpaes_schedule_transform
-+
-+##
-+## .aes_schedule_mangle
-+##
-+## Mangle xmm0 from (basis-transformed) standard version
-+## to our version.
-+##
-+## On encrypt,
-+## xor with 0x63
-+## multiply by circulant 0,1,1,1
-+## apply shiftrows transform
-+##
-+## On decrypt,
-+## xor with 0x63
-+## multiply by "inverse mixcolumns" circulant E,B,D,9
-+## deskew
-+## apply shiftrows transform
-+##
-+##
-+## Writes out to (%rdx), and increments or decrements it
-+## Keeps track of round number mod 4 in %r8
-+## Preserves xmm0
-+## Clobbers xmm1-xmm5
-+##
-+.type _vpaes_schedule_mangle,%function
-+.align 4
-+_vpaes_schedule_mangle:
-+ mov v4.16b, v0.16b // vmovdqa %xmm0, %xmm4 # save xmm0 for later
-+ // vmovdqa .Lk_mc_forward(%rip),%xmm5
-+
-+ // encrypting
-+ eor v4.16b, v0.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm0, %xmm4
-+ add $out, $out, #16 // add \$16, %rdx
-+ tbl v4.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm4
-+ tbl v1.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm1
-+ tbl v3.16b, {v1.16b}, v9.16b // vpshufb %xmm5, %xmm1, %xmm3
-+ eor v4.16b, v4.16b, v1.16b // vpxor %xmm1, %xmm4, %xmm4
-+ ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1
-+ eor v3.16b, v3.16b, v4.16b // vpxor %xmm4, %xmm3, %xmm3
-+
-+.Lschedule_mangle_both:
-+ tbl v3.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3
-+ add x8, x8, #64-16 // add \$-16, %r8
-+ and x8, x8, #~(1<<6) // and \$0x30, %r8
-+ st1 {v3.2d}, [$out] // vmovdqu %xmm3, (%rdx)
-+ ret
-+.size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
-+
-+.globl GFp_vpaes_set_encrypt_key
-+.type GFp_vpaes_set_encrypt_key,%function
-+.align 4
-+GFp_vpaes_set_encrypt_key:
-+ AARCH64_SIGN_LINK_REGISTER
-+ stp x29,x30,[sp,#-16]!
-+ add x29,sp,#0
-+ stp d8,d9,[sp,#-16]! // ABI spec says so
-+
-+ lsr w9, $bits, #5 // shr \$5,%eax
-+ add w9, w9, #5 // \$5,%eax
-+ str w9, [$out,#240] // mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5;
-+
-+ mov $dir, #0 // mov \$0,%ecx
-+ mov x8, #0x30 // mov \$0x30,%r8d
-+ bl _vpaes_schedule_core
-+ eor x0, x0, x0
-+
-+ ldp d8,d9,[sp],#16
-+ ldp x29,x30,[sp],#16
-+ AARCH64_VALIDATE_LINK_REGISTER
-+ ret
-+.size GFp_vpaes_set_encrypt_key,.-GFp_vpaes_set_encrypt_key
-+___
-+}
-+{
-+my ($inp,$out,$len,$key,$ivec) = map("x$_",(0..4));
-+my ($ctr, $ctr_tmp) = ("w6", "w7");
-+
-+# void GFp_vpaes_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t len,
-+# const AES_KEY *key, const uint8_t ivec[16]);
-+$code.=<<___;
-+.globl GFp_vpaes_ctr32_encrypt_blocks
-+.type GFp_vpaes_ctr32_encrypt_blocks,%function
-+.align 4
-+GFp_vpaes_ctr32_encrypt_blocks:
-+ AARCH64_SIGN_LINK_REGISTER
-+ stp x29,x30,[sp,#-16]!
-+ add x29,sp,#0
-+ stp d8,d9,[sp,#-16]! // ABI spec says so
-+ stp d10,d11,[sp,#-16]!
-+ stp d12,d13,[sp,#-16]!
-+ stp d14,d15,[sp,#-16]!
-+
-+ cbz $len, .Lctr32_done
-+
-+ // Note, unlike the other functions, $len here is measured in blocks,
-+ // not bytes.
-+ mov x17, $len
-+ mov x2, $key
-+
-+ // Load the IV and counter portion.
-+ ldr $ctr, [$ivec, #12]
-+ ld1 {v7.16b}, [$ivec]
-+
-+ bl _vpaes_encrypt_preheat
-+ tst x17, #1
-+ rev $ctr, $ctr // The counter is big-endian.
-+ b.eq .Lctr32_prep_loop
-+
-+ // Handle one block so the remaining block count is even for
-+ // _vpaes_encrypt_2x.
-+ ld1 {v6.16b}, [$inp], #16 // Load input ahead of time
-+ bl _vpaes_encrypt_core
-+ eor v0.16b, v0.16b, v6.16b // XOR input and result
-+ st1 {v0.16b}, [$out], #16
-+ subs x17, x17, #1
-+ // Update the counter.
-+ add $ctr, $ctr, #1
-+ rev $ctr_tmp, $ctr
-+ mov v7.s[3], $ctr_tmp
-+ b.ls .Lctr32_done
-+
-+.Lctr32_prep_loop:
-+ // _vpaes_encrypt_core takes its input from v7, while _vpaes_encrypt_2x
-+ // uses v14 and v15.
-+ mov v15.16b, v7.16b
-+ mov v14.16b, v7.16b
-+ add $ctr, $ctr, #1
-+ rev $ctr_tmp, $ctr
-+ mov v15.s[3], $ctr_tmp
-+
-+.Lctr32_loop:
-+ ld1 {v6.16b,v7.16b}, [$inp], #32 // Load input ahead of time
-+ bl _vpaes_encrypt_2x
-+ eor v0.16b, v0.16b, v6.16b // XOR input and result
-+ eor v1.16b, v1.16b, v7.16b // XOR input and result (#2)
-+ st1 {v0.16b,v1.16b}, [$out], #32
-+ subs x17, x17, #2
-+ // Update the counter.
-+ add $ctr_tmp, $ctr, #1
-+ add $ctr, $ctr, #2
-+ rev $ctr_tmp, $ctr_tmp
-+ mov v14.s[3], $ctr_tmp
-+ rev $ctr_tmp, $ctr
-+ mov v15.s[3], $ctr_tmp
-+ b.hi .Lctr32_loop
-+
-+.Lctr32_done:
-+ ldp d14,d15,[sp],#16
-+ ldp d12,d13,[sp],#16
-+ ldp d10,d11,[sp],#16
-+ ldp d8,d9,[sp],#16
-+ ldp x29,x30,[sp],#16
-+ AARCH64_VALIDATE_LINK_REGISTER
-+ ret
-+.size GFp_vpaes_ctr32_encrypt_blocks,.-GFp_vpaes_ctr32_encrypt_blocks
-+___
-+}
-+
-+print $code;
-+
-+close STDOUT or die "error closing STDOUT";
-diff --git a/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl b/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
-new file mode 100644
-index 0000000..7e52ad6
---- /dev/null
-+++ b/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl
-@@ -0,0 +1,294 @@
-+#! /usr/bin/env perl
-+# Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved.
-+#
-+# Licensed under the OpenSSL license (the "License"). You may not use
-+# this file except in compliance with the License. You can obtain a copy
-+# in the file LICENSE in the source distribution or at
-+# https://www.openssl.org/source/license.html
-+
-+# ====================================================================
-+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-+# project. The module is, however, dual licensed under OpenSSL and
-+# CRYPTOGAMS licenses depending on where you obtain it. For further
-+# details see http://www.openssl.org/~appro/cryptogams/.
-+# ====================================================================
-+
-+# This file was adapted to AArch64 from the 32-bit version in ghash-armv4.pl. It
-+# implements the multiplication algorithm described in:
-+#
-+# Câmara, D.; Gouvêa, C. P. L.; López, J. & Dahab, R.: Fast Software
-+# Polynomial Multiplication on ARM Processors using the NEON Engine.
-+#
-+# http://conradoplg.cryptoland.net/files/2010/12/mocrysen13.pdf
-+#
-+# The main distinction to keep in mind between 32-bit NEON and AArch64 SIMD is
-+# AArch64 cannot compute over the upper halves of SIMD registers. In 32-bit
-+# NEON, the low and high halves of the 128-bit register q0 are accessible as
-+# 64-bit registers d0 and d1, respectively. In AArch64, dN is the lower half of
-+# vN. Where the 32-bit version would use the upper half, this file must keep
-+# halves in separate registers.
-+#
-+# The other distinction is in syntax. 32-bit NEON embeds lane information in the
-+# instruction name, while AArch64 uses suffixes on the registers. For instance,
-+# left-shifting 64-bit lanes of a SIMD register in 32-bit would be written:
-+#
-+# vshl.i64 q0, q0, #1
-+#
-+# in 64-bit, it would be written:
-+#
-+# shl v0.2d, v0.2d, #1
-+#
-+# See Programmer's Guide for ARMv8-A, section 7 for details.
-+# http://infocenter.arm.com/help/topic/com.arm.doc.den0024a/DEN0024A_v8_architecture_PG.pdf
-+#
-+# Finally, note the 8-bit and 64-bit polynomial multipliers in AArch64 differ
-+# only by suffix. pmull vR.8h, vA.8b, vB.8b multiplies eight 8-bit polynomials
-+# and is always available. pmull vR.1q, vA.1d, vB.1d multiplies a 64-bit
-+# polynomial and is conditioned on the PMULL extension. This file emulates the
-+# latter with the former.
-+
-+use strict;
-+
-+my $flavour = shift;
-+my $output;
-+if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; }
-+else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} }
-+
-+if ($flavour && $flavour ne "void") {
-+ $0 =~ m/(.*[\/\\])[^\/\\]+$/;
-+ my $dir = $1;
-+ my $xlate;
-+ ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-+ ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or
-+ die "can't locate arm-xlate.pl";
-+
-+ open OUT,"| \"$^X\" $xlate $flavour $output";
-+ *STDOUT=*OUT;
-+} else {
-+ open OUT,">$output";
-+ *STDOUT=*OUT;
-+}
-+
-+my ($Xi, $Htbl, $inp, $len) = map("x$_", (0..3)); # argument block
-+my ($Xl, $Xm, $Xh, $INlo, $INhi) = map("v$_", (0..4));
-+my ($Hlo, $Hhi, $Hhl) = map("v$_", (5..7));
-+# d8-d15 are callee-saved, so avoid v8-v15. AArch64 SIMD has plenty of registers
-+# to spare.
-+my ($t0, $t1, $t2, $t3) = map("v$_", (16..19));
-+my ($t0l_t1l, $t0h_t1h, $t2l_t3l, $t2h_t3h) = map("v$_", (20..23));
-+my ($k48_k32, $k16_k0) = map("v$_", (24..25));
-+
-+my $code = "";
-+
-+# clmul64x64 emits code which emulates pmull $r.1q, $a.1d, $b.1d. $r, $a, and $b
-+# must be distinct from $t* and $k*. $t* are clobbered by the emitted code.
-+sub clmul64x64 {
-+my ($r, $a, $b) = @_;
-+$code .= <<___;
-+ ext $t0.8b, $a.8b, $a.8b, #1 // A1
-+ pmull $t0.8h, $t0.8b, $b.8b // F = A1*B
-+ ext $r.8b, $b.8b, $b.8b, #1 // B1
-+ pmull $r.8h, $a.8b, $r.8b // E = A*B1
-+ ext $t1.8b, $a.8b, $a.8b, #2 // A2
-+ pmull $t1.8h, $t1.8b, $b.8b // H = A2*B
-+ ext $t3.8b, $b.8b, $b.8b, #2 // B2
-+ pmull $t3.8h, $a.8b, $t3.8b // G = A*B2
-+ ext $t2.8b, $a.8b, $a.8b, #3 // A3
-+ eor $t0.16b, $t0.16b, $r.16b // L = E + F
-+ pmull $t2.8h, $t2.8b, $b.8b // J = A3*B
-+ ext $r.8b, $b.8b, $b.8b, #3 // B3
-+ eor $t1.16b, $t1.16b, $t3.16b // M = G + H
-+ pmull $r.8h, $a.8b, $r.8b // I = A*B3
-+
-+ // Here we diverge from the 32-bit version. It computes the following
-+ // (instructions reordered for clarity):
-+ //
-+ // veor \$t0#lo, \$t0#lo, \$t0#hi @ t0 = P0 + P1 (L)
-+ // vand \$t0#hi, \$t0#hi, \$k48
-+ // veor \$t0#lo, \$t0#lo, \$t0#hi
-+ //
-+ // veor \$t1#lo, \$t1#lo, \$t1#hi @ t1 = P2 + P3 (M)
-+ // vand \$t1#hi, \$t1#hi, \$k32
-+ // veor \$t1#lo, \$t1#lo, \$t1#hi
-+ //
-+ // veor \$t2#lo, \$t2#lo, \$t2#hi @ t2 = P4 + P5 (N)
-+ // vand \$t2#hi, \$t2#hi, \$k16
-+ // veor \$t2#lo, \$t2#lo, \$t2#hi
-+ //
-+ // veor \$t3#lo, \$t3#lo, \$t3#hi @ t3 = P6 + P7 (K)
-+ // vmov.i64 \$t3#hi, #0
-+ //
-+ // \$kN is a mask with the bottom N bits set. AArch64 cannot compute on
-+ // upper halves of SIMD registers, so we must split each half into
-+ // separate registers. To compensate, we pair computations up and
-+ // parallelize.
-+
-+ ext $t3.8b, $b.8b, $b.8b, #4 // B4
-+ eor $t2.16b, $t2.16b, $r.16b // N = I + J
-+ pmull $t3.8h, $a.8b, $t3.8b // K = A*B4
-+
-+ // This can probably be scheduled more efficiently. For now, we just
-+ // pair up independent instructions.
-+ zip1 $t0l_t1l.2d, $t0.2d, $t1.2d
-+ zip1 $t2l_t3l.2d, $t2.2d, $t3.2d
-+ zip2 $t0h_t1h.2d, $t0.2d, $t1.2d
-+ zip2 $t2h_t3h.2d, $t2.2d, $t3.2d
-+ eor $t0l_t1l.16b, $t0l_t1l.16b, $t0h_t1h.16b
-+ eor $t2l_t3l.16b, $t2l_t3l.16b, $t2h_t3h.16b
-+ and $t0h_t1h.16b, $t0h_t1h.16b, $k48_k32.16b
-+ and $t2h_t3h.16b, $t2h_t3h.16b, $k16_k0.16b
-+ eor $t0l_t1l.16b, $t0l_t1l.16b, $t0h_t1h.16b
-+ eor $t2l_t3l.16b, $t2l_t3l.16b, $t2h_t3h.16b
-+ zip1 $t0.2d, $t0l_t1l.2d, $t0h_t1h.2d
-+ zip1 $t2.2d, $t2l_t3l.2d, $t2h_t3h.2d
-+ zip2 $t1.2d, $t0l_t1l.2d, $t0h_t1h.2d
-+ zip2 $t3.2d, $t2l_t3l.2d, $t2h_t3h.2d
-+
-+ ext $t0.16b, $t0.16b, $t0.16b, #15 // t0 = t0 << 8
-+ ext $t1.16b, $t1.16b, $t1.16b, #14 // t1 = t1 << 16
-+ pmull $r.8h, $a.8b, $b.8b // D = A*B
-+ ext $t3.16b, $t3.16b, $t3.16b, #12 // t3 = t3 << 32
-+ ext $t2.16b, $t2.16b, $t2.16b, #13 // t2 = t2 << 24
-+ eor $t0.16b, $t0.16b, $t1.16b
-+ eor $t2.16b, $t2.16b, $t3.16b
-+ eor $r.16b, $r.16b, $t0.16b
-+ eor $r.16b, $r.16b, $t2.16b
-+___
-+}
-+
-+$code .= <<___;
-+#include <GFp/arm_arch.h>
-+
-+.text
-+
-+.global GFp_gcm_init_neon
-+.type GFp_gcm_init_neon,%function
-+.align 4
-+GFp_gcm_init_neon:
-+ AARCH64_VALID_CALL_TARGET
-+ // This function is adapted from gcm_init_v8. xC2 is t3.
-+ ld1 {$t1.2d}, [x1] // load H
-+ movi $t3.16b, #0xe1
-+ shl $t3.2d, $t3.2d, #57 // 0xc2.0
-+ ext $INlo.16b, $t1.16b, $t1.16b, #8
-+ ushr $t2.2d, $t3.2d, #63
-+ dup $t1.4s, $t1.s[1]
-+ ext $t0.16b, $t2.16b, $t3.16b, #8 // t0=0xc2....01
-+ ushr $t2.2d, $INlo.2d, #63
-+ sshr $t1.4s, $t1.4s, #31 // broadcast carry bit
-+ and $t2.16b, $t2.16b, $t0.16b
-+ shl $INlo.2d, $INlo.2d, #1
-+ ext $t2.16b, $t2.16b, $t2.16b, #8
-+ and $t0.16b, $t0.16b, $t1.16b
-+ orr $INlo.16b, $INlo.16b, $t2.16b // H<<<=1
-+ eor $Hlo.16b, $INlo.16b, $t0.16b // twisted H
-+ st1 {$Hlo.2d}, [x0] // store Htable[0]
-+ ret
-+.size GFp_gcm_init_neon,.-GFp_gcm_init_neon
-+
-+.global GFp_gcm_gmult_neon
-+.type GFp_gcm_gmult_neon,%function
-+.align 4
-+GFp_gcm_gmult_neon:
-+ AARCH64_VALID_CALL_TARGET
-+ ld1 {$INlo.16b}, [$Xi] // load Xi
-+ ld1 {$Hlo.1d}, [$Htbl], #8 // load twisted H
-+ ld1 {$Hhi.1d}, [$Htbl]
-+ adrp x9, :pg_hi21:.Lmasks // load constants
-+ add x9, x9, :lo12:.Lmasks
-+ ld1 {$k48_k32.2d, $k16_k0.2d}, [x9]
-+ rev64 $INlo.16b, $INlo.16b // byteswap Xi
-+ ext $INlo.16b, $INlo.16b, $INlo.16b, #8
-+ eor $Hhl.8b, $Hlo.8b, $Hhi.8b // Karatsuba pre-processing
-+
-+ mov $len, #16
-+ b .Lgmult_neon
-+.size GFp_gcm_gmult_neon,.-GFp_gcm_gmult_neon
-+
-+.global GFp_gcm_ghash_neon
-+.type GFp_gcm_ghash_neon,%function
-+.align 4
-+GFp_gcm_ghash_neon:
-+ AARCH64_VALID_CALL_TARGET
-+ ld1 {$Xl.16b}, [$Xi] // load Xi
-+ ld1 {$Hlo.1d}, [$Htbl], #8 // load twisted H
-+ ld1 {$Hhi.1d}, [$Htbl]
-+ adrp x9, :pg_hi21:.Lmasks // load constants
-+ add x9, x9, :lo12:.Lmasks
-+ ld1 {$k48_k32.2d, $k16_k0.2d}, [x9]
-+ rev64 $Xl.16b, $Xl.16b // byteswap Xi
-+ ext $Xl.16b, $Xl.16b, $Xl.16b, #8
-+ eor $Hhl.8b, $Hlo.8b, $Hhi.8b // Karatsuba pre-processing
-+
-+.Loop_neon:
-+ ld1 {$INlo.16b}, [$inp], #16 // load inp
-+ rev64 $INlo.16b, $INlo.16b // byteswap inp
-+ ext $INlo.16b, $INlo.16b, $INlo.16b, #8
-+ eor $INlo.16b, $INlo.16b, $Xl.16b // inp ^= Xi
-+
-+.Lgmult_neon:
-+ // Split the input into $INlo and $INhi. (The upper halves are unused,
-+ // so it is okay to leave them alone.)
-+ ins $INhi.d[0], $INlo.d[1]
-+___
-+&clmul64x64 ($Xl, $Hlo, $INlo); # H.lo·Xi.lo
-+$code .= <<___;
-+ eor $INlo.8b, $INlo.8b, $INhi.8b // Karatsuba pre-processing
-+___
-+&clmul64x64 ($Xm, $Hhl, $INlo); # (H.lo+H.hi)·(Xi.lo+Xi.hi)
-+&clmul64x64 ($Xh, $Hhi, $INhi); # H.hi·Xi.hi
-+$code .= <<___;
-+ ext $t0.16b, $Xl.16b, $Xh.16b, #8
-+ eor $Xm.16b, $Xm.16b, $Xl.16b // Karatsuba post-processing
-+ eor $Xm.16b, $Xm.16b, $Xh.16b
-+ eor $Xm.16b, $Xm.16b, $t0.16b // Xm overlaps Xh.lo and Xl.hi
-+ ins $Xl.d[1], $Xm.d[0] // Xh|Xl - 256-bit result
-+ // This is a no-op due to the ins instruction below.
-+ // ins $Xh.d[0], $Xm.d[1]
-+
-+ // equivalent of reduction_avx from ghash-x86_64.pl
-+ shl $t1.2d, $Xl.2d, #57 // 1st phase
-+ shl $t2.2d, $Xl.2d, #62
-+ eor $t2.16b, $t2.16b, $t1.16b //
-+ shl $t1.2d, $Xl.2d, #63
-+ eor $t2.16b, $t2.16b, $t1.16b //
-+ // Note Xm contains {Xl.d[1], Xh.d[0]}.
-+ eor $t2.16b, $t2.16b, $Xm.16b
-+ ins $Xl.d[1], $t2.d[0] // Xl.d[1] ^= t2.d[0]
-+ ins $Xh.d[0], $t2.d[1] // Xh.d[0] ^= t2.d[1]
-+
-+ ushr $t2.2d, $Xl.2d, #1 // 2nd phase
-+ eor $Xh.16b, $Xh.16b,$Xl.16b
-+ eor $Xl.16b, $Xl.16b,$t2.16b //
-+ ushr $t2.2d, $t2.2d, #6
-+ ushr $Xl.2d, $Xl.2d, #1 //
-+ eor $Xl.16b, $Xl.16b, $Xh.16b //
-+ eor $Xl.16b, $Xl.16b, $t2.16b //
-+
-+ subs $len, $len, #16
-+ bne .Loop_neon
-+
-+ rev64 $Xl.16b, $Xl.16b // byteswap Xi and write
-+ ext $Xl.16b, $Xl.16b, $Xl.16b, #8
-+ st1 {$Xl.16b}, [$Xi]
-+
-+ ret
-+.size GFp_gcm_ghash_neon,.-GFp_gcm_ghash_neon
-+
-+.section .rodata
-+.align 4
-+.Lmasks:
-+.quad 0x0000ffffffffffff // k48
-+.quad 0x00000000ffffffff // k32
-+.quad 0x000000000000ffff // k16
-+.quad 0x0000000000000000 // k0
-+.asciz "GHASH for ARMv8, derived from ARMv4 version by <appro\@openssl.org>"
-+.align 2
-+___
-+
-+foreach (split("\n",$code)) {
-+ s/\`([^\`]*)\`/eval $1/geo;
-+
-+ print $_,"\n";
-+}
-+close STDOUT or die "error closing STDOUT"; # enforce flush
---
-Efraim Flashner <efraim@flashner.co.il> רנשלפ םירפא
-GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
-Confidentiality cannot be guaranteed on emails sent or received unencrypted
-
diff --git a/gnu/packages/patches/rust-ring-0.16-test-files.patch b/gnu/packages/patches/rust-ring-0.16-test-files.patch
deleted file mode 100644
index dbe5c0f4ee..0000000000
--- a/gnu/packages/patches/rust-ring-0.16-test-files.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-This file exists in the upstream repository at the commit which
-corresponds to the ring-0.16.20 release, but was excluded from the
-release tarball.
-
----
- tests/ed25519_verify_tests.txt | 34 ++++++++++++++++++++++++++++++++++
- 1 file changed, 34 insertions(+)
- create mode 100644 tests/ed25519_verify_tests.txt
-
-diff --git a/tests/ed25519_verify_tests.txt b/tests/ed25519_verify_tests.txt
-new file mode 100644
-index 0000000..74c94b3
---- /dev/null
-+++ b/tests/ed25519_verify_tests.txt
-@@ -0,0 +1,34 @@
-+# BoringSSL TEST(Ed25519Test Malleability)
-+
-+# Control; S is in range.
-+MESSAGE = 54657374
-+SIG = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab07a9155711ecfaf7f99f277bad0c6ae7e39d4eef676573336a5c51eb6f946b30d
-+PUB = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa
-+Result = P
-+
-+# Same as above, but with the order L added to S so it is out of range.
-+# BoringSSL commit 472ba2c2dd52d06a657a63b7fbf02732a6649d21
-+MESSAGE = 54657374
-+SIG = 7c38e026f29e14aabd059a0f2db8b0cd783040609a8be684db12f82a27774ab067654bce3832c2d76f8f6f5dafc08d9339d4eef676573336a5c51eb6f946b31d
-+PUB = 7d4d0e7f6153a69b6242b522abbee685fda4420f8834b108c3bdae369ef549fa
-+Result = F
-+
-+
-+# BoringSSL commit 3094902fcdc2db2cc832fa854b9a6a8be383926c
-+MESSAGE = 124e583f8b8eca58bb29c271b41d36986bbc45541f8e51f9cb0133eca447601e
-+SIG = dac119d6ca87fc59ae611c157048f4d4fc932a149dbe20ec6effd1436abf83ea05c7df0fef06147241259113909bc71bd3c53ba4464ffcad3c0968f2ffffff0f
-+PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86
-+Result = P
-+
-+# Control. Same key as above; same message and signature as below, except S is in range.
-+PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86
-+MESSAGE = 6a0bc2b0057cedfc0fa2e3f7f7d39279b30f454a69dfd1117c758d86b19d85e0
-+SIG = 0971f86d2c9c78582524a103cb9cf949522ae528f8054dc20107d999be673ff4f58ac9d20ec563133cabc6230b1db8625f8446639ede46ad4df4053000000000
-+Result = P
-+
-+# Same key as above, but S is out of range.
-+# BoringSSL commit 472ba2c2dd52d06a657a63b7fbf02732a6649d21
-+PUB = 100fdf47fb94f1536a4f7c3fda27383fa03375a8f527c537e6f1703c47f94f86
-+MESSAGE = 6a0bc2b0057cedfc0fa2e3f7f7d39279b30f454a69dfd1117c758d86b19d85e0
-+SIG = 0971f86d2c9c78582524a103cb9cf949522ae528f8054dc20107d999be673ff4e25ebf2f2928766b1248bec6e91697775f8446639ede46ad4df4053000000010
-+Result = F
---
-Efraim Flashner <efraim@flashner.co.il> רנשלפ םירפא
-GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
-Confidentiality cannot be guaranteed on emails sent or received unencrypted
-
diff --git a/gnu/packages/patches/rust-ring-0.17-ring-core.patch b/gnu/packages/patches/rust-ring-0.17-ring-core.patch
new file mode 100644
index 0000000000..faa3a8a191
--- /dev/null
+++ b/gnu/packages/patches/rust-ring-0.17-ring-core.patch
@@ -0,0 +1,496 @@
+These two files are needed to finish generating the files for windows
+and were generated using 'RING_PREGENERATE_ASM=1 cargo build
+--target-dir=target/pregenerate_asm'. Included here so we don't need to
+add cargo to the computed-source.
+
+---
+ .../ring_core_generated/prefix_symbols_asm.h | 236 ++++++++++++++++++
+ .../prefix_symbols_nasm.inc | 236 ++++++++++++++++++
+ 2 files changed, 472 insertions(+)
+ create mode 100644 pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h
+ create mode 100644 pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc
+
+diff --git a/pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h b/pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h
+new file mode 100644
+index 000000000..1cd766400
+--- /dev/null
++++ b/pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h
+@@ -0,0 +1,236 @@
++
++#ifndef ring_core_generated_PREFIX_SYMBOLS_ASM_H
++#define ring_core_generated_PREFIX_SYMBOLS_ASM_H
++
++#if defined(__APPLE__)
++#define _ecp_nistz256_point_double _p256_point_double
++#define _ecp_nistz256_point_add _p256_point_add
++#define _ecp_nistz256_point_add_affine _p256_point_add_affine
++#define _ecp_nistz256_ord_mul_mont _p256_scalar_mul_mont
++#define _ecp_nistz256_ord_sqr_mont _p256_scalar_sqr_rep_mont
++#define _ecp_nistz256_mul_mont _p256_mul_mont
++#define _ecp_nistz256_sqr_mont _p256_sqr_mont
++#define _CRYPTO_memcmp _ring_core_0_17_7_CRYPTO_memcmp
++#define _CRYPTO_poly1305_finish _ring_core_0_17_7_CRYPTO_poly1305_finish
++#define _CRYPTO_poly1305_finish_neon _ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++#define _CRYPTO_poly1305_init _ring_core_0_17_7_CRYPTO_poly1305_init
++#define _CRYPTO_poly1305_init_neon _ring_core_0_17_7_CRYPTO_poly1305_init_neon
++#define _CRYPTO_poly1305_update _ring_core_0_17_7_CRYPTO_poly1305_update
++#define _CRYPTO_poly1305_update_neon _ring_core_0_17_7_CRYPTO_poly1305_update_neon
++#define _ChaCha20_ctr32 _ring_core_0_17_7_ChaCha20_ctr32
++#define _LIMBS_add_mod _ring_core_0_17_7_LIMBS_add_mod
++#define _LIMBS_are_even _ring_core_0_17_7_LIMBS_are_even
++#define _LIMBS_are_zero _ring_core_0_17_7_LIMBS_are_zero
++#define _LIMBS_equal _ring_core_0_17_7_LIMBS_equal
++#define _LIMBS_equal_limb _ring_core_0_17_7_LIMBS_equal_limb
++#define _LIMBS_less_than _ring_core_0_17_7_LIMBS_less_than
++#define _LIMBS_less_than_limb _ring_core_0_17_7_LIMBS_less_than_limb
++#define _LIMBS_reduce_once _ring_core_0_17_7_LIMBS_reduce_once
++#define _LIMBS_select_512_32 _ring_core_0_17_7_LIMBS_select_512_32
++#define _LIMBS_shl_mod _ring_core_0_17_7_LIMBS_shl_mod
++#define _LIMBS_sub_mod _ring_core_0_17_7_LIMBS_sub_mod
++#define _LIMBS_window5_split_window _ring_core_0_17_7_LIMBS_window5_split_window
++#define _LIMBS_window5_unsplit_window _ring_core_0_17_7_LIMBS_window5_unsplit_window
++#define _LIMB_shr _ring_core_0_17_7_LIMB_shr
++#define _OPENSSL_armcap_P _ring_core_0_17_7_OPENSSL_armcap_P
++#define _OPENSSL_cpuid_setup _ring_core_0_17_7_OPENSSL_cpuid_setup
++#define _OPENSSL_ia32cap_P _ring_core_0_17_7_OPENSSL_ia32cap_P
++#define _aes_hw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++#define _aes_hw_encrypt _ring_core_0_17_7_aes_hw_encrypt
++#define _aes_hw_set_encrypt_key _ring_core_0_17_7_aes_hw_set_encrypt_key
++#define _aes_nohw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++#define _aes_nohw_encrypt _ring_core_0_17_7_aes_nohw_encrypt
++#define _aes_nohw_set_encrypt_key _ring_core_0_17_7_aes_nohw_set_encrypt_key
++#define _aesni_gcm_decrypt _ring_core_0_17_7_aesni_gcm_decrypt
++#define _aesni_gcm_encrypt _ring_core_0_17_7_aesni_gcm_encrypt
++#define _bn_from_montgomery_in_place _ring_core_0_17_7_bn_from_montgomery_in_place
++#define _bn_gather5 _ring_core_0_17_7_bn_gather5
++#define _bn_mul_mont _ring_core_0_17_7_bn_mul_mont
++#define _bn_mul_mont_gather5 _ring_core_0_17_7_bn_mul_mont_gather5
++#define _bn_neg_inv_mod_r_u64 _ring_core_0_17_7_bn_neg_inv_mod_r_u64
++#define _bn_power5 _ring_core_0_17_7_bn_power5
++#define _bn_scatter5 _ring_core_0_17_7_bn_scatter5
++#define _bn_sqr8x_internal _ring_core_0_17_7_bn_sqr8x_internal
++#define _bn_sqrx8x_internal _ring_core_0_17_7_bn_sqrx8x_internal
++#define _bsaes_ctr32_encrypt_blocks _ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++#define _bssl_constant_time_test_conditional_memcpy _ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++#define _bssl_constant_time_test_conditional_memxor _ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++#define _bssl_constant_time_test_main _ring_core_0_17_7_bssl_constant_time_test_main
++#define _chacha20_poly1305_open _ring_core_0_17_7_chacha20_poly1305_open
++#define _chacha20_poly1305_seal _ring_core_0_17_7_chacha20_poly1305_seal
++#define _fiat_curve25519_adx_mul _ring_core_0_17_7_fiat_curve25519_adx_mul
++#define _fiat_curve25519_adx_square _ring_core_0_17_7_fiat_curve25519_adx_square
++#define _gcm_ghash_avx _ring_core_0_17_7_gcm_ghash_avx
++#define _gcm_ghash_clmul _ring_core_0_17_7_gcm_ghash_clmul
++#define _gcm_ghash_neon _ring_core_0_17_7_gcm_ghash_neon
++#define _gcm_gmult_clmul _ring_core_0_17_7_gcm_gmult_clmul
++#define _gcm_gmult_neon _ring_core_0_17_7_gcm_gmult_neon
++#define _gcm_init_avx _ring_core_0_17_7_gcm_init_avx
++#define _gcm_init_clmul _ring_core_0_17_7_gcm_init_clmul
++#define _gcm_init_neon _ring_core_0_17_7_gcm_init_neon
++#define _k25519Precomp _ring_core_0_17_7_k25519Precomp
++#define _limbs_mul_add_limb _ring_core_0_17_7_limbs_mul_add_limb
++#define _little_endian_bytes_from_scalar _ring_core_0_17_7_little_endian_bytes_from_scalar
++#define _ecp_nistz256_neg _ring_core_0_17_7_ecp_nistz256_neg
++#define _ecp_nistz256_select_w5 _ring_core_0_17_7_ecp_nistz256_select_w5
++#define _ecp_nistz256_select_w7 _ring_core_0_17_7_ecp_nistz256_select_w7
++#define _p256_mul_mont _ring_core_0_17_7_p256_mul_mont
++#define _p256_point_add _ring_core_0_17_7_p256_point_add
++#define _p256_point_add_affine _ring_core_0_17_7_p256_point_add_affine
++#define _p256_point_double _ring_core_0_17_7_p256_point_double
++#define _p256_point_mul _ring_core_0_17_7_p256_point_mul
++#define _p256_point_mul_base _ring_core_0_17_7_p256_point_mul_base
++#define _p256_point_mul_base_vartime _ring_core_0_17_7_p256_point_mul_base_vartime
++#define _p256_scalar_mul_mont _ring_core_0_17_7_p256_scalar_mul_mont
++#define _p256_scalar_sqr_rep_mont _ring_core_0_17_7_p256_scalar_sqr_rep_mont
++#define _p256_sqr_mont _ring_core_0_17_7_p256_sqr_mont
++#define _p384_elem_div_by_2 _ring_core_0_17_7_p384_elem_div_by_2
++#define _p384_elem_mul_mont _ring_core_0_17_7_p384_elem_mul_mont
++#define _p384_elem_neg _ring_core_0_17_7_p384_elem_neg
++#define _p384_elem_sub _ring_core_0_17_7_p384_elem_sub
++#define _p384_point_add _ring_core_0_17_7_p384_point_add
++#define _p384_point_double _ring_core_0_17_7_p384_point_double
++#define _p384_point_mul _ring_core_0_17_7_p384_point_mul
++#define _p384_scalar_mul_mont _ring_core_0_17_7_p384_scalar_mul_mont
++#define _openssl_poly1305_neon2_addmulmod _ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++#define _openssl_poly1305_neon2_blocks _ring_core_0_17_7_openssl_poly1305_neon2_blocks
++#define _sha256_block_data_order _ring_core_0_17_7_sha256_block_data_order
++#define _sha512_block_data_order _ring_core_0_17_7_sha512_block_data_order
++#define _vpaes_ctr32_encrypt_blocks _ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++#define _vpaes_encrypt _ring_core_0_17_7_vpaes_encrypt
++#define _vpaes_encrypt_key_to_bsaes _ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++#define _vpaes_set_encrypt_key _ring_core_0_17_7_vpaes_set_encrypt_key
++#define _x25519_NEON _ring_core_0_17_7_x25519_NEON
++#define _x25519_fe_invert _ring_core_0_17_7_x25519_fe_invert
++#define _x25519_fe_isnegative _ring_core_0_17_7_x25519_fe_isnegative
++#define _x25519_fe_mul_ttt _ring_core_0_17_7_x25519_fe_mul_ttt
++#define _x25519_fe_neg _ring_core_0_17_7_x25519_fe_neg
++#define _x25519_fe_tobytes _ring_core_0_17_7_x25519_fe_tobytes
++#define _x25519_ge_double_scalarmult_vartime _ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++#define _x25519_ge_frombytes_vartime _ring_core_0_17_7_x25519_ge_frombytes_vartime
++#define _x25519_ge_scalarmult_base _ring_core_0_17_7_x25519_ge_scalarmult_base
++#define _x25519_ge_scalarmult_base_adx _ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++#define _x25519_public_from_private_generic_masked _ring_core_0_17_7_x25519_public_from_private_generic_masked
++#define _x25519_sc_mask _ring_core_0_17_7_x25519_sc_mask
++#define _x25519_sc_muladd _ring_core_0_17_7_x25519_sc_muladd
++#define _x25519_sc_reduce _ring_core_0_17_7_x25519_sc_reduce
++#define _x25519_scalar_mult_adx _ring_core_0_17_7_x25519_scalar_mult_adx
++#define _x25519_scalar_mult_generic_masked _ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++#else
++#define ecp_nistz256_point_double p256_point_double
++#define ecp_nistz256_point_add p256_point_add
++#define ecp_nistz256_point_add_affine p256_point_add_affine
++#define ecp_nistz256_ord_mul_mont p256_scalar_mul_mont
++#define ecp_nistz256_ord_sqr_mont p256_scalar_sqr_rep_mont
++#define ecp_nistz256_mul_mont p256_mul_mont
++#define ecp_nistz256_sqr_mont p256_sqr_mont
++#define CRYPTO_memcmp ring_core_0_17_7_CRYPTO_memcmp
++#define CRYPTO_poly1305_finish ring_core_0_17_7_CRYPTO_poly1305_finish
++#define CRYPTO_poly1305_finish_neon ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++#define CRYPTO_poly1305_init ring_core_0_17_7_CRYPTO_poly1305_init
++#define CRYPTO_poly1305_init_neon ring_core_0_17_7_CRYPTO_poly1305_init_neon
++#define CRYPTO_poly1305_update ring_core_0_17_7_CRYPTO_poly1305_update
++#define CRYPTO_poly1305_update_neon ring_core_0_17_7_CRYPTO_poly1305_update_neon
++#define ChaCha20_ctr32 ring_core_0_17_7_ChaCha20_ctr32
++#define LIMBS_add_mod ring_core_0_17_7_LIMBS_add_mod
++#define LIMBS_are_even ring_core_0_17_7_LIMBS_are_even
++#define LIMBS_are_zero ring_core_0_17_7_LIMBS_are_zero
++#define LIMBS_equal ring_core_0_17_7_LIMBS_equal
++#define LIMBS_equal_limb ring_core_0_17_7_LIMBS_equal_limb
++#define LIMBS_less_than ring_core_0_17_7_LIMBS_less_than
++#define LIMBS_less_than_limb ring_core_0_17_7_LIMBS_less_than_limb
++#define LIMBS_reduce_once ring_core_0_17_7_LIMBS_reduce_once
++#define LIMBS_select_512_32 ring_core_0_17_7_LIMBS_select_512_32
++#define LIMBS_shl_mod ring_core_0_17_7_LIMBS_shl_mod
++#define LIMBS_sub_mod ring_core_0_17_7_LIMBS_sub_mod
++#define LIMBS_window5_split_window ring_core_0_17_7_LIMBS_window5_split_window
++#define LIMBS_window5_unsplit_window ring_core_0_17_7_LIMBS_window5_unsplit_window
++#define LIMB_shr ring_core_0_17_7_LIMB_shr
++#define OPENSSL_armcap_P ring_core_0_17_7_OPENSSL_armcap_P
++#define OPENSSL_cpuid_setup ring_core_0_17_7_OPENSSL_cpuid_setup
++#define OPENSSL_ia32cap_P ring_core_0_17_7_OPENSSL_ia32cap_P
++#define aes_hw_ctr32_encrypt_blocks ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++#define aes_hw_encrypt ring_core_0_17_7_aes_hw_encrypt
++#define aes_hw_set_encrypt_key ring_core_0_17_7_aes_hw_set_encrypt_key
++#define aes_nohw_ctr32_encrypt_blocks ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++#define aes_nohw_encrypt ring_core_0_17_7_aes_nohw_encrypt
++#define aes_nohw_set_encrypt_key ring_core_0_17_7_aes_nohw_set_encrypt_key
++#define aesni_gcm_decrypt ring_core_0_17_7_aesni_gcm_decrypt
++#define aesni_gcm_encrypt ring_core_0_17_7_aesni_gcm_encrypt
++#define bn_from_montgomery_in_place ring_core_0_17_7_bn_from_montgomery_in_place
++#define bn_gather5 ring_core_0_17_7_bn_gather5
++#define bn_mul_mont ring_core_0_17_7_bn_mul_mont
++#define bn_mul_mont_gather5 ring_core_0_17_7_bn_mul_mont_gather5
++#define bn_neg_inv_mod_r_u64 ring_core_0_17_7_bn_neg_inv_mod_r_u64
++#define bn_power5 ring_core_0_17_7_bn_power5
++#define bn_scatter5 ring_core_0_17_7_bn_scatter5
++#define bn_sqr8x_internal ring_core_0_17_7_bn_sqr8x_internal
++#define bn_sqrx8x_internal ring_core_0_17_7_bn_sqrx8x_internal
++#define bsaes_ctr32_encrypt_blocks ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++#define bssl_constant_time_test_conditional_memcpy ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++#define bssl_constant_time_test_conditional_memxor ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++#define bssl_constant_time_test_main ring_core_0_17_7_bssl_constant_time_test_main
++#define chacha20_poly1305_open ring_core_0_17_7_chacha20_poly1305_open
++#define chacha20_poly1305_seal ring_core_0_17_7_chacha20_poly1305_seal
++#define fiat_curve25519_adx_mul ring_core_0_17_7_fiat_curve25519_adx_mul
++#define fiat_curve25519_adx_square ring_core_0_17_7_fiat_curve25519_adx_square
++#define gcm_ghash_avx ring_core_0_17_7_gcm_ghash_avx
++#define gcm_ghash_clmul ring_core_0_17_7_gcm_ghash_clmul
++#define gcm_ghash_neon ring_core_0_17_7_gcm_ghash_neon
++#define gcm_gmult_clmul ring_core_0_17_7_gcm_gmult_clmul
++#define gcm_gmult_neon ring_core_0_17_7_gcm_gmult_neon
++#define gcm_init_avx ring_core_0_17_7_gcm_init_avx
++#define gcm_init_clmul ring_core_0_17_7_gcm_init_clmul
++#define gcm_init_neon ring_core_0_17_7_gcm_init_neon
++#define k25519Precomp ring_core_0_17_7_k25519Precomp
++#define limbs_mul_add_limb ring_core_0_17_7_limbs_mul_add_limb
++#define little_endian_bytes_from_scalar ring_core_0_17_7_little_endian_bytes_from_scalar
++#define ecp_nistz256_neg ring_core_0_17_7_ecp_nistz256_neg
++#define ecp_nistz256_select_w5 ring_core_0_17_7_ecp_nistz256_select_w5
++#define ecp_nistz256_select_w7 ring_core_0_17_7_ecp_nistz256_select_w7
++#define p256_mul_mont ring_core_0_17_7_p256_mul_mont
++#define p256_point_add ring_core_0_17_7_p256_point_add
++#define p256_point_add_affine ring_core_0_17_7_p256_point_add_affine
++#define p256_point_double ring_core_0_17_7_p256_point_double
++#define p256_point_mul ring_core_0_17_7_p256_point_mul
++#define p256_point_mul_base ring_core_0_17_7_p256_point_mul_base
++#define p256_point_mul_base_vartime ring_core_0_17_7_p256_point_mul_base_vartime
++#define p256_scalar_mul_mont ring_core_0_17_7_p256_scalar_mul_mont
++#define p256_scalar_sqr_rep_mont ring_core_0_17_7_p256_scalar_sqr_rep_mont
++#define p256_sqr_mont ring_core_0_17_7_p256_sqr_mont
++#define p384_elem_div_by_2 ring_core_0_17_7_p384_elem_div_by_2
++#define p384_elem_mul_mont ring_core_0_17_7_p384_elem_mul_mont
++#define p384_elem_neg ring_core_0_17_7_p384_elem_neg
++#define p384_elem_sub ring_core_0_17_7_p384_elem_sub
++#define p384_point_add ring_core_0_17_7_p384_point_add
++#define p384_point_double ring_core_0_17_7_p384_point_double
++#define p384_point_mul ring_core_0_17_7_p384_point_mul
++#define p384_scalar_mul_mont ring_core_0_17_7_p384_scalar_mul_mont
++#define openssl_poly1305_neon2_addmulmod ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++#define openssl_poly1305_neon2_blocks ring_core_0_17_7_openssl_poly1305_neon2_blocks
++#define sha256_block_data_order ring_core_0_17_7_sha256_block_data_order
++#define sha512_block_data_order ring_core_0_17_7_sha512_block_data_order
++#define vpaes_ctr32_encrypt_blocks ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++#define vpaes_encrypt ring_core_0_17_7_vpaes_encrypt
++#define vpaes_encrypt_key_to_bsaes ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++#define vpaes_set_encrypt_key ring_core_0_17_7_vpaes_set_encrypt_key
++#define x25519_NEON ring_core_0_17_7_x25519_NEON
++#define x25519_fe_invert ring_core_0_17_7_x25519_fe_invert
++#define x25519_fe_isnegative ring_core_0_17_7_x25519_fe_isnegative
++#define x25519_fe_mul_ttt ring_core_0_17_7_x25519_fe_mul_ttt
++#define x25519_fe_neg ring_core_0_17_7_x25519_fe_neg
++#define x25519_fe_tobytes ring_core_0_17_7_x25519_fe_tobytes
++#define x25519_ge_double_scalarmult_vartime ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++#define x25519_ge_frombytes_vartime ring_core_0_17_7_x25519_ge_frombytes_vartime
++#define x25519_ge_scalarmult_base ring_core_0_17_7_x25519_ge_scalarmult_base
++#define x25519_ge_scalarmult_base_adx ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++#define x25519_public_from_private_generic_masked ring_core_0_17_7_x25519_public_from_private_generic_masked
++#define x25519_sc_mask ring_core_0_17_7_x25519_sc_mask
++#define x25519_sc_muladd ring_core_0_17_7_x25519_sc_muladd
++#define x25519_sc_reduce ring_core_0_17_7_x25519_sc_reduce
++#define x25519_scalar_mult_adx ring_core_0_17_7_x25519_scalar_mult_adx
++#define x25519_scalar_mult_generic_masked ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++#endif
++#endif
+diff --git a/pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc b/pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc
+new file mode 100644
+index 000000000..65ce0cfaa
+--- /dev/null
++++ b/pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc
+@@ -0,0 +1,236 @@
++
++%ifndef ring_core_generated_PREFIX_SYMBOLS_NASM_INC
++%define ring_core_generated_PREFIX_SYMBOLS_NASM_INC
++
++%ifidn __OUTPUT_FORMAT__,win32
++%define _ecp_nistz256_point_double _p256_point_double
++%define _ecp_nistz256_point_add _p256_point_add
++%define _ecp_nistz256_point_add_affine _p256_point_add_affine
++%define _ecp_nistz256_ord_mul_mont _p256_scalar_mul_mont
++%define _ecp_nistz256_ord_sqr_mont _p256_scalar_sqr_rep_mont
++%define _ecp_nistz256_mul_mont _p256_mul_mont
++%define _ecp_nistz256_sqr_mont _p256_sqr_mont
++%define _CRYPTO_memcmp _ring_core_0_17_7_CRYPTO_memcmp
++%define _CRYPTO_poly1305_finish _ring_core_0_17_7_CRYPTO_poly1305_finish
++%define _CRYPTO_poly1305_finish_neon _ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++%define _CRYPTO_poly1305_init _ring_core_0_17_7_CRYPTO_poly1305_init
++%define _CRYPTO_poly1305_init_neon _ring_core_0_17_7_CRYPTO_poly1305_init_neon
++%define _CRYPTO_poly1305_update _ring_core_0_17_7_CRYPTO_poly1305_update
++%define _CRYPTO_poly1305_update_neon _ring_core_0_17_7_CRYPTO_poly1305_update_neon
++%define _ChaCha20_ctr32 _ring_core_0_17_7_ChaCha20_ctr32
++%define _LIMBS_add_mod _ring_core_0_17_7_LIMBS_add_mod
++%define _LIMBS_are_even _ring_core_0_17_7_LIMBS_are_even
++%define _LIMBS_are_zero _ring_core_0_17_7_LIMBS_are_zero
++%define _LIMBS_equal _ring_core_0_17_7_LIMBS_equal
++%define _LIMBS_equal_limb _ring_core_0_17_7_LIMBS_equal_limb
++%define _LIMBS_less_than _ring_core_0_17_7_LIMBS_less_than
++%define _LIMBS_less_than_limb _ring_core_0_17_7_LIMBS_less_than_limb
++%define _LIMBS_reduce_once _ring_core_0_17_7_LIMBS_reduce_once
++%define _LIMBS_select_512_32 _ring_core_0_17_7_LIMBS_select_512_32
++%define _LIMBS_shl_mod _ring_core_0_17_7_LIMBS_shl_mod
++%define _LIMBS_sub_mod _ring_core_0_17_7_LIMBS_sub_mod
++%define _LIMBS_window5_split_window _ring_core_0_17_7_LIMBS_window5_split_window
++%define _LIMBS_window5_unsplit_window _ring_core_0_17_7_LIMBS_window5_unsplit_window
++%define _LIMB_shr _ring_core_0_17_7_LIMB_shr
++%define _OPENSSL_armcap_P _ring_core_0_17_7_OPENSSL_armcap_P
++%define _OPENSSL_cpuid_setup _ring_core_0_17_7_OPENSSL_cpuid_setup
++%define _OPENSSL_ia32cap_P _ring_core_0_17_7_OPENSSL_ia32cap_P
++%define _aes_hw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++%define _aes_hw_encrypt _ring_core_0_17_7_aes_hw_encrypt
++%define _aes_hw_set_encrypt_key _ring_core_0_17_7_aes_hw_set_encrypt_key
++%define _aes_nohw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++%define _aes_nohw_encrypt _ring_core_0_17_7_aes_nohw_encrypt
++%define _aes_nohw_set_encrypt_key _ring_core_0_17_7_aes_nohw_set_encrypt_key
++%define _aesni_gcm_decrypt _ring_core_0_17_7_aesni_gcm_decrypt
++%define _aesni_gcm_encrypt _ring_core_0_17_7_aesni_gcm_encrypt
++%define _bn_from_montgomery_in_place _ring_core_0_17_7_bn_from_montgomery_in_place
++%define _bn_gather5 _ring_core_0_17_7_bn_gather5
++%define _bn_mul_mont _ring_core_0_17_7_bn_mul_mont
++%define _bn_mul_mont_gather5 _ring_core_0_17_7_bn_mul_mont_gather5
++%define _bn_neg_inv_mod_r_u64 _ring_core_0_17_7_bn_neg_inv_mod_r_u64
++%define _bn_power5 _ring_core_0_17_7_bn_power5
++%define _bn_scatter5 _ring_core_0_17_7_bn_scatter5
++%define _bn_sqr8x_internal _ring_core_0_17_7_bn_sqr8x_internal
++%define _bn_sqrx8x_internal _ring_core_0_17_7_bn_sqrx8x_internal
++%define _bsaes_ctr32_encrypt_blocks _ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++%define _bssl_constant_time_test_conditional_memcpy _ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++%define _bssl_constant_time_test_conditional_memxor _ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++%define _bssl_constant_time_test_main _ring_core_0_17_7_bssl_constant_time_test_main
++%define _chacha20_poly1305_open _ring_core_0_17_7_chacha20_poly1305_open
++%define _chacha20_poly1305_seal _ring_core_0_17_7_chacha20_poly1305_seal
++%define _fiat_curve25519_adx_mul _ring_core_0_17_7_fiat_curve25519_adx_mul
++%define _fiat_curve25519_adx_square _ring_core_0_17_7_fiat_curve25519_adx_square
++%define _gcm_ghash_avx _ring_core_0_17_7_gcm_ghash_avx
++%define _gcm_ghash_clmul _ring_core_0_17_7_gcm_ghash_clmul
++%define _gcm_ghash_neon _ring_core_0_17_7_gcm_ghash_neon
++%define _gcm_gmult_clmul _ring_core_0_17_7_gcm_gmult_clmul
++%define _gcm_gmult_neon _ring_core_0_17_7_gcm_gmult_neon
++%define _gcm_init_avx _ring_core_0_17_7_gcm_init_avx
++%define _gcm_init_clmul _ring_core_0_17_7_gcm_init_clmul
++%define _gcm_init_neon _ring_core_0_17_7_gcm_init_neon
++%define _k25519Precomp _ring_core_0_17_7_k25519Precomp
++%define _limbs_mul_add_limb _ring_core_0_17_7_limbs_mul_add_limb
++%define _little_endian_bytes_from_scalar _ring_core_0_17_7_little_endian_bytes_from_scalar
++%define _ecp_nistz256_neg _ring_core_0_17_7_ecp_nistz256_neg
++%define _ecp_nistz256_select_w5 _ring_core_0_17_7_ecp_nistz256_select_w5
++%define _ecp_nistz256_select_w7 _ring_core_0_17_7_ecp_nistz256_select_w7
++%define _p256_mul_mont _ring_core_0_17_7_p256_mul_mont
++%define _p256_point_add _ring_core_0_17_7_p256_point_add
++%define _p256_point_add_affine _ring_core_0_17_7_p256_point_add_affine
++%define _p256_point_double _ring_core_0_17_7_p256_point_double
++%define _p256_point_mul _ring_core_0_17_7_p256_point_mul
++%define _p256_point_mul_base _ring_core_0_17_7_p256_point_mul_base
++%define _p256_point_mul_base_vartime _ring_core_0_17_7_p256_point_mul_base_vartime
++%define _p256_scalar_mul_mont _ring_core_0_17_7_p256_scalar_mul_mont
++%define _p256_scalar_sqr_rep_mont _ring_core_0_17_7_p256_scalar_sqr_rep_mont
++%define _p256_sqr_mont _ring_core_0_17_7_p256_sqr_mont
++%define _p384_elem_div_by_2 _ring_core_0_17_7_p384_elem_div_by_2
++%define _p384_elem_mul_mont _ring_core_0_17_7_p384_elem_mul_mont
++%define _p384_elem_neg _ring_core_0_17_7_p384_elem_neg
++%define _p384_elem_sub _ring_core_0_17_7_p384_elem_sub
++%define _p384_point_add _ring_core_0_17_7_p384_point_add
++%define _p384_point_double _ring_core_0_17_7_p384_point_double
++%define _p384_point_mul _ring_core_0_17_7_p384_point_mul
++%define _p384_scalar_mul_mont _ring_core_0_17_7_p384_scalar_mul_mont
++%define _openssl_poly1305_neon2_addmulmod _ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++%define _openssl_poly1305_neon2_blocks _ring_core_0_17_7_openssl_poly1305_neon2_blocks
++%define _sha256_block_data_order _ring_core_0_17_7_sha256_block_data_order
++%define _sha512_block_data_order _ring_core_0_17_7_sha512_block_data_order
++%define _vpaes_ctr32_encrypt_blocks _ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++%define _vpaes_encrypt _ring_core_0_17_7_vpaes_encrypt
++%define _vpaes_encrypt_key_to_bsaes _ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++%define _vpaes_set_encrypt_key _ring_core_0_17_7_vpaes_set_encrypt_key
++%define _x25519_NEON _ring_core_0_17_7_x25519_NEON
++%define _x25519_fe_invert _ring_core_0_17_7_x25519_fe_invert
++%define _x25519_fe_isnegative _ring_core_0_17_7_x25519_fe_isnegative
++%define _x25519_fe_mul_ttt _ring_core_0_17_7_x25519_fe_mul_ttt
++%define _x25519_fe_neg _ring_core_0_17_7_x25519_fe_neg
++%define _x25519_fe_tobytes _ring_core_0_17_7_x25519_fe_tobytes
++%define _x25519_ge_double_scalarmult_vartime _ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++%define _x25519_ge_frombytes_vartime _ring_core_0_17_7_x25519_ge_frombytes_vartime
++%define _x25519_ge_scalarmult_base _ring_core_0_17_7_x25519_ge_scalarmult_base
++%define _x25519_ge_scalarmult_base_adx _ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++%define _x25519_public_from_private_generic_masked _ring_core_0_17_7_x25519_public_from_private_generic_masked
++%define _x25519_sc_mask _ring_core_0_17_7_x25519_sc_mask
++%define _x25519_sc_muladd _ring_core_0_17_7_x25519_sc_muladd
++%define _x25519_sc_reduce _ring_core_0_17_7_x25519_sc_reduce
++%define _x25519_scalar_mult_adx _ring_core_0_17_7_x25519_scalar_mult_adx
++%define _x25519_scalar_mult_generic_masked _ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++%else
++%define ecp_nistz256_point_double p256_point_double
++%define ecp_nistz256_point_add p256_point_add
++%define ecp_nistz256_point_add_affine p256_point_add_affine
++%define ecp_nistz256_ord_mul_mont p256_scalar_mul_mont
++%define ecp_nistz256_ord_sqr_mont p256_scalar_sqr_rep_mont
++%define ecp_nistz256_mul_mont p256_mul_mont
++%define ecp_nistz256_sqr_mont p256_sqr_mont
++%define CRYPTO_memcmp ring_core_0_17_7_CRYPTO_memcmp
++%define CRYPTO_poly1305_finish ring_core_0_17_7_CRYPTO_poly1305_finish
++%define CRYPTO_poly1305_finish_neon ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++%define CRYPTO_poly1305_init ring_core_0_17_7_CRYPTO_poly1305_init
++%define CRYPTO_poly1305_init_neon ring_core_0_17_7_CRYPTO_poly1305_init_neon
++%define CRYPTO_poly1305_update ring_core_0_17_7_CRYPTO_poly1305_update
++%define CRYPTO_poly1305_update_neon ring_core_0_17_7_CRYPTO_poly1305_update_neon
++%define ChaCha20_ctr32 ring_core_0_17_7_ChaCha20_ctr32
++%define LIMBS_add_mod ring_core_0_17_7_LIMBS_add_mod
++%define LIMBS_are_even ring_core_0_17_7_LIMBS_are_even
++%define LIMBS_are_zero ring_core_0_17_7_LIMBS_are_zero
++%define LIMBS_equal ring_core_0_17_7_LIMBS_equal
++%define LIMBS_equal_limb ring_core_0_17_7_LIMBS_equal_limb
++%define LIMBS_less_than ring_core_0_17_7_LIMBS_less_than
++%define LIMBS_less_than_limb ring_core_0_17_7_LIMBS_less_than_limb
++%define LIMBS_reduce_once ring_core_0_17_7_LIMBS_reduce_once
++%define LIMBS_select_512_32 ring_core_0_17_7_LIMBS_select_512_32
++%define LIMBS_shl_mod ring_core_0_17_7_LIMBS_shl_mod
++%define LIMBS_sub_mod ring_core_0_17_7_LIMBS_sub_mod
++%define LIMBS_window5_split_window ring_core_0_17_7_LIMBS_window5_split_window
++%define LIMBS_window5_unsplit_window ring_core_0_17_7_LIMBS_window5_unsplit_window
++%define LIMB_shr ring_core_0_17_7_LIMB_shr
++%define OPENSSL_armcap_P ring_core_0_17_7_OPENSSL_armcap_P
++%define OPENSSL_cpuid_setup ring_core_0_17_7_OPENSSL_cpuid_setup
++%define OPENSSL_ia32cap_P ring_core_0_17_7_OPENSSL_ia32cap_P
++%define aes_hw_ctr32_encrypt_blocks ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++%define aes_hw_encrypt ring_core_0_17_7_aes_hw_encrypt
++%define aes_hw_set_encrypt_key ring_core_0_17_7_aes_hw_set_encrypt_key
++%define aes_nohw_ctr32_encrypt_blocks ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++%define aes_nohw_encrypt ring_core_0_17_7_aes_nohw_encrypt
++%define aes_nohw_set_encrypt_key ring_core_0_17_7_aes_nohw_set_encrypt_key
++%define aesni_gcm_decrypt ring_core_0_17_7_aesni_gcm_decrypt
++%define aesni_gcm_encrypt ring_core_0_17_7_aesni_gcm_encrypt
++%define bn_from_montgomery_in_place ring_core_0_17_7_bn_from_montgomery_in_place
++%define bn_gather5 ring_core_0_17_7_bn_gather5
++%define bn_mul_mont ring_core_0_17_7_bn_mul_mont
++%define bn_mul_mont_gather5 ring_core_0_17_7_bn_mul_mont_gather5
++%define bn_neg_inv_mod_r_u64 ring_core_0_17_7_bn_neg_inv_mod_r_u64
++%define bn_power5 ring_core_0_17_7_bn_power5
++%define bn_scatter5 ring_core_0_17_7_bn_scatter5
++%define bn_sqr8x_internal ring_core_0_17_7_bn_sqr8x_internal
++%define bn_sqrx8x_internal ring_core_0_17_7_bn_sqrx8x_internal
++%define bsaes_ctr32_encrypt_blocks ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++%define bssl_constant_time_test_conditional_memcpy ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++%define bssl_constant_time_test_conditional_memxor ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++%define bssl_constant_time_test_main ring_core_0_17_7_bssl_constant_time_test_main
++%define chacha20_poly1305_open ring_core_0_17_7_chacha20_poly1305_open
++%define chacha20_poly1305_seal ring_core_0_17_7_chacha20_poly1305_seal
++%define fiat_curve25519_adx_mul ring_core_0_17_7_fiat_curve25519_adx_mul
++%define fiat_curve25519_adx_square ring_core_0_17_7_fiat_curve25519_adx_square
++%define gcm_ghash_avx ring_core_0_17_7_gcm_ghash_avx
++%define gcm_ghash_clmul ring_core_0_17_7_gcm_ghash_clmul
++%define gcm_ghash_neon ring_core_0_17_7_gcm_ghash_neon
++%define gcm_gmult_clmul ring_core_0_17_7_gcm_gmult_clmul
++%define gcm_gmult_neon ring_core_0_17_7_gcm_gmult_neon
++%define gcm_init_avx ring_core_0_17_7_gcm_init_avx
++%define gcm_init_clmul ring_core_0_17_7_gcm_init_clmul
++%define gcm_init_neon ring_core_0_17_7_gcm_init_neon
++%define k25519Precomp ring_core_0_17_7_k25519Precomp
++%define limbs_mul_add_limb ring_core_0_17_7_limbs_mul_add_limb
++%define little_endian_bytes_from_scalar ring_core_0_17_7_little_endian_bytes_from_scalar
++%define ecp_nistz256_neg ring_core_0_17_7_ecp_nistz256_neg
++%define ecp_nistz256_select_w5 ring_core_0_17_7_ecp_nistz256_select_w5
++%define ecp_nistz256_select_w7 ring_core_0_17_7_ecp_nistz256_select_w7
++%define p256_mul_mont ring_core_0_17_7_p256_mul_mont
++%define p256_point_add ring_core_0_17_7_p256_point_add
++%define p256_point_add_affine ring_core_0_17_7_p256_point_add_affine
++%define p256_point_double ring_core_0_17_7_p256_point_double
++%define p256_point_mul ring_core_0_17_7_p256_point_mul
++%define p256_point_mul_base ring_core_0_17_7_p256_point_mul_base
++%define p256_point_mul_base_vartime ring_core_0_17_7_p256_point_mul_base_vartime
++%define p256_scalar_mul_mont ring_core_0_17_7_p256_scalar_mul_mont
++%define p256_scalar_sqr_rep_mont ring_core_0_17_7_p256_scalar_sqr_rep_mont
++%define p256_sqr_mont ring_core_0_17_7_p256_sqr_mont
++%define p384_elem_div_by_2 ring_core_0_17_7_p384_elem_div_by_2
++%define p384_elem_mul_mont ring_core_0_17_7_p384_elem_mul_mont
++%define p384_elem_neg ring_core_0_17_7_p384_elem_neg
++%define p384_elem_sub ring_core_0_17_7_p384_elem_sub
++%define p384_point_add ring_core_0_17_7_p384_point_add
++%define p384_point_double ring_core_0_17_7_p384_point_double
++%define p384_point_mul ring_core_0_17_7_p384_point_mul
++%define p384_scalar_mul_mont ring_core_0_17_7_p384_scalar_mul_mont
++%define openssl_poly1305_neon2_addmulmod ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++%define openssl_poly1305_neon2_blocks ring_core_0_17_7_openssl_poly1305_neon2_blocks
++%define sha256_block_data_order ring_core_0_17_7_sha256_block_data_order
++%define sha512_block_data_order ring_core_0_17_7_sha512_block_data_order
++%define vpaes_ctr32_encrypt_blocks ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++%define vpaes_encrypt ring_core_0_17_7_vpaes_encrypt
++%define vpaes_encrypt_key_to_bsaes ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++%define vpaes_set_encrypt_key ring_core_0_17_7_vpaes_set_encrypt_key
++%define x25519_NEON ring_core_0_17_7_x25519_NEON
++%define x25519_fe_invert ring_core_0_17_7_x25519_fe_invert
++%define x25519_fe_isnegative ring_core_0_17_7_x25519_fe_isnegative
++%define x25519_fe_mul_ttt ring_core_0_17_7_x25519_fe_mul_ttt
++%define x25519_fe_neg ring_core_0_17_7_x25519_fe_neg
++%define x25519_fe_tobytes ring_core_0_17_7_x25519_fe_tobytes
++%define x25519_ge_double_scalarmult_vartime ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++%define x25519_ge_frombytes_vartime ring_core_0_17_7_x25519_ge_frombytes_vartime
++%define x25519_ge_scalarmult_base ring_core_0_17_7_x25519_ge_scalarmult_base
++%define x25519_ge_scalarmult_base_adx ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++%define x25519_public_from_private_generic_masked ring_core_0_17_7_x25519_public_from_private_generic_masked
++%define x25519_sc_mask ring_core_0_17_7_x25519_sc_mask
++%define x25519_sc_muladd ring_core_0_17_7_x25519_sc_muladd
++%define x25519_sc_reduce ring_core_0_17_7_x25519_sc_reduce
++%define x25519_scalar_mult_adx ring_core_0_17_7_x25519_scalar_mult_adx
++%define x25519_scalar_mult_generic_masked ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++%endif
++%endif
diff --git a/gnu/packages/patches/rust-rspec-1-remove-clippy.patch b/gnu/packages/patches/rust-rspec-1-remove-clippy.patch
new file mode 100644
index 0000000000..46c994f7ee
--- /dev/null
+++ b/gnu/packages/patches/rust-rspec-1-remove-clippy.patch
@@ -0,0 +1,16 @@
+Remove the dependency on clippy
+
+diff --git a/Cargo.toml b/Cargo.toml
+index 177cb80..7260c34 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -39,9 +39,6 @@ version = "1.5"
+
+ [dependencies.time]
+ version = "0.2"
+-[build-dependencies.clippy]
+-version = "0.0.153"
+-optional = true
+
+ [features]
+ default = []
diff --git a/gnu/packages/patches/rust-trash-2-update-windows.patch b/gnu/packages/patches/rust-trash-2-update-windows.patch
new file mode 100644
index 0000000000..f6b13a4658
--- /dev/null
+++ b/gnu/packages/patches/rust-trash-2-update-windows.patch
@@ -0,0 +1,132 @@
+This patch is taken from upstream so we can use an already packaged
+version of the windows crate.
+
+diff --git a/Cargo.toml b/Cargo.toml
+index 2c28dfe..6b61771 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -87,9 +87,8 @@ version = "0.2.7"
+ version = "1.0.0"
+
+ [target."cfg(windows)".dependencies.windows]
+-version = "0.37.0"
++version = "0.44.0"
+ features = [
+- "alloc",
+ "Win32_Foundation",
+ "Win32_System_Com_StructuredStorage",
+ "Win32_UI_Shell_PropertiesSystem",
+diff --git a/Cargo.toml.orig b/Cargo.toml.orig
+index 894a78c..c17fc02 100644
+--- a/Cargo.toml.orig
++++ b/Cargo.toml.orig
+@@ -44,7 +44,7 @@ once_cell = "1.7.2"
+ once_cell = "1.7.2"
+
+ [target.'cfg(windows)'.dependencies]
+-windows = { version = "0.37.0", features = [ "alloc",
++windows = { version = "0.44.0", features = [
+ "Win32_Foundation",
+ "Win32_System_Com_StructuredStorage",
+ "Win32_UI_Shell_PropertiesSystem",
+diff --git a/src/windows.rs b/src/windows.rs
+index c1379d3..3f4426b 100644
+--- a/src/windows.rs
++++ b/src/windows.rs
+@@ -1,7 +1,6 @@
+ use crate::{Error, TrashContext, TrashItem};
+ use std::{
+- ffi::{OsStr, OsString},
+- mem::MaybeUninit,
++ ffi::{c_void, OsStr, OsString},
+ os::windows::{ffi::OsStrExt, prelude::*},
+ path::PathBuf,
+ };
+@@ -66,7 +65,7 @@ impl TrashContext {
+ let shi: IShellItem =
+ SHCreateItemFromParsingName(PCWSTR(wide_path_slice.as_ptr()), None)?;
+
+- pfo.DeleteItem(shi, None)?;
++ pfo.DeleteItem(&shi, None)?;
+ }
+ pfo.PerformOperations()?;
+ Ok(())
+@@ -78,28 +77,18 @@ pub fn list() -> Result<Vec<TrashItem>, Error> {
+ ensure_com_initialized();
+ unsafe {
+ let mut item_vec = Vec::new();
+- let mut recycle_bin = MaybeUninit::<Option<IShellItem>>::uninit();
+
+- SHGetKnownFolderItem(
+- &FOLDERID_RecycleBinFolder,
+- KF_FLAG_DEFAULT,
+- HANDLE::default(),
+- &IShellItem::IID,
+- recycle_bin.as_mut_ptr() as _,
+- )?;
+-
+- let recycle_bin = recycle_bin.assume_init().ok_or(Error::Unknown {
+- description: "SHGetKnownFolderItem gave NULL for FOLDERID_RecycleBinFolder".into(),
+- })?;
++ let recycle_bin: IShellItem =
++ SHGetKnownFolderItem(&FOLDERID_RecycleBinFolder, KF_FLAG_DEFAULT, HANDLE::default())?;
+
+ let pesi: IEnumShellItems = recycle_bin.BindToHandler(None, &BHID_EnumItems)?;
+- let mut fetched: u32 = 0;
+
+ loop {
++ let mut fetched_count: u32 = 0;
+ let mut arr = [None];
+- pesi.Next(&mut arr, &mut fetched)?;
++ pesi.Next(&mut arr, Some(&mut fetched_count as *mut u32))?;
+
+- if fetched == 0 {
++ if fetched_count == 0 {
+ break;
+ }
+
+@@ -145,7 +134,7 @@ where
+ at_least_one = true;
+ let id_as_wide: Vec<u16> = item.id.encode_wide().chain(std::iter::once(0)).collect();
+ let parsing_name = PCWSTR(id_as_wide.as_ptr());
+- let trash_item: IShellItem = SHCreateItemFromParsingName(&parsing_name, None)?;
++ let trash_item: IShellItem = SHCreateItemFromParsingName(parsing_name, None)?;
+ pfo.DeleteItem(&trash_item, None)?;
+ }
+ if at_least_one {
+@@ -181,7 +170,7 @@ where
+ for item in items.iter() {
+ let id_as_wide: Vec<u16> = item.id.encode_wide().chain(std::iter::once(0)).collect();
+ let parsing_name = PCWSTR(id_as_wide.as_ptr());
+- let trash_item: IShellItem = SHCreateItemFromParsingName(&parsing_name, None)?;
++ let trash_item: IShellItem = SHCreateItemFromParsingName(parsing_name, None)?;
+ let parent_path_wide: Vec<_> =
+ item.original_parent.as_os_str().encode_wide().chain(std::iter::once(0)).collect();
+ let orig_folder_shi: IShellItem =
+@@ -191,7 +180,7 @@ where
+ .chain(std::iter::once(0))
+ .collect();
+
+- pfo.MoveItem(trash_item, orig_folder_shi, PCWSTR(name_wstr.as_ptr()), None)?;
++ pfo.MoveItem(&trash_item, &orig_folder_shi, PCWSTR(name_wstr.as_ptr()), None)?;
+ }
+ if !items.is_empty() {
+ pfo.PerformOperations()?;
+@@ -203,7 +192,7 @@ where
+ unsafe fn get_display_name(psi: &IShellItem, sigdnname: SIGDN) -> Result<OsString, Error> {
+ let name = psi.GetDisplayName(sigdnname)?;
+ let result = wstr_to_os_string(name);
+- CoTaskMemFree(name.0 as _);
++ CoTaskMemFree(Some(name.0 as *const c_void));
+ Ok(result)
+ }
+
+@@ -257,7 +246,7 @@ impl CoInitializer {
+ if cfg!(feature = "coinit_speed_over_memory") {
+ init_mode |= COINIT_SPEED_OVER_MEMORY;
+ }
+- let hr = unsafe { CoInitializeEx(std::ptr::null_mut(), init_mode) };
++ let hr = unsafe { CoInitializeEx(None, init_mode) };
+ if hr.is_err() {
+ panic!("Call to CoInitializeEx failed. HRESULT: {:?}. Consider using `trash` with the feature `coinit_multithreaded`", hr);
+ }
diff --git a/gnu/packages/patches/rustc-1.54.0-src.patch b/gnu/packages/patches/rustc-1.54.0-src.patch
index d075dce39b..d322fd0d49 100644
--- a/gnu/packages/patches/rustc-1.54.0-src.patch
+++ b/gnu/packages/patches/rustc-1.54.0-src.patch
@@ -28,51 +28,111 @@
rustc_data_structures::static_assert_size!(ForeignItemKind, 72);
impl From<ForeignItemKind> for ItemKind {
+
--- compiler/rustc_hir/src/hir.rs
+++ compiler/rustc_hir/src/hir.rs
-@@ -3050,3 +3050,3 @@
+@@ -3048,7 +3048,7 @@ impl<'hir> Node<'hir> {
+ }
+
// Some nodes are used a lot. Make sure they don't unintentionally get bigger.
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler="mrustc"),target_arch = "x86_64", target_pointer_width = "64"))]
mod size_asserts {
+ rustc_data_structures::static_assert_size!(super::Block<'static>, 48);
+ rustc_data_structures::static_assert_size!(super::Expr<'static>, 64);
+
--- compiler/rustc_middle/src/mir/interpret/error.rs
+++ compiler/rustc_middle/src/mir/interpret/error.rs
-@@ -452,2 +452,2 @@
+@@ -449,7 +449,7 @@ impl dyn MachineStopType {
+ }
+ }
+
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler="mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
static_assert_size!(InterpError<'_>, 64);
+
+ pub enum InterpError<'tcx> {
+
--- compiler/rustc_middle/src/mir/mod.rs
+++ compiler/rustc_middle/src/mir/mod.rs
-@@ -2203,2 +2203,2 @@
+@@ -2200,7 +2200,7 @@ pub enum AggregateKind<'tcx> {
+ Generator(DefId, SubstsRef<'tcx>, hir::Movability),
+ }
+
-#[cfg(target_arch = "x86_64")]
+#[cfg(all(not(rust_compiler="mrustc"), target_arch = "x86_64"))]
static_assert_size!(AggregateKind<'_>, 48);
+
+ #[derive(Copy, Clone, Debug, PartialEq, PartialOrd, Eq, TyEncodable, TyDecodable, Hash, HashStable)]
+
--- compiler/rustc_middle/src/thir.rs
+++ compiler/rustc_middle/src/thir.rs
-@@ -147,2 +147,2 @@
+@@ -144,7 +144,7 @@ pub enum StmtKind<'tcx> {
+ }
+
+ // `Expr` is used a lot. Make sure it doesn't unintentionally get bigger.
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler="mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
rustc_data_structures::static_assert_size!(Expr<'_>, 144);
---- compiler/rustc_mir/src/interpret/place.rs
-+++ compiler/rustc_mir/src/interpret/place.rs
-@@ -91,2 +91,2 @@
--#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-+#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
- rustc_data_structures::static_assert_size!(Place, 64);
-@@ -100,2 +100,2 @@
--#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
-+#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
- rustc_data_structures::static_assert_size!(PlaceTy<'_>, 80);
+
+ /// The Thir trait implementor lowers their expressions (`&'tcx H::Expr`)
+
--- compiler/rustc_mir/src/interpret/operand.rs
+++ compiler/rustc_mir/src/interpret/operand.rs
-@@ -35,2 +35,2 @@
+@@ -32,7 +32,7 @@ pub enum Immediate<Tag = ()> {
+ ScalarPair(ScalarMaybeUninit<Tag>, ScalarMaybeUninit<Tag>),
+ }
+
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
rustc_data_structures::static_assert_size!(Immediate, 56);
-@@ -90,2 +90,2 @@
+
+ impl<Tag> From<ScalarMaybeUninit<Tag>> for Immediate<Tag> {
+@@ -87,7 +87,7 @@ pub struct ImmTy<'tcx, Tag = ()> {
+ pub layout: TyAndLayout<'tcx>,
+ }
+
-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
+#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
rustc_data_structures::static_assert_size!(ImmTy<'_>, 72);
+
+ impl<Tag: Copy> std::fmt::Display for ImmTy<'tcx, Tag> {
+
+--- compiler/rustc_mir/src/interpret/place.rs
++++ compiler/rustc_mir/src/interpret/place.rs
+@@ -88,7 +88,7 @@ pub enum Place<Tag = ()> {
+ Local { frame: usize, local: mir::Local },
+ }
+
+-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
++#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
+ rustc_data_structures::static_assert_size!(Place, 64);
+
+ #[derive(Copy, Clone, Debug)]
+@@ -97,7 +97,7 @@ pub struct PlaceTy<'tcx, Tag = ()> {
+ pub layout: TyAndLayout<'tcx>,
+ }
+
+-#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
++#[cfg(all(not(rust_compiler = "mrustc"), target_arch = "x86_64", target_pointer_width = "64"))]
+ rustc_data_structures::static_assert_size!(PlaceTy<'_>, 80);
+
+ impl<'tcx, Tag> std::ops::Deref for PlaceTy<'tcx, Tag> {
+
+#
+# Disable std_detect's detection logic (use the same logic as miri)
+#
+--- library/stdarch/crates/std_detect/src/detect/mod.rs
++++ library/stdarch/crates/std_detect/src/detect/mod.rs
+@@ -86,7 +86,7 @@ mod bit;
+ mod cache;
+
+ cfg_if! {
+- if #[cfg(miri)] {
++ if #[cfg(any(miri, rust_compiler = "mrustc"))] {
+ // When running under miri all target-features that are not enabled at
+ // compile-time are reported as disabled at run-time.
+ //
#
# Disable crc32fast's use of stdarch
@@ -88,19 +148,145 @@
))] {
#
-# Disable std_detect's detection logic (use the same logic as miri)
+# Backport which is required to support arm64 on macOS 12
+# See: https://github.com/alexcrichton/curl-rust/commit/0aea09c428b9bc2bcf46da0fc33959fe3f03c74a
#
---- library/stdarch/crates/std_detect/src/detect/mod.rs
-+++ library/stdarch/crates/std_detect/src/detect/mod.rs
-@@ -88,2 +88,2 @@
- cfg_if! {
-- if #[cfg(miri)] {
-+ if #[cfg(any(miri, rust_compiler = "mrustc"))] {
+--- vendor/curl/src/lib.rs
++++ vendor/curl/src/lib.rs
+@@ -82,6 +82,9 @@ pub mod easy;
+ pub mod multi;
+ mod panic;
+
++#[cfg(test)]
++static INITIALIZED: std::sync::atomic::AtomicBool = std::sync::atomic::AtomicBool::new(false);
++
+ /// Initializes the underlying libcurl library.
+ ///
+ /// The underlying libcurl library must be initialized before use, and must be
+@@ -102,46 +105,62 @@ pub fn init() {
+ /// Used to prevent concurrent or duplicate initialization.
+ static INIT: Once = Once::new();
+
+- /// An exported constructor function. On supported platforms, this will be
+- /// invoked automatically before the program's `main` is called.
+- #[cfg_attr(
+- any(target_os = "linux", target_os = "freebsd", target_os = "android"),
+- link_section = ".init_array"
+- )]
+- #[cfg_attr(target_os = "macos", link_section = "__DATA,__mod_init_func")]
+- #[cfg_attr(target_os = "windows", link_section = ".CRT$XCU")]
+- static INIT_CTOR: extern "C" fn() = init_inner;
++ INIT.call_once(|| {
++ #[cfg(need_openssl_init)]
++ openssl_probe::init_ssl_cert_env_vars();
++ #[cfg(need_openssl_init)]
++ openssl_sys::init();
++
++ unsafe {
++ assert_eq!(curl_sys::curl_global_init(curl_sys::CURL_GLOBAL_ALL), 0);
++ }
++
++ #[cfg(test)]
++ {
++ INITIALIZED.store(true, std::sync::atomic::Ordering::SeqCst);
++ }
++
++ // Note that we explicitly don't schedule a call to
++ // `curl_global_cleanup`. The documentation for that function says
++ //
++ // > You must not call it when any other thread in the program (i.e. a
++ // > thread sharing the same memory) is running. This doesn't just mean
++ // > no other thread that is using libcurl.
++ //
++ // We can't ever be sure of that, so unfortunately we can't call the
++ // function.
++ });
++}
+
++/// An exported constructor function. On supported platforms, this will be
++/// invoked automatically before the program's `main` is called. This is done
++/// for the convenience of library users since otherwise the thread-safety rules
++/// around initialization can be difficult to fulfill.
++///
++/// This is a hidden public item to ensure the symbol isn't optimized away by a
++/// rustc/LLVM bug: https://github.com/rust-lang/rust/issues/47384. As long as
++/// any item in this module is used by the final binary (which `init` will be)
++/// then this symbol should be preserved.
++#[used]
++#[doc(hidden)]
++#[cfg_attr(
++ any(target_os = "linux", target_os = "freebsd", target_os = "android"),
++ link_section = ".init_array"
++)]
++#[cfg_attr(target_os = "macos", link_section = "__DATA,__mod_init_func")]
++#[cfg_attr(target_os = "windows", link_section = ".CRT$XCU")]
++pub static INIT_CTOR: extern "C" fn() = {
+ /// This is the body of our constructor function.
+ #[cfg_attr(
+ any(target_os = "linux", target_os = "android"),
+ link_section = ".text.startup"
+ )]
+- extern "C" fn init_inner() {
+- INIT.call_once(|| {
+- #[cfg(need_openssl_init)]
+- openssl_sys::init();
+-
+- unsafe {
+- assert_eq!(curl_sys::curl_global_init(curl_sys::CURL_GLOBAL_ALL), 0);
+- }
+-
+- // Note that we explicitly don't schedule a call to
+- // `curl_global_cleanup`. The documentation for that function says
+- //
+- // > You must not call it when any other thread in the program (i.e.
+- // > a thread sharing the same memory) is running. This doesn't just
+- // > mean no other thread that is using libcurl.
+- //
+- // We can't ever be sure of that, so unfortunately we can't call the
+- // function.
+- });
++ extern "C" fn init_ctor() {
++ init();
+ }
+
+- // We invoke our init function through our static to ensure the symbol isn't
+- // optimized away by a bug: https://github.com/rust-lang/rust/issues/47384
+- INIT_CTOR();
+-}
++ init_ctor
++};
+
+ unsafe fn opt_str<'a>(ptr: *const libc::c_char) -> Option<&'a str> {
+ if ptr.is_null() {
+@@ -158,3 +177,20 @@ fn cvt(r: curl_sys::CURLcode) -> Result<(), Error> {
+ Err(Error::new(r))
+ }
+ }
++
++#[cfg(test)]
++mod tests {
++ use super::*;
++
++ #[test]
++ #[cfg(any(
++ target_os = "linux",
++ target_os = "macos",
++ target_os = "windows",
++ target_os = "freebsd",
++ target_os = "android"
++ ))]
++ fn is_initialized_before_main() {
++ assert!(INITIALIZED.load(std::sync::atomic::Ordering::SeqCst));
++ }
++}
# PPV-Lite also needs to know that we're pretending to be miri
--- vendor/ppv-lite86/src/lib.rs
+++ vendor/ppv-lite86/src/lib.rs
-@@ -12,9 +12,9 @@
+@@ -9,14 +9,14 @@ mod soft;
+ mod types;
+ pub use self::types::*;
+
-#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri)))]
+#[cfg(all(feature = "simd", target_arch = "x86_64", not(miri), not(rust_compiler = "mrustc")))]
pub mod x86_64;
@@ -114,4 +300,5 @@
-#[cfg(any(miri, not(all(feature = "simd", any(target_arch = "x86_64")))))]
+#[cfg(any(miri, rust_compiler = "mrustc", not(all(feature = "simd", any(target_arch = "x86_64")))))]
use self::generic as arch;
-
+
+ pub use self::arch::{vec128_storage, vec256_storage, vec512_storage};
diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.03.0.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.03.0.patch
deleted file mode 100644
index f7a0c03fdd..0000000000
--- a/gnu/packages/patches/scribus-1.5.8-poppler-22.03.0.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From f19410ac3b27e33dd62105746784e61e85b90a1d Mon Sep 17 00:00:00 2001
-From: Jean Ghali <jghali@libertysurf.fr>
-Date: Wed, 2 Mar 2022 22:22:53 +0000
-Subject: [PATCH] #16764: Build break with poppler 22.03.0
-
-git-svn-id: svn://scribus.net/trunk/Scribus@24982 11d20701-8431-0410-a711-e3c959e3b870
----
- scribus/plugins/import/pdf/importpdf.cpp | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/scribus/plugins/import/pdf/importpdf.cpp b/scribus/plugins/import/pdf/importpdf.cpp
-index 154e58a3f0..392dcd9e64 100644
---- a/scribus/plugins/import/pdf/importpdf.cpp
-+++ b/scribus/plugins/import/pdf/importpdf.cpp
-@@ -89,7 +89,11 @@ QImage PdfPlug::readThumbnail(const QString& fName)
- #endif
- globalParams->setErrQuiet(gTrue);
-
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0)
-+ PDFDoc pdfDoc{ std::make_unique<GooString>(fname) };
-+#else
- PDFDoc pdfDoc{fname, nullptr, nullptr, nullptr};
-+#endif
- if (!pdfDoc.isOk() || pdfDoc.getErrorCode() == errEncrypted)
- return QImage();
-
-@@ -342,7 +346,11 @@ bool PdfPlug::convert(const QString& fn)
- globalParams->setErrQuiet(gTrue);
- // globalParams->setPrintCommands(gTrue);
- QList<OptionalContentGroup*> ocgGroups;
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0)
-+ auto pdfDoc = std::make_unique<PDFDoc>(std::make_unique<GooString>(fname));
-+#else
- auto pdfDoc = std::unique_ptr<PDFDoc>(new PDFDoc(fname, nullptr, nullptr, nullptr));
-+#endif
- if (pdfDoc)
- {
- if (pdfDoc->getErrorCode() == errEncrypted)
-@@ -361,8 +369,13 @@ bool PdfPlug::convert(const QString& fn)
- #else
- auto fname = new GooString(QFile::encodeName(fn).data());
- #endif
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0)
-+ std::optional<GooString> userPW(std::in_place, text.toLocal8Bit().data());
-+ pdfDoc.reset(new PDFDoc(std::make_unique<GooString>(fname), userPW, userPW, nullptr));
-+#else
- auto userPW = new GooString(text.toLocal8Bit().data());
- pdfDoc.reset(new PDFDoc(fname, userPW, userPW, nullptr));
-+#endif
- qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
- }
- if ((!pdfDoc) || (pdfDoc->getErrorCode() != errNone))
diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.04.0.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.04.0.patch
deleted file mode 100644
index 290484e7e8..0000000000
--- a/gnu/packages/patches/scribus-1.5.8-poppler-22.04.0.patch
+++ /dev/null
@@ -1,291 +0,0 @@
-https://bugs.gentoo.org/843287
-https://github.com/scribusproject/scribus/commit/f2237b8f0b5cf7690e864a22ef7a63a6d769fa36.patch
-
-From f2237b8f0b5cf7690e864a22ef7a63a6d769fa36 Mon Sep 17 00:00:00 2001
-From: Jean Ghali <jghali@libertysurf.fr>
-Date: Fri, 1 Apr 2022 23:52:32 +0000
-Subject: [PATCH] Fix build with poppler 22.04.0
-
-git-svn-id: svn://scribus.net/trunk/Scribus@25074 11d20701-8431-0410-a711-e3c959e3b870
----
- scribus/plugins/import/pdf/slaoutput.cpp | 123 ++++++++++++++---------
- 1 file changed, 78 insertions(+), 45 deletions(-)
-
-diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp
-index e20a81f99e..5626fe3477 100644
---- a/scribus/plugins/import/pdf/slaoutput.cpp
-+++ b/scribus/plugins/import/pdf/slaoutput.cpp
-@@ -174,8 +174,13 @@ void AnoOutputDev::drawString(GfxState *state, POPPLER_CONST GooString *s)
- int shade = 100;
- currColorText = getColor(state->getFillColorSpace(), state->getFillColor(), &shade);
- fontSize = state->getFontSize();
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ if (state->getFont() && state->getFont()->getName())
-+ fontName = new GooString(state->getFont()->getName().value());
-+#else
- if (state->getFont())
- fontName = state->getFont()->getName()->copy();
-+#endif
- itemText = s->copy();
- }
-
-@@ -357,7 +362,12 @@ std::unique_ptr<LinkAction> SlaOutputDev::SC_getAdditionalAction(const char *key
- GBool SlaOutputDev::annotations_callback(Annot *annota, void *user_data)
- {
- SlaOutputDev *dev = (SlaOutputDev*)user_data;
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ const PDFRectangle& annotRect = annota->getRect();;
-+ const PDFRectangle* box = &annotRect;
-+#else
- PDFRectangle *box = annota->getRect();
-+#endif
- double xCoor = dev->m_doc->currentPage()->xOffset() + box->x1 - dev->cropOffsetX;
- double yCoor = dev->m_doc->currentPage()->yOffset() + dev->m_doc->currentPage()->height() - box->y2 + dev->cropOffsetY;
- double width = box->x2 - box->x1;
-@@ -684,7 +694,12 @@ bool SlaOutputDev::handleWidgetAnnot(Annot* annota, double xCoor, double yCoor,
- if (apa || !achar)
- {
- AnoOutputDev *annotOutDev = new AnoOutputDev(m_doc, m_importedColors);
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ const PDFRectangle& annotaRect = annota->getRect();
-+ Gfx* gfx = new Gfx(pdfDoc, annotOutDev, pdfDoc->getPage(m_actPage)->getResourceDict(), &annotaRect, nullptr);
-+#else
- Gfx *gfx = new Gfx(pdfDoc, annotOutDev, pdfDoc->getPage(m_actPage)->getResourceDict(), annota->getRect(), nullptr);
-+#endif
- ano->draw(gfx, false);
- if (!bgFound)
- m_currColorFill = annotOutDev->currColorFill;
-@@ -2916,22 +2931,27 @@ void SlaOutputDev::markPoint(POPPLER_CONST char *name, Dict *properties)
-
- void SlaOutputDev::updateFont(GfxState *state)
- {
-- GfxFont *gfxFont;
--#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ std::optional<GfxFontLoc> fontLoc;
-+ std::string fileName;
-+ std::unique_ptr<FoFiTrueType> ff;
-+ std::optional<std::vector<unsigned char>> tmpBuf;
-+#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
- std::optional<GfxFontLoc> fontLoc;
- const GooString * fileName = nullptr;
- std::unique_ptr<FoFiTrueType> ff;
-+ char* tmpBuf = nullptr;
- #else
- GfxFontLoc * fontLoc = nullptr;
- GooString * fileName = nullptr;
- FoFiTrueType * ff = nullptr;
-+ char* tmpBuf = nullptr;
- #endif
- GfxFontType fontType;
- SlaOutFontFileID *id;
- SplashFontFile *fontFile;
- SplashFontSrc *fontsrc = nullptr;
- Object refObj, strObj;
-- char *tmpBuf = nullptr;
- int tmpBufLen = 0;
- int *codeToGID = nullptr;
- const double *textMat = nullptr;
-@@ -2943,7 +2963,11 @@ void SlaOutputDev::updateFont(GfxState *state)
-
- m_font = nullptr;
-
-- gfxFont = state->getFont();
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ GfxFont* gfxFont = state->getFont().get();
-+#else
-+ GfxFont* gfxFont = state->getFont();
-+#endif
- if (!gfxFont)
- goto err1;
-
-@@ -2968,15 +2992,23 @@ void SlaOutputDev::updateFont(GfxState *state)
- if (fontLoc->locType == gfxFontLocEmbedded)
- {
- // if there is an embedded font, read it to memory
-- tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen);
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ tmpBuf = gfxFont->readEmbFontFile((xref) ? xref : pdfDoc->getXRef());
- if (! tmpBuf)
- goto err2;
-+#else
-+ tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen);
-+ if (!tmpBuf)
-+ goto err2;
-+#endif
-
- // external font
- }
- else
- { // gfxFontLocExternal
--#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ fileName = fontLoc->path;
-+#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
- fileName = fontLoc->pathAsGooString();
- #else
- fileName = fontLoc->path;
-@@ -2985,52 +3017,54 @@ void SlaOutputDev::updateFont(GfxState *state)
- }
-
- fontsrc = new SplashFontSrc;
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ if (!fileName.empty())
-+ fontsrc->setFile(fileName);
-+ else
-+ fontsrc->setBuf(std::move(tmpBuf.value()));
-+#else
- if (fileName)
- fontsrc->setFile(fileName, gFalse);
- else
- fontsrc->setBuf(tmpBuf, tmpBufLen, gTrue);
-+#endif
-
- // load the font file
- switch (fontType) {
- case fontType1:
-- if (!(fontFile = m_fontEngine->loadType1Font(
-- id,
-- fontsrc,
-- (const char **)((Gfx8BitFont *) gfxFont)->getEncoding())))
-+ if (!(fontFile = m_fontEngine->loadType1Font(id, fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding())))
- {
-- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
-- gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
-+ error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
- goto err2;
- }
- break;
- case fontType1C:
-- if (!(fontFile = m_fontEngine->loadType1CFont(
-- id,
-- fontsrc,
-- (const char **)((Gfx8BitFont *) gfxFont)->getEncoding())))
-+ if (!(fontFile = m_fontEngine->loadType1CFont(id, fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding())))
- {
-- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
-- gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
-+ error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
- goto err2;
- }
- break;
- case fontType1COT:
-- if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont(
-- id,
-- fontsrc,
-- (const char **)((Gfx8BitFont *) gfxFont)->getEncoding())))
-+ if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont(id, fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding())))
- {
-- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
-- gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
-+ error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
- goto err2;
- }
- break;
- case fontTrueType:
- case fontTrueTypeOT:
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ if (!fileName.empty())
-+ ff = FoFiTrueType::load(fileName.c_str());
-+ else
-+ ff = FoFiTrueType::make(fontsrc->buf.data(), fontsrc->buf.size());
-+#else
- if (fileName)
- ff = FoFiTrueType::load(fileName->getCString());
- else
- ff = FoFiTrueType::make(tmpBuf, tmpBufLen);
-+#endif
- if (ff)
- {
- #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
-@@ -3047,24 +3081,17 @@ void SlaOutputDev::updateFont(GfxState *state)
- codeToGID = nullptr;
- n = 0;
- }
-- if (!(fontFile = m_fontEngine->loadTrueTypeFont(
-- id,
-- fontsrc,
-- codeToGID, n)))
-+ if (!(fontFile = m_fontEngine->loadTrueTypeFont(id, fontsrc, codeToGID, n)))
- {
-- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
-- gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
-+ error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
- goto err2;
- }
- break;
- case fontCIDType0:
- case fontCIDType0C:
-- if (!(fontFile = m_fontEngine->loadCIDFont(
-- id,
-- fontsrc)))
-+ if (!(fontFile = m_fontEngine->loadCIDFont(id, fontsrc)))
- {
-- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
-- gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
-+ error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
- goto err2;
- }
- break;
-@@ -3080,10 +3107,7 @@ void SlaOutputDev::updateFont(GfxState *state)
- codeToGID = nullptr;
- n = 0;
- }
-- if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(
-- id,
-- fontsrc,
-- codeToGID, n)))
-+ if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(id, fontsrc, codeToGID, n)))
- {
- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
- gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
-@@ -3105,10 +3129,17 @@ void SlaOutputDev::updateFont(GfxState *state)
- }
- else
- {
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
-+ if (!fileName.empty())
-+ ff = FoFiTrueType::load(fileName.c_str());
-+ else
-+ ff = FoFiTrueType::make(fontsrc->buf.data(), fontsrc->buf.size());
-+#else
- if (fileName)
- ff = FoFiTrueType::load(fileName->getCString());
- else
- ff = FoFiTrueType::make(tmpBuf, tmpBufLen);
-+#endif
- if (! ff)
- goto err2;
- #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
-@@ -3119,13 +3150,9 @@ void SlaOutputDev::updateFont(GfxState *state)
- delete ff;
- #endif
- }
-- if (!(fontFile = m_fontEngine->loadTrueTypeFont(
-- id,
-- fontsrc,
-- codeToGID, n, faceIndex)))
-+ if (!(fontFile = m_fontEngine->loadTrueTypeFont(id, fontsrc, codeToGID, n, faceIndex)))
- {
-- error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
-- gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
-+ error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
- goto err2;
- }
- break;
-@@ -3269,9 +3296,15 @@ void SlaOutputDev::drawChar(GfxState* state, double x, double y, double dx, doub
- GBool SlaOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, POPPLER_CONST_082 Unicode *u, int uLen)
- {
- // qDebug() << "beginType3Char";
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0)
- GfxFont *gfxFont;
-+ if (!(gfxFont = state->getFont().get()))
-+ return gTrue;
-+#else
-+ GfxFont* gfxFont;
- if (!(gfxFont = state->getFont()))
- return gTrue;
-+#endif
- if (gfxFont->getType() != fontType3)
- return gTrue;
- F3Entry f3e;
diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.09.0.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.09.0.patch
deleted file mode 100644
index 106a6f5162..0000000000
--- a/gnu/packages/patches/scribus-1.5.8-poppler-22.09.0.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/scribus/plugins/import/pdf/slaoutput.cpp
-+++ b/scribus/plugins/import/pdf/slaoutput.cpp
-@@ -3741,9 +3741,16 @@ void SlaOutputDev::getPenState(GfxState *state)
- break;
- }
- double lw = state->getLineWidth();
-- double *dashPattern;
- int dashLength;
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 9, 0)
-+ const double *dashPattern;
-+ const std::vector<double> &dash = state->getLineDash(&DashOffset);
-+ dashPattern = dash.data();
-+ dashLength = dash.size();
-+#else
-+ double *dashPattern;
- state->getLineDash(&dashPattern, &dashLength, &DashOffset);
-+#endif
- QVector<double> pattern(dashLength);
- for (int i = 0; i < dashLength; ++i)
- {
diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch
deleted file mode 100644
index 4e0f607c6a..0000000000
--- a/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-1.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-From 85c0dff3422fa3c26fbc2e8d8561f597ec24bd92 Mon Sep 17 00:00:00 2001
-From: Jean Ghali <jghali@libertysurf.fr>
-Date: Wed, 2 Feb 2022 23:12:52 +0000
-Subject: [PATCH] #16734: Build break with poppler 22.2.0
-
-git-svn-id: svn://scribus.net/trunk/Scribus@24884 11d20701-8431-0410-a711-e3c959e3b870
----
- scribus/plugins/import/pdf/slaoutput.cpp | 47 +++++++++++++++++++-----
- 1 file changed, 37 insertions(+), 10 deletions(-)
-
-diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp
-index 5894bf2ad6..3650c96f52 100644
---- a/scribus/plugins/import/pdf/slaoutput.cpp
-+++ b/scribus/plugins/import/pdf/slaoutput.cpp
-@@ -7,6 +7,11 @@ for which a new license (GPL+exception) is in place.
-
- #include "slaoutput.h"
-
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
-+#include <memory>
-+#include <optional>
-+#endif
-+
- #include <poppler/GlobalParams.h>
- #include <poppler/poppler-config.h>
- #include <poppler/FileSpec.h>
-@@ -3027,18 +3032,24 @@ void SlaOutputDev::markPoint(POPPLER_CONST char *name, Dict *properties)
- void SlaOutputDev::updateFont(GfxState *state)
- {
- GfxFont *gfxFont;
-- GfxFontLoc *fontLoc;
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
-+ std::optional<GfxFontLoc> fontLoc;
-+ const GooString * fileName = nullptr;
-+ std::unique_ptr<FoFiTrueType> ff;
-+#else
-+ GfxFontLoc * fontLoc = nullptr;
-+ GooString * fileName = nullptr;
-+ FoFiTrueType * ff = nullptr;
-+#endif
- GfxFontType fontType;
- SlaOutFontFileID *id;
- SplashFontFile *fontFile;
- SplashFontSrc *fontsrc = nullptr;
-- FoFiTrueType *ff;
- Object refObj, strObj;
-- GooString *fileName;
-- char *tmpBuf;
-+ char *tmpBuf = nullptr;
- int tmpBufLen = 0;
-- int *codeToGID;
-- const double *textMat;
-+ int *codeToGID = nullptr;
-+ const double *textMat = nullptr;
- double m11, m12, m21, m22, fontSize;
- SplashCoord mat[4];
- int n = 0;
-@@ -3046,9 +3057,6 @@ void SlaOutputDev::updateFont(GfxState *state)
- SplashCoord matrix[6];
-
- m_font = nullptr;
-- fileName = nullptr;
-- tmpBuf = nullptr;
-- fontLoc = nullptr;
-
- gfxFont = state->getFont();
- if (!gfxFont)
-@@ -3083,7 +3091,11 @@ void SlaOutputDev::updateFont(GfxState *state)
- }
- else
- { // gfxFontLocExternal
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
-+ fileName = fontLoc->pathAsGooString();
-+#else
- fileName = fontLoc->path;
-+#endif
- fontType = fontLoc->fontType;
- }
-
-@@ -3136,9 +3148,14 @@ void SlaOutputDev::updateFont(GfxState *state)
- ff = FoFiTrueType::make(tmpBuf, tmpBufLen);
- if (ff)
- {
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
-+ codeToGID = ((Gfx8BitFont*) gfxFont)->getCodeToGIDMap(ff.get());
-+ ff.reset();
-+#else
- codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff);
-- n = 256;
- delete ff;
-+#endif
-+ n = 256;
- }
- else
- {
-@@ -3209,8 +3226,13 @@ void SlaOutputDev::updateFont(GfxState *state)
- ff = FoFiTrueType::make(tmpBuf, tmpBufLen);
- if (! ff)
- goto err2;
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0)
-+ codeToGID = ((GfxCIDFont*) gfxFont)->getCodeToGIDMap(ff.get(), &n);
-+ ff.reset();
-+#else
- codeToGID = ((GfxCIDFont *)gfxFont)->getCodeToGIDMap(ff, &n);
- delete ff;
-+#endif
- }
- if (!(fontFile = m_fontEngine->loadTrueTypeFont(
- id,
-@@ -3247,14 +3269,19 @@ void SlaOutputDev::updateFont(GfxState *state)
- mat[3] = -m22;
- m_font = m_fontEngine->getFont(fontFile, mat, matrix);
-
-+#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(22, 2, 0)
- delete fontLoc;
-+#endif
- if (fontsrc && !fontsrc->isFile)
- fontsrc->unref();
- return;
-
- err2:
- delete id;
-+#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(22, 2, 0)
- delete fontLoc;
-+#endif
-+
- err1:
- if (fontsrc && !fontsrc->isFile)
- fontsrc->unref();
diff --git a/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch b/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch
deleted file mode 100644
index 73beac2d70..0000000000
--- a/gnu/packages/patches/scribus-1.5.8-poppler-22.2.0-2.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From f75c1613db67f4067643d0218a2db3235e42ec9f Mon Sep 17 00:00:00 2001
-From: Jean Ghali <jghali@libertysurf.fr>
-Date: Thu, 3 Feb 2022 19:46:13 +0000
-Subject: [PATCH] Small update vs latest code in poppler
-
-git-svn-id: svn://scribus.net/trunk/Scribus@24885 11d20701-8431-0410-a711-e3c959e3b870
----
- scribus/plugins/import/pdf/slaoutput.cpp | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp
-index 3650c96f52..a6f4e00fa9 100644
---- a/scribus/plugins/import/pdf/slaoutput.cpp
-+++ b/scribus/plugins/import/pdf/slaoutput.cpp
-@@ -3072,10 +3072,10 @@ void SlaOutputDev::updateFont(GfxState *state)
- delete id;
- else
- {
-- if (!(fontLoc = gfxFont->locateFont(xref, nullptr)))
-+ fontLoc = gfxFont->locateFont((xref) ? xref : pdfDoc->getXRef(), nullptr);
-+ if (!fontLoc)
- {
-- error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'",
-- gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
-+ error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)");
- goto err2;
- }
-
diff --git a/gnu/packages/patches/sdcc-disable-non-free-code.patch b/gnu/packages/patches/sdcc-disable-non-free-code.patch
index 7602ead9af..6dcfbee1ab 100644
--- a/gnu/packages/patches/sdcc-disable-non-free-code.patch
+++ b/gnu/packages/patches/sdcc-disable-non-free-code.patch
@@ -15,10 +15,10 @@ remove instructions that encourage the use of SDCC with non-free
software.
diff --git a/Makefile.common.in b/Makefile.common.in
-index 9cd116c..6bbe9fb 100644
+index 8469079..174ed91 100644
--- a/Makefile.common.in
+++ b/Makefile.common.in
-@@ -77,7 +77,6 @@ OPT_DISABLE_PACKIHX = @OPT_DISABLE_PACKIHX@
+@@ -78,7 +78,6 @@ OPT_DISABLE_PACKIHX = @OPT_DISABLE_PACKIHX@
OPT_DISABLE_SDBINUTILS = @OPT_DISABLE_SDBINUTILS@
OPT_DISABLE_SDCPP = @OPT_DISABLE_SDCPP@
OPT_DISABLE_UCSIM = @OPT_DISABLE_UCSIM@
@@ -27,10 +27,10 @@ index 9cd116c..6bbe9fb 100644
SLIB = $(top_builddir)/support/util
diff --git a/Makefile.in b/Makefile.in
-index 6d035ec..12f1fad 100644
+index 3287e30..69511e1 100644
--- a/Makefile.in
+++ b/Makefile.in
-@@ -105,9 +105,6 @@ endif
+@@ -104,9 +104,6 @@ endif
ifeq ($(OPT_DISABLE_DEVICE_LIB), 0)
TARGETS += sdcc-device-lib
PKGS += device/lib
@@ -40,7 +40,7 @@ index 6d035ec..12f1fad 100644
endif
ifeq ($(OPT_DISABLE_PACKIHX), 0)
-@@ -128,9 +125,6 @@ endif
+@@ -127,9 +124,6 @@ endif
TARGETS += sdcc-libs sdcc-cc sdcc-device-inc sdcc-as sdcc-ld sdcc-scripts
PKGS += $(SDCC_LIBS) src device/include
@@ -50,7 +50,7 @@ index 6d035ec..12f1fad 100644
PKGS += $(SDCC_AS) sdas/linksrc $(SDCC_SCRIPTS)
PORTS = $(shell cat ports.build)
-@@ -168,21 +162,12 @@ sdcc-sdbinutils:
+@@ -167,21 +161,12 @@ sdcc-sdbinutils:
sdcc-device-inc:
$(MAKE) -C device/include
@@ -73,7 +73,7 @@ index 6d035ec..12f1fad 100644
# doc depends on latex and latex2html
diff --git a/configure b/configure
-index 9de81c6..2620e3c 100755
+index b509c84..c7ce7fc 100755
--- a/configure
+++ b/configure
@@ -659,7 +659,6 @@ LATEX
@@ -84,7 +84,7 @@ index 9de81c6..2620e3c 100755
OPT_DISABLE_SDBINUTILS
OPT_DISABLE_SDCDB
OPT_DISABLE_SDCPP
-@@ -692,10 +691,7 @@ OPT_DISABLE_Z80
+@@ -693,10 +692,7 @@ OPT_DISABLE_Z80
OPT_DISABLE_MCS51
SVN_REVISION
GIT_REVISION
@@ -95,7 +95,7 @@ index 9de81c6..2620e3c 100755
include_dir_suffix
inclib_dir_suffix
LIB_TYPE
-@@ -824,7 +820,6 @@ enable_packihx
+@@ -828,7 +824,6 @@ enable_packihx
enable_sdcpp
enable_sdcdb
enable_sdbinutils
@@ -103,7 +103,7 @@ index 9de81c6..2620e3c 100755
enable_doc
enable_libgc
'
-@@ -845,10 +840,7 @@ sdccconf_h_dir_separator
+@@ -849,10 +844,7 @@ sdccconf_h_dir_separator
LIB_TYPE
inclib_dir_suffix
include_dir_suffix
@@ -114,7 +114,7 @@ index 9de81c6..2620e3c 100755
docdir'
ac_subdirs_all='support/cpp
support/packihx
-@@ -856,9 +848,7 @@ sim/ucsim
+@@ -860,9 +852,7 @@ sim/ucsim
debugger/mcs51
support/sdbinutils
device/lib/pic14
@@ -125,7 +125,7 @@ index 9de81c6..2620e3c 100755
# Initialize some variables set by options.
ac_init_help=
-@@ -1512,7 +1502,6 @@ Optional Features:
+@@ -1517,7 +1507,6 @@ Optional Features:
--disable-sdcpp Disables building sdcpp
--disable-sdcdb Disables building sdcdb
--disable-sdbinutils Disables configuring and building of sdbinutils
@@ -133,7 +133,7 @@ index 9de81c6..2620e3c 100755
--enable-doc Enables building the documentation
--enable-libgc Use the Bohem memory allocator. Lower runtime
footprint.
-@@ -1541,16 +1530,8 @@ Some influential environment variables:
+@@ -1551,16 +1540,8 @@ Some influential environment variables:
appended to datadir to define SDCC's include/lib directory
include_dir_suffix
appended to datadir to define SDCC's include directory
@@ -150,7 +150,7 @@ index 9de81c6..2620e3c 100755
docdir documentation installation directory
Use these variables to override the choices made by `configure' or to help
-@@ -7426,19 +7407,6 @@ if test "${include_dir_suffix}" = ""; then
+@@ -7869,19 +7850,6 @@ if test "${include_dir_suffix}" = ""; then
include_dir_suffix="${inclib_dir_suffix}/include"
fi
@@ -170,7 +170,7 @@ index 9de81c6..2620e3c 100755
# lib_dir_suffix:
# *nix default: "sdcc/lib"
-@@ -7446,13 +7414,6 @@ if test "${lib_dir_suffix}" = ""; then
+@@ -7889,13 +7857,6 @@ if test "${lib_dir_suffix}" = ""; then
lib_dir_suffix="${inclib_dir_suffix}/lib"
fi
@@ -184,7 +184,7 @@ index 9de81c6..2620e3c 100755
# docdir:
# *nix default: "${datadir}/sdcc/doc"
-@@ -7605,22 +7566,6 @@ esac
+@@ -8048,22 +8009,6 @@ esac
printf "%s\n" "#define INCLUDE_DIR_SUFFIX DIR_SEPARATOR_STRING \"${norm_inc_dir_suffix}\"" >>confdefs.h
@@ -207,7 +207,7 @@ index 9de81c6..2620e3c 100755
norm_lib_dir_suffix=${lib_dir_suffix}
case ":$norm_lib_dir_suffix:" in
-@@ -7638,22 +7583,6 @@ esac
+@@ -8081,22 +8026,6 @@ esac
printf "%s\n" "#define LIB_DIR_SUFFIX DIR_SEPARATOR_STRING \"${norm_lib_dir_suffix}\"" >>confdefs.h
@@ -230,7 +230,7 @@ index 9de81c6..2620e3c 100755
# relative paths
for _lcl_i in expanded_bindir:expanded_datadir:bin2data_dir; do
-@@ -8769,27 +8698,6 @@ printf "%s\n" "#define OPT_DISABLE_SDBINUTILS $OPT_DISABLE_SDBINUTILS" >>confdef
+@@ -9237,27 +9166,6 @@ printf "%s\n" "#define OPT_DISABLE_SDBINUTILS $OPT_DISABLE_SDBINUTILS" >>confdef
@@ -258,7 +258,7 @@ index 9de81c6..2620e3c 100755
# Check whether --enable-doc was given.
if test ${enable_doc+y}
-@@ -9217,20 +9125,12 @@ if test $OPT_DISABLE_PIC14 = 0; then
+@@ -9685,20 +9593,12 @@ if test $OPT_DISABLE_PIC14 = 0; then
test $OPT_DISABLE_DEVICE_LIB = 0 && subdirs="$subdirs device/lib/pic14"
@@ -278,8 +278,8 @@ index 9de81c6..2620e3c 100755
-
fi
- if test $OPT_DISABLE_Z80 = 0 || test $OPT_DISABLE_Z180 = 0 || test $OPT_DISABLE_R2K = 0 || test $OPT_DISABLE_R2KA = 0 || test $OPT_DISABLE_R3KA = 0 || test $OPT_DISABLE_SM83 = 0 || test $OPT_DISABLE_TLCS90 = 0 || test $OPT_DISABLE_EZ80_Z80 = 0 || test $OPT_DISABLE_Z80N = 0; then
-@@ -9307,8 +9207,6 @@ fi
+ if test $OPT_DISABLE_Z80 = 0 || test $OPT_DISABLE_Z180 = 0 || test $OPT_DISABLE_R2K = 0 || test $OPT_DISABLE_R2KA = 0 || test $OPT_DISABLE_R3KA = 0 || test $OPT_DISABLE_SM83 = 0 || test $OPT_DISABLE_TLCS90 = 0 || test $OPT_DISABLE_EZ80_Z80 = 0 || test $OPT_DISABLE_Z80N = 0 || test $OPT_DISABLE_R800 = 0; then
+@@ -9775,8 +9675,6 @@ fi
test $OPT_DISABLE_DEVICE_LIB = 0 && ac_config_files="$ac_config_files device/lib/Makefile"
@@ -288,7 +288,7 @@ index 9de81c6..2620e3c 100755
ac_config_files="$ac_config_files main.mk:main_in.mk bin/Makefile src/Makefile device/include/Makefile sdas/linksrc/Makefile support/makebin/Makefile support/regression/Makefile support/regression/cases/Makefile support/valdiag/Makefile support/scripts/Makefile support/regression/ports/host/spec.mk:support/regression/ports/host/spec.mk.in Makefile Makefile.common:Makefile.common.in"
-@@ -9324,10 +9222,6 @@ ac_config_files="$ac_config_files bin/sdranlib"
+@@ -9792,10 +9690,6 @@ ac_config_files="$ac_config_files bin/sdranlib"
ac_config_files="$ac_config_files bin/sdobjcopy"
@@ -299,7 +299,7 @@ index 9de81c6..2620e3c 100755
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
-@@ -10068,7 +9962,6 @@ do
+@@ -10538,7 +10432,6 @@ do
"device/lib/pdk15-stack-auto/Makefile") CONFIG_FILES="$CONFIG_FILES device/lib/pdk15-stack-auto/Makefile" ;;
"sdas/aspdk16/Makefile") CONFIG_FILES="$CONFIG_FILES sdas/aspdk16/Makefile" ;;
"device/lib/Makefile") CONFIG_FILES="$CONFIG_FILES device/lib/Makefile" ;;
@@ -307,7 +307,7 @@ index 9de81c6..2620e3c 100755
"main.mk") CONFIG_FILES="$CONFIG_FILES main.mk:main_in.mk" ;;
"bin/Makefile") CONFIG_FILES="$CONFIG_FILES bin/Makefile" ;;
"src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-@@ -10088,7 +9981,6 @@ do
+@@ -10558,7 +10451,6 @@ do
"bin/sdnm") CONFIG_FILES="$CONFIG_FILES bin/sdnm" ;;
"bin/sdranlib") CONFIG_FILES="$CONFIG_FILES bin/sdranlib" ;;
"bin/sdobjcopy") CONFIG_FILES="$CONFIG_FILES bin/sdobjcopy" ;;
@@ -315,7 +315,7 @@ index 9de81c6..2620e3c 100755
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
-@@ -10905,54 +10797,6 @@ esac
+@@ -11375,54 +11267,6 @@ esac
incPath3=`echo "$incPath3" | sed 's,\\\\\\\\,\\\\,g'`
@@ -370,7 +370,7 @@ index 9de81c6..2620e3c 100755
libPath1=`echo "/${prefix2data_dir}/${norm_lib_dir_suffix}" | sed 's,/\./,/,g'`
case ":$libPath1:" in
-@@ -11002,54 +10846,6 @@ esac
+@@ -11472,54 +11316,6 @@ esac
libPath3=`echo "$libPath3" | sed 's,\\\\\\\\,\\\\,g'`
@@ -425,7 +425,7 @@ index 9de81c6..2620e3c 100755
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
sdcc ${VERSION} is now configured for
-@@ -11091,7 +10887,6 @@ sdcc ${VERSION} is now configured for
+@@ -11562,7 +11358,6 @@ sdcc ${VERSION} is now configured for
mos6502 ${enable_mos6502_port}
mos65c02 ${enable_mos65c02_port}
@@ -433,7 +433,7 @@ index 9de81c6..2620e3c 100755
Disable packihx: ${OPT_DISABLE_PACKIHX}
Disable ucsim: ${OPT_DISABLE_UCSIM}
Disable device lib: ${OPT_DISABLE_DEVICE_LIB}
-@@ -11106,9 +10901,6 @@ sdcc ${VERSION} is now configured for
+@@ -11577,9 +11372,6 @@ sdcc ${VERSION} is now configured for
include/library files: ${datadir}/${inclib_dir_suffix}
include files: ${datadir}/${include_dir_suffix}
library files: ${datadir}/${lib_dir_suffix}
@@ -443,7 +443,7 @@ index 9de81c6..2620e3c 100755
documentation: ${docdir}
prefix: ${prefix}
-@@ -11120,15 +10912,9 @@ sdcc ${VERSION} is now configured for
+@@ -11591,15 +11383,9 @@ sdcc ${VERSION} is now configured for
include files: ${incPath1}
path(argv[0])${incPath2}
${incPath3}
@@ -459,7 +459,7 @@ index 9de81c6..2620e3c 100755
" >&5
printf "%s\n" "
sdcc ${VERSION} is now configured for
-@@ -11171,7 +10957,6 @@ sdcc ${VERSION} is now configured for
+@@ -11643,7 +11429,6 @@ sdcc ${VERSION} is now configured for
mos6502 ${enable_mos6502_port}
mos65c02 ${enable_mos65c02_port}
@@ -467,7 +467,7 @@ index 9de81c6..2620e3c 100755
Disable packihx: ${OPT_DISABLE_PACKIHX}
Disable ucsim: ${OPT_DISABLE_UCSIM}
Disable device lib: ${OPT_DISABLE_DEVICE_LIB}
-@@ -11186,9 +10971,6 @@ sdcc ${VERSION} is now configured for
+@@ -11658,9 +11443,6 @@ sdcc ${VERSION} is now configured for
include/library files: ${datadir}/${inclib_dir_suffix}
include files: ${datadir}/${include_dir_suffix}
library files: ${datadir}/${lib_dir_suffix}
@@ -477,7 +477,7 @@ index 9de81c6..2620e3c 100755
documentation: ${docdir}
prefix: ${prefix}
-@@ -11200,15 +10982,9 @@ sdcc ${VERSION} is now configured for
+@@ -11672,15 +11454,9 @@ sdcc ${VERSION} is now configured for
include files: ${incPath1}
path(argv[0])${incPath2}
${incPath3}
@@ -494,10 +494,10 @@ index 9de81c6..2620e3c 100755
# End of configure/configure.in
diff --git a/configure.ac b/configure.ac
-index ead779c..a3578fe 100644
+index adf5060..bd5a036 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -564,19 +564,6 @@ if test "${include_dir_suffix}" = ""; then
+@@ -542,19 +542,6 @@ if test "${include_dir_suffix}" = ""; then
include_dir_suffix="${inclib_dir_suffix}/include"
fi
@@ -517,7 +517,7 @@ index ead779c..a3578fe 100644
# lib_dir_suffix:
# *nix default: "sdcc/lib"
AC_ARG_VAR([lib_dir_suffix], [appended to datadir to define SDCC's library root directory])
-@@ -584,13 +571,6 @@ if test "${lib_dir_suffix}" = ""; then
+@@ -562,13 +549,6 @@ if test "${lib_dir_suffix}" = ""; then
lib_dir_suffix="${inclib_dir_suffix}/lib"
fi
@@ -531,7 +531,7 @@ index ead779c..a3578fe 100644
# docdir:
# *nix default: "${datadir}/sdcc/doc"
AC_ARG_VAR([docdir], [documentation installation directory])
-@@ -631,19 +611,11 @@ norm_inc_dir_suffix=${include_dir_suffix}
+@@ -609,19 +589,11 @@ norm_inc_dir_suffix=${include_dir_suffix}
adl_NORMALIZE_PATH([norm_inc_dir_suffix], [$sdccconf_h_dir_separator])
AC_DEFINE_UNQUOTED(INCLUDE_DIR_SUFFIX,
DIR_SEPARATOR_STRING "${norm_inc_dir_suffix}", [XXX])
@@ -551,7 +551,7 @@ index ead779c..a3578fe 100644
# relative paths
adl_COMPUTE_RELATIVE_PATHS([expanded_bindir:expanded_datadir:bin2data_dir])
-@@ -836,7 +808,6 @@ AC_DO_DISABLER(packihx, PACKIHX, [Disables building packihx])
+@@ -815,7 +787,6 @@ AC_DO_DISABLER(packihx, PACKIHX, [Disables building packihx])
AC_DO_DISABLER(sdcpp, SDCPP, [Disables building sdcpp])
AC_DO_DISABLER(sdcdb, SDCDB, [Disables building sdcdb])
AC_DO_DISABLER(sdbinutils, SDBINUTILS, [Disables configuring and building of sdbinutils])
@@ -559,7 +559,7 @@ index ead779c..a3578fe 100644
AC_DO_ENABLER(doc, DOC, [Enables building the documentation])
AC_CHECK_PROG([LYX], [lyx], [lyx], [:])
-@@ -915,16 +886,10 @@ if test $OPT_DISABLE_PIC14 = 0; then
+@@ -895,16 +866,10 @@ if test $OPT_DISABLE_PIC14 = 0; then
AC_CONFIG_FILES(src/pic14/Makefile)
test $OPT_DISABLE_DEVICE_LIB = 0 && AC_CONFIG_SUBDIRS(device/lib/pic14)
fi
@@ -574,9 +574,9 @@ index ead779c..a3578fe 100644
- test $OPT_DISABLE_DEVICE_LIB = 0 && AC_CONFIG_SUBDIRS(device/non-free/lib/pic16)
-fi
- if test $OPT_DISABLE_Z80 = 0 || test $OPT_DISABLE_Z180 = 0 || test $OPT_DISABLE_R2K = 0 || test $OPT_DISABLE_R2KA = 0 || test $OPT_DISABLE_R3KA = 0 || test $OPT_DISABLE_SM83 = 0 || test $OPT_DISABLE_TLCS90 = 0 || test $OPT_DISABLE_EZ80_Z80 = 0 || test $OPT_DISABLE_Z80N = 0; then
+ if test $OPT_DISABLE_Z80 = 0 || test $OPT_DISABLE_Z180 = 0 || test $OPT_DISABLE_R2K = 0 || test $OPT_DISABLE_R2KA = 0 || test $OPT_DISABLE_R3KA = 0 || test $OPT_DISABLE_SM83 = 0 || test $OPT_DISABLE_TLCS90 = 0 || test $OPT_DISABLE_EZ80_Z80 = 0 || test $OPT_DISABLE_Z80N = 0 || test $OPT_DISABLE_R800 = 0; then
AC_CONFIG_FILES([src/z80/Makefile])
-@@ -988,7 +953,6 @@ fi
+@@ -969,7 +934,6 @@ fi
test $OPT_DISABLE_DEVICE_LIB = 0 && AC_CONFIG_FILES([device/lib/Makefile])
@@ -584,7 +584,7 @@ index ead779c..a3578fe 100644
AC_CONFIG_FILES([main.mk:main_in.mk
bin/Makefile
-@@ -1010,9 +974,6 @@ AC_CONFIG_FILES([bin/sdar], [chmod +x bin/sdar])
+@@ -991,9 +955,6 @@ AC_CONFIG_FILES([bin/sdar], [chmod +x bin/sdar])
AC_CONFIG_FILES([bin/sdnm], [chmod +x bin/sdnm])
AC_CONFIG_FILES([bin/sdranlib], [chmod +x bin/sdranlib])
AC_CONFIG_FILES([bin/sdobjcopy], [chmod +x bin/sdobjcopy])
@@ -594,7 +594,7 @@ index ead779c..a3578fe 100644
AC_OUTPUT
# I found no better place
-@@ -1030,16 +991,10 @@ adl_NORMALIZE_PATH_MSG(/${prefix2bin_dir}, [binPath], [
+@@ -1011,16 +972,10 @@ adl_NORMALIZE_PATH_MSG(/${prefix2bin_dir}, [binPath], [
adl_NORMALIZE_PATH_MSG(/${prefix2data_dir}/${norm_inc_dir_suffix}, [incPath1], [$dirch])
adl_NORMALIZE_PATH_MSG(/${bin2data_dir}/${norm_inc_dir_suffix}, [incPath2], [$dirch])
adl_NORMALIZE_PATH_MSG(${expanded_datadir}/${norm_inc_dir_suffix}, [incPath3], [$dirch])
@@ -611,7 +611,7 @@ index ead779c..a3578fe 100644
AC_MSG_RESULT([
sdcc ${VERSION} is now configured for
-@@ -1082,7 +1037,6 @@ sdcc ${VERSION} is now configured for
+@@ -1064,7 +1019,6 @@ sdcc ${VERSION} is now configured for
mos6502 ${enable_mos6502_port}
mos65c02 ${enable_mos65c02_port}
@@ -619,7 +619,7 @@ index ead779c..a3578fe 100644
Disable packihx: ${OPT_DISABLE_PACKIHX}
Disable ucsim: ${OPT_DISABLE_UCSIM}
Disable device lib: ${OPT_DISABLE_DEVICE_LIB}
-@@ -1097,9 +1051,6 @@ sdcc ${VERSION} is now configured for
+@@ -1079,9 +1033,6 @@ sdcc ${VERSION} is now configured for
include/library files: ${datadir}/${inclib_dir_suffix}
include files: ${datadir}/${include_dir_suffix}
library files: ${datadir}/${lib_dir_suffix}
@@ -629,7 +629,7 @@ index ead779c..a3578fe 100644
documentation: ${docdir}
prefix: ${prefix}
-@@ -1111,14 +1062,8 @@ sdcc ${VERSION} is now configured for
+@@ -1093,14 +1044,8 @@ sdcc ${VERSION} is now configured for
include files: ${incPath1}
path(argv[[0]])${incPath2}
${incPath3}
@@ -1003,7 +1003,7 @@ index db0d421..9e90d7a 100644
.SUFFIXES:
diff --git a/device/lib/pic16/libc/Makefile.in b/device/lib/pic16/libc/Makefile.in
-index ae76fdd..75fc04a 100644
+index 74147d2..bed548b 100644
--- a/device/lib/pic16/libc/Makefile.in
+++ b/device/lib/pic16/libc/Makefile.in
@@ -88,10 +88,7 @@ PRE_UNINSTALL = :
@@ -1018,7 +1018,7 @@ index ae76fdd..75fc04a 100644
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-@@ -383,8 +380,7 @@ libc18f_a_SOURCES = ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c \
+@@ -384,8 +381,7 @@ libc18f_a_SOURCES = ctype/iscntrl.c ctype/isdigit.c ctype/isgraph.c \
string/strpbrk.c string/strrchr.c string/strspn.c \
string/strstr.c string/strtok.c string/strupr.c \
utils/cnvfrac.S utils/cnvint.S utils/cvtdec.S
@@ -1028,7 +1028,7 @@ index ae76fdd..75fc04a 100644
#AM_CFLAGS += --no-optimize-goto
#AM_CFLAGS += --debug-ralloc
-@@ -398,11 +394,10 @@ AM_CPPFLAGS = -I. -I$(top_srcdir)/../../include/pic16 \
+@@ -399,11 +395,10 @@ AM_CPPFLAGS = -I. -I$(top_srcdir)/../../include/pic16 \
#AM_CFLAGS += --noinduction
#AM_CFLAGS += --nojtbound
#AM_CFLAGS += --noloopreverse
@@ -1248,7 +1248,7 @@ index 5c2fce7..8d70807 100644
.SUFFIXES:
diff --git a/doc/INSTALL.txt b/doc/INSTALL.txt
-index 3711c71..9e500a2 100644
+index 8dfadb6..dd17528 100644
--- a/doc/INSTALL.txt
+++ b/doc/INSTALL.txt
@@ -18,9 +18,7 @@ To install:
@@ -1282,7 +1282,7 @@ index 3711c71..9e500a2 100644
You can test the install by entering:
diff --git a/doc/README.txt b/doc/README.txt
-index cd1ef3f..5a0d0a8 100644
+index e62177b..4d09afb 100644
--- a/doc/README.txt
+++ b/doc/README.txt
@@ -37,10 +37,9 @@ Exception are pic device libraries and header files which are derived
@@ -1300,10 +1300,10 @@ index cd1ef3f..5a0d0a8 100644
However: Many think that the Microchip requirement is not legally enforceable,
arguing that the header files only contain noncopyrightable facts.
diff --git a/doc/sdccman.lyx b/doc/sdccman.lyx
-index a57bf15..d6f30c7 100644
+index efaf738..0ad1ba7 100644
--- a/doc/sdccman.lyx
+++ b/doc/sdccman.lyx
-@@ -1150,54 +1150,9 @@ A possible exception are pic device libraries and header files which are
+@@ -1151,54 +1151,9 @@ A possible exception are pic device libraries and header files which are
to be used with authentic Microchip devices" which makes them incompatible
with the GPL, if Microchip has any copyright in them (which might depend
on local copyright laws).
@@ -1361,7 +1361,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\begin_layout Itemize
-@@ -1260,23 +1215,6 @@ makebin:
+@@ -1261,23 +1216,6 @@ makebin:
zlib/libpng License
\end_layout
@@ -1385,7 +1385,7 @@ index a57bf15..d6f30c7 100644
\end_deeper
\begin_layout Itemize
libraries:
-@@ -3062,18 +3000,6 @@ include_dir_suffix environment variable, see table below
+@@ -3194,18 +3132,6 @@ include_dir_suffix environment variable, see table below
\end_inset
@@ -1404,7 +1404,7 @@ index a57bf15..d6f30c7 100644
\begin_inset space ~
\end_inset
-@@ -3086,22 +3012,6 @@ lib_dir_suffix environment variable, see table below
+@@ -3218,22 +3144,6 @@ lib_dir_suffix environment variable, see table below
\end_inset
@@ -1427,7 +1427,7 @@ index a57bf15..d6f30c7 100644
\begin_inset space ~
\end_inset
-@@ -3600,7 +3510,7 @@ These defaults are:
+@@ -3876,7 +3786,7 @@ These defaults are:
\begin_layout Standard
\align center
\begin_inset Tabular
@@ -1436,7 +1436,7 @@ index a57bf15..d6f30c7 100644
<features tabularvalignment="middle">
<column alignment="block" valignment="top" width="0in">
<column alignment="block" valignment="top" width="0in">
-@@ -3884,68 +3794,6 @@ sdcc/include
+@@ -4160,68 +4070,6 @@ sdcc/include
include
\end_layout
@@ -1505,7 +1505,7 @@ index a57bf15..d6f30c7 100644
\end_inset
</cell>
</row>
-@@ -3956,7 +3804,7 @@ lib
+@@ -4232,7 +4080,7 @@ lib
\begin_layout Plain Layout
\emph on
@@ -1514,7 +1514,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\end_inset
-@@ -3965,7 +3813,7 @@ NON_FREE_LIB_DIR_SUFFIX
+@@ -4241,7 +4089,7 @@ NON_FREE_LIB_DIR_SUFFIX
\begin_inset Text
\begin_layout Plain Layout
@@ -1523,7 +1523,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\end_inset
-@@ -3974,7 +3822,7 @@ sdcc/non-free/lib
+@@ -4250,7 +4098,7 @@ sdcc/non-free/lib
\begin_inset Text
\begin_layout Plain Layout
@@ -1532,7 +1532,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\end_inset
-@@ -4373,20 +4221,6 @@ include
+@@ -4649,20 +4497,6 @@ include
\end_inset
@@ -1553,7 +1553,7 @@ index a57bf15..d6f30c7 100644
\backslash
\begin_inset Newline newline
-@@ -4401,20 +4235,6 @@ lib
+@@ -4677,20 +4511,6 @@ lib
\end_inset
@@ -1574,7 +1574,7 @@ index a57bf15..d6f30c7 100644
\backslash
\begin_inset Newline newline
-@@ -4595,20 +4415,6 @@ include
+@@ -4871,20 +4691,6 @@ include
\end_inset
@@ -1595,7 +1595,7 @@ index a57bf15..d6f30c7 100644
\backslash
\begin_inset Newline newline
-@@ -4623,20 +4429,6 @@ lib
+@@ -4899,20 +4705,6 @@ lib
\end_inset
@@ -1616,7 +1616,7 @@ index a57bf15..d6f30c7 100644
\backslash
\begin_inset Newline newline
-@@ -4733,7 +4525,7 @@ Install paths
+@@ -5009,7 +4801,7 @@ Install paths
\begin_layout Standard
\align center
\begin_inset Tabular
@@ -1625,7 +1625,7 @@ index a57bf15..d6f30c7 100644
<features tabularvalignment="middle">
<column alignment="left" valignment="top">
<column alignment="left" valignment="top" width="4.5cm">
-@@ -4889,64 +4681,6 @@ include
+@@ -5165,64 +4957,6 @@ include
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text
@@ -1690,7 +1690,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Plain Layout
Library file**
\end_layout
-@@ -4996,64 +4730,6 @@ sdcc
+@@ -5272,64 +5006,6 @@ sdcc
lib
\end_layout
@@ -1755,7 +1755,7 @@ index a57bf15..d6f30c7 100644
\end_inset
</cell>
</row>
-@@ -5376,7 +5052,7 @@ $PATH
+@@ -5652,7 +5328,7 @@ $PATH
\begin_layout Standard
\align center
\begin_inset Tabular
@@ -1764,7 +1764,7 @@ index a57bf15..d6f30c7 100644
<features tabularvalignment="middle">
<column alignment="block" valignment="top" width="0.5cm">
<column alignment="block" valignment="top" width="4.8cm">
-@@ -5654,203 +5330,13 @@ include
+@@ -5930,203 +5606,13 @@ include
</cell>
</row>
<row>
@@ -1969,7 +1969,7 @@ index a57bf15..d6f30c7 100644
\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-@@ -5866,21 +5352,13 @@ $DATADIR/
+@@ -6142,21 +5628,13 @@ $DATADIR/
\end_inset
@@ -1992,7 +1992,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -5888,7 +5366,7 @@ $INCLUDE_DIR_SUFFIX
+@@ -6164,7 +5642,7 @@ $INCLUDE_DIR_SUFFIX
\begin_inset Newline newline
\end_inset
@@ -2001,7 +2001,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\end_inset
-@@ -5986,7 +5464,7 @@ model
+@@ -6262,7 +5740,7 @@ model
\begin_layout Standard
\align center
\begin_inset Tabular
@@ -2010,7 +2010,7 @@ index a57bf15..d6f30c7 100644
<features tabularvalignment="middle">
<column alignment="block" valignment="top" width="0.5cm">
<column alignment="block" valignment="top" width="4.5cm">
-@@ -6266,7 +5744,7 @@ lib
+@@ -6542,7 +6020,7 @@ lib
</cell>
</row>
<row>
@@ -2019,7 +2019,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -6275,7 +5753,7 @@ lib
+@@ -6551,7 +6029,7 @@ lib
\end_inset
</cell>
@@ -2028,7 +2028,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -6306,7 +5784,7 @@ $LIB_DIR_SUFFIX/
+@@ -6582,7 +6060,7 @@ $LIB_DIR_SUFFIX/
\end_inset
</cell>
@@ -2037,7 +2037,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -6321,7 +5799,7 @@ lib/
+@@ -6597,7 +6075,7 @@ lib/
\end_inset
</cell>
@@ -2046,7 +2046,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Text
\begin_layout Plain Layout
-@@ -6344,308 +5822,6 @@ lib
+@@ -6620,308 +6098,6 @@ lib
<model>
\end_layout
@@ -2355,7 +2355,7 @@ index a57bf15..d6f30c7 100644
\end_inset
</cell>
</row>
-@@ -8923,14 +8099,6 @@ In <installdir>/share/sdcc/include
+@@ -9201,14 +8377,6 @@ In <installdir>/share/sdcc/include
the include files
\end_layout
@@ -2370,7 +2370,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Standard
In <installdir>/share/sdcc/lib
\end_layout
-@@ -8939,14 +8107,6 @@ In <installdir>/share/sdcc/lib
+@@ -9217,14 +8385,6 @@ In <installdir>/share/sdcc/lib
the src and target subdirectories with the precompiled relocatables.
\end_layout
@@ -2385,7 +2385,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Standard
In <installdir>/share/sdcc/doc
\end_layout
-@@ -16096,66 +15256,6 @@ splint
+@@ -16452,66 +15612,6 @@ splint
myprogram.c
\end_layout
@@ -2452,7 +2452,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Subsection
Linker Options
\begin_inset Index idx
-@@ -45880,66 +44980,9 @@ http://sourceforge.net/projects/gputils
+@@ -46758,66 +45858,9 @@ http://sourceforge.net/projects/gputils
Pic device specific header and c source files are automatically generated
from MPLAB include files, which are published by Microchip with a special
requirement that they are only to be used with authentic Microchip devices.
@@ -2522,7 +2522,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Newline newline
\end_inset
-@@ -45993,7 +45036,7 @@ Makefile
+@@ -46871,7 +45914,7 @@ Makefile
\begin_inset space ~
\end_inset
@@ -2531,7 +2531,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Newline newline
\end_inset
-@@ -46087,7 +45130,7 @@ Makefile
+@@ -46965,7 +46008,7 @@ Makefile
\begin_inset space ~
\end_inset
@@ -2540,7 +2540,7 @@ index a57bf15..d6f30c7 100644
\begin_inset Newline newline
\end_inset
-@@ -46369,47 +45412,6 @@ status collapsed
+@@ -47247,47 +46290,6 @@ status collapsed
\begin_layout Plain Layout
@@ -2588,7 +2588,7 @@ index a57bf15..d6f30c7 100644
\backslash
/
\end_layout
-@@ -47282,47 +46284,6 @@ status collapsed
+@@ -48160,47 +47162,6 @@ status collapsed
-all-callee-saves
\end_layout
@@ -2636,7 +2636,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Subsection
Port Specific Options
\begin_inset Index idx
-@@ -48599,188 +47560,6 @@ Linker
+@@ -49477,188 +48438,6 @@ Linker
\end_inset
@@ -2825,7 +2825,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\begin_layout Subsection
-@@ -49476,66 +48255,9 @@ name "subsec:PIC16_Header-Files-and-Libraries"
+@@ -50354,66 +49133,9 @@ name "subsec:PIC16_Header-Files-and-Libraries"
Pic device specific header and c source files are automatically generated
from MPLAB include files, which are published by Microchip with a special
requirement that they are only to be used with authentic Microchip devices.
@@ -2895,7 +2895,7 @@ index a57bf15..d6f30c7 100644
\end_layout
\begin_layout Subsection
-@@ -49781,195 +48503,6 @@ vfprintf.c
+@@ -50659,195 +49381,6 @@ vfprintf.c
should also work, but is untested.
\end_layout
@@ -3091,7 +3091,7 @@ index a57bf15..d6f30c7 100644
\begin_layout Subsection
Memory Models
\end_layout
-@@ -74714,6 +73247,12 @@ This document was initially written by Sandeep Dutta and updated by SDCC
+@@ -75717,6 +74250,12 @@ This document was initially written by Sandeep Dutta and updated by SDCC
developers.
\end_layout
@@ -3105,7 +3105,7 @@ index a57bf15..d6f30c7 100644
All product names mentioned herein may be trademarks
\begin_inset Index idx
diff --git a/sdcc.spec b/sdcc.spec
-index b784cbc..f180b51 100644
+index ccb3217..292b642 100644
--- a/sdcc.spec
+++ b/sdcc.spec
@@ -89,9 +89,7 @@ rm -rf $RPM_BUILD_ROOT
@@ -3118,7 +3118,7 @@ index b784cbc..f180b51 100644
%files doc
%defattr(-,root,root)
-@@ -102,6 +100,8 @@ rm -rf $RPM_BUILD_ROOT
+@@ -104,6 +102,8 @@ rm -rf $RPM_BUILD_ROOT
- version updated to 4.2.0
* Sat Feb 20 2021 - pkk AT spth.de
- version updated to 4.0.0
@@ -3141,7 +3141,7 @@ index 8cf401b..19f5113 100644
#define BIN2DATA_DIR "\\.."
#define PREFIX2BIN_DIR "\\bin"
diff --git a/sdccconf_in.h b/sdccconf_in.h
-index ca8d69f..980af8d 100644
+index 9e6e3c7..8681ceb 100644
--- a/sdccconf_in.h
+++ b/sdccconf_in.h
@@ -100,12 +100,6 @@
@@ -3168,10 +3168,10 @@ index ca8d69f..980af8d 100644
#undef OPT_DISABLE_PACKIHX
diff --git a/src/SDCCglobl.h b/src/SDCCglobl.h
-index 87981f4..e2701f2 100644
+index 9f0e52a..02a5fb8 100644
--- a/src/SDCCglobl.h
+++ b/src/SDCCglobl.h
-@@ -287,7 +287,6 @@ struct options
+@@ -290,7 +290,6 @@ struct options
int stack_size; /* MCS51/DS390 - Tells the linker to allocate this space for stack */
int acall_ajmp; /* MCS51 - Use acall/ajmp instead of lcall/ljmp */
int no_ret_without_call; /* MCS51 - Do not use ret independent of acall/lcall */
@@ -3180,7 +3180,7 @@ index 87981f4..e2701f2 100644
int xstack_loc; /* initial location of external stack */
int stack_loc; /* initial value of internal stack pointer */
diff --git a/src/SDCCmain.c b/src/SDCCmain.c
-index 6b50572..089c42f 100644
+index e7e8bd6..3b25061 100644
--- a/src/SDCCmain.c
+++ b/src/SDCCmain.c
@@ -143,7 +143,6 @@ char buffer[PATH_MAX * 2];
@@ -3191,15 +3191,15 @@ index 6b50572..089c42f 100644
#define OPTION_PEEP_RETURN "--peep-return"
#define OPTION_NO_PEEP_RETURN "--no-peep-return"
#define OPTION_NO_OPTSDCC_IN_ASM "--no-optsdcc-in-asm"
-@@ -193,7 +192,6 @@ static const OPTION optionsTable[] = {
- {0, OPTION_STD, NULL, "Determine the language standard (c89, c99, c11, c2x, sdcc89 etc.)"},
+@@ -195,7 +194,6 @@ static const OPTION optionsTable[] = {
+ {0, OPTION_STD, NULL, "Determine the language standard (c89, c99, c11, c23, sdcc89 etc.)"},
{0, OPTION_DOLLARS_IN_IDENT, &options.dollars_in_ident, "Permit '$' as an identifier character"},
{0, OPTION_SIGNED_CHAR, &options.signed_char, "Make \"char\" signed by default"},
- {0, OPTION_USE_NON_FREE, &options.use_non_free, "Search / include non-free licensed libraries and header files"},
{0, NULL, NULL, "Code generation options"},
{'m', NULL, NULL, "Set the port to use e.g. -mz80."},
-@@ -2207,10 +2205,6 @@ preProcess (char **envp)
+@@ -2231,10 +2229,6 @@ preProcess (char **envp)
else
addSet (&preArgvSet, Safe_strdup ("-D__SDCC_CHAR_UNSIGNED"));
@@ -3210,7 +3210,7 @@ index 6b50572..089c42f 100644
/* set the macro for large model */
switch (options.model)
{
-@@ -2454,12 +2448,6 @@ setIncludePath (void)
+@@ -2478,12 +2472,6 @@ setIncludePath (void)
* 6. - $SDCC_HOME/PREFIX2DATA_DIR/INCLUDE_DIR_SUFFIX
* 7. - path(argv[0])/BIN2DATA_DIR/INCLUDE_DIR_SUFFIX
* 8. - DATADIR/INCLUDE_DIR_SUFFIX (only on *nix)
@@ -3223,7 +3223,7 @@ index 6b50572..089c42f 100644
*/
if (!options.nostdinc)
-@@ -2475,17 +2463,6 @@ setIncludePath (void)
+@@ -2499,17 +2487,6 @@ setIncludePath (void)
includeDirsSet = processStrSet (includeDirsSet, NULL, port->target, NULL);
mergeSets (&includeDirsSet, tempSet);
@@ -3241,7 +3241,7 @@ index 6b50572..089c42f 100644
if ((p = getenv (SDCC_INCLUDE_NAME)) != NULL)
{
struct dbuf_s dbuf;
-@@ -2510,9 +2487,6 @@ setLibPath (void)
+@@ -2534,9 +2511,6 @@ setLibPath (void)
* 3. - $SDCC_HOME/PREFIX2DATA_DIR/LIB_DIR_SUFFIX/<model>
* 4. - path(argv[0])/BIN2DATA_DIR/LIB_DIR_SUFFIX/<model>
* 5. - DATADIR/LIB_DIR_SUFFIX/<model> (only on *nix)
@@ -3251,7 +3251,7 @@ index 6b50572..089c42f 100644
*/
if (!options.nostdlib)
-@@ -2529,13 +2503,6 @@ setLibPath (void)
+@@ -2553,13 +2527,6 @@ setLibPath (void)
dbuf_makePath (&dbuf, LIB_DIR_SUFFIX, port->general.get_model ? port->general.get_model () : targetname);
libDirsSet = processStrSet (dataDirsSet, NULL, dbuf_c_str (&dbuf), NULL);
@@ -3266,7 +3266,7 @@ index 6b50572..089c42f 100644
{
addSetHead (&libDirsSet, Safe_strdup (p));
diff --git a/src/pic14/main.c b/src/pic14/main.c
-index ab4bcdf..1747fd6 100644
+index 304c79b..9cbb9e8 100644
--- a/src/pic14/main.c
+++ b/src/pic14/main.c
@@ -42,7 +42,6 @@ static OPTION _pic14_poptions[] =
@@ -3319,7 +3319,7 @@ index 41a1b79..9c642e3 100644
extern pic16_options_t pic16_options;
diff --git a/src/pic16/main.c b/src/pic16/main.c
-index 8809e2c..53c700e 100644
+index 9557a10..d650e66 100644
--- a/src/pic16/main.c
+++ b/src/pic16/main.c
@@ -660,7 +660,6 @@ OPTION pic16_optionsTable[]= {
@@ -3404,10 +3404,10 @@ index b0b0867..2d5cdd3 100644
OBJEXT = .o
diff --git a/support/regression/ports/pic16/spec.mk b/support/regression/ports/pic16/spec.mk
-index 541608a..6e7238f 100644
+index 15b4028..3b79cfe 100644
--- a/support/regression/ports/pic16/spec.mk
+++ b/support/regression/ports/pic16/spec.mk
-@@ -12,13 +12,9 @@ endif
+@@ -16,13 +16,9 @@ EMU_INPUT = -c $(PORTS_DIR)/pic16/gpsim.cmd
ifndef SDCC_BIN_PATH
ifndef CROSSCOMPILING
@@ -3423,7 +3423,7 @@ index 541608a..6e7238f 100644
endif
ifdef CROSSCOMPILING
-@@ -27,7 +23,6 @@ endif
+@@ -31,7 +27,6 @@ endif
SDCCFLAGS += -mpic16 -pp18f452 --less-pedantic -Wl,-q
SDCCFLAGS += --no-peep
@@ -3541,10 +3541,10 @@ index 6db417a..4b35225 100755
);
diff --git a/support/scripts/sdcc.nsi b/support/scripts/sdcc.nsi
-index 8309df1..c0cc223 100644
+index 37393d7..997b2fe 100644
--- a/support/scripts/sdcc.nsi
+++ b/support/scripts/sdcc.nsi
-@@ -491,11 +491,6 @@ ${Section} "SDCC include files" SEC05
+@@ -487,11 +487,6 @@ ${Section} "SDCC include files" SEC05
SetOutPath "$INSTDIR\include"
File "${DEV_ROOT}\include\*.h"
@@ -3556,7 +3556,7 @@ index 8309df1..c0cc223 100644
${SectionEnd}
${Section} "SDCC DS390 library" SEC06
-@@ -593,18 +588,12 @@ ${Section} "SDCC PIC16 library" SEC21
+@@ -589,18 +584,12 @@ ${Section} "SDCC PIC16 library" SEC21
SetOutPath "$INSTDIR\lib\pic16"
File "${DEV_ROOT}\lib\pic16\*.o"
File "${DEV_ROOT}\lib\pic16\*.lib"
@@ -3575,7 +3575,7 @@ index 8309df1..c0cc223 100644
${SectionEnd}
${Section} "SDCC STM8 medium model library" SEC23
-@@ -713,10 +702,6 @@ ${Section} "SDCC library sources" SEC25
+@@ -709,10 +698,6 @@ ${Section} "SDCC library sources" SEC25
File "${DEV_ROOT}\lib\src\pic14\libsdcc\enhanced\*.inc"
# File "${DEV_ROOT}\lib\src\pic14\libsdcc\Makefile"
@@ -3586,7 +3586,7 @@ index 8309df1..c0cc223 100644
SetOutPath "$INSTDIR\lib\src\pic14\libm"
# File "${DEV_ROOT}\lib\src\pic14\libm\*.c"
-@@ -768,10 +753,6 @@ ${Section} "SDCC library sources" SEC25
+@@ -764,10 +749,6 @@ ${Section} "SDCC library sources" SEC25
File "${DEV_ROOT}\lib\src\pic16\libc\utils\*.S"
# File "${DEV_ROOT}\lib\src\pic16\libc\utils\Makefile"
@@ -3597,7 +3597,7 @@ index 8309df1..c0cc223 100644
SetOutPath "$INSTDIR\lib\src\pic16\libio"
File "${DEV_ROOT}\lib\src\pic16\libio\*.ignore"
# File "${DEV_ROOT}\lib\src\pic16\libio\Makefile"
-@@ -1137,13 +1118,9 @@ ${Section} Uninstall SECUNINSTALL
+@@ -1169,13 +1150,9 @@ ${Section} Uninstall SECUNINSTALL
Delete "$INSTDIR\lib\pic14\*.lib"
@@ -3611,7 +3611,7 @@ index 8309df1..c0cc223 100644
Delete "$INSTDIR\lib\hc08\*.lib"
Delete "$INSTDIR\lib\s08\*.lib"
-@@ -1219,9 +1196,7 @@ ${Section} Uninstall SECUNINSTALL
+@@ -1259,9 +1236,7 @@ ${Section} Uninstall SECUNINSTALL
Delete "$INSTDIR\include\pic14\*.h"
Delete "$INSTDIR\include\pic14\*.txt"
Delete "$INSTDIR\include\pic14\*.inc"
@@ -3621,7 +3621,7 @@ index 8309df1..c0cc223 100644
Delete "$INSTDIR\include\pic16\*.txt"
Delete "$INSTDIR\include\mcs51\*.h"
Delete "$INSTDIR\include\hc08\*.h"
-@@ -1298,9 +1273,7 @@ ${Section} Uninstall SECUNINSTALL
+@@ -1334,9 +1309,7 @@ ${Section} Uninstall SECUNINSTALL
Delete "$INSTDIR\uninstall.exe"
RMDir /r "$INSTDIR\lib\src\pic14"
@@ -3631,9 +3631,9 @@ index 8309df1..c0cc223 100644
RMDir "$INSTDIR\lib\src\small"
RMDir "$INSTDIR\lib\src\medium"
RMDir "$INSTDIR\lib\src\large"
-@@ -1328,12 +1301,9 @@ ${Section} Uninstall SECUNINSTALL
- RMDir "$INSTDIR\lib\src\mos6502"
- RMDir "$INSTDIR\lib\src\z80n"
+@@ -1367,12 +1340,9 @@ ${Section} Uninstall SECUNINSTALL
+ RMDir "$INSTDIR\lib\src\mos65c02"
+ RMDir "$INSTDIR\lib\src\s08-stack-auto"
RMDir "$INSTDIR\lib\src"
- RMDir "$INSTDIR\non-free\lib\src"
@@ -3644,9 +3644,9 @@ index 8309df1..c0cc223 100644
RMDir "$INSTDIR\lib\z80"
RMDir "$INSTDIR\lib\z180"
RMDir "$INSTDIR\lib\r2k"
-@@ -1361,15 +1331,12 @@ ${Section} Uninstall SECUNINSTALL
- RMDir "$INSTDIR\lib\mos6502"
- RMDir "$INSTDIR\lib\z80n"
+@@ -1403,15 +1373,12 @@ ${Section} Uninstall SECUNINSTALL
+ RMDir "$INSTDIR\lib\mos65c02"
+ RMDir "$INSTDIR\lib\s08-stack-auto"
RMDir "$INSTDIR\lib"
- RMDir "$INSTDIR\non-free\lib"
@@ -3660,7 +3660,7 @@ index 8309df1..c0cc223 100644
RMDir "$INSTDIR\include\asm\mcs51"
RMDir "$INSTDIR\include\asm\sm83"
RMDir "$INSTDIR\include\asm\ds390"
-@@ -1378,17 +1345,12 @@ ${Section} Uninstall SECUNINSTALL
+@@ -1420,17 +1387,12 @@ ${Section} Uninstall SECUNINSTALL
RMDir "$INSTDIR\include\asm"
RMDir "$INSTDIR\include\z180"
RMDir "$INSTDIR\include\pic14"
diff --git a/gnu/packages/patches/spdlog-fix-tests.patch b/gnu/packages/patches/spdlog-fix-tests.patch
deleted file mode 100644
index 13dffb309e..0000000000
--- a/gnu/packages/patches/spdlog-fix-tests.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Remove after next release and package update:
-https://github.com/gabime/spdlog/commit/2ee8bac78e6525a8ad9a9196e65d502ce390d83a
-
-From 2ee8bac78e6525a8ad9a9196e65d502ce390d83a Mon Sep 17 00:00:00 2001
-From: xvitaly <vitaly@easycoding.org>
-Date: Sun, 23 Jul 2023 10:15:25 +0200
-Subject: [PATCH] Added missing square bracket to fix the level_to_string_view
- test. (#2827)
-
----
- tests/test_misc.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tests/test_misc.cpp b/tests/test_misc.cpp
-index 9f3cb1744..6199641ff 100644
---- a/tests/test_misc.cpp
-+++ b/tests/test_misc.cpp
-@@ -43,7 +43,7 @@ TEST_CASE("log_levels", "[log_levels]")
- REQUIRE(log_info("Hello", spdlog::level::trace) == "Hello");
- }
-
--TEST_CASE("level_to_string_view", "[convert_to_string_view")
-+TEST_CASE("level_to_string_view", "[convert_to_string_view]")
- {
- REQUIRE(spdlog::level::to_string_view(spdlog::level::trace) == "trace");
- REQUIRE(spdlog::level::to_string_view(spdlog::level::debug) == "debug");
diff --git a/gnu/packages/patches/tinydir-fix-cbehave-test.patch b/gnu/packages/patches/tinydir-fix-cbehave-test.patch
index 84ecee12c2..1cad42c7a0 100644
--- a/gnu/packages/patches/tinydir-fix-cbehave-test.patch
+++ b/gnu/packages/patches/tinydir-fix-cbehave-test.patch
@@ -2,10 +2,22 @@ Make test work with upstream cbehave
(tinydir bundles a modified version)
diff --git a/tests/file_open_test.c b/tests/file_open_test.c
-index 3e659bc..9f6f88d 100644
+index 09b856e..92b13ca 100644
--- a/tests/file_open_test.c
+++ b/tests/file_open_test.c
-@@ -19,4 +19,7 @@ FEATURE(file_open, "File open")
+@@ -4,6 +4,11 @@
+ #include "cbehave.h"
+ #include "util.h"
+
++#define ASSERT(cond, ret) \
++if (!(cond)) {\
++ cbehave_feature_return(__FILE__, __LINE__, ret, _state); \
++ goto _feature_over; \
++}\
+
+ FEATURE(file_open, "File open")
+ SCENARIO("Open file in current directory")
+@@ -34,4 +39,7 @@ FEATURE(file_open, "File open")
SCENARIO_END
FEATURE_END
diff --git a/gnu/packages/patches/wlroots-hwdata-fallback.patch b/gnu/packages/patches/wlroots-hwdata-fallback.patch
new file mode 100644
index 0000000000..6468c7cbf3
--- /dev/null
+++ b/gnu/packages/patches/wlroots-hwdata-fallback.patch
@@ -0,0 +1,46 @@
+backend/drm: add hardcoded hwdata path fallback
+
+Add hardcoded fallback "/usr/share/hwdata/pnp.ids" as a
+temporary solution to get things working in Guix until
+hwdata ships with pkg-config file.
+
+diff --git a/backend/drm/meson.build b/backend/drm/meson.build
+index 6fcb2c15..ed95360a 100644
+--- a/backend/drm/meson.build
++++ b/backend/drm/meson.build
+@@ -1,8 +1,7 @@
+ hwdata = dependency(
+ 'hwdata',
+- required: 'drm' in backends,
++ required: false,
+ native: true,
+- not_found_message: 'Required for the DRM backend.',
+ )
+
+ libdisplay_info = dependency(
+@@ -19,15 +18,21 @@ libliftoff = dependency(
+ required: false,
+ )
+
+-if not (hwdata.found() and libdisplay_info.found() and features['session'])
++if hwdata.found()
++ hwdata_dir = hwdata.get_variable(pkgconfig: 'pkgdatadir')
++ pnp_ids = files(hwdata_dir / 'pnp.ids')
++else
++ pnp_ids = files('/usr/share/hwdata/pnp.ids')
++endif
++
++if not (libdisplay_info.found() and features['session'])
+ subdir_done()
+ endif
+
+-hwdata_dir = hwdata.get_variable(pkgconfig: 'pkgdatadir')
+ pnpids_c = custom_target(
+ 'pnpids.c',
+ output: 'pnpids.c',
+- input: files(hwdata_dir / 'pnp.ids'),
++ input: pnp_ids,
+ feed: true,
+ capture: true,
+ command: files('gen_pnpids.sh'),
+