summary refs log tree commit diff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/ecl-16-format-directive-limit.patch83
-rw-r--r--gnu/packages/patches/ecl-16-ignore-stderr-write-error.patch17
-rw-r--r--gnu/packages/patches/ecl-16-libffi.patch16
-rw-r--r--gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch39
-rw-r--r--gnu/packages/patches/emacs-telega-patch-server-functions.patch31
-rw-r--r--gnu/packages/patches/flint-ldconfig.patch26
-rw-r--r--gnu/packages/patches/ganeti-deterministic-manual.patch16
-rw-r--r--gnu/packages/patches/ganeti-disable-version-symlinks.patch136
-rw-r--r--gnu/packages/patches/ganeti-drbd-compat.patch166
-rw-r--r--gnu/packages/patches/ganeti-haskell-pythondir.patch66
-rw-r--r--gnu/packages/patches/ganeti-os-disk-size.patch17
-rw-r--r--gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch21
-rw-r--r--gnu/packages/patches/ganeti-shepherd-master-failover.patch18
-rw-r--r--gnu/packages/patches/ganeti-shepherd-support.patch87
-rw-r--r--gnu/packages/patches/gash-utils-ls-test.patch25
-rw-r--r--gnu/packages/patches/gdb-hurd.patch69
-rw-r--r--gnu/packages/patches/grub-cross-system-i686.patch96
-rw-r--r--gnu/packages/patches/icecat-makeicecat.patch4
-rw-r--r--gnu/packages/patches/ilmbase-fix-test-arm.patch60
-rw-r--r--gnu/packages/patches/intel-xed-fix-nondeterminism.patch113
-rw-r--r--gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch31
-rw-r--r--gnu/packages/patches/libreoffice-poppler-compat.patch19
-rw-r--r--gnu/packages/patches/libvnc-CVE-2018-20750.patch44
-rw-r--r--gnu/packages/patches/libvnc-CVE-2019-15681.patch23
-rw-r--r--gnu/packages/patches/linbox-fix-pkgconfig.patch23
-rw-r--r--gnu/packages/patches/llvm-9-fix-bitcast-miscompilation.patch192
-rw-r--r--gnu/packages/patches/llvm-9-fix-lpad-miscompilation.patch97
-rw-r--r--gnu/packages/patches/llvm-9-fix-scev-miscompilation.patch113
-rw-r--r--gnu/packages/patches/maven-enforcer-api-fix-old-dependencies.patch177
-rw-r--r--gnu/packages/patches/opendht-fix-jami.patch33
-rw-r--r--gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch358
-rw-r--r--gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch48
-rw-r--r--gnu/packages/patches/python-tinycss2-flake8-compat.patch36
-rw-r--r--gnu/packages/patches/qtbase-absolute-runpath.patch17
-rw-r--r--gnu/packages/patches/ruby-rubocop-break-dependency-cycle.patch101
-rw-r--r--gnu/packages/patches/rust-1.45-linker-locale.patch14
-rw-r--r--gnu/packages/patches/sqlite-hurd.patch58
-rw-r--r--gnu/packages/patches/sssd-fix-samba.patch50
-rw-r--r--gnu/packages/patches/tao-add-missing-headers.patch102
-rw-r--r--gnu/packages/patches/tao-fix-parser-types.patch26
-rw-r--r--gnu/packages/patches/transmission-CVE-2018-10756.patch71
-rw-r--r--gnu/packages/patches/u-boot-DT-for-Pinebook-Pro.patch1132
-rw-r--r--gnu/packages/patches/u-boot-add-boe-nv140fhmn49-display.patch29
-rw-r--r--gnu/packages/patches/u-boot-gpio-keys-binding-cons.patch37
-rw-r--r--gnu/packages/patches/u-boot-leds-common-binding-con.patch115
-rw-r--r--gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch14
-rw-r--r--gnu/packages/patches/u-boot-support-Pinebook-Pro-laptop.patch367
-rw-r--r--gnu/packages/patches/u-boot-video-rockchip-fix-build.patch48
-rw-r--r--gnu/packages/patches/ungoogled-chromium-system-nspr.patch120
-rw-r--r--gnu/packages/patches/widelands-system-wide_minizip.patch153
-rw-r--r--gnu/packages/patches/x265-arm-flags.patch38
-rw-r--r--gnu/packages/patches/xpra-4.0.1-systemd-run.patch34
52 files changed, 2820 insertions, 2006 deletions
diff --git a/gnu/packages/patches/ecl-16-format-directive-limit.patch b/gnu/packages/patches/ecl-16-format-directive-limit.patch
new file mode 100644
index 0000000000..237db92722
--- /dev/null
+++ b/gnu/packages/patches/ecl-16-format-directive-limit.patch
@@ -0,0 +1,83 @@
+Patch backported by Sage.
+
+Fix from upstream that happens to work around
+https://trac.sagemath.org/ticket/23011
+diff --git a/src/lsp/format.lsp b/src/lsp/format.lsp
+index 77ca799..53b887c 100644
+--- a/src/lsp/format.lsp
++++ b/src/lsp/format.lsp
+@@ -307,11 +307,13 @@
+                   :start (format-directive-start struct)
+                   :end (format-directive-end struct))))
+ 
++(defconstant +format-directive-limit+ (1+ (char-code #\~)))
++
+ #+formatter
+ (defparameter *format-directive-expanders*
+-  (make-array char-code-limit :initial-element nil))
++  (make-array +format-directive-limit+ :initial-element nil))
+ (defparameter *format-directive-interpreters*
+-  (make-array char-code-limit :initial-element nil))
++  (make-array +format-directive-limit+ :initial-element nil))
+ 
+ (defparameter *default-format-error-control-string* nil)
+ (defparameter *default-format-error-offset* nil)
+@@ -550,24 +552,24 @@
+            (write-string directive stream)
+            (interpret-directive-list stream (cdr directives) orig-args args))
+           (#-ecl format-directive #+ecl vector
++           (multiple-value-bind
++                 (new-directives new-args)
++               (let* ((code (char-code (format-directive-character directive)))
++                      (function
++                        (and (< code +format-directive-limit+)
++                             (svref *format-directive-interpreters* code)))
++                      (*default-format-error-offset*
++                        (1- (format-directive-end directive))))
++                 (unless function
++                   (error 'format-error
++                          :complaint "Unknown format directive."))
+                  (multiple-value-bind
+                        (new-directives new-args)
+-                     (let ((function
+-                            (svref *format-directive-interpreters*
+-                                   (char-code (format-directive-character
+-                                               directive))))
+-                           (*default-format-error-offset*
+-                            (1- (format-directive-end directive))))
+-                       (unless function
+-                         (error 'format-error
+-                                :complaint "Unknown format directive."))
+-                       (multiple-value-bind
+-                             (new-directives new-args)
+-                           (funcall function stream directive
+-                                    (cdr directives) orig-args args)
+-                         (values new-directives new-args)))
+-                   (interpret-directive-list stream new-directives
+-                                             orig-args new-args)))))
++                     (funcall function stream directive
++                              (cdr directives) orig-args args)
++                   (values new-directives new-args)))
++             (interpret-directive-list stream new-directives
++                                       orig-args new-args)))))
+       args))
+ 
+ 
+@@ -639,11 +641,12 @@
+        (values `(write-string ,directive stream)
+                more-directives))
+       (format-directive
+-       (let ((expander
+-              (aref *format-directive-expanders*
+-                    (char-code (format-directive-character directive))))
+-             (*default-format-error-offset*
+-              (1- (format-directive-end directive))))
++       (let* ((code (char-code (format-directive-character directive)))
++              (expander
++                (and (< code +format-directive-limit+)
++                     (svref *format-directive-expanders* code)))
++              (*default-format-error-offset*
++                (1- (format-directive-end directive))))
+          (if expander
+              (funcall expander directive more-directives)
+              (error 'format-error
diff --git a/gnu/packages/patches/ecl-16-ignore-stderr-write-error.patch b/gnu/packages/patches/ecl-16-ignore-stderr-write-error.patch
new file mode 100644
index 0000000000..42d213c0e9
--- /dev/null
+++ b/gnu/packages/patches/ecl-16-ignore-stderr-write-error.patch
@@ -0,0 +1,17 @@
+Patch adapted from Sage.
+diff -Naur ecl-16.1.2.orig/src/c/file.d ecl-16.1.2/src/c/file.d
+--- ecl-16.1.2.orig/src/c/file.d	2016-05-11 13:10:51.867673867 +1200
++++ ecl-16.1.2/src/c/file.d	2016-05-11 14:44:48.121907307 +1200
+@@ -3354,8 +3354,10 @@
+   ecl_disable_interrupts();
+   do {
+     out = fwrite(c, sizeof(char), n, IO_STREAM_FILE(strm));
+-  } while (out < n && restartable_io_error(strm, "fwrite"));
+-  ecl_enable_interrupts();
++  /* Ignore write errors to stderr to avoid an infinite loop */
++  } while (out < n && (IO_STREAM_FILE(strm) != stderr) && restartable_io_error(strm, "fwrite"));
++
++  ecl_enable_interrupts();
+   return out;
+ }
+ 
diff --git a/gnu/packages/patches/ecl-16-libffi.patch b/gnu/packages/patches/ecl-16-libffi.patch
new file mode 100644
index 0000000000..fc06a07606
--- /dev/null
+++ b/gnu/packages/patches/ecl-16-libffi.patch
@@ -0,0 +1,16 @@
+Patch adapted from Sage. Allows building ECL on libffi 3.3.
+diff --git a/src/c/ffi.d b/src/c/ffi.d
+index 8861303e..8a959c23 100644
+--- a/src/c/ffi.d
++++ b/src/c/ffi.d
+@@ -133,8 +133,8 @@ static struct {
+ #elif defined(X86_WIN64)
+   {@':win64', FFI_WIN64},
+ #elif defined(X86_ANY) || defined(X86) || defined(X86_64)
+-  {@':cdecl', FFI_SYSV},
+-  {@':sysv', FFI_SYSV},
++  {@':cdecl', FFI_UNIX64},
++  {@':sysv', FFI_UNIX64},
+   {@':unix64', FFI_UNIX64},
+ #endif
+ };
diff --git a/gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch b/gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch
new file mode 100644
index 0000000000..6d31021f67
--- /dev/null
+++ b/gnu/packages/patches/emacs-exwm-fix-fullscreen-states.patch
@@ -0,0 +1,39 @@
+From edb930005b0ba83051ca8a59b493e9a3c8ef580a Mon Sep 17 00:00:00 2001
+From: Chris Feng <chris.w.feng@gmail.com>
+Date: Sun, 14 Jun 2020 00:00:00 +0000
+Subject: [PATCH] Fix fullscreen states
+
+* exwm-layout.el (exwm-layout-set-fullscreen,
+exwm-layout-unset-fullscreen): Use `exwm--id' for interactive use.
+(exwm-layout-unset-fullscreen): Mandatorily clear fullscreen states.
+---
+ exwm-layout.el | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/exwm-layout.el b/exwm-layout.el
+index 170c2be..79d0c95 100644
+--- a/exwm-layout.el
++++ b/exwm-layout.el
+@@ -205,7 +205,7 @@
+                        :border-width 0
+                        :stack-mode xcb:StackMode:Above))
+     (cl-pushnew xcb:Atom:_NET_WM_STATE_FULLSCREEN exwm--ewmh-state)
+-    (exwm-layout--set-ewmh-state id)
++    (exwm-layout--set-ewmh-state exwm--id)
+     (xcb:flush exwm--connection)
+     (set-window-dedicated-p (get-buffer-window) t)
+     (exwm-input--release-keyboard exwm--id)))
+@@ -233,7 +233,9 @@
+       (let ((window (get-buffer-window nil t)))
+         (when window
+           (exwm-layout--show exwm--id window))))
+-    (exwm-layout--set-ewmh-state id)
++    (setq exwm--ewmh-state
++          (delq xcb:Atom:_NET_WM_STATE_FULLSCREEN exwm--ewmh-state))
++    (exwm-layout--set-ewmh-state exwm--id)
+     (xcb:flush exwm--connection)
+     (set-window-dedicated-p (get-buffer-window) nil)
+     (when (eq 'line-mode exwm--selected-input-mode)
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/emacs-telega-patch-server-functions.patch b/gnu/packages/patches/emacs-telega-patch-server-functions.patch
new file mode 100644
index 0000000000..e3d49278d0
--- /dev/null
+++ b/gnu/packages/patches/emacs-telega-patch-server-functions.patch
@@ -0,0 +1,31 @@
+Remove interactive build for telega-server, as it fails on Guix.
+Modify the `telega-server--find-bin' function to only use the version
+of telega-server installed by Guix.
+
+Created by Brett Gilio <brettg@gnu.org>
+
+--- a/telega-server.el
++++ b/telega-server.el
+@@ -113,7 +113,6 @@ If already deferring, then just executes the BODY."
+ If BUILD-FLAGS is specified, then rebuild server without any
+ queries using this flags for building, could be empty string.
+ Otherwise query user about building flags."
+-  (interactive)
+   (telega-test-env 'quiet)
+   (when (or build-flags
+             (y-or-n-p "Build `telega-server'? "))
+@@ -137,11 +136,8 @@ Otherwise query user about building flags."
+ (defun telega-server--find-bin ()
+   "Find telega-server executable.
+ Raise error if not found."
+-  (let ((exec-path (cons telega-directory exec-path)))
+-    (or (executable-find "telega-server")
+-        (progn (telega-server-build)
+-               (executable-find "telega-server"))
+-        (error "`telega-server' not found in exec-path"))))
++  (or (executable-find "telega-server")
++      (error "`telega-server' not found in exec-path")))
+ 
+ (defun telega-server-version ()
+   "Return telega-server version."
+
diff --git a/gnu/packages/patches/flint-ldconfig.patch b/gnu/packages/patches/flint-ldconfig.patch
deleted file mode 100644
index d7c66e17ab..0000000000
--- a/gnu/packages/patches/flint-ldconfig.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Patch by Andreas Enge <andreas@enge.fr>.
-Remedy the absence of ldconfig and explicitly create an additional symbolic
-link to the flint library, as discussed privately with upstream.
-
-diff -r -u flint-2.5.2.orig/configure flint-2.5.2/configure
---- flint-2.5.2.orig/configure	2015-08-13 18:16:22.000000000 +0200
-+++ flint-2.5.2/configure	2015-08-14 17:38:14.316284437 +0200
-@@ -714,6 +714,7 @@
- echo "FLINT_SHARED=$SHARED" >> Makefile
- echo "FLINT_LIB=$FLINT_LIB" >> Makefile
- echo "FLINT_LIBNAME=$FLINT_LIBNAME" >> Makefile
-+echo "FLINT_MAJOR=$FLINT_MAJOR" >> Makefile
- echo "FLINT_SOLIB=$FLINT_SOLIB" >> Makefile
- echo "EXEEXT=$EXEEXT" >> Makefile
- echo "PREFIX=$PREFIX" >> Makefile
-diff -r -u flint-2.5.2.orig/Makefile.in flint-2.5.2/Makefile.in
---- flint-2.5.2.orig/Makefile.in	2015-08-13 18:16:22.000000000 +0200
-+++ flint-2.5.2/Makefile.in	2015-08-14 17:38:50.584774817 +0200
-@@ -118,6 +118,7 @@
- 		$(LDCONFIG) -n "$(CURDIR)"; \
- 	fi
- 	ln -sf "$(FLINT_LIB)" "$(FLINT_LIBNAME)"; \
-+	ln -sf "$(FLINT_LIB)" "$(FLINT_LIBNAME).$(FLINT_MAJOR)"; \
- 
- libflint.a: $(OBJS) $(LIB_SOURCES) $(EXT_SOURCES) $(HEADERS) $(EXT_HEADERS) | build build/interfaces
- 	$(AT)$(foreach ext, $(EXTENSIONS), $(foreach dir, $(filter-out %templates, $(patsubst $(ext)/%.h, %, $(wildcard $(ext)/*.h))), mkdir -p build/$(dir); BUILD_DIR=$(CURDIR)/build/$(dir); export BUILD_DIR; MOD_DIR=$(dir); export MOD_DIR; $(MAKE) -f $(CURDIR)/Makefile.subdirs -C $(ext)/$(dir) static || exit $$?;))
diff --git a/gnu/packages/patches/ganeti-deterministic-manual.patch b/gnu/packages/patches/ganeti-deterministic-manual.patch
new file mode 100644
index 0000000000..2d90aa740e
--- /dev/null
+++ b/gnu/packages/patches/ganeti-deterministic-manual.patch
@@ -0,0 +1,16 @@
+Sort the ecode list in the gnt-cluster manual for deterministic results.
+
+Submitted upstream: <https://github.com/ganeti/ganeti/pull/1504>.
+
+diff --git a/lib/build/sphinx_ext.py b/lib/build/sphinx_ext.py
+--- a/lib/build/sphinx_ext.py
++++ b/lib/build/sphinx_ext.py
+@@ -108,7 +108,7 @@ CV_ECODES_DOC = "ecodes"
+ # pylint: disable=W0621
+ CV_ECODES_DOC_LIST = [(name, doc) for (_, name, doc) in constants.CV_ALL_ECODES]
+ DOCUMENTED_CONSTANTS = {
+-  CV_ECODES_DOC: CV_ECODES_DOC_LIST,
++  CV_ECODES_DOC: sorted(CV_ECODES_DOC_LIST, key=lambda tup: tup[0]),
+   }
+ 
+ 
diff --git a/gnu/packages/patches/ganeti-disable-version-symlinks.patch b/gnu/packages/patches/ganeti-disable-version-symlinks.patch
new file mode 100644
index 0000000000..a5f347cfc6
--- /dev/null
+++ b/gnu/packages/patches/ganeti-disable-version-symlinks.patch
@@ -0,0 +1,136 @@
+This patch adds a new "--disable-version-links" configuration option
+that allows installing to the standard GNU installation directories
+instead of having to add symlinks in /etc/ganeti/{lib,share} that
+points to the right $ganeti/{lib,share}/$version.  Mainly to reduce
+service complexity, and because Guix users can install as many versions
+of Ganeti they can muster without resorting to such hacks.
+
+diff --git a/Makefile.am b/Makefile.am
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -66,11 +66,16 @@ SHELL_ENV_INIT = autotools/shell-env-init
+ # so, if some currently architecture-independent executable is replaced by an
+ # architecture-dependent one (and hence has to go under $(versiondir)), add a link
+ # under $(versionedsharedir) but do not change the external links.
++#
++# As of Ganeti 3.0, it is possible to disable this behavior by passing
++# --disable-version-links, in which case the standard GNU installation
++# directories are used.
+ if USE_VERSION_FULL
+ DIRVERSION=$(VERSION_FULL)
+ else
+ DIRVERSION=$(VERSION_MAJOR).$(VERSION_MINOR)
+ endif
++if USE_VERSION_LINKS
+ versiondir = $(libdir)/ganeti/$(DIRVERSION)
+ defaultversiondir = $(libdir)/ganeti/default
+ versionedsharedir = $(prefix)/share/ganeti/$(DIRVERSION)
+@@ -90,6 +95,18 @@ gntpythondir = $(versionedsharedir)
+ pkgpython_bindir = $(versionedsharedir)
+ gnt_python_sbindir = $(versionedsharedir)
+ tools_pythondir = $(versionedsharedir)
++else
++myexeclibdir = $(pkglibdir)
++pkgpython_rpc_stubdir = $(pkgpythondir)/rpc/stub
++gntpythondir = $(sbindir)
++pkgpython_bindir = $(pkglibdir)
++gnt_python_sbindir = $(sbindir)
++tools_pythondir = $(pkglibdir)
++versionedsharedir = $(pkglibdir)
++# This is a hack but works because the only user does $(versiondir)$(datadir).
++versiondir =
++endif !USE_VERSION_LINKS
++
+ 
+ clientdir = $(pkgpythondir)/client
+ cmdlibdir = $(pkgpythondir)/cmdlib
+@@ -2356,6 +2373,7 @@ src/AutoConf.hs: Makefile src/AutoConf.hs.in $(PRINT_PY_CONSTANTS) \
+ 	    -DVERSION_SUFFIX="$(VERSION_SUFFIX)" \
+ 	    -DVERSION_FULL="$(VERSION_FULL)" \
+ 	    -DDIRVERSION="$(DIRVERSION)" \
++	    -DUSE_VERSION_LINKS="$(USE_VERSION_LINKS)" \
+ 	    -DLOCALSTATEDIR="$(localstatedir)" \
+ 	    -DSYSCONFDIR="$(sysconfdir)" \
+ 	    -DSSH_CONFIG_DIR="$(SSH_CONFIG_DIR)" \
+@@ -2857,6 +2875,7 @@ install-exec-local:
+ 	@mkdir_p@ "$(DESTDIR)${localstatedir}/lib/ganeti" \
+ 	  "$(DESTDIR)${localstatedir}/log/ganeti" \
+ 	  "$(DESTDIR)${localstatedir}/run/ganeti"
++if USE_VERSION_LINKS
+ 	for dir in $(SYMLINK_TARGET_DIRS); do \
+ 	  @mkdir_p@  $(DESTDIR)$$dir; \
+ 	done
+@@ -2892,7 +2911,8 @@ install-exec-local:
+ if INSTALL_SYMLINKS
+ 	$(LN_S) -f $(versionedsharedir) $(DESTDIR)$(sysconfdir)/ganeti/share
+ 	$(LN_S) -f $(versiondir) $(DESTDIR)$(sysconfdir)/ganeti/lib
+-endif
++endif INSTALL_SYMLINKS
++endif USE_VERSION_LINKS
+ 
+ .PHONY: apidoc
+ if WANT_HSAPIDOC
+diff --git a/configure.ac b/configure.ac
+--- a/configure.ac
++++ b/configure.ac
+@@ -29,6 +29,23 @@ AC_SUBST([BINDIR], $bindir)
+ AC_SUBST([SBINDIR], $sbindir)
+ AC_SUBST([MANDIR], $mandir)
+ 
++# --enable-version-links
++AC_ARG_ENABLE([version-links],
++  [AS_HELP_STRING([--enable-version-links],
++                  m4_normalize([install ganeti to version-specific
++                  subdirectories to allow installing multiple versions
++                  in parallel (default: enabled)]))],
++  [[if test "$enableval" != no; then
++      USE_VERSION_LINKS=True
++    else
++      USE_VERSION_LINKS=False
++    fi
++  ]],
++  [USE_VERSION_LINKS=True
++  ])
++AC_SUBST(USE_VERSION_LINKS, $USE_VERSION_LINKS)
++AM_CONDITIONAL([USE_VERSION_LINKS], [test "$USE_VERSION_LINKS" = True])
++
+ # --enable-versionfull
+ AC_ARG_ENABLE([versionfull],
+   [AS_HELP_STRING([--enable-versionfull],
+diff --git a/lib/bootstrap.py b/lib/bootstrap.py
+--- a/lib/bootstrap.py
++++ b/lib/bootstrap.py
+@@ -944,7 +944,7 @@ def SetupNodeDaemon(opts, cluster_name, node, ssh_port):
+                          debug=opts.debug, verbose=opts.verbose,
+                          use_cluster_key=True, ask_key=opts.ssh_key_check,
+                          strict_host_check=opts.ssh_key_check,
+-                         ensure_version=True)
++                         ensure_version=constants.USE_VERSION_LINKS)
+ 
+   _WaitForSshDaemon(node, ssh_port)
+   _WaitForNodeDaemon(node)
+diff --git a/src/AutoConf.hs.in b/src/AutoConf.hs.in
+--- a/src/AutoConf.hs.in
++++ b/src/AutoConf.hs.in
+@@ -64,6 +64,9 @@ versionFull = "VERSION_FULL"
+ dirVersion :: String
+ dirVersion = "DIRVERSION"
+ 
++useVersionLinks :: Bool
++useVersionLinks = USE_VERSION_LINKS
++
+ localstatedir :: String
+ localstatedir = "LOCALSTATEDIR"
+ 
+diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
+--- a/src/Ganeti/Constants.hs
++++ b/src/Ganeti/Constants.hs
+@@ -164,5 +164,8 @@ versionRevision = AutoConf.versionRevision
+ dirVersion :: String
+ dirVersion = AutoConf.dirVersion
+ 
++useVersionLinks :: Bool
++useVersionLinks = AutoConf.useVersionLinks
++
+ osApiV10 :: Int
+ osApiV10 = 10
diff --git a/gnu/packages/patches/ganeti-drbd-compat.patch b/gnu/packages/patches/ganeti-drbd-compat.patch
new file mode 100644
index 0000000000..32f46bc7ed
--- /dev/null
+++ b/gnu/packages/patches/ganeti-drbd-compat.patch
@@ -0,0 +1,166 @@
+This patch adds support for newer versions of DRBD.
+
+Submitted upstream: <https://github.com/ganeti/ganeti/pull/1496>.
+
+diff --git a/lib/storage/drbd.py b/lib/storage/drbd.py
+--- a/lib/storage/drbd.py
++++ b/lib/storage/drbd.py
+@@ -315,6 +315,13 @@ class DRBD8Dev(base.BlockDev):
+     """
+     return self._show_info_cls.GetDevInfo(self._GetShowData(minor))
+ 
++  @staticmethod
++  def _NeedsLocalSyncerParams():
++    # For DRBD >= 8.4, syncer init must be done after local, not in net.
++    info = DRBD8.GetProcInfo()
++    version = info.GetVersion()
++    return version["k_minor"] >= 4
++
+   def _MatchesLocal(self, info):
+     """Test if our local config matches with an existing device.
+ 
+@@ -397,6 +404,20 @@ class DRBD8Dev(base.BlockDev):
+         base.ThrowError("drbd%d: can't attach local disk: %s",
+                         minor, result.output)
+ 
++    def _WaitForMinorSyncParams():
++      """Call _SetMinorSyncParams and raise RetryAgain on errors.
++      """
++      if self._SetMinorSyncParams(minor, self.params):
++        raise utils.RetryAgain()
++
++    if self._NeedsLocalSyncerParams():
++      # Retry because disk config for DRBD resource may be still uninitialized.
++      try:
++        utils.Retry(_WaitForMinorSyncParams, 1.0, 5.0)
++      except utils.RetryTimeout as e:
++        base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
++                        (minor, utils.CommaJoin(e.args[0])))
++
+   def _AssembleNet(self, minor, net_info, dual_pri=False, hmac=None,
+                    secret=None):
+     """Configure the network part of the device.
+@@ -432,21 +453,24 @@ class DRBD8Dev(base.BlockDev):
+     # sync speed only after setting up both sides can race with DRBD
+     # connecting, hence we set it here before telling DRBD anything
+     # about its peer.
+-    sync_errors = self._SetMinorSyncParams(minor, self.params)
+-    if sync_errors:
+-      base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
+-                      (minor, utils.CommaJoin(sync_errors)))
++
++    if not self._NeedsLocalSyncerParams():
++      sync_errors = self._SetMinorSyncParams(minor, self.params)
++      if sync_errors:
++        base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
++                        (minor, utils.CommaJoin(sync_errors)))
+ 
+     family = self._GetNetFamily(minor, lhost, rhost)
+ 
+-    cmd = self._cmd_gen.GenNetInitCmd(minor, family, lhost, lport,
++    cmds = self._cmd_gen.GenNetInitCmds(minor, family, lhost, lport,
+                                       rhost, rport, protocol,
+                                       dual_pri, hmac, secret, self.params)
+ 
+-    result = utils.RunCmd(cmd)
+-    if result.failed:
+-      base.ThrowError("drbd%d: can't setup network: %s - %s",
+-                      minor, result.fail_reason, result.output)
++    for cmd in cmds:
++      result = utils.RunCmd(cmd)
++      if result.failed:
++        base.ThrowError("drbd%d: can't setup network: %s - %s",
++                         minor, result.fail_reason, result.output)
+ 
+     def _CheckNetworkConfig():
+       info = self._GetShowInfo(minor)
+@@ -463,19 +487,20 @@ class DRBD8Dev(base.BlockDev):
+       base.ThrowError("drbd%d: timeout while configuring network", minor)
+ 
+     # Once the assembly is over, try to set the synchronization parameters
+-    try:
+-      # The minor may not have been set yet, requiring us to set it at least
+-      # temporarily
+-      old_minor = self.minor
+-      self._SetFromMinor(minor)
+-      sync_errors = self.SetSyncParams(self.params)
+-      if sync_errors:
+-        base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
+-                        (self.minor, utils.CommaJoin(sync_errors)))
+-    finally:
+-      # Undo the change, regardless of whether it will have to be done again
+-      # soon
+-      self._SetFromMinor(old_minor)
++    if not self._NeedsLocalSyncerParams():
++      try:
++        # The minor may not have been set yet, requiring us to set it at least
++        # temporarily
++        old_minor = self.minor
++        self._SetFromMinor(minor)
++        sync_errors = self.SetSyncParams(self.params)
++        if sync_errors:
++          base.ThrowError("drbd%d: can't set the synchronization parameters: %s" %
++                          (self.minor, utils.CommaJoin(sync_errors)))
++      finally:
++        # Undo the change, regardless of whether it will have to be done again
++        # soon
++        self._SetFromMinor(old_minor)
+ 
+   @staticmethod
+   def _GetNetFamily(minor, lhost, rhost):
+diff --git a/lib/storage/drbd_cmdgen.py b/lib/storage/drbd_cmdgen.py
+--- a/lib/storage/drbd_cmdgen.py
++++ b/lib/storage/drbd_cmdgen.py
+@@ -56,7 +56,7 @@ class BaseDRBDCmdGenerator(object):
+   def GenLocalInitCmds(self, minor, data_dev, meta_dev, size_mb, params):
+     raise NotImplementedError
+ 
+-  def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
++  def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
+                     dual_pri, hmac, secret, params):
+     raise NotImplementedError
+ 
+@@ -138,7 +138,7 @@ class DRBD83CmdGenerator(BaseDRBDCmdGenerator):
+ 
+     return [args]
+ 
+-  def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
++  def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
+                     dual_pri, hmac, secret, params):
+     args = ["drbdsetup", self._DevPath(minor), "net",
+             "%s:%s:%s" % (family, lhost, lport),
+@@ -155,7 +155,7 @@ class DRBD83CmdGenerator(BaseDRBDCmdGenerator):
+     if params[constants.LDP_NET_CUSTOM]:
+       args.extend(shlex.split(params[constants.LDP_NET_CUSTOM]))
+ 
+-    return args
++    return [args]
+ 
+   def GenSyncParamsCmd(self, minor, params):
+     args = ["drbdsetup", self._DevPath(minor), "syncer"]
+@@ -345,8 +345,14 @@ class DRBD84CmdGenerator(BaseDRBDCmdGenerator):
+ 
+     return cmds
+ 
+-  def GenNetInitCmd(self, minor, family, lhost, lport, rhost, rport, protocol,
++  def GenNetInitCmds(self, minor, family, lhost, lport, rhost, rport, protocol,
+                     dual_pri, hmac, secret, params):
++    cmds = []
++
++    cmds.append(["drbdsetup", "new-resource", self._GetResource(minor)])
++    cmds.append(["drbdsetup", "new-minor", self._GetResource(minor),
++                 str(minor), "0"])
++
+     args = ["drbdsetup", "connect", self._GetResource(minor),
+             "%s:%s:%s" % (family, lhost, lport),
+             "%s:%s:%s" % (family, rhost, rport),
+@@ -362,7 +368,8 @@ class DRBD84CmdGenerator(BaseDRBDCmdGenerator):
+     if params[constants.LDP_NET_CUSTOM]:
+       args.extend(shlex.split(params[constants.LDP_NET_CUSTOM]))
+ 
+-    return args
++    cmds.append(args)
++    return cmds
+ 
+   def GenSyncParamsCmd(self, minor, params):
+     args = ["drbdsetup", "disk-options", minor]
diff --git a/gnu/packages/patches/ganeti-haskell-pythondir.patch b/gnu/packages/patches/ganeti-haskell-pythondir.patch
new file mode 100644
index 0000000000..fa77771839
--- /dev/null
+++ b/gnu/packages/patches/ganeti-haskell-pythondir.patch
@@ -0,0 +1,66 @@
+This patch allows the Haskell daemons to locate Python libraries
+installed to a non-standard pythondir.  It is necessary because Guix
+does not use versionedsharedir (see related patch that disables it).
+
+diff --git a/Makefile.am b/Makefile.am
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -83,6 +83,7 @@ myexeclibdir = $(pkglibdir)
+ bindir = $(versiondir)/$(BINDIR)
+ sbindir = $(versiondir)$(SBINDIR)
+ mandir = $(versionedsharedir)/root$(MANDIR)
++pythondir = $(versionedsharedir)
+ pkgpythondir = $(versionedsharedir)/ganeti
+ pkgpython_rpc_stubdir = $(versionedsharedir)/ganeti/rpc/stub
+ gntpythondir = $(versionedsharedir)
+@@ -2386,6 +2387,7 @@ src/AutoConf.hs: Makefile src/AutoConf.hs.in $(PRINT_PY_CONSTANTS) \
+ 	    -DPKGLIBDIR="$(libdir)/ganeti" \
+ 	    -DSHAREDIR="$(prefix)/share/ganeti" \
+ 	    -DVERSIONEDSHAREDIR="$(versionedsharedir)" \
++	    -DPYTHONDIR="$(pythondir)" \
+ 	    -DDRBD_BARRIERS="$(DRBD_BARRIERS)" \
+ 	    -DDRBD_NO_META_FLUSH="$(DRBD_NO_META_FLUSH)" \
+ 	    -DSYSLOG_USAGE="$(SYSLOG_USAGE)" \
+diff --git a/src/AutoConf.hs.in b/src/AutoConf.hs.in
+--- a/src/AutoConf.hs.in
++++ b/src/AutoConf.hs.in
+@@ -157,6 +157,9 @@ sharedir = "SHAREDIR"
+ versionedsharedir :: String
+ versionedsharedir = "VERSIONEDSHAREDIR"
+ 
++pythondir :: String
++pythondir = "PYTHONDIR"
++
+ drbdBarriers :: String
+ drbdBarriers = "DRBD_BARRIERS"
+ 
+diff --git a/src/Ganeti/Path.hs b/src/Ganeti/Path.hs
+--- a/src/Ganeti/Path.hs
++++ b/src/Ganeti/Path.hs
+@@ -188,5 +188,5 @@ getInstReasonFilename instName = instanceReasonDir `pjoin` instName
+ 
+ -- | The path to the Python executable for starting jobs.
+ jqueueExecutorPy :: IO FilePath
+-jqueueExecutorPy = return $ versionedsharedir
+-                            </> "ganeti" </> "jqueue" </> "exec.py"
++jqueueExecutorPy = return $ pythondir
++                           </> "ganeti" </> "jqueue" </> "exec.py"
+diff --git a/src/Ganeti/Query/Exec.hs b/src/Ganeti/Query/Exec.hs
+--- a/src/Ganeti/Query/Exec.hs
++++ b/src/Ganeti/Query/Exec.hs
+@@ -99,12 +99,12 @@ spawnJobProcess jid = withErrorLogAt CRITICAL (show jid) $
+   do
+     use_debug <- isDebugMode
+     env_ <- (M.toList . M.insert "GNT_DEBUG" (if use_debug then "1" else "0")
+-            . M.insert "PYTHONPATH" AC.versionedsharedir
++            . M.insert "PYTHONPATH" AC.pythondir
+             . M.fromList)
+            `liftM` getEnvironment
+     execPy <- P.jqueueExecutorPy
+     logDebug $ "Executing " ++ AC.pythonPath ++ " " ++ execPy
+-               ++ " with PYTHONPATH=" ++ AC.versionedsharedir
++               ++ " with PYTHONPATH=" ++ AC.pythondir
+ 
+     (master, child) <- pipeClient connectConfig
+     let (rh, wh) = clientToHandle child
+
diff --git a/gnu/packages/patches/ganeti-os-disk-size.patch b/gnu/packages/patches/ganeti-os-disk-size.patch
new file mode 100644
index 0000000000..16b1d7615c
--- /dev/null
+++ b/gnu/packages/patches/ganeti-os-disk-size.patch
@@ -0,0 +1,17 @@
+This exposes information about disk sizes to OS install scripts.  instance-guix
+uses this if available to determine the size of the VM image.
+
+Submitted upstream:
+https://github.com/ganeti/ganeti/pull/1503
+
+diff --git a/lib/backend.py b/lib/backend.py
+--- a/lib/backend.py
++++ b/lib/backend.py
+@@ -4305,6 +4305,7 @@ def OSEnvironment(instance, inst_os, debug=0):
+     uri = _CalculateDeviceURI(instance, disk, real_disk)
+     result["DISK_%d_ACCESS" % idx] = disk.mode
+     result["DISK_%d_UUID" % idx] = disk.uuid
++    result["DISK_%d_SIZE" % idx] = str(disk.size)
+     if real_disk.dev_path:
+       result["DISK_%d_PATH" % idx] = real_disk.dev_path
+     if uri:
diff --git a/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch b/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
new file mode 100644
index 0000000000..1358e30633
--- /dev/null
+++ b/gnu/packages/patches/ganeti-preserve-PYTHONPATH.patch
@@ -0,0 +1,21 @@
+Do not override PYTHONPATH when calling Python code from the Haskell
+daemons.  This is necessary because the Python library dependencies are
+only available through PYTHONPATH.
+
+diff --git a/src/Ganeti/Query/Exec.hs b/src/Ganeti/Query/Exec.hs
+--- a/src/Ganeti/Query/Exec.hs
++++ b/src/Ganeti/Query/Exec.hs
+@@ -99,12 +99,10 @@ spawnJobProcess jid = withErrorLogAt CRITICAL (show jid) $
+   do
+     use_debug <- isDebugMode
+     env_ <- (M.toList . M.insert "GNT_DEBUG" (if use_debug then "1" else "0")
+-            . M.insert "PYTHONPATH" AC.pythondir
+             . M.fromList)
+            `liftM` getEnvironment
+     execPy <- P.jqueueExecutorPy
+     logDebug $ "Executing " ++ AC.pythonPath ++ " " ++ execPy
+-               ++ " with PYTHONPATH=" ++ AC.pythondir
+ 
+     (master, child) <- pipeClient connectConfig
+     let (rh, wh) = clientToHandle child
+
diff --git a/gnu/packages/patches/ganeti-shepherd-master-failover.patch b/gnu/packages/patches/ganeti-shepherd-master-failover.patch
new file mode 100644
index 0000000000..36a7918998
--- /dev/null
+++ b/gnu/packages/patches/ganeti-shepherd-master-failover.patch
@@ -0,0 +1,18 @@
+By default, master-failover will call "herd start ganeti-wconfd" with
+extra arguments such as --force-node.  That does not work with the
+Shepherd, so the Guix service has a "force-start" action for this purpose.
+
+diff --git a/lib/bootstrap.py b/lib/bootstrap.py
+--- a/lib/bootstrap.py
++++ b/lib/bootstrap.py
+@@ -1011,9 +1011,7 @@ def MasterFailover(no_voting=False):
+ 
+   try:
+     # Forcefully start WConfd so that we can access the configuration
+-    result = utils.RunCmd([pathutils.DAEMON_UTIL,
+-                           "start", constants.WCONFD, "--force-node",
+-                           "--no-voting", "--yes-do-it"])
++    result = utils.RunCmd(["herd", "force-start", constants.WCONFD])
+     if result.failed:
+       raise errors.OpPrereqError("Could not start the configuration daemon,"
+                                  " command %s had exitcode %s and error %s" %
diff --git a/gnu/packages/patches/ganeti-shepherd-support.patch b/gnu/packages/patches/ganeti-shepherd-support.patch
new file mode 100644
index 0000000000..f750604344
--- /dev/null
+++ b/gnu/packages/patches/ganeti-shepherd-support.patch
@@ -0,0 +1,87 @@
+Ganeti uses an internal tool to start/stop daemons during init and
+upgrade.  This patch makes the tool use native Shepherd facilities.
+
+diff --git a/daemons/daemon-util.in b/daemons/daemon-util.in
+--- a/daemons/daemon-util.in
++++ b/daemons/daemon-util.in
+@@ -184,6 +184,21 @@ use_systemctl() {
+   return 1
+ }
+ 
++# Checks if we should use the Shepherd to start/stop daemons
++use_shepherd() {
++  # Is Shepherd running as PID 1?
++  ps --no-headers -p 1 -o cmd | grep -q shepherd || return 1
++
++  type -p herd >/dev/null || return 1
++
++  # Does Shepherd know about Ganeti at all?
++  if herd status | grep -q ganeti; then
++    return 0
++  fi
++
++  return 1
++}
++
+ # Prints path to PID file for a daemon.
+ daemon_pidfile() {
+   if [[ "$#" -lt 1 ]]; then
+@@ -261,6 +276,13 @@ check() {
+     else
+       return 1
+     fi
++  elif use_shepherd; then
++    activestate="$(herd status ${name})"
++    if echo $activestate | grep -q Running ; then
++      return 0
++    else
++      return 1
++    fi
+   elif type -p start-stop-daemon >/dev/null; then
+     start-stop-daemon --stop --signal 0 --quiet \
+       --pidfile $pidfile --name "$name"
+@@ -291,6 +313,20 @@ start() {
+     return $?
+   fi
+ 
++  if use_shepherd; then
++    if herd status "$name" | grep -q "disabled"; then
++      # The Shepherd will disable a service that has stopped, even if it exits
++      # gracefully.  Thus, we must re-enable it in case of a master failover.
++      herd enable "${name}"
++    fi
++    # Note: unlike systemd, which happily starts a service and returns success
++    # even if the daemon immediately exits, the Shepherd actually waits for it
++    # to come up.  Thus, ignore the exit status from 'herd start' in case of
++    # master daemons running on the wrong node, or ganeti-kvmd disabled, etc.
++    herd start "${name}"
++    return 0
++  fi
++
+   # Read $<daemon>_ARGS and $EXTRA_<daemon>_ARGS
+   eval local args="\"\$${ucname}_ARGS \$EXTRA_${ucname}_ARGS\""
+ 
+@@ -336,6 +372,13 @@ stop() {
+ 
+   if use_systemctl; then
+     systemctl stop "${name}.service"
++  elif use_shepherd; then
++    if herd status | grep -q "$name"; then
++      herd stop "$name"
++    else
++      # Do not raise an error if the service has not been enabled.
++      return 0
++    fi
+   elif type -p start-stop-daemon >/dev/null; then
+     start-stop-daemon --stop --quiet --oknodo --retry 30 \
+       --pidfile $pidfile --name "$name"
+@@ -352,6 +395,9 @@ check_and_start() {
+     if use_systemctl; then
+       echo "${name} supervised by systemd but not running, will not restart."
+       return 1
++    elif use_shepherd; then
++      echo "${name} supervised by shepherd but not running, will not restart."
++      return 1
+     fi
+ 
+     start $name
diff --git a/gnu/packages/patches/gash-utils-ls-test.patch b/gnu/packages/patches/gash-utils-ls-test.patch
new file mode 100644
index 0000000000..e1dfb9c23b
--- /dev/null
+++ b/gnu/packages/patches/gash-utils-ls-test.patch
@@ -0,0 +1,25 @@
+'ls.scm' monkey-patches (ice-9 getopt-long) to allow it to recognize '-1'
+as a valid option.  Unfortunately, monkey patching no longer works with
+Guile 3.0 due to inlining, so change the test to make do without '-1'.
+
+diff --git a/tests/core-utils.org b/tests/core-utils.org
+index d35ede8..22718e3 100644
+--- a/tests/core-utils.org
++++ b/tests/core-utils.org
+@@ -93,14 +93,11 @@
+ * ls
+ :script:
+ #+begin_src sh
+-  ls -1 tests/data/star
++  ls tests/data/star
+ #+end_src
+ :stdout:
+ #+begin_example
+-  0
+-  1
+-  2
+-  3
++  0  1  2  3                                                                    
+ #+end_example
+ 
+ * test-file
diff --git a/gnu/packages/patches/gdb-hurd.patch b/gnu/packages/patches/gdb-hurd.patch
new file mode 100644
index 0000000000..0af8d4dc28
--- /dev/null
+++ b/gnu/packages/patches/gdb-hurd.patch
@@ -0,0 +1,69 @@
+Taken from upstream, removed ChangeLog.
+
+From 6930bffe3373690b3431d6291f9f7c116d6a1ec4 Mon Sep 17 00:00:00 2001
+From: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Date: Sat, 30 May 2020 18:35:59 +0000
+Subject: [PATCH] hurd: fix gnu_debug_flag type
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fixes
+
+../../gdb/gnu-nat.c:96:6: error: conflicting declaration ‘bool gnu_debug_flag’
+   96 | bool gnu_debug_flag = false;
+../../gdb/gnu-nat.c: In function ‘void _initialize_gnu_nat()’:
+../../gdb/gnu-nat.c:3511:7: error: cannot
+
+gdb/ChangeLog:
+
+	* gnu-nat.h (gnu_debug_flag): Set type to bool.
+---
+ gdb/ChangeLog | 4 ++++
+ gdb/gnu-nat.h | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/gdb/gnu-nat.h b/gdb/gnu-nat.h
+index 77c57817b2..766f716587 100644
+--- a/gdb/gnu-nat.h
++++ b/gdb/gnu-nat.h
+@@ -111,7 +111,7 @@ extern char *proc_string (struct proc *proc);
+ 	      __proc_pid (__proc), __proc->tid, \
+ 	      host_address_to_string (__proc) , ##args); } while (0)
+ 
+-extern int gnu_debug_flag;
++extern bool gnu_debug_flag;
+ 
+ #define debug(msg, args...) \
+  do { if (gnu_debug_flag) \
+-- 
+Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
+Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
+
+commit 366f550a593c7e6bae3699a4b6d65fe937af5603
+Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Date:   Sat May 30 18:41:30 2020 +0000
+
+    hurd: add missing include
+    
+    Fixes
+    
+    ../../gdb/gnu-nat.c:2522:14: error: ‘target_gdbarch’ was not declared in this scope; did you mean ‘target_detach’?
+     2522 |    paddress (target_gdbarch (), memaddr), pulongest (len),
+    
+    gdb/Changelog:
+    
+            * gnu-nat.c: Include "gdbarch.h".
+
+diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
+index 3b438a9a43..9b93488b41 100644
+--- a/gdb/gnu-nat.c
++++ b/gdb/gnu-nat.c
+@@ -64,6 +64,7 @@ extern "C"
+ #include "language.h"
+ #include "target.h"
+ #include "gdbsupport/gdb_wait.h"
++#include "gdbarch.h"
+ #include "gdbcmd.h"
+ #include "gdbcore.h"
+ #include "gdbthread.h"
diff --git a/gnu/packages/patches/grub-cross-system-i686.patch b/gnu/packages/patches/grub-cross-system-i686.patch
new file mode 100644
index 0000000000..2715345d63
--- /dev/null
+++ b/gnu/packages/patches/grub-cross-system-i686.patch
@@ -0,0 +1,96 @@
+Not upstreamed.
+Fixes cross-build for the Hurd, from i686-linux,
+see <https://bugs.gnu.org/41982>.
+
+From 17b242e7b80108f1467037e15b605595e4823b2e Mon Sep 17 00:00:00 2001
+From: "Jan (janneke) Nieuwenhuizen" <janneke@gnu.org>
+Date: Sun, 21 Jun 2020 15:10:40 +0200
+Subject: [PATCH v2] grub-core: Build fixes for i386
+Content-Transfer-Encoding: 8bit
+Content-Type: text/plain; charset=UTF-8
+
+* grub-core/lib/i386/relocator64.S: Avoid x86_64 instructions on i386.
+---
+ grub-core/lib/i386/relocator64.S | 33 +++++++++++++++++++++++++++++++-
+ 1 file changed, 32 insertions(+), 1 deletion(-)
+
+diff --git a/grub-core/lib/i386/relocator64.S b/grub-core/lib/i386/relocator64.S
+index 148f38adb..ea39908c1 100644
+--- a/grub-core/lib/i386/relocator64.S
++++ b/grub-core/lib/i386/relocator64.S
+@@ -63,7 +63,9 @@ VARIABLE(grub_relocator64_cr3)
+ 	movq	%rax, %cr3
+ #endif
+ 
++#ifdef __x86_64__
+ 	.code64
++#endif
+ 
+ 	/* mov imm64, %rax */
+ 	.byte 	0x48
+@@ -71,7 +73,14 @@ VARIABLE(grub_relocator64_cr3)
+ VARIABLE(grub_relocator64_rsp)
+ 	.quad	0
+ 
++#ifndef __x86_64__
++	/* movq	%rax, %rsp */
++	.byte 	0x48
++	.byte	0x89
++	.byte	0xc4
++#else
+ 	movq	%rax, %rsp
++#endif
+ 
+ #ifdef GRUB_MACHINE_EFI
+ 	jmp	LOCAL(skip_efi_stack_align)
+@@ -85,7 +94,14 @@ VARIABLE(grub_relocator64_rsp)
+ 	 */
+ VARIABLE(grub_relocator64_efi_start)
+ 	/* Align the stack as UEFI spec requires. */
++#ifndef __x86_64__
++	.byte 0x48
++        .byte 0x83
++        .byte 0xe4
++        .byte 0xf0
++#else
+ 	andq	$~15, %rsp
++#endif
+ 
+ LOCAL(skip_efi_stack_align):
+ #endif
+@@ -95,8 +111,15 @@ LOCAL(skip_efi_stack_align):
+ VARIABLE(grub_relocator64_rsi)
+ 	.quad	0
+ 
++#ifndef	__x86_64__
++	/* movq	%rax, %rsi */
++	.byte 	0x48
++	.byte	0x89
++	.byte 	0xc6
++#else
+ 	movq	%rax, %rsi
+-	
++#endif
++
+ 	/* mov imm64, %rax */
+ 	.byte 	0x48
+ 	.byte	0xb8
+@@ -128,6 +151,14 @@ VARIABLE(grub_relocator64_rdx)
+ #ifdef __APPLE__
+ 	.byte 0xff, 0x25
+ 	.quad 0
++#elif !defined (__x86_64__)
++	/* jmp *LOCAL(jump_addr) (%rip) */
++	.byte 0xff
++        .byte 0x25
++	.byte 0
++	.byte 0
++	.byte 0
++	.byte 0
+ #else
+ 	jmp *LOCAL(jump_addr) (%rip)
+ #endif
+-- 
+Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
+Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
+
diff --git a/gnu/packages/patches/icecat-makeicecat.patch b/gnu/packages/patches/icecat-makeicecat.patch
index d3d95cbf28..cff0b7ad45 100644
--- a/gnu/packages/patches/icecat-makeicecat.patch
+++ b/gnu/packages/patches/icecat-makeicecat.patch
@@ -25,7 +25,7 @@ index 8be2362..48716f2 100755
 -wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
 -gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
 -gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
--echo -n 935105e1a8a97d64daffb372690e2b566b5f07641f01470929dbbc82d20d4407 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
+-echo -n 2ec8c2627e46e80fc208584966a2ded7a0a9ff76b55ffccec0623b89b98ded2b firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
 -
 -echo Extracting Firefox tarball
 -tar -xf firefox-${FFVERSION}esr.source.tar.xz
@@ -37,7 +37,7 @@ index 8be2362..48716f2 100755
 +# wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
 +# gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
 +# gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
-+# echo -n 935105e1a8a97d64daffb372690e2b566b5f07641f01470929dbbc82d20d4407 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
++# echo -n 2ec8c2627e46e80fc208584966a2ded7a0a9ff76b55ffccec0623b89b98ded2b firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
 +# 
 +# echo Extracting Firefox tarball
 +# tar -xf firefox-${FFVERSION}esr.source.tar.xz
diff --git a/gnu/packages/patches/ilmbase-fix-test-arm.patch b/gnu/packages/patches/ilmbase-fix-test-arm.patch
deleted file mode 100644
index 2dbc55e8c4..0000000000
--- a/gnu/packages/patches/ilmbase-fix-test-arm.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Fix a test failure on ARM platforms:
-
-https://github.com/AcademySoftwareFoundation/openexr/issues/713
-
-Taken from upstream:
-
-https://github.com/AcademySoftwareFoundation/openexr/commit/76d9839cd1b300398f8b801dfcb4bcf2f8c0096f
-
-diff --git a/OpenEXR/IlmImfTest/testHuf.cpp b/OpenEXR/IlmImfTest/testHuf.cpp
-index 4c887ee8..a93b8ea9 100644
---- a/OpenEXR/IlmImfTest/testHuf.cpp
-+++ b/OpenEXR/IlmImfTest/testHuf.cpp
-@@ -181,9 +181,9 @@ compressUncompressSubset(const unsigned short raw[], int n)
- // This DEK hash is determined from an aprior initial run of this
- // test noting its value from the assert message compressVerify().
- // 
--#define  HUF_COMPRESS_DEK_HASH_FOR_FILL4_USHRT_MAX_PLUS_ONE 2956869585U
--#define  HUF_COMPRESS_DEK_HASH_FOR_FILL4_N 3414126535U
--#define  HUF_COMPRESS_DEK_HASH_FOR_FILL5_N 169791374U
-+#define  HUF_COMPRESS_DEK_HASH_FOR_FILL4_USHRT_MAX_PLUS_ONE 2013380646U
-+#define  HUF_COMPRESS_DEK_HASH_FOR_FILL4_N 213880353U
-+#define  HUF_COMPRESS_DEK_HASH_FOR_FILL5_N 2492982090U
- 
- void
- compressVerify (const unsigned short raw[], 
-@@ -200,7 +200,7 @@ compressVerify (const unsigned short raw[],
-     // under the topic of sorting and search chapter 6.4. 
-     //
-     unsigned int compressedHash = nCompressed;
--    const char* cptr = compressed;
-+    const unsigned char* cptr = reinterpret_cast<const unsigned char*>( (const char*) compressed);
-     for (int i = 0; i < nCompressed; ++i)
-     {
-         compressedHash = 
-@@ -210,6 +210,25 @@ compressVerify (const unsigned short raw[],
-     cout << "verifying compressed checksum hash = " 
-         << compressedHash << std::endl;
- 
-+    if (compressedHash != dekHash)
-+    {
-+       cout << "hash verification failed. Got " << compressedHash << " expected " << dekHash << std::endl;
-+       const unsigned char* cptr = reinterpret_cast<const unsigned char*>( (const char*) compressed);
-+       for(int i = 0 ; i < nCompressed ; ++i )
-+       {
-+           cout << std::hex << (0xFF & (int) (*cptr++));
-+           if ( (i & 0xF) ==0 )
-+           {
-+              cout << '\n';
-+           }
-+           else
-+           {
-+              cout << ' ';
-+           }
-+       }
-+       cout << "\n";
-+    }
-+
-     assert (compressedHash == dekHash);
- }
- 
diff --git a/gnu/packages/patches/intel-xed-fix-nondeterminism.patch b/gnu/packages/patches/intel-xed-fix-nondeterminism.patch
new file mode 100644
index 0000000000..c81bd0edde
--- /dev/null
+++ b/gnu/packages/patches/intel-xed-fix-nondeterminism.patch
@@ -0,0 +1,113 @@
+This patch removes sources of build non-determinism in the upstream sources.
+
+In particular, many of the compiled sources are generated with Python code,
+which in turn uses dictionaries to index the output C functions.  However,
+iterators over Python dictionaries have no guaranteed order, thus resulting in
+the C functions being output in a random order between builds.
+
+The patch below fixes this by forcing an order during output in several key
+places.  Note, however, that future updates may uncover new such places that
+just happen to be non-problematic at the time of this patch.  If you are
+reading this due to finding such issues, feel free to contact me at
+elaexuotee@wilsonb.com for help.
+
+diff --git a/pysrc/ild_codegen.py b/pysrc/ild_codegen.py
+index 628ec45..a9bff79 100755
+--- a/pysrc/ild_codegen.py
++++ b/pysrc/ild_codegen.py
+@@ -188,14 +188,14 @@ def gen_l2_func_list(agi, target_nt_dict, arg_nt_dict,
+                      ild_t_member):
+     """generate L2 functions"""
+     l2_func_list = []
+-    for (nt_name,array) in target_nt_dict.items():
++    for (nt_name,array) in sorted(target_nt_dict.items()):
+         target_opname = array.get_target_opname()
+         if array.is_const_lookup_fun():
+             fo = gen_const_l2_function(agi, nt_name,
+                                 target_opname, ild_t_member)
+             l2_func_list.append(fo)
+         else:
+-            for arg_nt_seq,arg_arr in arg_nt_dict.items():
++            for arg_nt_seq,arg_arr in sorted(arg_nt_dict.items()):
+                 fo = gen_scalable_l2_function(agi, nt_name,
+                      target_opname, ild_t_member, arg_arr, list(arg_nt_seq))
+                 l2_func_list.append(fo)
+diff --git a/pysrc/ild_disp.py b/pysrc/ild_disp.py
+index 942c036..cf80e29 100755
+--- a/pysrc/ild_disp.py
++++ b/pysrc/ild_disp.py
+@@ -350,7 +350,8 @@ def work(agi, united_lookup,  disp_nts, brdisp_nts, ild_gendir,
+     disp_dict = _gen_l3_array_dict(agi, disp_nts, _disp_token)
+ 
+     
+-    nt_arr_list = list(brdisp_dict.values()) + list(disp_dict.values())
++    nt_arr_list = ([v for (k,v) in sorted(brdisp_dict.items())] +
++                   [v for (k,v) in sorted(disp_dict.items())])
+     #create function that calls all initialization functions
+     init_f = ild_nt.gen_init_function(nt_arr_list, 'xed_ild_disp_l3_init')
+     
+@@ -367,7 +368,7 @@ def work(agi, united_lookup,  disp_nts, brdisp_nts, ild_gendir,
+     l2_functions = []
+     eosz_op = ild_eosz.get_target_opname()
+     easz_op = ild_easz.get_target_opname()
+-    for nt_name,array in list(disp_dict.items()) + list(brdisp_dict.items()):
++    for nt_name,array in sorted(disp_dict.items()) + sorted(brdisp_dict.items()):
+         #Some DISP NTs depend on EOSZ, others on EASZ, we need to know
+         #that when we generate L2 functions
+         if eosz_op in array.get_arg_names():
+diff --git a/pysrc/ild_easz.py b/pysrc/ild_easz.py
+index 02cd691..c53b9f2 100755
+--- a/pysrc/ild_easz.py
++++ b/pysrc/ild_easz.py
+@@ -165,9 +165,10 @@ def work(agi, united_lookup, easz_nts, ild_gendir, debug):
+             return
+         nt_seq_arrays[tuple(nt_seq)] = array
+     #init function calls all single init functions for the created tables
+-    init_f = ild_nt.gen_init_function(list(nt_seq_arrays.values()),
++    nt_seq_values = [v for (k,v) in sorted(nt_seq_arrays.items())]
++    init_f = ild_nt.gen_init_function(nt_seq_values,
+                                        'xed_ild_easz_init')
+-    ild_nt.dump_lu_arrays(agi, list(nt_seq_arrays.values()), _easz_c_fn, 
++    ild_nt.dump_lu_arrays(agi, nt_seq_values, _easz_c_fn, 
+                           mbuild.join('include-private', _easz_header_fn),
+                           init_f)
+     getter_fos = []
+diff --git a/pysrc/ild_eosz.py b/pysrc/ild_eosz.py
+index 6643bc3..89d2d89 100755
+--- a/pysrc/ild_eosz.py
++++ b/pysrc/ild_eosz.py
+@@ -200,10 +200,11 @@ def work(agi, united_lookup, eosz_nts, ild_gendir, debug):
+             return None
+         nt_seq_arrays[tuple(nt_seq)] = array
+     #init function calls all single init functions for the created tables
+-    init_f = ild_nt.gen_init_function(list(nt_seq_arrays.values()), 
++    nt_seq_values = [v for (k,v) in sorted(nt_seq_arrays.items())]
++    init_f = ild_nt.gen_init_function(nt_seq_values, 
+                                       'xed_ild_eosz_init')
+     #dump init and lookup functions for EOSZ sequences
+-    ild_nt.dump_lu_arrays(agi, list(nt_seq_arrays.values()), _eosz_c_fn,
++    ild_nt.dump_lu_arrays(agi, nt_seq_values, _eosz_c_fn,
+                           mbuild.join('include-private', _eosz_header_fn),
+                           init_f)
+     #generate EOSZ getter functions - they get xed_decoded_inst_t*
+diff --git a/pysrc/ild_imm.py b/pysrc/ild_imm.py
+index 51c413c..0530bae 100755
+--- a/pysrc/ild_imm.py
++++ b/pysrc/ild_imm.py
+@@ -322,12 +322,14 @@ def work(agi, united_lookup, imm_nts, ild_gendir, eosz_dict,
+                                      level='l3')
+         nt_dict[nt_name] = array
+ 
++    nt_dict_values = [v for (k,v) in sorted(nt_dict.items())]
++
+     #create function that calls all initialization functions for L3
+-    init_f = ild_nt.gen_init_function(list(nt_dict.values()),
++    init_f = ild_nt.gen_init_function(nt_dict_values,
+                                       'xed_ild_imm_l3_init')
+     
+     #dump L3 functions
+-    ild_nt.dump_lu_arrays(agi, list(nt_dict.values()), _l3_c_fn,
++    ild_nt.dump_lu_arrays(agi, nt_dict_values, _l3_c_fn,
+                           mbuild.join('include-private',_l3_header_fn),
+                           init_f)
+     
diff --git a/gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch b/gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch
new file mode 100644
index 0000000000..1352ed7803
--- /dev/null
+++ b/gnu/packages/patches/jamvm-2.0.0-disable-branch-patching.patch
@@ -0,0 +1,31 @@
+From d80cfc83325f8e95d35ecd9f15b36b96fa9ed3ee Mon Sep 17 00:00:00 2001
+From: Simon South <simon@simonsouth.net>
+Date: Sat, 6 Jun 2020 18:56:56 -0400
+Subject: [PATCH] Disable branch-patching
+
+This patch disables JamVM's branch-patching optimization, which tends
+to make JamVM fail with an "Illegal instruction" error on x86_64 (and
+possibly other architectures that use variable-length instructions)
+when built using modern versions of gcc and glibc.
+---
+ src/init.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/init.c b/src/init.c
+index 32539cf..38ad54b 100644
+--- a/src/init.c
++++ b/src/init.c
+@@ -72,8 +72,8 @@ void setDefaultInitArgs(InitArgs *args) {
+ #ifdef INLINING
+     args->replication_threshold = 10;
+     args->profile_threshold     = 10;
+-    args->branch_patching_dup   = TRUE;
+-    args->branch_patching       = TRUE;
++    args->branch_patching_dup   = FALSE;
++    args->branch_patching       = FALSE;
+     args->print_codestats       = FALSE;
+     args->join_blocks           = TRUE;
+     args->profiling             = TRUE;
+-- 
+2.25.2
+
diff --git a/gnu/packages/patches/libreoffice-poppler-compat.patch b/gnu/packages/patches/libreoffice-poppler-compat.patch
deleted file mode 100644
index 8dc0b60a12..0000000000
--- a/gnu/packages/patches/libreoffice-poppler-compat.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Fix type mismatch with Poppler 0.86.
-
-Taken from Arch Linux:
-https://git.archlinux.org/svntogit/packages.git/tree/trunk/libreoffice-poppler-0.86.patch?h=packages/libreoffice-fresh
-
-diff --git a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
---- a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
-+++ b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
-@@ -563,7 +563,9 @@ void PDFOutDev::processLink(Link* link, Catalog*)
-     if (!(pAction && pAction->getKind() == actionURI))
-         return;
- 
--#if POPPLER_CHECK_VERSION(0, 72, 0)
-+#if POPPLER_CHECK_VERSION(0, 86, 0)
-+    const char* pURI = static_cast<LinkURI*>(pAction)->getURI().c_str();
-+#elif POPPLER_CHECK_VERSION(0, 72, 0)
-     const char* pURI = static_cast<LinkURI*>(pAction)->getURI()->c_str();
- #else
-     const char* pURI = static_cast<LinkURI*>(pAction)->getURI()->getCString();
diff --git a/gnu/packages/patches/libvnc-CVE-2018-20750.patch b/gnu/packages/patches/libvnc-CVE-2018-20750.patch
deleted file mode 100644
index 146243670a..0000000000
--- a/gnu/packages/patches/libvnc-CVE-2018-20750.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 09e8fc02f59f16e2583b34fe1a270c238bd9ffec Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
-Date: Mon, 7 Jan 2019 10:40:01 +0100
-Subject: [PATCH] Limit lenght to INT_MAX bytes in
- rfbProcessFileTransferReadBuffer()
-
-This ammends 15bb719c03cc70f14c36a843dcb16ed69b405707 fix for a heap
-out-of-bound write access in rfbProcessFileTransferReadBuffer() when
-reading a transfered file content in a server. The former fix did not
-work on platforms with a 32-bit int type (expected by rfbReadExact()).
-
-CVE-2018-15127
-<https://github.com/LibVNC/libvncserver/issues/243>
-<https://github.com/LibVNC/libvncserver/issues/273>
----
- libvncserver/rfbserver.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
-index 7af84906..f2edbeea 100644
---- a/libvncserver/rfbserver.c
-+++ b/libvncserver/rfbserver.c
-@@ -88,6 +88,8 @@
- #include <errno.h>
- /* strftime() */
- #include <time.h>
-+/* INT_MAX */
-+#include <limits.h>
- 
- #ifdef LIBVNCSERVER_WITH_WEBSOCKETS
- #include "rfbssl.h"
-@@ -1472,8 +1474,11 @@ char *rfbProcessFileTransferReadBuffer(rfbClientPtr cl, uint32_t length)
-        0XFFFFFFFF, i.e. SIZE_MAX for 32-bit systems. On 64-bit systems, a length of 0XFFFFFFFF
-        will safely be allocated since this check will never trigger and malloc() can digest length+1
-        without problems as length is a uint32_t.
-+       We also later pass length to rfbReadExact() that expects a signed int type and
-+       that might wrap on platforms with a 32-bit int type if length is bigger
-+       than 0X7FFFFFFF.
-     */
--    if(length == SIZE_MAX) {
-+    if(length == SIZE_MAX || length > INT_MAX) {
- 	rfbErr("rfbProcessFileTransferReadBuffer: too big file transfer length requested: %u", (unsigned int)length);
- 	rfbCloseClient(cl);
- 	return NULL;
diff --git a/gnu/packages/patches/libvnc-CVE-2019-15681.patch b/gnu/packages/patches/libvnc-CVE-2019-15681.patch
deleted file mode 100644
index e328d87920..0000000000
--- a/gnu/packages/patches/libvnc-CVE-2019-15681.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From d01e1bb4246323ba6fcee3b82ef1faa9b1dac82a Mon Sep 17 00:00:00 2001
-From: Christian Beier <dontmind@freeshell.org>
-Date: Mon, 19 Aug 2019 22:32:25 +0200
-Subject: [PATCH] rfbserver: don't leak stack memory to the remote
-
-Thanks go to Pavel Cheremushkin of Kaspersky for reporting.
----
- libvncserver/rfbserver.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
-index 3bacc891..310e5487 100644
---- a/libvncserver/rfbserver.c
-+++ b/libvncserver/rfbserver.c
-@@ -3724,6 +3724,8 @@ rfbSendServerCutText(rfbScreenInfoPtr rfbScreen,char *str, int len)
-     rfbServerCutTextMsg sct;
-     rfbClientIteratorPtr iterator;
- 
-+    memset((char *)&sct, 0, sizeof(sct));
-+
-     iterator = rfbGetClientIterator(rfbScreen);
-     while ((cl = rfbClientIteratorNext(iterator)) != NULL) {
-         sct.type = rfbServerCutText;
diff --git a/gnu/packages/patches/linbox-fix-pkgconfig.patch b/gnu/packages/patches/linbox-fix-pkgconfig.patch
new file mode 100644
index 0000000000..c93915fb1b
--- /dev/null
+++ b/gnu/packages/patches/linbox-fix-pkgconfig.patch
@@ -0,0 +1,23 @@
+Backported from:
+
+From 426eb97ba762c7663884f57ead0909f2aa3cd6a5 Mon Sep 17 00:00:00 2001
+From: Cyril Bouvier <cyril.bouvier@lirmm.fr>
+Date: Thu, 17 Jan 2019 16:32:19 +0100
+Subject: [PATCH] Remove @LINBOXSAGE_LIBS@ from linbox.pc.in
+
+---
+ linbox.pc.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/linbox.pc.in b/linbox.pc.in
+index 278f127e4..c6b8091eb 100644
+--- a/linbox.pc.in
++++ b/linbox.pc.in
+@@ -9,6 +9,6 @@ Description: Exact Linear Algebra library
+ URL: http://github.com/linbox-team/linbox
+ Version: @VERSION@
+ Requires: fflas-ffpack >= 2.4.0, givaro >= 4.1.0
+-Libs: -L${libdir} -llinbox @LINBOXSAGE_LIBS@ @NTL_LIBS@ @MPFR_LIBS@ @FPLLL_LIBS@ @IML_LIBS@ @FLINT_LIBS@ @OCL_LIBS@
++Libs: -L${libdir} -llinbox @NTL_LIBS@ @MPFR_LIBS@ @FPLLL_LIBS@ @IML_LIBS@ @FLINT_LIBS@ @OCL_LIBS@
+ Cflags: @DEFAULT_CFLAGS@ -DDISABLE_COMMENTATOR -I${includedir} @NTL_CFLAGS@ @MPFR_CFLAGS@ @FPLLL_CFLAGS@  @IML_CFLAGS@ @FLINT_CFLAGS@ 
+ \-------------------------------------------------------
diff --git a/gnu/packages/patches/llvm-9-fix-bitcast-miscompilation.patch b/gnu/packages/patches/llvm-9-fix-bitcast-miscompilation.patch
new file mode 100644
index 0000000000..fe381acf1b
--- /dev/null
+++ b/gnu/packages/patches/llvm-9-fix-bitcast-miscompilation.patch
@@ -0,0 +1,192 @@
+From f8e146f3430de3a6cd904f3f3f7aa1bfaefee14c Mon Sep 17 00:00:00 2001
+From: Bjorn Pettersson <bjorn.a.pettersson@ericsson.com>
+Date: Thu, 28 Nov 2019 23:18:28 +0100
+Subject: [PATCH] [InstCombine] Fix big-endian miscompile of (bitcast
+ (zext/trunc (bitcast)))
+
+Summary:
+optimizeVectorResize is rewriting patterns like:
+  %1 = bitcast vector %src to integer
+  %2 = trunc/zext %1
+  %dst = bitcast %2 to vector
+
+Since bitcasting between integer an vector types gives
+different integer values depending on endianness, we need
+to take endianness into account. As it happens the old
+implementation only produced the correct result for little
+endian targets.
+
+Fixes: https://bugs.llvm.org/show_bug.cgi?id=44178
+
+Reviewers: spatel, lattner, lebedev.ri
+
+Reviewed By: spatel, lebedev.ri
+
+Subscribers: lebedev.ri, hiraditya, uabelho, llvm-commits
+
+Tags: #llvm
+
+Differential Revision: https://reviews.llvm.org/D70844
+
+(cherry picked from commit a9d6b0e5444741d08ff1df7cf71d1559e7fefc1f)
+---
+ .../InstCombine/InstCombineCasts.cpp          | 79 +++++++++++++------
+ llvm/test/Transforms/InstCombine/cast.ll      |  6 +-
+ 2 files changed, 60 insertions(+), 25 deletions(-)
+
+diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+index 2c9ba203fbf3..0af3de300e77 100644
+--- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
++++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp
+@@ -18,6 +18,7 @@
+ #include "llvm/IR/DIBuilder.h"
+ #include "llvm/IR/PatternMatch.h"
+ #include "llvm/Support/KnownBits.h"
++#include <numeric>
+ using namespace llvm;
+ using namespace PatternMatch;
+ 
+@@ -1820,12 +1821,24 @@ Instruction *InstCombiner::visitPtrToInt(PtrToIntInst &CI) {
+ }
+ 
+ /// This input value (which is known to have vector type) is being zero extended
+-/// or truncated to the specified vector type.
++/// or truncated to the specified vector type. Since the zext/trunc is done
++/// using an integer type, we have a (bitcast(cast(bitcast))) pattern,
++/// endianness will impact which end of the vector that is extended or
++/// truncated.
++///
++/// A vector is always stored with index 0 at the lowest address, which
++/// corresponds to the most significant bits for a big endian stored integer and
++/// the least significant bits for little endian. A trunc/zext of an integer
++/// impacts the big end of the integer. Thus, we need to add/remove elements at
++/// the front of the vector for big endian targets, and the back of the vector
++/// for little endian targets.
++///
+ /// Try to replace it with a shuffle (and vector/vector bitcast) if possible.
+ ///
+ /// The source and destination vector types may have different element types.
+-static Instruction *optimizeVectorResize(Value *InVal, VectorType *DestTy,
+-                                         InstCombiner &IC) {
++static Instruction *optimizeVectorResizeWithIntegerBitCasts(Value *InVal,
++                                                            VectorType *DestTy,
++                                                            InstCombiner &IC) {
+   // We can only do this optimization if the output is a multiple of the input
+   // element size, or the input is a multiple of the output element size.
+   // Convert the input type to have the same element type as the output.
+@@ -1844,31 +1857,53 @@ static Instruction *optimizeVectorResize(Value *InVal, VectorType *DestTy,
+     InVal = IC.Builder.CreateBitCast(InVal, SrcTy);
+   }
+ 
++  bool IsBigEndian = IC.getDataLayout().isBigEndian();
++  unsigned SrcElts = SrcTy->getNumElements();
++  unsigned DestElts = DestTy->getNumElements();
++
++  assert(SrcElts != DestElts && "Element counts should be different.");
++
+   // Now that the element types match, get the shuffle mask and RHS of the
+   // shuffle to use, which depends on whether we're increasing or decreasing the
+   // size of the input.
+-  SmallVector<uint32_t, 16> ShuffleMask;
++  SmallVector<uint32_t, 16> ShuffleMaskStorage;
++  ArrayRef<uint32_t> ShuffleMask;
+   Value *V2;
+ 
+-  if (SrcTy->getNumElements() > DestTy->getNumElements()) {
+-    // If we're shrinking the number of elements, just shuffle in the low
+-    // elements from the input and use undef as the second shuffle input.
+-    V2 = UndefValue::get(SrcTy);
+-    for (unsigned i = 0, e = DestTy->getNumElements(); i != e; ++i)
+-      ShuffleMask.push_back(i);
++  // Produce an identify shuffle mask for the src vector.
++  ShuffleMaskStorage.resize(SrcElts);
++  std::iota(ShuffleMaskStorage.begin(), ShuffleMaskStorage.end(), 0);
+ 
++  if (SrcElts > DestElts) {
++    // If we're shrinking the number of elements (rewriting an integer
++    // truncate), just shuffle in the elements corresponding to the least
++    // significant bits from the input and use undef as the second shuffle
++    // input.
++    V2 = UndefValue::get(SrcTy);
++    // Make sure the shuffle mask selects the "least significant bits" by
++    // keeping elements from back of the src vector for big endian, and from the
++    // front for little endian.
++    ShuffleMask = ShuffleMaskStorage;
++    if (IsBigEndian)
++      ShuffleMask = ShuffleMask.take_back(DestElts);
++    else
++      ShuffleMask = ShuffleMask.take_front(DestElts);
+   } else {
+-    // If we're increasing the number of elements, shuffle in all of the
+-    // elements from InVal and fill the rest of the result elements with zeros
+-    // from a constant zero.
++    // If we're increasing the number of elements (rewriting an integer zext),
++    // shuffle in all of the elements from InVal. Fill the rest of the result
++    // elements with zeros from a constant zero.
+     V2 = Constant::getNullValue(SrcTy);
+-    unsigned SrcElts = SrcTy->getNumElements();
+-    for (unsigned i = 0, e = SrcElts; i != e; ++i)
+-      ShuffleMask.push_back(i);
+-
+-    // The excess elements reference the first element of the zero input.
+-    for (unsigned i = 0, e = DestTy->getNumElements()-SrcElts; i != e; ++i)
+-      ShuffleMask.push_back(SrcElts);
++    // Use first elt from V2 when indicating zero in the shuffle mask.
++    uint32_t NullElt = SrcElts;
++    // Extend with null values in the "most significant bits" by adding elements
++    // in front of the src vector for big endian, and at the back for little
++    // endian.
++    unsigned DeltaElts = DestElts - SrcElts;
++    if (IsBigEndian)
++      ShuffleMaskStorage.insert(ShuffleMaskStorage.begin(), DeltaElts, NullElt);
++    else
++      ShuffleMaskStorage.append(DeltaElts, NullElt);
++    ShuffleMask = ShuffleMaskStorage;
+   }
+ 
+   return new ShuffleVectorInst(InVal, V2,
+@@ -2359,8 +2394,8 @@ Instruction *InstCombiner::visitBitCast(BitCastInst &CI) {
+         CastInst *SrcCast = cast<CastInst>(Src);
+         if (BitCastInst *BCIn = dyn_cast<BitCastInst>(SrcCast->getOperand(0)))
+           if (isa<VectorType>(BCIn->getOperand(0)->getType()))
+-            if (Instruction *I = optimizeVectorResize(BCIn->getOperand(0),
+-                                               cast<VectorType>(DestTy), *this))
++            if (Instruction *I = optimizeVectorResizeWithIntegerBitCasts(
++                    BCIn->getOperand(0), cast<VectorType>(DestTy), *this))
+               return I;
+       }
+ 
+diff --git a/llvm/test/Transforms/InstCombine/cast.ll b/llvm/test/Transforms/InstCombine/cast.ll
+index b6d1eda0601d..3ce8de033422 100644
+--- a/llvm/test/Transforms/InstCombine/cast.ll
++++ b/llvm/test/Transforms/InstCombine/cast.ll
+@@ -824,7 +824,7 @@ define i64 @test59(i8 %A, i8 %B) {
+ 
+ define <3 x i32> @test60(<4 x i32> %call4) {
+ ; CHECK-LABEL: @test60(
+-; CHECK-NEXT:    [[P10:%.*]] = shufflevector <4 x i32> [[CALL4:%.*]], <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2>
++; CHECK-NEXT:    [[P10:%.*]] = shufflevector <4 x i32> [[CALL4:%.*]], <4 x i32> undef, <3 x i32> <i32 1, i32 2, i32 3>
+ ; CHECK-NEXT:    ret <3 x i32> [[P10]]
+ ;
+   %p11 = bitcast <4 x i32> %call4 to i128
+@@ -836,7 +836,7 @@ define <3 x i32> @test60(<4 x i32> %call4) {
+ 
+ define <4 x i32> @test61(<3 x i32> %call4) {
+ ; CHECK-LABEL: @test61(
+-; CHECK-NEXT:    [[P10:%.*]] = shufflevector <3 x i32> [[CALL4:%.*]], <3 x i32> <i32 0, i32 undef, i32 undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
++; CHECK-NEXT:    [[P10:%.*]] = shufflevector <3 x i32> [[CALL4:%.*]], <3 x i32> <i32 0, i32 undef, i32 undef>, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
+ ; CHECK-NEXT:    ret <4 x i32> [[P10]]
+ ;
+   %p11 = bitcast <3 x i32> %call4 to i96
+@@ -848,7 +848,7 @@ define <4 x i32> @test61(<3 x i32> %call4) {
+ define <4 x i32> @test62(<3 x float> %call4) {
+ ; CHECK-LABEL: @test62(
+ ; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <3 x float> [[CALL4:%.*]] to <3 x i32>
+-; CHECK-NEXT:    [[P10:%.*]] = shufflevector <3 x i32> [[TMP1]], <3 x i32> <i32 0, i32 undef, i32 undef>, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
++; CHECK-NEXT:    [[P10:%.*]] = shufflevector <3 x i32> [[TMP1]], <3 x i32> <i32 0, i32 undef, i32 undef>, <4 x i32> <i32 3, i32 0, i32 1, i32 2>
+ ; CHECK-NEXT:    ret <4 x i32> [[P10]]
+ ;
+   %p11 = bitcast <3 x float> %call4 to i96
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/llvm-9-fix-lpad-miscompilation.patch b/gnu/packages/patches/llvm-9-fix-lpad-miscompilation.patch
new file mode 100644
index 0000000000..6cfe07e50a
--- /dev/null
+++ b/gnu/packages/patches/llvm-9-fix-lpad-miscompilation.patch
@@ -0,0 +1,97 @@
+From 011fb5bf8b31316472fccb1a19c91912246df9b2 Mon Sep 17 00:00:00 2001
+From: Reid Kleckner <rnk@google.com>
+Date: Sat, 28 Mar 2020 11:03:14 -0700
+Subject: [PATCH] [CodeGen] Fix sinking local values in lpads with phis
+
+There was already a test case for landingpads to handle this case, but I
+had forgotten to consider PHI instructions preceding the EH_LABEL in the
+landingpad.
+
+PR45261
+---
+ llvm/lib/CodeGen/SelectionDAG/FastISel.cpp | 17 +++++++++-
+ llvm/test/CodeGen/X86/sink-local-value.ll  | 36 ++++++++++++++++++++++
+ 2 files changed, 52 insertions(+), 1 deletion(-)
+
+diff --git a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
+index 5ac3606dc662..2638b1e8a05c 100644
+--- a/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
++++ b/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
+@@ -225,6 +225,21 @@ static bool isRegUsedByPhiNodes(unsigned DefReg,
+   return false;
+ }
+ 
++static bool isTerminatingEHLabel(MachineBasicBlock *MBB, MachineInstr &MI) {
++  // Ignore non-EH labels.
++  if (!MI.isEHLabel())
++    return false;
++
++  // Any EH label outside a landing pad must be for an invoke. Consider it a
++  // terminator.
++  if (!MBB->isEHPad())
++    return true;
++
++  // If this is a landingpad, the first non-phi instruction will be an EH_LABEL.
++  // Don't consider that label to be a terminator.
++  return MI.getIterator() != MBB->getFirstNonPHI();
++}
++
+ /// Build a map of instruction orders. Return the first terminator and its
+ /// order. Consider EH_LABEL instructions to be terminators as well, since local
+ /// values for phis after invokes must be materialized before the call.
+@@ -233,7 +248,7 @@ void FastISel::InstOrderMap::initialize(
+   unsigned Order = 0;
+   for (MachineInstr &I : *MBB) {
+     if (!FirstTerminator &&
+-        (I.isTerminator() || (I.isEHLabel() && &I != &MBB->front()))) {
++        (I.isTerminator() || isTerminatingEHLabel(MBB, I))) {
+       FirstTerminator = &I;
+       FirstTerminatorOrder = Order;
+     }
+diff --git a/llvm/test/CodeGen/X86/sink-local-value.ll b/llvm/test/CodeGen/X86/sink-local-value.ll
+index b0e511ac1189..f7d861ac9b6c 100644
+--- a/llvm/test/CodeGen/X86/sink-local-value.ll
++++ b/llvm/test/CodeGen/X86/sink-local-value.ll
+@@ -145,6 +145,42 @@ try.cont:                                         ; preds = %entry, %lpad
+ ; CHECK:         retl
+ 
+ 
++define i32 @lpad_phi() personality i32 (...)* @__gxx_personality_v0 {
++entry:
++  store i32 42, i32* @sink_across
++  invoke void @may_throw()
++          to label %try.cont unwind label %lpad
++
++lpad:                                             ; preds = %entry
++  %p = phi i32 [ 11, %entry ]  ; Trivial, but -O0 keeps it
++  %0 = landingpad { i8*, i32 }
++          catch i8* null
++  store i32 %p, i32* @sink_across
++  br label %try.cont
++
++try.cont:                                         ; preds = %entry, %lpad
++  %r.0 = phi i32 [ 13, %entry ], [ 55, %lpad ]
++  ret i32 %r.0
++}
++
++; The constant materialization should be *after* the stores to sink_across, but
++; before any EH_LABEL.
++
++; CHECK-LABEL: lpad_phi:
++; CHECK:         movl    $42, sink_across
++; CHECK:         movl    $13, %{{[a-z]*}}
++; CHECK: .Ltmp{{.*}}:
++; CHECK:         calll   may_throw
++; CHECK: .Ltmp{{.*}}:
++; CHECK:         jmp     .LBB{{.*}}
++; CHECK: .LBB{{.*}}:                                # %lpad
++; CHECK-NEXT: .Ltmp{{.*}}:
++; CHECK:         movl    {{.*}}, sink_across
++; CHECK:         movl    $55, %{{[a-z]*}}
++; CHECK: .LBB{{.*}}:                                # %try.cont
++; CHECK:         retl
++
++
+ ; Function Attrs: nounwind readnone speculatable
+ declare void @llvm.dbg.value(metadata, metadata, metadata) #0
+ 
diff --git a/gnu/packages/patches/llvm-9-fix-scev-miscompilation.patch b/gnu/packages/patches/llvm-9-fix-scev-miscompilation.patch
new file mode 100644
index 0000000000..3f16de5a2b
--- /dev/null
+++ b/gnu/packages/patches/llvm-9-fix-scev-miscompilation.patch
@@ -0,0 +1,113 @@
+Guix note: this got detected with the test suite of rustc 1.41.1, but
+the issue potentially affects all consumers of LLVM.
+
+From 58e8c793d0e43150a6452e971a32d7407a8a7401 Mon Sep 17 00:00:00 2001
+From: Tim Northover <tnorthover@apple.com>
+Date: Mon, 30 Sep 2019 07:46:52 +0000
+Subject: [PATCH] Revert "[SCEV] add no wrap flag for SCEVAddExpr."
+
+This reverts r366419 because the analysis performed is within the context of
+the loop and it's only valid to add wrapping flags to "global" expressions if
+they're always correct.
+
+llvm-svn: 373184
+---
+ llvm/lib/Analysis/ScalarEvolution.cpp              | 2 +-
+ llvm/test/Analysis/ScalarEvolution/limit-depth.ll  | 2 +-
+ llvm/test/Analysis/ScalarEvolution/nsw.ll          | 2 +-
+ llvm/test/Analysis/ScalarEvolution/trip-count12.ll | 2 +-
+ llvm/test/Analysis/ScalarEvolution/trip-count9.ll  | 8 ++++----
+ 5 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
+index 354ae05bb841..c29fc5dbccfb 100644
+--- a/llvm/lib/Analysis/ScalarEvolution.cpp
++++ b/llvm/lib/Analysis/ScalarEvolution.cpp
+@@ -4992,7 +4992,7 @@ const SCEV *ScalarEvolution::createSimpleAffineAddRec(PHINode *PN,
+   // overflow.
+   if (auto *BEInst = dyn_cast<Instruction>(BEValueV))
+     if (isLoopInvariant(Accum, L) && isAddRecNeverPoison(BEInst, L))
+-      (void)getAddRecExpr(getAddExpr(StartVal, Accum, Flags), Accum, L, Flags);
++      (void)getAddRecExpr(getAddExpr(StartVal, Accum), Accum, L, Flags);
+ 
+   return PHISCEV;
+ }
+diff --git a/llvm/test/Analysis/ScalarEvolution/limit-depth.ll b/llvm/test/Analysis/ScalarEvolution/limit-depth.ll
+index db68a4f84c91..6fdf8c5df974 100644
+--- a/llvm/test/Analysis/ScalarEvolution/limit-depth.ll
++++ b/llvm/test/Analysis/ScalarEvolution/limit-depth.ll
+@@ -46,7 +46,7 @@ define void @test_mul(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f) {
+ define void @test_sext(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f) {
+ ; CHECK-LABEL: @test_sext
+ ; CHECK:        %se2 = sext i64 %iv2.inc to i128
+-; CHECK-NEXT:   -->  {(1 + (sext i64 {(sext i32 (1 + %a)<nsw> to i64),+,1}<nsw><%loop> to i128))<nsw>,+,1}<nsw><%loop2>
++; CHECK-NEXT:   -->  {(1 + (sext i64 {(sext i32 (1 + %a) to i64),+,1}<nsw><%loop> to i128))<nsw>,+,1}<nsw><%loop2>
+ entry:
+   br label %loop
+ 
+diff --git a/llvm/test/Analysis/ScalarEvolution/nsw.ll b/llvm/test/Analysis/ScalarEvolution/nsw.ll
+index 69427368625d..ca24f9d4a04b 100644
+--- a/llvm/test/Analysis/ScalarEvolution/nsw.ll
++++ b/llvm/test/Analysis/ScalarEvolution/nsw.ll
+@@ -163,7 +163,7 @@ bb5:                                              ; preds = %bb2
+ declare void @f(i32)
+ 
+ ; CHECK-LABEL: nswnowrap
+-; CHECK: --> {(1 + %v)<nsw>,+,1}<nsw><%for.body>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (2 + %v)
++; CHECK: --> {(1 + %v)<nsw>,+,1}<nsw><%for.body>{{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: (1 + ((1 + %v)<nsw> smax %v))
+ define void @nswnowrap(i32 %v, i32* %buf) {
+ entry:
+   %add = add nsw i32 %v, 1
+diff --git a/llvm/test/Analysis/ScalarEvolution/trip-count12.ll b/llvm/test/Analysis/ScalarEvolution/trip-count12.ll
+index 5e7d72d5e4f3..d0086ee2e6ac 100644
+--- a/llvm/test/Analysis/ScalarEvolution/trip-count12.ll
++++ b/llvm/test/Analysis/ScalarEvolution/trip-count12.ll
+@@ -1,7 +1,7 @@
+ ; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s
+ 
+ ; CHECK: Determining loop execution counts for: @test
+-; CHECK: Loop %for.body: backedge-taken count is ((-2 + %len)<nsw> /u 2)
++; CHECK: Loop %for.body: backedge-taken count is ((-2 + %len) /u 2)
+ ; CHECK: Loop %for.body: max backedge-taken count is 1073741823
+ 
+ define zeroext i16 @test(i16* nocapture %p, i32 %len) nounwind readonly {
+diff --git a/llvm/test/Analysis/ScalarEvolution/trip-count9.ll b/llvm/test/Analysis/ScalarEvolution/trip-count9.ll
+index c0a1d12fa00e..9a080b34743f 100644
+--- a/llvm/test/Analysis/ScalarEvolution/trip-count9.ll
++++ b/llvm/test/Analysis/ScalarEvolution/trip-count9.ll
+@@ -179,7 +179,7 @@ exit:
+ }
+ 
+ ; CHECK: Determining loop execution counts for: @nsw_startx
+-; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x)<nsw> smax %n))
++; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax %n))
+ ; CHECK: Loop %loop: max backedge-taken count is -1
+ define void @nsw_startx(i4 %n, i4 %x) {
+ entry:
+@@ -195,7 +195,7 @@ exit:
+ }
+ 
+ ; CHECK: Determining loop execution counts for: @nsw_startx_step2
+-; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x)<nsw> smax %n)) /u 2)
++; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax %n)) /u 2)
+ ; CHECK: Loop %loop: max backedge-taken count is 7
+ define void @nsw_startx_step2(i4 %n, i4 %x) {
+ entry:
+@@ -381,7 +381,7 @@ exit:
+ }
+ 
+ ; CHECK: Determining loop execution counts for: @even_nsw_startx
+-; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x)<nsw> smax (2 * %n)))
++; CHECK: Loop %loop: backedge-taken count is (-1 + (-1 * %x) + ((1 + %x) smax (2 * %n)))
+ ; CHECK: Loop %loop: max backedge-taken count is -2
+ define void @even_nsw_startx(i4 %n, i4 %x) {
+ entry:
+@@ -398,7 +398,7 @@ exit:
+ }
+ 
+ ; CHECK: Determining loop execution counts for: @even_nsw_startx_step2
+-; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x)<nsw> smax (2 * %n))) /u 2)
++; CHECK: Loop %loop: backedge-taken count is ((-1 + (-1 * %x) + ((2 + %x) smax (2 * %n))) /u 2)
+ ; CHECK: Loop %loop: max backedge-taken count is 7
+ define void @even_nsw_startx_step2(i4 %n, i4 %x) {
+ entry:
diff --git a/gnu/packages/patches/maven-enforcer-api-fix-old-dependencies.patch b/gnu/packages/patches/maven-enforcer-api-fix-old-dependencies.patch
new file mode 100644
index 0000000000..98a0c8a395
--- /dev/null
+++ b/gnu/packages/patches/maven-enforcer-api-fix-old-dependencies.patch
@@ -0,0 +1,177 @@
+From eccc46eaf7903a8e837813795498b12c078faaea Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Wed, 11 Mar 2020 21:53:32 +0100
+Subject: [PATCH] Fix old dependencies
+
+---
+ .../enforcer/AbstractBanDependencies.java     |  2 +-
+ .../enforcer/BanTransitiveDependencies.java   |  2 +-
+ .../enforcer/DependencyConvergence.java       | 17 ++++++++---------
+ .../enforcer/RequireUpperBoundDeps.java       | 19 +++++++++----------
+ .../enforcer/utils/DependencyVersionMap.java  |  6 +++---
+ 5 files changed, 22 insertions(+), 24 deletions(-)
+
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
+index 2888a61..2b944b7 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
+@@ -119,7 +119,7 @@ public abstract class AbstractBanDependencies
+         Set<Artifact> dependencies = null;
+         try
+         {
+-            DependencyNode node = graphBuilder.buildDependencyGraph( project, null );
++            DependencyNode node = graphBuilder.buildDependencyGraph( project.getProjectBuildingRequest(), null );
+             if ( searchTransitive )
+             {
+                 dependencies = ArtifactUtils.getAllDescendants( node );
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java
+index 6e1dcd4..1b964ba 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/BanTransitiveDependencies.java
+@@ -158,7 +158,7 @@ public class BanTransitiveDependencies
+         try
+         {
+             MavenProject project = (MavenProject) helper.evaluate( "${project}" );
+-            rootNode = createDependencyGraphBuilder().buildDependencyGraph( project, null );
++            rootNode = createDependencyGraphBuilder().buildDependencyGraph( project.getProjectBuildingRequest(), null );
+         }
+         catch ( Exception e )
+         {
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
+index 684f984..ca7ad3a 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
+@@ -35,9 +35,9 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+ import org.apache.maven.plugin.logging.Log;
+ import org.apache.maven.plugins.enforcer.utils.DependencyVersionMap;
+ import org.apache.maven.project.MavenProject;
+-import org.apache.maven.shared.dependency.tree.DependencyNode;
+-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
+-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
++import org.apache.maven.shared.dependency.graph.DependencyNode;
++import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
++import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
+ import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+ import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+ 
+@@ -60,7 +60,7 @@ public class DependencyConvergence
+     // CHECKSTYLE_OFF: LineLength
+     /**
+      * Uses the {@link EnforcerRuleHelper} to populate the values of the
+-     * {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
++     * {@link DependencyGraphBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
+      * factory method. <br/>
+      * This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do.
+      * 
+@@ -75,16 +75,15 @@ public class DependencyConvergence
+         try
+         {
+             MavenProject project = (MavenProject) helper.evaluate( "${project}" );
+-            DependencyTreeBuilder dependencyTreeBuilder =
+-                (DependencyTreeBuilder) helper.getComponent( DependencyTreeBuilder.class );
++            DependencyGraphBuilder dependencyTreeBuilder =
++                (DependencyGraphBuilder) helper.getComponent( DependencyGraphBuilder.class );
+             ArtifactRepository repository = (ArtifactRepository) helper.evaluate( "${localRepository}" );
+             ArtifactFactory factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class );
+             ArtifactMetadataSource metadataSource =
+                 (ArtifactMetadataSource) helper.getComponent( ArtifactMetadataSource.class );
+             ArtifactCollector collector = (ArtifactCollector) helper.getComponent( ArtifactCollector.class );
+             ArtifactFilter filter = null; // we need to evaluate all scopes
+-            DependencyNode node = dependencyTreeBuilder.buildDependencyTree( project, repository, factory,
+-                                                                             metadataSource, filter, collector );
++            DependencyNode node = dependencyTreeBuilder.buildDependencyGraph( project.getProjectBuildingRequest(), filter);
+             return node;
+         }
+         catch ( ExpressionEvaluationException e )
+@@ -95,7 +94,7 @@ public class DependencyConvergence
+         {
+             throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e );
+         }
+-        catch ( DependencyTreeBuilderException e )
++        catch ( DependencyGraphBuilderException e )
+         {
+             throw new EnforcerRuleException( "Could not build dependency tree " + e.getLocalizedMessage(), e );
+         }
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java
+index 458554a..2de9870 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireUpperBoundDeps.java
+@@ -38,10 +38,10 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+ import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+ import org.apache.maven.plugin.logging.Log;
+ import org.apache.maven.project.MavenProject;
+-import org.apache.maven.shared.dependency.tree.DependencyNode;
+-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
+-import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
+-import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
++import org.apache.maven.shared.dependency.graph.DependencyNode;
++import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
++import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
++import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
+ import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+ import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+ 
+@@ -91,7 +91,7 @@ public class RequireUpperBoundDeps
+     // CHECKSTYLE_OFF: LineLength
+     /**
+      * Uses the {@link EnforcerRuleHelper} to populate the values of the
+-     * {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
++     * {@link DependencyGraphBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
+      * factory method. <br/>
+      * This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do.
+      * 
+@@ -106,8 +106,8 @@ public class RequireUpperBoundDeps
+         try
+         {
+             MavenProject project = (MavenProject) helper.evaluate( "${project}" );
+-            DependencyTreeBuilder dependencyTreeBuilder =
+-                (DependencyTreeBuilder) helper.getComponent( DependencyTreeBuilder.class );
++            DependencyGraphBuilder dependencyTreeBuilder =
++                (DependencyGraphBuilder) helper.getComponent( DependencyGraphBuilder.class );
+             ArtifactRepository repository = (ArtifactRepository) helper.evaluate( "${localRepository}" );
+             ArtifactFactory factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class );
+             ArtifactMetadataSource metadataSource =
+@@ -115,8 +115,7 @@ public class RequireUpperBoundDeps
+             ArtifactCollector collector = (ArtifactCollector) helper.getComponent( ArtifactCollector.class );
+             ArtifactFilter filter = null; // we need to evaluate all scopes
+             DependencyNode node =
+-                dependencyTreeBuilder.buildDependencyTree( project, repository, factory, metadataSource, filter,
+-                                                           collector );
++                dependencyTreeBuilder.buildDependencyGraph( project.getProjectBuildingRequest(), filter);
+             return node;
+         }
+         catch ( ExpressionEvaluationException e )
+@@ -127,7 +126,7 @@ public class RequireUpperBoundDeps
+         {
+             throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e );
+         }
+-        catch ( DependencyTreeBuilderException e )
++        catch ( DependencyGraphBuilderException e )
+         {
+             throw new EnforcerRuleException( "Could not build dependency tree " + e.getLocalizedMessage(), e );
+         }
+diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
+index b6213fa..2c2a645 100644
+--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
++++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/DependencyVersionMap.java
+@@ -26,8 +26,8 @@ import java.util.Map;
+ 
+ import org.apache.maven.artifact.Artifact;
+ import org.apache.maven.plugin.logging.Log;
+-import org.apache.maven.shared.dependency.tree.DependencyNode;
+-import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
++import org.apache.maven.shared.dependency.graph.DependencyNode;
++import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
+ 
+ /**
+  * @author Brian Fox
+@@ -132,4 +132,4 @@ public class DependencyVersionMap
+         }
+         return output;
+     }
+-}
+\ No newline at end of file
++}
+-- 
+2.24.1
+
diff --git a/gnu/packages/patches/opendht-fix-jami.patch b/gnu/packages/patches/opendht-fix-jami.patch
new file mode 100644
index 0000000000..9718a84a41
--- /dev/null
+++ b/gnu/packages/patches/opendht-fix-jami.patch
@@ -0,0 +1,33 @@
+From e2b39dd3a0742853e00f9c3e8c46c911da20bed7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
+Date: Tue, 30 Jun 2020 10:42:49 -0400
+Subject: [PATCH 1/4] http/request: make terminate public
+
+---
+ include/opendht/http.h | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/include/opendht/http.h b/include/opendht/http.h
+index cc8d5f9..46b722c 100644
+--- a/include/opendht/http.h
++++ b/include/opendht/http.h
+@@ -294,6 +294,7 @@ public:
+      * User action to cancel the Request and call the completion callbacks.
+      */
+     void cancel();
++    void terminate(const asio::error_code& ec);
+ 
+ private:
+     using OnCompleteCb = std::function<void()>;
+@@ -320,8 +321,6 @@ private:
+ 
+     void connect(std::vector<asio::ip::tcp::endpoint>&& endpoints, HandlerCb cb = {});
+ 
+-    void terminate(const asio::error_code& ec);
+-
+     void post();
+ 
+     void handle_request(const asio::error_code& ec);
+-- 
+2.27.0
+
diff --git a/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
new file mode 100644
index 0000000000..9503ab6f31
--- /dev/null
+++ b/gnu/packages/patches/ppsspp-disable-upgrade-and-gold.patch
@@ -0,0 +1,358 @@
+From 951f2269f67d618d376656db831796c119f4f6b3 Mon Sep 17 00:00:00 2001
+From: Leo Prikler <leo.prikler@student.tugraz.at>
+Date: Fri, 26 Jun 2020 18:20:04 +0200
+Subject: [PATCH] ppsspp: disable upgrade and gold
+
+---
+ Core/Config.cpp             | 11 -------
+ Core/Config.h               |  2 --
+ Qt/QtMain.cpp               |  6 ----
+ SDL/SDLMain.cpp             |  6 ----
+ UI/DevScreens.cpp           |  3 --
+ UI/GameSettingsScreen.cpp   |  1 -
+ UI/MainScreen.cpp           | 63 +------------------------------------
+ UI/MiscScreens.cpp          | 31 ++----------------
+ UWP/PPSSPP_UWPMain.cpp      |  6 ----
+ Windows/MainWindowMenu.cpp  |  2 +-
+ Windows/main.cpp            |  6 ----
+ android/jni/app-android.cpp |  6 ----
+ 12 files changed, 5 insertions(+), 138 deletions(-)
+
+diff --git a/Core/Config.cpp b/Core/Config.cpp
+index 214aeb433..04e3b151d 100644
+--- a/Core/Config.cpp
++++ b/Core/Config.cpp
+@@ -428,7 +428,6 @@ static ConfigSetting generalSettings[] = {
+ 	ConfigSetting("IgnoreBadMemAccess", &g_Config.bIgnoreBadMemAccess, true, true),
+ 	ConfigSetting("CurrentDirectory", &g_Config.currentDirectory, ""),
+ 	ConfigSetting("ShowDebuggerOnLoad", &g_Config.bShowDebuggerOnLoad, false),
+-	ConfigSetting("CheckForNewVersion", &g_Config.bCheckForNewVersion, true),
+ 	ConfigSetting("Language", &g_Config.sLanguageIni, &DefaultLangRegion),
+ 	ConfigSetting("ForceLagSync2", &g_Config.bForceLagSync, false, true, true),
+ 	ConfigSetting("DiscordPresence", &g_Config.bDiscordPresence, true, true, false),  // Or maybe it makes sense to have it per-game? Race conditions abound...
+@@ -1229,16 +1228,6 @@ void Config::Load(const char *iniFileName, const char *controllerIniFilename) {
+ 		upgradeMessage = "";
+ 	}
+ 
+-	// Check for new version on every 10 runs.
+-	// Sometimes the download may not be finished when the main screen shows (if the user dismisses the
+-	// splash screen quickly), but then we'll just show the notification next time instead, we store the
+-	// upgrade number in the ini.
+-	if (iRunCount % 10 == 0 && bCheckForNewVersion) {
+-		std::shared_ptr<http::Download> dl = g_DownloadManager.StartDownloadWithCallback(
+-			"http://www.ppsspp.org/version.json", "", &DownloadCompletedCallback);
+-		dl->SetHidden(true);
+-	}
+-
+ 	INFO_LOG(LOADER, "Loading controller config: %s", controllerIniFilename_.c_str());
+ 	bSaveSettings = true;
+ 
+diff --git a/Core/Config.h b/Core/Config.h
+index 084eacc94..e7134cab5 100644
+--- a/Core/Config.h
++++ b/Core/Config.h
+@@ -99,7 +99,6 @@ struct Config {
+ 	bool bIgnoreBadMemAccess;
+ 	bool bFastMemory;
+ 	int iCpuCore;
+-	bool bCheckForNewVersion;
+ 	bool bForceLagSync;
+ 	bool bFuncReplacements;
+ 	bool bHideSlowWarnings;
+@@ -521,4 +520,3 @@ std::string CreateRandMAC();
+ // TODO: Find a better place for this.
+ extern http::Downloader g_DownloadManager;
+ extern Config g_Config;
+-
+diff --git a/Qt/QtMain.cpp b/Qt/QtMain.cpp
+index 7713b6587..1d92d1175 100644
+--- a/Qt/QtMain.cpp
++++ b/Qt/QtMain.cpp
+@@ -194,12 +194,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ 		return true;
+ 	case SYSPROP_HAS_FILE_BROWSER:
+ 		return true;
+-	case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+-		return true;
+-#else
+-		return false;
+-#endif
+ 	default:
+ 		return false;
+ 	}
+diff --git a/SDL/SDLMain.cpp b/SDL/SDLMain.cpp
+index 52028d087..d8697d210 100644
+--- a/SDL/SDLMain.cpp
++++ b/SDL/SDLMain.cpp
+@@ -356,12 +356,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ 	switch (prop) {
+ 	case SYSPROP_HAS_BACK_BUTTON:
+ 		return true;
+-	case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+-		return true;
+-#else
+-		return false;
+-#endif
+ 	default:
+ 		return false;
+ 	}
+diff --git a/UI/DevScreens.cpp b/UI/DevScreens.cpp
+index f146d099e..625ee124c 100644
+--- a/UI/DevScreens.cpp
++++ b/UI/DevScreens.cpp
+@@ -603,9 +603,6 @@ void SystemInfoScreen::CreateViews() {
+ #ifdef _M_SSE
+ 	buildConfig->Add(new InfoItem("_M_SSE", StringFromFormat("0x%x", _M_SSE)));
+ #endif
+-	if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+-		buildConfig->Add(new InfoItem("GOLD", ""));
+-	}
+ 
+ 	ViewGroup *cpuExtensionsScroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT));
+ 	cpuExtensionsScroll->SetTag("DevSystemInfoCPUExt");
+diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp
+index 8202870c7..81112f822 100644
+--- a/UI/GameSettingsScreen.cpp
++++ b/UI/GameSettingsScreen.cpp
+@@ -796,7 +796,6 @@ void GameSettingsScreen::CreateViews() {
+ 	}
+ #endif
+ 
+-	systemSettings->Add(new CheckBox(&g_Config.bCheckForNewVersion, sy->T("VersionCheck", "Check for new versions of PPSSPP")));
+ 	const std::string bgPng = GetSysDirectory(DIRECTORY_SYSTEM) + "background.png";
+ 	const std::string bgJpg = GetSysDirectory(DIRECTORY_SYSTEM) + "background.jpg";
+ 	if (File::Exists(bgPng) || File::Exists(bgJpg)) {
+diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp
+index 43535913d..36834020d 100644
+--- a/UI/MainScreen.cpp
++++ b/UI/MainScreen.cpp
+@@ -1054,11 +1054,7 @@ void MainScreen::CreateViews() {
+ 	sprintf(versionString, "%s", PPSSPP_GIT_VERSION);
+ 	rightColumnItems->SetSpacing(0.0f);
+ 	LinearLayout *logos = new LinearLayout(ORIENT_HORIZONTAL);
+-	if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+-		logos->Add(new ImageView(ImageID("I_ICONGOLD"), IS_DEFAULT, new AnchorLayoutParams(64, 64, 10, 10, NONE, NONE, false)));
+-	} else {
+-		logos->Add(new ImageView(ImageID("I_ICON"), IS_DEFAULT, new AnchorLayoutParams(64, 64, 10, 10, NONE, NONE, false)));
+-	}
++	logos->Add(new ImageView(ImageID("I_ICON"), IS_DEFAULT, new AnchorLayoutParams(64, 64, 10, 10, NONE, NONE, false)));
+ 	logos->Add(new ImageView(ImageID("I_LOGO"), IS_DEFAULT, new LinearLayoutParams(Margins(-12, 0, 0, 0))));
+ 	rightColumnItems->Add(logos);
+ 	TextView *ver = rightColumnItems->Add(new TextView(versionString, new LinearLayoutParams(Margins(70, -6, 0, 0))));
+@@ -1070,11 +1066,6 @@ void MainScreen::CreateViews() {
+ 	rightColumnItems->Add(new Choice(mm->T("Game Settings", "Settings")))->OnClick.Handle(this, &MainScreen::OnGameSettings);
+ 	rightColumnItems->Add(new Choice(mm->T("Credits")))->OnClick.Handle(this, &MainScreen::OnCredits);
+ 	rightColumnItems->Add(new Choice(mm->T("www.ppsspp.org")))->OnClick.Handle(this, &MainScreen::OnPPSSPPOrg);
+-	if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+-		Choice *gold = rightColumnItems->Add(new Choice(mm->T("Buy PPSSPP Gold")));
+-		gold->OnClick.Handle(this, &MainScreen::OnSupport);
+-		gold->SetIcon(ImageID("I_ICONGOLD"));
+-	}
+ 
+ #if !PPSSPP_PLATFORM(UWP)
+ 	// Having an exit button is against UWP guidelines.
+@@ -1099,28 +1090,6 @@ void MainScreen::CreateViews() {
+ 	} else if (tabHolder_->GetVisibility() != V_GONE) {
+ 		root_->SetDefaultFocusView(tabHolder_);
+ 	}
+-
+-	auto u = GetI18NCategory("Upgrade");
+-
+-	upgradeBar_ = 0;
+-	if (!g_Config.upgradeMessage.empty()) {
+-		upgradeBar_ = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT));
+-
+-		UI::Margins textMargins(10, 5);
+-		UI::Margins buttonMargins(0, 0);
+-		UI::Drawable solid(0xFFbd9939);
+-		upgradeBar_->SetBG(solid);
+-		upgradeBar_->Add(new TextView(u->T("New version of PPSSPP available") + std::string(": ") + g_Config.upgradeVersion, new LinearLayoutParams(1.0f, textMargins)));
+-		upgradeBar_->Add(new Button(u->T("Download"), new LinearLayoutParams(buttonMargins)))->OnClick.Handle(this, &MainScreen::OnDownloadUpgrade);
+-		upgradeBar_->Add(new Button(u->T("Dismiss"), new LinearLayoutParams(buttonMargins)))->OnClick.Handle(this, &MainScreen::OnDismissUpgrade);
+-
+-		// Slip in under root_
+-		LinearLayout *newRoot = new LinearLayout(ORIENT_VERTICAL);
+-		newRoot->Add(root_);
+-		newRoot->Add(upgradeBar_);
+-		root_->ReplaceLayoutParams(new LinearLayoutParams(1.0));
+-		root_ = newRoot;
+-	}
+ }
+ 
+ UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
+@@ -1128,27 +1097,6 @@ UI::EventReturn MainScreen::OnAllowStorage(UI::EventParams &e) {
+ 	return UI::EVENT_DONE;
+ }
+ 
+-UI::EventReturn MainScreen::OnDownloadUpgrade(UI::EventParams &e) {
+-#if PPSSPP_PLATFORM(ANDROID)
+-	// Go to app store
+-	if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+-		LaunchBrowser("market://details?id=org.ppsspp.ppssppgold");
+-	} else {
+-		LaunchBrowser("market://details?id=org.ppsspp.ppsspp");
+-	}
+-#else
+-	// Go directly to ppsspp.org and let the user sort it out
+-	LaunchBrowser("https://www.ppsspp.org/downloads.html");
+-#endif
+-	return UI::EVENT_DONE;
+-}
+-
+-UI::EventReturn MainScreen::OnDismissUpgrade(UI::EventParams &e) {
+-	g_Config.DismissUpgrade();
+-	upgradeBar_->SetVisibility(UI::V_GONE);
+-	return UI::EVENT_DONE;
+-}
+-
+ void MainScreen::sendMessage(const char *message, const char *value) {
+ 	// Always call the base class method first to handle the most common messages.
+ 	UIScreenWithBackground::sendMessage(message, value);
+@@ -1319,15 +1267,6 @@ UI::EventReturn MainScreen::OnCredits(UI::EventParams &e) {
+ 	return UI::EVENT_DONE;
+ }
+ 
+-UI::EventReturn MainScreen::OnSupport(UI::EventParams &e) {
+-#ifdef __ANDROID__
+-	LaunchBrowser("market://details?id=org.ppsspp.ppssppgold");
+-#else
+-	LaunchBrowser("https://central.ppsspp.org/buygold");
+-#endif
+-	return UI::EVENT_DONE;
+-}
+-
+ UI::EventReturn MainScreen::OnPPSSPPOrg(UI::EventParams &e) {
+ 	LaunchBrowser("https://www.ppsspp.org");
+ 	return UI::EVENT_DONE;
+diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp
+index a6542c65d..f5f101594 100644
+--- a/UI/MiscScreens.cpp
++++ b/UI/MiscScreens.cpp
+@@ -498,11 +498,7 @@ void LogoScreen::render() {
+ 	char temp[256];
+ 	// Manually formatting UTF-8 is fun.  \xXX doesn't work everywhere.
+ 	snprintf(temp, sizeof(temp), "%s Henrik Rydg%c%crd", cr->T("created", "Created by"), 0xC3, 0xA5);
+-	if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+-		dc.Draw()->DrawImage(ImageID("I_ICONGOLD"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, textColor, ALIGN_CENTER);
+-	} else {
+-		dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, textColor, ALIGN_CENTER);
+-	}
++	dc.Draw()->DrawImage(ImageID("I_ICON"), bounds.centerX() - 120, bounds.centerY() - 30, 1.2f, textColor, ALIGN_CENTER);
+ 	dc.Draw()->DrawImage(ImageID("I_LOGO"), bounds.centerX() + 40, bounds.centerY() - 30, 1.5f, textColor, ALIGN_CENTER);
+ 	//dc.Draw()->DrawTextShadow(UBUNTU48, "PPSSPP", xres / 2, yres / 2 - 30, textColor, ALIGN_CENTER);
+ 	dc.SetFontScale(1.0f, 1.0f);
+@@ -538,10 +534,6 @@ void CreditsScreen::CreateViews() {
+ 	// Really need to redo this whole layout with some linear layouts...
+ 
+ 	int rightYOffset = 0;
+-	if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+-		root_->Add(new Button(cr->T("Buy Gold"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, 84, false)))->OnClick.Handle(this, &CreditsScreen::OnSupport);
+-		rightYOffset = 74;
+-	}
+ 	root_->Add(new Button(cr->T("PPSSPP Forums"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 158, false)))->OnClick.Handle(this, &CreditsScreen::OnForums);
+ 	root_->Add(new Button(cr->T("Discord"), new AnchorLayoutParams(260, 64, 10, NONE, NONE, 232, false)))->OnClick.Handle(this, &CreditsScreen::OnDiscord);
+ 	root_->Add(new Button("www.ppsspp.org", new AnchorLayoutParams(260, 64, 10, NONE, NONE, 10, false)))->OnClick.Handle(this, &CreditsScreen::OnPPSSPPOrg);
+@@ -550,20 +542,7 @@ void CreditsScreen::CreateViews() {
+ #if PPSSPP_PLATFORM(ANDROID) || PPSSPP_PLATFORM(IOS)
+ 	root_->Add(new Button(cr->T("Share PPSSPP"), new AnchorLayoutParams(260, 64, NONE, NONE, 10, rightYOffset + 158, false)))->OnClick.Handle(this, &CreditsScreen::OnShare);
+ #endif
+-	if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+-		root_->Add(new ImageView(ImageID("I_ICONGOLD"), IS_DEFAULT, new AnchorLayoutParams(100, 64, 10, 10, NONE, NONE, false)));
+-	} else {
+-		root_->Add(new ImageView(ImageID("I_ICON"), IS_DEFAULT, new AnchorLayoutParams(100, 64, 10, 10, NONE, NONE, false)));
+-	}
+-}
+-
+-UI::EventReturn CreditsScreen::OnSupport(UI::EventParams &e) {
+-#ifdef __ANDROID__
+-	LaunchBrowser("market://details?id=org.ppsspp.ppssppgold");
+-#else
+-	LaunchBrowser("https://central.ppsspp.org/buygold");
+-#endif
+-	return UI::EVENT_DONE;
++	root_->Add(new ImageView(ImageID("I_ICON"), IS_DEFAULT, new AnchorLayoutParams(100, 64, 10, 10, NONE, NONE, false)));
+ }
+ 
+ UI::EventReturn CreditsScreen::OnTwitter(UI::EventParams &e) {
+@@ -747,11 +726,7 @@ void CreditsScreen::render() {
+ 
+ 	// TODO: This is kinda ugly, done on every frame...
+ 	char temp[256];
+-	if (System_GetPropertyBool(SYSPROP_APP_GOLD)) {
+-		snprintf(temp, sizeof(temp), "PPSSPP Gold %s", PPSSPP_GIT_VERSION);
+-	} else {
+-		snprintf(temp, sizeof(temp), "PPSSPP %s", PPSSPP_GIT_VERSION);
+-	}
++	snprintf(temp, sizeof(temp), "PPSSPP %s", PPSSPP_GIT_VERSION);
+ 	credits[0] = (const char *)temp;
+ 
+ 	UIContext &dc = *screenManager()->getUIContext();
+diff --git a/UWP/PPSSPP_UWPMain.cpp b/UWP/PPSSPP_UWPMain.cpp
+index 24f3b964d..1d66ba7ee 100644
+--- a/UWP/PPSSPP_UWPMain.cpp
++++ b/UWP/PPSSPP_UWPMain.cpp
+@@ -399,12 +399,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ 		return false;
+ 	case SYSPROP_HAS_BACK_BUTTON:
+ 		return true;
+-	case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+-		return true;
+-#else
+-		return false;
+-#endif
+ 	default:
+ 		return false;
+ 	}
+diff --git a/Windows/MainWindowMenu.cpp b/Windows/MainWindowMenu.cpp
+index b5e1bb0eb..71b29b48a 100644
+--- a/Windows/MainWindowMenu.cpp
++++ b/Windows/MainWindowMenu.cpp
+@@ -1377,7 +1377,7 @@ namespace MainWindow {
+ 		{
+ 			W32Util::CenterWindow(hDlg);
+ 			HWND versionBox = GetDlgItem(hDlg, IDC_VERSION);
+-			std::string windowText = System_GetPropertyBool(SYSPROP_APP_GOLD) ? "PPSSPP Gold " : "PPSSPP ";
++			std::string windowText = "PPSSPP ";
+ 			windowText.append(PPSSPP_GIT_VERSION);
+ 			SetWindowText(versionBox, ConvertUTF8ToWString(windowText).c_str());
+ 		}
+diff --git a/Windows/main.cpp b/Windows/main.cpp
+index 3795597e2..fd98d0453 100644
+--- a/Windows/main.cpp
++++ b/Windows/main.cpp
+@@ -268,12 +268,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ 		return true;
+ 	case SYSPROP_HAS_BACK_BUTTON:
+ 		return true;
+-	case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+-		return true;
+-#else
+-		return false;
+-#endif
+ 	default:
+ 		return false;
+ 	}
+diff --git a/android/jni/app-android.cpp b/android/jni/app-android.cpp
+index 086371085..0a340c0ae 100644
+--- a/android/jni/app-android.cpp
++++ b/android/jni/app-android.cpp
+@@ -372,12 +372,6 @@ bool System_GetPropertyBool(SystemProperty prop) {
+ 		return true;
+ 	case SYSPROP_HAS_IMAGE_BROWSER:
+ 		return true;
+-	case SYSPROP_APP_GOLD:
+-#ifdef GOLD
+-		return true;
+-#else
+-		return false;
+-#endif
+ 	default:
+ 		return false;
+ 	}
+-- 
+2.26.2
+
diff --git a/gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch b/gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch
new file mode 100644
index 0000000000..ebeef34720
--- /dev/null
+++ b/gnu/packages/patches/python-aionotify-0.2.0-py3.8.patch
@@ -0,0 +1,48 @@
+Compatibility with Python 3.8, see upstream issue
+https://github.com/rbarrois/aionotify/pull/15
+
+diff --git a/setup.py b/setup.py
+index 21a554f..094de64 100755
+--- a/setup.py
++++ b/setup.py
+@@ -40,7 +40,7 @@ setup(
+     setup_requires=[
+     ],
+     tests_require=[
+-        'asynctest',
++        'asynctest; python_version<"3.8"',
+     ],
+     classifiers=[
+         "Development Status :: 4 - Beta",
+diff --git a/tests/test_usage.py b/tests/test_usage.py
+index f156291..0476ff1 100644
+--- a/tests/test_usage.py
++++ b/tests/test_usage.py
+@@ -8,7 +8,11 @@ import os.path
+ import tempfile
+ import unittest
+ 
+-import asynctest
++try:
++    testBase = unittest.IsolatedAsyncioTestCase
++except AttributeError:
++    import asynctest
++    testBase = asynctest.TestCase
+ 
+ import aionotify
+ 
+@@ -25,11 +29,13 @@ if AIODEBUG:
+ TESTDIR = os.environ.get('AIOTESTDIR') or os.path.join(os.path.dirname(__file__), 'testevents')
+ 
+ 
+-class AIONotifyTestCase(asynctest.TestCase):
++class AIONotifyTestCase(testBase):
+     forbid_get_event_loop = True
+     timeout = 3
+ 
+     def setUp(self):
++        if not getattr (self, 'loop', None):
++            self.loop = asyncio.get_event_loop()
+         if AIODEBUG:
+             self.loop.set_debug(True)
+         self.watcher = aionotify.Watcher()
diff --git a/gnu/packages/patches/python-tinycss2-flake8-compat.patch b/gnu/packages/patches/python-tinycss2-flake8-compat.patch
new file mode 100644
index 0000000000..a66eb42fa1
--- /dev/null
+++ b/gnu/packages/patches/python-tinycss2-flake8-compat.patch
@@ -0,0 +1,36 @@
+Fix test failure that occurs with recent versions of Flake8.
+
+Taken from upstream:
+https://github.com/Kozea/tinycss2/commit/6556604fb98c2153412384d6f0f705db2da1aa60
+
+diff --git a/tinycss2/css-parsing-tests/make_color3_hsl.py b/tinycss2/css-parsing-tests/make_color3_hsl.py
+index d1fd3a6..56fda0c 100644
+--- a/tinycss2/css-parsing-tests/make_color3_hsl.py
++++ b/tinycss2/css-parsing-tests/make_color3_hsl.py
+@@ -8,16 +8,17 @@ def trim(s):
+ print('[')
+ print(',\n'.join(
+     '"hsl%s(%s, %s%%, %s%%%s)", [%s, %s, %s, %s]' % (
+-        ('a' if a is not None else '', h,
+-         trim(str(s / 10.)), trim(str(l / 10.)),
+-         ', %s' % a if a is not None else '') +
++        ('a' if alpha is not None else '', hue,
++         trim(str(saturation / 10.)), trim(str(light / 10.)),
++         ', %s' % alpha if alpha is not None else '') +
+         tuple(trim(str(round(v, 10)))
+-              for v in colorsys.hls_to_rgb(h / 360., l / 1000., s / 1000.)) +
+-        (a if a is not None else 1,)
++              for v in colorsys.hls_to_rgb(
++                hue / 360., light / 1000., saturation / 1000.)) +
++        (alpha if alpha is not None else 1,)
+     )
+-    for a in [None, 1, .2, 0]
+-    for l in range(0, 1001, 125)
+-    for s in range(0, 1001, 125)
+-    for h in range(0, 360, 30)
++    for alpha in [None, 1, .2, 0]
++    for light in range(0, 1001, 125)
++    for saturation in range(0, 1001, 125)
++    for hue in range(0, 360, 30)
+ ))
+ print(']')
diff --git a/gnu/packages/patches/qtbase-absolute-runpath.patch b/gnu/packages/patches/qtbase-absolute-runpath.patch
new file mode 100644
index 0000000000..cec4ddc0a3
--- /dev/null
+++ b/gnu/packages/patches/qtbase-absolute-runpath.patch
@@ -0,0 +1,17 @@
+Do not use $ORIGIN in RUNPATH so that executables can be copied elsewhere and
+still be expected to work (needed for python-pyside-2-tools).
+
+diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf
+--- a/mkspecs/common/linux.conf
++++ b/mkspecs/common/linux.conf
+@@ -10,8 +10,8 @@ QMAKE_CFLAGS_THREAD    += -D_REENTRANT
+ QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD
+ QMAKE_LFLAGS_GCSECTIONS = -Wl,--gc-sections
+ 
+-QMAKE_LFLAGS_REL_RPATH  = -Wl,-z,origin
+-QMAKE_REL_RPATH_BASE    = $ORIGIN
++QMAKE_LFLAGS_REL_RPATH  =
++QMAKE_REL_RPATH_BASE    =
+ 
+ QMAKE_INCDIR            =
+ QMAKE_LIBDIR            =
diff --git a/gnu/packages/patches/ruby-rubocop-break-dependency-cycle.patch b/gnu/packages/patches/ruby-rubocop-break-dependency-cycle.patch
new file mode 100644
index 0000000000..035a98fa33
--- /dev/null
+++ b/gnu/packages/patches/ruby-rubocop-break-dependency-cycle.patch
@@ -0,0 +1,101 @@
+From ff3f00b7f33332ebf1c3c05abc4a781684775b3c Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Tue, 14 Jul 2020 11:50:12 -0400
+Subject: [PATCH] config: Drop rubocop-performance, rubocop-rspec requirements.
+
+This patch removes Rubocop extensions from Rubocop's closure to break
+a dependency cycle with itself.
+
+* .rubocop.yml: Remove rubocop-performance and rubocop-rspec and their
+corresponding directives.
+* .rubocop_todo.yml: Likewise.
+---
+ .rubocop.yml      | 15 ---------------
+ .rubocop_todo.yml | 44 --------------------------------------------
+ 2 files changed, 59 deletions(-)
+
+diff --git a/.rubocop.yml b/.rubocop.yml
+index 4f05d5be2..f12ef7c06 100644
+--- a/.rubocop.yml
++++ b/.rubocop.yml
+@@ -3,8 +3,6 @@
+ inherit_from: .rubocop_todo.yml
+ require:
+   - rubocop/cop/internal_affairs
+-  - rubocop-performance
+-  - rubocop-rspec
+ 
+ AllCops:
+   NewCops: enable
+@@ -106,16 +104,3 @@ Metrics/ClassLength:
+ Metrics/ModuleLength:
+   Exclude:
+     - 'spec/**/*.rb'
+-
+-RSpec/FilePath:
+-  Exclude:
+-    - spec/rubocop/formatter/junit_formatter_spec.rb
+-
+-RSpec/PredicateMatcher:
+-  EnforcedStyle: explicit
+-
+-RSpec/MessageSpies:
+-  EnforcedStyle: receive
+-
+-RSpec/NestedGroups:
+-  Max: 7
+diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
+index 3f72042d1..fa637cd42 100644
+--- a/.rubocop_todo.yml
++++ b/.rubocop_todo.yml
+@@ -24,47 +24,3 @@ Metrics/MethodLength:
+ # Configuration parameters: CountComments.
+ Metrics/ModuleLength:
+   Max: 132
+-
+-# Offense count: 10
+-RSpec/AnyInstance:
+-  Exclude:
+-    - 'spec/rubocop/cli_spec.rb'
+-    - 'spec/rubocop/cop/lint/duplicate_methods_spec.rb'
+-    - 'spec/rubocop/cop/team_spec.rb'
+-    - 'spec/rubocop/target_finder_spec.rb'
+-
+-# Offense count: 981
+-# Configuration parameters: Prefixes.
+-# Prefixes: when, with, without
+-RSpec/ContextWording:
+-  Enabled: false
+-
+-# Offense count: 3810
+-# Configuration parameters: Max.
+-RSpec/ExampleLength:
+-  Enabled: false
+-
+-# Offense count: 38
+-RSpec/ExpectOutput:
+-  Exclude:
+-    - 'spec/rubocop/cli/cli_auto_gen_config_spec.rb'
+-    - 'spec/rubocop/cli/cli_options_spec.rb'
+-    - 'spec/rubocop/config_spec.rb'
+-    - 'spec/rubocop/cop/cop_spec.rb'
+-    - 'spec/rubocop/formatter/disabled_config_formatter_spec.rb'
+-    - 'spec/rubocop/formatter/formatter_set_spec.rb'
+-    - 'spec/rubocop/options_spec.rb'
+-    - 'spec/rubocop/rake_task_spec.rb'
+-    - 'spec/rubocop/result_cache_spec.rb'
+-    - 'spec/rubocop/target_finder_spec.rb'
+-
+-# Offense count: 434
+-RSpec/MultipleExpectations:
+-  Max: 25
+-
+-# Offense count: 5
+-RSpec/SubjectStub:
+-  Exclude:
+-    - 'spec/rubocop/config_spec.rb'
+-    - 'spec/rubocop/formatter/json_formatter_spec.rb'
+-    - 'spec/rubocop/formatter/progress_formatter_spec.rb'
+-- 
+2.27.0
+
diff --git a/gnu/packages/patches/rust-1.45-linker-locale.patch b/gnu/packages/patches/rust-1.45-linker-locale.patch
new file mode 100644
index 0000000000..40220e8e77
--- /dev/null
+++ b/gnu/packages/patches/rust-1.45-linker-locale.patch
@@ -0,0 +1,14 @@
+Patch will be included upstream in 1.47: https://github.com/rust-lang/rust/pull/74416
+diff --git a/src/librustc_codegen_ssa/back/linker.rs b/src/librustc_codegen_ssa/back/linker.rs
+index e64aafa599f..12575ac4358 100644
+--- a/src/librustc_codegen_ssa/back/linker.rs
++++ b/src/librustc_codegen_ssa/back/linker.rs
+@@ -28,7 +28,7 @@ use rustc_target::spec::{LinkOutputKind, LinkerFlavor, LldFlavor};
+ pub fn disable_localization(linker: &mut Command) {
+     // No harm in setting both env vars simultaneously.
+     // Unix-style linkers.
+-    linker.env("LC_ALL", "C");
++    linker.env("LC_ALL", "en_US.UTF-8");
+     // MSVC's `link.exe`.
+     linker.env("VSLANG", "1033");
+ }
diff --git a/gnu/packages/patches/sqlite-hurd.patch b/gnu/packages/patches/sqlite-hurd.patch
new file mode 100644
index 0000000000..d80a2c5be8
--- /dev/null
+++ b/gnu/packages/patches/sqlite-hurd.patch
@@ -0,0 +1,58 @@
+Adapted from Debian: https://sources.debian.org/patches/sqlite3/3.32.3-1/20-hurd-locking-style.patch
+Upstream status: Not upstreamed.
+
+This patch is needed to get offloading to work.
+
+Sqlite can use simple file locking mode, but that does not work for the Hurd;
+a second sqlite process fails with a "locking protocol" error.
+
+See also: https://bugs.debian.org/529734.
+
+diff -purN sqlite-autoconf-3310100/sqlite3.c sqlite-autoconf-3310100-/sqlite3.c
+--- sqlite-autoconf-3310100/sqlite3.c	2020-01-27 21:25:19.000000000 +0100
++++ sqlite-autoconf-3310100-/sqlite3.c	2020-07-01 11:50:13.768333806 +0200
+@@ -33189,7 +33189,7 @@ SQLITE_PRIVATE const char *sqlite3Opcode
+ # include <sys/mman.h>
+ #endif
+ 
+-#if SQLITE_ENABLE_LOCKING_STYLE
++#if SQLITE_ENABLE_LOCKING_STYLE || defined(__GNU__)
+ /* # include <sys/ioctl.h> */
+ # include <sys/file.h>
+ # include <sys/param.h>
+@@ -35676,7 +35676,7 @@ static int dotlockClose(sqlite3_file *id
+ **
+ ** Omit this section if SQLITE_ENABLE_LOCKING_STYLE is turned off
+ */
+-#if SQLITE_ENABLE_LOCKING_STYLE
++#if SQLITE_ENABLE_LOCKING_STYLE || defined(__GNU__)
+ 
+ /*
+ ** Retry flock() calls that fail with EINTR
+@@ -38586,7 +38586,7 @@ IOMETHODS(
+   0                         /* xShmMap method */
+ )
+ 
+-#if SQLITE_ENABLE_LOCKING_STYLE
++#if SQLITE_ENABLE_LOCKING_STYLE || defined(__GNU__)
+ IOMETHODS(
+   flockIoFinder,            /* Finder function name */
+   flockIoMethods,           /* sqlite3_io_methods object name */
+@@ -41142,6 +41142,8 @@ SQLITE_API int sqlite3_os_init(void){
+     UNIXVFS("unix",          autolockIoFinder ),
+ #elif OS_VXWORKS
+     UNIXVFS("unix",          vxworksIoFinder ),
++#elif defined(__GNU__)
++    UNIXVFS("unix",          flockIoFinder ),
+ #else
+     UNIXVFS("unix",          posixIoFinder ),
+ #endif
+@@ -41151,7 +41153,7 @@ SQLITE_API int sqlite3_os_init(void){
+ #if OS_VXWORKS
+     UNIXVFS("unix-namedsem", semIoFinder ),
+ #endif
+-#if SQLITE_ENABLE_LOCKING_STYLE || OS_VXWORKS
++#if SQLITE_ENABLE_LOCKING_STYLE || OS_VXWORKS || defined(__GNU__)
+     UNIXVFS("unix-posix",    posixIoFinder ),
+ #endif
+ #if SQLITE_ENABLE_LOCKING_STYLE
diff --git a/gnu/packages/patches/sssd-fix-samba.patch b/gnu/packages/patches/sssd-fix-samba.patch
new file mode 100644
index 0000000000..714968337a
--- /dev/null
+++ b/gnu/packages/patches/sssd-fix-samba.patch
@@ -0,0 +1,50 @@
+From bc56b10aea999284458dcc293b54cf65288e325d Mon Sep 17 00:00:00 2001
+From: Stephen Gallagher <sgallagh@redhat.com>
+Date: Fri, 24 Jan 2020 15:17:39 +0100
+Subject: [PATCH] Fix build failure against samba 4.12.0rc1
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The ndr_pull_get_switch() function was dropped, but it was just a wrapper
+around the ndr_token_peek() function, so we can use this approach on both
+old and new versions of libndr.
+
+Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
+
+Reviewed-by: Pavel Březina <pbrezina@redhat.com>
+---
+ src/providers/ad/ad_gpo_ndr.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/providers/ad/ad_gpo_ndr.c b/src/providers/ad/ad_gpo_ndr.c
+index d573033494..8f405aa62b 100644
+--- a/src/providers/ad/ad_gpo_ndr.c
++++ b/src/providers/ad/ad_gpo_ndr.c
+@@ -105,7 +105,7 @@ ndr_pull_security_ace_object_type(struct ndr_pull *ndr,
+                                   union security_ace_object_type *r)
+ {
+     uint32_t level;
+-    level = ndr_pull_get_switch_value(ndr, r);
++    level = ndr_token_peek(&ndr->switch_list, r);
+     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+     if (ndr_flags & NDR_SCALARS) {
+         NDR_CHECK(ndr_pull_union_align(ndr, 4));
+@@ -135,7 +135,7 @@ ndr_pull_security_ace_object_inherited_type(struct ndr_pull *ndr,
+                                             union security_ace_object_inherited_type *r)
+ {
+     uint32_t level;
+-    level = ndr_pull_get_switch_value(ndr, r);
++    level = ndr_token_peek(&ndr->switch_list, r);
+     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+     if (ndr_flags & NDR_SCALARS) {
+         NDR_CHECK(ndr_pull_union_align(ndr, 4));
+@@ -198,7 +198,7 @@ ndr_pull_security_ace_object_ctr(struct ndr_pull *ndr,
+                                  union security_ace_object_ctr *r)
+ {
+     uint32_t level;
+-    level = ndr_pull_get_switch_value(ndr, r);
++    level = ndr_token_peek(&ndr->switch_list, r);
+     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
+     if (ndr_flags & NDR_SCALARS) {
+         NDR_CHECK(ndr_pull_union_align(ndr, 4));
diff --git a/gnu/packages/patches/tao-add-missing-headers.patch b/gnu/packages/patches/tao-add-missing-headers.patch
new file mode 100644
index 0000000000..f117281993
--- /dev/null
+++ b/gnu/packages/patches/tao-add-missing-headers.patch
@@ -0,0 +1,102 @@
+Taken from Debian:
+https://salsa.debian.org/multimedia-team/taopm/-/raw/master/debian/patches/01-add-missing-headers.diff
+
+Description: Adding missing headers
+Author: Tiago Bortoletto Vaz <tiago@debian.org>
+Last-Update: 2013-04-17
+--- a/libtao/Tao.cc
++++ b/libtao/Tao.cc
+@@ -18,6 +18,7 @@
+ 
+ #include "Tao.h"
+ #include <iostream>
++#include <stdio.h>
+ 
+ extern Tao tao;
+ float &Time = tao.synthesisEngine.time;
+--- a/libtao/TaoDevice.cc
++++ b/libtao/TaoDevice.cc
+@@ -20,6 +20,7 @@
+ #include "Tao.h"
+ #include "TaoAccessPoint.h"
+ #include "TaoInstrument.h"
++#include <cstring>
+ 
+ TaoDevice::TaoDevice()
+     {
+--- a/libtao/TaoInstrument.cc
++++ b/libtao/TaoInstrument.cc
+@@ -23,6 +23,7 @@
+ //#include <sys/types.h>
+ #include <iostream>
+ #include <cmath>
++#include <cstring>
+ 
+ float TaoInstrument::defaultMass=3.5;		// Set to optimum value for
+                                                 // frequency response of
+--- a/libtao/TaoOutput.cc
++++ b/libtao/TaoOutput.cc
+@@ -24,6 +24,7 @@
+ #include <fstream>
+ #include "TaoOutput.h"
+ #include "Tao.h"
++#include <cstring>
+ 
+ extern Tao tao;
+ 
+--- a/libtao/TaoPitch.cc
++++ b/libtao/TaoPitch.cc
+@@ -30,6 +30,7 @@
+ #include "TaoPitch.h"
+ #include <iostream>

+ #include <cmath>
++#include <cstring>
+ 
+ // This class allows pitches and frequencies to be specified in a number of
+ // different formats including the following:
+--- a/taoparse/taoparser.yy
++++ b/taoparse/taoparser.yy
+@@ -19,7 +19,8 @@
+ 
+ #include <iostream>
+ #include <sstream>
+-#include <string>
++#include <cstring>
++#include <stdio.h>
+ #include "taoparserdefs.h"
+ 
+ int yyerror(char *s);
+--- a/libtao/TaoGraphicsEngine.cc
++++ b/libtao/TaoGraphicsEngine.cc
+@@ -27,7 +27,8 @@
+ #include "TaoInstrument.h"
+ #include "TaoAccessPoint.h"
+ #include "TaoDevice.h"
+-#include <string>
++#include <cstring>
++#include <stdio.h>
+     
+ extern Tao tao;
+ extern void taoMasterTick();
+--- a/tao2aiff/tao2aiff.cc
++++ b/tao2aiff/tao2aiff.cc
+@@ -25,6 +25,8 @@
+ #include <cmath>
+ #include "audiofile.h"
+ #include "tao2aiff.h"
++#include <cstdlib>
++#include <cstring>
+ 
+ 
+ main(int argc, char **argv)
+--- a/tao2wav/tao2wav.cc
++++ b/tao2wav/tao2wav.cc
+@@ -25,6 +25,8 @@
+ #include <cmath>
+ #include "audiofile.h"
+ #include "tao2wav.h"
++#include <cstdlib>
++#include <cstring>
+ 
+ main(int argc, char **argv)
+     {
diff --git a/gnu/packages/patches/tao-fix-parser-types.patch b/gnu/packages/patches/tao-fix-parser-types.patch
new file mode 100644
index 0000000000..5dcf3fc2ea
--- /dev/null
+++ b/gnu/packages/patches/tao-fix-parser-types.patch
@@ -0,0 +1,26 @@
+Taken from Debian:
+https://salsa.debian.org/multimedia-team/taopm/-/raw/master/debian/patches/02-fix-parser-yyerror.diff
+
+Description: Use a constant char, dummy comment.
+Author: Tiago Bortoletto Vaz <tiago@debian.org>
+Last-Update: 2013-04-17
+--- a/taoparse/taoparser.yy
++++ b/taoparse/taoparser.yy
+@@ -23,7 +23,7 @@
+ #include <stdio.h>
+ #include "taoparserdefs.h"
+ 
+-int yyerror(char *s);
++int yyerror(const char *s);
+ 
+ //#ifdef LINUX
+ int yylex(void);
+@@ -2924,7 +2924,7 @@
+     } 
+ 
+ 
+-int yyerror (char *s)
++int yyerror (const char *s)
+     {
+     parse_error(what_I_expected_here);
+     std::cout << "PARSE_FAILED";
diff --git a/gnu/packages/patches/transmission-CVE-2018-10756.patch b/gnu/packages/patches/transmission-CVE-2018-10756.patch
deleted file mode 100644
index f9bdcf60aa..0000000000
--- a/gnu/packages/patches/transmission-CVE-2018-10756.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-Fix CVE-2018-10756:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-10756
-
-Patch copied from Fedora:
-
-https://src.fedoraproject.org/rpms/transmission/blob/master/f/2123adf8e5e1c2b48791f9d22fc8c747e974180e.patch
-
---- a/libtransmission/variant.c	2018-05-01 12:21:08.000000000 -0500
-+++ b/libtransmission/variant.c	2020-05-18 10:21:27.554214128 -0500
-@@ -820,7 +820,7 @@
- struct SaveNode
- {
-   const tr_variant * v;
--  tr_variant sorted;
-+  tr_variant* sorted;
-   size_t childIndex;
-   bool isVisited;
- };
-@@ -849,26 +849,33 @@
- 
-       qsort (tmp, n, sizeof (struct KeyIndex), compareKeyIndex);
- 
--      tr_variantInitDict (&node->sorted, n);
-+      node->sorted = tr_new(tr_variant, 1);
-+      tr_variantInitDict (node->sorted, n);
-       for (i=0; i<n; ++i)
--        node->sorted.val.l.vals[i] = *tmp[i].val;
-+        node->sorted->val.l.vals[i] = *tmp[i].val;
-       node->sorted.val.l.count = n;
- 
-       tr_free (tmp);
- 
--      node->v = &node->sorted;
-+      v = node->sorted;
-     }
-   else
-     {
--      node->v = v;
-+      node->sorted = NULL;
-     }
-+    
-+    node->v = v;
- }
- 
- static void
- nodeDestruct (struct SaveNode * node)
- {
--  if (node->v == &node->sorted)
--    tr_free (node->sorted.val.l.vals);
-+    //TR_ASSERT(node != NULL);
-+    if (node->sorted != NULL)
-+    {
-+        tr_free(node->sorted->val.l.vals);
-+        tr_free(node->sorted);    
-+    }
- }
- 
- /**
---- a/libtransmission/variant.c	2020-05-18 10:21:49.000000000 -0500
-+++ b/libtransmission/variant.c	2020-05-18 10:24:34.673648865 -0500
-@@ -853,7 +853,7 @@
-       tr_variantInitDict (node->sorted, n);
-       for (i=0; i<n; ++i)
-         node->sorted->val.l.vals[i] = *tmp[i].val;
--      node->sorted.val.l.count = n;
-+      node->sorted->val.l.count = n;
- 
-       tr_free (tmp);
- 
-
diff --git a/gnu/packages/patches/u-boot-DT-for-Pinebook-Pro.patch b/gnu/packages/patches/u-boot-DT-for-Pinebook-Pro.patch
deleted file mode 100644
index f88d12f1e2..0000000000
--- a/gnu/packages/patches/u-boot-DT-for-Pinebook-Pro.patch
+++ /dev/null
@@ -1,1132 +0,0 @@
-From b128c2e0b480ee992fabe554d19cd471efb11095 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:35 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-5-pbrobinson@gmail.com/
-Subject: [PATCH 4/5] arm: dts: rockchip: Add initial DT for Pinebook Pro
-
-Sync initial support for Pinebook Pro device tree from Linux 5.7-rc1.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
----
- arch/arm/dts/Makefile                |    1 +
- arch/arm/dts/rk3399-pinebook-pro.dts | 1096 ++++++++++++++++++++++++++
- 2 files changed, 1097 insertions(+)
- create mode 100644 arch/arm/dts/rk3399-pinebook-pro.dts
-
-diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
-index 820ee9733a..885bf0ef58 100644
---- a/arch/arm/dts/Makefile
-+++ b/arch/arm/dts/Makefile
-@@ -125,6 +125,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3399) += \
- 	rk3399-nanopi-m4.dtb \
- 	rk3399-nanopi-neo4.dtb \
- 	rk3399-orangepi.dtb \
-+	rk3399-pinebook-pro.dtb \
- 	rk3399-puma-ddr1333.dtb \
- 	rk3399-puma-ddr1600.dtb \
- 	rk3399-puma-ddr1866.dtb \
-diff --git a/arch/arm/dts/rk3399-pinebook-pro.dts b/arch/arm/dts/rk3399-pinebook-pro.dts
-new file mode 100644
-index 0000000000..294d21bf45
---- /dev/null
-+++ b/arch/arm/dts/rk3399-pinebook-pro.dts
-@@ -0,0 +1,1096 @@
-+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
-+/*
-+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd.
-+ * Copyright (c) 2018 Akash Gajjar <Akash_Gajjar@mentor.com>
-+ * Copyright (c) 2020 Tobias Schramm <t.schramm@manjaro.org>
-+ */
-+
-+/dts-v1/;
-+#include <dt-bindings/input/gpio-keys.h>
-+#include <dt-bindings/input/linux-event-codes.h>
-+#include <dt-bindings/pwm/pwm.h>
-+#include <dt-bindings/usb/pd.h>
-+#include <dt-bindings/leds/common.h>
-+#include "rk3399.dtsi"
-+#include "rk3399-opp.dtsi"
-+
-+/ {
-+	model = "Pine64 Pinebook Pro";
-+	compatible = "pine64,pinebook-pro", "rockchip,rk3399";
-+
-+	chosen {
-+		stdout-path = "serial2:1500000n8";
-+	};
-+
-+	backlight: edp-backlight {
-+		compatible = "pwm-backlight";
-+		power-supply = <&vcc_12v>;
-+		pwms = <&pwm0 0 740740 0>;
-+	};
-+
-+	edp_panel: edp-panel {
-+		compatible = "boe,nv140fhmn49";
-+		backlight = <&backlight>;
-+		enable-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&panel_en_gpio>;
-+		power-supply = <&vcc3v3_panel>;
-+
-+		ports {
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+
-+			port@0 {
-+				reg = <0>;
-+				#address-cells = <1>;
-+				#size-cells = <0>;
-+
-+				panel_in_edp: endpoint@0 {
-+					reg = <0>;
-+					remote-endpoint = <&edp_out_panel>;
-+				};
-+			};
-+		};
-+	};
-+
-+	/*
-+	 * Use separate nodes for gpio-keys to allow for selective deactivation
-+	 * of wakeup sources via sysfs without disabling the whole key
-+	 */
-+	gpio-key-lid {
-+		compatible = "gpio-keys";
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&lidbtn_gpio>;
-+
-+		lid {
-+			debounce-interval = <20>;
-+			gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_LOW>;
-+			label = "Lid";
-+			linux,code = <SW_LID>;
-+			linux,input-type = <EV_SW>;
-+			wakeup-event-action = <EV_ACT_DEASSERTED>;
-+			wakeup-source;
-+		};
-+	};
-+
-+	gpio-key-power {
-+		compatible = "gpio-keys";
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&pwrbtn_gpio>;
-+
-+		power {
-+			debounce-interval = <20>;
-+			gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
-+			label = "Power";
-+			linux,code = <KEY_POWER>;
-+			wakeup-source;
-+		};
-+	};
-+
-+	leds {
-+		compatible = "gpio-leds";
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&pwrled_gpio &slpled_gpio>;
-+
-+		green-led {
-+			color = <LED_COLOR_ID_GREEN>;
-+			default-state = "on";
-+			function = LED_FUNCTION_POWER;
-+			gpios = <&gpio0 RK_PB3 GPIO_ACTIVE_HIGH>;
-+			label = "green:power";
-+		};
-+
-+		red-led {
-+			color = <LED_COLOR_ID_RED>;
-+			default-state = "off";
-+			function = LED_FUNCTION_STANDBY;
-+			gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_HIGH>;
-+			label = "red:standby";
-+			panic-indicator;
-+			retain-state-suspended;
-+		};
-+	};
-+
-+	/* Power sequence for SDIO WiFi module */
-+	sdio_pwrseq: sdio-pwrseq {
-+		compatible = "mmc-pwrseq-simple";
-+		clocks = <&rk808 1>;
-+		clock-names = "ext_clock";
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&wifi_enable_h_gpio>;
-+		post-power-on-delay-ms = <100>;
-+		power-off-delay-us = <500000>;
-+
-+		/* WL_REG_ON on module */
-+		reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
-+	};
-+
-+	/* Audio components */
-+	es8316-sound {
-+		compatible = "simple-audio-card";
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&hp_det_gpio>;
-+		simple-audio-card,name = "rockchip,es8316-codec";
-+		simple-audio-card,format = "i2s";
-+		simple-audio-card,mclk-fs = <256>;
-+
-+		simple-audio-card,widgets =
-+			"Microphone", "Mic Jack",
-+			"Headphone", "Headphones",
-+			"Speaker", "Speaker";
-+		simple-audio-card,routing =
-+			"MIC1", "Mic Jack",
-+			"Headphones", "HPOL",
-+			"Headphones", "HPOR",
-+			"Speaker Amplifier INL", "HPOL",
-+			"Speaker Amplifier INR", "HPOR",
-+			"Speaker", "Speaker Amplifier OUTL",
-+			"Speaker", "Speaker Amplifier OUTR";
-+
-+		simple-audio-card,hp-det-gpio = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;
-+		simple-audio-card,aux-devs = <&speaker_amp>;
-+		simple-audio-card,pin-switches = "Speaker";
-+
-+		simple-audio-card,cpu {
-+			sound-dai = <&i2s1>;
-+		};
-+
-+		simple-audio-card,codec {
-+			sound-dai = <&es8316>;
-+		};
-+	};
-+
-+	speaker_amp: speaker-amplifier {
-+		compatible = "simple-audio-amplifier";
-+		enable-gpios = <&gpio4 RK_PD3 GPIO_ACTIVE_HIGH>;
-+		sound-name-prefix = "Speaker Amplifier";
-+		VCC-supply = <&pa_5v>;
-+	};
-+
-+	/* Power tree */
-+	/* Root power source */
-+	vcc_sysin: vcc-sysin {
-+		compatible = "regulator-fixed";
-+		regulator-name = "vcc_sysin";
-+		regulator-always-on;
-+		regulator-boot-on;
-+	};
-+
-+	/* Regulators supplied by vcc_sysin */
-+	/* LCD backlight supply */
-+	vcc_12v: vcc-12v {
-+		compatible = "regulator-fixed";
-+		regulator-name = "vcc_12v";
-+		regulator-always-on;
-+		regulator-boot-on;
-+		regulator-min-microvolt = <12000000>;
-+		regulator-max-microvolt = <12000000>;
-+		vin-supply = <&vcc_sysin>;
-+
-+		regulator-state-mem {
-+			regulator-off-in-suspend;
-+		};
-+	};
-+
-+	/* Main 3.3 V supply */
-+	vcc3v3_sys: wifi_bat: vcc3v3-sys {
-+		compatible = "regulator-fixed";
-+		regulator-name = "vcc3v3_sys";
-+		regulator-always-on;
-+		regulator-boot-on;
-+		regulator-min-microvolt = <3300000>;
-+		regulator-max-microvolt = <3300000>;
-+		vin-supply = <&vcc_sysin>;
-+
-+		regulator-state-mem {
-+			regulator-on-in-suspend;
-+		};
-+	};
-+
-+	/* 5 V USB power supply */
-+	vcc5v0_usb: pa_5v: vcc5v0-usb-regulator {
-+		compatible = "regulator-fixed";
-+		enable-active-high;
-+		gpio = <&gpio1 RK_PB5 GPIO_ACTIVE_HIGH>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&pwr_5v_gpio>;
-+		regulator-name = "vcc5v0_usb";
-+		regulator-always-on;
-+		regulator-min-microvolt = <5000000>;
-+		regulator-max-microvolt = <5000000>;
-+		vin-supply = <&vcc_sysin>;
-+
-+		regulator-state-mem {
-+			regulator-off-in-suspend;
-+		};
-+	};
-+
-+	/* RK3399 logic supply */
-+	vdd_log: vdd-log {
-+		compatible = "pwm-regulator";
-+		pwms = <&pwm2 0 25000 1>;
-+		regulator-name = "vdd_log";
-+		regulator-always-on;
-+		regulator-boot-on;
-+		regulator-min-microvolt = <800000>;
-+		regulator-max-microvolt = <1400000>;
-+		vin-supply = <&vcc_sysin>;
-+
-+		regulator-state-mem {
-+			regulator-on-in-suspend;
-+		};
-+	};
-+
-+	/* Regulators supplied by vcc3v3_sys */
-+	/* 0.9 V supply, always on */
-+	vcc_0v9: vcc-0v9 {
-+		compatible = "regulator-fixed";
-+		regulator-name = "vcc_0v9";
-+		regulator-always-on;
-+		regulator-boot-on;
-+		regulator-min-microvolt = <900000>;
-+		regulator-max-microvolt = <900000>;
-+		vin-supply = <&vcc3v3_sys>;
-+	};
-+
-+	/* S3 1.8 V supply, switched by vcc1v8_s3 */
-+	vcca1v8_s3: vcc1v8-s3 {
-+		compatible = "regulator-fixed";
-+		regulator-name = "vcca1v8_s3";
-+		regulator-always-on;
-+		regulator-boot-on;
-+		regulator-min-microvolt = <1800000>;
-+		regulator-max-microvolt = <1800000>;
-+		vin-supply = <&vcc3v3_sys>;
-+	};
-+
-+	/* micro SD card power */
-+	vcc3v0_sd: vcc3v0-sd {
-+		compatible = "regulator-fixed";
-+		enable-active-high;
-+		gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&sdmmc0_pwr_h_gpio>;
-+		regulator-name = "vcc3v0_sd";
-+		regulator-always-on;
-+		regulator-min-microvolt = <3000000>;
-+		regulator-max-microvolt = <3000000>;
-+		vin-supply = <&vcc3v3_sys>;
-+
-+		regulator-state-mem {
-+			regulator-off-in-suspend;
-+		};
-+	};
-+
-+	/* LCD panel power, called VCC3V3_S0 in schematic */
-+	vcc3v3_panel: vcc3v3-panel {
-+		compatible = "regulator-fixed";
-+		enable-active-high;
-+		gpio = <&gpio1 RK_PC6 GPIO_ACTIVE_HIGH>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&lcdvcc_en_gpio>;
-+		regulator-name = "vcc3v3_panel";
-+		regulator-always-on;
-+		regulator-min-microvolt = <3300000>;
-+		regulator-max-microvolt = <3300000>;
-+		regulator-enable-ramp-delay = <100000>;
-+		vin-supply = <&vcc3v3_sys>;
-+
-+		regulator-state-mem {
-+			regulator-off-in-suspend;
-+		};
-+	};
-+
-+	/* M.2 adapter power, switched by vcc1v8_s3 */
-+	vcc3v3_ssd: vcc3v3-ssd {
-+		compatible = "regulator-fixed";
-+		regulator-name = "vcc3v3_ssd";
-+		regulator-min-microvolt = <3300000>;
-+		regulator-max-microvolt = <3300000>;
-+		vin-supply = <&vcc3v3_sys>;
-+	};
-+
-+	/* Regulators supplied by vcc5v0_usb */
-+	/* USB 3 port power supply regulator  */
-+	vcc5v0_otg: vcc5v0-otg {
-+		compatible = "regulator-fixed";
-+		enable-active-high;
-+		gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&vcc5v0_host_en_gpio>;
-+		regulator-name = "vcc5v0_otg";
-+		regulator-always-on;
-+		regulator-min-microvolt = <5000000>;
-+		regulator-max-microvolt = <5000000>;
-+		vin-supply = <&vcc5v0_usb>;
-+
-+		regulator-state-mem {
-+			regulator-off-in-suspend;
-+		};
-+	};
-+
-+	/* Regulators supplied by vcc5v0_usb */
-+	/* Type C port power supply regulator */
-+	vbus_5vout: vbus_typec: vbus-5vout {
-+		compatible = "regulator-fixed";
-+		enable-active-high;
-+		gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&vcc5v0_typec0_en_gpio>;
-+		regulator-name = "vbus_5vout";
-+		regulator-min-microvolt = <5000000>;
-+		regulator-max-microvolt = <5000000>;
-+		vin-supply = <&vcc5v0_usb>;
-+
-+		regulator-state-mem {
-+			regulator-off-in-suspend;
-+		};
-+	};
-+
-+	/* Regulators supplied by vcc_1v8 */
-+	/* Primary 0.9 V LDO */
-+	vcca0v9_s3: vcca0v9-s3 {
-+		compatible = "regulator-fixed";
-+		regulator-name = "vcc0v9_s3";
-+		regulator-min-microvolt = <5000000>;
-+		regulator-max-microvolt = <5000000>;
-+		vin-supply = <&vcc_1v8>;
-+
-+		regulator-state-mem {
-+			regulator-on-in-suspend;
-+		};
-+	};
-+
-+	mains_charger: dc-charger {
-+		compatible = "gpio-charger";
-+		charger-type = "mains";
-+		gpios = <&gpio4 RK_PD0 GPIO_ACTIVE_LOW>;
-+
-+		/* Also triggered by USB charger */
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&dc_det_gpio>;
-+	};
-+};
-+
-+&cdn_dp {
-+	status = "okay";
-+};
-+
-+&cpu_b0 {
-+	cpu-supply = <&vdd_cpu_b>;
-+};
-+
-+&cpu_b1 {
-+	cpu-supply = <&vdd_cpu_b>;
-+};
-+
-+&cpu_l0 {
-+	cpu-supply = <&vdd_cpu_l>;
-+};
-+
-+&cpu_l1 {
-+	cpu-supply = <&vdd_cpu_l>;
-+};
-+
-+&cpu_l2 {
-+	cpu-supply = <&vdd_cpu_l>;
-+};
-+
-+&cpu_l3 {
-+	cpu-supply = <&vdd_cpu_l>;
-+};
-+
-+&edp {
-+	force-hpd;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&edp_hpd>;
-+	status = "okay";
-+
-+	ports {
-+		edp_out: port@1 {
-+			reg = <1>;
-+			#address-cells = <1>;
-+			#size-cells = <0>;
-+
-+			edp_out_panel: endpoint@0 {
-+				reg = <0>;
-+				remote-endpoint = <&panel_in_edp>;
-+			};
-+		};
-+	};
-+};
-+
-+&emmc_phy {
-+	status = "okay";
-+};
-+
-+&gpu {
-+	mali-supply = <&vdd_gpu>;
-+	status = "okay";
-+};
-+
-+&hdmi_sound {
-+	status = "okay";
-+};
-+
-+&i2c0 {
-+	clock-frequency = <400000>;
-+	i2c-scl-falling-time-ns = <4>;
-+	i2c-scl-rising-time-ns = <168>;
-+	status = "okay";
-+
-+	rk808: pmic@1b {
-+		compatible = "rockchip,rk808";
-+		reg = <0x1b>;
-+		#clock-cells = <1>;
-+		clock-output-names = "xin32k", "rk808-clkout2";
-+		interrupt-parent = <&gpio3>;
-+		interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&pmic_int_l_gpio>;
-+		rockchip,system-power-controller;
-+		wakeup-source;
-+
-+		vcc1-supply = <&vcc_sysin>;
-+		vcc2-supply = <&vcc_sysin>;
-+		vcc3-supply = <&vcc_sysin>;
-+		vcc4-supply = <&vcc_sysin>;
-+		vcc6-supply = <&vcc_sysin>;
-+		vcc7-supply = <&vcc_sysin>;
-+		vcc8-supply = <&vcc3v3_sys>;
-+		vcc9-supply = <&vcc_sysin>;
-+		vcc10-supply = <&vcc_sysin>;
-+		vcc11-supply = <&vcc_sysin>;
-+		vcc12-supply = <&vcc3v3_sys>;
-+		vcc13-supply = <&vcc_sysin>;
-+		vcc14-supply = <&vcc_sysin>;
-+
-+		regulators {
-+			/* rk3399 center logic supply */
-+			vdd_center: DCDC_REG1 {
-+				regulator-name = "vdd_center";
-+				regulator-always-on;
-+				regulator-boot-on;
-+				regulator-min-microvolt = <750000>;
-+				regulator-max-microvolt = <1350000>;
-+				regulator-ramp-delay = <6001>;
-+
-+				regulator-state-mem {
-+					regulator-off-in-suspend;
-+				};
-+			};
-+
-+			vdd_cpu_l: DCDC_REG2 {
-+				regulator-name = "vdd_cpu_l";
-+				regulator-always-on;
-+				regulator-boot-on;
-+				regulator-min-microvolt = <750000>;
-+				regulator-max-microvolt = <1350000>;
-+				regulator-ramp-delay = <6001>;
-+
-+				regulator-state-mem {
-+					regulator-off-in-suspend;
-+				};
-+			};
-+
-+			vcc_ddr: DCDC_REG3 {
-+				regulator-name = "vcc_ddr";
-+				regulator-always-on;
-+				regulator-boot-on;
-+
-+				regulator-state-mem {
-+					regulator-on-in-suspend;
-+				};
-+			};
-+
-+			vcc_1v8: vcc_wl: DCDC_REG4 {
-+				regulator-name = "vcc_1v8";
-+				regulator-always-on;
-+				regulator-boot-on;
-+				regulator-min-microvolt = <1800000>;
-+				regulator-max-microvolt = <1800000>;
-+
-+				regulator-state-mem {
-+					regulator-on-in-suspend;
-+					regulator-suspend-microvolt = <1800000>;
-+				};
-+			};
-+
-+			/* not used */
-+			LDO_REG1 {
-+			};
-+
-+			/* not used */
-+			LDO_REG2 {
-+			};
-+
-+			vcc1v8_pmupll: LDO_REG3 {
-+				regulator-name = "vcc1v8_pmupll";
-+				regulator-always-on;
-+				regulator-boot-on;
-+				regulator-min-microvolt = <1800000>;
-+				regulator-max-microvolt = <1800000>;
-+
-+				regulator-state-mem {
-+					regulator-on-in-suspend;
-+					regulator-suspend-microvolt = <1800000>;
-+				};
-+			};
-+
-+			vcc_sdio: LDO_REG4 {
-+				regulator-name = "vcc_sdio";
-+				regulator-always-on;
-+				regulator-boot-on;
-+				regulator-min-microvolt = <1800000>;
-+				regulator-max-microvolt = <3000000>;
-+
-+				regulator-state-mem {
-+					regulator-on-in-suspend;
-+					regulator-suspend-microvolt = <3000000>;
-+				};
-+			};
-+
-+			vcca3v0_codec: LDO_REG5 {
-+				regulator-name = "vcca3v0_codec";
-+				regulator-always-on;
-+				regulator-boot-on;
-+				regulator-min-microvolt = <3000000>;
-+				regulator-max-microvolt = <3000000>;
-+
-+				regulator-state-mem {
-+					regulator-off-in-suspend;
-+				};
-+			};
-+
-+			vcc_1v5: LDO_REG6 {
-+				regulator-name = "vcc_1v5";
-+				regulator-always-on;
-+				regulator-boot-on;
-+				regulator-min-microvolt = <1500000>;
-+				regulator-max-microvolt = <1500000>;
-+
-+				regulator-state-mem {
-+					regulator-on-in-suspend;
-+					regulator-suspend-microvolt = <1500000>;
-+				};
-+			};
-+
-+			vcca1v8_codec: LDO_REG7 {
-+				regulator-name = "vcca1v8_codec";
-+				regulator-always-on;
-+				regulator-boot-on;
-+				regulator-min-microvolt = <1800000>;
-+				regulator-max-microvolt = <1800000>;
-+
-+				regulator-state-mem {
-+					regulator-off-in-suspend;
-+				};
-+			};
-+
-+			vcc_3v0: LDO_REG8 {
-+				regulator-name = "vcc_3v0";
-+				regulator-always-on;
-+				regulator-boot-on;
-+				regulator-min-microvolt = <3000000>;
-+				regulator-max-microvolt = <3000000>;
-+
-+				regulator-state-mem {
-+					regulator-on-in-suspend;
-+					regulator-suspend-microvolt = <3000000>;
-+				};
-+			};
-+
-+			vcc3v3_s3: SWITCH_REG1 {
-+				regulator-name = "vcc3v3_s3";
-+				regulator-always-on;
-+				regulator-boot-on;
-+
-+				regulator-state-mem {
-+					regulator-off-in-suspend;
-+				};
-+			};
-+
-+			vcc3v3_s0: SWITCH_REG2 {
-+				regulator-name = "vcc3v3_s0";
-+				regulator-always-on;
-+				regulator-boot-on;
-+
-+				regulator-state-mem {
-+					regulator-off-in-suspend;
-+				};
-+			};
-+		};
-+	};
-+
-+	vdd_cpu_b: regulator@40 {
-+		compatible = "silergy,syr827";
-+		reg = <0x40>;
-+		fcs,suspend-voltage-selector = <1>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&vsel1_gpio>;
-+		regulator-name = "vdd_cpu_b";
-+		regulator-always-on;
-+		regulator-boot-on;
-+		regulator-min-microvolt = <712500>;
-+		regulator-max-microvolt = <1500000>;
-+		regulator-ramp-delay = <1000>;
-+		vin-supply = <&vcc_1v8>;
-+
-+		regulator-state-mem {
-+			regulator-off-in-suspend;
-+		};
-+	};
-+
-+	vdd_gpu: regulator@41 {
-+		compatible = "silergy,syr828";
-+		reg = <0x41>;
-+		fcs,suspend-voltage-selector = <1>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&vsel2_gpio>;
-+		regulator-name = "vdd_gpu";
-+		regulator-always-on;
-+		regulator-boot-on;
-+		regulator-min-microvolt = <712500>;
-+		regulator-max-microvolt = <1500000>;
-+		regulator-ramp-delay = <1000>;
-+		vin-supply = <&vcc_1v8>;
-+
-+		regulator-state-mem {
-+			regulator-off-in-suspend;
-+		};
-+	};
-+};
-+
-+&i2c1 {
-+	clock-frequency = <100000>;
-+	i2c-scl-falling-time-ns = <4>;
-+	i2c-scl-rising-time-ns = <168>;
-+	status = "okay";
-+
-+	es8316: es8316@11 {
-+		compatible = "everest,es8316";
-+		reg = <0x11>;
-+		clocks = <&cru SCLK_I2S_8CH_OUT>;
-+		clock-names = "mclk";
-+		#sound-dai-cells = <0>;
-+	};
-+};
-+
-+&i2c3 {
-+	i2c-scl-falling-time-ns = <15>;
-+	i2c-scl-rising-time-ns = <450>;
-+	status = "okay";
-+};
-+
-+&i2c4 {
-+	i2c-scl-falling-time-ns = <20>;
-+	i2c-scl-rising-time-ns = <600>;
-+	status = "okay";
-+
-+	fusb0: fusb30x@22 {
-+		compatible = "fcs,fusb302";
-+		reg = <0x22>;
-+		fcs,int_n = <&gpio1 RK_PA2 GPIO_ACTIVE_HIGH>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&fusb0_int_gpio>;
-+		vbus-supply = <&vbus_typec>;
-+
-+		connector {
-+			compatible = "usb-c-connector";
-+			data-role = "host";
-+			label = "USB-C";
-+			op-sink-microwatt = <1000000>;
-+			power-role = "dual";
-+			sink-pdos =
-+				<PDO_FIXED(5000, 2500, PDO_FIXED_USB_COMM)>;
-+			source-pdos =
-+				<PDO_FIXED(5000, 1400, PDO_FIXED_USB_COMM)>;
-+			try-power-role = "sink";
-+
-+			ports {
-+				#address-cells = <1>;
-+				#size-cells = <0>;
-+
-+				port@0 {
-+					reg = <0>;
-+
-+					usbc_hs: endpoint {
-+						remote-endpoint =
-+							<&u2phy0_typec_hs>;
-+					};
-+				};
-+
-+				port@1 {
-+					reg = <1>;
-+
-+					usbc_ss: endpoint {
-+						remote-endpoint =
-+							<&tcphy0_typec_ss>;
-+					};
-+				};
-+
-+				port@2 {
-+					reg = <2>;
-+
-+					usbc_dp: endpoint {
-+						remote-endpoint =
-+							<&tcphy0_typec_dp>;
-+					};
-+				};
-+			};
-+		};
-+	};
-+};
-+
-+&i2s1 {
-+	#sound-dai-cells = <0>;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&i2s_8ch_mclk_gpio>, <&i2s1_2ch_bus>;
-+	rockchip,capture-channels = <8>;
-+	rockchip,playback-channels = <8>;
-+	status = "okay";
-+};
-+
-+&io_domains {
-+	audio-supply = <&vcc_3v0>;
-+	gpio1830-supply = <&vcc_3v0>;
-+	sdmmc-supply = <&vcc_sdio>;
-+	status = "okay";
-+};
-+
-+&pcie_phy {
-+	status = "okay";
-+};
-+
-+&pcie0 {
-+	bus-scan-delay-ms = <1000>;
-+	ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>;
-+	max-link-speed = <2>;
-+	num-lanes = <4>;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&pcie_clkreqn_cpm>;
-+	vpcie0v9-supply = <&vcca0v9_s3>;
-+	vpcie1v8-supply = <&vcca1v8_s3>;
-+	vpcie3v3-supply = <&vcc3v3_ssd>;
-+	status = "okay";
-+};
-+
-+&pinctrl {
-+	buttons {
-+		pwrbtn_gpio: pwrbtn-gpio {
-+			rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
-+		};
-+
-+		lidbtn_gpio: lidbtn-gpio {
-+			rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>;
-+		};
-+	};
-+
-+	dc-charger {
-+		dc_det_gpio: dc-det-gpio {
-+			rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>;
-+		};
-+	};
-+
-+	es8316 {
-+		hp_det_gpio: hp-det-gpio {
-+			rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;
-+		};
-+	};
-+
-+	fusb302x {
-+		fusb0_int_gpio: fusb0-int-gpio {
-+			rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>;
-+		};
-+	};
-+
-+	i2s1 {
-+		i2s_8ch_mclk_gpio: i2s-8ch-mclk-gpio {
-+			rockchip,pins = <4 RK_PA0 1 &pcfg_pull_none>;
-+		};
-+	};
-+
-+	lcd-panel {
-+		lcdvcc_en_gpio: lcdvcc-en-gpio {
-+			rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+
-+		panel_en_gpio: panel-en-gpio {
-+			rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+
-+		lcd_panel_reset_gpio: lcd-panel-reset-gpio {
-+			rockchip,pins = <4 RK_PD6 RK_FUNC_GPIO &pcfg_pull_up>;
-+		};
-+	};
-+
-+	leds {
-+		pwrled_gpio: pwrled_gpio {
-+			rockchip,pins = <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+
-+		slpled_gpio: slpled_gpio {
-+			rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+	};
-+
-+	pmic {
-+		pmic_int_l_gpio: pmic-int-l-gpio {
-+			rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
-+		};
-+
-+		vsel1_gpio: vsel1-gpio {
-+			rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
-+		};
-+
-+		vsel2_gpio: vsel2-gpio {
-+			rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
-+		};
-+	};
-+
-+	sdcard {
-+		sdmmc0_pwr_h_gpio: sdmmc0-pwr-h-gpio {
-+			rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+
-+	};
-+
-+	sdio-pwrseq {
-+		wifi_enable_h_gpio: wifi-enable-h-gpio {
-+			rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+	};
-+
-+	usb-typec {
-+		vcc5v0_typec0_en_gpio: vcc5v0-typec0-en-gpio {
-+			rockchip,pins = <1 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
-+		};
-+	};
-+
-+	usb2 {
-+		pwr_5v_gpio: pwr-5v-gpio {
-+			rockchip,pins = <1 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+
-+		vcc5v0_host_en_gpio: vcc5v0-host-en-gpio {
-+			rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+	};
-+
-+	wireless-bluetooth {
-+		bt_wake_gpio: bt-wake-gpio {
-+			rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+
-+		bt_host_wake_gpio: bt-host-wake-gpio {
-+			rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+
-+		bt_reset_gpio: bt-reset-gpio {
-+			rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
-+		};
-+	};
-+};
-+
-+&pmu_io_domains {
-+	pmu1830-supply = <&vcc_3v0>;
-+	status = "okay";
-+};
-+
-+&pwm0 {
-+	status = "okay";
-+};
-+
-+&pwm2 {
-+	status = "okay";
-+};
-+
-+&saradc {
-+	vref-supply = <&vcca1v8_s3>;
-+	status = "okay";
-+};
-+
-+&sdmmc {
-+	bus-width = <4>;
-+	cap-mmc-highspeed;
-+	cap-sd-highspeed;
-+	cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
-+	disable-wp;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>;
-+	sd-uhs-sdr104;
-+	vmmc-supply = <&vcc3v0_sd>;
-+	vqmmc-supply = <&vcc_sdio>;
-+	status = "okay";
-+};
-+
-+&sdio0 {
-+	bus-width = <4>;
-+	cap-sd-highspeed;
-+	cap-sdio-irq;
-+	keep-power-in-suspend;
-+	mmc-pwrseq = <&sdio_pwrseq>;
-+	non-removable;
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>;
-+	sd-uhs-sdr104;
-+	status = "okay";
-+};
-+
-+&sdhci {
-+	bus-width = <8>;
-+	mmc-hs200-1_8v;
-+	non-removable;
-+	status = "okay";
-+};
-+
-+&spi1 {
-+	max-freq = <10000000>;
-+	status = "okay";
-+
-+	spiflash: flash@0 {
-+		compatible = "jedec,spi-nor";
-+		reg = <0>;
-+		m25p,fast-read;
-+		spi-max-frequency = <10000000>;
-+	};
-+};
-+
-+&tcphy0 {
-+	status = "okay";
-+};
-+
-+&tcphy0_dp {
-+	port {
-+		tcphy0_typec_dp: endpoint {
-+			remote-endpoint = <&usbc_dp>;
-+		};
-+	};
-+};
-+
-+&tcphy0_usb3 {
-+	port {
-+		tcphy0_typec_ss: endpoint {
-+			remote-endpoint = <&usbc_ss>;
-+		};
-+	};
-+};
-+
-+&tcphy1 {
-+	status = "okay";
-+};
-+
-+&tsadc {
-+	/* tshut mode 0:CRU 1:GPIO */
-+	rockchip,hw-tshut-mode = <1>;
-+	/* tshut polarity 0:LOW 1:HIGH */
-+	rockchip,hw-tshut-polarity = <1>;
-+	status = "okay";
-+};
-+
-+&u2phy0 {
-+	status = "okay";
-+
-+	u2phy0_otg: otg-port {
-+		status = "okay";
-+	};
-+
-+	u2phy0_host: host-port {
-+		phy-supply = <&vcc5v0_otg>;
-+		status = "okay";
-+	};
-+
-+	port {
-+		u2phy0_typec_hs: endpoint {
-+			remote-endpoint = <&usbc_hs>;
-+		};
-+	};
-+};
-+
-+&u2phy1 {
-+	status = "okay";
-+
-+	u2phy1_otg: otg-port {
-+		status = "okay";
-+	};
-+
-+	u2phy1_host: host-port {
-+		phy-supply = <&vcc5v0_otg>;
-+		status = "okay";
-+	};
-+};
-+
-+&uart0 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
-+	uart-has-rtscts;
-+	status = "okay";
-+
-+	bluetooth {
-+		compatible = "brcm,bcm4345c5";
-+		clocks = <&rk808 1>;
-+		clock-names = "lpo";
-+		device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;
-+		host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
-+		max-speed = <1500000>;
-+		pinctrl-names = "default";
-+		pinctrl-0 = <&bt_host_wake_gpio &bt_wake_gpio &bt_reset_gpio>;
-+		shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
-+		vbat-supply = <&wifi_bat>;
-+		vddio-supply = <&vcc_wl>;
-+	};
-+};
-+
-+&uart2 {
-+	status = "okay";
-+};
-+
-+&usb_host0_ehci {
-+	status = "okay";
-+};
-+
-+&usb_host0_ohci {
-+	status = "okay";
-+};
-+
-+&usb_host1_ehci {
-+	status = "okay";
-+};
-+
-+&usb_host1_ohci {
-+	status = "okay";
-+};
-+
-+&usbdrd3_0 {
-+	status = "okay";
-+};
-+
-+&usbdrd_dwc3_0 {
-+	dr_mode = "host";
-+	status = "okay";
-+};
-+
-+&usbdrd3_1 {
-+	status = "okay";
-+};
-+
-+&usbdrd_dwc3_1 {
-+	dr_mode = "host";
-+	status = "okay";
-+};
-+
-+&vopb {
-+	status = "okay";
-+};
-+
-+&vopb_mmu {
-+	status = "okay";
-+};
-+
-+&vopl {
-+	status = "okay";
-+};
-+
-+&vopl_mmu {
-+	status = "okay";
-+};
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-add-boe-nv140fhmn49-display.patch b/gnu/packages/patches/u-boot-add-boe-nv140fhmn49-display.patch
deleted file mode 100644
index c359522967..0000000000
--- a/gnu/packages/patches/u-boot-add-boe-nv140fhmn49-display.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 00978950fed39b6104b6b4f141450a66cc3400fa Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:32 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-2-pbrobinson@gmail.com/
-Subject: [PATCH 1/5] video: simple_panel: add boe,nv140fhmn49 display
-
-add "boe,nv140fhmn49" display to compatible node.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
-Cc: Anatolij Gustschin <agust@denx.de>
----
- drivers/video/simple_panel.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/drivers/video/simple_panel.c b/drivers/video/simple_panel.c
-index c3c0e84732..5722811117 100644
---- a/drivers/video/simple_panel.c
-+++ b/drivers/video/simple_panel.c
-@@ -105,6 +105,7 @@ static const struct udevice_id simple_panel_ids[] = {
- 	{ .compatible = "auo,b133xtn01" },
- 	{ .compatible = "auo,b116xw03" },
- 	{ .compatible = "auo,b133htn01" },
-+	{ .compatible = "boe,nv140fhmn49" },
- 	{ .compatible = "lg,lb070wv8" },
- 	{ }
- };
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-gpio-keys-binding-cons.patch b/gnu/packages/patches/u-boot-gpio-keys-binding-cons.patch
deleted file mode 100644
index aec33a7023..0000000000
--- a/gnu/packages/patches/u-boot-gpio-keys-binding-cons.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 451bd72bf966df7518682cb748a804634ea19424 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:33 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-3-pbrobinson@gmail.com/
-Subject: [PATCH 2/5] dt-bindings: input: adopt Linux gpio-keys binding
- constants
-
-Sync the gpio-keys input bindings from linux 5.7-rc1.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
----
- include/dt-bindings/input/gpio-keys.h | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
- create mode 100644 include/dt-bindings/input/gpio-keys.h
-
-diff --git a/include/dt-bindings/input/gpio-keys.h b/include/dt-bindings/input/gpio-keys.h
-new file mode 100644
-index 0000000000..8962df79e7
---- /dev/null
-+++ b/include/dt-bindings/input/gpio-keys.h
-@@ -0,0 +1,13 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
-+/*
-+ * This header provides constants for gpio keys bindings.
-+ */
-+
-+#ifndef _DT_BINDINGS_GPIO_KEYS_H
-+#define _DT_BINDINGS_GPIO_KEYS_H
-+
-+#define EV_ACT_ANY		0x00	/* asserted or deasserted */
-+#define EV_ACT_ASSERTED		0x01	/* asserted */
-+#define EV_ACT_DEASSERTED	0x02	/* deasserted */
-+
-+#endif /* _DT_BINDINGS_GPIO_KEYS_H */
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-leds-common-binding-con.patch b/gnu/packages/patches/u-boot-leds-common-binding-con.patch
deleted file mode 100644
index 837408120b..0000000000
--- a/gnu/packages/patches/u-boot-leds-common-binding-con.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 282b6ca04abbe1302d04caa05be5fc5afb127141 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:34 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-4-pbrobinson@gmail.com/
-Subject: [PATCH 3/5] dt-bindings: leds: adopt Linux leds common binding
- constants
-
-Sync the common leds bindings from linux 5.7-rc1.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
----
- include/dt-bindings/leds/common.h | 91 +++++++++++++++++++++++++++++++
- 1 file changed, 91 insertions(+)
- create mode 100644 include/dt-bindings/leds/common.h
-
-diff --git a/include/dt-bindings/leds/common.h b/include/dt-bindings/leds/common.h
-new file mode 100644
-index 0000000000..0ce7dfc00d
---- /dev/null
-+++ b/include/dt-bindings/leds/common.h
-@@ -0,0 +1,91 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
-+/*
-+ * This header provides macros for the common LEDs device tree bindings.
-+ *
-+ * Copyright (C) 2015, Samsung Electronics Co., Ltd.
-+ * Author: Jacek Anaszewski <j.anaszewski@samsung.com>
-+ *
-+ * Copyright (C) 2019 Jacek Anaszewski <jacek.anaszewski@gmail.com>
-+ * Copyright (C) 2020 Pavel Machek <pavel@ucw.cz>
-+ */
-+
-+#ifndef __DT_BINDINGS_LEDS_H
-+#define __DT_BINDINGS_LEDS_H
-+
-+/* External trigger type */
-+#define LEDS_TRIG_TYPE_EDGE	0
-+#define LEDS_TRIG_TYPE_LEVEL	1
-+
-+/* Boost modes */
-+#define LEDS_BOOST_OFF		0
-+#define LEDS_BOOST_ADAPTIVE	1
-+#define LEDS_BOOST_FIXED	2
-+
-+/* Standard LED colors */
-+#define LED_COLOR_ID_WHITE	0
-+#define LED_COLOR_ID_RED	1
-+#define LED_COLOR_ID_GREEN	2
-+#define LED_COLOR_ID_BLUE	3
-+#define LED_COLOR_ID_AMBER	4
-+#define LED_COLOR_ID_VIOLET	5
-+#define LED_COLOR_ID_YELLOW	6
-+#define LED_COLOR_ID_IR		7
-+#define LED_COLOR_ID_MAX	8
-+
-+/* Standard LED functions */
-+/* Keyboard LEDs, usually it would be input4::capslock etc. */
-+/*   Obsolete equivalent: "shift-key-light" */
-+#define LED_FUNCTION_CAPSLOCK "capslock"
-+#define LED_FUNCTION_SCROLLLOCK "scrolllock"
-+#define LED_FUNCTION_NUMLOCK "numlock"
-+/*   Obsolete equivalents: "tpacpi::thinklight" (IBM/Lenovo Thinkpads),
-+     "lp5523:kb{1,2,3,4,5,6}" (Nokia N900) */
-+#define LED_FUNCTION_KBD_BACKLIGHT "kbd_backlight"
-+
-+/* System LEDs, usually found on system body.
-+   platform::mute (etc) is sometimes seen, :mute would be better */
-+#define LED_FUNCTION_POWER "power"
-+#define LED_FUNCTION_DISK "disk"
-+
-+/*   Obsolete: "platform:*:charging" (allwinner sun50i) */
-+#define LED_FUNCTION_CHARGING "charging"
-+/*   Used RGB notification LEDs common on phones.
-+     Obsolete equivalents: "status-led:{red,green,blue}" (Motorola Droid 4),
-+     "lp5523:{r,g,b}" (Nokia N900) */
-+#define LED_FUNCTION_STATUS "status"
-+
-+#define LED_FUNCTION_MICMUTE "micmute"
-+#define LED_FUNCTION_MUTE "mute"
-+
-+/* Miscelleaus functions. Use functions above if you can. */
-+#define LED_FUNCTION_ACTIVITY "activity"
-+#define LED_FUNCTION_ALARM "alarm"
-+#define LED_FUNCTION_BACKLIGHT "backlight"
-+#define LED_FUNCTION_BLUETOOTH "bluetooth"
-+#define LED_FUNCTION_BOOT "boot"
-+#define LED_FUNCTION_CPU "cpu"
-+#define LED_FUNCTION_DEBUG "debug"
-+#define LED_FUNCTION_DISK_ACTIVITY "disk-activity"
-+#define LED_FUNCTION_DISK_ERR "disk-err"
-+#define LED_FUNCTION_DISK_READ "disk-read"
-+#define LED_FUNCTION_DISK_WRITE "disk-write"
-+#define LED_FUNCTION_FAULT "fault"
-+#define LED_FUNCTION_FLASH "flash"
-+#define LED_FUNCTION_HEARTBEAT "heartbeat"
-+#define LED_FUNCTION_INDICATOR "indicator"
-+#define LED_FUNCTION_LAN "lan"
-+#define LED_FUNCTION_MAIL "mail"
-+#define LED_FUNCTION_MTD "mtd"
-+#define LED_FUNCTION_PANIC "panic"
-+#define LED_FUNCTION_PROGRAMMING "programming"
-+#define LED_FUNCTION_RX "rx"
-+#define LED_FUNCTION_SD "sd"
-+#define LED_FUNCTION_STANDBY "standby"
-+#define LED_FUNCTION_TORCH "torch"
-+#define LED_FUNCTION_TX "tx"
-+#define LED_FUNCTION_USB "usb"
-+#define LED_FUNCTION_WAN "wan"
-+#define LED_FUNCTION_WLAN "wlan"
-+#define LED_FUNCTION_WPS "wps"
-+
-+#endif /* __DT_BINDINGS_LEDS_H */
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch b/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch
index 3feeb1dc5e..29dec4f5e9 100644
--- a/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch
+++ b/gnu/packages/patches/u-boot-riscv64-fix-extlinux.patch
@@ -16,7 +16,6 @@ Signed-off-by: David Abdurachmanov <david.abdurachmanov@sifive.com>
 ---
  configs/qemu-riscv64_smode_defconfig | 2 ++
  configs/sifive_fu540_defconfig       | 2 ++
- include/configs/sifive-fu540.h       | 4 ----
  3 files changed, 4 insertions(+), 4 deletions(-)
 
 Index: u-boot/configs/qemu-riscv64_smode_defconfig
@@ -39,16 +38,3 @@ Index: u-boot/configs/sifive_fu540_defconfig
  CONFIG_DM_MTD=y
 +CONFIG_USE_PREBOOT=y
 +CONFIG_PREBOOT="setenv fdt_addr ${fdtcontroladdr}; fdt addr ${fdtcontroladdr};"
-Index: u-boot/include/configs/sifive-fu540.h
-===================================================================
---- u-boot.orig/include/configs/sifive-fu540.h
-+++ u-boot/include/configs/sifive-fu540.h
-@@ -40,8 +40,4 @@
- 	"ramdisk_addr_r=0x88300000\0" \
- 	BOOTENV
- 
--#define CONFIG_PREBOOT \
--	"setenv fdt_addr ${fdtcontroladdr};" \
--	"fdt addr ${fdtcontroladdr};"
--
- #endif /* __CONFIG_H */
diff --git a/gnu/packages/patches/u-boot-support-Pinebook-Pro-laptop.patch b/gnu/packages/patches/u-boot-support-Pinebook-Pro-laptop.patch
deleted file mode 100644
index c6f91fa65a..0000000000
--- a/gnu/packages/patches/u-boot-support-Pinebook-Pro-laptop.patch
+++ /dev/null
@@ -1,367 +0,0 @@
-From 60381e4add64dddbd07e78248b2b0f819eb2776e Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 20:27:36 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420192736.962307-6-pbrobinson@gmail.com/
-Subject: [PATCH 5/5] Add initial support for the Pinebook Pro laptop from
- Pine64.
-
-Specification:
-- Rockchip RK3399
-- 4GB Dual-Channel LPDDR4
-- eMMC socket
-- mSD card slot
-- 128Mbit (16Mb) SPI Flash
-- AP6256 for 11AC WiFi + BT5
-- 14 inch 1920*1080 eDP MiPi display
-- Camera
-- USB 3.0, 2.0 ports
-- Type-C port with alt-mode display (DP 1.2) and 15W charge
-- DC 5V/3A
-- optional PCIe slot for NVMe SSD drive
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
----
- arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi  | 43 ++++++++++
- arch/arm/mach-rockchip/rk3399/Kconfig         |  8 ++
- board/pine64/pinebook-pro-rk3399/Kconfig      | 15 ++++
- board/pine64/pinebook-pro-rk3399/MAINTAINERS  |  8 ++
- board/pine64/pinebook-pro-rk3399/Makefile     |  1 +
- .../pinebook-pro-rk3399/pinebook-pro-rk3399.c | 76 +++++++++++++++++
- configs/pinebook-pro-rk3399_defconfig         | 84 +++++++++++++++++++
- include/configs/pinebook-pro-rk3399.h         | 29 +++++++
- 8 files changed, 264 insertions(+)
- create mode 100644 arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi
- create mode 100644 board/pine64/pinebook-pro-rk3399/Kconfig
- create mode 100644 board/pine64/pinebook-pro-rk3399/MAINTAINERS
- create mode 100644 board/pine64/pinebook-pro-rk3399/Makefile
- create mode 100644 board/pine64/pinebook-pro-rk3399/pinebook-pro-rk3399.c
- create mode 100644 configs/pinebook-pro-rk3399_defconfig
- create mode 100644 include/configs/pinebook-pro-rk3399.h
-
-diff --git a/arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi b/arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi
-new file mode 100644
-index 0000000000..1a2e24d3ef
---- /dev/null
-+++ b/arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi
-@@ -0,0 +1,43 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * Copyright (C) 2019 Peter Robinson <pbrobinson at gmail.com>
-+ */
-+
-+#include "rk3399-u-boot.dtsi"
-+#include "rk3399-sdram-lpddr4-100.dtsi"
-+
-+/ {
-+	aliases {
-+		spi0 = &spi1;
-+	};
-+
-+	chosen {
-+		u-boot,spl-boot-order = "same-as-spl", &sdhci, &sdmmc;
-+	};
-+};
-+
-+&i2c0 {
-+	u-boot,dm-pre-reloc;
-+};
-+
-+&rk808 {
-+	u-boot,dm-pre-reloc;
-+};
-+
-+&sdhci {
-+	max-frequency = <25000000>;
-+	u-boot,dm-pre-reloc;
-+};
-+
-+&sdmmc {
-+	max-frequency = <20000000>;
-+	u-boot,dm-pre-reloc;
-+};
-+
-+&spiflash {
-+	u-boot,dm-pre-reloc;
-+};
-+
-+&vdd_log {
-+	regulator-init-microvolt = <950000>;
-+};
-diff --git a/arch/arm/mach-rockchip/rk3399/Kconfig b/arch/arm/mach-rockchip/rk3399/Kconfig
-index 927bb62a9f..254b9c5b4d 100644
---- a/arch/arm/mach-rockchip/rk3399/Kconfig
-+++ b/arch/arm/mach-rockchip/rk3399/Kconfig
-@@ -19,6 +19,13 @@ config TARGET_EVB_RK3399
- 	  with full function and physical connectors support like Type-C ports,
- 	  USB.0 host ports, LVDS, JTAG, MAC, SD card, HDMI, USB-to-serial...
- 
-+config TARGET_PINEBOOK_PRO_RK3399
-+	bool "Pinebook Pro"
-+	help
-+	  Pinebook Pro is a laptop based on the Rockchip rk3399 SoC
-+	  with 4Gb RAM, onboard eMMC, USB-C, a USB3 and USB2 port,
-+	  1920*1080 screen and all the usual laptop features.
-+
- config TARGET_PUMA_RK3399
- 	bool "Theobroma Systems RK3399-Q7 (Puma)"
- 	help
-@@ -144,6 +151,7 @@ endif # BOOTCOUNT_LIMIT
- 
- source "board/firefly/roc-pc-rk3399/Kconfig"
- source "board/google/gru/Kconfig"
-+source "board/pine64/pinebook-pro-rk3399/Kconfig"
- source "board/pine64/rockpro64_rk3399/Kconfig"
- source "board/rockchip/evb_rk3399/Kconfig"
- source "board/theobroma-systems/puma_rk3399/Kconfig"
-diff --git a/board/pine64/pinebook-pro-rk3399/Kconfig b/board/pine64/pinebook-pro-rk3399/Kconfig
-new file mode 100644
-index 0000000000..3bb7ca448e
---- /dev/null
-+++ b/board/pine64/pinebook-pro-rk3399/Kconfig
-@@ -0,0 +1,15 @@
-+if TARGET_PINEBOOK_PRO_RK3399
-+
-+config SYS_BOARD
-+	default "pinebook-pro-rk3399"
-+
-+config SYS_VENDOR
-+	default "pine64"
-+
-+config SYS_CONFIG_NAME
-+	default "pinebook-pro-rk3399"
-+
-+config BOARD_SPECIFIC_OPTIONS
-+	def_bool y
-+
-+endif
-diff --git a/board/pine64/pinebook-pro-rk3399/MAINTAINERS b/board/pine64/pinebook-pro-rk3399/MAINTAINERS
-new file mode 100644
-index 0000000000..7153eaf2e0
---- /dev/null
-+++ b/board/pine64/pinebook-pro-rk3399/MAINTAINERS
-@@ -0,0 +1,8 @@
-+PINEBOOK_PRO
-+M:	Peter Robinson <pbrobinson at gmail.com>
-+S:	Maintained
-+F:	board/pine64/rk3399-pinebook-pro/
-+F:	include/configs/rk3399-pinebook-pro.h
-+F:	arch/arm/dts/rk3399-pinebook-pro.dts
-+F:	arch/arm/dts/rk3399-pinebook-pro-u-boot.dtsi
-+F:	configs/pinebook-pro-rk3399_defconfig
-diff --git a/board/pine64/pinebook-pro-rk3399/Makefile b/board/pine64/pinebook-pro-rk3399/Makefile
-new file mode 100644
-index 0000000000..2f692a12a6
---- /dev/null
-+++ b/board/pine64/pinebook-pro-rk3399/Makefile
-@@ -0,0 +1 @@
-+obj-y	+= pinebook-pro-rk3399.o
-diff --git a/board/pine64/pinebook-pro-rk3399/pinebook-pro-rk3399.c b/board/pine64/pinebook-pro-rk3399/pinebook-pro-rk3399.c
-new file mode 100644
-index 0000000000..01421cbac2
---- /dev/null
-+++ b/board/pine64/pinebook-pro-rk3399/pinebook-pro-rk3399.c
-@@ -0,0 +1,76 @@
-+/*
-+ * (C) Copyright 2016 Rockchip Electronics Co., Ltd
-+ * (C) Copyright 2020 Peter Robinson <pbrobinson at gmail.com>
-+ *
-+ * SPDX-License-Identifier:     GPL-2.0+
-+ */
-+
-+#include <common.h>
-+#include <dm.h>
-+#include <syscon.h>
-+#include <asm/io.h>
-+#include <asm/arch-rockchip/clock.h>
-+#include <asm/arch-rockchip/grf_rk3399.h>
-+#include <asm/arch-rockchip/hardware.h>
-+#include <asm/arch-rockchip/misc.h>
-+#include <power/regulator.h>
-+
-+#define GRF_IO_VSEL_BT565_SHIFT 0
-+#define PMUGRF_CON0_VSEL_SHIFT 8
-+
-+#ifndef CONFIG_SPL_BUILD
-+int board_early_init_f(void)
-+{
-+	struct udevice *regulator;
-+	int ret;
-+
-+	ret = regulator_get_by_platname("vcc5v0_usb", &regulator);
-+	if (ret) {
-+		debug("%s vcc5v0_usb init fail! ret %d\n", __func__, ret);
-+		goto out;
-+	}
-+
-+	ret = regulator_set_enable(regulator, true);
-+	if (ret)
-+		debug("%s vcc5v0-host-en-gpio set fail! ret %d\n", __func__, ret);
-+
-+out:
-+	return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_MISC_INIT_R
-+static void setup_iodomain(void)
-+{
-+	struct rk3399_grf_regs *grf =
-+	   syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
-+	struct rk3399_pmugrf_regs *pmugrf =
-+	   syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF);
-+
-+	/* BT565 is in 1.8v domain */
-+	rk_setreg(&grf->io_vsel, 1 << GRF_IO_VSEL_BT565_SHIFT);
-+
-+	/* Set GPIO1 1.8v/3.0v source select to PMU1830_VOL */
-+	rk_setreg(&pmugrf->soc_con0, 1 << PMUGRF_CON0_VSEL_SHIFT);
-+}
-+
-+int misc_init_r(void)
-+{
-+	const u32 cpuid_offset = 0x7;
-+	const u32 cpuid_length = 0x10;
-+	u8 cpuid[cpuid_length];
-+	int ret;
-+
-+	setup_iodomain();
-+
-+	ret = rockchip_cpuid_from_efuse(cpuid_offset, cpuid_length, cpuid);
-+	if (ret)
-+		return ret;
-+
-+	ret = rockchip_cpuid_set(cpuid, cpuid_length);
-+	if (ret)
-+		return ret;
-+
-+	return ret;
-+}
-+#endif
-diff --git a/configs/pinebook-pro-rk3399_defconfig b/configs/pinebook-pro-rk3399_defconfig
-new file mode 100644
-index 0000000000..0e9f0ec250
---- /dev/null
-+++ b/configs/pinebook-pro-rk3399_defconfig
-@@ -0,0 +1,84 @@
-+CONFIG_ARM=y
-+CONFIG_ARCH_ROCKCHIP=y
-+CONFIG_SYS_TEXT_BASE=0x00200000
-+CONFIG_ENV_OFFSET=0x3F8000
-+CONFIG_ROCKCHIP_RK3399=y
-+CONFIG_RAM_RK3399_LPDDR4=y
-+CONFIG_NR_DRAM_BANKS=1
-+CONFIG_TARGET_PINEBOOK_PRO_RK3399=y
-+CONFIG_BAUDRATE=1500000
-+CONFIG_DEBUG_UART=y
-+CONFIG_DEBUG_UART_SHIFT=2
-+CONFIG_DEBUG_UART_BASE=0xFF1A0000
-+CONFIG_DEBUG_UART_CLOCK=24000000
-+CONFIG_SPL_SPI_SUPPORT=y
-+CONFIG_SPL_SPI_FLASH_SUPPORT=y
-+CONFIG_SPL_MTD_SUPPORT=y
-+CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-pinebook-pro.dtb"
-+CONFIG_MISC_INIT_R=y
-+CONFIG_DISPLAY_BOARDINFO_LATE=y
-+# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
-+CONFIG_SPL_STACK_R=y
-+CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000
-+CONFIG_TPL=y
-+CONFIG_SPL_OF_CONTROL=y
-+CONFIG_DEFAULT_DEVICE_TREE="rk3399-pinebook-pro"
-+CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
-+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
-+CONFIG_CMD_BOOTZ=y
-+CONFIG_CMD_GPIO=y
-+CONFIG_CMD_GPT=y
-+CONFIG_CMD_I2C=y
-+CONFIG_CMD_MMC=y
-+CONFIG_CMD_MTDPARTS=y
-+CONFIG_CMD_PMIC=y
-+CONFIG_CMD_REGULATOR=y
-+# CONFIG_CMD_SETEXPR is not set
-+CONFIG_CMD_SF=y
-+CONFIG_CMD_TIME=y
-+CONFIG_CMD_USB=y
-+CONFIG_ROCKCHIP_GPIO=y
-+CONFIG_SYS_I2C_ROCKCHIP=y
-+CONFIG_BOOTDELAY=3
-+CONFIG_LED=y
-+CONFIG_LED_GPIO=y
-+CONFIG_MISC=y
-+CONFIG_ROCKCHIP_EFUSE=y
-+CONFIG_MMC_DW=y
-+CONFIG_MMC_DW_ROCKCHIP=y
-+CONFIG_MMC_SDHCI=y
-+CONFIG_MMC_SDHCI_SDMA=y
-+CONFIG_MMC_SDHCI_ROCKCHIP=y
-+CONFIG_ROCKCHIP_SPI=y
-+CONFIG_SF_DEFAULT_SPEED=20000000
-+CONFIG_SPI_FLASH=y
-+CONFIG_SPI_FLASH_GIGADEVICE=y
-+CONFIG_SPI_FLASH_WINBOND=y
-+CONFIG_DM_ETH=y
-+CONFIG_PMIC_RK8XX=y
-+CONFIG_DM_PMIC_FAN53555=y
-+CONFIG_REGULATOR_PWM=y
-+CONFIG_REGULATOR_RK8XX=y
-+CONFIG_PWM_ROCKCHIP=y
-+CONFIG_SYSRESET=y
-+CONFIG_USB=y
-+CONFIG_USB_XHCI_HCD=y
-+CONFIG_USB_XHCI_DWC3=y
-+# CONFIG_USB_XHCI_ROCKCHIP is not set
-+CONFIG_USB_EHCI_HCD=y
-+CONFIG_USB_EHCI_GENERIC=y
-+CONFIG_USB_DWC3=y
-+CONFIG_ROCKCHIP_USB2_PHY=y
-+CONFIG_USB_HOST_ETHER=y
-+CONFIG_USB_ETHER_ASIX=y
-+CONFIG_USB_ETHER_RTL8152=y
-+CONFIG_USB_KEYBOARD=y
-+CONFIG_USE_TINY_PRINTF=y
-+CONFIG_SPL_TINY_MEMSET=y
-+CONFIG_ERRNO_STR=y
-+CONFIG_DM_VIDEO=y
-+CONFIG_VIDEO_BPP16=y
-+CONFIG_VIDEO_BPP32=y
-+CONFIG_DISPLAY=y
-+CONFIG_VIDEO_ROCKCHIP=y
-+CONFIG_DISPLAY_ROCKCHIP_EDP=y
-diff --git a/include/configs/pinebook-pro-rk3399.h b/include/configs/pinebook-pro-rk3399.h
-new file mode 100644
-index 0000000000..423d742a79
---- /dev/null
-+++ b/include/configs/pinebook-pro-rk3399.h
-@@ -0,0 +1,29 @@
-+/*
-+ * Copyright (C) 2016 Rockchip Electronics Co., Ltd
-+ * Copyright (C) 2020 Peter Robinson <pbrobinson at gmail.com>
-+ *
-+ * SPDX-License-Identifier:     GPL-2.0+
-+ */
-+
-+#ifndef __PINEBOOK_PRO_RK3399_H
-+#define __PINEBOOK_PRO_RK3399_H
-+
-+#define ROCKCHIP_DEVICE_SETTINGS \
-+		"stdin=serial,usbkbd\0" \
-+		"stdout=serial,vidconsole\0" \
-+		"stderr=serial,vidconsole\0"
-+
-+#include <configs/rk3399_common.h>
-+
-+#if defined(CONFIG_ENV_IS_IN_MMC)
-+#define CONFIG_SYS_MMC_ENV_DEV 0
-+#elif defined(CONFIG_ENV_IS_IN_SPI_FLASH)
-+#define CONFIG_ENV_SECT_SIZE		(8 * 1024)
-+#endif
-+
-+#undef CONFIG_SYS_SPI_U_BOOT_OFFS
-+#define CONFIG_SYS_SPI_U_BOOT_OFFS	1024 * 512
-+
-+#define SDRAM_BANK_SIZE			(2UL << 30)
-+
-+#endif
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/u-boot-video-rockchip-fix-build.patch b/gnu/packages/patches/u-boot-video-rockchip-fix-build.patch
deleted file mode 100644
index ca2be8dc22..0000000000
--- a/gnu/packages/patches/u-boot-video-rockchip-fix-build.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From ecc69ec25df07e1ce63d7add6b235b37673ed608 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson@gmail.com>
-Date: Mon, 20 Apr 2020 19:18:25 +0100
-Origin: https://patchwork.ozlabs.org/project/uboot/patch/20200420181825.935797-1-pbrobinson@gmail.com/
-Subject: [PATCH 6/6] drivers: video: rockchip: fix building eDP and LVDS
- drivers
-
-The rk_edp.c and rk_lvds.c files reference rk_setreg which is declared in
-hardware.h so include it so the drivers build. Adjust rk_lvds.c so
-includes are in alphabetical order while updating.
-
-Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
-Reviewed-by: Anatolij Gustschin <agust@denx.de>
----
- drivers/video/rockchip/rk_edp.c  | 1 +
- drivers/video/rockchip/rk_lvds.c | 3 ++-
- 2 files changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/video/rockchip/rk_edp.c b/drivers/video/rockchip/rk_edp.c
-index 8703df0ec0..cf84b886e7 100644
---- a/drivers/video/rockchip/rk_edp.c
-+++ b/drivers/video/rockchip/rk_edp.c
-@@ -18,6 +18,7 @@
- #include <asm/arch-rockchip/clock.h>
- #include <asm/arch-rockchip/edp_rk3288.h>
- #include <asm/arch-rockchip/grf_rk3288.h>
-+#include <asm/arch-rockchip/hardware.h>
- #include <dt-bindings/clock/rk3288-cru.h>
- 
- #define MAX_CR_LOOP 5
-diff --git a/drivers/video/rockchip/rk_lvds.c b/drivers/video/rockchip/rk_lvds.c
-index cf5c0439b1..79e24baf53 100644
---- a/drivers/video/rockchip/rk_lvds.c
-+++ b/drivers/video/rockchip/rk_lvds.c
-@@ -13,8 +13,9 @@
- #include <asm/gpio.h>
- #include <asm/io.h>
- #include <asm/arch-rockchip/clock.h>
--#include <asm/arch-rockchip/lvds_rk3288.h>
- #include <asm/arch-rockchip/grf_rk3288.h>
-+#include <asm/arch-rockchip/hardware.h>
-+#include <asm/arch-rockchip/lvds_rk3288.h>
- #include <dt-bindings/clock/rk3288-cru.h>
- #include <dt-bindings/video/rk3288.h>
- 
--- 
-2.20.1
-
diff --git a/gnu/packages/patches/ungoogled-chromium-system-nspr.patch b/gnu/packages/patches/ungoogled-chromium-system-nspr.patch
new file mode 100644
index 0000000000..6fbc0a56a7
--- /dev/null
+++ b/gnu/packages/patches/ungoogled-chromium-system-nspr.patch
@@ -0,0 +1,120 @@
+Build with the system nspr library.
+
+Originally based on a Debian patch:
+https://salsa.debian.org/chromium-team/chromium/-/blob/master/debian/patches/system/nspr.patch
+
+--- a/base/time/pr_time_unittest.cc
++++ b/base/time/pr_time_unittest.cc
+@@ -7,7 +7,7 @@
+ 
+ #include "base/compiler_specific.h"
+ #include "base/stl_util.h"
+-#include "base/third_party/nspr/prtime.h"
++#include <nspr/prtime.h>
+ #include "base/time/time.h"
+ #include "build/build_config.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+--- a/base/time/time.cc
++++ b/base/time/time.cc
+@@ -14,7 +14,7 @@
+ #include "base/macros.h"
+ #include "base/no_destructor.h"
+ #include "base/strings/stringprintf.h"
+-#include "base/third_party/nspr/prtime.h"
++#include <nspr/prtime.h>
+ #include "base/time/time_override.h"
+ #include "build/build_config.h"
+ 
+--- a/base/BUILD.gn
++++ b/base/BUILD.gn
+@@ -107,6 +107,9 @@ config("base_flags") {
+       "-Wglobal-constructors",
+     ]
+   }
++  ldflags = [
++    "-lnspr4",
++  ]
+ }
+ 
+ config("base_implementation") {
+@@ -712,8 +715,6 @@ jumbo_component("base") {
+     "third_party/cityhash_v103/src/city_v103.h",
+     "third_party/icu/icu_utf.cc",
+     "third_party/icu/icu_utf.h",
+-    "third_party/nspr/prtime.cc",
+-    "third_party/nspr/prtime.h",
+     "third_party/superfasthash/superfasthash.c",
+     "thread_annotations.h",
+     "threading/hang_watcher.cc",
+--- a/tools/gn/build/gen.py
++++ b/tools/gn/build/gen.py
+@@ -339,6 +339,9 @@ def WriteGNNinja(path, platform, host, o
+       if not options.no_static_libstdcpp:
+         ldflags.append('-static-libstdc++')
+ 
++      # Additional system libraries that are used.
++      libs.append('-lnspr4')
++
+       # This is needed by libc++.
+       if not platform.is_mingw():
+         libs.append('-ldl')
+--- a/third_party/blink/renderer/platform/BUILD.gn
++++ b/third_party/blink/renderer/platform/BUILD.gn
+@@ -103,6 +103,9 @@
+     "//build/win:default_exe_manifest",
+     "//third_party/icu",
+   ]
++  ldflags = [
++    "-lnspr4"
++  ]
+ }
+ 
+ # This isn't strictly necessary since we can just add the deps to "platform",
+--- a/third_party/crashpad/crashpad/handler/BUILD.gn
++++ b/third_party/crashpad/crashpad/handler/BUILD.gn
+@@ -140,6 +140,9 @@
+       "../third_party/mini_chromium:base",
+       "../tools:tool_support",
+     ]
++    ldflags = [
++      "-lnspr4"
++    ]
+ 
+     if (crashpad_is_win) {
+       if (crashpad_is_in_chromium || crashpad_is_in_dart) {
+--- a/chrome/common/search/BUILD.gn
++++ b/chrome/common/search/BUILD.gn
+@@ -20,6 +20,9 @@
+     "//chrome/common/themes:autogenerated_theme_util",
+     "//skia",
+   ]
++  ldflags = [
++    "-lnspr4"
++  ]
+ }
+ 
+ compiled_action("generate_chrome_colors_info") {
+--- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn
++++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn
+@@ -31,6 +31,9 @@
+     "//net/tools/huffman_trie:huffman_trie_generator_sources",
+     "//url:url",
+   ]
++  ldflags = [
++    "-lnspr4",
++  ]
+   if (is_ios) {
+     libs = [ "UIKit.framework" ]
+   }
+--- a/components/schema_org/BUILD.gn
++++ b/components/schema_org/BUILD.gn
+@@ -33,6 +33,9 @@
+     "//base",
+     "//url",
+   ]
++  ldflags = [
++    "-lnspr4",
++  ]
+ }
+ 
+ compiled_action("schema_org_name_data") {
diff --git a/gnu/packages/patches/widelands-system-wide_minizip.patch b/gnu/packages/patches/widelands-system-wide_minizip.patch
new file mode 100644
index 0000000000..1fac0d5396
--- /dev/null
+++ b/gnu/packages/patches/widelands-system-wide_minizip.patch
@@ -0,0 +1,153 @@
+Description: use the system-wide minizip instead of the embeeded one if found.
+Forwarded-Upstream: It was provided by upstream: http://bazaar.launchpad.net/~widelands-dev/widelands/b19-debian/revision/8147
+ .
+ Thanks to Fòram na Gàidhlig for the patch.
+ 
+I just added this line to make its use easier:
+  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/Modules)
+
+=== modified file 'CMakeLists.txt'
+---
+ CMakeLists.txt                     |    3 +++
+ Modules/FindMinizip.cmake          |   37 +++++++++++++++++++++++++++++++++++++
+ cmake/WlFunctions.cmake            |    7 +++++++
+ src/io/CMakeLists.txt              |    2 +-
+ src/third_party/CMakeLists.txt     |   20 +++++++++++---------
+ src/third_party/minizip/README.txt |    4 ++++
+ 6 files changed, 63 insertions(+), 10 deletions(-)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -43,6 +43,7 @@
+ endif(POLICY CMP0074)
+ 
+ include("${CMAKE_SOURCE_DIR}/cmake/WlFunctions.cmake")
++set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/Modules)
+ 
+ option(OPTION_USE_GLBINDING "Use glbinding instead of GLEW" OFF)
+ option(OPTION_GLEW_STATIC "Use static GLEW Library" OFF)
+@@ -105,6 +106,8 @@
+ find_package(SDL2_ttf REQUIRED)
+ find_package(ZLIB REQUIRED)
+ find_package(ICU REQUIRED)
++find_package(Minizip)
++
+ if(OPTION_USE_GLBINDING)
+   find_package(glbinding REQUIRED)
+ else()
+--- /dev/null
++++ b/Modules/FindMinizip.cmake
+@@ -0,0 +1,37 @@
++# - Try to find Minizip
++# Once done this will define
++#  
++#  MINIZIP_FOUND        - system has MINIZIP
++#  MINIZIP_INCLUDE_DIR  - the MINIZIP include directory
++#  MINIZIP_LIBRARY_DIR  - where the libraries are
++#  MINIZIP_LIBRARY      - Link these to use MINIZIP
++#   
++
++IF (MINIZIP_INCLUDE_DIR)
++  # Already in cache, be silent
++  SET(MINIZIP_FIND_QUIETLY TRUE)
++ENDIF (MINIZIP_INCLUDE_DIR)
++
++FIND_PATH( MINIZIP_INCLUDE_DIR 
++	  NAMES zip.h unzip.h ioapi.h
++	  PATHS /usr/local/include /usr/include
++	  PATH_SUFFIXES minizip/ )
++SET( MINIZIP_NAMES minizip MINIZIP )
++FIND_LIBRARY( MINIZIP_LIBRARY
++	      NAMES ${MINIZIP_NAMES}
++	      PATHS /usr/lib /usr/local/lib )
++
++GET_FILENAME_COMPONENT( MINIZIP_LIBRARY_DIR ${MINIZIP_LIBRARY} PATH )
++
++IF (MINIZIP_INCLUDE_DIR AND MINIZIP_LIBRARY)
++   SET(MINIZIP_FOUND TRUE)
++   SET(MINIZIP_LIBRARY_DIR ${MINIZIP_LIBRARY} )
++   IF (NOT MINIZIP_FIND_QUIETLY)
++     MESSAGE (STATUS "Found Minizip: ${MINIZIP_LIBRARY} ${MINIZIP_INCLUDE_DIR}")
++   ENDIF (NOT MINIZIP_FIND_QUIETLY)
++ELSE (MINIZIP_INCLUDE_DIR AND MINIZIP_LIBRARY)
++   SET( MINIZIP_FOUND FALSE )
++   SET( MINIZIP_LIBRARY_DIR )
++   SET( MINIZIP_EXTRA_DEFINITIONS )
++ENDIF (MINIZIP_INCLUDE_DIR AND MINIZIP_LIBRARY)
++
+--- a/cmake/WlFunctions.cmake
++++ b/cmake/WlFunctions.cmake
+@@ -81,6 +81,14 @@
+   if(ARG_USES_ZLIB)
+     wl_include_system_directories(${NAME} ${ZLIB_INCLUDE_DIRS})
+     target_link_libraries(${NAME} ${ZLIB_LIBRARY})
++    if (MINIZIP_FOUND)
++      wl_include_system_directories(${NAME}  ${MINIZIP_INCLUDE_DIR})
++      target_link_libraries(${NAME}  ${MINIZIP_LIBRARY})
++      target_compile_definitions(${NAME} PUBLIC -DHAVE_SYSTEM_MINIZIP)
++    else(MINIZIP_FOUND)
++      target_link_libraries(${NAME}  third_party_minizip)
++      message(FATAL_ERROR "You are using widelands-bundled minizip sources. Please install your distribution's minizip dev library or urge your distribution maintainer to include the minizip library in your package repository. Thank you.")
++    endif(MINIZIP_FOUND)
+   endif()
+ 
+   # OpenGL and GLEW are one thing for us. If you use the one, you also use the
+--- a/src/third_party/CMakeLists.txt
++++ b/src/third_party/CMakeLists.txt
+@@ -1,12 +1,14 @@
+-wl_library(third_party_minizip
+-  THIRD_PARTY
+-  SRCS
+-    minizip/ioapi.h
+-    minizip/unzip.cc
+-    minizip/unzip.h
+-    minizip/zip.h
+-  USES_ZLIB
+-)
++if(NOT MINIZIP_FOUND)
++  wl_library(third_party_minizip
++    THIRD_PARTY
++    SRCS
++      ioapi.h
++      unzip.cc
++      unzip.h
++      zip.h
++    USES_ZLIB
++  )
++endif(NOT MINIZIP_FOUND)
+ 
+ wl_library(third_party_eris
+   THIRD_PARTY
+--- a/src/io/filesystem/CMakeLists.txt
++++ b/src/io/filesystem/CMakeLists.txt
+@@ -12,6 +12,7 @@
+     zip_exceptions.h
+     zip_filesystem.cc
+     zip_filesystem.h
++  USES_ZLIB
+   DEPENDS
+     base_exceptions
+     base_i18n
+@@ -19,5 +20,4 @@
+     base_macros
+     graphic_text_layout
+     io_stream
+-    third_party_minizip
+ )
+--- a/src/io/filesystem/zip_filesystem.h
++++ b/src/io/filesystem/zip_filesystem.h
+@@ -28,8 +28,14 @@
+ #include "io/filesystem/filesystem.h"
+ #include "io/streamread.h"
+ #include "io/streamwrite.h"
++
++#ifndef HAVE_SYSTEM_MINIZIP
+ #include "third_party/minizip/unzip.h"
+ #include "third_party/minizip/zip.h"
++#else
++#include <minizip/unzip.h>
++#include <minizip/zip.h>
++#endif
+ 
+ class ZipFilesystem : public FileSystem {
+ public:
diff --git a/gnu/packages/patches/x265-arm-flags.patch b/gnu/packages/patches/x265-arm-flags.patch
index f17e26f6f1..342e13270b 100644
--- a/gnu/packages/patches/x265-arm-flags.patch
+++ b/gnu/packages/patches/x265-arm-flags.patch
@@ -1,4 +1,7 @@
-https://sources.debian.org/src/x265/2.9-3/debian/patches/0001-Fix-arm-flags.patch/
+Fix build flags for ARMv7.
+
+Taken from Debian:
+https://salsa.debian.org/multimedia-team/x265/-/blob/master/debian/patches/0001-Fix-arm-flags.patch
 
 From: Sebastian Ramacher <sramacher@debian.org>
 Date: Wed, 26 Apr 2017 22:05:06 +0200
@@ -9,28 +12,25 @@ Subject: Fix arm* flags
  1 file changed, 1 insertion(+), 5 deletions(-)
 
 diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
-index 33b6523..25aecbb 100644
 --- a/source/CMakeLists.txt
 +++ b/source/CMakeLists.txt
-@@ -72,7 +72,7 @@ elseif(ARMMATCH GREATER "-1")
+@@ -77,7 +77,7 @@ elseif(ARMMATCH GREATER "-1")
+         add_definitions(-DX265_ARCH_ARM=1 -DX265_ARCH_ARM64=1 -DHAVE_ARMV6=0)
+     else()
+         message(STATUS "Detected ARM target processor")
+-        add_definitions(-DX265_ARCH_ARM=1 -DX265_ARCH_ARM64=0 -DHAVE_ARMV6=1)
++        add_definitions(-DX265_ARCH_ARM=1)
      endif()
-     message(STATUS "Detected ARM target processor")
-     set(ARM 1)
--    add_definitions(-DX265_ARCH_ARM=1 -DHAVE_ARMV6=1)
-+    # add_definitions(-DX265_ARCH_ARM=1 -DHAVE_ARMV6=1)
  else()
      message(STATUS "CMAKE_SYSTEM_PROCESSOR value `${CMAKE_SYSTEM_PROCESSOR}` is unknown")
-     message(STATUS "Please add this value near ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE}")
-@@ -230,12 +230,8 @@ if(GCC)
-     if(ARM AND CROSS_COMPILE_ARM)
-         set(ARM_ARGS -march=armv6 -mfloat-abi=soft -mfpu=vfp -marm -fPIC)
-     elseif(ARM)
--        find_package(Neon)
-         if(CPU_HAS_NEON)
--            set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=neon -marm -fPIC)
-             add_definitions(-DHAVE_NEON)
--        else()
--            set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm)
+@@ -252,10 +252,7 @@ if(GCC)
+         else()
+             find_package(Neon)
+             if(CPU_HAS_NEON)
+-                set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=neon -marm -fPIC)
+                 add_definitions(-DHAVE_NEON)
+-            else()
+-                set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm)
+             endif()
          endif()
      endif()
-     add_definitions(${ARM_ARGS})
diff --git a/gnu/packages/patches/xpra-4.0.1-systemd-run.patch b/gnu/packages/patches/xpra-4.0.1-systemd-run.patch
new file mode 100644
index 0000000000..1ea11830a5
--- /dev/null
+++ b/gnu/packages/patches/xpra-4.0.1-systemd-run.patch
@@ -0,0 +1,34 @@
+Disable systemd-run if the command is not found.
+
+diff -Naur xpra-4.0.1/xpra/scripts/main.py xpra-4.0.1.patched/xpra/scripts/main.py
+--- xpra-4.0.1/xpra/scripts/main.py	2020-05-17 18:12:15.000000000 +0200
++++ xpra-4.0.1.patched/xpra/scripts/main.py	2020-06-01 12:12:18.500257507 +0200
+@@ -312,16 +312,18 @@
+     if not is_systemd_pid1():
+         return False
+     #test it:
+-    cmd = ["systemd-run", "--quiet", "--user", "--scope", "--", "true"]
+-    proc = Popen(cmd, stdin=None, stdout=None, stderr=None, shell=False)
+-    r = pollwait(proc, timeout=1)
+-    if r is None:
+-        try:
+-            proc.terminate()
+-        except Exception:
+-            pass
+-    return r==0
+-
++    try:
++        cmd = ["systemd-run", "--quiet", "--user", "--scope", "--", "true"]
++        proc = Popen(cmd, stdin=None, stdout=None, stderr=None, shell=False)
++        r = pollwait(proc, timeout=1)
++        if r is None:
++            try:
++                proc.terminate()
++            except Exception:
++                pass
++        return r==0
++    except FileNotFoundError:
++        return False
+ 
+ def run_mode(script_file, error_cb, options, args, mode, defaults):
+     #configure default logging handler: