meta-openembedded: subtree update:ae39f2e711..bccd3277e4

Alejandro Enedino Hernandez Samaniego (2):
      emacs: Create a new recipe for emacs
      weechat: Upgrade to 2.9

Andreas Müller (3):
      Initial add source-code-pro-fonts 2.030_1.050
      gedit: add source-code-pro-fonts to RRECOMMENDS
      geany: add source-code-pro-fonts to RRECOMMENDS

Andrej Valek (1):
      squid: upgrade 4.12 -> 4.13

Armin Kuster (3):
      log4cplus: pkg moved to core
      kea: pkg moved to core
      dhcpcd: pkg moved to core

Arthur She (1):
      xmlrpc-c: fix Makefile macro error

Arturo Buzarra (1):
      byacc: add nativesdk support

Bartosz Golaszewski (1):
      libgpiod: update v1.4.3 -> v1.4.4

Bjarne Michelsen (1):
      asio: extend recipe to add native support

Diego Rondini (4):
      libeigen: update SRC_URI to download from gitlab
      gvfs: adjust fuse packageconfig to fuse3
      libeigen: update SRC_URI to use gitlab git
      hplip: use libexecdir

Fabio Berton (2):
      libqmi: Update 1.26.0 -> 1.26.4
      modemmanager: Update 1.12.12 -> 1.14.2

Gianfranco Costamagna (3):
      dlt-daemon: superseed upstream pr #238 patch with pr #245 due to unexpected behaviour
      brotli: update to 1.0.9
      brotli: set upstream-status for the patch backported from upstream

Haiqing Bai (1):
      rsyslog: fix wrong option of PACKAGECONFIG[valgrind]

Hongxu Jia (1):
      python3-texttable: add recipe

Jack Mitchell (1):
      meta-networking: dhcpcd: backport ALIGN compile error fix

Jens Rehsack (1):
      bearssl: fix missing install

Jose Dapena Paz (1):
      xmlsec1: do not use system libraries for non nss

Jugurtha BELKALEM (1):
      recipe/ettercap : new ettercap recipe

Khem Raj (67):
      valijson: Move it to networking-layer under BBFILES_DYNAMIC
      linuxptp: Fix cross build
      kernel-selftest: Tests in 5.8 depend on libhugetlbfs.h
      wireguard-module: Exlude from world builds
      Revert "iwd: Module load dir should be relative to root_dir"
      vboxguestdrivers: Fix build with kernel 5.8
      kernel-selftest: Disable vm tests for mips/arm
      vulkan-cts: Update to 1.2.3.2
      nss: Avoid converting enum to void*
      nss: Disable Werror across all recipe types
      nss: Upgrade to 3.56
      mini-iconv: Remove
      wvstreams: Update SRC_URI to a fetchable location
      wvdial: Update SRC_URI to an accessible location
      packagegroup-meta-oe: Overhaul so it can build meta-oe-image
      mime-support: Use update-alternatives
      canutils: Use update-alternatives
      libusbgx: Use update-alternatives
      ttf-liberation-sans-narrow: Do not install normal liberation fonts
      mutter: Add a comment to remove pipewire-0.2 dependency with 3.36
      sblim-sfcb: Fix target postinst
      hexedit: Define update alternatives
      lmbench: Use update alternatives for stream
      uml-utilities: Use update alternatives for tunctl
      imagemagick: Create symlinks for magick-script
      sharutils: Use update alternatives for uudecode/uuencode
      layer.conf: fixes icon-theme signature changes
      layer.conf: Fix for signature change for allarch icon themes
      properties-cpp: Add recipe
      packagegroup-meta-filesystems: Update to add new recipes
      packagegroup-meta-webserver: Update to include new recipes
      monkey: Remove /var/run
      monkey: Correct the install path in init services
      packagegroup-meta-oe: Exclude from world builds
      networkmanager: Depend on dhcpcd
      packagegroup-meta-networking: Add new packages
      bearssl: fix GNU_HASH link error
      autossh: Depend on ssh instead of hardcoding openssh
      quagga,pimd: Use update-alternatives for pimd
      netkit-rpc: Use update alternatives for rpcinfo
      ssmtp: Use update alternatives for conflicts with esmtp
      netkit-rwho: Use update-alternatives for tftp
      netkit-ftp: Use update-alternatives for ftp
      netkit-rwho: Convert to ontarget postinst
      schroedinger: Update SRC_URI
      packagegroup-meta-multimedia: Add new recipes
      mycroft: rdep on procps
      imapfilter: Fix linker flags
      toybox: Add packageconfigs for iconv and getconf
      tmux: Add -p option to mkdir
      packagegroup-meta-networking: Remove dhcpcd and kea
      packagegroup-meta-oe: Remove log4cplus
      packagegroup-meta-multimedia: Remove projucer on musl
      packagegroup-meta-perl: Update to represent latest recipes
      po4a: Switch to github for SRC_URI as alioth one seems to be gone
      libdata-hexdump-perl: Use update alternatives for hexdump
      meta-perl-image: Add packagegroup-meta-perl-extended
      meta-perl-ptest-image: Depend on ptest DISTRO_FEATURE
      iwd: Upgrade to 1.9
      packagegroup-meta-python: Add new packages
      meta-python-image,meta-python-ptest-image: Use python3 packagegroups
      android-tools: Support libselinux to build with musl which now has gettid
      packagegroup-meta-oe.bb: Add cukinia to test packagegroups
      packagegroup-meta-oe: Add source-code-pro-fonts
      mongodb: Pass OBJCOPY to scons so it does not use it from host
      mongodb: Fix libunwind build with -fno-common
      mongodb: Fix i386 builds for non-glibc systems

Leon Anavi (134):
      python3-pywbem: Upgrade 0.17.4 -> 1.0.2
      python3-pydicti: Add recipe
      python3-yamlloader: Add recipe
      python3-tabulate: Add recipe
      python3-asciitree: Add recipe
      python3-custom-inherit: Add recipe
      python3-nocasedict: Add recipe
      python3-nocaselist: Add recipe
      python3-click-repl: Add recipe
      python3-click-spinner: Add recipe
      python3-pywbemtools: Add recipe
      python3-diskcache: Upgrade 4.1.0 -> 5.0.1
      python3-langtable: Upgrade 0.0.51 -> 0.0.52
      python3-pint: Upgrade 0.14 -> 0.15
      python3-networkx: Upgrade 2.4 -> 2.5
      python3-attrs: Upgrade 19.3.0 -> 20.1.0
      python3-pychromecast: Upgrade 7.2.0 -> 7.2.1
      python3-dominate: Upgrade 2.5.1 -> 2.5.2
      python3-pymisp: Upgrade 2.4.128 -> 2.4.130
      python3-inflection: Upgrade 0.5.0 -> 0.5.1
      python3-typing-extensions: Upgrade 3.7.4.2 -> 3.7.4.3
      python3-pandas: Upgrade 1.1.0 -> 1.1.1
      python3-msm: Upgrade 0.8.7 -> 0.8.8
      lshw: Upgrade 2.18 -> 2.19
      mercurial: Upgrade 5.4 -> 5.5
      doxygen: Upgrade 1.8.17 -> 1.8.20
      python3-bitarray: Upgrade 1.5.2 -> 1.5.3
      python3-cryptography-vectors: Upgrade 2.9.2 -> 3.0
      python3-openpyxl: Upgrade 3.0.4 -> 3.0.5
      python3-cmd2: Upgrade 1.3.3 -> 1.3.4
      python3-sentry-sdk: Upgrade 0.16.5 -> 0.17.0
      python3-flask: Consolidate in a single file
      python3-flask: Upgrade 1.1.1 -> 1.1.2
      python3-diskcache: Upgrade 5.0.1 -> 5.0.2
      python3-cmd2: Upgrade 1.3.4 -> 1.3.5
      python3-flask-wtf: Consolidate in a single file
      python3-flask-wtf: Upgrade 0.14.2 -> 0.14.3
      python3-flask-socketio: Consolidate in a single file
      python3-flask-socketio: Upgrade 4.2.1 -> 4.3.1
      python3-google-api-python-client: Upgrade 1.10.0 -> 1.10.1
      python3-cryptography: Upgrade 3.0 -> 3.1
      python3-twitter: Upgrade 3.8.0 -> 3.9.0
      python3-ntplib: Upgrade 0.3.3 -> 0.3.4
      python3-flask-babel: Upgrade 1.0.0 -> 2.0.0
      python3-flask-migrate: Consolidate in a single file
      python3-flask-migrate: Upgrade 2.5.2 -> 2.5.3
      python3-flask-restful: Consolidate in a single file
      python3-flask-restful: Upgrade 0.3.7 -> 0.3.8
      python3-flask-sqlalchemy: Consolidate in a single file
      python3-flask-sqlalchemy: Upgrade 2.4.1 -> 2.4.4
      php: Upgrade 7.4.4 -> 7.4.9
      python3-ecdsa: Upgrade 0.15 -> 0.16.0
      python3-luma-core: Upgrade 1.15.0 -> 1.16.0
      python3-cryptography-vectors: Upgrade 3.0 -> 3.1
      python3-google-api-python-client: Upgrade 1.10.1 -> 1.11.0
      python3-flask-user: Consolidate in a single file
      python3-cmd2: Upgrade 1.3.5 -> 1.3.8
      python3-sh: Upgrade 1.13.1 -> 1.14.0
      python3-paramiko: Upgrade 2.7.1 - 2.7.2
      python3-parse: Upgrade 1.16.0 -> 1.17.0
      python3-prompt-toolkit: Upgrade 3.0.6 -> 3.0.7
      python3-more-itertools: Upgrade 8.4.0 -> 8.5.0
      python3-ipython: Upgrade 7.17.0 -> 7.18.1
      python3-hpack: Consolidate in a single file
      python3-hpack: Upgrade 3.0.0 -> 4.0.0
      python3-sentry-sdk: Upgrade 0.17.0 -> 0.17.1
      python3-luma-core: Upgrade 1.16.0 -> 1.16.1
      python3-traitlets: Upgrade 4.3.3 -> 5.0.0
      python3-flask-nav: Consolidate in a single file
      python3-flask-mail: Consolidate in a single file
      python3-flask-pymongo: Consolidate in a single file
      python3-pillow: Upgrade 6.2.1 -> 7.2.0
      znc: Upgrade 1.7.5 -> 1.8.1
      mosquitto: Upgrade 1.6.11 -> 1.6.12
      fping: Upgrade 4.4 -> 5.0
      nano: Upgrade 5.1 -> 5.2
      hwdata: Upgrade 0.336 -> 0.339
      xscreensaver: Add HOMEPAGE
      python3-meh: Upgrade 0.48 -> 0.49
      python3-stevedore: Upgrade 3.2.0 -> 3.2.1
      python3-robotframework: Upgrade 3.2.1 -> 3.2.2
      python3-sentry-sdk: Upgrade 0.17.1 -> 0.17.2
      python3-pycurl: Upgrade 7.43.0.5 -> 7.43.0.6
      python3-pyzmq: Upgrade 17.1.0 -> 19.0.2
      python3-mccabe: Upgrade 0.2.1 -> 0.6.1
      python3-nmap: Upgrade 1.4.7 -> 1.4.8
      python3-absl: Upgrade 0.9.0 -> 0.10.0
      python3-systemd: Consolidate in a single file
      python3-gevent: Consolidate in a single file
      python3-gevent: Upgrade 1.4.0 -> 20.6.2
      python3-ruamel-yaml: Upgrade 0.16.10 -> 0.16.11
      python3-cmd2: Upgrade 1.3.8 -> 1.3.9
      python3-traitlets: 5.0.0 -> 5.0.3
      python3-priority: Consolidate in a single file
      python3-hyperframe: Consolidate in a single file
      python3-mprpc: Consolidate in a single file
      python3-gsocketpool: Consolidate in a single file
      gyp: Consolidate in a single file
      gyp: Upgrade to latest version
      python3-fann2: Consolidate in a single file
      python3-isort: Upgrade 5.4.2 -> 5.5.0
      python3-sentry-sdk: Upgrade 0.17.2 -> 0.17.3
      python3-hyperframe: Upgrade 5.2.0 -> 6.0.0
      python3-traitlets: Upgrade 5.0.3 -> 5.0.4
      python3-texttable: Upgrade 1.6.2 -> 1.6.3
      python3-iso8601: Upgrade 0.1.12 -> 0.1.13
      python3-dbus-next: Upgrade 0.1.3 -> 0.1.4
      python3-ujson: Upgrade 3.1.0 -> 3.2.0
      python3-trafaret: Upgrade 2.0.2 -> 2.1.0
      python3-tqdm: Upgrade 4.48.2 -> 4.49.0
      python3-isort: Upgrade 5.5.0 -> 5.5.2
      python3-coverage: Upgrade 5.2.1 -> 5.3
      python3-diskcache: Upgrade 5.0.2 -> 5.0.3
      python3-haversine: Upgrade 2.2.0 -> 2.3.0
      python3-pymysql: Upgrade 0.10.0 -> 0.10.1
      python3-alembic: Upgrade 1.4.2 -> 1.4.3
      python3-nocasedict: Upgrade 0.5.0 -> 1.0.0
      python3-pyroute2: Upgrade 0.5.13 -> 0.5.14
      python3-pyusb: Upgrade 1.0.2 -> 1.1.0
      python3-pandas: Upgrade 1.1.1 -> 1.1.2
      python3-pint: Upgrade 0.15 -> 0.16
      python3-parse: Upgrade 1.17.0 -> 1.18.0
      python3-cffi: Upgrade 1.14.2 -> 1.14.3
      python3-google-api-python-client: Upgrade 1.11.0 -> 1.12.1
      python3-sentry-sdk: Upgrade 0.17.3 -> 0.17.5
      python3-attrs: Upgrade 20.1.0 -> 20.2.0
      python3-nocaselist: Upgrade 1.0.1 -> 1.0.2
      python3-pymisp: Upgrade 2.4.130 -> 2.4.131
      python3-stevedore: Upgrade 3.2.1 -> 3.2.2
      python3-matplotlib: Upgrade 3.3.1 -> 3.3.2
      python3-pychromecast: Upgrade 7.2.1 -> 7.3.0
      python3-pyrsistent: Upgrade 0.16.0 -> 0.17.3
      python3-ruamel-yaml: Upgrade 0.16.11 -> 0.16.12
      python3-msk: Upgrade 0.3.15 -> 0.3.16

Madhavan Krishnan (1):
      libcamera: Bumped to latest revision and added pkgconfig to enable gstreamer

Marc (1):
      openocd: Update to latest git version

Marek Vasut (1):
      freerdp: Add missing libxkbcommon WL dependency

Martin Jansa (5):
      fbida: require opengl in DISTRO_FEATURES
      nss: fix postinst in do_rootfs for target
      nss: remove signlibs.sh
      st: add x11 to REQUIRED_DISTRO_FEATURES to suck less
      st: fix indentation

Michael Fitz-Payne (1):
      python3-greenstalk: add recipe for greenstalk python package.

Michael Vetter (2):
      jasper: Use new repo URL
      README: Use quotation marks for subject prefix

Mikko Rapeli (4):
      nss: fix postinst script for nativesdk build
      mdns: update to version 1096.40.7
      mdns: set CVE_PRODUCT to "apple:mdnsresponder"
      mdns: add BSD-3-Clause to LICENSE

Mingli Yu (2):
      mariadb: package executables named with mariadb
      opencv: improve reproducibility

Ola X Nilsson (1):
      syslog-ng: Drop obsolete variable ONLINE_PACKAGE_MANAGEMENT

Oleksandr Kravchuk (1):
      tesseract: update to 4.1.1

Ovidiu Panait (1):
      net-snmp: upgrade 5.8 -> 5.9

Richard Leitner (1):
      liburing: add v0.7

Robert Joslyn (3):
      postgresql: Update to 12.4
      htop: Update to 3.0.1
      consolation: Add recipe

Sakib Sajal (1):
      apache2: upgrade v2.4.43 -> v2.4.46

Slater, Joseph (2):
      openjpeg: fix CVE-2020-15389
      luajit: advance SRCREV to fix two CVE's

Stanislav Angelovic (1):
      Bump sdbus-c++ version to v0.8.3

Trevor Gamblin (3):
      packagegroup-meta-python: fix PACKAGES and default ptest recipe name
      python3-django: upgrade 2.2.13 -> 2.2.16
      python3-django: add recipe for 3.1.1

Vincent Prince (1):
      mongodb: bump to r4.4.1 version

Wenlin Kang (2):
      lua: fix CVE-2020-15945
      lua: fix CVE-2020-24371

Yann Dirson (5):
      New terminal emulator: st 0.8.4
      libcec: workaround wrong choice of PYTHON_PKG_DIR when building on Debian
      libcec: build with Linux CEC API
      libcec: rename libcec-tools to libcec-examples
      libcec: split the python example into a separate package

Zang Ruochen (38):
      lftp: upgrade 4.9.1 -> 4.9.2
      wireshark: upgrade 3.2.5 -> 3.2.6
      leptonica: upgrade 1.79.0 -> 1.80.0
      links: upgrade 2.20.2 -> 2.21
      nano: upgrade 5.0 -> 5.1
      nlohmann-json: upgrade 3.9.0 -> 3.9.1
      openldap: upgrade 2.4.50 -> 2.4.51
      protobuf: upgrade 3.12.3 -> 3.13.0
      sanlock: upgrade 3.8.1 -> 3.8.2
      libnet-dns-perl: upgrade 1.25 -> 1.26
      libidn: upgrade 1.35 -> 1.36
      satyr: upgrade 0.30 -> 0.31
      spitools: upgrade 0.8.4 -> 0.8.5
      fio: upgrade 3.21 -> 3.22
      iperf3: upgrade 3.7 -> 3.9
      paho-mqtt-c: upgrade 1.3.4 -> 1.3.5
      purple-skypeweb: upgrade 1.6 -> 1.7
      libdbd-sqlite-perl: upgrade 1.64 -> 1.66
      libencode-perl: upgrade 3.06 -> 3.07
      dash: upgrade 0.5.11.1 -> 0.5.11.2
      fuse3: upgrade 3.9.2 -> 3.9.3
      gperftools: upgrade 2.7.90 -> 2.8
      xfsprogs: upgrade 5.7.0 -> 5.8.0
      cifs-utils: upgrade 6.10 -> 6.11
      libdnet: upgrade 1.12 -> 1.14
      asio: upgrade 1.16.1 -> 1.18.0
      collectd: upgrade 5.11.0 -> 5.12.0
      cryptsetup: upgrade 2.3.3 -> 2.3.4
      gsoap: upgrade 2.0.105 -> 2.0.106
      jasper: upgrade 2.0.19 -> 2.0.20
      lcms: upgrade 2.9 -> 2.11
      libhugetlbfs: upgrade 2.22 -> 2.23
      ostree: upgrade 2020.5 -> 2020.6
      poppler: upgrade 20.08.0 -> 20.09.0
      redis: upgrade 6.0.6 -> 6.0.7
      spdlog: upgrade 1.7.0 -> 1.8.0
      zeromq: upgrade 4.3.2 -> 4.3.3
      python3-test-generator: Enable ptest

leckijakub (1):
      cukinia: new package

Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Change-Id: I8382b605a3c059a037b8f4db53608f505da642ed
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/packageconfigs/packagegroup-meta-filesystems.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/packageconfigs/packagegroup-meta-filesystems.bb
index 86b1c9b..8a8a8db 100644
--- a/meta-openembedded/meta-filesystems/recipes-filesystems/packageconfigs/packagegroup-meta-filesystems.bb
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/packageconfigs/packagegroup-meta-filesystems.bb
@@ -16,20 +16,36 @@
 "
 
 RDEPENDS_packagegroup-meta-filesystems = "\
-    ntfs-3g-ntfsprogs ifuse sshfs-fuse \
-    logfsprogs owfs simple-mtpfs \
-    unionfs-fuse fuse-exfat yaffs2-utils \
+    ifuse \
+    logfsprogs \
+    fuse-exfat \
+    owfs \
     ${@bb.utils.contains("DISTRO_FEATURES", "pam", "smbnetfs", "", d)} \
-    "
+    simple-mtpfs \
+    yaffs2-utils \
+    ntfs-3g-ntfsprogs \
+    httpfs2 \
+    unionfs-fuse \
+    sshfs-fuse \
+"
 
 RDEPENDS_packagegroup-meta-filesystems-support = "\
-    physfs fuse \
-    "
+    fuse3 \
+    fuse \
+    physfs \
+"
 
 RDEPENDS_packagegroup-meta-filesystems-utils = "\
-    xorriso aufs-util xfsprogs \
-    f2fs-tools exfat-utils udevil \
+    aufs-util \
+    exfat-utils \
+    fatcat \
     xfsdump \
-    "
+    f2fs-tools \
+    fatresize \
+    udevil \
+    ufs-utils \
+    xfsprogs \
+    xorriso \
+"
 
 EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.9.2.bb b/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.9.3.bb
similarity index 94%
rename from meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.9.2.bb
rename to meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.9.3.bb
index 357a1de..8ef9ee1 100644
--- a/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.9.2.bb
+++ b/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.9.3.bb
@@ -13,7 +13,7 @@
 
 SRC_URI = "https://github.com/libfuse/libfuse/releases/download/fuse-${PV}/fuse-${PV}.tar.xz \
 "
-SRC_URI[sha256sum] = "6999b6d48e7c0a79628fa901f6e66def3513cab4ffdd8097821e7dc3cdeae08a"
+SRC_URI[sha256sum] = "cd45270a064d2ae14f17cfc914f1555106d6c5091025b0b2698b860399d4ede6"
 
 S = "${WORKDIR}/fuse-${PV}"
 
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_5.7.0.bb b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_5.8.0.bb
similarity index 96%
rename from meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_5.7.0.bb
rename to meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_5.8.0.bb
index 9efcc56..b02ec6f 100644
--- a/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_5.7.0.bb
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_5.8.0.bb
@@ -12,7 +12,7 @@
            file://0002-include-include-xfs-linux.h-after-sys-mman.h.patch \
            file://0001-support-usrmerge.patch \
            "
-SRC_URI[sha256sum] = "8f2348a68a686a3f4491dda5d62dd32d885fbc52d32875edd41e2c296e7b4f35"
+SRC_URI[sha256sum] = "8ef46ed9e6bb927f407f541dc4324857c908ddf1374265edc910d23724048c6b"
 inherit autotools-brokensep
 
 PACKAGES =+ "${PN}-fsck ${PN}-mkfs ${PN}-repair libhandle"
diff --git a/meta-openembedded/meta-gnome/conf/layer.conf b/meta-openembedded/meta-gnome/conf/layer.conf
index 7aa9507..7706b7c 100644
--- a/meta-openembedded/meta-gnome/conf/layer.conf
+++ b/meta-openembedded/meta-gnome/conf/layer.conf
@@ -18,3 +18,9 @@
 LAYERDEPENDS_gnome-layer = "core openembedded-layer networking-layer"
 
 LAYERSERIES_COMPAT_gnome-layer = "thud warrior zeus dunfell"
+
+SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += "\
+  faenza-icon-theme->gdk-pixbuf \
+  faenza-icon-theme->gtk+3 \
+"
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_3.36.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_3.36.2.bb
index 75f1737..afd9146 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_3.36.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_3.36.2.bb
@@ -36,3 +36,4 @@
     ${PYTHON_SITEPACKAGES_DIR} \
 "
 
+RRECOMMENDS_${PN} += "source-code-pro-fonts"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.44.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.44.1.bb
index ec0ac2b..ad5dab5 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.44.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.44.1.bb
@@ -62,7 +62,7 @@
 PACKAGECONFIG[systemd] = "-Dsystemduserunitdir=${systemd_user_unitdir} -Dtmpfilesdir=${libdir}/tmpfiles.d, -Dsystemduserunitdir=no -Dtmpfilesdir=no, systemd"
 
 # needs meta-filesystems
-PACKAGECONFIG[fuse] = "-Dfuse=true, -Dfuse=false, fuse"
+PACKAGECONFIG[fuse] = "-Dfuse=true, -Dfuse=false, fuse3"
 
 # libcdio-paranoia recipe doesn't exist yet
 PACKAGECONFIG[cdda] = "-Dcdda=true, -Dcdda=false, libcdio-paranoia"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_3.34.6.bb b/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_3.34.6.bb
index 29b9fc6..a3e4798 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_3.34.6.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_3.34.6.bb
@@ -52,6 +52,7 @@
 PACKAGECONFIG[opengl] = "-Dopengl=true, -Dopengl=true, virtual/libgl"
 PACKAGECONFIG[glx] = "-Dglx=true, -Dglx=false"
 PACKAGECONFIG[libwacom] = "-Dlibwacom=true, -Dlibwacom=false, libwacom"
+# Remove depending on pipewire-0.2 when mutter is upgraded to 3.36+
 PACKAGECONFIG[remote-desktop] = "-Dremote_desktop=true, -Dremote_desktop=false, pipewire-0.2"
 PACKAGECONFIG[sm] = "-Dsm=true, -Dsm=false, libsm"
 PACKAGECONFIG[profiler] = "-Dprofiler=true,-Dprofiler=false,sysprof"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libcamera/libcamera.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libcamera/libcamera.bb
index c66c93e..5505626 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/libcamera/libcamera.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libcamera/libcamera.bb
@@ -12,15 +12,20 @@
         git://linuxtv.org/libcamera.git;protocol=git \
 "
 
-SRCREV = "5f2f9406cebc668f0d69007d1ea59ef3c56ef28c"
+SRCREV = "1e8c91b65695449c5246d17ba7dc439c8058b781"
 
-PV = "202006+git${SRCPV}"
+PV = "202008+git${SRCPV}"
 
 S = "${WORKDIR}/git"
 
 DEPENDS = "python3-pyyaml-native udev gnutls boost chrpath-native"
 DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'qt', 'qtbase qtbase-native', '', d)}"
 
+PACKAGES =+ "${PN}-gst"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gst] = "-Dgstreamer=enabled,-Dgstreamer=disabled,gstreamer1.0 gstreamer1.0-plugins-base"
+
 RDEPENDS_${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland qt', 'qtwayland', '', d)}"
 
 inherit meson pkgconfig python3native
@@ -44,4 +49,4 @@
 
 FILES_${PN}-dev = "${includedir} ${libdir}/pkgconfig"
 FILES_${PN} += " ${libdir}/libcamera.so"
-
+FILES_${PN}-gst = "${libdir}/gstreamer-1.0/libgstlibcamera.so"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/mycroft/mycroft_19.8.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/mycroft/mycroft_19.8.1.bb
index 62d1ad7..2db30dd 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/mycroft/mycroft_19.8.1.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/mycroft/mycroft_19.8.1.bb
@@ -84,4 +84,7 @@
 # Mycroft can do this itself on the target, but it's quicker to do it here
 RDEPENDS_${PN} += "mimic"
 
+# pgrep is used by stop-mycroft.sh
+RDEPENDS_${PN} += "procps"
+
 SYSTEMD_SERVICE_${PN} = "mycroft-setup.service mycroft.service"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb
index e0cb415..2bf8877 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb
@@ -20,33 +20,87 @@
 "
 
 RDEPENDS_packagegroup-meta-multimedia = "\
-    libdvbpsi libdc1394 gstd gst-shark \
-    bigbuckbunny-720p tearsofsteel-1080p bigbuckbunny-1080p bigbuckbunny-480p \
-    openal-soft dleyna-core dleyna-renderer dleyna-server dleyna-connector-dbus \
-    alsa-equal libdvdnav libmusicbrainz tinyalsa \
-    fluidsynth cdparanoia vorbis-tools tremor caps libao libavc1394 \
-    opusfile gerbera libdvdcss webrtc-audio-processing \
-    rtmpdump libopenmpt schroedinger mpd mpc libmpdclient \
-    ncmpc libmpd dcadec libiec61883 \
-    ${@bb.utils.contains("DISTRO_FEATURES", "pam", "", "", d)} \
-    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "minidlna vlc", "", d)} \
-    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "vo-aacenc sox libde265", "", d)} \
-    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "streamripper", "", d)} \
-    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "openh264 opencore-amr faac vo-amrwbenc", "", d)} \
-    "
+    alsa-equal \
+    caps \
+    cdparanoia \
+    dcadec \
+    dleyna-connector-dbus \
+    dleyna-core \
+    dleyna-renderer \
+    dleyna-server \
+    dvb-apps \
+    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "faac", "", d)} \
+    fdk-aac \
+    gerbera \
+    libao \
+    libavc1394 \
+    libdc1394 \
+    libdvbpsi \
+    libdvdnav \
+    libiec61883 \
+    fluidsynth \
+    libmusicbrainz \
+    libmpdclient \
+    mpc \
+    mpd \
+    ncmpc \
+    libmpd \
+    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "opencore-amr vo-aacenc vo-amrwbenc", "", d)} \
+    gst-shark \
+    gstd \
+    rtmpdump \
+    bigbuckbunny-1080p \
+    bigbuckbunny-480p \
+    bigbuckbunny-720p \
+    tearsofsteel-1080p \
+    schroedinger \
+    projucer \
+    libcamera \
+    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "libde265 openh264", "", d)} \
+    vorbis-tools \
+    libdvbcsa \
+    libopenmpt \
+    mimic \
+    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "minidlna", "", d)} \
+    mycroft \
+    openal-soft \
+    opusfile \
+    libdvdcss \
+    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "vlc", "", d)} \
+    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "sox streamripper", "", d)} \
+    tinyalsa \
+    tremor \
+    webrtc-audio-processing \
+    ${@bb.utils.contains_any("TRANSLATED_TARGET_ARCH", "i586 x86-64", "x265", "", d)} \
+"
+RDEPENDS_packagegroup-meta-multimedia_remove_libc-musl = "projucer"
 
 RDEPENDS_packagegroup-meta-multimedia-connectivity = "\
-    rygel gupnp gupnp-igd gssdp gupnp-dlna gupnp-av libupnp \
+    gssdp \
+    gupnp-av \
+    gupnp-dlna \
+    gupnp-igd \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gupnp-tools", "", d)} \
-    "
-
+    gupnp \
+    libupnp \
+    rygel \
+"
 RDEPENDS_packagegroup-meta-multimedia-dvb = "\
-    oscam "
+    oscam \
+    tvheadend \
+"
 
 RDEPENDS_packagegroup-meta-multimedia-mkv = "\
-    libmatroska libebml \
-    "
+    libebml \
+    libmatroska \
+"
 
 RDEPENDS_packagegroup-meta-multimedia-support = "\
-    libmediaart libmediaart-2.0 gst-instruments libsrtp crossguid \
-    "
+    crossguid \
+    libmediaart-2.0 \
+    libmediaart \
+    gst-instruments \
+    libsrtp \
+"
+# devel headers/libraries only packages
+# libsquish
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
index d026c69..2f1fda3 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
@@ -10,7 +10,7 @@
 
 DEPENDS = "orc-native orc"
 
-SRC_URI = "http://www.diracvideo.org/download/schroedinger/${BP}.tar.gz \
+SRC_URI = "https://download.videolan.org/contrib/${BPN}/${BP}.tar.gz \
            file://configure.ac.patch"
 
 SRC_URI[md5sum] = "da6af08e564ca1157348fb8d92efc891"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/autossh/autossh_1.4g.bb b/meta-openembedded/meta-networking/recipes-connectivity/autossh/autossh_1.4g.bb
index a84fd9a..9b69601 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/autossh/autossh_1.4g.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/autossh/autossh_1.4g.bb
@@ -8,7 +8,7 @@
 SRC_URI[md5sum] = "2b804bc1bf6d2f2afaa526d02df7c0a2"
 SRC_URI[sha256sum] = "5fc3cee3361ca1615af862364c480593171d0c54ec156de79fc421e31ae21277"
 
-RDEPENDS_${PN} = "openssh"
+RDEPENDS_${PN} = "ssh"
 
 CFLAGS_prepend = "-I${WORKDIR}/build "
 
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/bearssl/bearssl/0001-make-Pass-LDFLAGS-when-building-shared-objects.patch b/meta-openembedded/meta-networking/recipes-connectivity/bearssl/bearssl/0001-make-Pass-LDFLAGS-when-building-shared-objects.patch
new file mode 100644
index 0000000..3b341e0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/bearssl/bearssl/0001-make-Pass-LDFLAGS-when-building-shared-objects.patch
@@ -0,0 +1,32 @@
+From 9515448761739d6186e7d07da5b47e368753528c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 1 Sep 2020 11:34:33 -0700
+Subject: [PATCH] make: Pass LDFLAGS when building shared objects
+
+OE passes flags like hash-style via LDFLAGS which alters the linker
+defaults, its important to have LDFLAGS in link step even if compiler
+driver is used to do linking
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ mk/Rules.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/mk/Rules.mk b/mk/Rules.mk
+index b480bd6..db65125 100644
+--- a/mk/Rules.mk
++++ b/mk/Rules.mk
+@@ -344,7 +344,7 @@ $(BEARSSLLIB): $(OBJDIR) $(OBJ)
+ 	$(AR) $(ARFLAGS) $(AROUT)$(BEARSSLLIB) $(OBJ)
+ 
+ $(BEARSSLDLL): $(OBJDIR) $(OBJ)
+-	$(LDDLL) $(LDDLLFLAGS) $(LDDLLOUT)$(BEARSSLDLL) $(OBJ)
++	$(LDDLL) $(LDDLLFLAGS) $(LDFLAGS) $(LDDLLOUT)$(BEARSSLDLL) $(OBJ)
+ 
+ $(BRSSL): $(BEARSSLLIB) $(OBJBRSSL)
+ 	$(LD) $(LDFLAGS) $(LDOUT)$(BRSSL) $(OBJBRSSL) $(BEARSSLLIB)
+-- 
+2.28.0
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/bearssl/bearssl_0.6.bb b/meta-openembedded/meta-networking/recipes-connectivity/bearssl/bearssl_0.6.bb
index a0f64e9..1102bb9 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/bearssl/bearssl_0.6.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/bearssl/bearssl_0.6.bb
@@ -18,6 +18,8 @@
 
 SECTION = "libs"
 
+inherit lib_package
+
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=1fc37e1037ae673975fbcb96a98f7191"
 
@@ -25,6 +27,7 @@
 SRC_URI = "git://www.bearssl.org/git/BearSSL;protocol=https;nobranch=1 \
 	   file://0001-conf-Unix.mk-remove-fixed-command-definitions.patch \
 	   file://0002-test-test_x509.c-fix-potential-overflow-issue.patch \
+           file://0001-make-Pass-LDFLAGS-when-building-shared-objects.patch \
 	   "
 
 # without compile errors like 
@@ -33,3 +36,11 @@
 
 S = "${WORKDIR}/git"
 B = "${S}"
+
+do_install() {
+    mkdir -p ${D}/${bindir} ${D}/${libdir}
+    install -m 0644 ${B}/build/brssl ${D}/${bindir}
+    install -m 0644 ${B}/build/libbearssl.so ${D}/${libdir}/libbearssl.so.6.0.0
+    ln -s libbearssl.so.6.0.0 ${D}/${libdir}/libbearssl.so.6
+    ln -s libbearssl.so.6.0.0 ${D}/${libdir}/libbearssl.so
+}
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/dhcpcd_9.1.4.bb b/meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/dhcpcd_9.1.4.bb
deleted file mode 100644
index defd342..0000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/dhcpcd_9.1.4.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SECTION = "console/network"
-SUMMARY = "dhcpcd - a DHCP client"
-DESCRIPTION = "dhcpcd runs on your machine and silently configures your \
-               computer to work on the attached networks without trouble \
-               and mostly without configuration."
-
-HOMEPAGE = "http://roy.marples.name/projects/dhcpcd/"
-
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=9674cc803c5d71306941e6e8b5c002f2"
-
-UPSTREAM_CHECK_URI = "https://roy.marples.name/downloads/dhcpcd/"
-
-SRC_URI = "http://roy.marples.name/downloads/${BPN}/${BPN}-${PV}.tar.xz \
-           file://0001-remove-INCLUDEDIR-to-prevent-build-issues.patch"
-
-SRC_URI[sha256sum] = "5fe133e5497d8af6d26bd6e6b8dd48ab12d124d6cc4cefe6de6536ff97f76820"
-
-inherit pkgconfig autotools-brokensep
-
-PACKAGECONFIG ?= "udev ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
-
-PACKAGECONFIG[udev] = "--with-udev,--without-udev,udev,udev"
-PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6"
-
-EXTRA_OECONF = "--enable-ipv4"
-
-FILES_${PN}-dbg += "${libdir}/dhcpcd/dev/.debug"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/files/0001-remove-INCLUDEDIR-to-prevent-build-issues.patch b/meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/files/0001-remove-INCLUDEDIR-to-prevent-build-issues.patch
deleted file mode 100644
index 37d2344..0000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/files/0001-remove-INCLUDEDIR-to-prevent-build-issues.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From aa9e3982c1e75ad49945a62f5e262279c7a905a4 Mon Sep 17 00:00:00 2001
-From: Stefano Cappa <stefano.cappa.ks89@gmail.com>
-Date: Sun, 13 Jan 2019 01:50:52 +0100
-Subject: [PATCH] remove INCLUDEDIR to prevent build issues
-
-Upstream-Status: Pending
-
-Signed-off-by: Stefano Cappa <stefano.cappa.ks89@gmail.com>
----
- configure | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/configure b/configure
-index 6c81e0db..32dea2b4 100755
---- a/configure
-+++ b/configure
-@@ -20,7 +20,6 @@ BUILD=
- HOST=
- HOSTCC=
- TARGET=
--INCLUDEDIR=
- DEBUG=
- FORK=
- STATIC=
-@@ -72,7 +71,6 @@ for x do
- 	--mandir) MANDIR=$var;;
- 	--datadir) DATADIR=$var;;
- 	--with-ccopts|CFLAGS) CFLAGS=$var;;
--	-I|--includedir) INCLUDEDIR="$INCLUDEDIR${INCLUDEDIR:+ }-I$var";;
- 	CC) CC=$var;;
- 	CPPFLAGS) CPPFLAGS=$var;;
- 	PKG_CONFIG) PKG_CONFIG=$var;;
-@@ -309,9 +307,6 @@ if [ -n "$CPPFLAGS" ]; then
- 	echo "CPPFLAGS=" >>$CONFIG_MK
- 	echo "CPPFLAGS+=	$CPPFLAGS" >>$CONFIG_MK
- fi
--if [ -n "$INCLUDEDIR" ]; then
--	echo "CPPFLAGS+=	$INCLUDEDIR" >>$CONFIG_MK
--fi
- if [ -n "$LDFLAGS" ]; then
- 	echo "LDFLAGS=" >>$CONFIG_MK
- 	echo "LDFLAGS+=	$LDFLAGS" >>$CONFIG_MK
--- 
-2.17.2 (Apple Git-113)
-
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/kea/files/0001-remove-AC_TRY_RUN.patch b/meta-openembedded/meta-networking/recipes-connectivity/kea/files/0001-remove-AC_TRY_RUN.patch
deleted file mode 100644
index d7ca9ff..0000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/kea/files/0001-remove-AC_TRY_RUN.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 9d6b8321c5b46199baca907f3d42bdcaaf1958a8 Mon Sep 17 00:00:00 2001
-From: Mingli Yu <mingli.yu@windriver.com>
-Date: Thu, 23 May 2019 23:59:42 -0700
-Subject: [PATCH] remove AC_TRY_RUN
-
-AC_TRY_RUN doesn't work in cross compile env,
-use AC_COMPILE_IFELSE instead to fix below configure
-error:
- | checking for usuable C++11 regex... configure: error: in `/builddir/tmp/work/core2-64-poky-linux/kea/1.5.0-r0/build':
- | configure: error: cannot run test program while cross compiling
-
-Upstream-Status: Inappropriate [oe specific]
-
-Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index c880b77..dd40c7c 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -580,7 +580,7 @@ AC_TRY_COMPILE([
-         AC_MSG_RESULT(no))
- 
- AC_MSG_CHECKING(for usuable C++11 regex)
--AC_TRY_RUN([
-+AC_COMPILE_IFELSE([
- #include <regex>
- #include <iostream>
- int main() {
--- 
-2.21.0
-
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/kea/files/kea-dhcp-ddns.service b/meta-openembedded/meta-networking/recipes-connectivity/kea/files/kea-dhcp-ddns.service
deleted file mode 100644
index 91aa2eb..0000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/kea/files/kea-dhcp-ddns.service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Description=Kea DHCP-DDNS Server
-Wants=network-online.target
-After=network-online.target
-After=time-sync.target
-
-[Service]
-ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/run/kea/
-ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/kea
-ExecStart=@SBINDIR@/kea-dhcp-ddns -c @SYSCONFDIR@/kea/kea-dhcp-ddns.conf
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/kea/files/kea-dhcp4.service b/meta-openembedded/meta-networking/recipes-connectivity/kea/files/kea-dhcp4.service
deleted file mode 100644
index b851ea7..0000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/kea/files/kea-dhcp4.service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Description=Kea DHCPv4 Server
-Wants=network-online.target
-After=network-online.target
-After=time-sync.target
-
-[Service]
-ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/run/kea/
-ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/lib/kea
-ExecStart=@SBINDIR@/kea-dhcp4 -c @SYSCONFDIR@/kea/kea-dhcp4.conf
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/kea/files/kea-dhcp6.service b/meta-openembedded/meta-networking/recipes-connectivity/kea/files/kea-dhcp6.service
deleted file mode 100644
index 0f9f0ef..0000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/kea/files/kea-dhcp6.service
+++ /dev/null
@@ -1,13 +0,0 @@
-[Unit]
-Description=Kea DHCPv6 Server
-Wants=network-online.target
-After=network-online.target
-After=time-sync.target
-
-[Service]
-ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/run/kea/
-ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/lib/kea
-ExecStart=@SBINDIR@/kea-dhcp6 -c @SYSCONFDIR@/kea/kea-dhcp6.conf
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/kea/kea_1.7.7.bb b/meta-openembedded/meta-networking/recipes-connectivity/kea/kea_1.7.7.bb
deleted file mode 100644
index e25f8e6..0000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/kea/kea_1.7.7.bb
+++ /dev/null
@@ -1,67 +0,0 @@
-SUMMARY = "ISC Kea DHCP Server"
-DESCRIPTION = "Kea is the next generation of DHCP software developed by ISC. It supports both DHCPv4 and DHCPv6 protocols along with their extensions, e.g. prefix delegation and dynamic updates to DNS."
-HOMEPAGE = "http://kea.isc.org"
-SECTION = "connectivity"
-LICENSE = "MPL-2.0 & Apache-2.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=68d95543d2096459290a4e6b9ceccffa"
-
-DEPENDS += "kea-native"
-
-SRC_URI = "\
-    http://ftp.isc.org/isc/kea/${PV}/${BP}.tar.gz \
-    file://0001-remove-AC_TRY_RUN.patch \
-    file://kea-dhcp4.service \
-    file://kea-dhcp6.service \
-    file://kea-dhcp-ddns.service \
-"
-SRC_URI[md5sum] = "4f8d1251fd41ef2e822a4eb3f0797d46"
-SRC_URI[sha256sum] = "0bba8b045672884a928ff4b2a8575ac5ba420eb6ba47a9338f1932bc38dcf866"
-
-inherit autotools systemd
-
-SYSTEMD_SERVICE_${PN} = "kea-dhcp4.service kea-dhcp6.service kea-dhcp-ddns.service"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-DEBUG_OPTIMIZATION_remove_mips = " -Og"
-DEBUG_OPTIMIZATION_append_mips = " -O"
-BUILD_OPTIMIZATION_remove_mips = " -Og"
-BUILD_OPTIMIZATION_append_mips = " -O"
-
-DEBUG_OPTIMIZATION_remove_mipsel = " -Og"
-DEBUG_OPTIMIZATION_append_mipsel = " -O"
-BUILD_OPTIMIZATION_remove_mipsel = " -Og"
-BUILD_OPTIMIZATION_append_mipsel = " -O"
-
-do_configure_prepend_class-target() {
-    mkdir -p ${B}/src/lib/log/compiler/
-    ln -sf ${STAGING_BINDIR_NATIVE}/kea-msg-compiler ${B}/src/lib/log/compiler/kea-msg-compiler
-    # replace abs_top_builddir to avoid introducing the build path
-    # don't expand the abs_top_builddir on the target as the abs_top_builddir is meanlingless on the target
-    find ${S} -type f -name *.sh.in | xargs sed -i  "s:@abs_top_builddir@:@abs_top_builddir_placeholder@:g"
-    sed -i "s:@abs_top_srcdir@:@abs_top_srcdir_placeholder@:g" ${S}/src/bin/admin/kea-admin.in
-}
-
-do_install_append_class-target() {
-    install -d ${D}${systemd_system_unitdir}
-    install -m 0644 ${WORKDIR}/kea-dhcp*service ${D}${systemd_system_unitdir}
-    sed -i -e 's,@SBINDIR@,${sbindir},g' -e 's,@BASE_BINDIR@,${base_bindir},g' \
-           -e 's,@LOCALSTATEDIR@,${localstatedir},g' -e 's,@SYSCONFDIR@,${sysconfdir},g' \
-           ${D}${systemd_system_unitdir}/kea-dhcp*service
-}
-
-do_install_append() {
-    rm -rf "${D}${localstatedir}"
-}
-
-PACKAGECONFIG ??= "openssl log4cplus boost"
-
-PACKAGECONFIG[openssl] = "--with-openssl=${STAGING_DIR_TARGET}${prefix},,openssl,openssl"
-PACKAGECONFIG[log4cplus] = "--with-log4cplus=${STAGING_DIR_TARGET}${prefix},,log4cplus,log4cplus"
-PACKAGECONFIG[boost] = "--with-boost-libs=-lboost_system,,boost,boost"
-
-FILES_${PN}-staticdev += "${libdir}/kea/hooks/*.a ${libdir}/hooks/*.a"
-FILES_${PN} += "${libdir}/hooks/*.so"
-
-BBCLASSEXTEND += "native"
-
-PARALLEL_MAKEINST = ""
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.9.1.bb b/meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.9.2.bb
similarity index 89%
rename from meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.9.1.bb
rename to meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.9.2.bb
index 79a380a..e6240a5 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.9.1.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.9.2.bb
@@ -7,8 +7,8 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
 
 SRC_URI = "http://lftp.yar.ru/ftp/lftp-${PV}.tar.bz2"
-SRC_URI[md5sum] = "19ce64012bc722ad61667372fa262382"
-SRC_URI[sha256sum] = "a692fd081c19e2cc045869ab721a4fb3d7571040849a4406c4042f735232414c"
+SRC_URI[md5sum] = "42ec1793c386702bc2734ffbc8a5cff1"
+SRC_URI[sha256sum] = "8a07cbf4df09b107fe3fc41d133ee2f6cea6ef4c33ccf06c8448ad058cd96b7e"
 
 inherit autotools gettext pkgconfig
 
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.12.bb b/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.14.bb
similarity index 89%
rename from meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.12.bb
rename to meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.14.bb
index 5b27cfe..df48782 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.12.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.14.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=0036c1b155f4e999f3e0a373490b5db9"
 
 SRC_URI = "git://github.com/dugsong/libdnet.git;nobranch=1"
-SRCREV = "12fca29a6d4e99d1b923d6820887fe7b24226904"
+SRCREV = "3e782472d2a58d5e1b94d04eda4a364c2d257600"
 
 UPSTREAM_CHECK_GITTAGREGEX = "libdnet-(?P<pver>\d+(\.\d+)+)"
 
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_1.6.11.bb b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_1.6.12.bb
similarity index 95%
rename from meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_1.6.11.bb
rename to meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_1.6.12.bb
index 3690346..36bfe09 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_1.6.11.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_1.6.12.bb
@@ -20,8 +20,8 @@
            file://install-protocol.patch \
 "
 
-SRC_URI[md5sum] = "35925c7ccd1bac87e4201b635ffa66a1"
-SRC_URI[sha256sum] = "b02d8f1368c40d5779ee125c37daf9003608eb47d7fbb04c5b938c76c1230a1f"
+SRC_URI[md5sum] = "beb8d76d6e45f1e66d711006082a631f"
+SRC_URI[sha256sum] = "548d73d19fb787dd0530334e398fd256ef3a581181678488a741a995c4f007fb"
 
 inherit systemd update-rc.d useradd cmake
 
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.22.14.bb b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.22.14.bb
index 4e4217c..ac2282e 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.22.14.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.22.14.bb
@@ -74,7 +74,7 @@
 PACKAGECONFIG[modemmanager] = "--with-modem-manager-1=yes,--with-modem-manager-1=no,modemmanager"
 PACKAGECONFIG[ppp] = "--enable-ppp,--disable-ppp,ppp,ppp"
 # Use full featured dhcp client instead of internal one
-PACKAGECONFIG[dhclient] = "--with-dhclient=${base_sbindir}/dhclient,,,dhcp-client"
+PACKAGECONFIG[dhclient] = "--with-dhclient=${base_sbindir}/dhclient,,,dhcpcd"
 PACKAGECONFIG[dnsmasq] = "--with-dnsmasq=${bindir}/dnsmasq"
 PACKAGECONFIG[nss] = "--with-crypto=nss,,nss"
 PACKAGECONFIG[resolvconf] = "--with-resolvconf=${base_sbindir}/resolvconf,,,resolvconf"
diff --git a/meta-openembedded/meta-networking/recipes-core/packagegroups/packagegroup-meta-networking.bb b/meta-openembedded/meta-networking/recipes-core/packagegroups/packagegroup-meta-networking.bb
index 1e10c30..0e668f7 100644
--- a/meta-openembedded/meta-networking/recipes-core/packagegroups/packagegroup-meta-networking.bb
+++ b/meta-openembedded/meta-networking/recipes-core/packagegroups/packagegroup-meta-networking.bb
@@ -31,101 +31,231 @@
     "
 
 RDEPENDS_packagegroup-meta-networking-connectivity = "\
-    openconnect ez-ipupdate mosquitto sethdlc crda \
-    dibbler-server dibbler-client dibbler-requestor dibbler-relay \
-    libdnet ufw civetweb freeradius kea daq \
-    mbedtls relayd snort dhcpcd rdate vlan vpnc \
-    inetutils wolfssl lftp miniupnpd networkmanager \
-    networkmanager-openvpn rdist nanomsg python3-networkmanager \
+    crda \
+    daq \
+    adcli \
     ${@bb.utils.contains("DISTRO_FEATURES", "bluetooth x11", "blueman", "", d)} \
+    cannelloni \
+    civetweb \
+    libdnet \
+    dibbler-client \
+    dibbler-relay \
+    dibbler-server \
+    relayd \
+    lftp \
+    sethdlc \
+    snort \
+    ufw \
+    vlan \
+    vpnc \
+    ez-ipupdate \
+    firewalld \
+    freeradius \
+    mbedtls \
+    miniupnpd \
+    mosquitto \
+    nanomsg \
+    nng \
+    netplan \
+    networkmanager-openvpn \
+    networkmanager \
+    openconnect \
+    python3-networkmanager \
+    rdate \
+    rdist \
     ${@bb.utils.contains("DISTRO_FEATURES", "pam", "samba", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "pam", "samba", "", d)} \
-    "
+    wolfssl \
+    autossh \
+    bearssl \
+"
 
 RDEPENDS_packagegroup-meta-networking-connectivity_remove_libc-musl = "rdist"
 
 RDEPENDS_packagegroup-meta-networking-daemons = "\
-    ippool radvd autofs keepalived proftpd openhpi lldpd \
-    ptpd igmpproxy opensaf squid \
-    atftp postfix iscsi-initiator-utils vsftpd cyrus-sasl \
-    pure-ftpd vblade tftp-hpa ncftp \
+    atftp \
+    autofs \
+    cyrus-sasl \
+    ippool \
+    iscsi-initiator-utils \
+    lldpd \
+    ncftp \
+    igmpproxy \
+    postfix \
+    proftpd \
+    ptpd \
+    pure-ftpd \
+    radvd \
+    squid \
+    tftp-hpa \
+    tftp-hpa-server \
+    vblade \
+    vsftpd \
+    keepalived \
     ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "networkd-dispatcher", "", d)} \
-    "
+    openhpi \
+    opensaf \
+"
 
 RDEPENDS_packagegroup-meta-networking-daemons_remove_libc-musl = "opensaf"
 
 RDEPENDS_packagegroup-meta-networking-devtools = "\
     python3-ldap \
-    "
+"
 
 RDEPENDS_packagegroup-meta-networking-extended = "\
     corosync \
     ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "dlm", "", d)} \
-    "
+    kronosnet \
+"
 
 RDEPENDS_packagegroup-meta-networking-filter = "\
-    ebtables conntrack-tools libnetfilter-queue \
-    libnetfilter-conntrack libnetfilter-cthelper libnetfilter-acct \
-    libnetfilter-cttimeout libnetfilter-log nfacct \
-    arno-iptables-firewall libnftnl nftables \
+    libnftnl \
+    conntrack-tools \
+    ebtables \
+    libnetfilter-acct \
+    libnetfilter-conntrack \
+    libnetfilter-cthelper \
+    libnetfilter-cttimeout \
+    libnetfilter-log \
+    libnetfilter-queue \
     libnfnetlink \
-    " 
+    arno-iptables-firewall \
+    nfacct \
+    nftables \
+"
 
 RDEPENDS_packagegroup-meta-networking-irc = "\
+    weechat \
     znc \
-    "
+"
 
 RDEPENDS_packagegroup-meta-networking-kernel = "\
-    wireguard-module wireguard-tools \
-    "
+    wireguard-tools \
+"
 
 RDEPENDS_packagegroup-meta-networking-netkit = "\
-    netkit-rwho-client netkit-rwho-server netkit-rsh-client netkit-rsh-server \
-    netkit-telnet netkit-tftp-client netkit-tftp-server \
-    netkit-ftp netkit-rpc \
+    netkit-rwho-client \
+    netkit-rwho-server \
+    netkit-rsh-client \
+    netkit-rsh-server \
+    netkit-telnet \
+    netkit-tftp-client \
+    netkit-tftp-server \
+    netkit-ftp \
+    netkit-rpc \
     "
 
 RDEPENDS_packagegroup-meta-networking-netkit_remove_libc-musl = " \
     netkit-rsh-client netkit-rsh-server netkit-telnet"
 
 RDEPENDS_packagegroup-meta-networking-protocols = "\
-    tsocks freediameter xl2tpd babeld mdns net-snmp \
-    quagga pptp-linux zeroconf nopoll openflow rp-pppoe \
-    radiusclient-ng openl2tp usrsctp \
+    babeld \
     ${@bb.utils.contains("DISTRO_FEATURES", "pam", "dante", "", d)} \
-    "
+    freediameter \
+    net-snmp \
+    openflow \
+    openflow \
+    openl2tp \
+    mdns \
+    nopoll \
+    quagga \
+    radiusclient-ng \
+    tsocks \
+    openlldp \
+    zeroconf \
+    pptp-linux \
+    rp-pppoe \
+    usrsctp \
+    xl2tpd \
+"
 
 RDEPENDS_packagegroup-meta-networking-protocols_remove_libc-musl = "mdns"
 
 RDEPENDS_packagegroup-meta-networking-support = "\
-    ncp ndisc6 mtr tinyproxy ssmping ntp \
-    wpan-tools bridge-utils ifenslave celt051 pimd \
-    nbd-client nbd-server nbd-trdump \
-    phytool fwknop htpdate tcpreplay \
-    traceroute geoip-perl geoip geoipupdate esmtp \
-    libtdb netcf dnsmasq curlpp openipmi drbd-utils \
-    tunctl dovecot ipvsadm stunnel chrony spice-protocol \
-    usbredir ntop wireshark tnftp lksctp-tools \
-    cim-schema-docs cim-schema-final cim-schema-exper \
-    libmemcached smcroute libtevent ipcalc uftp \
-    ntimed linux-atm ssmtp openvpn rdma-core \
-    iftop aoetools tcpslice tcpdump libtalloc memcached nuttcp netcat \
-    netcat-openbsd fetchmail yp-tools ypbind-mt yp-tools \
-    arptables macchanger nghttp2 strongswan fping \
-    libesmtp cifs-utils open-isns \
+    aoetools \
+    arptables \
+    bridge-utils \
+    celt051 \
+    cim-schema-docs \
+    cim-schema-final \
+    cifs-utils \
+    dnsmasq \
+    curlpp \
+    drbd-utils \
+    dovecot \
+    fping \
+    esmtp \
+    fetchmail \
+    geoip-perl \
+    geoip \
+    geoipupdate \
+    fwknop \
+    htpdate \
+    iftop \
+    ifmetric \
+    ipvsadm \
+    libesmtp \
     ${@bb.utils.contains("DISTRO_FEATURES", "pam", "libldb", "", d)} \
+    libmemcached \
+    libtalloc \
+    ipcalc \
+    libtevent \
+    linux-atm \
+    lksctp-tools \
+    memcached \
+    ifenslave \
+    netcat \
+    netcat-openbsd \
+    libtdb \
     ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "non-commercial", "netperf", "", d)} \
-    ${@bb.utils.contains_any("TRANSLATED_TARGET_ARCH", "i586 x86-64", "spice", "", d)} \
-    "
-
-
-RDEPENDS_packagegroup-meta-networking-support_remove_mipsarch = "spice-protocol"
-RDEPENDS_packagegroup-meta-networking-support_remove_mips64 = "spice-protocol"
-RDEPENDS_packagegroup-meta-networking-support_remove_mips64el = "spice-protocol"
-RDEPENDS_packagegroup-meta-networking-support_remove_powerpc = "spice-protocol"
-RDEPENDS_packagegroup-meta-networking-support_remove_riscv64 = "spice-protocol"
-RDEPENDS_packagegroup-meta-networking-support_remove_riscv32 = "spice-protocol"
-RDEPENDS_packagegroup-meta-networking-support_remove_armv5 = "spice-protocol"
-RDEPENDS_packagegroup-meta-networking-support_remove_aarch64 = "spice-protocol memcached"
+    yp-tools \
+    ypbind-mt \
+    yp-tools \
+    mtr \
+    ntp ntpdate sntp ntpdc ntpq ntp-tickadj ntp-utils \
+    nbd-client \
+    nbd-server \
+    nbd-trdump \
+    openvpn \
+    macchanger \
+    nbdkit \
+    ssmping \
+    libowfat \
+    ncp \
+    strongswan \
+    ndisc6 \
+    tcpdump \
+    tcpslice \
+    netcf \
+    nghttp2 \
+    tnftp \
+    traceroute \
+    tunctl \
+    wireshark \
+    ntop \
+    nuttcp \
+    nvmetcli \
+    open-isns \
+    openipmi \
+    phytool \
+    pimd \
+    ruli \
+    smcroute \
+    ${@bb.utils.contains_any("TRANSLATED_TARGET_ARCH", "i586 x86-64", "spice-protocol spice", "", d)} \
+    usbredir \
+    ssmtp \
+    stunnel \
+    rdma-core \
+    tcpreplay \
+    tinyproxy \
+    uftp \
+    unbound \
+    wpan-tools \
+    ettercap \
+"
+RDEPENDS_packagegroup-meta-networking-support_remove_mipsarch = "memcached"
 
 EXCLUDE_FROM_WORLD = "1"
+# Empty packages, only devel headers and libs
+# nngpp
+# Use ntp and not chrony or ntimed
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/squid_4.12.bb b/meta-openembedded/meta-networking/recipes-daemons/squid/squid_4.13.bb
similarity index 96%
rename from meta-openembedded/meta-networking/recipes-daemons/squid/squid_4.12.bb
rename to meta-openembedded/meta-networking/recipes-daemons/squid/squid_4.13.bb
index 6e49790..873d093 100644
--- a/meta-openembedded/meta-networking/recipes-daemons/squid/squid_4.12.bb
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/squid_4.13.bb
@@ -28,8 +28,8 @@
 
 SRC_URI_remove_toolchain-clang = "file://0001-configure-Check-for-Wno-error-format-truncation-comp.patch"
 
-SRC_URI[md5sum] = "5d058f7f8f1db9fa4ce3db910a008b0e"
-SRC_URI[sha256sum] = "eae0ad993921e472ce36cce34674c47a224fc2868b65ef0c4b41b2f5f18378a0"
+SRC_URI[md5sum] = "31e524a416715d6bfef30e072d2ca076"
+SRC_URI[sha256sum] = "d09d3c31e3a7d158bda75501e763bd1cd3c3a99f5af6781ec1fd30eed2f771ed"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://errors/COPYRIGHT;md5=4c3268f394af77fbbf541875cef96a6c \
diff --git a/meta-openembedded/meta-networking/recipes-irc/weechat/weechat_2.8.bb b/meta-openembedded/meta-networking/recipes-irc/weechat/weechat_2.9.bb
similarity index 91%
rename from meta-openembedded/meta-networking/recipes-irc/weechat/weechat_2.8.bb
rename to meta-openembedded/meta-networking/recipes-irc/weechat/weechat_2.9.bb
index cdfb1a9..512ed0e 100644
--- a/meta-openembedded/meta-networking/recipes-irc/weechat/weechat_2.8.bb
+++ b/meta-openembedded/meta-networking/recipes-irc/weechat/weechat_2.9.bb
@@ -9,13 +9,14 @@
 SRC_URI = "https://weechat.org/files/src/weechat-${PV}.tar.xz \
            file://0001-use-pkg-config-for-gcrypt-instead.patch \
            "
-SRC_URI[sha256sum] = "553ea295edad3b03cf88e6029c21e7bde32ff1cc026d35386ba9da3e56a6018c"
+
+SRC_URI[sha256sum] = "eab406c385c3a10d0107ddc3aac6596ae8c59af99e9158c6d769e90ec9adfa0e"
 
 inherit cmake pkgconfig
 
 PACKAGECONFIG ??= " ncurses python"
 PACKAGECONFIG[ncurses] = "-DENABLE_NCURSES=ON,-DENABLE_NCURSES=OFF,ncurses"
-PACKAGECONFIG[python] = "-DENABLE_PYTHON=ON,-DENABLE_PYTHON=OFF,python3"
+PACKAGECONFIG[python] = "-DENABLE_PYTHON=ON,-DENABLE_PYTHON=OFF,python3,python3"
 
 EXTRA_OECMAKE_append = " -DENABLE_PHP=OFF -DENABLE_TCL=OFF -DENABLE_LUA=OFF -DENABLE_JAVASCRIPT=OFF -DENABLE_RUBY=OFF -DENABLE_GUILE=OFF -DENABLE_PERL=OFF -DENABLE_ASPELL=ON"
 
diff --git a/meta-openembedded/meta-networking/recipes-irc/znc/znc_1.7.5.bb b/meta-openembedded/meta-networking/recipes-irc/znc/znc_1.8.1.bb
similarity index 94%
rename from meta-openembedded/meta-networking/recipes-irc/znc/znc_1.7.5.bb
rename to meta-openembedded/meta-networking/recipes-irc/znc/znc_1.8.1.bb
index a3d4b7c..c54e617 100644
--- a/meta-openembedded/meta-networking/recipes-irc/znc/znc_1.7.5.bb
+++ b/meta-openembedded/meta-networking/recipes-irc/znc/znc_1.8.1.bb
@@ -8,7 +8,7 @@
 SRC_URI = "git://github.com/znc/znc.git;name=znc \
            git://github.com/jimloco/Csocket.git;destsuffix=git/third_party/Csocket;name=Csocket \
           "
-SRCREV_znc = "c7f72f8bc800115ac985e7e13eace78031cb1b50"
+SRCREV_znc = "0a3909beaa15e0da499473d6d041e5b75c14e885"
 SRCREV_Csocket = "e8d9e0bb248c521c2c7fa01e1c6a116d929c41b4"
 
 # This constructs a composite revision based on multiple SRCREV's.
diff --git a/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-module_1.0.20200712.bb b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-module_1.0.20200712.bb
index bc94e29..3a83e48 100644
--- a/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-module_1.0.20200712.bb
+++ b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-module_1.0.20200712.bb
@@ -33,3 +33,8 @@
     install -m 0644 ${MODULE_NAME}.ko \
     ${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME}/${MODULE_NAME}.ko
 }
+
+# WireGuard has been merged into Linux kernel >= 5.6 and therefore this compatibility module is no longer required.
+# OE-core post dunfell has moved to use kernel 5.8 which now means we cant build this module in world builds
+# for reference machines e.g. qemu
+EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20200513.bb b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20200513.bb
index c24e343..31b33a0 100644
--- a/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20200513.bb
+++ b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20200513.bb
@@ -5,7 +5,7 @@
 
 inherit bash-completion systemd pkgconfig
 
-DEPENDS += "wireguard-module libmnl"
+DEPENDS += "libmnl"
 
 do_install () {
     oe_runmake DESTDIR="${D}" PREFIX="${prefix}" SYSCONFDIR="${sysconfdir}" \
@@ -22,4 +22,5 @@
     ${bindir} \
 "
 
-RDEPENDS_${PN} = "wireguard-module bash"
+RDEPENDS_${PN} = "bash"
+RRECOMMENDS_${PN} = "kernel-module-wireguard"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb
index cf306ec..628047e 100644
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb
@@ -16,7 +16,7 @@
 SRC_URI[patch31.md5sum] = "93d71e28ce70df69e080c7f90da63cac"
 SRC_URI[patch31.sha256sum] = "4edd46a32d70daa7ba00f0ebf0118dc5d17dff23d6e46aa21a2722be2e22d1c1"
 
-inherit autotools-brokensep
+inherit autotools-brokensep update-alternatives
 
 CLEANBROKEN = "1"
 
@@ -47,3 +47,7 @@
             ${bindir}/.debug"
 
 RDEPENDS_${PN} = "readline"
+
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE_${PN} = "ftp"
+ALTERNATIVE_LINK_NAME[ftp] = "${bindir}/ftp"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb
index ebe867d..a787e52 100644
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb
@@ -11,6 +11,9 @@
            "
 SRC_URI[md5sum] = "67212720482ea1aea9182a98653a9642"
 SRC_URI[sha256sum] = "421d63b414162237a72867061f1bd3e3752a0d962cd5d30b5e933ddad8a14d3b"
+
+inherit update-alternatives
+
 CFLAGS += "-I${STAGING_INCDIR}/tirpc"
 LIBS += "-ltirpc"
 
@@ -42,3 +45,7 @@
     'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
     'MANDIR=${mandir}' install
 }
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE_${PN} = "rpcinfo"
+ALTERNATIVE_LINK_NAME[rpcinfo] = "${bindir}/rpcinfo"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb
index ad543b0..3085823 100644
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb
@@ -82,8 +82,7 @@
     mkdir -p -m 755 ${D}${localstatedir}/spool/rwho
     chown -R rwhod ${D}${localstatedir}/spool/rwho
 }
-
-pkg_postinst_${PN}-server() {
+pkg_postinst_ontarget_${PN}-server() {
     ${sysconfdir}/init.d/rwhod start
 }
 
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb
index 92c13e8..28e0164 100644
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb
@@ -16,7 +16,7 @@
 SRC_URI[patch18.md5sum] = "cb29e7a33dd85105ba6e6ec4f971e42c"
 SRC_URI[patch18.sha256sum] = "092437d27b4fa88c044ef6290372fee5ce06d223607f0e22a6e527065c8930e7"
 
-inherit autotools-brokensep
+inherit autotools-brokensep update-alternatives
 
 do_configure () {
     ./configure --prefix=${prefix}
@@ -53,3 +53,7 @@
     ${bindir}/.debug ${sbindir}/.debug"
 
 RDEPENDS_${PN}-server = "tcp-wrappers xinetd"
+
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE_${PN}-client = "tftp"
+ALTERNATIVE_LINK_NAME[tftp] = "${bindir}/tftp"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-Create-subroutine-for-cleaning-recent-interfaces.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-Create-subroutine-for-cleaning-recent-interfaces.patch
index 692c344..f8efc10 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-Create-subroutine-for-cleaning-recent-interfaces.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-Create-subroutine-for-cleaning-recent-interfaces.patch
@@ -1,7 +1,7 @@
-From 89ea6ac4a8840e8c2be0140a9805c6522c6c5280 Mon Sep 17 00:00:00 2001
+From 6d90f9fdaf008f5c3b8fd8d91594fa1461437888 Mon Sep 17 00:00:00 2001
 From: Nate Karstens <nate.karstens@garmin.com>
 Date: Wed, 28 Jun 2017 17:30:00 -0500
-Subject: [PATCH 01/11] Create subroutine for cleaning recent interfaces
+Subject: [PATCH] Create subroutine for cleaning recent interfaces
 
 Moves functionality for cleaning the list of recent
 interfaces into its own subroutine.
@@ -10,14 +10,14 @@
 
 Signed-off-by: Nate Karstens <nate.karstens@garmin.com>
 ---
- mDNSPosix/mDNSPosix.c | 24 ++++++++++++++----------
- 1 file changed, 14 insertions(+), 10 deletions(-)
+ mDNSPosix/mDNSPosix.c | 23 ++++++++++++++---------
+ 1 file changed, 14 insertions(+), 9 deletions(-)
 
 diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 0e10bd5..ffc9696 100644
+index a63cd19..7aeee7b 100755
 --- a/mDNSPosix/mDNSPosix.c
 +++ b/mDNSPosix/mDNSPosix.c
-@@ -856,6 +856,19 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf
+@@ -1199,6 +1199,19 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf
      return err;
  }
  
@@ -37,11 +37,10 @@
  // Creates a PosixNetworkInterface for the interface whose IP address is
  // intfAddr and whose name is intfName and registers it with mDNS core.
  mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct sockaddr *intfMask, const char *intfName, int intfIndex)
-@@ -1010,16 +1023,7 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
- 
+@@ -1388,15 +1401,7 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
      // Clean up.
-     if (intfList != NULL) free_ifi_info(intfList);
--
+     if (intfList != NULL) freeifaddrs(intfList);
+ 
 -    // Clean up any interfaces that have been hanging around on the RecentInterfaces list for more than a minute
 -    PosixNetworkInterface **ri = &gRecentInterfaces;
 -    const mDNSs32 utc = mDNSPlatformUTC();
@@ -56,5 +55,5 @@
      return err;
  }
 -- 
-2.17.1
+2.20.1
 
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-mdns-include-stddef.h-for-NULL.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-mdns-include-stddef.h-for-NULL.patch
new file mode 100644
index 0000000..3e9be7d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-mdns-include-stddef.h-for-NULL.patch
@@ -0,0 +1,40 @@
+From d744609c56f9872e5aa71707f1f71feec9867f51 Mon Sep 17 00:00:00 2001
+From: Mikko Rapeli <mikko.rapeli@bmw.de>
+Date: Tue, 14 Jul 2020 16:36:29 +0000
+Subject: [PATCH 1/2] mdns: include <stddef.h> for NULL
+
+Fixes build error with version 1096.40.7:
+
+../mDNSCore/mDNS.c:11385:26: error: 'NULL' undeclared (first use in this function)
+11385 |     const char *reason = NULL;
+      |                          ^~~~
+../mDNSCore/mDNS.c:56:1: note: 'NULL' is defined in header '<stddef.h>'; did you forget to '#include <stddef.h>'?
+   55 | #include "dns_sd_internal.h"
+  +++ |+#include <stddef.h>
+   56 |
+../mDNSCore/mDNS.c:11385:26: note: each undeclared identifier is reported only once for each function it appears in
+11385 |     const char *reason = NULL;
+      |                          ^~~~
+
+Upstream-Status: Pending
+
+Signed-off-by: Mikko Rapeli <mikko.rapeli@bmw.de>
+---
+ mDNSCore/mDNS.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/mDNSCore/mDNS.c b/mDNSCore/mDNS.c
+index 2fbea04..d4b9af5 100755
+--- a/mDNSCore/mDNS.c
++++ b/mDNSCore/mDNS.c
+@@ -23,6 +23,7 @@
+  * routines, or types (which may or may not be present on any given platform).
+  */
+ 
++#include <stddef.h> /* for NULL */
+ #include "DNSCommon.h"                  // Defines general DNS utility routines
+ #include "uDNS.h"                       // Defines entry points into unicast-specific routines
+ #include "nsec.h"
+-- 
+2.20.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0002-mdns-cross-compilation-fixes-for-bitbake.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0002-mdns-cross-compilation-fixes-for-bitbake.patch
new file mode 100644
index 0000000..33590ff
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0002-mdns-cross-compilation-fixes-for-bitbake.patch
@@ -0,0 +1,145 @@
+From 72405143f9d16514e70b88bc4843c9634b88036a Mon Sep 17 00:00:00 2001
+From: Brendan Le Foll <brendan.le.foll@intel.com>
+Date: Tue, 3 Mar 2015 11:42:57 +0000
+Subject: [PATCH 2/2] mdns: cross compilation fixes for bitbake
+
+Fixes several build errors when incorrect compiler or
+compiler flags are used.
+
+Upstream-Status: Inappropriate [OE-specific]
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+Signed-off-by: Mikko Rapeli <mikko.rapeli@bmw.de>
+---
+ mDNSPosix/Makefile | 44 ++++++++++++++++++++------------------------
+ 1 file changed, 20 insertions(+), 24 deletions(-)
+
+diff --git a/mDNSPosix/Makefile b/mDNSPosix/Makefile
+index 78222e0..18a3af5 100755
+--- a/mDNSPosix/Makefile
++++ b/mDNSPosix/Makefile
+@@ -50,6 +50,7 @@
+ 
+ LIBVERS = 1
+ 
++POSIXDIR = ../mDNSPosix
+ COREDIR = ../mDNSCore
+ SHAREDDIR ?= ../mDNSShared
+ DSODIR ?= ../DSO
+@@ -62,16 +63,16 @@ else ifeq ($(SYSTEM), Linux)
+   os=linux
+ endif
+ 
+-CC = cc
+-BISON = bison
+-FLEX = flex
+-ST = strip
+-LD = ld
++CC ?= cc
++BISON ?= bison
++FLEX ?= flex
++ST ?= strip
++LD ?= ld
+ SOOPTS = -shared
+ CP = cp
+ RM = rm
+ LN = ln -s -f
+-CFLAGS_COMMON = -I$(COREDIR) -I$(SHAREDDIR) -I$(DSODIR) -I$(PROXYDIR) -I$(OBJDIR) -fwrapv -W -Wall -DPID_FILE=\"/var/run/mdnsd.pid\" -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\"
++CFLAGS_COMMON = -I$(POSIXDIR) -I$(COREDIR) -I$(SHAREDDIR) -I$(DSODIR) -I$(PROXYDIR) -I$(OBJDIR) -fwrapv -W -Wall -DPID_FILE=\"/var/run/mdnsd.pid\" -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\"
+ CFLAGS_PTHREAD =
+ LINKOPTS =
+ LINKOPTS_PTHREAD = -lpthread
+@@ -85,6 +86,7 @@ CFLAGS_OPEN_SOURCE=
+ endif
+ 
+ # Set up diverging paths for debug vs. prod builds
++DEBUG ?= 1
+ ifeq "$(DEBUG)" "1"
+ CFLAGS_DEBUGGING = -g -DMDNS_DEBUGMSGS=2
+ OBJDIR = objects/debug
+@@ -101,8 +103,8 @@ else
+ # 1. We want to make small binaries, suitable for putting into hardware devices
+ # 2. Some of the code analysis warnings only work when some form of optimization is enabled
+ CFLAGS_DEBUGGING = -g -DMDNS_DEBUGMSGS=0
+-OBJDIR ?= objects/prod
+-BUILDDIR ?= build/prod
++OBJDIR = objects/prod
++BUILDDIR = build/prod
+ STRIP = $(ST) -S
+ endif
+ endif
+@@ -125,7 +127,7 @@ else
+ # any target that contains the string "linux"
+ ifeq ($(findstring linux,$(os)),linux)
+ CFLAGS_OS = -D_GNU_SOURCE -DHAVE_IPV6 -DNOT_HAVE_SA_LEN -DUSES_NETLINK -DHAVE_LINUX -DTARGET_OS_LINUX -ftabstop=4
+-LD = $(CC)
++LD ?= $(CC)
+ SOOPTS = -shared
+ FLEXFLAGS_OS = -l
+ JAVACFLAGS_OS += -I$(JDK)/include/linux
+@@ -276,8 +278,7 @@ Daemon: setup $(BUILDDIR)/mdnsd
+ 	@echo "Responder daemon done"
+ 
+ $(BUILDDIR)/mdnsd: $(DAEMONOBJS)
+-	$(CC) -o $@ $+ $(LINKOPTS)
+-	$(STRIP) $@
++	$(LD) -o $@ $+
+ 
+ # libdns_sd target builds the client library
+ libdns_sd: setup $(BUILDDIR)/libdns_sd.$(LDSUFFIX)
+@@ -286,13 +287,9 @@ libdns_sd: setup $(BUILDDIR)/libdns_sd.$(LDSUFFIX)
+ CLIENTLIBOBJS = $(OBJDIR)/dnssd_clientlib.c.so.o $(OBJDIR)/dnssd_clientstub.c.so.o $(OBJDIR)/dnssd_ipc.c.so.o
+ 
+ $(BUILDDIR)/libdns_sd.$(LDSUFFIX): $(CLIENTLIBOBJS)
+-	$(LD) $(SOOPTS) $(LINKOPTS) -o $@ $+
+-	$(STRIP) $@
+-
+-Clients: setup libdns_sd ../Clients/build/dns-sd
+-	@echo "Clients done"
++	$(LD) -shared $(LINKOPTS) -Wl,-soname,libdns_sd.$(LDSUFFIX).1 -o $@ $+
+ 
+-../Clients/build/dns-sd: ../Clients/dns-sd.c
++Clients: setup libdns_sd
+ 	$(MAKE) -C ../Clients DEBUG=$(DEBUG) SUPMAKE_CFLAGS="$(MDNSCFLAGS)"
+ 
+ # nss_mdns target builds the Name Service Switch module
+@@ -300,8 +297,7 @@ nss_mdns: setup $(BUILDDIR)/$(NSSLIBFILE)
+ 	@echo "Name Service Switch module done"
+ 
+ $(BUILDDIR)/$(NSSLIBFILE): $(CLIENTLIBOBJS) $(OBJDIR)/nss_mdns.c.so.o
+-	$(LD) $(SOOPTS) $(LINKOPTS) -o $@ $+
+-	$(STRIP) $@
++	$(LD) -shared $(LINKOPTS) -o $@ $+
+ 
+ #############################################################################
+ 
+@@ -494,21 +490,21 @@ dnsextd: setup $(BUILDDIR)/dnsextd
+ 	@echo "dnsextd done"
+ 
+ $(BUILDDIR)/mDNSClientPosix:         $(APPOBJ)     $(OBJDIR)/Client.c.o
+-	$(CC) $+ -o $@ $(LINKOPTS)
++	$(CC) $+ -o $@
+ 
+ $(BUILDDIR)/mDNSResponderPosix:      $(COMMONOBJ)  $(OBJDIR)/Responder.c.o
+-	$(CC) $+ -o $@ $(LINKOPTS)
++	$(CC) $+ -o $@
+ 
+ $(BUILDDIR)/mDNSProxyResponderPosix: $(COMMONOBJ)  $(OBJDIR)/ProxyResponder.c.o
+-	$(CC) $+ -o $@ $(LINKOPTS)
++	$(CC) $+ -o $@
+ 
+ $(BUILDDIR)/mDNSNetMonitor:          $(SPECIALOBJ) $(OBJDIR)/NetMonitor.c.o
+-	$(CC) $+ -o $@ $(LINKOPTS)
++	$(CC) $+ -o $@
+ 
+ $(OBJDIR)/NetMonitor.c.o:            $(COREDIR)/mDNS.c # Note: NetMonitor.c textually imports mDNS.c
+ 
+ $(BUILDDIR)/dnsextd:                 $(DNSEXTDOBJ) $(OBJDIR)/dnsextd.c.threadsafe.o
+-	$(CC) $+ -o $@ $(LINKOPTS) $(LINKOPTS_PTHREAD)
++	$(CC) $+ -o $@ $(LINKOPTS_PTHREAD)
+ 
+ #############################################################################
+ 
+-- 
+2.20.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0004-Use-list-for-changed-interfaces.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0004-Use-list-for-changed-interfaces.patch
index 05ad49b..db3a63e 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0004-Use-list-for-changed-interfaces.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0004-Use-list-for-changed-interfaces.patch
@@ -1,4 +1,4 @@
-From e1f483510a1011e37540fdee8f3bc36111fa45a0 Mon Sep 17 00:00:00 2001
+From 798bfb5e984845a27874d1a244686db6e384d7b8 Mon Sep 17 00:00:00 2001
 From: Nate Karstens <nate.karstens@garmin.com>
 Date: Thu, 13 Jul 2017 09:00:00 -0500
 Subject: [PATCH 04/11] Use list for changed interfaces
@@ -15,10 +15,10 @@
  1 file changed, 52 insertions(+), 15 deletions(-)
 
 diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 8fe22be..699855a 100644
+index 195d04b..bb883c1 100755
 --- a/mDNSPosix/mDNSPosix.c
 +++ b/mDNSPosix/mDNSPosix.c
-@@ -75,6 +75,14 @@ struct IfChangeRec
+@@ -67,6 +67,14 @@ struct IfChangeRec
  };
  typedef struct IfChangeRec IfChangeRec;
  
@@ -31,9 +31,9 @@
 +typedef struct NetworkInterfaceIndex NetworkInterfaceIndex;
 +
  // Note that static data is initialized to zero in (modern) C.
- static fd_set gEventFDs;
- static int gMaxFD;                              // largest fd in gEventFDs
-@@ -1071,6 +1079,32 @@ mDNSlocal mStatus OpenIfNotifySocket(int *pFD)
+ static PosixEventSource *gEventSources;             // linked list of PosixEventSource's
+ static sigset_t gEventSignalSet;                // Signals which event loop listens for
+@@ -1458,6 +1466,32 @@ mDNSlocal mStatus OpenIfNotifySocket(int *pFD)
      return err;
  }
  
@@ -66,7 +66,7 @@
  #if MDNS_DEBUGMSGS
  mDNSlocal void      PrintNetLinkMsg(const struct nlmsghdr *pNLMsg)
  {
-@@ -1098,14 +1132,13 @@ mDNSlocal void      PrintNetLinkMsg(const struct nlmsghdr *pNLMsg)
+@@ -1485,14 +1519,13 @@ mDNSlocal void      PrintNetLinkMsg(const struct nlmsghdr *pNLMsg)
  }
  #endif
  
@@ -82,7 +82,7 @@
  
      // The structure here is more complex than it really ought to be because,
      // unfortunately, there's no good way to size a buffer in advance large
-@@ -1141,9 +1174,9 @@ mDNSlocal mDNSu32       ProcessRoutingNotification(int sd)
+@@ -1528,9 +1561,9 @@ mDNSlocal mDNSu32       ProcessRoutingNotification(int sd)
  
          // Process the NetLink message
          if (pNLMsg->nlmsg_type == RTM_GETLINK || pNLMsg->nlmsg_type == RTM_NEWLINK)
@@ -94,7 +94,7 @@
  
          // Advance pNLMsg to the next message in the buffer
          if ((pNLMsg->nlmsg_flags & NLM_F_MULTI) != 0 && pNLMsg->nlmsg_type != NLMSG_DONE)
-@@ -1154,8 +1187,6 @@ mDNSlocal mDNSu32       ProcessRoutingNotification(int sd)
+@@ -1541,8 +1574,6 @@ mDNSlocal mDNSu32       ProcessRoutingNotification(int sd)
          else
              break;  // all done!
      }
@@ -103,7 +103,7 @@
  }
  
  #else // USES_NETLINK
-@@ -1187,14 +1218,13 @@ mDNSlocal void      PrintRoutingSocketMsg(const struct ifa_msghdr *pRSMsg)
+@@ -1574,14 +1605,13 @@ mDNSlocal void      PrintRoutingSocketMsg(const struct ifa_msghdr *pRSMsg)
  }
  #endif
  
@@ -119,7 +119,7 @@
  
      readCount = read(sd, buff, sizeof buff);
      if (readCount < (ssize_t) sizeof(struct ifa_msghdr))
-@@ -1209,12 +1239,10 @@ mDNSlocal mDNSu32       ProcessRoutingNotification(int sd)
+@@ -1596,12 +1626,10 @@ mDNSlocal mDNSu32       ProcessRoutingNotification(int sd)
          pRSMsg->ifam_type == RTM_IFINFO)
      {
          if (pRSMsg->ifam_type == RTM_IFINFO)
@@ -134,7 +134,7 @@
  }
  
  #endif // USES_NETLINK
-@@ -1224,7 +1252,8 @@ mDNSlocal void InterfaceChangeCallback(int fd, short filter, void *context)
+@@ -1611,7 +1639,8 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
  {
      IfChangeRec     *pChgRec = (IfChangeRec*) context;
      fd_set readFDs;
@@ -144,7 +144,7 @@
      struct timeval zeroTimeout = { 0, 0 };
  
      (void)fd; // Unused
-@@ -1233,17 +1262,25 @@ mDNSlocal void InterfaceChangeCallback(int fd, short filter, void *context)
+@@ -1619,17 +1648,25 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
      FD_ZERO(&readFDs);
      FD_SET(pChgRec->NotifySD, &readFDs);
  
@@ -173,5 +173,5 @@
  
  // Register with either a Routing Socket or RtNetLink to listen for interface changes.
 -- 
-2.17.1
+2.20.1
 
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0005-Handle-noisy-netlink-sockets.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0005-Handle-noisy-netlink-sockets.patch
deleted file mode 100644
index f2b171e..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0005-Handle-noisy-netlink-sockets.patch
+++ /dev/null
@@ -1,212 +0,0 @@
-From 92025cab86619f548bf3eb816a1804ef40507ca7 Mon Sep 17 00:00:00 2001
-From: Nate Karstens <nate.karstens@garmin.com>
-Date: Mon, 24 Jul 2017 09:38:55 -0500
-Subject: [PATCH 05/11] Handle noisy netlink sockets
-
-The POSIX implementation currently clears all network interfaces
-when netlink indicates that there has been a change. This causes
-the following problems:
-
-  1) Applications are informed that all of the services they are
-     tracking have been removed.
-  2) Increases network load because the client must re-query for
-     all records it is interested in.
-
-This changes netlink notification handling by:
-
-  1) Always comparing with the latest interface list returned
-     by the OS.
-  2) Confirming that the interface has been changed in a way
-     that we care about.
-
-Upstream-Status: Submitted [dts@apple.com]
-
-Signed-off-by: Nate Karstens <nate.karstens@garmin.com>
----
- mDNSPosix/mDNSPosix.c | 143 +++++++++++++++++++++++++++++++++++++++---
- 1 file changed, 133 insertions(+), 10 deletions(-)
-
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 699855a..59a8b8c 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1247,14 +1247,38 @@ mDNSlocal void          ProcessRoutingNotification(int sd, GenLinkedList *change
- 
- #endif // USES_NETLINK
- 
-+// Test whether the given PosixNetworkInterface matches the given struct ifi_info
-+mDNSlocal mDNSBool InterfacesMatch(PosixNetworkInterface *intf, struct ifi_info *ifi)
-+{
-+    mDNSBool match = mDNSfalse;
-+    mDNSAddr ip, mask;
-+
-+    if((intf->index == ifi->ifi_index) &&
-+       (intf->sa_family == ifi->ifi_addr->sa_family) &&
-+       (strcmp(intf->coreIntf.ifname, ifi->ifi_name) == 0))
-+        {
-+        SockAddrTomDNSAddr(ifi->ifi_addr,    &ip,   NULL);
-+        SockAddrTomDNSAddr(ifi->ifi_netmask, &mask, NULL);
-+
-+        match = mDNSSameAddress(&intf->coreIntf.ip, &ip) &&
-+                mDNSSameAddress(&intf->coreIntf.mask, &mask);
-+        }
-+
-+    return match;
-+}
-+
- // Called when data appears on interface change notification socket
- mDNSlocal void InterfaceChangeCallback(int fd, short filter, void *context)
- {
-     IfChangeRec     *pChgRec = (IfChangeRec*) context;
-+    mDNS            *m = pChgRec->mDNS;
-     fd_set readFDs;
-     GenLinkedList changedInterfaces;
-     NetworkInterfaceIndex *changedInterface;
-     struct timeval zeroTimeout = { 0, 0 };
-+    struct ifi_info *ifi_list, **ifi, *ifi_free, *ifi_loop4 = NULL;
-+    PosixNetworkInterface *intf, *intfNext;
-+    mDNSBool found, foundav4;
- 
-     (void)fd; // Unused
-     (void)filter; // Unused
-@@ -1270,12 +1294,115 @@ mDNSlocal void InterfaceChangeCallback(int fd, short filter, void *context)
-     }
-     while (0 < select(pChgRec->NotifySD + 1, &readFDs, (fd_set*) NULL, (fd_set*) NULL, &zeroTimeout));
- 
--    // Currently we rebuild the entire interface list whenever any interface change is
--    // detected. If this ever proves to be a performance issue in a multi-homed
--    // configuration, more care should be paid to changedInterfaces.
--    if (changedInterfaces.Head != NULL)
--        mDNSPlatformPosixRefreshInterfaceList(pChgRec->mDNS);
-+    CleanRecentInterfaces();
-+
-+    if (changedInterfaces.Head == NULL) goto cleanup;
-+
-+    ifi_list = get_ifi_info(AF_INET, mDNStrue);
-+    if (ifi_list == NULL) goto cleanup;
-+
-+#if HAVE_IPV6
-+    /* Link the IPv6 list to the end of the IPv4 list */
-+    ifi = &ifi_list;
-+    while (*ifi != NULL) ifi = &(*ifi)->ifi_next;
-+    *ifi = get_ifi_info(AF_INET6, mDNStrue);
-+#endif
-+
-+    for (intf = (PosixNetworkInterface*)(m->HostInterfaces); intf != NULL; intf = intfNext)
-+    {
-+        intfNext = (PosixNetworkInterface*)(intf->coreIntf.next);
-+
-+        // Loopback interface(s) are handled later
-+        if (intf->coreIntf.Loopback) continue;
-+
-+        found = mDNSfalse;
-+        for (ifi = &ifi_list; *ifi != NULL; ifi = &(*ifi)->ifi_next)
-+        {
-+            if (InterfacesMatch(intf, *ifi))
-+            {
-+                found = mDNStrue;
-+
-+                // Removes unchanged from ifi_list
-+                ifi_free = *ifi;
-+                *ifi = (*ifi)->ifi_next;
-+                ifi_free->ifi_next = NULL;
-+                free_ifi_info(ifi_free);
-+
-+                break;
-+            }
-+        }
-+
-+        // Removes changed and old interfaces from m->HostInterfaces
-+        if (!found) TearDownInterface(m, intf);
-+    }
-+
-+    // Add new and changed interfaces in ifi_list
-+    // Save off loopback interface in case it is needed later
-+    for (ifi = &ifi_list; *ifi != NULL; ifi = &(*ifi)->ifi_next)
-+    {
-+        if ((ifi_loop4 == NULL) &&
-+            ((*ifi)->ifi_addr->sa_family == AF_INET) &&
-+            ((*ifi)->ifi_flags & IFF_UP) &&
-+            ((*ifi)->ifi_flags & IFF_LOOPBACK))
-+        {
-+            ifi_loop4 = *ifi;
-+            continue;
-+        }
-+
-+        if (     (((*ifi)->ifi_addr->sa_family == AF_INET)
-+#if HAVE_IPV6
-+                  || ((*ifi)->ifi_addr->sa_family == AF_INET6)
-+#endif
-+                  ) && ((*ifi)->ifi_flags & IFF_UP)
-+                    && !((*ifi)->ifi_flags & IFF_POINTOPOINT)
-+                    && !((*ifi)->ifi_flags & IFF_LOOPBACK))
-+        {
-+            SetupOneInterface(m, *ifi);
-+        }
-+    }
-+
-+    // Determine if there is at least one non-loopback IPv4 interface. This is to work around issues
-+    // with multicast loopback on IPv6 interfaces -- see corresponding logic in SetupInterfaceList().
-+    foundav4 = mDNSfalse;
-+    for (intf = (PosixNetworkInterface*)(m->HostInterfaces); intf != NULL; intf = (PosixNetworkInterface*)(intf->coreIntf.next))
-+    {
-+        if (intf->sa_family == AF_INET && !intf->coreIntf.Loopback)
-+        {
-+            foundav4 = mDNStrue;
-+            break;
-+        }
-+    }
-+
-+    if (foundav4)
-+    {
-+        for (intf = (PosixNetworkInterface*)(m->HostInterfaces); intf != NULL; intf = intfNext)
-+        {
-+            intfNext = (PosixNetworkInterface*)(intf->coreIntf.next);
-+            if (intf->coreIntf.Loopback) TearDownInterface(m, intf);
-+        }
-+    }
-+    else
-+    {
-+        found = mDNSfalse;
-+
-+        for (intf = (PosixNetworkInterface*)(m->HostInterfaces); intf != NULL; intf = (PosixNetworkInterface*)(intf->coreIntf.next))
-+        {
-+            if (intf->coreIntf.Loopback)
-+            {
-+                found = mDNStrue;
-+                break;
-+            }
-+        }
-+
-+        if (!found && (ifi_loop4 != NULL))
-+        {
-+            SetupOneInterface(m, ifi_loop4);
-+        }
-+    }
-+
-+    if (ifi_list != NULL) free_ifi_info(ifi_list);
- 
-+cleanup:
-     while ((changedInterface = (NetworkInterfaceIndex*)changedInterfaces.Head) != NULL)
-     {
-         RemoveFromList(&changedInterfaces, changedInterface);
-@@ -1400,15 +1527,11 @@ mDNSexport void mDNSPlatformClose(mDNS *const m)
- #endif
- }
- 
--// This is used internally by InterfaceChangeCallback.
--// It's also exported so that the Standalone Responder (mDNSResponderPosix)
-+// This is exported so that the Standalone Responder (mDNSResponderPosix)
- // can call it in response to a SIGHUP (mainly for debugging purposes).
- mDNSexport mStatus mDNSPlatformPosixRefreshInterfaceList(mDNS *const m)
- {
-     int err;
--    // This is a pretty heavyweight way to process interface changes --
--    // destroying the entire interface list and then making fresh one from scratch.
--    // We should make it like the OS X version, which leaves unchanged interfaces alone.
-     ClearInterfaceList(m);
-     err = SetupInterfaceList(m);
-     return PosixErrorToStatus(err);
--- 
-2.17.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0007-Indicate-loopback-interface-to-mDNS-core.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0007-Indicate-loopback-interface-to-mDNS-core.patch
deleted file mode 100644
index 86201c6..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0007-Indicate-loopback-interface-to-mDNS-core.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-From 07a9401d84804d7f0181aa4fb0f13a54b2a1c9a8 Mon Sep 17 00:00:00 2001
-From: Nate Karstens <nate.karstens@garmin.com>
-Date: Tue, 1 Aug 2017 17:06:01 -0500
-Subject: [PATCH 07/11] Indicate loopback interface to mDNS core
-
-Tells the mDNS core if an interface is a loopback interface,
-similar to AddInterfaceToList() in the MacOS implementation.
-Also reorganizes SetupOneInterface() to use a const struct
-rather than growing its parameter list again.
-
-Upstream-Status: Submitted [dts@apple.com]
-
-Signed-off-by: Nate Karstens <nate.karstens@garmin.com>
----
- mDNSPosix/mDNSPosix.c | 37 ++++++++++++++++++-------------------
- 1 file changed, 18 insertions(+), 19 deletions(-)
-
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 3fc5451..798ab10 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -889,16 +889,14 @@ mDNSlocal void CleanRecentInterfaces(void)
- 
- // Creates a PosixNetworkInterface for the interface whose IP address is
- // intfAddr and whose name is intfName and registers it with mDNS core.
--mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct sockaddr *intfMask, const char *intfName, int intfIndex)
-+mDNSlocal int SetupOneInterface(mDNS *const m, struct ifi_info *const ifi)
- {
-     int err = 0;
-     PosixNetworkInterface *intf;
-     PosixNetworkInterface *alias = NULL;
- 
-     assert(m != NULL);
--    assert(intfAddr != NULL);
--    assert(intfName != NULL);
--    assert(intfMask != NULL);
-+    assert(ifi != NULL);
- 
-     // Allocate the interface structure itself.
-     intf = (PosixNetworkInterface*)calloc(1, sizeof(*intf));
-@@ -907,26 +905,27 @@ mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct
-     // And make a copy of the intfName.
-     if (err == 0)
-     {
--        intf->intfName = strdup(intfName);
-+        intf->intfName = strdup(ifi->ifi_name);
-         if (intf->intfName == NULL) { assert(0); err = ENOMEM; }
-     }
- 
-     if (err == 0)
-     {
-         // Set up the fields required by the mDNS core.
--        SockAddrTomDNSAddr(intfAddr, &intf->coreIntf.ip, NULL);
--        SockAddrTomDNSAddr(intfMask, &intf->coreIntf.mask, NULL);
-+        SockAddrTomDNSAddr(ifi->ifi_addr, &intf->coreIntf.ip, NULL);
-+        SockAddrTomDNSAddr(ifi->ifi_netmask, &intf->coreIntf.mask, NULL);
- 
-         //LogMsg("SetupOneInterface: %#a %#a",  &intf->coreIntf.ip,  &intf->coreIntf.mask);
--        strncpy(intf->coreIntf.ifname, intfName, sizeof(intf->coreIntf.ifname));
-+        strncpy(intf->coreIntf.ifname, ifi->ifi_name, sizeof(intf->coreIntf.ifname));
-         intf->coreIntf.ifname[sizeof(intf->coreIntf.ifname)-1] = 0;
-         intf->coreIntf.Advertise = m->AdvertiseLocalAddresses;
-         intf->coreIntf.McastTxRx = mDNStrue;
-+        intf->coreIntf.Loopback = ((ifi->ifi_flags & IFF_LOOPBACK) != 0) ? mDNStrue : mDNSfalse;
- 
-         // Set up the extra fields in PosixNetworkInterface.
-         assert(intf->intfName != NULL);         // intf->intfName already set up above
--        intf->index                = intfIndex;
--        intf->sa_family            = intfAddr->sa_family;
-+        intf->index                = ifi->ifi_index;
-+        intf->sa_family            = ifi->ifi_addr->sa_family;
-         intf->multicastSocket4     = -1;
- #if HAVE_IPV6
-         intf->multicastSocket6     = -1;
-@@ -936,17 +935,17 @@ mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct
-         intf->coreIntf.InterfaceID = (mDNSInterfaceID)alias;
- 
-         if (alias != intf)
--            debugf("SetupOneInterface: %s %#a is an alias of %#a", intfName, &intf->coreIntf.ip, &alias->coreIntf.ip);
-+            debugf("SetupOneInterface: %s %#a is an alias of %#a", ifi->ifi_name, &intf->coreIntf.ip, &alias->coreIntf.ip);
-     }
- 
-     // Set up the multicast socket
-     if (err == 0)
-     {
--        if (alias->multicastSocket4 == -1 && intfAddr->sa_family == AF_INET)
--            err = SetupSocket(intfAddr, MulticastDNSPort, intf->index, &alias->multicastSocket4);
-+        if (alias->multicastSocket4 == -1 && ifi->ifi_addr->sa_family == AF_INET)
-+            err = SetupSocket(ifi->ifi_addr, MulticastDNSPort, intf->index, &alias->multicastSocket4);
- #if HAVE_IPV6
--        else if (alias->multicastSocket6 == -1 && intfAddr->sa_family == AF_INET6)
--            err = SetupSocket(intfAddr, MulticastDNSPort, intf->index, &alias->multicastSocket6);
-+        else if (alias->multicastSocket6 == -1 && ifi->ifi_addr->sa_family == AF_INET6)
-+            err = SetupSocket(ifi->ifi_addr, MulticastDNSPort, intf->index, &alias->multicastSocket6);
- #endif
-     }
- 
-@@ -973,8 +972,8 @@ mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct
-     }
-     else
-     {
--        // Use intfName instead of intf->intfName in the next line to avoid dereferencing NULL.
--        debugf("SetupOneInterface: %s %#a failed to register %d", intfName, &intf->coreIntf.ip, err);
-+        // Use ifi->ifi_name instead of intf->intfName in the next line to avoid dereferencing NULL.
-+        debugf("SetupOneInterface: %s %#a failed to register %d", ifi->ifi_name, &intf->coreIntf.ip, err);
-         if (intf) { FreePosixNetworkInterface(intf); intf = NULL; }
-     }
- 
-@@ -1023,7 +1022,7 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
-                 }
-                 else
-                 {
--                    if (SetupOneInterface(m, i->ifi_addr, i->ifi_netmask, i->ifi_name, i->ifi_index) == 0)
-+                    if (SetupOneInterface(m, i) == 0)
-                         if (i->ifi_addr->sa_family == AF_INET)
-                             foundav4 = mDNStrue;
-                 }
-@@ -1037,7 +1036,7 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
-         // In the interim, we skip loopback interface only if we found at least one v4 interface to use
-         // if ((m->HostInterfaces == NULL) && (firstLoopback != NULL))
-         if (!foundav4 && firstLoopback)
--            (void) SetupOneInterface(m, firstLoopback->ifi_addr, firstLoopback->ifi_netmask, firstLoopback->ifi_name, firstLoopback->ifi_index);
-+            (void) SetupOneInterface(m, firstLoopback);
-     }
- 
-     // Clean up.
--- 
-2.17.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0011-Change-a-dynamic-allocation-to-file-scope-variable.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0011-Change-a-dynamic-allocation-to-file-scope-variable.patch
index d64fb35..d9adde0 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0011-Change-a-dynamic-allocation-to-file-scope-variable.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0011-Change-a-dynamic-allocation-to-file-scope-variable.patch
@@ -1,7 +1,7 @@
-From 19de26db69408f02241e232b39224589a0f630df Mon Sep 17 00:00:00 2001
+From 9ff06108cd44e84ba6c68bfa6737e793f117e303 Mon Sep 17 00:00:00 2001
 From: Nate Karstens <nate.karstens@garmin.com>
 Date: Thu, 10 Aug 2017 08:46:03 -0500
-Subject: [PATCH 11/11] Change a dynamic allocation to file-scope variable
+Subject: [PATCH] Change a dynamic allocation to file-scope variable
 
 Changes a variable from being dynamically-allocated to being
 statically-allocated at the file scope. Addresses a Coverity
@@ -11,14 +11,14 @@
 
 Signed-off-by: Nate Karstens <nate.karstens@garmin.com>
 ---
- mDNSPosix/mDNSPosix.c | 12 ++++--------
- 1 file changed, 4 insertions(+), 8 deletions(-)
+ mDNSPosix/mDNSPosix.c | 14 ++++----------
+ 1 file changed, 4 insertions(+), 10 deletions(-)
 
 diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 84af26b..b7795ed 100644
+index 7aeee7b..2d25016 100755
 --- a/mDNSPosix/mDNSPosix.c
 +++ b/mDNSPosix/mDNSPosix.c
-@@ -91,6 +91,7 @@ static sigset_t gEventSignalSet;                // Signals which event loop list
+@@ -81,6 +81,7 @@ static sigset_t gEventSignalSet;                // Signals which event loop list
  static sigset_t gEventSignals;                  // Signals which were received while inside loop
  
  static PosixNetworkInterface *gRecentInterfaces;
@@ -26,13 +26,13 @@
  
  // ***************************************************************************
  // Globals (for debugging)
-@@ -1412,16 +1413,11 @@ cleanup:
+@@ -1641,18 +1642,11 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
  mDNSlocal mStatus WatchForInterfaceChange(mDNS *const m)
  {
      mStatus err;
 -    IfChangeRec *pChgRec;
  
--    pChgRec = (IfChangeRec*) mDNSPlatformMemAllocate(sizeof *pChgRec);
+-    pChgRec = (IfChangeRec*) mDNSPlatformMemAllocateClear(sizeof *pChgRec);
 -    if (pChgRec == NULL)
 -        return mStatus_NoMemoryErr;
 -
@@ -42,10 +42,12 @@
 +    err = OpenIfNotifySocket(&gChgRec.NotifySD);
      if (err == 0)
 -        err = mDNSPosixAddFDToEventLoop(pChgRec->NotifySD, InterfaceChangeCallback, pChgRec);
+-    if (err)
+-        mDNSPlatformMemFree(pChgRec);
 +        err = mDNSPosixAddFDToEventLoop(gChgRec.NotifySD, InterfaceChangeCallback, &gChgRec);
  
      return err;
  }
 -- 
-2.17.1
+2.20.1
 
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/build.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/build.patch
deleted file mode 100644
index 4ab9d23..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/build.patch
+++ /dev/null
@@ -1,167 +0,0 @@
-From 43b6e98c9c37afd0d914949dcff4eab81f5a995f Mon Sep 17 00:00:00 2001
-From: Brendan Le Foll <brendan.le.foll@intel.com>
-Date: Tue, 3 Mar 2015 11:42:57 +0000
-
-Upstream-Status: Inappropriate [OE-specific]
-
-Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
-
----
- mDNSPosix/Makefile | 54 +++++++++++++++++++++++++-----------------------------
- 1 file changed, 25 insertions(+), 29 deletions(-)
-
-diff --git a/mDNSPosix/Makefile b/mDNSPosix/Makefile
-index 4f98e90..8ac97ad 100755
---- a/mDNSPosix/Makefile
-+++ b/mDNSPosix/Makefile
-@@ -50,6 +50,7 @@
- 
- LIBVERS = 1
- 
-+POSIXDIR = ../mDNSPosix
- COREDIR = ../mDNSCore
- SHAREDDIR ?= ../mDNSShared
- JDK = /usr/jdk
-@@ -58,11 +59,11 @@ CC = @cc
- BISON = @bison
- FLEX = @flex
- ST = @strip
--LD = ld -shared
-+LD =@LD
- CP = cp
- RM = rm
- LN = ln -s -f
--CFLAGS_COMMON = -I$(COREDIR) -I$(SHAREDDIR) -I$(OBJDIR) -fwrapv -W -Wall -DPID_FILE=\"/var/run/mdnsd.pid\" -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\"
-+CFLAGS_COMMON = -I$(POSIXDIR) -I$(COREDIR) -I$(SHAREDDIR) -I$(OBJDIR) -fwrapv -W -Wall -DPID_FILE=\"/var/run/mdnsd.pid\" -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\"
- CFLAGS_PTHREAD =
- LINKOPTS =
- LINKOPTS_PTHREAD = -lpthread
-@@ -70,7 +71,7 @@ LDSUFFIX = so
- JAVACFLAGS_OS = -fPIC -shared -ldns_sd
- 
- # Set up diverging paths for debug vs. prod builds
--DEBUG=0
-+DEBUG?=1
- ifeq ($(DEBUG),1)
- CFLAGS_DEBUG = -g -DMDNS_DEBUGMSGS=2
- OBJDIR = objects/debug
-@@ -213,7 +214,7 @@ endif
- endif
- endif
- 
--CFLAGS = $(CFLAGS_COMMON) $(CFLAGS_OS) $(CFLAGS_DEBUG)
-+CFLAGS_BUILD = $(CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_OS) $(CFLAGS_DEBUG)
- 
- #############################################################################
- 
-@@ -249,8 +250,7 @@ Daemon: setup $(BUILDDIR)/mdnsd
- 	@echo "Responder daemon done"
- 
- $(BUILDDIR)/mdnsd: $(DAEMONOBJS)
--	$(CC) -o $@ $+ $(LINKOPTS)
--	@$(STRIP) $@
-+	$(CC) -o $@ $+
- 
- # libdns_sd target builds the client library
- libdns_sd: setup $(BUILDDIR)/libdns_sd.$(LDSUFFIX)
-@@ -259,22 +259,18 @@ libdns_sd: setup $(BUILDDIR)/libdns_sd.$(LDSUFFIX)
- CLIENTLIBOBJS = $(OBJDIR)/dnssd_clientlib.c.so.o $(OBJDIR)/dnssd_clientstub.c.so.o $(OBJDIR)/dnssd_ipc.c.so.o
- 
- $(BUILDDIR)/libdns_sd.$(LDSUFFIX): $(CLIENTLIBOBJS)
--	@$(LD) $(LINKOPTS) -o $@ $+
--	@$(STRIP) $@
-+	$(LD) -shared $(LINKOPTS) -Wl,-soname,libdns_sd.$(LDSUFFIX).1 -o $@ $+
- 
--Clients: setup libdns_sd ../Clients/build/dns-sd
-+Clients: setup libdns_sd
-+	@$(MAKE) -C ../Clients DEBUG=${DEBUG}
- 	@echo "Clients done"
- 
--../Clients/build/dns-sd:
--	@$(MAKE) -C ../Clients
--
- # nss_mdns target builds the Name Service Switch module
- nss_mdns: setup $(BUILDDIR)/$(NSSLIBFILE)
- 	@echo "Name Service Switch module done"
- 
- $(BUILDDIR)/$(NSSLIBFILE): $(CLIENTLIBOBJS) $(OBJDIR)/nss_mdns.c.so.o
--	@$(LD) $(LINKOPTS) -o $@ $+
--	@$(STRIP) $@
-+	$(LD) -shared $(LINKOPTS) -o $@ $+
- 
- #############################################################################
- 
-@@ -470,55 +466,55 @@ dnsextd: setup $(BUILDDIR)/dnsextd
- 	@echo "dnsextd done"
- 
- $(BUILDDIR)/mDNSClientPosix:         $(APPOBJ)     $(OBJDIR)/Client.c.o
--	$(CC) $+ -o $@ $(LINKOPTS)
-+	$(CC) $+ -o $@
- 
- $(BUILDDIR)/mDNSResponderPosix:      $(COMMONOBJ)  $(OBJDIR)/Responder.c.o
--	$(CC) $+ -o $@ $(LINKOPTS)
-+	$(CC) $+ -o $@
- 
- $(BUILDDIR)/mDNSProxyResponderPosix: $(COMMONOBJ)  $(OBJDIR)/ProxyResponder.c.o
--	$(CC) $+ -o $@ $(LINKOPTS)
-+	$(CC) $+ -o $@
- 
- $(BUILDDIR)/mDNSIdentify:            $(SPECIALOBJ) $(OBJDIR)/Identify.c.o
--	$(CC) $+ -o $@ $(LINKOPTS)
-+	$(CC) $+ -o $@
- 
- $(OBJDIR)/Identify.c.o:              $(COREDIR)/mDNS.c # Note: Identify.c textually imports mDNS.c
- 
- $(BUILDDIR)/mDNSNetMonitor:          $(SPECIALOBJ) $(OBJDIR)/NetMonitor.c.o
--	$(CC) $+ -o $@ $(LINKOPTS)
-+	$(CC) $+ -o $@
- 
- $(OBJDIR)/NetMonitor.c.o:            $(COREDIR)/mDNS.c # Note: NetMonitor.c textually imports mDNS.c
- 
- $(BUILDDIR)/dnsextd:                 $(DNSEXTDOBJ) $(OBJDIR)/dnsextd.c.threadsafe.o
--	$(CC) $+ -o $@ $(LINKOPTS) $(LINKOPTS_PTHREAD)
-+	$(CC) $+ -o $@ $(LINKOPTS_PTHREAD)
- 
- #############################################################################
- 
- # Implicit rules
- $(OBJDIR)/%.c.o:	%.c
--	$(CC) $(CFLAGS) -c -o $@ $<
-+	$(CC) $(CFLAGS_BUILD) -c -o $@ $<
- 
- $(OBJDIR)/%.c.o:	$(COREDIR)/%.c
--	$(CC) $(CFLAGS) -c -o $@ $<
-+	$(CC) $(CFLAGS_BUILD) -c -o $@ $<
- 
- $(OBJDIR)/%.c.o:	$(SHAREDDIR)/%.c
--	$(CC) $(CFLAGS) -c -o $@ $<
-+	$(CC) $(CFLAGS_BUILD) -c -o $@ $<
- 
- $(OBJDIR)/%.c.threadsafe.o:	%.c
--	$(CC) $(CFLAGS) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $<
-+	$(CC) $(CFLAGS_BUILD) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $<
- 
- $(OBJDIR)/%.c.threadsafe.o:	$(SHAREDDIR)/%.c
--	$(CC) $(CFLAGS) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $<
-+	$(CC) $(CFLAGS_BUILD) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $<
- 
- $(OBJDIR)/%.c.so.o:	%.c
--	$(CC) $(CFLAGS) -c -fPIC -o $@ $<
-+	$(CC) $(CFLAGS_BUILD) -c -fPIC -o $@ $<
- 
- $(OBJDIR)/%.c.so.o:	$(SHAREDDIR)/%.c
--	$(CC) $(CFLAGS) -c -fPIC -o $@ $<
-+	$(CC) $(CFLAGS_BUILD) -c -fPIC -o $@ $<
- 
- $(OBJDIR)/%.y.o: $(SHAREDDIR)/%.y
- 	$(BISON)              -o $(OBJDIR)/$*.c -d $<
--	$(CC) $(CFLAGS) -c -o $@ $(OBJDIR)/$*.c
-+	$(CC) $(CFLAGS_BUILD) -c -o $@ $(OBJDIR)/$*.c
- 
- $(OBJDIR)/%.l.o: $(SHAREDDIR)/%.l
- 	$(FLEX) $(FLEXFLAGS_OS) -i             -o$(OBJDIR)/$*.l.c $<
--	$(CC) $(CFLAGS) -Wno-error -c -o $@ $(OBJDIR)/$*.l.c
-+	$(CC) $(CFLAGS_BUILD) -Wno-error -c -o $@ $(OBJDIR)/$*.l.c
--- 
-2.9.5
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_878.270.2.bb b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_1096.40.7.bb
similarity index 90%
rename from meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_878.270.2.bb
rename to meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_1096.40.7.bb
index 0f8dc92..086b408 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_878.270.2.bb
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_1096.40.7.bb
@@ -1,7 +1,7 @@
 SUMMARY = "Publishes & browses available services on a link according to the Zeroconf / Bonjour protocol"
 DESCRIPTION = "Bonjour, also known as zero-configuration networking, enables automatic discovery of computers, devices, and services on IP networks."
 HOMEPAGE = "http://developer.apple.com/networking/bonjour/"
-LICENSE = "Apache-2.0"
+LICENSE = "Apache-2.0 & BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://../LICENSE;md5=31c50371921e0fb731003bbc665f29bf"
 
 COMPATIBLE_HOST_libc-musl = 'null'
@@ -9,22 +9,23 @@
 RPROVIDES_${PN} += "libdns_sd.so"
 
 SRC_URI = "https://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-${PV}.tar.gz \
-           file://build.patch;patchdir=.. \
            file://mdns.service \
+           file://0001-mdns-include-stddef.h-for-NULL.patch;patchdir=.. \
+           file://0002-mdns-cross-compilation-fixes-for-bitbake.patch;patchdir=.. \
            file://0001-Create-subroutine-for-cleaning-recent-interfaces.patch;patchdir=.. \
            file://0002-Create-subroutine-for-tearing-down-an-interface.patch;patchdir=.. \
            file://0003-Track-interface-socket-family.patch;patchdir=.. \
            file://0004-Use-list-for-changed-interfaces.patch;patchdir=.. \
-           file://0005-Handle-noisy-netlink-sockets.patch;patchdir=.. \
            file://0006-Remove-unneeded-function.patch;patchdir=.. \
-           file://0007-Indicate-loopback-interface-to-mDNS-core.patch;patchdir=.. \
            file://0008-Mark-deleted-interfaces-as-being-changed.patch;patchdir=.. \
            file://0009-Fix-possible-NULL-dereference.patch;patchdir=.. \
            file://0010-Handle-errors-from-socket-calls.patch;patchdir=.. \
            file://0011-Change-a-dynamic-allocation-to-file-scope-variable.patch;patchdir=.. \
            "
-SRC_URI[md5sum] = "4e139a8e1133349006b0436291c9e29b"
-SRC_URI[sha256sum] = "2cef0ee9900504c5277fb81de0a28e6c0835fe482ebecf1067c6864f5c4eda74"
+SRC_URI[md5sum] = "ac766013bbcb323e9db4c80805b2552a"
+SRC_URI[sha256sum] = "b86f4816b4145915198e7c5bf0bc56dbbfd960e9a4518bb6486baa40cdcca7e6"
+
+CVE_PRODUCT = "apple:mdnsresponder"
 
 PARALLEL_MAKE = ""
 
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Add-pkg-config-support-for-building-applications-and.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Add-pkg-config-support-for-building-applications-and.patch
deleted file mode 100644
index dd159b9..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Add-pkg-config-support-for-building-applications-and.patch
+++ /dev/null
@@ -1,168 +0,0 @@
-From 4bf83597379523032663c8e95b3786a217c9a849 Mon Sep 17 00:00:00 2001
-From: Hugh McMaster <hugh.mcmaster@outlook.com>
-Date: Wed, 3 Apr 2019 21:36:03 +1100
-Subject: [PATCH] Add pkg-config support for building applications and
- sub-agents
-
-The netsnmp package should be used when building Net-SNMP applications.
-The netsnmp-agent package should be used when building Net-SNMP subagents.
-
-Signed-off-by: Hugh McMaster <hugh.mcmaster@outlook.com>
-[ bvanassche: edited makefile code and .pc files; added ./configure changes ]
-
-Upstream-Status: Backport
-https://sourceforge.net/p/net-snmp/patches/_discuss/thread/a0d66e91dd/f940/attachment/0001-Add-pkg-config-support-for-building-applications-and.patch
----
- Makefile.in         |  2 ++
- Makefile.rules      | 30 ++++++++++++++++++++++++++----
- configure           |  4 ++++
- configure.ac        |  1 +
- netsnmp-agent.pc.in | 12 ++++++++++++
- netsnmp.pc.in       | 12 ++++++++++++
- 6 files changed, 57 insertions(+), 4 deletions(-)
- create mode 100644 netsnmp-agent.pc.in
- create mode 100644 netsnmp.pc.in
-
-diff --git a/Makefile.in b/Makefile.in
-index 9dbdde1353..ec972636c2 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -35,6 +35,7 @@ INSTALLBUILTHEADERS=include/net-snmp/net-snmp-config.h
- INSTALLBUILTINCLUDEHEADERS=@FEATUREHEADERS@
- INSTALLBINSCRIPTS=net-snmp-config net-snmp-create-v3-user
- INSTALLUCDHEADERS=ucd-snmp-config.h version.h mib_module_config.h
-+INSTALL_PKGCONFIG=netsnmp.pc netsnmp-agent.pc
- 
- #
- # other install rules.
-@@ -275,6 +276,7 @@ configclean: makefileclean
- 		libtool include/net-snmp/net-snmp-config.h \
- 		net-snmp-config net-snmp-config-x configure-summary \
- 		net-snmp-create-v3-user net-snmp-create-v3-user-x
-+	rm -f *.pc
- 	rm -f mibs/.index
- 	rm -f include/net-snmp/agent/mib_module_config.h		\
- 		include/net-snmp/agent/agent_module_config.h		\
-diff --git a/Makefile.rules b/Makefile.rules
-index 9e9e9009e5..e714f91e72 100644
---- a/Makefile.rules
-+++ b/Makefile.rules
-@@ -85,12 +85,14 @@ subdirs:
- # installlibs handles local, ucd and subdir libs. need to do subdir libs
- # before bins, sinze those libs may be needed for successful linking
- install: installlocalheaders @installucdheaders@ \
--         installlibs \
--         installlocalbin      installlocalsbin   \
-+         installlibs         install_pkgconfig   \
-+         installlocalbin     installlocalsbin    \
-          installsubdirs      $(OTHERINSTALL)
- 
--uninstall: uninstalllibs uninstallbin uninstallsbin uninstallheaders \
--           uninstallsubdirs $(OTHERUNINSTALL)
-+uninstall: uninstalllibs     uninstall_pkgconfig \
-+           uninstallbin      uninstallsbin       \
-+           uninstallheaders                      \
-+           uninstallsubdirs  $(OTHERUNINSTALL)
- 
- installprogs: installbin installsbin
- 
-@@ -287,6 +289,26 @@ uninstalllibs:
- 		done \
- 	fi
- 
-+#
-+# pkg-config files
-+#
-+install_pkgconfig: $(INSTALL_PKGCONFIG)
-+	@if test "x$(INSTALL_PKGCONFIG)" != x; then			\
-+		$(SHELL) $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$(libdir)/pkgconfig; \
-+		for i in $(INSTALL_PKGCONFIG); do			\
-+			echo "installing $$i in $(INSTALL_PREFIX)$(libdir)/pkgconfig"; \
-+		done;							\
-+		$(INSTALL) $(INSTALL_PKGCONFIG) $(INSTALL_PREFIX)$(libdir)/pkgconfig; \
-+	fi
-+
-+uninstall_pkgconfig:
-+	@if test "x$(INSTALL_PKGCONFIG)" != x; then			\
-+		for i in $(INSTALL_PKGCONFIG); do			\
-+			echo "removing $$i from $(INSTALL_PREFIX)$(libdir)/pkgconfig"; \
-+			$(UNINSTALL) $(INSTALL_PREFIX)$(libdir)/pkgconfig/$$i;\
-+		done;							\
-+	fi
-+
- #
- # normal bin binaries
- #
-diff --git a/configure b/configure
-index cad6b74486..8909bffe05 100755
---- a/configure
-+++ b/configure
-@@ -31717,6 +31717,8 @@ ac_config_files="$ac_config_files net-snmp-config:net-snmp-config.in"
- 
- ac_config_files="$ac_config_files net-snmp-create-v3-user:net-snmp-create-v3-user.in"
- 
-+ac_config_files="$ac_config_files netsnmp.pc:netsnmp.pc.in netsnmp-agent.pc:netsnmp-agent.pc.in"
-+
- ac_config_files="$ac_config_files dist/generation-scripts/gen-variables:dist/generation-scripts/gen-variables.in"
- 
- ac_config_files="$ac_config_files local/snmpconf"
-@@ -32740,6 +32742,8 @@ do
-     "mibs/Makefile") CONFIG_FILES="$CONFIG_FILES mibs/Makefile:Makefile.top:mibs/Makefile.in:Makefile.rules" ;;
-     "net-snmp-config") CONFIG_FILES="$CONFIG_FILES net-snmp-config:net-snmp-config.in" ;;
-     "net-snmp-create-v3-user") CONFIG_FILES="$CONFIG_FILES net-snmp-create-v3-user:net-snmp-create-v3-user.in" ;;
-+    "netsnmp.pc") CONFIG_FILES="$CONFIG_FILES netsnmp.pc:netsnmp.pc.in" ;;
-+    "netsnmp-agent.pc") CONFIG_FILES="$CONFIG_FILES netsnmp-agent.pc:netsnmp-agent.pc.in" ;;
-     "dist/generation-scripts/gen-variables") CONFIG_FILES="$CONFIG_FILES dist/generation-scripts/gen-variables:dist/generation-scripts/gen-variables.in" ;;
-     "local/snmpconf") CONFIG_FILES="$CONFIG_FILES local/snmpconf" ;;
-     "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
-diff --git a/configure.ac b/configure.ac
-index 1622b7c051..898b50f368 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -118,6 +118,7 @@ AC_CONFIG_FILES([net-snmp-config:net-snmp-config.in],
- 		[chmod +x net-snmp-config])
- AC_CONFIG_FILES([net-snmp-create-v3-user:net-snmp-create-v3-user.in],
- 		[chmod +x net-snmp-create-v3-user])
-+AC_CONFIG_FILES([netsnmp.pc:netsnmp.pc.in netsnmp-agent.pc:netsnmp-agent.pc.in])
- AC_CONFIG_FILES([dist/generation-scripts/gen-variables:dist/generation-scripts/gen-variables.in])
- AC_CONFIG_FILES([local/snmpconf])
- 
-diff --git a/netsnmp-agent.pc.in b/netsnmp-agent.pc.in
-new file mode 100644
-index 0000000000..3a1c77bbf8
---- /dev/null
-+++ b/netsnmp-agent.pc.in
-@@ -0,0 +1,12 @@
-+prefix=@prefix@
-+exec_prefix=@exec_prefix@
-+includedir=@includedir@
-+libdir=@libdir@
-+
-+Name: netsnmp-agent (@PACKAGE_NAME@)
-+Description: SNMP (Simple Network Management Protocol) sub-agent SDK.
-+URL: http://www.net-snmp.org
-+Version: @PACKAGE_VERSION@
-+Cflags: -I${includedir}
-+Libs: -L${libdir} -lnetsnmpmibs -lnetsnmpagent -lnetsnmp
-+Libs.private: @LDFLAGS@ @LMIBLIBS@ @LAGENTLIBS@ @PERLLDOPTS_FOR_APPS@ @LNETSNMPLIBS@ @LIBS@
-diff --git a/netsnmp.pc.in b/netsnmp.pc.in
-new file mode 100644
-index 0000000000..0a1f5785a4
---- /dev/null
-+++ b/netsnmp.pc.in
-@@ -0,0 +1,12 @@
-+prefix=@prefix@
-+exec_prefix=@exec_prefix@
-+includedir=@includedir@
-+libdir=@libdir@
-+
-+Name: netsnmp (@PACKAGE_NAME@)
-+Description: SNMP (Simple Network Management Protocol) daemon and applications.
-+URL: http://www.net-snmp.org
-+Version: @PACKAGE_VERSION@
-+Cflags: -I${includedir}
-+Libs: -L${libdir} -lnetsnmp
-+Libs.private: @LDFLAGS@ @LNETSNMPLIBS@ @LIBS@ @PERLLDOPTS_FOR_APPS@
--- 
-2.26.2
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_headers-Error-Fix.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_headers-Error-Fix.patch
index 5ad7470..05a47f6 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_headers-Error-Fix.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_headers-Error-Fix.patch
@@ -1,4 +1,4 @@
-From 2ad4df6d503be72a8910c3087611adb33d77ffde Mon Sep 17 00:00:00 2001
+From 69d4c517c07f55c505090e48d96ace8cd599fb26 Mon Sep 17 00:00:00 2001
 From: Li xin <lixin.fnst@cn.fujitsu.com>
 Date: Fri, 21 Aug 2015 18:23:13 +0900
 Subject: [PATCH] config_os_headers: Error Fix
@@ -13,15 +13,16 @@
 Upstream-Status: pending
 
 Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+
 ---
  configure.d/config_os_headers | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/configure.d/config_os_headers b/configure.d/config_os_headers
-index 2fdb5a35d6..0272f02c8e 100644
+index f07d512..2363b42 100644
 --- a/configure.d/config_os_headers
 +++ b/configure.d/config_os_headers
-@@ -487,8 +487,8 @@ then
+@@ -395,8 +395,8 @@ then
      unset ac_cv_header_pkg_h
      netsnmp_save_CPPFLAGS="$CPPFLAGS"
      netsnmp_save_LDFLAGS="$LDFLAGS"
@@ -32,6 +33,3 @@
      AC_CHECK_HEADERS(pkg.h,
          NETSNMP_SEARCH_LIBS(pkg_init, pkg,
  	    AC_DEFINE(HAVE_LIBPKG, 1, [define if you have BSD pkg-ng])))
--- 
-2.26.2
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-get_pid_from_inode-Include-limit.h.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-get_pid_from_inode-Include-limit.h.patch
index bf133b3..22e5915 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-get_pid_from_inode-Include-limit.h.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-get_pid_from_inode-Include-limit.h.patch
@@ -1,4 +1,4 @@
-From 98c6edba4835b515d933542411d80879327eee16 Mon Sep 17 00:00:00 2001
+From 2bf1bbe1d428ed06d57aa76b03e394b72ff2216d Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 Date: Fri, 22 Jul 2016 18:34:39 +0000
 Subject: [PATCH] get_pid_from_inode: Include limit.h
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-net-snmp-fix-compile-error-disable-des.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-net-snmp-fix-compile-error-disable-des.patch
deleted file mode 100644
index 33a1e74..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-net-snmp-fix-compile-error-disable-des.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 383e67e359b89abe0440597ce414297892ade511 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Tue, 26 Feb 2019 14:26:07 +0800
-Subject: [PATCH] net-snmp: fix compile error with --disable-des
-
-| scapi.c: In function 'sc_encrypt':
-| scapi.c:1256:5: error: 'pad_size' undeclared (first use in this function); did you mean 'dysize'?
-|      pad_size = pai->pad_size;
-|      ^~~~~~~~
-|      dysize
-
-pad_size is defined only without --disable-des
-[snip]
-#ifndef NETSNMP_DISABLE_DES
-    int             pad, plast, pad_size = 0;
-
-but used when disable-des,
-[snip]
-        QUITFUN(SNMPERR_GENERR, sc_encrypt_quit);
-    }
-    pad_size = pai->pad_size;
-
-    memset(my_iv, 0, sizeof(my_iv));
-
-#ifndef NETSNMP_DISABLE_DES
-    if (USM_CREATE_USER_PRIV_DES == (pai->type & USM_PRIV_MASK_ALG)) {
-
-        /*
-
-fix by move it into #ifndef NETSNMP_DISABLE_DES
-
-Upstream-Status: Submitted [https://sourceforge.net/p/net-snmp/bugs/2927/]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- snmplib/scapi.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/snmplib/scapi.c b/snmplib/scapi.c
-index 8ad1d70d90..8c6882d9ab 100644
---- a/snmplib/scapi.c
-+++ b/snmplib/scapi.c
-@@ -1251,7 +1251,6 @@ sc_encrypt(const oid * privtype, size_t privtypelen,
- 
-         QUITFUN(SNMPERR_GENERR, sc_encrypt_quit);
-     }
--    pad_size = pai->pad_size;
- 
-     memset(my_iv, 0, sizeof(my_iv));
- 
-@@ -1261,6 +1260,8 @@ sc_encrypt(const oid * privtype, size_t privtypelen,
-         /*
-          * now calculate the padding needed 
-          */
-+
-+       pad_size = pai->pad_size;
-         pad = pad_size - (ptlen % pad_size);
-         plast = (int) ptlen - (pad_size - pad);
-         if (pad == pad_size)
--- 
-2.26.2
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch
index 778b401..42352a6 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch
@@ -1,4 +1,4 @@
-From 89538a973119f1bf976b3a6df157ea940cf32eb5 Mon Sep 17 00:00:00 2001
+From f3ff99736b8cccbba77349b0d10a3cee366a4c87 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 Date: Fri, 18 Sep 2015 00:28:45 -0400
 Subject: [PATCH] snmplib/keytools.c: Don't check for return from
@@ -10,22 +10,25 @@
 snmplib/keytools.c: In function 'generate_Ku': error: invalid use of void expression
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
 
 ---
- snmplib/keytools.c | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
+ snmplib/keytools.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
 
 diff --git a/snmplib/keytools.c b/snmplib/keytools.c
-index 2cf0240..50fd3ea 100644
+index 129a7c0..2fc1efc 100644
 --- a/snmplib/keytools.c
 +++ b/snmplib/keytools.c
-@@ -186,8 +186,7 @@ generate_Ku(const oid * hashtype, u_int hashtype_len,
+@@ -183,10 +183,7 @@ generate_Ku(const oid * hashtype, u_int hashtype_len,
      ctx = EVP_MD_CTX_create();
  #else
      ctx = malloc(sizeof(*ctx));
--    if (!EVP_MD_CTX_init(ctx))
--        return SNMPERR_GENERR;
+-    if (!EVP_MD_CTX_init(ctx)) {
+-        rval = SNMPERR_GENERR;
+-        goto generate_Ku_quit;
+-    }
 +    EVP_MD_CTX_init(ctx);
  #endif
-     if (!EVP_DigestInit(ctx, hashfn))
-         return SNMPERR_GENERR;
+     if (!EVP_DigestInit(ctx, hashfn)) {
+         rval = SNMPERR_GENERR;
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0002-configure-fix-a-cc-check-issue.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0002-configure-fix-a-cc-check-issue.patch
index 4782714..c973bde 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0002-configure-fix-a-cc-check-issue.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0002-configure-fix-a-cc-check-issue.patch
@@ -1,7 +1,7 @@
-From a3631df3d6743113e1cd63579925e15bcce85868 Mon Sep 17 00:00:00 2001
+From 0a02ac779c51a2b4af3b58cb96967bf3eff80367 Mon Sep 17 00:00:00 2001
 From: Wenlin Kang <wenlin.kang@windriver.com>
 Date: Wed, 24 May 2017 16:45:34 +0800
-Subject: [PATCH 2/4] configure: fix a cc check issue.
+Subject: [PATCH] configure: fix a cc check issue.
 
 When has "." in cc value, the expression
 $myperl -V:cc | $myperl -n -e 'print if (s/^\s*cc=.([-=\w\s\/]+).;\s*/$1/);'
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0004-configure-fix-incorrect-variable.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0004-configure-fix-incorrect-variable.patch
index a3d84b2..bfddc63 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0004-configure-fix-incorrect-variable.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0004-configure-fix-incorrect-variable.patch
@@ -1,7 +1,7 @@
-From f3c5cd4df7ce8e5639c99b7b918e41fb89e969e3 Mon Sep 17 00:00:00 2001
+From 011bdcd07f2a289d0cfc1b411c03c0cc7c42dad1 Mon Sep 17 00:00:00 2001
 From: Wenlin Kang <wenlin.kang@windriver.com>
 Date: Wed, 24 May 2017 17:10:20 +0800
-Subject: [PATCH 4/4] configure: fix incorrect variable
+Subject: [PATCH] configure: fix incorrect variable
 
 For cross compile platform, this variable will not be correct, so fix it.
 
@@ -14,10 +14,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Makefile.in b/Makefile.in
-index 9dbdde1..5fdc760 100644
+index 912f6b2..a53d1b2 100644
 --- a/Makefile.in
 +++ b/Makefile.in
-@@ -173,7 +173,7 @@ OTHERCLEANTODOS=perlclean @PYTHONCLEANTARGS@ cleanfeatures perlcleanfeatures pyt
+@@ -174,7 +174,7 @@ OTHERCLEANTODOS=perlclean @PYTHONCLEANTARGS@ cleanfeatures perlcleanfeatures pyt
  #
  # override LD_RUN_PATH to avoid dependencies on the build directory
  perlmodules: perlmakefiles subdirs
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/CVE-2019-20892.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/CVE-2019-20892.patch
deleted file mode 100644
index ec1b6de..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/CVE-2019-20892.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From 5f881d3bf24599b90d67a45cae7a3eb099cd71c9 Mon Sep 17 00:00:00 2001
-From: Bart Van Assche <bvanassche@acm.org>
-Date: Sat, 27 Jul 2019 19:34:09 -0700
-Subject: [PATCH] libsnmp, USM: Introduce a reference count in struct
- usmStateReference
-
-This patch fixes https://sourceforge.net/p/net-snmp/bugs/2956/.
-
-Upstream-Status: Backport
-[ak: fixup for 5.8 context, changes to library/snmpusm.h]
-
-CVE: CVE-2019-20892
-
-Signed-off-by: Armin Kuster <akuster@mvista.com>
-Signed-off-by: Mingde (Matthew) Zeng <matthew.zeng@windriver.com>
-
----
- snmplib/snmp_client.c | 22 +++----------
- snmplib/snmpusm.c     | 73 ++++++++++++++++++++++++++++---------------
- 2 files changed, 53 insertions(+), 42 deletions(-)
-
-Index: net-snmp-5.8/snmplib/snmpusm.c
-===================================================================
---- net-snmp-5.8.orig/snmplib/snmpusm.c
-+++ net-snmp-5.8/snmplib/snmpusm.c
-@@ -285,12 +285,35 @@ free_enginetime_on_shutdown(int majorid,
- struct usmStateReference *
- usm_malloc_usmStateReference(void)
- {
--    struct usmStateReference *retval = (struct usmStateReference *)
--        calloc(1, sizeof(struct usmStateReference));
-+   struct usmStateReference *retval;
- 
-+    retval = calloc(1, sizeof(struct usmStateReference));
-+    if (retval)
-+        retval->refcnt = 1;
-     return retval;
- }                               /* end usm_malloc_usmStateReference() */
- 
-+static int
-+usm_clone(netsnmp_pdu *pdu, netsnmp_pdu *new_pdu)
-+{
-+    struct usmStateReference *ref = pdu->securityStateRef;
-+    struct usmStateReference **new_ref =
-+        (struct usmStateReference **)&new_pdu->securityStateRef;
-+    int ret = 0;
-+
-+    if (!ref)
-+        return ret;
-+
-+    if (pdu->command == SNMP_MSG_TRAP2) {
-+        netsnmp_assert(pdu->securityModel == SNMP_DEFAULT_SECMODEL);
-+        ret = usm_clone_usmStateReference(ref, new_ref);
-+    } else {
-+        netsnmp_assert(ref == *new_ref);
-+        ref->refcnt++;
-+    }
-+
-+    return ret;
-+}
- 
- void
- usm_free_usmStateReference(void *old)
-@@ -3345,6 +3368,7 @@ init_usm(void)
-     def->encode_reverse = usm_secmod_rgenerate_out_msg;
-     def->encode_forward = usm_secmod_generate_out_msg;
-     def->decode = usm_secmod_process_in_msg;
-+    def->pdu_clone = usm_clone;
-     def->pdu_free_state_ref = usm_free_usmStateReference;
-     def->session_setup = usm_session_init;
-     def->handle_report = usm_handle_report;
-Index: net-snmp-5.8/snmplib/snmp_client.c
-===================================================================
---- net-snmp-5.8.orig/snmplib/snmp_client.c
-+++ net-snmp-5.8/snmplib/snmp_client.c
-@@ -402,27 +402,15 @@ _clone_pdu_header(netsnmp_pdu *pdu)
-         return NULL;
-     }
- 
--    if (pdu->securityStateRef &&
--        pdu->command == SNMP_MSG_TRAP2) {
--
--        ret = usm_clone_usmStateReference((struct usmStateReference *) pdu->securityStateRef,
--                (struct usmStateReference **) &newpdu->securityStateRef );
--
--        if (ret)
--        {
-+    sptr = find_sec_mod(newpdu->securityModel);
-+    if (sptr && sptr->pdu_clone) {
-+        /* call security model if it needs to know about this */
-+        ret = sptr->pdu_clone(pdu, newpdu);
-+        if (ret) {
-             snmp_free_pdu(newpdu);
-             return NULL;
-         }
-     }
--
--    if ((sptr = find_sec_mod(newpdu->securityModel)) != NULL &&
--        sptr->pdu_clone != NULL) {
--        /*
--         * call security model if it needs to know about this 
--         */
--        (*sptr->pdu_clone) (pdu, newpdu);
--    }
--
-     return newpdu;
- }
- 
-Index: net-snmp-5.8/include/net-snmp/library/snmpusm.h
-===================================================================
---- net-snmp-5.8.orig/include/net-snmp/library/snmpusm.h
-+++ net-snmp-5.8/include/net-snmp/library/snmpusm.h
-@@ -43,6 +43,7 @@ extern          "C" {
-      * Structures.
-      */
-     struct usmStateReference {
-+        int             refcnt;
-         char           *usr_name;
-         size_t          usr_name_length;
-         u_char         *usr_engine_id;
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/fix-libtool-finish.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/fix-libtool-finish.patch
index fc3ac2a..26dd014 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/fix-libtool-finish.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/fix-libtool-finish.patch
@@ -1,4 +1,4 @@
-From 0becb4843a40910d5ec9aa11969d4905a22037cf Mon Sep 17 00:00:00 2001
+From 27444fbf8323679ea0551a3bd5f04c365143d8c0 Mon Sep 17 00:00:00 2001
 From: "Roy.Li" <rongqing.li@windriver.com>
 Date: Fri, 16 Jan 2015 14:14:01 +0800
 Subject: [PATCH] net-snmp: fix "libtool --finish"
@@ -20,7 +20,7 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Makefile.top b/Makefile.top
-index 5d4f9bc..d0ed31c 100644
+index 6315401..fc0ee06 100644
 --- a/Makefile.top
 +++ b/Makefile.top
 @@ -89,7 +89,7 @@ LIBREVISION = 0
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch
index 5cbb60d..da6d80e 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch
@@ -1,4 +1,4 @@
-From d619cd9fc01f336ff0ff55b18f9112789eb4d84c Mon Sep 17 00:00:00 2001
+From b6a3d6c8af35f1ef27b80b0516742fce89f4eb29 Mon Sep 17 00:00:00 2001
 From: Marian Florea <marian.florea@windriver.com>
 Date: Thu, 20 Jul 2017 16:55:24 +0800
 Subject: [PATCH] net snmp: fix engineBoots value on SIGHUP
@@ -14,10 +14,10 @@
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 diff --git a/agent/snmpd.c b/agent/snmpd.c
-index 6566354..eb0d4b4 100644
+index ae73eda..66b4560 100644
 --- a/agent/snmpd.c
 +++ b/agent/snmpd.c
-@@ -1239,6 +1239,7 @@ receive(void)
+@@ -1207,6 +1207,7 @@ receive(void)
  	    snmp_log(LOG_INFO, "NET-SNMP version %s restarted\n",
  		     netsnmp_get_version());
              update_config();
@@ -26,10 +26,10 @@
  #if HAVE_SIGHOLD
              sigrelse(SIGHUP);
 diff --git a/snmplib/snmpv3.c b/snmplib/snmpv3.c
-index 771ba3b..5de05e7 100644
+index 29c2a0f..ada961c 100644
 --- a/snmplib/snmpv3.c
 +++ b/snmplib/snmpv3.c
-@@ -1060,9 +1060,9 @@ init_snmpv3_post_config(int majorid, int minorid, void *serverarg,
+@@ -1059,9 +1059,9 @@ init_snmpv3_post_config(int majorid, int minorid, void *serverarg,
      /*
       * if our engineID has changed at all, the boots record must be set to 1 
       */
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-add-knob-whether-nlist.h-are-checked.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-add-knob-whether-nlist.h-are-checked.patch
index fb773e6..f1ebe2b 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-add-knob-whether-nlist.h-are-checked.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-add-knob-whether-nlist.h-are-checked.patch
@@ -1,4 +1,4 @@
-From a1134a31d417cc05a1fdb094f613a00a7a5e7ac5 Mon Sep 17 00:00:00 2001
+From e507dcf8b29c55011f85d88bf05400d4717e4074 Mon Sep 17 00:00:00 2001
 From: Chong Lu <Chong.Lu@windriver.com>
 Date: Thu, 28 May 2020 09:46:34 -0500
 Subject: [PATCH] net-snmp: add knob whether nlist.h are checked
@@ -9,30 +9,28 @@
 Upstream-status: Pending
 
 Signed-off-by: Chong Lu <Chong.Lu@windriver.com>
+
 ---
  configure.d/config_os_headers | 2 ++
  1 file changed, 2 insertions(+)
 
 diff --git a/configure.d/config_os_headers b/configure.d/config_os_headers
-index 2fdb5a35d6..af997461d5 100644
+index 76ef58a..f07d512 100644
 --- a/configure.d/config_os_headers
 +++ b/configure.d/config_os_headers
-@@ -32,6 +32,7 @@ AC_CHECK_HEADERS([getopt.h   pthread.h  regex.h      ] dnl
-                  [sys/un.h           ])
+@@ -37,6 +37,7 @@ AC_CHECK_HEADERS([getopt.h   pthread.h  regex.h      ] dnl
+                  [sys/timeb.h        ])
  
  #  Library and Agent:
 +if test "x$with_elf" != "xno"; then
  AC_CHECK_HEADERS([nlist.h],,,[
  AC_INCLUDES_DEFAULT
  [
-@@ -39,6 +40,7 @@ AC_INCLUDES_DEFAULT
+@@ -44,6 +45,7 @@ AC_INCLUDES_DEFAULT
  #define LIBBSD_DISABLE_DEPRECATED 1
  #endif
  ]])
 +fi
  
  #  Library:
- AC_CHECK_HEADERS([fcntl.h    io.h       kstat.h                 ] dnl
--- 
-2.26.2
-
+ AC_CHECK_HEADERS([crt_externs.h                        ] dnl
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-fix-for-disable-des.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-fix-for-disable-des.patch
index 4cd8fd1..2941a36 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-fix-for-disable-des.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-fix-for-disable-des.patch
@@ -1,4 +1,4 @@
-From 068952c0e0cdda5a91250b91c5fcc9b85b43daab Mon Sep 17 00:00:00 2001
+From 3ca4335ec1d6b7b384c134fc85d7a9e513c68376 Mon Sep 17 00:00:00 2001
 From: Jackie Huang <jackie.huang@windriver.com>
 Date: Thu, 22 Jun 2017 10:25:08 +0800
 Subject: [PATCH] net-snmp: fix for --disable-des
@@ -15,10 +15,10 @@
  1 file changed, 2 insertions(+)
 
 diff --git a/snmplib/scapi.c b/snmplib/scapi.c
-index 8ad1d70..43caddf 100644
+index 00c9174..c6875e1 100644
 --- a/snmplib/scapi.c
 +++ b/snmplib/scapi.c
-@@ -84,7 +84,9 @@ netsnmp_feature_child_of(usm_scapi, usm_support)
+@@ -85,7 +85,9 @@ netsnmp_feature_child_of(usm_scapi, usm_support);
  #include <openssl/hmac.h>
  #include <openssl/evp.h>
  #include <openssl/rand.h>
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-testing-add-the-output-format-for-ptest.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-testing-add-the-output-format-for-ptest.patch
index 7cbaf0b..807983f 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-testing-add-the-output-format-for-ptest.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-testing-add-the-output-format-for-ptest.patch
@@ -1,4 +1,4 @@
-From 827fe3b0253aab33472828f40ad05934cc0261b8 Mon Sep 17 00:00:00 2001
+From 972df16e9599dffddf5d714a4cbf43008c771122 Mon Sep 17 00:00:00 2001
 From: Jackie Huang <jackie.huang@windriver.com>
 Date: Wed, 14 Jan 2015 15:10:06 +0800
 Subject: [PATCH] testing: add the output format for ptest
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/reproducibility-accept-configure-options-from-env.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/reproducibility-accept-configure-options-from-env.patch
deleted file mode 100644
index b0dbf5a..0000000
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/reproducibility-accept-configure-options-from-env.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Reproducible build: To avoid build host paths being written into binaries,
-accept NETSNMP_CONFIGURE_OPTIONS from the environment.
-NETSNMP_CONFIGURE_OPTIONS can be set either null or to a fixed value.
-
---- net-snmp-5.8.original/configure.ac	2018-11-20 17:41:39.926529072 +1300
-+++ net-snmp-5.8/configure.ac	2018-11-20 17:54:44.488180224 +1300
-@@ -28,7 +28,7 @@
- #
- # save the configure arguments
- #
--AC_DEFINE_UNQUOTED(NETSNMP_CONFIGURE_OPTIONS,"$ac_configure_args",
-+AC_DEFINE_UNQUOTED(NETSNMP_CONFIGURE_OPTIONS,"${NETSNMP_CONFIGURE_OPTIONS-$ac_configure_args}",
-   [configure options specified])
- CONFIGURE_OPTIONS="\"$ac_configure_args\""
- AC_SUBST(CONFIGURE_OPTIONS)
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/reproducibility-have-printcap.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/reproducibility-have-printcap.patch
index 4316c7a..bf1e7be 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/reproducibility-have-printcap.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/reproducibility-have-printcap.patch
@@ -1,11 +1,22 @@
+From 84e362fe97f50fbad69f083bc2d8fe18f83eb2f7 Mon Sep 17 00:00:00 2001
+From: "douglas.royds" <douglas.royds@taitradio.com>
+Date: Wed, 21 Nov 2018 13:52:18 +1300
+Subject: [PATCH] net-snmp: Reproducibility: Don't check build host for
+
 Reproducible build: Don't check for /etc/printcap on the build machine when
 cross-compiling. Use AC_CHECK_FILE to set the cached variable
 ac_cv_file__etc_printcap instead. When cross-compiling, this variable should be
 set in the environment to "yes" or "no" as appropriate for the target platform.
 
---- net-snmp-5.8.original/configure.d/config_os_misc4	2018-11-20 17:05:03.986274522 +1300
-+++ net-snmp-5.8/configure.d/config_os_misc4	2018-11-20 17:08:32.250700448 +1300
-@@ -116,9 +116,9 @@
+---
+ configure.d/config_os_misc4 | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.d/config_os_misc4 b/configure.d/config_os_misc4
+index 6f23c8e..8cea75a 100644
+--- a/configure.d/config_os_misc4
++++ b/configure.d/config_os_misc4
+@@ -99,9 +99,9 @@ if test x$LPSTAT_PATH != x; then
  	[Path to the lpstat command])
      AC_DEFINE(HAVE_LPSTAT, 1, [Set if the lpstat command is available])
  fi
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.8.bb b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.bb
similarity index 96%
rename from meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.8.bb
rename to meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.bb
index 67316db..5df1f93 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.8.bb
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.bb
@@ -25,13 +25,8 @@
            file://net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch \
            file://net-snmp-fix-for-disable-des.patch \
            file://reproducibility-have-printcap.patch \
-           file://reproducibility-accept-configure-options-from-env.patch \
-           file://0001-net-snmp-fix-compile-error-disable-des.patch \
-           file://0001-Add-pkg-config-support-for-building-applications-and.patch \
-           file://CVE-2019-20892.patch \
            "
-SRC_URI[md5sum] = "63bfc65fbb86cdb616598df1aff6458a"
-SRC_URI[sha256sum] = "b2fc3500840ebe532734c4786b0da4ef0a5f67e51ef4c86b3345d697e4976adf"
+SRC_URI[sha256sum] = "04303a66f85d6d8b16d3cc53bde50428877c82ab524e17591dfceaeb94df6071"
 
 UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/net-snmp/files/net-snmp/"
 UPSTREAM_CHECK_REGEX = "/net-snmp/(?P<pver>\d+(\.\d+)+)/"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga.inc b/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga.inc
index 70c32b7..11b7d57 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga.inc
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga.inc
@@ -40,7 +40,7 @@
 PACKAGECONFIG[cap] = "--enable-capabilities,--disable-capabilities,libcap"
 PACKAGECONFIG[pam] = "--with-libpam, --without-libpam, libpam"
 
-inherit autotools update-rc.d useradd systemd pkgconfig multilib_header
+inherit autotools update-rc.d useradd systemd pkgconfig multilib_header update-alternatives
 
 CFLAGS += "-fcommon"
 
@@ -237,3 +237,7 @@
 pkg_prerm_${PN}-isisd () {
     ${sysconfdir}/init.d/quagga stop isisd
 }
+
+ALTERNATIVE_${PN} = "pimd"
+ALTERNATIVE_LINK_NAME[pimd] = "${sbindir}/pimd"
+
diff --git a/meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_6.10.bb b/meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_6.11.bb
similarity index 96%
rename from meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_6.10.bb
rename to meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_6.11.bb
index 8d82ee4..09b7931 100644
--- a/meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_6.10.bb
+++ b/meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_6.11.bb
@@ -6,7 +6,7 @@
 
 PV = "6.10"
 
-SRCREV = "5ff5fc2ecc10353fd39ad508db5c2828fd2d8d9a"
+SRCREV = "ded4e81796a18cde73329e838357f084aa05720f"
 SRC_URI = "git://git.samba.org/cifs-utils.git"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-networking/recipes-support/ettercap/ettercap_0.8.3.1.bb b/meta-openembedded/meta-networking/recipes-support/ettercap/ettercap_0.8.3.1.bb
new file mode 100644
index 0000000..c641c26
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ettercap/ettercap_0.8.3.1.bb
@@ -0,0 +1,42 @@
+SUMMARY = "A suite for man in the middle attacks"
+HOMEPAGE = "https://github.com/Ettercap/ettercap"
+LICENSE = "GPL-2.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+inherit cmake
+
+DEPENDS += "ethtool \
+            geoip \
+            librepo \
+            libnet \
+            libpcap \
+            ncurses \
+            openssl \
+            zlib \
+            bison-native \
+            flex-native \
+            "
+
+RDEPENDS_${PN} += "bash ethtool libgcc"
+
+SRC_URI = "gitsm://github.com/Ettercap/ettercap"
+
+SRCREV = "7281fbddb7da7478beb1d21e3cb105fff3778b31"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECMAKE = " \
+    -DCMAKE_SKIP_RPATH=TRUE \
+    -DBUNDLED_LIBS=ON \
+    -DENABLE_IPV6=ON \
+    -DENABLE_GTK=OFF \
+"
+
+# Replaces default encoding set (ISO-8859-1) with UTF-8 in ettercap
+# configuration file installed by the package.
+# It ensures that all characters are properly decoded and avoids
+# any fatal errors while running in text mode (-T).
+do_install_append() {
+        sed -i 's@utf8_encoding.*@utf8_encoding = "UTF-8"@g' \
+		${D}/etc/ettercap/etter.conf
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/fping/fping_4.4.bb b/meta-openembedded/meta-networking/recipes-support/fping/fping_5.0.bb
similarity index 91%
rename from meta-openembedded/meta-networking/recipes-support/fping/fping_4.4.bb
rename to meta-openembedded/meta-networking/recipes-support/fping/fping_5.0.bb
index 125fdfa..54606e8 100644
--- a/meta-openembedded/meta-networking/recipes-support/fping/fping_4.4.bb
+++ b/meta-openembedded/meta-networking/recipes-support/fping/fping_5.0.bb
@@ -12,7 +12,7 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=c6170fbadddfcd74f011515291d96901"
 
 SRC_URI = "http://www.fping.org/dist/fping-${PV}.tar.gz"
-SRC_URI[sha256sum] = "9f854b65a52dc7b1749d6743e35d0a6268179d1a724267339fc9a066b2b72d11"
+SRC_URI[sha256sum] = "ed38c0b9b64686a05d1b3bc1d66066114a492e04e44eef1821d43b1263cd57b8"
 
 S = "${WORKDIR}/fping-${PV}"
 
diff --git a/meta-openembedded/meta-networking/recipes-support/pimd/pimd_2.3.2.bb b/meta-openembedded/meta-networking/recipes-support/pimd/pimd_2.3.2.bb
index 2faa7cb..df9e85d 100644
--- a/meta-openembedded/meta-networking/recipes-support/pimd/pimd_2.3.2.bb
+++ b/meta-openembedded/meta-networking/recipes-support/pimd/pimd_2.3.2.bb
@@ -12,9 +12,13 @@
 
 EXTRA_OECONF_append_libc-musl = " --embedded-libc"
 
-inherit autotools-brokensep
+inherit autotools-brokensep update-alternatives
 
 do_configure() {
     oe_runconf
 }
 
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE_${PN} = "pimd"
+ALTERNATIVE_LINK_NAME[pimd] = "${sbindir}/pimd"
diff --git a/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp_2.64.bb b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp_2.64.bb
index 07e3ffe..3739c49 100644
--- a/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp_2.64.bb
+++ b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp_2.64.bb
@@ -12,7 +12,7 @@
 SRC_URI[md5sum] = "65b4e0df4934a6cd08c506cabcbe584f"
 SRC_URI[sha256sum] = "22c37dc90c871e8e052b2cab0ad219d010fa938608cd66b21c8f3c759046fa36"
 
-inherit autotools
+inherit autotools update-alternatives
 
 PACKAGECONFIG ?= "ssl ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
 
@@ -33,3 +33,16 @@
     ln -s ssmtp ${D}${sbindir}/newaliases
     ln -s ssmtp ${D}${sbindir}/mailq
 }
+
+ALTERNATIVE_PRIORITY_${PN} = "100"
+
+ALTERNATIVE_${PN} = "mailq newalias sendmail"
+ALTERNATIVE_LINK_NAME[sendmail] = "${sbindir}/sendmail"
+ALTERNATIVE_LINK_NAME[newalias] = "${sbindir}/newalias"
+ALTERNATIVE_LINK_NAME[mailq] = "${sbindir}/mailq"
+
+ALTERNATIVE_PRIORITY_${PN}-doc = "100"
+ALTERNATIVE_${PN}-doc += "mailq.1 newaliases.1 sendmail.1"
+ALTERNATIVE_LINK_NAME[mailq.1] = "${mandir}/man1/mailq.1"
+ALTERNATIVE_LINK_NAME[newaliases.1] = "${mandir}/man1/newaliases.1"
+ALTERNATIVE_LINK_NAME[sendmail.1] = "${mandir}/man1/sendmail.1"
diff --git a/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_3.2.5.bb b/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_3.2.6.bb
similarity index 96%
rename from meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_3.2.5.bb
rename to meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_3.2.6.bb
index a6c09d4..916c5b7 100644
--- a/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_3.2.5.bb
+++ b/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_3.2.6.bb
@@ -12,7 +12,7 @@
 
 UPSTREAM_CHECK_URI = "https://1.as.dl.wireshark.org/src"
 
-SRC_URI[sha256sum] = "bd89052a5766cce08b1090df49628567e48cdd24bbaa47667c851bac6aaac940"
+SRC_URI[sha256sum] = "ebb1eebe39bcecee02195dc328dd25f6862fc9e9dea4c2e29eae50537d5eb4f2"
 
 PE = "1"
 
diff --git a/meta-openembedded/meta-oe/README b/meta-openembedded/meta-oe/README
index 347816b..6a0d7c0 100644
--- a/meta-openembedded/meta-oe/README
+++ b/meta-openembedded/meta-oe/README
@@ -17,7 +17,7 @@
 Send pull requests to openembedded-devel@lists.openembedded.org with '[meta-oe]' in the subject'
 
 When sending single patches, please use something like:
-'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix=meta-oe][PATCH'
+'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix="meta-oe][PATCH"'
 
 You are encouraged to fork the mirror on GitHub https://github.com/openembedded/openembedded-core
 to share your patches, this is preferred for patch sets consisting of more than one patch.
diff --git a/meta-openembedded/meta-oe/conf/layer.conf b/meta-openembedded/meta-oe/conf/layer.conf
index 5bf1f6c..5b79b59 100644
--- a/meta-openembedded/meta-oe/conf/layer.conf
+++ b/meta-openembedded/meta-oe/conf/layer.conf
@@ -27,6 +27,7 @@
 # to ensure yocto compatibility check pass
 BBFILES_DYNAMIC += " \
 meta-python:${LAYERDIR}/dynamic-layers/meta-python/recipes-*/*/*.bb \
+networking-layer:${LAYERDIR}/dynamic-layers/networking-layer/recipes-*/*/*.bb \
 perl-layer:${LAYERDIR}/dynamic-layers/perl-layer/recipes-*/*/*.bb \
 "
 
@@ -91,6 +92,7 @@
   source-han-sans-jp-fonts->fontconfig \
   source-han-sans-kr-fonts->fontconfig \
   source-han-sans-tw-fonts->fontconfig \
+  source-code-pro-fonts->fontconfig \
 "
 
 DEFAULT_TEST_SUITES_pn-meta-oe-ptest-image = " ${PTESTTESTSUITE}"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Fix-compilation-with-fno-common.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Fix-compilation-with-fno-common.patch
new file mode 100644
index 0000000..f5c2cf2
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Fix-compilation-with-fno-common.patch
@@ -0,0 +1,448 @@
+From 3690dc5f567906c45f057509305fbaa021b33adb Mon Sep 17 00:00:00 2001
+From: Yichao Yu <yyc1992@gmail.com>
+Date: Tue, 15 Sep 2020 12:35:46 -0700
+Subject: [PATCH] Fix compilation with -fno-common.
+
+Making all other archs consistent with IA64 which should not have this problem.
+Also move the FIXME to the correct place.
+
+Also add some minimum comments about this...
+
+Upstream-Status: Backport [https://github.com/libunwind/libunwind/pull/166/commits/29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/third_party/unwind/dist/src/aarch64/Ginit.c   | 15 +++++++--------
+ src/third_party/unwind/dist/src/arm/Ginit.c       | 15 +++++++--------
+ .../src/coredump/_UPT_get_dyn_info_list_addr.c    |  5 +++++
+ src/third_party/unwind/dist/src/hppa/Ginit.c      | 15 +++++++--------
+ src/third_party/unwind/dist/src/ia64/Ginit.c      |  1 +
+ .../unwind/dist/src/mi/Gfind_dynamic_proc_info.c  |  1 +
+ src/third_party/unwind/dist/src/mips/Ginit.c      | 15 +++++++--------
+ src/third_party/unwind/dist/src/ppc32/Ginit.c     | 11 +++++++----
+ src/third_party/unwind/dist/src/ppc64/Ginit.c     | 11 +++++++----
+ .../dist/src/ptrace/_UPT_get_dyn_info_list_addr.c |  5 +++++
+ src/third_party/unwind/dist/src/s390x/Ginit.c     | 15 +++++++--------
+ src/third_party/unwind/dist/src/sh/Ginit.c        | 15 +++++++--------
+ src/third_party/unwind/dist/src/tilegx/Ginit.c    | 15 +++++++--------
+ src/third_party/unwind/dist/src/x86/Ginit.c       | 15 +++++++--------
+ src/third_party/unwind/dist/src/x86_64/Ginit.c    | 15 +++++++--------
+ 15 files changed, 89 insertions(+), 80 deletions(-)
+
+diff --git a/src/third_party/unwind/dist/src/aarch64/Ginit.c b/src/third_party/unwind/dist/src/aarch64/Ginit.c
+index dec235c829..35389762f2 100644
+--- a/src/third_party/unwind/dist/src/aarch64/Ginit.c
++++ b/src/third_party/unwind/dist/src/aarch64/Ginit.c
+@@ -61,13 +61,6 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -78,7 +71,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/arm/Ginit.c b/src/third_party/unwind/dist/src/arm/Ginit.c
+index 2720d063a2..0bac0d72da 100644
+--- a/src/third_party/unwind/dist/src/arm/Ginit.c
++++ b/src/third_party/unwind/dist/src/arm/Ginit.c
+@@ -57,18 +57,17 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c b/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c
+index 0d11905566..739ed0569b 100644
+--- a/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c
++++ b/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c
+@@ -74,6 +74,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
+ 
+ #else
+ 
++/* XXX fix me: there is currently no way to locate the dyn-info list
++       by a remote unwinder.  On ia64, this is done via a special
++       unwind-table entry.  Perhaps something similar can be done with
++       DWARF2 unwind info.  */
++
+ static inline int
+ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
+                int *countp)
+diff --git a/src/third_party/unwind/dist/src/hppa/Ginit.c b/src/third_party/unwind/dist/src/hppa/Ginit.c
+index 461e4b93da..265455a68c 100644
+--- a/src/third_party/unwind/dist/src/hppa/Ginit.c
++++ b/src/third_party/unwind/dist/src/hppa/Ginit.c
+@@ -64,13 +64,6 @@ _Uhppa_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -81,7 +74,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/ia64/Ginit.c b/src/third_party/unwind/dist/src/ia64/Ginit.c
+index b09a2ad57c..8601bb3ca8 100644
+--- a/src/third_party/unwind/dist/src/ia64/Ginit.c
++++ b/src/third_party/unwind/dist/src/ia64/Ginit.c
+@@ -68,6 +68,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+   if (!_U_dyn_info_list_addr)
+     return -UNW_ENOINFO;
+ #endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+   *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+diff --git a/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c b/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c
+index 98d3501286..2e7c62e5e8 100644
+--- a/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c
++++ b/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c
+@@ -49,6 +49,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
+     return -UNW_ENOINFO;
+ #endif
+ 
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+   list = (unw_dyn_info_list_t *) (uintptr_t) _U_dyn_info_list_addr ();
+   for (di = list->first; di; di = di->next)
+     if (ip >= di->start_ip && ip < di->end_ip)
+diff --git a/src/third_party/unwind/dist/src/mips/Ginit.c b/src/third_party/unwind/dist/src/mips/Ginit.c
+index 3df170c754..bf7a8f5a8f 100644
+--- a/src/third_party/unwind/dist/src/mips/Ginit.c
++++ b/src/third_party/unwind/dist/src/mips/Ginit.c
+@@ -69,13 +69,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -86,7 +79,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/ppc32/Ginit.c b/src/third_party/unwind/dist/src/ppc32/Ginit.c
+index ba302448a3..7b45455807 100644
+--- a/src/third_party/unwind/dist/src/ppc32/Ginit.c
++++ b/src/third_party/unwind/dist/src/ppc32/Ginit.c
+@@ -91,9 +91,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -104,7 +101,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/ppc64/Ginit.c b/src/third_party/unwind/dist/src/ppc64/Ginit.c
+index 4c88cd6e77..7bfb395a79 100644
+--- a/src/third_party/unwind/dist/src/ppc64/Ginit.c
++++ b/src/third_party/unwind/dist/src/ppc64/Ginit.c
+@@ -95,9 +95,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -108,7 +105,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c b/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c
+index cc5ed04418..16671d453e 100644
+--- a/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c
++++ b/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c
+@@ -71,6 +71,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
+ 
+ #else
+ 
++/* XXX fix me: there is currently no way to locate the dyn-info list
++       by a remote unwinder.  On ia64, this is done via a special
++       unwind-table entry.  Perhaps something similar can be done with
++       DWARF2 unwind info.  */
++
+ static inline int
+ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
+                int *countp)
+diff --git a/src/third_party/unwind/dist/src/s390x/Ginit.c b/src/third_party/unwind/dist/src/s390x/Ginit.c
+index f0886ac933..db01743c06 100644
+--- a/src/third_party/unwind/dist/src/s390x/Ginit.c
++++ b/src/third_party/unwind/dist/src/s390x/Ginit.c
+@@ -50,8 +50,6 @@ static struct unw_addr_space local_addr_space;
+ 
+ unw_addr_space_t unw_local_addr_space = &local_addr_space;
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+ static inline void *
+ uc_addr (ucontext_t *uc, int reg)
+ {
+@@ -75,11 +73,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -90,7 +83,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/sh/Ginit.c b/src/third_party/unwind/dist/src/sh/Ginit.c
+index 52988a721e..9fe96d2bd4 100644
+--- a/src/third_party/unwind/dist/src/sh/Ginit.c
++++ b/src/third_party/unwind/dist/src/sh/Ginit.c
+@@ -58,13 +58,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -75,7 +68,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/tilegx/Ginit.c b/src/third_party/unwind/dist/src/tilegx/Ginit.c
+index 7564a558be..925e641324 100644
+--- a/src/third_party/unwind/dist/src/tilegx/Ginit.c
++++ b/src/third_party/unwind/dist/src/tilegx/Ginit.c
+@@ -64,13 +64,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -81,7 +74,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/x86/Ginit.c b/src/third_party/unwind/dist/src/x86/Ginit.c
+index f6b8dc27d4..3cec74a216 100644
+--- a/src/third_party/unwind/dist/src/x86/Ginit.c
++++ b/src/third_party/unwind/dist/src/x86/Ginit.c
+@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
+ 
+ # endif /* UNW_LOCAL_ONLY */
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -71,7 +64,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+diff --git a/src/third_party/unwind/dist/src/x86_64/Ginit.c b/src/third_party/unwind/dist/src/x86_64/Ginit.c
+index 6161da6401..5c4e4269a6 100644
+--- a/src/third_party/unwind/dist/src/x86_64/Ginit.c
++++ b/src/third_party/unwind/dist/src/x86_64/Ginit.c
+@@ -49,13 +49,6 @@ static struct unw_addr_space local_addr_space;
+ 
+ unw_addr_space_t unw_local_addr_space = &local_addr_space;
+ 
+-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
+-
+-/* XXX fix me: there is currently no way to locate the dyn-info list
+-       by a remote unwinder.  On ia64, this is done via a special
+-       unwind-table entry.  Perhaps something similar can be done with
+-       DWARF2 unwind info.  */
+-
+ static void
+ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
+ {
+@@ -66,7 +59,13 @@ static int
+ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
+                         void *arg)
+ {
+-  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
++#ifndef UNW_LOCAL_ONLY
++# pragma weak _U_dyn_info_list_addr
++  if (!_U_dyn_info_list_addr)
++    return -UNW_ENOINFO;
++#endif
++  // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
++  *dyn_info_list_addr = _U_dyn_info_list_addr ();
+   return 0;
+ }
+ 
+-- 
+2.28.0
+
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
index 1908846..b8a3252 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
@@ -1,4 +1,4 @@
-From 1b2e24e14ee72e54e466be2512c78272f62d60b4 Mon Sep 17 00:00:00 2001
+From 8295bb6a60896fed54d6450bca091aea4eea4fb2 Mon Sep 17 00:00:00 2001
 From: Vincent Prince <vincent.prince.fr@gmail.com>
 Date: Mon, 16 Sep 2019 13:21:44 +0200
 Subject: [PATCH 01/10] Tell scons to use build settings from environment
@@ -7,14 +7,14 @@
 Signed-off-by: Sven Ebenfeld <sven.ebenfeld@gmail.com>
 Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
 ---
- SConstruct                | 8 ++++++--
- 1 files changed, 8 insertions(+), 2 deletions(-)
+ SConstruct | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
 
 diff --git a/SConstruct b/SConstruct
-index 7ebbcbc..e63cf15 100644
+index 89c044ab78..2044c0ddb8 100644
 --- a/SConstruct
 +++ b/SConstruct
-@@ -608,6 +608,7 @@ def variable_arch_converter(val):
+@@ -593,6 +593,7 @@ def variable_arch_converter(val):
          'amd64':  'x86_64',
          'emt64':   'x86_64',
          'x86':    'i386',
@@ -22,7 +22,7 @@
      }
      val = val.lower()
  
-@@ -695,7 +696,8 @@ env_vars.Add(
+@@ -723,7 +724,8 @@ env_vars.Add(
  )
  
  env_vars.Add('CC',
@@ -32,7 +32,7 @@
  
  env_vars.Add('CCFLAGS',
      help='Sets flags for the C and C++ compiler',
-@@ -715,7 +717,8 @@ env_vars.Add('CPPPATH',
+@@ -743,7 +745,8 @@ env_vars.Add('CPPPATH',
      converter=variable_shlex_converter)
  
  env_vars.Add('CXX',
@@ -42,15 +42,14 @@
  
  env_vars.Add('CXXFLAGS',
      help='Sets flags for the C++ compiler',
-@@ -1018,6 +1021,7 @@ envDict = dict(BUILD_ROOT=buildDir,
-                )
+@@ -1127,6 +1130,7 @@ if get_option('build-tools') == 'next' or get_option('ninja') == 'next':
+     SCons.Tool.DefaultToolpath.insert(0, os.path.abspath('site_scons/site_tools/next'))
  
  env = Environment(variables=env_vars, **envDict)
 +env.PrependENVPath('PATH', os.getenv('PATH'))
- del envDict
  
- for var in ['CC', 'CXX']:
- 
+ # Only print the spinner if stdout is a tty
+ if sys.stdout.isatty():
 -- 
-2.7.4
+2.24.0
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
index d98fa56..8d82be1 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
@@ -1,4 +1,4 @@
-From d701ceeb15662038435b80ba556a80c17f76d2dc Mon Sep 17 00:00:00 2001
+From 6332823f9fdcb571305b716330e67d0b38810868 Mon Sep 17 00:00:00 2001
 From: Vincent Prince <vincent.prince.fr@gmail.com>
 Date: Mon, 16 Sep 2019 13:30:13 +0200
 Subject: [PATCH 03/10] Use __GLIBC__ to control use of gnu_get_libc_version
@@ -10,7 +10,7 @@
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/src/mongo/util/processinfo_linux.cpp b/src/mongo/util/processinfo_linux.cpp
-index cccb91c..45c4b7d 100644
+index a968c54727..0d8b8874e2 100644
 --- a/src/mongo/util/processinfo_linux.cpp
 +++ b/src/mongo/util/processinfo_linux.cpp
 @@ -44,10 +44,10 @@
@@ -27,7 +27,7 @@
  #endif
  
  #include <boost/filesystem.hpp>
-@@ -546,7 +546,7 @@ void ProcessInfo::SystemInfo::collectSystemInfo() {
+@@ -617,7 +617,7 @@ void ProcessInfo::SystemInfo::collectSystemInfo() {
      std::stringstream ss;
      ss << "uClibc-" << __UCLIBC_MAJOR__ << "." << __UCLIBC_MINOR__ << "." << __UCLIBC_SUBLEVEL__;
      bExtra.append("libcVersion", ss.str());
@@ -37,5 +37,5 @@
  #endif
      if (!verSig.empty())
 -- 
-2.7.4
+2.24.0
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
index b9c6704..958e09c 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
@@ -1,4 +1,4 @@
-From 20fcbf2a05ee6542aba942f6006d149db70fb9ce Mon Sep 17 00:00:00 2001
+From 4e7f15346682482bc2071c7209dec97507d3bc4c Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 Date: Sat, 2 Sep 2017 10:03:37 -0700
 Subject: [PATCH 02/10] Use long long instead of int64_t
@@ -8,12 +8,13 @@
 since this function expects long long as parameter and not int64_t
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
 ---
  src/mongo/util/procparser.cpp | 10 +++++-----
  1 file changed, 5 insertions(+), 5 deletions(-)
 
 diff --git a/src/mongo/util/procparser.cpp b/src/mongo/util/procparser.cpp
-index c574a3f..5ea66b7 100644
+index 24b9d1e2c9..0f274cfff6 100644
 --- a/src/mongo/util/procparser.cpp
 +++ b/src/mongo/util/procparser.cpp
 @@ -261,7 +261,7 @@ Status parseProcStat(const std::vector<StringData>& keys,
@@ -23,7 +24,7 @@
 -                    uint64_t value;
 +                    long long  value;
  
-                     if (!parseNumberFromString(stringValue, &value).isOK()) {
+                     if (!NumberParser{}(stringValue, &value).isOK()) {
                          value = 0;
 @@ -273,7 +273,7 @@ Status parseProcStat(const std::vector<StringData>& keys,
              } else {
@@ -32,7 +33,7 @@
 -                uint64_t value;
 +                long long value;
  
-                 if (!parseNumberFromString(stringValue, &value).isOK()) {
+                 if (!NumberParser{}(stringValue, &value).isOK()) {
                      value = 0;
 @@ -366,7 +366,7 @@ Status parseProcMemInfo(const std::vector<StringData>& keys,
  
@@ -41,7 +42,7 @@
 -            uint64_t value;
 +            long long value;
  
-             if (!parseNumberFromString(stringValue, &value).isOK()) {
+             if (!NumberParser{}(stringValue, &value).isOK()) {
                  value = 0;
 @@ -522,7 +522,7 @@ Status parseProcDiskStats(const std::vector<StringData>& disks,
                            StringData data,
@@ -59,8 +60,8 @@
 -                uint64_t value;
 +                long long value;
  
-                 if (!parseNumberFromString(stringValue, &value).isOK()) {
+                 if (!NumberParser{}(stringValue, &value).isOK()) {
                      value = 0;
 -- 
-2.7.4
+2.24.0
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-kms-message-bump-libmongocrypto-to-v1.0.4.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-kms-message-bump-libmongocrypto-to-v1.0.4.patch
new file mode 100644
index 0000000..df4cee2
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-kms-message-bump-libmongocrypto-to-v1.0.4.patch
@@ -0,0 +1,714 @@
+From 44272ce47e768e090263df5cb9cb7ce17e544ad3 Mon Sep 17 00:00:00 2001
+From: Vincent Prince <vincent.prince.external@saftbatteries.com>
+Date: Tue, 15 Sep 2020 11:40:15 +0200
+Subject: [PATCH] kms-message: bump libmongocrypto to v1.0.4
+
+This fixes compilation with alpinelinux
+see https://github.com/mongodb/libmongocrypt/pull/89
+
+Upstream-Status: Pending
+
+Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
+---
+ .../kms-message/THIRD_PARTY_NOTICES           |  2 +-
+ src/third_party/kms-message/src/hexlify.c     | 21 +----
+ src/third_party/kms-message/src/hexlify.h     |  2 -
+ .../kms-message/src/kms_crypto_apple.c        |  5 +
+ .../kms-message/src/kms_crypto_libcrypto.c    | 94 +++++++++++++++++++
+ .../kms-message/src/kms_crypto_none.c         |  4 +
+ .../kms-message/src/kms_crypto_windows.c      |  4 +
+ .../kms-message/src/kms_decrypt_request.c     |  2 +-
+ .../kms-message/src/kms_encrypt_request.c     |  2 +-
+ src/third_party/kms-message/src/kms_kv_list.c | 11 ++-
+ .../kms-message/src/kms_message/kms_message.h |  2 +
+ .../src/kms_message/kms_message_defines.h     | 10 ++
+ src/third_party/kms-message/src/kms_port.c    | 33 +++++++
+ src/third_party/kms-message/src/kms_port.h    | 27 +++---
+ src/third_party/kms-message/src/kms_request.c | 41 +++++---
+ .../kms-message/src/kms_request_str.c         | 13 ++-
+ .../kms-message/src/kms_request_str.h         |  5 -
+ .../kms-message/src/kms_response_parser.c     | 26 ++++-
+ .../scripts/kms_message_get_sources.sh        |  2 +-
+ 19 files changed, 244 insertions(+), 62 deletions(-)
+ create mode 100644 src/third_party/kms-message/src/kms_crypto_libcrypto.c
+ create mode 100644 src/third_party/kms-message/src/kms_port.c
+
+diff --git a/src/third_party/kms-message/THIRD_PARTY_NOTICES b/src/third_party/kms-message/THIRD_PARTY_NOTICES
+index 3fc095170c..4110c1b91e 100644
+--- a/src/third_party/kms-message/THIRD_PARTY_NOTICES
++++ b/src/third_party/kms-message/THIRD_PARTY_NOTICES
+@@ -1,4 +1,4 @@
+-License notice for common-b64.c
++License notice for kms_b64.c
+ -------------------------------------------------------------------------------
+ 
+ ISC License
+diff --git a/src/third_party/kms-message/src/hexlify.c b/src/third_party/kms-message/src/hexlify.c
+index be9ee030b9..941fc93d1b 100644
+--- a/src/third_party/kms-message/src/hexlify.c
++++ b/src/third_party/kms-message/src/hexlify.c
+@@ -24,6 +24,8 @@ char *
+ hexlify (const uint8_t *buf, size_t len)
+ {
+    char *hex_chars = malloc (len * 2 + 1);
++   KMS_ASSERT (hex_chars);
++
+    char *p = hex_chars;
+    size_t i;
+ 
+@@ -35,22 +37,3 @@ hexlify (const uint8_t *buf, size_t len)
+ 
+    return hex_chars;
+ }
+-
+-uint8_t *
+-unhexlify (const char *hex_chars, size_t *len)
+-{
+-   uint8_t *buf;
+-   uint8_t *pos;
+-
+-   *len = strlen (hex_chars) / 2;
+-   buf = malloc (*len);
+-   pos = buf;
+-
+-   while (*hex_chars) {
+-      KMS_ASSERT (1 == sscanf (hex_chars, "%2hhx", pos));
+-      pos++;
+-      hex_chars += 2;
+-   }
+-
+-   return buf;
+-}
+diff --git a/src/third_party/kms-message/src/hexlify.h b/src/third_party/kms-message/src/hexlify.h
+index e0096eb6ca..a6a504ebe8 100644
+--- a/src/third_party/kms-message/src/hexlify.h
++++ b/src/third_party/kms-message/src/hexlify.h
+@@ -19,5 +19,3 @@
+ 
+ char *
+ hexlify (const uint8_t *buf, size_t len);
+-uint8_t *
+-unhexlify (const char *hex_chars, size_t *len);
+diff --git a/src/third_party/kms-message/src/kms_crypto_apple.c b/src/third_party/kms-message/src/kms_crypto_apple.c
+index 61da0a6288..a26e0d65e8 100644
+--- a/src/third_party/kms-message/src/kms_crypto_apple.c
++++ b/src/third_party/kms-message/src/kms_crypto_apple.c
+@@ -16,9 +16,12 @@
+ 
+ #include "kms_crypto.h"
+ 
++#ifdef KMS_MESSAGE_ENABLE_CRYPTO_COMMON_CRYPTO
++
+ #include <CommonCrypto/CommonDigest.h>
+ #include <CommonCrypto/CommonHMAC.h>
+ 
++
+ int
+ kms_crypto_init ()
+ {
+@@ -54,3 +57,5 @@ kms_sha256_hmac (void *unused_ctx,
+    CCHmac (kCCHmacAlgSHA256, key_input, key_len, input, len, hash_out);
+    return true;
+ }
++
++#endif /* KMS_MESSAGE_ENABLE_CRYPTO_COMMON_CRYPTO */
+diff --git a/src/third_party/kms-message/src/kms_crypto_libcrypto.c b/src/third_party/kms-message/src/kms_crypto_libcrypto.c
+new file mode 100644
+index 0000000000..6f25657fdd
+--- /dev/null
++++ b/src/third_party/kms-message/src/kms_crypto_libcrypto.c
+@@ -0,0 +1,94 @@
++/*
++ * Copyright 2018-present MongoDB, Inc.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++#include "kms_crypto.h"
++
++#ifdef KMS_MESSAGE_ENABLE_CRYPTO_LIBCRYPTO
++
++#include <openssl/sha.h>
++#include <openssl/evp.h>
++#include <openssl/hmac.h>
++
++#if OPENSSL_VERSION_NUMBER < 0x10100000L || \
++   (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20700000L)
++static EVP_MD_CTX *
++EVP_MD_CTX_new (void)
++{
++   return calloc (sizeof (EVP_MD_CTX), 1);
++}
++
++static void
++EVP_MD_CTX_free (EVP_MD_CTX *ctx)
++{
++   EVP_MD_CTX_cleanup (ctx);
++   free (ctx);
++}
++#endif
++
++int
++kms_crypto_init ()
++{
++   return 0;
++}
++
++void
++kms_crypto_cleanup ()
++{
++}
++
++bool
++kms_sha256 (void *unused_ctx,
++            const char *input,
++            size_t len,
++            unsigned char *hash_out)
++{
++   EVP_MD_CTX *digest_ctxp = EVP_MD_CTX_new ();
++   bool rval = false;
++
++   if (1 != EVP_DigestInit_ex (digest_ctxp, EVP_sha256 (), NULL)) {
++      goto cleanup;
++   }
++
++   if (1 != EVP_DigestUpdate (digest_ctxp, input, len)) {
++      goto cleanup;
++   }
++
++   rval = (1 == EVP_DigestFinal_ex (digest_ctxp, hash_out, NULL));
++
++cleanup:
++   EVP_MD_CTX_free (digest_ctxp);
++
++   return rval;
++}
++
++bool
++kms_sha256_hmac (void *unused_ctx,
++                 const char *key_input,
++                 size_t key_len,
++                 const char *input,
++                 size_t len,
++                 unsigned char *hash_out)
++{
++   return HMAC (EVP_sha256 (),
++                key_input,
++                key_len,
++                (unsigned char *) input,
++                len,
++                hash_out,
++                NULL) != NULL;
++}
++
++#endif /* KMS_MESSAGE_ENABLE_CRYPTO_LIBCRYPTO */
+diff --git a/src/third_party/kms-message/src/kms_crypto_none.c b/src/third_party/kms-message/src/kms_crypto_none.c
+index 9ef2147687..94da5abd88 100644
+--- a/src/third_party/kms-message/src/kms_crypto_none.c
++++ b/src/third_party/kms-message/src/kms_crypto_none.c
+@@ -16,6 +16,8 @@
+ 
+ #include "kms_crypto.h"
+ 
++#ifndef KMS_MESSAGE_ENABLE_CRYPTO
++
+ int
+ kms_crypto_init ()
+ {
+@@ -48,3 +50,5 @@ kms_sha256_hmac (void *unused_ctx,
+    /* only gets called if hooks were mistakenly not set */
+    return false;
+ }
++
++#endif /* KMS_MESSAGE_ENABLE_CRYPTO */
+diff --git a/src/third_party/kms-message/src/kms_crypto_windows.c b/src/third_party/kms-message/src/kms_crypto_windows.c
+index ccdc7e095d..8177b0ddc0 100644
+--- a/src/third_party/kms-message/src/kms_crypto_windows.c
++++ b/src/third_party/kms-message/src/kms_crypto_windows.c
+@@ -16,6 +16,8 @@
+ 
+ #include "kms_crypto.h"
+ 
++#ifdef KMS_MESSAGE_ENABLE_CRYPTO_CNG
++
+ // tell windows.h not to include a bunch of headers we don't need:
+ #define WIN32_LEAN_AND_MEAN
+ 
+@@ -130,3 +132,5 @@ cleanup:
+ 
+    return status == STATUS_SUCCESS ? 1 : 0;
+ }
++
++#endif /* KMS_MESSAGE_ENABLE_CRYPTO_CNG */
+diff --git a/src/third_party/kms-message/src/kms_decrypt_request.c b/src/third_party/kms-message/src/kms_decrypt_request.c
+index 06faa43119..f1ca282768 100644
+--- a/src/third_party/kms-message/src/kms_decrypt_request.c
++++ b/src/third_party/kms-message/src/kms_decrypt_request.c
+@@ -48,7 +48,7 @@ kms_decrypt_request_new (const uint8_t *ciphertext_blob,
+    if (!(b64 = malloc (b64_len))) {
+       KMS_ERROR (request,
+                  "Could not allocate %d bytes for base64-encoding payload",
+-                 b64_len);
++                 (int) b64_len);
+       goto done;
+    }
+ 
+diff --git a/src/third_party/kms-message/src/kms_encrypt_request.c b/src/third_party/kms-message/src/kms_encrypt_request.c
+index b5f4d6436e..24b064d95f 100644
+--- a/src/third_party/kms-message/src/kms_encrypt_request.c
++++ b/src/third_party/kms-message/src/kms_encrypt_request.c
+@@ -47,7 +47,7 @@ kms_encrypt_request_new (const uint8_t *plaintext,
+    if (!(b64 = malloc (b64_len))) {
+       KMS_ERROR (request,
+                  "Could not allocate %d bytes for base64-encoding payload",
+-                 b64_len);
++                 (int) b64_len);
+       goto done;
+    }
+ 
+diff --git a/src/third_party/kms-message/src/kms_kv_list.c b/src/third_party/kms-message/src/kms_kv_list.c
+index 2d6845a1aa..0cff3dc2c6 100644
+--- a/src/third_party/kms-message/src/kms_kv_list.c
++++ b/src/third_party/kms-message/src/kms_kv_list.c
+@@ -17,6 +17,7 @@
+ 
+ #include "kms_kv_list.h"
+ #include "kms_message/kms_message.h"
++#include "kms_message_private.h"
+ #include "kms_request_str.h"
+ #include "kms_port.h"
+ #include "sort.h"
+@@ -39,9 +40,12 @@ kms_kv_list_t *
+ kms_kv_list_new (void)
+ {
+    kms_kv_list_t *lst = malloc (sizeof (kms_kv_list_t));
++   KMS_ASSERT (lst);
+ 
+    lst->size = 16;
+    lst->kvs = malloc (lst->size * sizeof (kms_kv_t));
++   KMS_ASSERT (lst->kvs);
++
+    lst->len = 0;
+ 
+    return lst;
+@@ -72,6 +76,7 @@ kms_kv_list_add (kms_kv_list_t *lst,
+    if (lst->len == lst->size) {
+       lst->size *= 2;
+       lst->kvs = realloc (lst->kvs, lst->size * sizeof (kms_kv_t));
++      KMS_ASSERT (lst->kvs);
+    }
+ 
+    kv_init (&lst->kvs[lst->len], key, value);
+@@ -84,7 +89,7 @@ kms_kv_list_find (const kms_kv_list_t *lst, const char *key)
+    size_t i;
+ 
+    for (i = 0; i < lst->len; i++) {
+-      if (0 == strcasecmp (lst->kvs[i].key->str, key)) {
++      if (0 == kms_strcasecmp (lst->kvs[i].key->str, key)) {
+          return &lst->kvs[i];
+       }
+    }
+@@ -119,8 +124,12 @@ kms_kv_list_dup (const kms_kv_list_t *lst)
+    }
+ 
+    dup = malloc (sizeof (kms_kv_list_t));
++   KMS_ASSERT (dup);
++
+    dup->size = dup->len = lst->len;
+    dup->kvs = malloc (lst->len * sizeof (kms_kv_t));
++   KMS_ASSERT (dup->kvs);
++
+ 
+    for (i = 0; i < lst->len; i++) {
+       kv_init (&dup->kvs[i], lst->kvs[i].key, lst->kvs[i].value);
+diff --git a/src/third_party/kms-message/src/kms_message/kms_message.h b/src/third_party/kms-message/src/kms_message/kms_message.h
+index 6ea95dd04c..8048528f2e 100644
+--- a/src/third_party/kms-message/src/kms_message/kms_message.h
++++ b/src/third_party/kms-message/src/kms_message/kms_message.h
+@@ -17,6 +17,8 @@
+ #ifndef KMS_MESSAGE_H
+ #define KMS_MESSAGE_H
+ 
++#include <sys/types.h>
++
+ #include "kms_message_defines.h"
+ #include "kms_request_opt.h"
+ #include "kms_request.h"
+diff --git a/src/third_party/kms-message/src/kms_message/kms_message_defines.h b/src/third_party/kms-message/src/kms_message/kms_message_defines.h
+index a4d019bd77..a539d531ef 100644
+--- a/src/third_party/kms-message/src/kms_message/kms_message_defines.h
++++ b/src/third_party/kms-message/src/kms_message/kms_message_defines.h
+@@ -53,4 +53,14 @@ kms_message_cleanup (void);
+ } /* extern "C" */
+ #endif
+ 
++#ifdef _MSC_VER
++#include <basetsd.h>
++#pragma warning(disable : 4142)
++#ifndef _SSIZE_T_DEFINED
++#define _SSIZE_T_DEFINED
++typedef SSIZE_T ssize_t;
++#endif
++#pragma warning(default : 4142)
++#endif
++
+ #endif /* KMS_MESSAGE_DEFINES_H */
+diff --git a/src/third_party/kms-message/src/kms_port.c b/src/third_party/kms-message/src/kms_port.c
+new file mode 100644
+index 0000000000..ee9e6ed9c9
+--- /dev/null
++++ b/src/third_party/kms-message/src/kms_port.c
+@@ -0,0 +1,33 @@
++/*
++ * Copyright 2020-present MongoDB, Inc.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ *   http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++#include "kms_port.h"
++#if defined(_WIN32)
++#include <stdlib.h>
++#include <string.h>
++char * kms_strndup (const char *src, size_t len)
++{
++   char *dst = (char *) malloc (len + 1);
++   if (!dst) {
++      return 0;
++   }
++
++   memcpy (dst, src, len);
++   dst[len] = '\0';
++
++   return dst;
++}
++#endif
+\ No newline at end of file
+diff --git a/src/third_party/kms-message/src/kms_port.h b/src/third_party/kms-message/src/kms_port.h
+index c3cbbac369..2123a99dc9 100644
+--- a/src/third_party/kms-message/src/kms_port.h
++++ b/src/third_party/kms-message/src/kms_port.h
+@@ -15,21 +15,18 @@
+  * limitations under the License.
+  */
+ 
+-#if defined(_WIN32)
+-#define strcasecmp _stricmp
+-
+-inline char *
+-strndup (const char *src, size_t len)
+-{
+-   char *dst = (char *) malloc (len + 1);
+-   if (!dst) {
+-      return 0;
+-   }
+-
+-   memcpy (dst, src, len);
+-   dst[len] = '\0';
++#ifndef KMS_PORT_H
++#define KMS_PORT_H
+ 
+-   return dst;
+-}
++#include <stddef.h>
+ 
++#if defined(_WIN32)
++#define kms_strcasecmp _stricmp
++char *
++kms_strndup (const char *src, size_t len);
++#else
++#define kms_strndup strndup
++#define kms_strcasecmp strcasecmp
+ #endif
++
++#endif /* KMS_PORT_H */
+\ No newline at end of file
+diff --git a/src/third_party/kms-message/src/kms_request.c b/src/third_party/kms-message/src/kms_request.c
+index fa2d487123..ac2b07ea6b 100644
+--- a/src/third_party/kms-message/src/kms_request.c
++++ b/src/third_party/kms-message/src/kms_request.c
+@@ -61,6 +61,7 @@ kms_request_new (const char *method,
+    kms_request_t *request = calloc (1, sizeof (kms_request_t));
+    const char *question_mark;
+ 
++   KMS_ASSERT (request);
+    /* parsing may set failed to true */
+    request->failed = false;
+ 
+@@ -92,10 +93,14 @@ kms_request_new (const char *method,
+    request->header_fields = kms_kv_list_new ();
+    request->auto_content_length = true;
+ 
+-   kms_request_set_date (request, NULL);
++   if (!kms_request_set_date (request, NULL)) {
++      return request;
++   }
+ 
+    if (opt && opt->connection_close) {
+-      kms_request_add_header_field (request, "Connection", "close");
++      if (!kms_request_add_header_field (request, "Connection", "close")) {
++         return request;
++      }
+    }
+ 
+    if (opt && opt->crypto.sha256) {
+@@ -164,7 +169,9 @@ kms_request_set_date (kms_request_t *request, const struct tm *tm)
+    kms_request_str_set_chars (request->date, buf, sizeof "YYYYmmDD" - 1);
+    kms_request_str_set_chars (request->datetime, buf, sizeof AMZ_DT_FORMAT - 1);
+    kms_kv_list_del (request->header_fields, "X-Amz-Date");
+-   kms_request_add_header_field (request, "X-Amz-Date", buf);
++   if (!kms_request_add_header_field (request, "X-Amz-Date", buf)) {
++      return false;
++   }
+ 
+    return true;
+ }
+@@ -309,7 +316,8 @@ append_canonical_headers (kms_kv_list_t *lst, kms_request_str_t *str)
+     * values in headers that have multiple values." */
+    for (i = 0; i < lst->len; i++) {
+       kv = &lst->kvs[i];
+-      if (previous_key && 0 == strcasecmp (previous_key->str, kv->key->str)) {
++      if (previous_key &&
++          0 == kms_strcasecmp (previous_key->str, kv->key->str)) {
+          /* duplicate header */
+          kms_request_str_append_char (str, ',');
+          kms_request_str_append_stripped (str, kv->value);
+@@ -339,12 +347,13 @@ append_signed_headers (kms_kv_list_t *lst, kms_request_str_t *str)
+ 
+    for (i = 0; i < lst->len; i++) {
+       kv = &lst->kvs[i];
+-      if (previous_key && 0 == strcasecmp (previous_key->str, kv->key->str)) {
++      if (previous_key &&
++          0 == kms_strcasecmp (previous_key->str, kv->key->str)) {
+          /* duplicate header */
+          continue;
+       }
+ 
+-      if (0 == strcasecmp (kv->key->str, "connection")) {
++      if (0 == kms_strcasecmp (kv->key->str, "connection")) {
+          continue;
+       }
+ 
+@@ -412,7 +421,8 @@ finalize (kms_request_t *request)
+ static int
+ cmp_header_field_names (const void *a, const void *b)
+ {
+-   return strcasecmp (((kms_kv_t *) a)->key->str, ((kms_kv_t *) b)->key->str);
++   return kms_strcasecmp (((kms_kv_t *) a)->key->str,
++                          ((kms_kv_t *) b)->key->str);
+ }
+ 
+ static kms_kv_list_t *
+@@ -447,6 +457,7 @@ kms_request_get_canonical (kms_request_t *request)
+    kms_request_str_append_newline (canonical);
+    normalized = kms_request_str_path_normalized (request->path);
+    kms_request_str_append_escaped (canonical, normalized, false);
++   kms_request_str_destroy (normalized);
+    kms_request_str_append_newline (canonical);
+    append_canonical_query (request, canonical);
+    kms_request_str_append_newline (canonical);
+@@ -454,12 +465,14 @@ kms_request_get_canonical (kms_request_t *request)
+    append_canonical_headers (lst, canonical);
+    kms_request_str_append_newline (canonical);
+    append_signed_headers (lst, canonical);
+-   kms_request_str_append_newline (canonical);
+-   kms_request_str_append_hashed (
+-      &request->crypto, canonical, request->payload);
+-
+-   kms_request_str_destroy (normalized);
+    kms_kv_list_destroy (lst);
++   kms_request_str_append_newline (canonical);
++   if (!kms_request_str_append_hashed (
++          &request->crypto, canonical, request->payload)) {
++      KMS_ERROR (request, "could not generate hash");
++      kms_request_str_destroy (canonical);
++      return NULL;
++   }
+ 
+    return kms_request_str_detach (canonical);
+ }
+@@ -514,6 +527,10 @@ kms_request_get_string_to_sign (kms_request_t *request)
+    kms_request_str_append_chars (sts, "/aws4_request\n", -1);
+ 
+    creq = kms_request_str_wrap (kms_request_get_canonical (request), -1);
++   if (!creq) {
++      goto done;
++   }
++
+    if (!kms_request_str_append_hashed (&request->crypto, sts, creq)) {
+       goto done;
+    }
+diff --git a/src/third_party/kms-message/src/kms_request_str.c b/src/third_party/kms-message/src/kms_request_str.c
+index 0f7c19c972..65207d2f4f 100644
+--- a/src/third_party/kms-message/src/kms_request_str.c
++++ b/src/third_party/kms-message/src/kms_request_str.c
+@@ -51,10 +51,13 @@ kms_request_str_t *
+ kms_request_str_new (void)
+ {
+    kms_request_str_t *s = malloc (sizeof (kms_request_str_t));
++   KMS_ASSERT (s);
+ 
+    s->len = 0;
+    s->size = 16;
+    s->str = malloc (s->size);
++   KMS_ASSERT (s->str);
++
+    s->str[0] = '\0';
+ 
+    return s;
+@@ -64,11 +67,15 @@ kms_request_str_t *
+ kms_request_str_new_from_chars (const char *chars, ssize_t len)
+ {
+    kms_request_str_t *s = malloc (sizeof (kms_request_str_t));
++   KMS_ASSERT (s);
++
+    size_t actual_len;
+ 
+    actual_len = len < 0 ? strlen (chars) : (size_t) len;
+    s->size = actual_len + 1;
+    s->str = malloc (s->size);
++   KMS_ASSERT (s->str);
++
+    memcpy (s->str, chars, actual_len);
+    s->str[actual_len] = '\0';
+    s->len = actual_len;
+@@ -86,6 +93,8 @@ kms_request_str_wrap (char *chars, ssize_t len)
+    }
+ 
+    s = malloc (sizeof (kms_request_str_t));
++   KMS_ASSERT (s);
++
+ 
+    s->str = chars;
+    s->len = len < 0 ? strlen (chars) : (size_t) len;
+@@ -148,8 +157,10 @@ kms_request_str_t *
+ kms_request_str_dup (kms_request_str_t *str)
+ {
+    kms_request_str_t *dup = malloc (sizeof (kms_request_str_t));
++   KMS_ASSERT (dup);
++
+ 
+-   dup->str = strndup (str->str, str->len);
++   dup->str = kms_strndup (str->str, str->len);
+    dup->len = str->len;
+    dup->size = str->len + 1;
+ 
+diff --git a/src/third_party/kms-message/src/kms_request_str.h b/src/third_party/kms-message/src/kms_request_str.h
+index f053a595aa..0898f59067 100644
+--- a/src/third_party/kms-message/src/kms_request_str.h
++++ b/src/third_party/kms-message/src/kms_request_str.h
+@@ -25,11 +25,6 @@
+ #include <stdint.h>
+ #include <string.h>
+ 
+-#if defined(_WIN32)
+-#include <basetsd.h>
+-typedef SSIZE_T ssize_t;
+-#endif // _WIN32
+-
+ typedef struct {
+    char *str;
+    size_t len;
+diff --git a/src/third_party/kms-message/src/kms_response_parser.c b/src/third_party/kms-message/src/kms_response_parser.c
+index 31e4868a68..6f86fac854 100644
+--- a/src/third_party/kms-message/src/kms_response_parser.c
++++ b/src/third_party/kms-message/src/kms_response_parser.c
+@@ -1,7 +1,7 @@
+ #include "kms_message/kms_response_parser.h"
+ #include "kms_message_private.h"
+ 
+-#include "kms_message_private.h"
++#include <errno.h>
+ #include <limits.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -24,6 +24,7 @@ _parser_init (kms_response_parser_t *parser)
+    parser->raw_response = kms_request_str_new ();
+    parser->content_length = -1;
+    parser->response = calloc (1, sizeof (kms_response_t));
++   KMS_ASSERT (parser->response);
+    parser->response->headers = kms_kv_list_new ();
+    parser->state = PARSING_STATUS_LINE;
+    parser->start = 0;
+@@ -34,6 +35,8 @@ kms_response_parser_t *
+ kms_response_parser_new (void)
+ {
+    kms_response_parser_t *parser = malloc (sizeof (kms_response_parser_t));
++   KMS_ASSERT (parser);
++
+    _parser_init (parser);
+    return parser;
+ }
+@@ -59,11 +62,26 @@ static bool
+ _parse_int (const char *str, int *result)
+ {
+    char *endptr = NULL;
++   int64_t long_result;
+ 
+-   *result = (int) strtol (str, &endptr, 10);
+-   if (*endptr) {
++   errno = 0;
++   long_result = strtol (str, &endptr, 10);
++   if (endptr == str) {
++      /* No digits were parsed. Consider this an error */
++      return false;
++   }
++   if (endptr != NULL && *endptr != '\0') {
++      /* endptr points to the first invalid character. */
++      return false;
++   }
++   if (errno == EINVAL || errno == ERANGE) {
++      return false;
++   }
++   if (long_result > INT32_MAX || long_result < INT32_MIN) {
+       return false;
+    }
++   *result = (int) long_result;
++
+    return true;
+ }
+ 
+@@ -72,6 +90,8 @@ static bool
+ _parse_int_from_view (const char *str, int start, int end, int *result)
+ {
+    char *num_str = malloc (end - start + 1);
++   KMS_ASSERT (num_str);
++
+    bool ret;
+ 
+    strncpy (num_str, str + start, end - start);
+diff --git a/src/third_party/scripts/kms_message_get_sources.sh b/src/third_party/scripts/kms_message_get_sources.sh
+index 6ad2fbb0e6..52ce21b9dd 100755
+--- a/src/third_party/scripts/kms_message_get_sources.sh
++++ b/src/third_party/scripts/kms_message_get_sources.sh
+@@ -18,7 +18,7 @@ if grep -q Microsoft /proc/version; then
+ fi
+ 
+ NAME=libmongocrypt
+-REVISION=59c8c17bbdfa1cf0fdec60cfdde73a437a868221
++REVISION=052f7fc610f0cea83a2adf3dd263a5ff04833371
+ 
+ if grep -q Microsoft /proc/version; then
+     SRC_ROOT=$(wslpath -u $(powershell.exe -Command "Get-ChildItem Env:TEMP | Get-Content | Write-Host"))
+-- 
+2.24.0
+
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-stacktrace-Define-ARCH_BITS-for-x86.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-stacktrace-Define-ARCH_BITS-for-x86.patch
new file mode 100644
index 0000000..a928835
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-stacktrace-Define-ARCH_BITS-for-x86.patch
@@ -0,0 +1,29 @@
+From efd79bda1b85a5a4398a71e5ea2bc00ee4b0ea46 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 15 Sep 2020 18:20:27 -0700
+Subject: [PATCH] stacktrace: Define ARCH_BITS for x86
+
+stacktrace_somap.cpp:92:33: error: 'ELFCLASSARCH_BITS' was not declared in this scope
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/mongo/util/stacktrace_somap.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/mongo/util/stacktrace_somap.cpp b/src/mongo/util/stacktrace_somap.cpp
+index f7ba66a142..2231948ce8 100644
+--- a/src/mongo/util/stacktrace_somap.cpp
++++ b/src/mongo/util/stacktrace_somap.cpp
+@@ -83,7 +83,7 @@ void addUnameToSoMap(BSONObjBuilder* soMap) {
+ #define ARCH_BITS __ELF_NATIVE_CLASS
+ #elif defined(__x86_64__) || defined(__aarch64__)
+ #define ARCH_BITS 64
+-#elif defined(__arm__)
++#elif defined(__i386__) || defined(__arm__)
+ #define ARCH_BITS 32
+ #else
+ #error Unknown target architecture.
+-- 
+2.28.0
+
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
index 869d284..57f4168 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
@@ -1,4 +1,4 @@
-From 73c6374ceb0c062e91210cc9ef3e0e9fa30ee514 Mon Sep 17 00:00:00 2001
+From 28f34191eef1e70c24d2f81b66e4dd40dbefcd35 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 Date: Sat, 2 Sep 2017 12:42:30 -0700
 Subject: [PATCH 04/10] Add a definition for the macro __ELF_NATIVE_CLASS
@@ -6,17 +6,18 @@
 It depends on the native arch's word size.
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
 ---
  src/mongo/util/stacktrace_posix.cpp | 9 +++++++++
  1 file changed, 9 insertions(+)
 
 diff --git a/src/mongo/util/stacktrace_posix.cpp b/src/mongo/util/stacktrace_posix.cpp
-index 1d7b3d7..f81e329 100644
+index 531e21bdc2..fa611499e4 100644
 --- a/src/mongo/util/stacktrace_posix.cpp
 +++ b/src/mongo/util/stacktrace_posix.cpp
-@@ -39,6 +39,15 @@
+@@ -42,6 +42,15 @@
+ #include <iostream>
  #include <string>
- #include <sys/utsname.h>
  
 +#if !defined(__GLIBC__)
 +#if defined __x86_64__ && !defined __ILP32__
@@ -28,8 +29,8 @@
 +#endif
 +
  #include "mongo/base/init.h"
+ #include "mongo/bson/json.h"
  #include "mongo/config.h"
- #include "mongo/db/jsobj.h"
 -- 
-2.7.4
+2.24.0
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch
index 3a27aac..910ef0b 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch
@@ -2,7 +2,7 @@
 ===================================================================
 --- git.orig/SConstruct
 +++ git/SConstruct
-@@ -884,6 +884,14 @@ env_vars.Add('WINDOWS_OPENSSL_BIN',
+@@ -977,6 +977,14 @@ env_vars.Add('WINDOWS_OPENSSL_BIN',
      help='Sets the path to the openssl binaries for packaging',
      default='c:/openssl/bin')
  
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch
index ae84bcb..e4ae307 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch
@@ -15,15 +15,16 @@
   if (mongoUnsignedAddOverflow64(tagAndLengthByteCount, derLength, outLength) ||
 
 Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
 ---
  src/mongo/util/net/ssl_manager.cpp | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/src/mongo/util/net/ssl_manager.cpp b/src/mongo/util/net/ssl_manager.cpp
-index b93ebe84a4a3..3511eb5d998f 100644
+index 455a1662a5..e8497bc0d1 100644
 --- a/src/mongo/util/net/ssl_manager.cpp
 +++ b/src/mongo/util/net/ssl_manager.cpp
-@@ -782,7 +782,7 @@ class DERToken {
+@@ -810,7 +810,7 @@ public:
       *
       * Returns a DERToken which consists of the (tag, length, value) tuple.
       */
@@ -32,7 +33,7 @@
  
  private:
      DERType _type{DERType::EndOfContent};
-@@ -799,7 +799,7 @@ struct DataType::Handler<DERToken> {
+@@ -827,7 +827,7 @@ struct DataType::Handler<DERToken> {
                         size_t length,
                         size_t* advanced,
                         std::ptrdiff_t debug_offset) {
@@ -41,7 +42,7 @@
  
          auto swPair = DERToken::parse(ConstDataRange(ptr, length), &outLength);
  
-@@ -844,7 +844,7 @@ StatusWith<std::string> readDERString(ConstDataRangeCursor& cdc) {
+@@ -889,7 +889,7 @@ StatusWith<DERInteger> readDERInt(ConstDataRangeCursor& cdc) {
  }
  
  
@@ -50,3 +51,6 @@
      const size_t kTagLength = 1;
      const size_t kTagLengthAndInitialLengthByteLength = kTagLength + 1;
  
+-- 
+2.24.0
+
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch
index 15bd7da..1a7bf0f 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch
@@ -1,4 +1,4 @@
-From c9fc9e9a44b0fb764ce86a5e57f17d3c5bbfd8cd Mon Sep 17 00:00:00 2001
+From 298d958148f1fb2bb7725fed15c68c09677c14c9 Mon Sep 17 00:00:00 2001
 From: Vincent Prince <vincent.prince.fr@gmail.com>
 Date: Mon, 16 Sep 2019 13:37:10 +0200
 Subject: [PATCH 05/10] Add alises for arm64 which is same as aarch64
@@ -12,10 +12,10 @@
  3 files changed, 3 insertions(+), 2 deletions(-)
 
 diff --git a/SConstruct b/SConstruct
-index e63cf15..5593c78 100644
+index 448939bdd0..abfd816f3e 100644
 --- a/SConstruct
 +++ b/SConstruct
-@@ -1129,6 +1129,7 @@ elif endian == "big":
+@@ -1228,6 +1228,7 @@ if endian == "auto":
  processor_macros = {
      'arm'        : { 'endian': 'little', 'defines': ('__arm__',) },
      'aarch64'    : { 'endian': 'little', 'defines': ('__arm64__', '__aarch64__')},
@@ -24,10 +24,10 @@
      'ppc64le'    : { 'endian': 'little', 'defines': ('__powerpc64__',)},
      's390x'      : { 'endian': 'big',    'defines': ('__s390x__',)},
 diff --git a/src/third_party/IntelRDFPMathLib20U1/SConscript b/src/third_party/IntelRDFPMathLib20U1/SConscript
-index f23c071..fb82cd6 100644
+index 58e1b7ba65..bffe83b462 100644
 --- a/src/third_party/IntelRDFPMathLib20U1/SConscript
 +++ b/src/third_party/IntelRDFPMathLib20U1/SConscript
-@@ -308,7 +308,7 @@ if processor == 'i386' or processor == 'emscripten':
+@@ -309,7 +309,7 @@ if processor == 'i386' or processor == 'emscripten':
  elif processor == 'arm':
      cpp_defines['IA32'] = '1'
      cpp_defines['ia32'] = '1'
@@ -37,7 +37,7 @@
      cpp_defines['EFI2'] = '1'
  # Using 64 bit little endian
 diff --git a/src/third_party/wiredtiger/SConscript b/src/third_party/wiredtiger/SConscript
-index cdd090b..97a1b3b 100644
+index d6bd665e23..2f1e656a19 100644
 --- a/src/third_party/wiredtiger/SConscript
 +++ b/src/third_party/wiredtiger/SConscript
 @@ -152,7 +152,7 @@ condition_map = {
@@ -50,5 +50,5 @@
      'X86_HOST'     : env['TARGET_ARCH'] == 'x86_64',
      'ZSERIES_HOST' : env['TARGET_ARCH'] == 's390x',
 -- 
-2.7.4
+2.24.0
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb
index 58841ef..a153498 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb
@@ -9,12 +9,13 @@
            python3-psutil-native python3-regex-native \
            "
 
-inherit scons dos2unix siteinfo python3native
+inherit scons dos2unix siteinfo python3native systemd useradd
 
-PV = "4.2.2"
-#v4.2.2
-SRCREV = "a0bbbff6ada159e19298d37946ac8dc4b497eadf"
-SRC_URI = "git://github.com/mongodb/mongo.git;branch=v4.2 \
+PV = "4.4.1"
+#v4.4.1
+SRCREV = "ad91a93a5a31e175f5cbf8c69561e788bbc55ce1"
+SRC_URI = "git://github.com/mongodb/mongo.git;branch=v4.4 \
+           file://0001-kms-message-bump-libmongocrypto-to-v1.0.4.patch \
            file://0001-Tell-scons-to-use-build-settings-from-environment-va.patch \
            file://0001-Use-long-long-instead-of-int64_t.patch \
            file://0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch \
@@ -24,6 +25,8 @@
            file://0001-Support-deprecated-resolver-functions.patch \
            file://0003-Fix-unknown-prefix-env.patch \
            file://1296.patch \
+           file://0001-Fix-compilation-with-fno-common.patch \
+           file://0001-stacktrace-Define-ARCH_BITS-for-x86.patch \
            "
 SRC_URI_append_libc-musl ="\
            file://0001-Mark-one-of-strerror_r-implementation-glibc-specific.patch \
@@ -35,6 +38,7 @@
            file://0001-asio-Dont-use-experimental-with-clang.patch \
            "
 
+
 S = "${WORKDIR}/git"
 
 COMPATIBLE_HOST ?= '(x86_64|i.86|powerpc64|arm|aarch64).*-linux'
@@ -51,26 +55,65 @@
 PACKAGECONFIG[shell] = ",--js-engine=none,,"
 PACKAGECONFIG[system-pcre] = "--use-system-pcre,,libpcre,"
 
-EXTRA_OESCONS = "--prefix=${D}${prefix} \
+EXTRA_OESCONS = "PREFIX=${prefix} \
+                 DESTDIR=${D} \
                  LIBPATH=${STAGING_LIBDIR} \
                  LINKFLAGS='${LDFLAGS}' \
                  CXXFLAGS='${CXXFLAGS}' \
                  TARGET_ARCH=${TARGET_ARCH} \
+                 MONGO_VERSION=${PV} \
+                 OBJCOPY=${OBJCOPY} \
                  --ssl \
                  --disable-warnings-as-errors \
                  --use-system-zlib \
                  --nostrip \
                  --endian=${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', 'little', 'big', d)} \
                  --wiredtiger=${@['off','on'][d.getVar('SITEINFO_BITS') != '32']} \
-                 ${PACKAGECONFIG_CONFARGS} \
-                 core"
+                 --separate-debug \
+                 ${PACKAGECONFIG_CONFARGS}"
+
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system --no-create-home --home-dir /var/run/${BPN} --shell /bin/false --user-group ${BPN}"
+
 
 scons_do_compile() {
-        ${STAGING_BINDIR_NATIVE}/scons ${PARALLEL_MAKE} ${EXTRA_OESCONS} || \
+        ${STAGING_BINDIR_NATIVE}/scons ${PARALLEL_MAKE} ${EXTRA_OESCONS} install-core || \
         die "scons build execution failed."
 }
 
 scons_do_install() {
-        ${STAGING_BINDIR_NATIVE}/scons install ${EXTRA_OESCONS}|| \
-        die "scons install execution failed."
+        # install binaries
+        install -d ${D}${bindir}
+        for i in mongod mongos mongo
+        do
+            if [ -f ${B}/build/opt/mongo/${i} ]
+            then
+                install -m 0755 ${B}/build/opt/mongo/${i} ${D}${bindir}/${i}
+            else
+                bbnote "${i} does not exist"
+            fi
+        done
+
+        # install config
+        install -d ${D}${sysconfdir}
+        install -m 0644 ${S}/debian/mongod.conf ${D}${sysconfdir}/
+
+        # install systemd service
+        install -d ${D}${systemd_system_unitdir}
+        install -m 0644 ${S}/debian/mongod.service ${D}${systemd_system_unitdir}
+
+        # install mongo data folder
+        install -m 755 -d ${D}${localstatedir}/lib/${BPN}
+        chown ${PN}:${PN} ${D}${localstatedir}/lib/${BPN}
+
+        # Log files
+        install -m 755 -d ${D}${localstatedir}/log/${BPN}
+        chown ${PN}:${PN} ${D}${localstatedir}/log/${BPN}
 }
+
+CONFFILES_${PN} = "${sysconfdir}/mongod.conf"
+
+SYSTEMD_SERVICE_${PN} = "mongod.service"
+
+
diff --git a/meta-openembedded/meta-oe/dynamic-layers/networking-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend b/meta-openembedded/meta-oe/dynamic-layers/networking-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
new file mode 100644
index 0000000..b39a4d6
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/networking-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
@@ -0,0 +1,3 @@
+RDEPENDS_packagegroup-meta-oe-devtools += "\
+    valijson \
+"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/valijson/valijson_0.3.bb b/meta-openembedded/meta-oe/dynamic-layers/networking-layer/recipes-devtools/valijson/valijson_0.3.bb
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-devtools/valijson/valijson_0.3.bb
rename to meta-openembedded/meta-oe/dynamic-layers/networking-layer/recipes-devtools/valijson/valijson_0.3.bb
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.21.bb b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.22.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.21.bb
rename to meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.22.bb
index 83f38fc..b50ed9f 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.21.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.22.bb
@@ -22,7 +22,7 @@
 PACKAGECONFIG ??= "${PACKAGECONFIG_NUMA}"
 PACKAGECONFIG[numa] = ",--disable-numa,numactl"
 
-SRCREV = "d13596b225baf61425a9ca92b0583fc3fa97765d"
+SRCREV = "477b6753ad068983d49fea0abc91fab82da9bad0"
 SRC_URI = "git://git.kernel.dk/fio.git \
 "
 
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.7.bb b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.9.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.7.bb
rename to meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.9.bb
index c7ad91b..d969555 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.7.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iperf3/iperf3_3.9.bb
@@ -9,13 +9,13 @@
 BUGTRACKER = "https://github.com/esnet/iperf/issues"
 AUTHOR = "ESNET <info@es.net>, Lawrence Berkeley National Laboratory <websupport@lbl.gov>"
 LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=f9088fe7ffdccd042f7645f1012d7f70"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b7fb682e9941a49f1214dcd7441410d7"
 
 SRC_URI = "git://github.com/esnet/iperf.git \
            file://0002-Remove-pg-from-profile_CFLAGS.patch \
            "
 
-SRCREV = "dfcea9f6a09ead01089a3c9d20c7032f2c0af2c1"
+SRCREV = "1f8fb13297f3e3e40169ebcd12e171167e394473"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-tests-add-explicit-permissions-to-open-call.patch b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-tests-add-explicit-permissions-to-open-call.patch
deleted file mode 100644
index 9d52b90..0000000
--- a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-tests-add-explicit-permissions-to-open-call.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From d07d2f9601b49bb72cd4b36838f0c238bd1b0fc1 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 15 Jan 2020 18:45:09 -0800
-Subject: [PATCH] tests: add explicit permissions to open() call
-
-Fixes
-gethugepagesizes.c:227:35: error: open with O_CREAT in second argument needs 3 arguments
-|         fd = open(fname, O_WRONLY|O_CREAT);
-|                                          ^
-
-Upstream-Status: Submitted [https://groups.google.com/forum/#!topic/libhugetlbfs/anNtDXbQKro]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- tests/gethugepagesizes.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/tests/gethugepagesizes.c b/tests/gethugepagesizes.c
-index 9551b38..5777265 100644
---- a/tests/gethugepagesizes.c
-+++ b/tests/gethugepagesizes.c
-@@ -223,7 +223,7 @@ void setup_fake_data(long sizes[], int n_elem)
- 		FAIL("mkdtemp: %s", strerror(errno));
- 
- 	sprintf(fname, "%s/meminfo-none", fake_meminfo);
--	fd = open(fname, O_WRONLY|O_CREAT);
-+	fd = open(fname, O_WRONLY|O_CREAT, 0600);
- 	if (fd < 0)
- 		FAIL("open: %s", strerror(errno));
- 	if (write(fd, meminfo_base,
-@@ -233,7 +233,7 @@ void setup_fake_data(long sizes[], int n_elem)
- 		FAIL("close: %s", strerror(errno));
- 
- 	sprintf(fname, "%s/meminfo-hugepages", fake_meminfo);
--	fd = open(fname, O_WRONLY|O_CREAT);
-+	fd = open(fname, O_WRONLY|O_CREAT, 0600);
- 	if (fd < 0)
- 		FAIL("open: %s", strerror(errno));
- 	if (write(fd, meminfo_base,
--- 
-2.25.0
-
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb
index 4768d7b..b349096 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb
@@ -7,10 +7,10 @@
 RDEPENDS_${PN} += "bash python3-core"
 RDEPENDS_${PN}-tests += "bash python3-core"
 
-PV = "2.22"
+PV = "2.23"
 PE = "1"
 
-SRCREV = "e6499ff92b4a7dcffbd131d1f5d24933e48c3f20"
+SRCREV = "6b126a4d7da9490fa40fe7e1b962edcb939feddc"
 SRC_URI = " \
     git://github.com/libhugetlbfs/libhugetlbfs.git;protocol=https \
     file://skip-checking-LIB32-and-LIB64-if-they-point-to-the-s.patch \
@@ -24,7 +24,6 @@
     file://0004-shm.c-Mark-glibc-specific-changes-so.patch \
     file://0005-Include-dirent.h-for-ino_t.patch \
     file://0006-include-limits.h-for-PATH_MAX.patch \
-    file://0001-tests-add-explicit-permissions-to-open-call.patch \
     file://0001-huge_page_setup_helper-use-python3-interpreter.patch \
 "
 
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench_3.0-a9.bb b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench_3.0-a9.bb
index 7e20b7d..171ac31 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench_3.0-a9.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/lmbench/lmbench_3.0-a9.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b \
                     file://COPYING-2;md5=8e9aee2ccc75d61d107e43794a25cdf9"
 
-inherit autotools-brokensep
+inherit autotools-brokensep update-alternatives
 
 DEPENDS += "libtirpc"
 CFLAGS += "-I${STAGING_INCDIR}/tirpc"
@@ -89,3 +89,7 @@
 
 RDEPENDS_${PN} = "perl"
 FILES_${PN} += "${datadir}/lmbench"
+
+ALTERNATIVE_${PN} = "stream"
+ALTERNATIVE_LINK_NAME[stream] = "${bindir}/stream"
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.8.bb b/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.9.bb
similarity index 93%
rename from meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.8.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.9.bb
index b1e6fea..25500e6 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.8.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.9.bb
@@ -6,7 +6,7 @@
 DEPENDS = "ell"
 
 SRC_URI = "git://git.kernel.org/pub/scm/network/wireless/iwd.git"
-SRCREV = "a01754f56aacdc641c819f983c3c0ad374be77b2"
+SRCREV = "aa3dc1b95348dea177e9d8c2c3063b29e20fe2e9"
 S = "${WORKDIR}/git"
 
 inherit autotools manpages pkgconfig python3native systemd
@@ -41,7 +41,7 @@
 
 FILES_${PN} += " \
     ${datadir}/dbus-1 \
-    ${nonarch_base_libdir}/modules-load.d \
+    ${nonarch_libdir}/modules-load.d \
     ${systemd_unitdir}/network \
 "
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.26.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.26.4.bb
similarity index 84%
rename from meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.26.0.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.26.4.bb
index 3a1b70b..f778ffa 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.26.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.26.4.bb
@@ -14,8 +14,7 @@
 
 SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BPN}-${PV}.tar.xz"
 
-SRC_URI[md5sum] = "8da95a97e893311878f8ce12dcf8fad0"
-SRC_URI[sha256sum] = "7f0429e0ae58792e21512d09ca2412537840ea42696762795af1284a65fd6e40"
+SRC_URI[sha256sum] = "c0adcb84ba452e3e13edeb3f94f7b003ea927b354bc187629e05efb333ce270b"
 
 PACKAGECONFIG ??= "udev mbim"
 PACKAGECONFIG[udev] = ",--without-udev,libgudev"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch
new file mode 100644
index 0000000..8760886
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch
@@ -0,0 +1,26 @@
+From 8a4cad5e2f2cbb6a34bdc6e877fe499502b8c4c8 Mon Sep 17 00:00:00 2001
+From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+Date: Fri, 23 Dec 2016 18:12:29 +0100
+Subject: [PATCH] linuxptp: Use cross cpp in incdefs
+
+Use cross cpp incdefs.sh shell script since we are doing cross compiling
+we need to ensure we use correct setttings from toolchain
+
+Upstream-Status: Inappropriate [OE-Specific]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+
+ makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/incdefs.sh
++++ b/incdefs.sh
+@@ -27,7 +27,7 @@ user_flags()
+ 	printf " -D_GNU_SOURCE"
+ 
+ 	# Get list of directories searched for header files.
+-	dirs=$(echo "" | ${CROSS_COMPILE}cpp -Wp,-v 2>&1 >/dev/null | grep ^" /")
++	dirs=$(${CPP} -Wp,-v -xc /dev/null 2>&1 >/dev/null | grep ^" /")
+ 
+ 	# Look for clock_adjtime().
+ 	for d in $dirs; do
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/no-incdefs-using-host-headers.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/no-incdefs-using-host-headers.patch
deleted file mode 100644
index 02dbb23..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/no-incdefs-using-host-headers.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 8a4cad5e2f2cbb6a34bdc6e877fe499502b8c4c8 Mon Sep 17 00:00:00 2001
-From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-Date: Fri, 23 Dec 2016 18:12:29 +0100
-Subject: [PATCH] linuxptp: no incdefs using host headers
-
-Avoid using host headers via incdefs.sh shell script.
-
-Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
----
-
- makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/makefile b/makefile
-index 8cdbd15..85174b8 100644
---- a/makefile
-+++ b/makefile
-@@ -33,7 +33,7 @@ OBJECTS	= $(OBJ) hwstamp_ctl.o phc2sys.o phc_ctl.o pmc.o pmc_common.o \
- SRC	= $(OBJECTS:.o=.c)
- DEPEND	= $(OBJECTS:.o=.d)
- srcdir	:= $(dir $(lastword $(MAKEFILE_LIST)))
--incdefs := $(shell $(srcdir)/incdefs.sh)
-+#incdefs := $(shell $(srcdir)/incdefs.sh)
- version := $(shell $(srcdir)/version.sh $(srcdir))
- VPATH	= $(srcdir)
- 
--- 
-2.9.3
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.0.bb
index 69dee1a..1472a67 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.0.bb
@@ -4,14 +4,15 @@
 
 SRC_URI = "http://sourceforge.net/projects/linuxptp/files/v${PV}/linuxptp-${PV}.tgz \
            file://build-Allow-CC-and-prefix-to-be-overriden.patch \
-           file://no-incdefs-using-host-headers.patch \
+           file://Use-cross-cpp-in-incdefs.patch \
            "
 
 SRC_URI[md5sum] = "1318805702eb6d59f9f247e1dd5ce12a"
 SRC_URI[sha256sum] = "d74ceca722c75bfff53c633425f926dd48eb04f4a089451b855155c016d15785"
 
-EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} \
-    EXTRA_CFLAGS='-D_GNU_SOURCE -DHAVE_CLOCK_ADJTIME -DHAVE_POSIX_SPAWN -DHAVE_ONESTEP_SYNC ${CFLAGS}'"
+EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} EXTRA_CFLAGS='${CFLAGS}'"
+
+export KBUILD_OUTPUT="${RECIPE_SYSROOT}"
 
 do_install () {
     install -d ${D}/${bindir}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.12.12.bb b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.14.2.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.12.12.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.14.2.bb
index b0ab46f..d5fe9bf 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.12.12.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.14.2.bb
@@ -12,7 +12,7 @@
 DEPENDS = "glib-2.0 libgudev intltool-native libxslt-native"
 
 SRC_URI = "http://www.freedesktop.org/software/ModemManager/ModemManager-${PV}.tar.xz"
-SRC_URI[sha256sum] = "a4fc4b33c0e8ae9372885f86fa033f3c1a89a76cd59a3458670eff1824222a3d"
+SRC_URI[sha256sum] = "5fb5553aecd6eb9d6d8ecd130a24f3461e5f93c5f91a0e4ae0508b5228e8b0be"
 S = "${WORKDIR}/ModemManager-${PV}"
 
 PACKAGECONFIG ??= "mbim qmi \
@@ -30,7 +30,6 @@
 EXTRA_OECONF = " \
     --with-udev-base-dir=${nonarch_base_libdir}/udev \
 "
-EXTRA_OECONF_append_toolchain-clang = " --enable-more-warnings=no"
 
 FILES_${PN} += " \
     ${datadir}/icons \
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/0001-Fix-bug-of-free-with-musl.patch b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/0001-Fix-bug-of-free-with-musl.patch
deleted file mode 100644
index 12f9e7a..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/0001-Fix-bug-of-free-with-musl.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 96233a8382b9520293a48b08dc3b204a21205800 Mon Sep 17 00:00:00 2001
-From: Wang Mingyu <wangmy@cn.fujitsu.com>
-Date: Fri, 24 Apr 2020 00:53:19 +0900
-Subject: [PATCH] Fix bug of free() with musl
-
-This fixes build error with musl C library:
-/ubinux-dev/ubinux001/contribution/build/tmp/work/armv7vet2hf-neon-poky-linux-musleabi/paho-mqtt-c/1.3.2-r0/git/src/Heap.h:55:24:
-error: expected declaration specifiers or '...' before string constant
-   55 | #define free(x) myfree(__FILE__, __LINE__, x)
-      |                        ^~~~~~~~
-/ubinux-dev/ubinux001/contribution/build/tmp/work/armv7vet2hf-neon-poky-linux-musleabi/paho-mqtt-c/1.3.2-r0/git/src/Heap.h:55:34:
-error: expected declaration specifiers or '...' before numeric constant
-   55 | #define free(x) myfree(__FILE__, __LINE__, x)
-      |                                  ^~~~~~~~
-
-Signed-off-by: Wang Mingyu <wangmy@cn.fujitsu.com>
----
- src/MQTTReasonCodes.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/MQTTReasonCodes.c b/src/MQTTReasonCodes.c
-index 416eab5..479dbac 100644
---- a/src/MQTTReasonCodes.c
-+++ b/src/MQTTReasonCodes.c
-@@ -16,10 +16,10 @@
- 
- #include "MQTTReasonCodes.h"
- 
--#include "Heap.h"
- #include "StackTrace.h"
- 
- #include <memory.h>
-+#include "Heap.h"
- 
- #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
- 
--- 
-2.17.1
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.5.bb
similarity index 84%
rename from meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.4.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.5.bb
index 2d4e39b..673a247 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.5.bb
@@ -11,10 +11,9 @@
     file://about.html;md5=e5662cbb5f8fd5c9faac526e4077898e \
 "
 
-SRC_URI = "git://github.com/eclipse/paho.mqtt.c;protocol=http \
-           file://0001-Fix-bug-of-free-with-musl.patch"
+SRC_URI = "git://github.com/eclipse/paho.mqtt.c;protocol=http"
 
-SRCREV = "2d3d0941a9233889d4d5cc37f5182bbefea261ad"
+SRCREV = "153dfd3a4a1d510697c5d55e169fa158db16e04a"
 
 DEPENDS = "openssl"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb
index b985d39..473ceab 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb
@@ -9,7 +9,7 @@
 DEPENDS = "wvstreams"
 RDEPENDS_${PN} = "ppp"
 
-SRC_URI = "http://${BPN}.googlecode.com/files/${BP}.tar.bz2 \
+SRC_URI = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/${BPN}/${BP}.tar.bz2 \
            file://typo_pon.wvdial.1.patch \
            file://musl-support.patch \
           "
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb
index 20becaf..57163ce 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb
@@ -7,7 +7,7 @@
 DEPENDS = "zlib openssl (>= 0.9.8) dbus readline"
 DEPENDS_append_libc-musl = " argp-standalone libexecinfo"
 
-SRC_URI = "http://${BPN}.googlecode.com/files/${BP}.tar.gz \
+SRC_URI = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/${BPN}/${BP}.tar.gz \
            file://04_signed_request.diff \
            file://05_gcc.diff \
            file://06_gcc-4.7.diff \
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch
index eb3dee4..3b0300c 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch
@@ -1,6 +1,7 @@
+From 24ad50286a87833329213dc0b0e68c21aeeee95f Mon Sep 17 00:00:00 2001
 From: Niko Mauno <niko.mauno@vaisala.com>
-Date: Wed Apr 22 09:00:00 2020 +0300
-Subject: CMakeLists.txt: Avoid host-specific path to libsodium
+Date: Wed, 22 Apr 2020 09:00:00 +0300
+Subject: [PATCH] CMakeLists.txt: Avoid host-specific path to libsodium
 
 Avoid propagating full build host specific path to generated
 ZeroMQTargets.cmake when building with libsodium, which changes the
@@ -17,10 +18,16 @@
 
 Signed-off-by: Niko Mauno <niko.mauno@vaisala.com>
 
+---
+ CMakeLists.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e92141d..d0775c1 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -1210,7 +1210,7 @@
-   target_link_libraries(libzmq ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+@@ -1428,7 +1428,7 @@ if(BUILD_SHARED)
+   endif()
  
    if(SODIUM_FOUND)
 -    target_link_libraries(libzmq ${SODIUM_LIBRARIES})
@@ -28,8 +35,8 @@
      # On Solaris, libsodium depends on libssp
      if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
        target_link_libraries(libzmq ssp)
-@@ -1240,7 +1240,7 @@
-   target_link_libraries(libzmq-static ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+@@ -1473,7 +1473,7 @@ if(BUILD_STATIC)
+   endif()
  
    if(SODIUM_FOUND)
 -    target_link_libraries(libzmq-static ${SODIUM_LIBRARIES})
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.3.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.2.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.3.bb
index 02a4c04..a105004 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.2.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.3.bb
@@ -10,8 +10,8 @@
     file://0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch \
     file://run-ptest \
 "
-SRC_URI[md5sum] = "2047e917c2cc93505e2579bcba67a573"
-SRC_URI[sha256sum] = "ebd7b5c830d6428956b67a0454a7f8cbed1de74b3b01e5c33c5378e22740f763"
+SRC_URI[md5sum] = "78acc277d95e10812d71b2b3c3c3c9a9"
+SRC_URI[sha256sum] = "9d9285db37ae942ed0780c016da87060497877af45094ff9e1a1ca736e3875a2"
 
 UPSTREAM_CHECK_URI = "https://github.com/${BPN}/libzmq/releases"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
index 0812da1..46cc935 100644
--- a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
+++ b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
@@ -4,7 +4,7 @@
 inherit packagegroup
 
 PROVIDES = "${PACKAGES}"
-PACKAGES = ' \
+PACKAGES = "\
     packagegroup-meta-oe \
     packagegroup-meta-oe-benchmarks \
     packagegroup-meta-oe-connectivity \
@@ -17,27 +17,32 @@
     packagegroup-meta-oe-kernel \
     packagegroup-meta-oe-multimedia \
     packagegroup-meta-oe-navigation \
+    packagegroup-meta-oe-printing \
+    packagegroup-meta-oe-shells \
     packagegroup-meta-oe-security \
     packagegroup-meta-oe-support \
     packagegroup-meta-oe-test \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "packagegroup-meta-oe-gnome", "", d)} \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "packagegroup-meta-oe-graphics", "", d)} \
     ${@bb.utils.contains("DISTRO_FEATURES", "ptest", "packagegroup-meta-oe-ptest-packages", "", d)} \
-'
+"
+#PACKAGES += "packagegroup-meta-oe-fortran-packages"
 
 RDEPENDS_packagegroup-meta-oe = "\
     packagegroup-meta-oe-benchmarks \
+    packagegroup-meta-oe-bsp \
     packagegroup-meta-oe-connectivity \
     packagegroup-meta-oe-core \
     packagegroup-meta-oe-crypto \
-    packagegroup-meta-oe-bsp \
     packagegroup-meta-oe-dbs \
     packagegroup-meta-oe-devtools \
     packagegroup-meta-oe-extended \
     packagegroup-meta-oe-kernel \
     packagegroup-meta-oe-multimedia \
     packagegroup-meta-oe-navigation \
+    packagegroup-meta-oe-printing \
     packagegroup-meta-oe-security \
+    packagegroup-meta-oe-shells \
     packagegroup-meta-oe-support \
     packagegroup-meta-oe-test \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "packagegroup-meta-oe-gnome", "", d)} \
@@ -46,12 +51,31 @@
 "
 
 RDEPENDS_packagegroup-meta-oe-benchmarks = "\
-    dhrystone iperf2 linpack phoronix-test-suite \
-    tiobench bonnie++ fio iperf2 iperf3 lmbench s-suite whetstone \
-    libc-bench memtester sysbench dbench iozone3 libhugetlbfs \
-    nbench-byte tinymembench \
+    bonnie++ \
+    dbench \
+    dhrystone \
+    fio \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11 wayland opengl", "glmark2", "", d)} \
+    iozone3 \
+    iperf2 \
+    iperf3 \
+    libc-bench \
+    libhugetlbfs \
+    linpack \
+    lmbench \
+    memtester \
+    nbench-byte \
+    phoronix-test-suite \
+    s-suite \
+    stressapptest \
+    sysbench \
+    tinymembench \
+    tiobench \
+    whetstone \
 "
+RDEPENDS_packagegroup-meta-oe-benchmarks_append_armv7a = " cpuburn-arm"
+RDEPENDS_packagegroup-meta-oe-benchmarks_append_armv7ve = " cpuburn-arm"
+RDEPENDS_packagegroup-meta-oe-benchmarks_append_aarch64 = " cpuburn-arm"
 
 RDEPENDS_packagegroup-meta-oe-benchmarks_remove_mipsarch = "libhugetlbfs"
 RDEPENDS_packagegroup-meta-oe-benchmarks_remove_mips64 = "tinymembench"
@@ -59,39 +83,25 @@
 RDEPENDS_packagegroup-meta-oe-benchmarks_remove_riscv64 = "libhugetlbfs"
 RDEPENDS_packagegroup-meta-oe-benchmarks_remove_riscv32 = "libhugetlbfs"
 
-RDEPENDS_packagegroup-meta-oe-connectivity ="\
-    gammu hostapd irssi krb5 libev libimobiledevice \
-    libmbim libmtp libndp libqmi libtorrent \
-    libuv libwebsockets linuxptp loudmouth \
-    modemmanager mosh  \
-    paho-mqtt-c phonet-utils rabbitmq-c rfkill rtorrent \
-    ser2net smstools3 telepathy-glib thrift \
-    usbmuxd zabbix zeromq \
-    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "obex-data-server", "", d)} \
-    libmikmod \
-    obexftp openobex libnet \
-    ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "telepathy-idle", "", d)} \
-    "
-RDEPENDS_packagegroup-meta-oe-connectivity_append_libc-glibc = " wvstreams wvdial"
-
-# dracut needs dracut
-RDEPENDS_packagegroup-meta-oe-core ="\
-    dbus-daemon-proxy libdbus-c++ \
-    ell glibmm libsigc++-2.0 libxml++ distro-feed-configs \
-    mm-common opencl-headers opencl-icd-loader \
-    proxy-libintl usleep \
-    ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "dbus-broker ndctl", "", d)} \
-    "
-
-RDEPENDS_packagegroup-meta-oe-crypto ="\
-    botan cryptsetup libkcapi libmcrypt \
-    libsodium pkcs11-helper \
-    "
 RDEPENDS_packagegroup-meta-oe-bsp ="\
-    acpitool cpufrequtils edac-utils efibootmgr \
-    efivar flashrom lmsensors lmsensors-config \
-    lsscsi nvme-cli pcmciautils pointercal \
-    "
+    acpitool \
+    cpufrequtils \
+    edac-utils \
+    flashrom \
+    irda-utils \
+    lmsensors-config-cgi \
+    lmsensors-config-fancontrol \
+    lmsensors-config-sensord \
+    lmsensors \
+    lsscsi \
+    nvme-cli \
+    pcmciautils \
+    pointercal \
+"
+RDEPENDS_packagegroup-meta-oe-bsp_append_x86 = " ledmon"
+RDEPENDS_packagegroup-meta-oe-bsp_append_x86-64 = " ledmon"
+
+RDEPENDS_packagegroup-meta-oe-bsp_remove_libc-musl = "ledmon"
 RDEPENDS_packagegroup-meta-oe-bsp_remove_mipsarch = "efivar efibootmgr"
 RDEPENDS_packagegroup-meta-oe-bsp_remove_powerpc = "efivar efibootmgr"
 RDEPENDS_packagegroup-meta-oe-bsp_remove_powerpc64 = "efivar efibootmgr"
@@ -99,194 +109,794 @@
 RDEPENDS_packagegroup-meta-oe-bsp_remove_riscv64 = "efivar efibootmgr"
 RDEPENDS_packagegroup-meta-oe-bsp_remove_riscv32 = "efivar efibootmgr"
 
+RDEPENDS_packagegroup-meta-oe-connectivity ="\
+    gammu \
+    gattlib \
+    gensio \
+    hostapd \
+    ifplugd \
+    irssi \
+    iwd \
+    krb5 \
+    libev \
+    libimobiledevice \
+    libmbim \
+    libmtp \
+    libndp \
+    libnet \
+    libqmi \
+    libtorrent \
+    libuv \
+    libwebsockets \
+    linuxptp \
+    loudmouth \
+    modemmanager \
+    mosh \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "obex-data-server", "", d)} \
+    openobex \
+    obexftp \
+    packagegroup-tools-bluetooth \
+    paho-mqtt-c \
+    phonet-utils \
+    rabbitmq-c \
+    rfkill \
+    rtorrent \
+    ser2net \
+    smstools3 \
+    telepathy-glib \
+    ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "telepathy-idle", "", d)} \
+    thrift \
+    usbmuxd \
+    wifi-test-suite \
+    zabbix \
+    czmq \
+    zeromq \
+"
+
+RDEPENDS_packagegroup-meta-oe-connectivity_append_libc-glibc = " wvstreams wvdial"
+
+# dracut needs dracut
+RDEPENDS_packagegroup-meta-oe-core = "\
+    ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "dbus-broker", "", d)} \
+    dbus-daemon-proxy \
+    libdbus-c++ \
+    emlog \
+    kernel-module-emlog \
+    glibmm \
+    libnfc \
+    libsigc++-2.0 \
+    libsigc++-3 \
+    libxml++ \
+    mdbus2 \
+    distro-feed-configs \
+    mm-common \
+    ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "ndctl", "", d)} \
+    opencl-icd-loader \
+    proxy-libintl \
+    safec \
+    sdbus-c++-tools \
+    sdbus-c++ \
+    toybox \
+    usleep \
+"
+RDEPENDS_packagegroup-meta-oe-core_append_libc-glibc = " glfw"
+RDEPENDS_packagegroup-meta-oe-core_remove_riscv64 = "safec"
+RDEPENDS_packagegroup-meta-oe-core_remove_riscv32 = "safec"
+
+RDEPENDS_packagegroup-meta-oe-crypto ="\
+    botan \
+    cryptsetup \
+    libkcapi \
+    libmcrypt \
+    libsodium \
+    pkcs11-helper \
+"
+
 RDEPENDS_packagegroup-meta-oe-dbs ="\
-    leveldb libdbi mariadb mariadb-native \
-    postgresql psqlodbc rocksdb soci \
-    sqlite \
+    leveldb \
+    libdbi \
+    mariadb \
     ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "mysql-python", "", d)} \
-    "
+    postgresql \
+    psqlodbc \
+    rocksdb \
+    soci \
+    sqlite \
+"
 
 RDEPENDS_packagegroup-meta-oe-devtools ="\
-    android-tools android-tools-conf bootchart breakpad \
-    capnproto cgdb cscope ctags \
-    debootstrap dmalloc flatbuffers \
-    giflib grpc icon-slicer iptraf-ng jq jsoncpp jsonrpc json-spirit \
-    kconfig-frontends lemon libedit libgee libsombok3 \
-    libubox log4cplus lshw ltrace lua mcpp memstat mercurial \
-    mpich msgpack-c nlohmann-json openocd pax-utils \
-    ipc-run libdbd-mysql-perl libdbi-perl libio-pty-perl php \
-    protobuf protobuf-c \
-    rapidjson serialcheck sip3 tclap uftrace uw-imap valijson \
-    xmlrpc-c yajl yasm \
-    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "geany geany-plugins glade tk", "", d)} \
+    abseil-cpp \
+    breakpad \
+    bootchart \
+    android-tools-conf \
+    android-tools \
+    concurrencykit \
+    cgdb \
+    ctags \
+    debootstrap \
+    cjson \
+    cloc \
+    icon-slicer \
+    cscope \
+    dmalloc \
+    ${@bb.utils.contains("PACKAGE_CLASSES", "package_rpm", "dnf-plugin-tui", "", d)} \
+    doxygen \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "geany-plugins geany", "", d)} \
+    lemon \
+    flatbuffers \
+    libubox \
+    ltrace \
+    lua \
+    luajit \
+    mcpp \
+    memstat \
+    giflib \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "glade", "", d)} \
+    grpc \
+    guider \
+    php \
+    iptraf-ng \
+    jq \
+    json-spirit \
+    serialcheck \
+    tclap \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "tk", "", d)} \
+    uw-imap \
+    jsoncpp \
+    jsonrpc \
+    yajl \
+    yajl \
+    kconfig-frontends \
+    ldns \
+    libgee \
+    libsombok3 \
+    lshw \
+    luaposix \
+    capnproto-compiler \
+    mpich \
+    msgpack-c \
+    mercurial \
     ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "nodejs", "", d)} \
-    "
+    openocd \
+    pax-utils \
+    ipc-run \
+    libdbd-mysql-perl \
+    libdbi-perl \
+    libdev-checklib-perl \
+    libio-pty-perl \
+    libjson-perl \
+    libperlio-gzip-perl \
+    ply \
+    protobuf-c \
+    protobuf \
+    pugixml \
+    python3-distutils-extra \
+    rapidjson \
+    sip3 \
+    uftrace \
+    libxerces-c \
+    xerces-c-samples \
+    xmlrpc-c \
+    yasm \
+    json-schema-validator \    
+"
+RDEPENDS_packagegroup-meta-oe-devtools_append_x86 = " cpuid msr-tools pmtools"
+RDEPENDS_packagegroup-meta-oe-devtools_append_x86-64 = " cpuid msr-tools pcimem pmtools"
+RDEPENDS_packagegroup-meta-oe-devtools_append_arm = " pcimem"
+RDEPENDS_packagegroup-meta-oe-devtools_append_aarch64 = " pcimem"
 
+RDEPENDS_packagegroup-meta-oe-devtools_remove_arm = "concurrencykit"
 RDEPENDS_packagegroup-meta-oe-devtools_remove_armv5 = "uftrace nodejs"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_mipsarch = "uftrace lshw"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_mips64 = "nodejs"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_mips64el = "nodejs"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_powerpc = "android-tools breakpad uftrace lshw"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_powerpc64 = "android-tools uftrace lshw"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_powerpc64le = "android-tools uftrace lshw"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_riscv64 = "breakpad ltrace nodejs uftrace lshw"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_riscv32 = "breakpad ltrace nodejs uftrace lshw"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_mipsarch = "concurrencykit lshw ply uftrace"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_mips64 = "luajit nodejs"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_mips64el = "luajit nodejs"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_powerpc = "android-tools breakpad lshw luajit uftrace"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_powerpc64 = "android-tools lshw luajit uftrace"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_powerpc64le = "android-tools lshw luajit uftrace"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_riscv64 = "breakpad concurrencykit lshw ltrace luajit nodejs ply uftrace"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_riscv32 = "breakpad concurrencykit lshw ltrace luajit nodejs ply uftrace"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_aarch64 = "${@bb.utils.contains("TUNE_FEATURES", "crypto", "", "abseil-cpp", d)} concurrencykit"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_x86-64 = "${@bb.utils.contains("TUNE_FEATURES", "corei7", "", "abseil-cpp", d)}"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_x86 = "ply"
 
 RDEPENDS_packagegroup-meta-oe-extended ="\
-    byacc cfengine cfengine-masterfiles cmpi-bindings \
-    ddrescue dialog dumb-init enscript fluentbit \
-    haveged hexedit hiredis hplip hwloc indent iotop isomd5sum \
-    jansson konkretcmpi libblockdev libcec libconfig \
-    libdivecomputer libplist libusbmuxd \
-    liblockfile liblogging liblognorm libmodbus libmodbus \
-    libpwquality libqb libuio \
-    lockfile-progs logwatch lprng mailx md5deep \
-    mraa nana nicstat \
-    p7zip p8platform libfile-fnmatch-perl \
-    rarpd redis rrdtool libfastjson librelp rsyslog sanlock \
-    sblim-cmpi-devel sblim-sfc-common sblim-sfcc \
-    scsirastools sgpio smartmontools snappy \
-    can-utils libsocketcan tipcutils tiptop \
-    tmux uml-utilities upm vlock volume-key wipe zlog zram \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11 wayland opengl", "boinc-client", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "x11", " libgxim gnuplot libwmf", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "bluez", "collectd", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "pam", "pam-plugin-ccreds pam-plugin-ldapdb", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "pam", "pam-ssh-agent-auth openwsman sblim-sfcb ", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "polkit", "polkit polkit-group-rule-datetime ", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "polkit", "polkit-group-rule-network ", "", d)} \
-    ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "openlmi-tools", "", d)} \
-    "
-RDEPENDS_packagegroup-meta-oe-extended_remove_mipsarch = "upm mraa tiptop"
-RDEPENDS_packagegroup-meta-oe-extended_remove_powerpc = "upm mraa"
-RDEPENDS_packagegroup-meta-oe-extended_remove_powerpc64 = "upm mraa"
+     brotli \
+     byacc \
+     cmpi-bindings \
+     collectd \
+     cfengine-masterfiles \
+     cfengine \
+     ddrescue \
+     dialog \
+     enscript \
+     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gnuplot", "", d)} \
+     dlt-daemon \
+     docopt.cpp \
+     iotop \
+     dumb-init \
+     konkretcmpi \
+     figlet \
+     libcec \
+     libdivecomputer \
+     fluentbit \
+     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "libgxim", "", d)} \
+     liblognorm \
+     libmodbus \
+     haveged \
+     hexedit \
+     hiredis \
+     hplip \
+     hwloc \
+     libuio \
+     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "libwmf", "", d)} \
+     lprng \
+     icewm \
+     md5deep \
+     indent \
+     jansson \
+     nana \
+     nicstat \
+     ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "openlmi-tools", "", d)} \
+     ${@bb.utils.contains("DISTRO_FEATURES", "pam", "openwsman", "", d)} \
+     p7zip \
+     isomd5sum \
+     jpnevulator \
+     ${@bb.utils.contains("DISTRO_FEATURES", "polkit", "polkit-group-rule-datetime polkit-group-rule-network polkit", "", d)} \
+     rarpd \
+     redis \
+     libfastjson \
+     librelp \
+     sblim-cmpi-devel \
+     sblim-sfc-common \
+     ${@bb.utils.contains("DISTRO_FEATURES", "pam", "sblim-sfcb ", "", d)} \
+     sblim-sfcc \
+     libblockdev \
+     sgpio \
+     smartmontools \
+     can-utils \
+     canutils \
+     libsocketcan \
+     libconfig \
+     uml-utilities \
+     libidn \
+     libqb \
+     wipe \
+     libzip \
+     zram \
+     libplist \
+     libusbmuxd \
+     liblockfile \
+     liblogging \
+     libnss-nisplus \
+     libpwquality \
+     ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "libreport", "", d)} \
+     libserialport \
+     libstatgrab \
+     lockfile-progs \
+     logwatch \
+     mailx \
+     mraa \
+     ostree \
+     ${@bb.utils.contains("DISTRO_FEATURES", "pam", "pam-plugin-ccreds pam-plugin-ldapdb pam-ssh-agent-auth", "", d)} \
+     pegtl \
+     libfile-fnmatch-perl \
+     rrdtool \
+     sanlock \
+     scsirastools \
+     sedutil \
+     libsigrok \
+     libsigrokdecode \
+     sigrok-cli \
+     snappy \
+     tipcutils \
+     tiptop \
+     tmux \
+     triggerhappy \
+     upm \
+     vlock \
+     volume-key \
+     wxwidgets \
+     zlog \
+     zstd \
+     redis-plus-plus \
+"
+RDEPENDS_packagegroup-meta-oe-extended_append_libc-musl = " libexecinfo"
+RDEPENDS_packagegroup-meta-oe-extended_append_x86-64 = " pmdk libx86-1"
+RDEPENDS_packagegroup-meta-oe-extended_append_x86 = " libx86-1"
+
+RDEPENDS_packagegroup-meta-oe-extended_remove_libc-musl = "libnss-nisplus sysdig"
+RDEPENDS_packagegroup-meta-oe-extended_remove_mipsarch = "upm mraa minifi-cpp tiptop"
+RDEPENDS_packagegroup-meta-oe-extended_remove_mips = "sysdig"
+RDEPENDS_packagegroup-meta-oe-extended_remove_powerpc = "upm mraa minifi-cpp"
+RDEPENDS_packagegroup-meta-oe-extended_remove_powerpc64 = "upm mraa minifi-cpp"
 RDEPENDS_packagegroup-meta-oe-extended_remove_powerpc64le = "upm mraa"
-RDEPENDS_packagegroup-meta-oe-extended_remove_riscv64 = "upm mraa tiptop"
-RDEPENDS_packagegroup-meta-oe-extended_remove_riscv32 = "upm mraa tiptop"
+RDEPENDS_packagegroup-meta-oe-extended_remove_riscv64 = "upm mraa sysdig tiptop"
+RDEPENDS_packagegroup-meta-oe-extended_remove_riscv32 = "upm mraa sysdig tiptop"
 
 RDEPENDS_packagegroup-meta-oe-gnome ="\
-    atkmm gnome-common gnome-doc-utils-stub gtkmm \
-    gtkmm3 pyxdg vte9 \
-    "
+    atkmm \
+    gcab \
+    gnome-common \
+    gmime \
+    libjcat \
+    gtk+ \
+    gtkmm3 \
+    gtkmm \
+    libpeas \
+    pyxdg \
+    vte9 \
+    gnome-theme-adwaita \
+    libxmlb \
+"
 
 RDEPENDS_packagegroup-meta-oe-graphics ="\
-    cairomm dietsplash directfb directfb-examples \
-    ${@bb.utils.contains("PACKAGE_CLASSES", "package_rpm", "dnfdragora dnf-plugin-tui", "", d)} \
-    fbgrab fbida fontforge fvwm glm gphoto2 libgphoto2 \
-    gtkperf jasper leptonica libmng libsdl2-image libsdl2-mixer libsdl2-net \
-    libsdl-gfx libsdl-image libsdl-mixer libsdl-net libsdl-ttf \
-    libvncserver libyui libyui-ncurses lxdm numlockx openbox openjpeg \
-    packagegroup-fonts-truetype pangomm qrencode takao-fonts terminus-font \
-    tesseract tesseract-lang tigervnc tslib source-han-sans-cn-fonts \
-    source-han-sans-jp-fonts source-han-sans-kr-fonts source-han-sans-tw-fonts ttf-abyssinica \
-    libvdpau x11vnc xcursorgen xdotool \
-    bdftopcf iceauth sessreg setxkbmap twm xclock xfontsel xgamma xkbevd xkbprint xkbutils \
-    xlsatoms xlsclients xlsfonts xmag xmessage xrdb xrefresh xsetmode xsetroot xstdcmap \
-    xterm xwd xwud xbitmaps xorg-sgml-doctools \
-    font-adobe-100dpi font-adobe-utopia-100dpi \
-    font-bh-100dpi font-bh-lucidatypewriter-100dpi font-bitstream-100dpi font-cursor-misc \
-    font-misc-misc xorg-fonts-100dpi liblbxutil libxaw libxkbui libxpresent xserver-common \
-    ${@bb.utils.contains("DISTRO_FEATURES", "opengl", "freeglut libsdl2-ttf", "", d)} \
-    "
+    cairomm \
+    directfb-examples \
+    directfb \
+    fbgrab \
+    dietsplash \
+    ${@bb.utils.contains("PACKAGE_CLASSES", "package_rpm", "dnfdragora", "", d)} \
+    fontforge \
+    fbida \
+    ${@bb.utils.contains("DISTRO_FEATURES", "opengl", "freeglut", "", d)} \
+    ftgl \
+    fvwm \
+    gtkperf \
+    gphoto2 \
+    libgphoto2 \
+    graphviz \
+    gtkwave \
+    jasper \
+    libforms \
+    lxdm \
+    numlockx \
+    openbox \
+    packagegroup-fonts-truetype \
+    qrencode \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "st", "", d)} \
+    takao-fonts \
+    leptonica \
+    libvncserver \
+    libmng \
+    libsdl-gfx \
+    libsdl-image \
+    libsdl-mixer \
+    libsdl-net \
+    libsdl-ttf \
+    libsdl2-image \
+    libsdl2-mixer \
+    libsdl2-net \
+    ${@bb.utils.contains("DISTRO_FEATURES", "opengl", "libsdl2-ttf", "", d)} \
+    libsdl \
+    ttf-arphic-uming \
+    ttf-droid-sans ttf-droid-sans-mono ttf-droid-sans-fallback ttf-droid-sans-japanese ttf-droid-serif \
+    ttf-abyssinica \
+    source-han-sans-cn-fonts \
+    source-han-sans-jp-fonts \
+    source-han-sans-kr-fonts \
+    source-han-sans-tw-fonts \
+    source-code-pro-fonts \
+    ttf-dejavu-sans \
+    ttf-dejavu-sans-condensed \
+    ttf-dejavu-sans-mono \
+    ttf-dejavu-serif \
+    ttf-dejavu-serif-condensed \
+    ttf-dejavu-mathtexgyre \
+    ttf-dejavu-common \
+    ttf-gentium \
+    ttf-hunky-sans \
+    ttf-hunky-serif \
+    ttf-lohit \
+    ttf-inconsolata \
+    ttf-liberation-sans-narrow \
+    ttf-liberation-mono \
+    ttf-liberation-sans \
+    ttf-liberation-serif \
+    ttf-lklug \
+    ttf-noto-emoji-color \
+    ttf-noto-emoji-regular \
+    ttf-sazanami-gothic \
+    ttf-sazanami-mincho \
+    ttf-tlwg \
+    ttf-roboto \
+    ttf-wqy-zenhei \
+    ttf-pt-sans \
+    ttf-vlgothic \
+    ttf-ubuntu-mono \
+    ttf-ubuntu-sans \
+    libyui-ncurses \
+    libyui \
+    x11vnc \
+    terminus-font-consolefonts \
+    terminus-font-pcf \
+    xdotool \
+    xkbevd \
+    bdftopcf \
+    iceauth \
+    sessreg \
+    xgamma \
+    setxkbmap \
+    xkbutils \
+    twm \
+    xclock \
+    xfontsel \
+    xkbprint \
+    xsetmode \
+    xlsatoms \
+    xlsclients \
+    xlsfonts \
+    xmag \
+    xmessage \
+    xrdb \
+    xrefresh \
+    xsetroot \
+    xstdcmap \
+    xterm \
+    xwd \
+    xwud \
+    xorg-sgml-doctools \
+    xf86-input-tslib \
+    xf86-input-void \
+    xf86-video-armsoc \
+    xf86-video-ati \
+    font-adobe-100dpi \
+    font-adobe-utopia-100dpi \
+    font-bh-100dpi \
+    font-bh-lucidatypewriter-100dpi \
+    font-bitstream-100dpi \
+    font-cursor-misc \
+    font-misc-misc \
+    xorg-fonts-100dpi \
+    liblbxutil \
+    libxaw6 \
+    libxkbui \
+    libxpresent \
+    xcb-util-cursor \
+    xserver-common \
+    openjpeg \
+    pangomm \
+    spirv-shader-generator \
+    spirv-tools \
+    stalonetray \
+    surf \
+    tesseract-lang \
+    tesseract \
+    tigervnc \
+    tslib \
+    unclutter-xfixes \
+    libvdpau \
+    xcursorgen \
+    xscreensaver \
+    yad \
+    parallel-deqp-runner \
+    ${@bb.utils.contains("DISTRO_FEATURES", "opengl", "opengl-es-cts", "", d)} \
+    ${@bb.utils.contains("DISTRO_FEATURES", "opengl vulkan", "vulkan-cts", "", d)} \
+"
+RDEPENDS_packagegroup-meta-oe-graphics_append_x86 = " renderdoc xf86-video-nouveau xf86-video-mga"
+RDEPENDS_packagegroup-meta-oe-graphics_append_x86-64 = " renderdoc xf86-video-nouveau xf86-video-mga"
+RDEPENDS_packagegroup-meta-oe-graphics_append_arm = " renderdoc"
+RDEPENDS_packagegroup-meta-oe-graphics_append_aarch64 = " renderdoc"
 
-
+RDEPENDS_packagegroup-meta-oe-graphics_remove_libc-musl = "renderdoc"
 
 RDEPENDS_packagegroup-meta-oe-kernel ="\
-    agent-proxy broadcom-bt-firmware cpupower \
-    crash ipmitool minicoredumper oprofile \
-    "
-RDEPENDS_packagegroup-meta-oe-kernel_append_x86 = " pm-graph "
-RDEPENDS_packagegroup-meta-oe-kernel_append_x86-64 = " pm-graph "
+    agent-proxy \
+    crash \
+    cpupower \
+    ipmitool \
+    broadcom-bt-firmware \
+    kernel-selftest \
+    minicoredumper \
+    oprofile \
+    spidev-test \
+"
+RDEPENDS_packagegroup-meta-oe-kernel_append_x86 = " intel-speed-select ipmiutil pm-graph turbostat"
+RDEPENDS_packagegroup-meta-oe-kernel_append_x86-64 = " intel-speed-select ipmiutil kpatch pm-graph turbostat"
+RDEPENDS_packagegroup-meta-oe-kernel_append_poerpc64 = " libpfm4"
 
-RDEPENDS_packagegroup-meta-oe-kernel_remove_libc-musl = "crash minicoredumper"
+# Kernel-selftest does not build with 5.8 and its exluded from build too so until its fixed remove it
+RDEPENDS_packagegroup-meta-oe-kernel_remove = "kernel-selftest"
+RDEPENDS_packagegroup-meta-oe-kernel_remove_libc-musl = "crash intel-speed-select kernel-selftest minicoredumper turbostat"
 
+RDEPENDS_packagegroup-meta-oe-kernel_remove_mipsarch = "makedumpfile"
 RDEPENDS_packagegroup-meta-oe-kernel_remove_mips64 = "crash"
 RDEPENDS_packagegroup-meta-oe-kernel_remove_mips64el = "crash"
 
-RDEPENDS_packagegroup-meta-oe-kernel_remove_riscv64 = "crash oprofile"
-RDEPENDS_packagegroup-meta-oe-kernel_remove_riscv32 = "crash oprofile"
+RDEPENDS_packagegroup-meta-oe-kernel_remove_riscv64 = "crash makedumpfile oprofile"
+RDEPENDS_packagegroup-meta-oe-kernel_remove_riscv32 = "crash makedumpfile oprofile"
 
 RDEPENDS_packagegroup-meta-oe-multimedia ="\
-    alsa-oss audiofile cdrkit id3lib \
-    a2jmidid jack libass libburn libcdio libcdio-paranoia \
-    libdvdread libmms libmodplug libopus live555 \
-    opus-tools \
-    sound-theme-freedesktop v4l-utils yavta wavpack libvpx \
-    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "xpext pavucontrol xsp", "", d)} \
+    alsa-oss \
+    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "faad2", "", d)} \
+    cdrkit \
+    id3lib \
+    audiofile \
+    a2jmidid \
+    jack-server \
+    jack-utils \
+    libass \
+    libburn \
+    libcdio-paranoia \
+    libcdio \
+    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "libmad", "", d)} \
+    libmms \
+    libdvdread \
+    libopus \
+    live555-examples \
+    live555-mediaserver \
     libmikmod \
-    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "libmad faad2 mpv", "", d)} \
-    "
+    opus-tools \
+    libmodplug \
+    sound-theme-freedesktop \
+    yavta \
+    v4l-utils \
+    wavpack \
+    libvpx \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "xsp", "", d)} \
+    ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "mpv", "", d)} \
+    pipewire \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "pavucontrol", "", d)} \
+    libopusenc \
+"
+
 RDEPENDS_packagegroup-meta-oe-multimedia_remove_libc-musl = "alsa-oss"
 
 RDEPENDS_packagegroup-meta-oe-navigation ="\
-    geoclue geos libspatialite proj \
+    geos \
+    ${@bb.utils.contains("DISTRO_FEATURES", "bluz4", "gpsd-machine-conf gpsd", "", d)} \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "orrery", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "bluz4", "gpsd gpsd-machine-conf", "", d)} \
-    "
+    geoclue \
+    libspatialite \
+    proj \
+"
+
+RDEPENDS_packagegroup-meta-oe-printing ="\
+    cups-filters \
+    qpdf \
+"
 
 RDEPENDS_packagegroup-meta-oe-security ="\
-    tomoyo-tools \
+    keyutils \
+    nmap \
     ${@bb.utils.contains("DISTRO_FEATURES", "pam", "passwdqc", "", d)} \
-    ${@bb.utils.contains("DISTRO_FEATURES", "bluz5", "nmap", "", d)} \
-    "
+    softhsm \
+    tomoyo-tools \
+"
 
 RDEPENDS_packagegroup-meta-oe-shells ="\
-    dash tcsh zsh \
-    "
-
-NE10 = ""
-NE10_aarch64 = "ne10"
-NE10_armv7a = "ne10"
-NE10_armv7ve = "ne10"
+    dash \
+    mksh \
+    tcsh \
+    zsh \
+"
 
 RDEPENDS_packagegroup-meta-oe-support ="\
-    anthy asio atop augeas avro-c bdwgc frame grail c-ares \
-    ccid ceres-solver ckermit cpprest ctapi-common daemonize \
-    daemontools devmem2 dfu-util dfu-util-native digitemp \
-    dstat eject enca epeg espeak fbset fbset-modes \
-    fftw fltk-native gd gflags glog gnulib gperftools \
-    gpm gradm gsl gsoap hddtemp hidapi htop hunspell hwdata iksemel \
-    libinih inotify-tools joe lcms lcov libatasmart libbytesize \
-    libcereal libcyusbserial libee libeigen libestr libftdi libgit2 \
-    libgpiod libiio libjs-jquery libjs-sizzle liblinebreak libmicrohttpd \
-    libmxml liboauth libol liboop libp11 libraw1394 libsmi libsoc libssh2 \
-    libssh libtar libteam libtinyxml2 libtinyxml libusbg libusb-compat libutempter \
-    links lockdev log4c log4cpp logwarn libdevmapper lvm2 \
-    mailcap mbuffer mg minini \
-    multipath-tools nano neon nmon numactl onig openct openldap \
-    opensc wbxml2 p910nd pcsc-lite picocom libotr pidgin \
-    pngcheck poco poppler poppler-data portaudio-v19 pps-tools \
-    pv pxaregs raptor2 rdfind read-edid rsnapshot \
-    satyr sdparm pty-forward-native serial-forward \
-    sg3-utils sharutils spitools srecord ssiapi stm32flash \
-    syslog-ng system-config-keyboard tbb thin-provisioning-tools tokyocabinet \
-    tree uhubctl unixodbc uriparser usb-modeswitch \
-    usb-modeswitch-data uthash utouch-evemu utouch-frame \
-    vim vim-tiny websocketpp xdelta3 xdg-user-dirs xmlstarlet \
-    zbar zile \
-    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "geis toscoterm uim synergy utouch-mtview links-x11 fltk pidgin-otr", "", d)} \
+    anthy \
+    atop \
+    ace-cloud-editor \
+    frame \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "geis", "", d)} \
+    geis \
+    grail \
+    asio \
+    augeas \
+    avro-c \
+    bdwgc \
+    c-ares \
+    cmark \
+    ${@bb.utils.contains("DISTRO_FEATURES", "polkit gobject-introspection-data", "colord", "", d)} \
+    consolation \
+    cpprest \
+    ctapi-common \
+    dfu-util \
+    dhex \
+    digitemp \
+    dstat \
+    espeak \
+    exiv2 \
+    libnice \
+    c-periphery \
+    fmt \
+    function2 \
+    gd \
+    gflags \
+    glog \
+    gperftools \
+    gpm \
+    gsoap \
+    hdf5 \
+    htop \
+    hunspell-dictionaries \
+    hunspell \
+    hwdata \
+    iksemel \
+    gengetopt \
+    imagemagick \
+    iniparser \
+    inotify-tools \
+    joe \
+    lcms \
+    lcov \
+    imapfilter \
+    libbytesize \
+    libcyusbserial \
+    libestr \
+    libfann \
+    libftdi \
+    ccid \
+    zchunk \
+    libgpiod \
+    libgpiod \
+    ckermit \
+    libcereal \
+    daemontools \
+    libiio \
+    devmem2 \
+    libgit2 \
+    libharu \
+    eject \
+    enca \
+    epeg \
+    libmxml \
+    fbset-modes \
+    fbset \
+    liboop \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "fltk", "", d)} \
+    freerdp \
+    libgusb \
+    emacs \
+    libp11 \
+    libraw1394 \
+    gradm \
+    gsl \
+    librsync \
+    hddtemp \
+    hidapi \
+    libsoc \
+    libmimetic \
+    libinih \
+    libtar \
+    libteam \
+    libusb-compat \
+    libatasmart \
     libcanberra \
-    ${@bb.utils.contains("DISTRO_FEATURES", "x11 pam", "xorgxrdp xrdp", "", d)} \
-    procmail \
-    ${@bb.utils.contains("DISTRO_FEATURES", "polkit", "udisks2 upower", "", d)} \
-    ${NE10} \
+    libssh \
+    libssh2 \
+    libee \
+    libusbgx-config \
+    libusbgx \
+    lockdev \
+    logwarn \
+    libjs-jquery \
+    libjs-sizzle \
+    liblinebreak \
+    mailcap \
+    liboauth \
+    libol \
+    mg \
+    monit \
+    mscgen \
+    libsmi \
+    remmina \
+    neon \
+    nmon \
+    libtinyxml \
+    libusbg \
+    libutempter \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "links-x11", "links", d)} \
     ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "lio-utils", "", d)} \
-    "
-
+    log4c \
+    log4cpp \
+    nspr \
+    libdevmapper \
+    lvm2 \
+    nss \
+    mbuffer \
+    onig \
+    mime-support \
+    minini \
+    multipath-tools \
+    numactl \
+    clinfo \
+    opencv \
+    opensc \
+    openct \
+    openldap \
+    wbxml2 \
+    p910nd \
+    libtinyxml2 \
+    picocom \
+    funyahoo-plusplus \
+    icyque \
+    libotr \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "pidgin-otr", "", d)} \
+    pidgin \
+    purple-skypeweb \
+    pidgin-sipe \
+    pngcheck \
+    poco \
+    poppler-data \
+    poppler \
+    portaudio-v19 \
+    procmail \
+    pxaregs \
+    pv \
+    rsnapshot \
+    pps-tools \
+    raptor2 \
+    rdfind \
+    sdparm \
+    serial-forward \
+    read-edid \
+    spitools \
+    libsass \
+    sassc \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "synergy", "", d)} \
+    syslog-ng \
+    system-config-keyboard \
+    tbb \
+    satyr \
+    pcsc-lite \
+    sharutils \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "toscoterm", "", d)} \
+    sg3-utils \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "uim", "", d)} \
+    uchardet \
+    srecord \
+    ssiapi \
+    tree \
+    utouch-evemu \
+    utouch-frame \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "utouch-mtview", "", d)} \
+    ${@bb.utils.contains("DISTRO_FEATURES", "polkit", "udisks2", "", d)} \
+    stm32flash \
+    tokyocabinet \
+    xmlstarlet \
+    thin-provisioning-tools \
+    uhubctl \
+    zile \
+    unixodbc \
+    daemonize \
+    upower \
+    xxhash \
+    unicode-ucd \
+    xdelta3 \
+    uriparser \
+    nano \
+    xdg-user-dirs \
+    xmlsec1 \
+    ${@bb.utils.contains("DISTRO_FEATURES", "x11 pam", "xorgxrdp xrdp", "", d)} \
+    usb-modeswitch-data \
+    usb-modeswitch \
+    liburing \
+    zbar \
+    libmicrohttpd \
+"
+RDEPENDS_packagegroup-meta-oe-support_append_armv7a = " ne10"
+RDEPENDS_packagegroup-meta-oe-support_append_armv7ve = " ne10"
+RDEPENDS_packagegroup-meta-oe-support_append_aarch64 = " ne10"
+RDEPENDS_packagegroup-meta-oe-support_append_x86 = " mcelog mce-inject mce-test open-vm-tools vboxguestdrivers"
+RDEPENDS_packagegroup-meta-oe-support_append_x86-64 = " mcelog mce-inject mce-test open-vm-tools vboxguestdrivers"
 RDEPENDS_packagegroup-meta-oe-support_remove_arm ="numactl"
 RDEPENDS_packagegroup-meta-oe-support_remove_mipsarch = "gperftools"
 RDEPENDS_packagegroup-meta-oe-support_remove_riscv64 = "gperftools uim"
 RDEPENDS_packagegroup-meta-oe-support_remove_riscv32 = "gperftools uim"
 RDEPENDS_packagegroup-meta-oe-support_remove_powerpc = "ssiapi"
 
-RDEPENDS_packagegroup-meta-oe-support-egl ="\
-    freerdp libnice opencv \
-    "
-
 RDEPENDS_packagegroup-meta-oe-test ="\
-    catch2 cppunit cunit cxxtest evtest fb-test \
-    fwts googletest pm-qa stress-ng testfloat \
-    "
+    bats \
+    cppunit \
+    cukinia \
+    cunit \
+    cxxtest \
+    evtest \
+    fb-test \
+    fwts \
+    googletest \
+    pm-qa \
+    testfloat \
+"
 RDEPENDS_packagegroup-meta-oe-test_remove_libc-musl = "pm-qa"
 RDEPENDS_packagegroup-meta-oe-test_remove_arm = "fwts"
 RDEPENDS_packagegroup-meta-oe-test_remove_mipsarch = "fwts"
@@ -306,14 +916,29 @@
     uthash-ptest \
     libee-ptest \
     poco-ptest \
-    "
+"
+RDEPENDS_packagegroup-meta-oe-ptest-packages_append_x86 = " mcelog-ptest"
+RDEPENDS_packagegroup-meta-oe-ptest-packages_append_x86-64 = " mcelog-ptest"
+
 RDEPENDS_packagegroup-meta-oe-ptest-packages_remove_riscv64 = "oprofile-ptest"
 RDEPENDS_packagegroup-meta-oe-ptest-packages_remove_riscv32 = "oprofile-ptest"
-
-RDEPENDS_packagegroup-meta-oe-ptest-packages_append_x86 = "\
-    mcelog-ptest \
-"
-RDEPENDS_packagegroup-meta-oe-ptest-packages_append_x86-64 = "\
-    mcelog-ptest \
-"
 RDEPENDS_packagegroup-meta-oe-ptest-packages_remove_arm = "numactl-ptest"
+
+
+RDEPENDS_packagegroup-meta-oe-fortran-packages = "\
+    lapack \
+    octave \
+"
+# library-only or headers-only packages
+# They wont be built as part of images but might be interesting to include
+# with dev-pkgs images
+#
+# opencl-headers sdbus-c++-libsystemd boost-url nlohmann-fifo sqlite-orm
+# nlohmann-json exprtk liblightmodbus p8platform gnome-doc-utils-stub
+# glm ttf-mplus xbitmaps ceres-solver cli11 fftw gnulib libeigen ade
+# spdlog span-lite uthash websocketpp catch2 properties-cpp
+
+# rsyslog conflicts with syslog-ng so its not included here
+
+EXCLUDE_FROM_WORLD = "1"
+
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.1/run-ptest b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.3/run-ptest
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.1/run-ptest
rename to meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.3/run-ptest
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools_0.8.1.bb b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools_0.8.3.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools_0.8.1.bb
rename to meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools_0.8.3.bb
index 9eaec0f..3b87c22 100644
--- a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools_0.8.1.bb
+++ b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools_0.8.3.bb
@@ -8,7 +8,7 @@
 
 DEPENDS += "expat"
 
-SRCREV = "3a4f343fb924650e7639660efa5f143961162044"
+SRCREV = "6e8e5aadb674cccea5bdd55141db5dad887fbacd"
 SRC_URI = "git://github.com/Kistler-Group/sdbus-cpp.git;protocol=https;branch=master;subpath=tools"
 
 S = "${WORKDIR}/tools"
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.1.bb b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.3.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.1.bb
rename to meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.3.bb
index 82860a8..9882976 100644
--- a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.1.bb
+++ b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.3.bb
@@ -16,7 +16,7 @@
 
 DEPENDS += "expat"
 
-SRCREV = "3a4f343fb924650e7639660efa5f143961162044"
+SRCREV = "6e8e5aadb674cccea5bdd55141db5dad887fbacd"
 SRC_URI = "git://github.com/Kistler-Group/sdbus-cpp.git;protocol=https;branch=master"
 SRC_URI += "file://run-ptest"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.3.bb b/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.3.bb
index 5d45321..1513255 100644
--- a/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.3.bb
+++ b/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.3.bb
@@ -29,6 +29,11 @@
 COMPILER_toolchain-clang = "clang"
 COMPILER  ?= "gcc"
 
+PACKAGECONFIG ??= "no-iconv no-getconf"
+
+PACKAGECONFIG[no-iconv] = ",,"
+PACKAGECONFIG[no-getconf] = ",,"
+
 EXTRA_OEMAKE = 'CROSS_COMPILE="${HOST_PREFIX}" \
                 CC="${COMPILER}" \
                 STRIP="strip" \
@@ -56,7 +61,7 @@
     sed -e 's/CONFIG_SWAPON=y/# CONFIG_SWAPON is not set/' -i .config
 
     # Enable init if toybox was set as init manager
-    if [[ ${VIRTUAL-RUNTIME_init_manager} == *"toybox"* ]]; then
+    if ${@bb.utils.contains('VIRTUAL-RUNTIME_init_manager','toybox','true','false',d)}; then
         sed -e 's/# CONFIG_INIT is not set/CONFIG_INIT=y/' -i .config
     fi
 }
@@ -67,6 +72,12 @@
     # Create a list of links needed
     ${BUILD_CC} -I . scripts/install.c -o generated/instlist
     ./generated/instlist long | sed -e 's#^#/#' > toybox.links
+    if ${@bb.utils.contains('PACKAGECONFIG','no-iconv','true','false',d)}; then
+        sed -i -e '/iconv$/d' toybox.links
+    fi
+    if ${@bb.utils.contains('PACKAGECONFIG','no-getconf','true','false',d)}; then
+        sed -i -e '/getconf$/d' toybox.links
+    fi
 }
 
 do_install() {
diff --git a/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.3.3.bb b/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.3.4.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.3.3.bb
rename to meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.3.4.bb
index 93eba93..b9a6b71 100644
--- a/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.3.3.bb
+++ b/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.3.4.bb
@@ -21,8 +21,8 @@
 "
 
 SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/v${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}/${BP}.tar.xz"
-SRC_URI[md5sum] = "6c0ce8be21a7687b89354c77757d0c5b"
-SRC_URI[sha256sum] = "3bca4ffe39e2f94cef50f6ea65acb873a6dbce5db34fc6bcefe38b6d095e82df"
+SRC_URI[md5sum] = "911272e73181fdc850bb4d25103a9f83"
+SRC_URI[sha256sum] = "9d16eebb96b53b514778e813019b8dd15fea9fec5aafde9fae5febf59df83773"
 
 inherit autotools gettext pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc
index 1aa1f68..46a6400 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc
@@ -31,7 +31,8 @@
 
 inherit cmake gettext binconfig update-rc.d useradd systemd multilib_script
 
-MULTILIB_SCRIPTS = "${PN}-server:${bindir}/mysql_install_db ${PN}-server:${bindir}/mysqld_safe"
+MULTILIB_SCRIPTS = "${PN}-server:${bindir}/mariadbd-safe \
+                    ${PN}-server:${bindir}/mariadb-install-db"
 
 INITSCRIPT_PACKAGES = "${PN}-server ${PN}-setupdb"
 INITSCRIPT_NAME_${PN}-server = "mysqld"
@@ -243,69 +244,78 @@
 FILES_${PN}-client = "\
     ${bindir}/myisam_ftdump \
     ${bindir}/mysql \
+    ${bindir}/mariadb \
     ${bindir}/mysql_client_test \
+    ${bindir}/mariadb-client-test \
     ${bindir}/mysql_client_test_embedded \
+    ${bindir}/mariadb-client-test-embedded \
     ${bindir}/mysql_find_rows \
+    ${bindir}/mariadb-find-rows \
     ${bindir}/mysql_fix_extensions \
+    ${bindir}/mariadb-fix-extensions \
     ${bindir}/mysql_waitpid \
+    ${bindir}/mariadb-waitpid \
     ${bindir}/mysqlaccess \
+    ${bindir}/mariadb-access \
     ${bindir}/mysqladmin \
-    ${bindir}/mysqlbug \
+    ${bindir}/mariadb-admin \
     ${bindir}/mysqlcheck \
+    ${bindir}/mariadb-check \
     ${bindir}/mysqldump \
+    ${bindir}/mariadb-dump \
     ${bindir}/mysqldumpslow \
+    ${bindir}/mariadb-dumpslow \
     ${bindir}/mysqlimport \
+    ${bindir}/mariadb-import \
     ${bindir}/mysqlshow \
+    ${bindir}/mariadb-show \
     ${bindir}/mysqlslap \
+    ${bindir}/mariadb-slap \
     ${bindir}/mysqltest_embedded \
+    ${bindir}/mariadb-test-embedded \
     ${libexecdir}/mysqlmanager \
     ${sysconfdir}/my.cnf.d/mysql-clients.cnf"
 
 FILES_${PN}-server = "\
-    ${bindir}/comp_err \
-    ${bindir}/isamchk \
-    ${bindir}/isamlog \
     ${bindir}/msql2mysql \
     ${bindir}/my_print_defaults \
     ${bindir}/myisamchk \
     ${bindir}/myisamlog \
     ${bindir}/myisampack \
     ${bindir}/mysql_convert_table_format \
-    ${bindir}/mysql_fix_privilege_tables \
+    ${bindir}/mariadb-convert-table-format \
     ${bindir}/mysql_install_db \
+    ${bindir}/mariadb-install-db \
     ${bindir}/mysql_secure_installation \
+    ${bindir}/mariadb-secure-installation \
     ${bindir}/mysql_setpermission \
+    ${bindir}/mariadb-setpermission \
     ${bindir}/mysql-systemd-start \
     ${bindir}/mysql_tzinfo_to_sql \
+    ${bindir}/mariadb-tzinfo-to-sql \
     ${bindir}/mysql_upgrade \
+    ${bindir}/mariadb-upgrade \
     ${bindir}/mysql_plugin \
-    ${bindir}/mysql_zap \
+    ${bindir}/mariadb-plugin \
     ${bindir}/mysqlbinlog \
+    ${bindir}/mariadb-binlog \
     ${bindir}/mysqld_multi \
+    ${bindir}/mariadbd-multi \
+    ${bindir}/mariadbd-safe \
     ${bindir}/mysqld_safe \
     ${bindir}/mysqld_safe_helper \
+    ${bindir}/mariadbd-safe-helper \
     ${bindir}/mysqlhotcopy \
+    ${bindir}/mariadb-hotcopy \
     ${bindir}/mysqltest \
-    ${bindir}/ndb_delete_all \
-    ${bindir}/ndb_desc \
-    ${bindir}/ndb_drop_index \
-    ${bindir}/ndb_drop_table \
-    ${bindir}/ndb_mgm \
-    ${bindir}/ndb_restore \
-    ${bindir}/ndb_select_all \
-    ${bindir}/ndb_select_count \
-    ${bindir}/ndb_show_tables \
-    ${bindir}/ndb_waiter \
-    ${bindir}/pack_isam \
+    ${bindir}/mariadb-test \
     ${bindir}/perror \
     ${bindir}/replace \
     ${bindir}/resolve_stack_dump \
     ${bindir}/resolveip \
     ${libexecdir}/mysqld \
     ${sbindir}/mysqld \
-    ${sbindir}/ndb_cpcd \
-    ${sbindir}/ndbd \
-    ${sbindir}/ndb_mgmd \
+    ${sbindir}/mariadbd \
     ${libdir}/plugin/*.so \
     ${libdir}/security/*.so \
     ${libdir}/plugin/auth_pam_tool_dir/auth_pam_tool \
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
index 54ccf1f..090e16f 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
@@ -247,10 +247,8 @@
 
 FILES_${PN}-client = "${bindir}/clusterdb \
     ${bindir}/createdb \
-    ${bindir}/createlang \
     ${bindir}/createuser \
     ${bindir}/dropdb \
-    ${bindir}/droplang \
     ${bindir}/dropuser \
     ${bindir}/pg_dump \
     ${bindir}/pg_dumpall \
@@ -332,7 +330,7 @@
     ${libdir}/${BPN}/sslinfo.so \
     ${libdir}/${BPN}/tablefunc.so \
     ${libdir}/${BPN}/test_parser.so ${libdir}/${BPN}/timetravel.so \
-    ${libdir}/${BPN}/tsearch2.so ${libdir}/${BPN}/uuid-ossp.so \
+    ${libdir}/${BPN}/uuid-ossp.so \
     ${libdir}/${BPN}/pgxml.so ${libdir}/${BPN}/passwordcheck.so \
     ${libdir}/${BPN}/pg_upgrade_support.so ${libdir}/${BPN}/.so \
     ${libdir}/${BPN}/unaccent.so \
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.3.bb b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.4.bb
similarity index 63%
rename from meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.3.bb
rename to meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.4.bb
index cc7e3ff..6ea9acc 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.3.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.4.bb
@@ -8,5 +8,4 @@
    file://0001-Improve-reproducibility.patch \
 "
 
-SRC_URI[md5sum] = "a30c023dd7088e44d73be71af2ef404a"
-SRC_URI[sha256sum] = "94ed64a6179048190695c86ec707cc25d016056ce10fc9d229267d9a8f1dcf41"
+SRC_URI[sha256sum] = "bee93fbe2c32f59419cb162bcc0145c58da9a8644ee154a30b9a5ce47de606cc"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/libselinux/0001-libselinux-Do-not-define-gettid-if-glibc-2.30-is-use.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/libselinux/0001-libselinux-Do-not-define-gettid-if-glibc-2.30-is-use.patch
index 8524517..87771cb 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/libselinux/0001-libselinux-Do-not-define-gettid-if-glibc-2.30-is-use.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/libselinux/0001-libselinux-Do-not-define-gettid-if-glibc-2.30-is-use.patch
@@ -29,24 +29,21 @@
 
 --- a/src/procattr.c
 +++ b/src/procattr.c
-@@ -8,7 +8,19 @@
+@@ -8,12 +8,16 @@
  #include "selinux_internal.h"
  #include "policy.h"
  
 -#ifndef __BIONIC__
 +/* Bionic and glibc >= 2.30 declare gettid() system call wrapper in unistd.h and
 + * has a definition for it */
-+#ifdef __BIONIC__
-+  #define OVERRIDE_GETTID 0
-+#elif !defined(__GLIBC_PREREQ)
-+  #define OVERRIDE_GETTID 1
-+#elif !__GLIBC_PREREQ(2,29)
-+  #define OVERRIDE_GETTID 1
-+#else
-+  #define OVERRIDE_GETTID 0
-+#endif
-+
-+#if OVERRIDE_GETTID
++#if defined(__GLIBC_)
++#if !__GLIBC_PREREQ(2,30)
  static pid_t gettid(void)
  {
  	return syscall(__NR_gettid);
+ }
+ #endif
++#endif
+ 
+ static int getprocattrcon(char ** context,
+ 			  pid_t pid, const char *attr)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen/doxygen-native-only-check-python3.patch b/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen/doxygen-native-only-check-python3.patch
index a9650c2..53f8888 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen/doxygen-native-only-check-python3.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen/doxygen-native-only-check-python3.patch
@@ -1,5 +1,10 @@
-It fails to compile doxygen-native when /usr/bin/python is a link to python3 on
-build host:
+From aa833cf56c5cc2e87a1d91881eb2286beb34e417 Mon Sep 17 00:00:00 2001
+From: Leon Anavi <leon.anavi@konsulko.com>
+Date: Wed, 26 Aug 2020 10:52:10 +0300
+Subject: [PATCH] doxygen: Fix Python issues for doxygen-native
+
+It fails to compile doxygen-native when /usr/bin/python is a link
+to python3 on build host:
 
 | Failed to import the site module
 | Traceback (most recent call last):
@@ -21,21 +26,31 @@
 |     _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0)
 | ModuleNotFoundError: No module named '_sysconfigdata'
 
-Replace find_package PythonInterp with Python3 to fix this issue that
-it uses python3 from python3-native. And it also replaces the result
-variable PYTHON_EXECUTABLE with Python3_EXECUTABLE.
+Replace find_package PythonInterp with Python3 to fix this issue
+that it uses python3 from python3-native. And it also replaces the
+result variable PYTHON_EXECUTABLE with Python3_EXECUTABLE.
 
 This patch is only needded by doxygen-native.
 
 Upstream-Status: Inappropriate[oe specific]
 
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
+Co-Authored-By: Kai Kang <kai.kang@windriver.com>
+Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
 ---
+ CMakeLists.txt                  |  2 +-
+ addon/doxywizard/CMakeLists.txt |  6 +++---
+ doc/CMakeLists.txt              |  6 +++---
+ examples/CMakeLists.txt         |  4 ++--
+ libmscgen/CMakeLists.txt        |  2 +-
+ src/CMakeLists.txt              | 12 ++++++------
+ testing/CMakeLists.txt          |  4 ++--
+ 7 files changed, 18 insertions(+), 18 deletions(-)
+
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 969ae58..604400f 100644
+index 35e6a0c2..9aaebbdf 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -93,7 +93,7 @@ else ()
+@@ -100,7 +100,7 @@ else ()
  endif ()
  
  find_program(DOT NAMES dot)
@@ -45,7 +60,7 @@
  find_package(BISON REQUIRED)
  if (BISON_VERSION VERSION_LESS 2.7)
 diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt
-index 6aacd8b..fa197e9 100644
+index 6aacd8b6..fa197e9e 100644
 --- a/addon/doxywizard/CMakeLists.txt
 +++ b/addon/doxywizard/CMakeLists.txt
 @@ -58,7 +58,7 @@ set_source_files_properties(${GENERATED_SRC_WIZARD}/settings.h PROPERTIES GENERA
@@ -76,7 +91,7 @@
  	OUTPUT  ${GENERATED_SRC_WIZARD}/${lex_file}.l.h
      )
 diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
-index 032c16a..332f1b2 100644
+index a094c570..8a757c20 100644
 --- a/doc/CMakeLists.txt
 +++ b/doc/CMakeLists.txt
 @@ -132,7 +132,7 @@ configure_file(${CMAKE_SOURCE_DIR}/doc/doxyindexer.1      ${PROJECT_BINARY_DIR}/
@@ -85,7 +100,7 @@
  add_custom_command(
 -        COMMAND ${PYTHON_EXECUTABLE} translator.py ${CMAKE_SOURCE_DIR}
 +        COMMAND ${Python3_EXECUTABLE} translator.py ${CMAKE_SOURCE_DIR}
-         DEPENDS ${PROJECT_BINARY_DIR}/doc/maintainers.txt ${PROJECT_BINARY_DIR}/doc/language.tpl ${PROJECT_BINARY_DIR}/doc/translator.py
+         DEPENDS ${CMAKE_SOURCE_DIR}/doc/maintainers.txt ${CMAKE_SOURCE_DIR}/doc/language.tpl ${PROJECT_BINARY_DIR}/doc/translator.py ${LANG_FILES}
          OUTPUT language.doc
          WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc
 @@ -141,7 +141,7 @@ set_source_files_properties(language.doc PROPERTIES GENERATED 1)
@@ -107,235 +122,19 @@
      COMMAND ${CMAKE_COMMAND} -E rename ${PROJECT_BINARY_DIR}/chm/index.chm ${PROJECT_BINARY_DIR}/chm/doxygen_manual.chm
          DEPENDS ${PROJECT_BINARY_DIR}/doc/language.doc ${PROJECT_BINARY_DIR}/doc/config.doc
 diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
-index 967f3d4..a8d1aad 100644
+index 3f1c79b8..d5866ee1 100644
 --- a/examples/CMakeLists.txt
 +++ b/examples/CMakeLists.txt
-@@ -52,196 +52,196 @@ add_custom_target(examples
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen class.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman_doc.tex
- 	DEPENDS doxygen class.h class.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/class/html/index.html ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen define.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman_doc.tex
- 	DEPENDS doxygen define.h define.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/define/html/index.html ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen enum.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman_doc.tex
- 	DEPENDS doxygen enum.h enum.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/enum/html/index.html ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen file.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman_doc.tex
- 	DEPENDS doxygen file.h file.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/file/html/index.html ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen func.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman_doc.tex
- 	DEPENDS doxygen func.h func.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/func/html/index.html ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen javadoc-banner.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman_doc.tex
- 	DEPENDS doxygen javadoc-banner.h javadoc-banner.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/html/index.html ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen page.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman_doc.tex
- 	DEPENDS doxygen page.doc page.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/page/html/index.html ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen relates.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman_doc.tex
- 	DEPENDS doxygen relates.cpp relates.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/relates/html/index.html ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen author.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman_doc.tex
- 	DEPENDS doxygen author.cpp author.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/author/html/index.html ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen par.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman_doc.tex
- 	DEPENDS doxygen par.cpp par.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/par/html/index.html ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen overload.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman_doc.tex
- 	DEPENDS doxygen overload.cpp overload.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/overload/html/index.html ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen example.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman_doc.tex
- 	DEPENDS doxygen example.cpp example_test.cpp example.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/example/html/index.html ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen include.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman_doc.tex
- 	DEPENDS doxygen include.cpp include_test.cpp include.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/include/html/index.html ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen qtstyle.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman_doc.tex
- 	DEPENDS doxygen qtstyle.cpp qtstyle.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/qtstyle/html/index.html ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen jdstyle.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman_doc.tex
- 	DEPENDS doxygen jdstyle.cpp jdstyle.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/jdstyle/html/index.html ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen structcmd.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman_doc.tex
- 	DEPENDS doxygen structcmd.h structcmd.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/structcmd/html/index.html ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen autolink.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman_doc.tex
- 	DEPENDS doxygen autolink.cpp autolink.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/autolink/html/index.html ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen tag.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman_doc.tex
- 	DEPENDS doxygen tag.cpp tag.cfg ${PROJECT_BINARY_DIR}/html/examples/example/html/index.html ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/tag/html/index.html ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen restypedef.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman_doc.tex
- 	DEPENDS doxygen restypedef.cpp restypedef.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/restypedef/html/index.html ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen afterdoc.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman_doc.tex
- 	DEPENDS doxygen afterdoc.h afterdoc.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/afterdoc/html/index.html ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen templ.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman_doc.tex
- 	DEPENDS doxygen templ.cpp templ.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/template/html/index.html ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen group.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman_doc.tex
- 	DEPENDS doxygen group.cpp group.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/group/html/index.html ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen memgrp.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman_doc.tex
- 	DEPENDS doxygen memgrp.cpp memgrp.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/memgrp/html/index.html ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen pyexample.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman_doc.tex
- 	DEPENDS doxygen pyexample.py pyexample.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/pyexample/html/index.html ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen tclexample.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman_doc.tex
- 	DEPENDS doxygen tclexample.tcl tclexample.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/tclexample/html/index.html ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen mux.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman_doc.tex
- 	DEPENDS doxygen mux.vhdl mux.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/mux/html/index.html ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen manual.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman_doc.tex
- 	DEPENDS doxygen manual.c manual.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/manual/html/index.html ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman_doc.tex
- )
- 
- add_custom_command(
- 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen docstring.cfg
--        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman_doc.tex
-+        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman_doc.tex
- 	DEPENDS doxygen docstring.py docstring.cfg ${TOP}/examples/strip_example.py
- 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/docstring/html/index.html ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman_doc.tex
- )
-@@ -249,7 +249,7 @@ add_custom_command(
+@@ -51,7 +51,7 @@ foreach (f_inp  ${BASIC_EXAMPLES})
+         string(REGEX REPLACE ":.*" "" f ${f_inp})
+     add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen ${f}.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/${f}/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/${f}/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/${f}/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/${f}/latex/refman_doc.tex
+ 	DEPENDS doxygen ${f}.${f_ext} ${f}.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/${f}/html/index.html ${PROJECT_BINARY_DIR}/html/examples/${f}/latex/refman_doc.tex
+     )
+@@ -68,7 +68,7 @@ add_custom_target(examples
  if (DOT)
    add_custom_command(
  	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen diagrams.cfg
@@ -345,7 +144,7 @@
  	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/diagrams/html/index.html ${PROJECT_BINARY_DIR}/html/examples/diagrams/latex/refman_doc.tex
    )
 diff --git a/libmscgen/CMakeLists.txt b/libmscgen/CMakeLists.txt
-index 079fcfc..e6d86f6 100644
+index 079fcfc8..e6d86f61 100644
 --- a/libmscgen/CMakeLists.txt
 +++ b/libmscgen/CMakeLists.txt
 @@ -7,7 +7,7 @@ include_directories(
@@ -358,76 +157,84 @@
          OUTPUT  ${GENERATED_SRC}/${lex_file}.l.h
      )
 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index 23460d0..58f679a 100644
+index cb289116..356741ff 100644
 --- a/src/CMakeLists.txt
 +++ b/src/CMakeLists.txt
-@@ -35,7 +35,7 @@ set_source_files_properties(${GENERATED_SRC}/settings.h PROPERTIES GENERATED 1)
+@@ -39,7 +39,7 @@ set_source_files_properties(${GENERATED_SRC}/settings.h PROPERTIES GENERATED 1)
  
  # configvalues.h
  add_custom_command(
--    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maph ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.h
-+    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maph ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.h
-     DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/configgen.py -maph ${CMAKE_CURRENT_LIST_DIR}/config.xml > ${GENERATED_SRC}/configvalues.h
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/configgen.py -maph ${CMAKE_CURRENT_LIST_DIR}/config.xml > ${GENERATED_SRC}/configvalues.h
+     DEPENDS ${CMAKE_CURRENT_LIST_DIR}/config.xml ${CMAKE_CURRENT_LIST_DIR}/configgen.py
      OUTPUT ${GENERATED_SRC}/configvalues.h
  )
-@@ -47,7 +47,7 @@ add_custom_target(
+@@ -51,7 +51,7 @@ add_custom_target(
  
  # configvalues.cpp
  add_custom_command(
--    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maps ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.cpp
-+    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maps ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.cpp
-     DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/configgen.py -maps ${CMAKE_CURRENT_LIST_DIR}/config.xml > ${GENERATED_SRC}/configvalues.cpp
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/configgen.py -maps ${CMAKE_CURRENT_LIST_DIR}/config.xml > ${GENERATED_SRC}/configvalues.cpp
+     DEPENDS ${CMAKE_CURRENT_LIST_DIR}/config.xml ${CMAKE_CURRENT_LIST_DIR}/configgen.py
      OUTPUT ${GENERATED_SRC}/configvalues.cpp
  )
-@@ -55,7 +55,7 @@ set_source_files_properties(${GENERATED_SRC}/configvalues.cpp PROPERTIES GENERAT
+@@ -59,7 +59,7 @@ set_source_files_properties(${GENERATED_SRC}/configvalues.cpp PROPERTIES GENERAT
  
  # configoptions.cpp
  add_custom_command(
--    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -cpp ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configoptions.cpp
-+    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -cpp ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configoptions.cpp
-     DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/configgen.py -cpp ${CMAKE_CURRENT_LIST_DIR}/config.xml > ${GENERATED_SRC}/configoptions.cpp
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/configgen.py -cpp ${CMAKE_CURRENT_LIST_DIR}/config.xml > ${GENERATED_SRC}/configoptions.cpp
+     DEPENDS ${CMAKE_CURRENT_LIST_DIR}/config.xml ${CMAKE_CURRENT_LIST_DIR}/configgen.py
      OUTPUT ${GENERATED_SRC}/configoptions.cpp
  )
-@@ -86,7 +86,7 @@ file(GLOB RESOURCES ${CMAKE_SOURCE_DIR}/templates/*/*)
+@@ -94,7 +94,7 @@ endif()
  # resources.cpp
  add_custom_command(
      COMMENT  "Generating ${GENERATED_SRC}/resources.cpp"
--    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/res2cc_cmd.py ${CMAKE_SOURCE_DIR}/templates ${GENERATED_SRC}/resources.cpp
-+    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/res2cc_cmd.py ${CMAKE_SOURCE_DIR}/templates ${GENERATED_SRC}/resources.cpp
-     DEPENDS ${RESOURCES}
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/res2cc_cmd.py ${CMAKE_SOURCE_DIR}/templates ${GENERATED_SRC}/resources.cpp
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/res2cc_cmd.py ${CMAKE_SOURCE_DIR}/templates ${GENERATED_SRC}/resources.cpp
+     DEPENDS ${RESOURCES} ${CMAKE_CURRENT_LIST_DIR}/res2cc_cmd.py
      OUTPUT ${GENERATED_SRC}/resources.cpp
  )
-@@ -94,7 +94,7 @@ set_source_files_properties(${GENERATED_SRC}/resources.cpp PROPERTIES GENERATED
+@@ -102,7 +102,7 @@ set_source_files_properties(${GENERATED_SRC}/resources.cpp PROPERTIES GENERATED
  
  # layout_default.xml
  add_custom_command(
--    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/to_c_cmd.py < ${CMAKE_SOURCE_DIR}/src/layout_default.xml > ${GENERATED_SRC}/layout_default.xml.h
-+    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/to_c_cmd.py < ${CMAKE_SOURCE_DIR}/src/layout_default.xml > ${GENERATED_SRC}/layout_default.xml.h
-     DEPENDS ${CMAKE_SOURCE_DIR}/src/layout_default.xml
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/to_c_cmd.py < ${CMAKE_CURRENT_LIST_DIR}/layout_default.xml > ${GENERATED_SRC}/layout_default.xml.h
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/to_c_cmd.py < ${CMAKE_CURRENT_LIST_DIR}/layout_default.xml > ${GENERATED_SRC}/layout_default.xml.h
+     DEPENDS ${CMAKE_CURRENT_LIST_DIR}/layout_default.xml ${CMAKE_CURRENT_LIST_DIR}/to_c_cmd.py
      OUTPUT  ${GENERATED_SRC}/layout_default.xml.h
  )
-@@ -124,7 +124,7 @@ foreach(lex_file ${LEX_FILES})
+@@ -131,7 +131,7 @@ foreach(lex_file ${LEX_FILES})
      set(LEX_FILES_H ${LEX_FILES_H} " " ${GENERATED_SRC}/${lex_file}.l.h CACHE INTERNAL "Stores generated files")
      set(LEX_FILES_CPP ${LEX_FILES_CPP} " " ${GENERATED_SRC}/${lex_file}.cpp CACHE INTERNAL "Stores generated files")
      add_custom_command(
--        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/src/${lex_file}.l > ${GENERATED_SRC}/${lex_file}.l.h
-+        COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/src/${lex_file}.l > ${GENERATED_SRC}/${lex_file}.l.h
-         DEPENDS ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/src/${lex_file}.l
+-        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/scan_states.py ${CMAKE_CURRENT_LIST_DIR}/${lex_file}.l > ${GENERATED_SRC}/${lex_file}.l.h
++        COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/scan_states.py ${CMAKE_CURRENT_LIST_DIR}/${lex_file}.l > ${GENERATED_SRC}/${lex_file}.l.h
+         DEPENDS ${CMAKE_CURRENT_LIST_DIR}/scan_states.py ${CMAKE_CURRENT_LIST_DIR}/${lex_file}.l
          OUTPUT  ${GENERATED_SRC}/${lex_file}.l.h
      )
 diff --git a/testing/CMakeLists.txt b/testing/CMakeLists.txt
-index 40cb40b..a301acd 100644
+index b354e78f..28d45e11 100644
 --- a/testing/CMakeLists.txt
 +++ b/testing/CMakeLists.txt
-@@ -1,9 +1,9 @@
+@@ -1,7 +1,7 @@
+ # run all tests sequentially (keep for backward compatibility)
  add_custom_target(tests
-          COMMENT "Running doxygen tests..."
--	 COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen ${PROJECT_BINARY_DIR}/bin/doxygen --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
-+	 COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen ${PROJECT_BINARY_DIR}/bin/doxygen --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
-          DEPENDS doxygen
- )
- add_test(NAME suite
--	COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen $<TARGET_FILE:doxygen> --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
-+	COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen $<TARGET_FILE:doxygen> --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
+ 	COMMENT "Running doxygen tests..."
+-	COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen ${PROJECT_BINARY_DIR}/bin/doxygen --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
++	COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen ${PROJECT_BINARY_DIR}/bin/doxygen --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
+ 	DEPENDS doxygen
  )
  
+@@ -19,6 +19,6 @@ foreach(TEST_FILE ${TEST_FILES})
+ 	string(REGEX REPLACE "^.*/([0-9][0-9][0-9]*).*$" "\\1" TEST_ID "${TEST_FILE}")
+ 	# add a test target for each test
+ 	add_test(NAME ${TEST_NAME}
+-		 COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --id ${TEST_ID} --doxygen $<TARGET_FILE:doxygen> --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
++		 COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --id ${TEST_ID} --doxygen $<TARGET_FILE:doxygen> --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
+ 	)
+ endforeach()
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.17.bb b/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.20.bb
similarity index 79%
rename from meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.17.bb
rename to meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.20.bb
index 45de718..d4ac3b7 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.17.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.20.bb
@@ -10,8 +10,8 @@
            file://0001-build-don-t-look-for-Iconv.patch \
 "
 SRC_URI_append_class-native = " file://doxygen-native-only-check-python3.patch"
-SRC_URI[md5sum] = "7997a15c73a8bd6d003eaba5c2ee2b47"
-SRC_URI[sha256sum] = "2cba988af2d495541cbbe5541b3bee0ee11144dcb23a81eada19f5501fd8b599"
+SRC_URI[md5sum] = "8729936a843232a66fe970ef65f3c3e4"
+SRC_URI[sha256sum] = "e0db6979286fd7ccd3a99af9f97397f2bae50532e4ecb312aa18862f8401ddec"
 
 inherit cmake python3native
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.36.bb b/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.36.bb
index 8282091..039999f 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.36.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.36.bb
@@ -16,3 +16,5 @@
 FILES_${PN} += "${datadir}/icons"
 
 EXTRA_OECONF = "--disable-html-docs"
+
+RRECOMMENDS_${PN} += "source-code-pro-fonts"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/log4cplus/log4cplus_2.0.5.bb b/meta-openembedded/meta-oe/recipes-devtools/log4cplus/log4cplus_2.0.5.bb
deleted file mode 100644
index 967ac76..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/log4cplus/log4cplus_2.0.5.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "log4cplus provides a simple C++ logging API for log management"
-SECTION = "libs"
-HOMEPAGE = "http://sourceforge.net/projects/log4cplus/"
-BUGTRACKER = "http://sourceforge.net/p/log4cplus/bugs/"
-
-LICENSE = "Apache-2.0 & BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=41e8e060c26822886b592ab4765c756b"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}-stable/${PV}/${BP}.tar.gz \
-          "
-SRC_URI[md5sum] = "71dd956bf686195127559671f1426cff"
-SRC_URI[sha256sum] = "c07115c23219390633798def30b7b51a0f79fdeb857e4b49632f17746d0ceb97"
-
-UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/log4cplus/files/log4cplus-stable/"
-UPSTREAM_CHECK_REGEX = "log4cplus-stable/(?P<pver>\d+(\.\d+)+)/"
-
-inherit autotools pkgconfig
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0001-Fix-musl-build.patch b/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0001-Fix-musl-build.patch
new file mode 100644
index 0000000..fa90aa1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0001-Fix-musl-build.patch
@@ -0,0 +1,125 @@
+From a5a4bb4254b2109bd3e272174946f0bb36ee99a8 Mon Sep 17 00:00:00 2001
+From: Leon Anavi <leon.anavi@konsulko.com>
+Date: Tue, 25 Aug 2020 11:45:45 +0300
+Subject: [PATCH] Fix musl build
+
+Apply the following fixes for musl:
+
+- Fix basename() is in libgen.h
+- Fix wrong usage of LONG_BIT
+
+Same fixes have been submitted to the upstream of lshw by Sergio
+Prado but they have not been merged yet.
+
+Upstream-Status: Submitted
+
+Co-Authored-By: Sergio Prado <sergio.prado@e-labworks.com>
+Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
+---
+ src/core/abi.cc   |  4 +---
+ src/core/sysfs.cc | 19 ++++++++++---------
+ 2 files changed, 11 insertions(+), 12 deletions(-)
+
+diff --git a/src/core/abi.cc b/src/core/abi.cc
+index adff7b5..76c664c 100644
+--- a/src/core/abi.cc
++++ b/src/core/abi.cc
+@@ -20,9 +20,7 @@ __ID("@(#) $Id: mem.cc 1352 2006-05-27 23:54:13Z ezix $");
+ bool scan_abi(hwNode & system)
+ {
+   // are we compiled as 32- or 64-bit process ?
+-  long sc = sysconf(LONG_BIT);
+-  if(sc==-1) sc = sysconf(_SC_LONG_BIT);
+-  if(sc!=-1) system.setWidth(sc);
++  system.setWidth(LONG_BIT);
+ 
+   pushd(PROC_SYS);
+ 
+diff --git a/src/core/sysfs.cc b/src/core/sysfs.cc
+index 32d6564..c2fa84f 100644
+--- a/src/core/sysfs.cc
++++ b/src/core/sysfs.cc
+@@ -16,6 +16,7 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <sys/mount.h>
++#include <libgen.h>
+ 
+ 
+ __ID("@(#) $Id$");
+@@ -100,7 +101,7 @@ static string sysfs_getbustype(const string & path)
+   {
+     devname =
+       string(fs.path + "/bus/") + string(namelist[i]->d_name) +
+-      "/devices/" + basename(path.c_str());
++      "/devices/" + basename(const_cast<char*>(path.c_str()));
+ 
+     if (samefile(devname, path))
+       return string(namelist[i]->d_name);
+@@ -140,7 +141,7 @@ static string sysfstobusinfo(const string & path)
+ 
+   if (bustype == "usb")
+   {
+-    string name = basename(path.c_str());
++    string name = basename(const_cast<char*>(path.c_str()));
+     if (matches(name, "^[0-9]+-[0-9]+(\\.[0-9]+)*:[0-9]+\\.[0-9]+$"))
+     {
+       size_t colon = name.rfind(":");
+@@ -151,7 +152,7 @@ static string sysfstobusinfo(const string & path)
+ 
+   if (bustype == "virtio")
+   {
+-    string name = basename(path.c_str());
++    string name = basename(const_cast<char*>(path.c_str()));
+     if (name.compare(0, 6, "virtio") == 0)
+       return "virtio@" + name.substr(6);
+     else
+@@ -159,10 +160,10 @@ static string sysfstobusinfo(const string & path)
+   }
+ 
+   if (bustype == "vio")
+-    return string("vio@") + basename(path.c_str());
++    return string("vio@") + basename(const_cast<char*>(path.c_str()));
+ 
+   if (bustype == "ccw")
+-    return string("ccw@") + basename(path.c_str());
++    return string("ccw@") + basename(const_cast<char*>(path.c_str()));
+ 
+   if (bustype == "ccwgroup")
+   {
+@@ -240,7 +241,7 @@ string entry::driver() const
+   string driverlink = This->devpath + "/driver";
+   if (!exists(driverlink))
+     return "";
+-  return basename(readlink(driverlink).c_str());
++  return basename(const_cast<char*>(readlink(driverlink).c_str()));
+ }
+ 
+ 
+@@ -328,7 +329,7 @@ string entry::name_in_class(const string & classname) const
+ 
+ string entry::name() const
+ {
+-  return basename(This->devpath.c_str());
++  return basename(const_cast<char*>(This->devpath.c_str()));
+ }
+ 
+ 
+@@ -340,12 +341,12 @@ entry entry::parent() const
+ 
+ string entry::classname() const
+ {
+-  return basename(dirname(This->devpath).c_str());
++  return basename(const_cast<char*>(dirname(This->devpath).c_str()));
+ }
+ 
+ bool entry::isvirtual() const
+ {
+-  return string(basename(dirname(dirname(This->devpath)).c_str())) == "virtual";
++  return string(basename(const_cast<char*>(dirname(dirname(This->devpath)).c_str()))) == "virtual";
+ }
+ 
+ string entry::string_attr(const string & name, const string & def) const
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0001-Makefile-Fix-cross-compilation.patch b/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0001-Makefile-Fix-cross-compilation.patch
deleted file mode 100644
index 6db6ab9..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0001-Makefile-Fix-cross-compilation.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 62f9ed95b5d0feab426bff452be793c62a6b795a Mon Sep 17 00:00:00 2001
-From: Krzysztof Kozlowski <krzk@kernel.org>
-Date: Wed, 6 Jun 2018 12:49:21 +0200
-Subject: [PATCH 1/2] Makefile: Fix cross compilation
-
-Allow building on ARMv7 and ARMv8.
-
-Upstream-Status: Submitted
-Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
----
- src/Makefile      | 2 +-
- src/core/Makefile | 2 +-
- src/gui/Makefile  | 4 ++--
- 3 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/Makefile b/src/Makefile
-index b50586bc9234..654b786dd899 100644
---- a/src/Makefile
-+++ b/src/Makefile
-@@ -18,7 +18,7 @@ export MANDIR
- export DATADIR
- export SQLITE
- 
--CXX?=c++
-+CXX?=$(CROSS_COMPILE)c++
- INCLUDES=-I./core/
- DEFINES=-DPREFIX=\"$(PREFIX)\" -DSBINDIR=\"$(SBINDIR)\" -DMANDIR=\"$(MANDIR)\" -DDATADIR=\"$(DATADIR)\"
- CXXFLAGS=-g -Wall -g $(INCLUDES) $(DEFINES) $(RPM_OPT_FLAGS)
-diff --git a/src/core/Makefile b/src/core/Makefile
-index 5bf5a69cc6a6..2bd1b94c4175 100644
---- a/src/core/Makefile
-+++ b/src/core/Makefile
-@@ -1,6 +1,6 @@
- PACKAGENAME?=lshw
- 
--CXX=c++
-+CXX?=$(CROSS_COMPILE)c++
- INCLUDES=
- DEFINES=-DPREFIX=\"$(PREFIX)\" -DSBINDIR=\"$(SBINDIR)\" -DMANDIR=\"$(MANDIR)\" -DDATADIR=\"$(DATADIR)\"
- CXXFLAGS?=-g -Wall $(INCLUDES) $(DEFINES) $(RPM_OPT_FLAGS)
-diff --git a/src/gui/Makefile b/src/gui/Makefile
-index 332ce5704819..b0f925490356 100644
---- a/src/gui/Makefile
-+++ b/src/gui/Makefile
-@@ -1,7 +1,7 @@
- PACKAGENAME?=lshw
- 
--CXX?=c++
--CC?=cc
-+CXX?=$(CROSS_COMPILE)c++
-+CC?=$(CROSS_COMPILE)cc
- STRIP?=strip
- OBJCOPY?=objcopy
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0002-Makefile-Use-supplied-LDFLAGS-to-silence-OE-GNU_HASH.patch b/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0002-Makefile-Use-supplied-LDFLAGS-to-silence-OE-GNU_HASH.patch
deleted file mode 100644
index d3da01b..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0002-Makefile-Use-supplied-LDFLAGS-to-silence-OE-GNU_HASH.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 75667f8a0ae4f1689ff03eb1768b1ee8cdfbf00d Mon Sep 17 00:00:00 2001
-From: Krzysztof Kozlowski <krzk@kernel.org>
-Date: Wed, 6 Jun 2018 12:49:30 +0200
-Subject: [PATCH 2/2] Makefile: Use supplied LDFLAGS to silence OE GNU_HASH QA
- warning
-
-Fix OpenEmbedded/Yocto QA warning:
-
-    ERROR: lshw-02.16-r1 do_package_qa: QA Issue: No GNU_HASH in the elf binary: 'build/tmp/work/cortexa5hf-neon-poky-linux-gnueabi/lshw/02.16-r1/packages-split/lshw/usr/sbin/lshw' [ldflags]
-    ERROR: lshw-02.16-r1 do_package_qa: QA run found fatal errors. Please consider fixing them.
-    ERROR: lshw-02.16-r1 do_package_qa: Function failed: do_package_qa
-
-Upstream-Status: Submitted
-Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
----
- src/Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/Makefile b/src/Makefile
-index 654b786dd899..a441ba2bb666 100644
---- a/src/Makefile
-+++ b/src/Makefile
-@@ -25,7 +25,7 @@ CXXFLAGS=-g -Wall -g $(INCLUDES) $(DEFINES) $(RPM_OPT_FLAGS)
- ifeq ($(SQLITE), 1)
- 	CXXFLAGS+= -DSQLITE $(shell pkg-config --cflags sqlite3)
- endif
--LDFLAGS=-L./core/ -g
-+LDFLAGS+=-L./core/ -g
- ifneq ($(shell $(LD) --help 2| grep -- --as-needed), )
- 	LDFLAGS+= -Wl,--as-needed
- endif
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0003-sysfs-Fix-basename-build-with-musl.patch b/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0003-sysfs-Fix-basename-build-with-musl.patch
deleted file mode 100644
index 3492493..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/lshw/files/0003-sysfs-Fix-basename-build-with-musl.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From a89f2ba8496994c8b5e28a89202df15d64c648f9 Mon Sep 17 00:00:00 2001
-From: Krzysztof Kozlowski <krzk@kernel.org>
-Date: Wed, 6 Jun 2018 12:47:02 +0200
-Subject: [PATCH] sysfs: Fix basename() build with musl
-
-musl provides only standard basename() which accepts non-const string.
-This fixes build error with musl C library:
-
-    | sysfs.cc: In function 'std::__cxx11::string sysfs_getbustype(const string&)':
-    | sysfs.cc:102:21: error: 'basename' was not declared in this scope
-    |        "/devices/" + basename(path.c_str());
-    |                      ^~~~~~~~
-
-Upstream-Status: Submitted
-Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
----
- src/core/dasd.cc  | 3 ++-
- src/core/sysfs.cc | 9 +++++----
- 2 files changed, 7 insertions(+), 5 deletions(-)
-
-diff --git a/src/core/dasd.cc b/src/core/dasd.cc
-index 626b8a872b0f..b27844215cc4 100644
---- a/src/core/dasd.cc
-+++ b/src/core/dasd.cc
-@@ -2,6 +2,7 @@
- #include "osutils.h"
- #include "dasd.h"
- #include <glob.h>
-+#include <libgen.h>
- #include <string.h>
- #include <fcntl.h>
- #include <unistd.h>
-@@ -42,7 +43,7 @@ bool scan_dasd(hwNode & n)
-   {
-     for(dev_num=0;dev_num<devices.gl_pathc;dev_num++)
-     {
--      dev_name = basename(devices.gl_pathv[dev_num]);
-+      dev_name = basename(const_cast<char *>(devices.gl_pathv[dev_num]));
-       for (std::vector<std::string>::iterator it = sysfs_attribs.begin(); it != sysfs_attribs.end(); ++it)
-       {
-         std::string attrib_fname = std::string(SYSFS_PREFIX) + dev_name + "/device/" + *it;
-diff --git a/src/core/sysfs.cc b/src/core/sysfs.cc
-index acc9d0056d5e..c56bab7b3b9f 100644
---- a/src/core/sysfs.cc
-+++ b/src/core/sysfs.cc
-@@ -7,6 +7,7 @@
- #include "version.h"
- #include "sysfs.h"
- #include "osutils.h"
-+#include <libgen.h>
- #include <limits.h>
- #include <unistd.h>
- #include <stdlib.h>
-@@ -99,7 +100,7 @@ static string sysfs_getbustype(const string & path)
-   {
-     devname =
-       string(fs.path + "/bus/") + string(namelist[i]->d_name) +
--      "/devices/" + basename(path.c_str());
-+      "/devices/" + basename(const_cast<char *>(path.c_str()));
- 
-     if (samefile(devname, path))
-       return string(namelist[i]->d_name);
-@@ -139,7 +140,7 @@ static string sysfstobusinfo(const string & path)
- 
-   if (bustype == "virtio")
-   {
--    string name = basename(path.c_str());
-+    string name = basename(const_cast<char *>(path.c_str()));
-     if (name.compare(0, 6, "virtio") == 0)
-       return "virtio@" + name.substr(6);
-     else
-@@ -207,7 +208,7 @@ string entry::driver() const
-   string driverlink = This->devpath + "/driver";
-   if (!exists(driverlink))
-     return "";
--  return basename(readlink(driverlink).c_str());
-+  return basename(const_cast<char *>(readlink(driverlink).c_str()));
- }
- 
- 
-@@ -288,7 +289,7 @@ string entry::name_in_class(const string & classname) const
- 
- string entry::name() const
- {
--  return basename(This->devpath.c_str());
-+  return basename(const_cast<char *>(This->devpath.c_str()));
- }
- 
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lshw/lshw_02.18.bb b/meta-openembedded/meta-oe/recipes-devtools/lshw/lshw_02.19.2.bb
similarity index 70%
rename from meta-openembedded/meta-oe/recipes-devtools/lshw/lshw_02.18.bb
rename to meta-openembedded/meta-oe/recipes-devtools/lshw/lshw_02.19.2.bb
index d1a7334..a26fac9 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/lshw/lshw_02.18.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/lshw/lshw_02.19.2.bb
@@ -13,12 +13,10 @@
 
 SRC_URI = " \
     http://ezix.org/software/files/lshw-B.${PV}.tar.gz \
-    file://0001-Makefile-Fix-cross-compilation.patch \
-    file://0002-Makefile-Use-supplied-LDFLAGS-to-silence-OE-GNU_HASH.patch \
-    file://0003-sysfs-Fix-basename-build-with-musl.patch \
+    file://0001-Fix-musl-build.patch \
 "
-SRC_URI[md5sum] = "8671c6d94d6324a744b7f21f1bfecfd2"
-SRC_URI[sha256sum] = "ae22ef11c934364be4fd2a0a1a7aadf4495a0251ec6979da280d342a89ca3c2f"
+SRC_URI[md5sum] = "8c70d46e906688309095c73ecb9396e3"
+SRC_URI[sha256sum] = "9bb347ac87142339a366a1759ac845e3dbb337ec000aa1b99b50ac6758a80f80"
 
 S = "${WORKDIR}/lshw-B.${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lua/lua/0001-Fixed-bug-barriers-cannot-be-active-during-sweep.patch b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/0001-Fixed-bug-barriers-cannot-be-active-during-sweep.patch
new file mode 100644
index 0000000..a302874
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/0001-Fixed-bug-barriers-cannot-be-active-during-sweep.patch
@@ -0,0 +1,90 @@
+From 1e6df25ac28dcd89f0324177bb55019422404b44 Mon Sep 17 00:00:00 2001
+From: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
+Date: Thu, 3 Sep 2020 15:32:17 +0800
+Subject: [PATCH] Fixed bug: barriers cannot be active during sweep
+
+Barriers cannot be active during sweep, even in generational mode.
+(Although gen. mode is not incremental, it can hit a barrier when
+deleting a thread and closing its upvalues.)  The colors of objects are
+being changed during sweep and, therefore, cannot be trusted.
+
+Upstream-Status: Backport [https://github.com/lua/lua/commit/a6da1472c0c5e05ff249325f979531ad51533110]
+CVE: CVE-2020-24371
+
+[Adjust code KGC_INC -> KGC_NORMAL, refer 69371c4b84becac09c445aae01d005b49658ef82]
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ src/lgc.c | 33 ++++++++++++++++++++++++---------
+ 1 file changed, 24 insertions(+), 9 deletions(-)
+
+diff --git a/src/lgc.c b/src/lgc.c
+index 973c269..7af23d5 100644
+--- a/src/lgc.c
++++ b/src/lgc.c
+@@ -142,10 +142,17 @@ static int iscleared (global_State *g, const TValue *o) {
+ 
+ 
+ /*
+-** barrier that moves collector forward, that is, mark the white object
+-** being pointed by a black object. (If in sweep phase, clear the black
+-** object to white [sweep it] to avoid other barrier calls for this
+-** same object.)
++** Barrier that moves collector forward, that is, marks the white object
++** 'v' being pointed by the black object 'o'.  In the generational
++** mode, 'v' must also become old, if 'o' is old; however, it cannot
++** be changed directly to OLD, because it may still point to non-old
++** objects. So, it is marked as OLD0. In the next cycle it will become
++** OLD1, and in the next it will finally become OLD (regular old). By
++** then, any object it points to will also be old.  If called in the
++** incremental sweep phase, it clears the black object to white (sweep
++** it) to avoid other barrier calls for this same object. (That cannot
++** be done is generational mode, as its sweep does not distinguish
++** whites from deads.)
+ */
+ void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) {
+   global_State *g = G(L);
+@@ -154,7 +161,8 @@ void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) {
+     reallymarkobject(g, v);  /* restore invariant */
+   else {  /* sweep phase */
+     lua_assert(issweepphase(g));
+-    makewhite(g, o);  /* mark main obj. as white to avoid other barriers */
++    if (g->gckind == KGC_NORMAL)  /* incremental mode? */
++      makewhite(g, o);  /* mark 'o' as white to avoid other barriers */
+   }
+ }
+ 
+@@ -299,10 +307,15 @@ static void markbeingfnz (global_State *g) {
+ 
+ 
+ /*
+-** Mark all values stored in marked open upvalues from non-marked threads.
+-** (Values from marked threads were already marked when traversing the
+-** thread.) Remove from the list threads that no longer have upvalues and
+-** not-marked threads.
++** For each non-marked thread, simulates a barrier between each open
++** upvalue and its value. (If the thread is collected, the value will be
++** assigned to the upvalue, but then it can be too late for the barrier
++** to act. The "barrier" does not need to check colors: A non-marked
++** thread must be young; upvalues cannot be older than their threads; so
++** any visited upvalue must be young too.) Also removes the thread from
++** the list, as it was already visited. Removes also threads with no
++** upvalues, as they have nothing to be checked. (If the thread gets an
++** upvalue later, it will be linked in the list again.)
+ */
+ static void remarkupvals (global_State *g) {
+   lua_State *thread;
+@@ -313,9 +326,11 @@ static void remarkupvals (global_State *g) {
+       p = &thread->twups;  /* keep marked thread with upvalues in the list */
+     else {  /* thread is not marked or without upvalues */
+       UpVal *uv;
++      lua_assert(!isold(thread) || thread->openupval == NULL);
+       *p = thread->twups;  /* remove thread from the list */
+       thread->twups = thread;  /* mark that it is out of list */
+       for (uv = thread->openupval; uv != NULL; uv = uv->u.open.next) {
++        lua_assert(getage(uv) <= getage(thread));
+         if (uv->u.open.touched) {
+           markvalue(g, uv->v);  /* remark upvalue's value */
+           uv->u.open.touched = 0;
+-- 
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lua/lua/CVE-2020-15945.patch b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/CVE-2020-15945.patch
new file mode 100644
index 0000000..89ce491
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/lua/lua/CVE-2020-15945.patch
@@ -0,0 +1,167 @@
+From d8d344365945a534f700c82c5dd26f704f89fef3 Mon Sep 17 00:00:00 2001
+From: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
+Date: Wed, 5 Aug 2020 16:59:58 +0800
+Subject: [PATCH] Fixed bug: invalid 'oldpc' when returning to a function
+
+The field 'L->oldpc' is not always updated when control returns to a
+function; an invalid value can seg. fault when computing 'changedline'.
+(One example is an error in a finalizer; control can return to
+'luaV_execute' without executing 'luaD_poscall'.) Instead of trying to
+fix all possible corner cases, it seems safer to be resilient to invalid
+values for 'oldpc'. Valid but wrong values at most cause an extra call
+to a line hook.
+
+CVE: CVE-2020-15945
+
+[Adjust the code to be applicable to the tree]
+
+Upstream-Status: Backport [https://github.com/lua/lua/commit/a2195644d89812e5b157ce7bac35543e06db05e3]
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+Signed-off-by: Joe Slater <joe.slater@@windriver.com>
+
+---
+ src/ldebug.c | 30 +++++++++++++++---------------
+ src/ldebug.h |  4 ++++
+ src/ldo.c    |  2 +-
+ src/lstate.c |  1 +
+ src/lstate.h |  2 +-
+ 5 files changed, 22 insertions(+), 17 deletions(-)
+
+diff --git a/src/ldebug.c b/src/ldebug.c
+index 239affb..832b16c 100644
+--- a/src/ldebug.c
++++ b/src/ldebug.c
+@@ -34,9 +34,8 @@
+ #define noLuaClosure(f)		((f) == NULL || (f)->c.tt == LUA_TCCL)
+ 
+ 
+-/* Active Lua function (given call info) */
+-#define ci_func(ci)		(clLvalue((ci)->func))
+-
++/* inverse of 'pcRel' */
++#define invpcRel(pc, p)                ((p)->code + (pc) + 1)
+ 
+ static const char *funcnamefromcode (lua_State *L, CallInfo *ci,
+                                     const char **name);
+@@ -71,20 +70,18 @@ static void swapextra (lua_State *L) {
+ 
+ /*
+ ** This function can be called asynchronously (e.g. during a signal).
+-** Fields 'oldpc', 'basehookcount', and 'hookcount' (set by
+-** 'resethookcount') are for debug only, and it is no problem if they
+-** get arbitrary values (causes at most one wrong hook call). 'hookmask'
+-** is an atomic value. We assume that pointers are atomic too (e.g., gcc
+-** ensures that for all platforms where it runs). Moreover, 'hook' is
+-** always checked before being called (see 'luaD_hook').
++** Fields 'basehookcount' and 'hookcount' (set by 'resethookcount')
++** are for debug only, and it is no problem if they get arbitrary
++** values (causes at most one wrong hook call). 'hookmask' is an atomic
++** value. We assume that pointers are atomic too (e.g., gcc ensures that
++** for all platforms where it runs). Moreover, 'hook' is always checked
++** before being called (see 'luaD_hook').
+ */
+ LUA_API void lua_sethook (lua_State *L, lua_Hook func, int mask, int count) {
+   if (func == NULL || mask == 0) {  /* turn off hooks? */
+     mask = 0;
+     func = NULL;
+   }
+-  if (isLua(L->ci))
+-    L->oldpc = L->ci->u.l.savedpc;
+   L->hook = func;
+   L->basehookcount = count;
+   resethookcount(L);
+@@ -665,7 +662,10 @@ l_noret luaG_runerror (lua_State *L, const char *fmt, ...) {
+ void luaG_traceexec (lua_State *L) {
+   CallInfo *ci = L->ci;
+   lu_byte mask = L->hookmask;
++  const Proto *p = ci_func(ci)->p;
+   int counthook = (--L->hookcount == 0 && (mask & LUA_MASKCOUNT));
++  /* 'L->oldpc' may be invalid; reset it in this case */
++  int oldpc = (L->oldpc < p->sizecode) ? L->oldpc : 0;
+   if (counthook)
+     resethookcount(L);  /* reset count */
+   else if (!(mask & LUA_MASKLINE))
+@@ -677,15 +677,15 @@ void luaG_traceexec (lua_State *L) {
+   if (counthook)
+     luaD_hook(L, LUA_HOOKCOUNT, -1);  /* call count hook */
+   if (mask & LUA_MASKLINE) {
+-    Proto *p = ci_func(ci)->p;
+     int npc = pcRel(ci->u.l.savedpc, p);
+     int newline = getfuncline(p, npc);
+     if (npc == 0 ||  /* call linehook when enter a new function, */
+-        ci->u.l.savedpc <= L->oldpc ||  /* when jump back (loop), or when */
+-        newline != getfuncline(p, pcRel(L->oldpc, p)))  /* enter a new line */
++        ci->u.l.savedpc <= invpcRel(oldpc, p) ||  /* when jump back (loop), or when */
++        newline != getfuncline(p, oldpc))  /* enter a new line */
+       luaD_hook(L, LUA_HOOKLINE, newline);  /* call line hook */
++
++    L->oldpc = npc;  /* 'pc' of last call to line hook */
+   }
+-  L->oldpc = ci->u.l.savedpc;
+   if (L->status == LUA_YIELD) {  /* did hook yield? */
+     if (counthook)
+       L->hookcount = 1;  /* undo decrement to zero */
+diff --git a/src/ldebug.h b/src/ldebug.h
+index 0e31546..c224cc4 100644
+--- a/src/ldebug.h
++++ b/src/ldebug.h
+@@ -13,6 +13,10 @@
+ 
+ #define pcRel(pc, p)	(cast(int, (pc) - (p)->code) - 1)
+ 
++/* Active Lua function (given call info) */
++#define ci_func(ci)            (clLvalue((ci)->func))
++
++
+ #define getfuncline(f,pc)	(((f)->lineinfo) ? (f)->lineinfo[pc] : -1)
+ 
+ #define resethookcount(L)	(L->hookcount = L->basehookcount)
+diff --git a/src/ldo.c b/src/ldo.c
+index 90b695f..f66ac1a 100644
+--- a/src/ldo.c
++++ b/src/ldo.c
+@@ -382,7 +382,7 @@ int luaD_poscall (lua_State *L, CallInfo *ci, StkId firstResult, int nres) {
+       luaD_hook(L, LUA_HOOKRET, -1);
+       firstResult = restorestack(L, fr);
+     }
+-    L->oldpc = ci->previous->u.l.savedpc;  /* 'oldpc' for caller function */
++    L->oldpc = pcRel(ci->u.l.savedpc, ci_func(ci)->p);  /* 'oldpc' for caller function */
+   }
+   res = ci->func;  /* res == final position of 1st result */
+   L->ci = ci->previous;  /* back to caller */
+diff --git a/src/lstate.c b/src/lstate.c
+index 9194ac3..3573e36 100644
+--- a/src/lstate.c
++++ b/src/lstate.c
+@@ -236,6 +236,7 @@ static void preinit_thread (lua_State *L, global_State *g) {
+   L->nny = 1;
+   L->status = LUA_OK;
+   L->errfunc = 0;
++  L->oldpc = 0;
+ }
+ 
+ 
+diff --git a/src/lstate.h b/src/lstate.h
+index a469466..d75eadf 100644
+--- a/src/lstate.h
++++ b/src/lstate.h
+@@ -164,7 +164,6 @@ struct lua_State {
+   StkId top;  /* first free slot in the stack */
+   global_State *l_G;
+   CallInfo *ci;  /* call info for current function */
+-  const Instruction *oldpc;  /* last pc traced */
+   StkId stack_last;  /* last free slot in the stack */
+   StkId stack;  /* stack base */
+   UpVal *openupval;  /* list of open upvalues in this stack */
+@@ -174,6 +173,7 @@ struct lua_State {
+   CallInfo base_ci;  /* CallInfo for first level (C calling Lua) */
+   volatile lua_Hook hook;
+   ptrdiff_t errfunc;  /* current error handling function (stack index) */
++  int oldpc;  /* last pc traced */
+   int stacksize;
+   int basehookcount;
+   int hookcount;
+-- 
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.5.bb b/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.5.bb
index d3461b0..7d84ea6 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.5.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.5.bb
@@ -8,6 +8,8 @@
            file://lua.pc.in \
            file://0001-Allow-building-lua-without-readline-on-Linux.patch \
            file://CVE-2020-15888.patch \
+           file://CVE-2020-15945.patch \
+           file://0001-Fixed-bug-barriers-cannot-be-active-during-sweep.patch \
            "
 
 # if no test suite matches PV release of Lua exactly, download the suite for the closest Lua release.
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb
index cc90394..6573efc 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb
@@ -3,13 +3,15 @@
 LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=d739bb9250a55c124a545b588fd76771"
 HOMEPAGE = "http://luajit.org"
 
-PV = "2.1.0~beta3"
-SRCREV = "0ad60ccbc3768fa8e3e726858adf261950edbc22"
 SRC_URI = "git://luajit.org/git/luajit-2.0.git;protocol=http;branch=v2.1 \
            file://0001-Do-not-strip-automatically-this-leaves-the-stripping.patch \
            file://clang.patch \
            "
 
+# Set PV to a version tag and date associated with SRCREV if it is later.
+PV = "2.1.0~beta3-200809"
+SRCREV = "94d4abcca966df2cc423e821bcacd04898f73117"
+
 S = "${WORKDIR}/git"
 
 inherit pkgconfig binconfig siteinfo
diff --git a/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_5.4.bb b/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_5.5.bb
similarity index 87%
rename from meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_5.4.bb
rename to meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_5.5.bb
index fa3c734..7980960 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_5.4.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_5.5.bb
@@ -10,8 +10,8 @@
 inherit python3native
 
 SRC_URI = "https://www.mercurial-scm.org/release/${BP}.tar.gz"
-SRC_URI[md5sum] = "0859029d0bb54bcf7c583c55680573cb"
-SRC_URI[sha256sum] = "1df8d1978aefcbb65dc51e3666a452583f47aeaf3c5682e4c00a3b23cd805d6a"
+SRC_URI[md5sum] = "17b21729cbc61dda80b2e3dfc046319f"
+SRC_URI[sha256sum] = "c1ed28e1534304a7a4981ed59905286d1c56acd5b75755eedd184171a4a782b4"
 
 S = "${WORKDIR}/mercurial-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.9.0.bb b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.9.1.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.9.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.9.1.bb
index 0f5ef70..3593242 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.9.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.9.1.bb
@@ -7,7 +7,7 @@
 SRC_URI = "git://github.com/nlohmann/json.git;nobranch=1 \
            "
 
-SRCREV = "d34771cafc87b358ba421faca28facc7f8080174"
+SRCREV = "db78ac1d7716f56fc9f1b030b715f872f93964e4"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-Do-not-include-syscrtl.h-with-glibc.patch b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-Do-not-include-syscrtl.h-with-glibc.patch
deleted file mode 100644
index 618ce26..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-Do-not-include-syscrtl.h-with-glibc.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From a763610719e7d7f6cdc45569b6fbfdb91bb7c87b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 27 Jul 2019 14:30:08 -0700
-Subject: [PATCH] Do not include syscrtl.h with glibc
-
-glibc 2.30 has deprecated it see [1]
-Fixes
-sys/sysctl.h:21:2: error: "The <sys/sysctl.h> header is deprecated and will be removed." [-Werror,-W#warnings]
-
-[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=744e829637162bb7d5029632aacf341c64b86990
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/helper/options.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/helper/options.c b/src/helper/options.c
-index 12755e010..4007e37f6 100644
---- a/src/helper/options.c
-+++ b/src/helper/options.c
-@@ -34,7 +34,7 @@
- #if IS_DARWIN
- #include <libproc.h>
- #endif
--#ifdef HAVE_SYS_SYSCTL_H
-+#if defined(HAVE_SYS_SYSCTL_H) && !defined(__GLIBC__)
- #include <sys/sysctl.h>
- #endif
- #if IS_WIN32 && !IS_CYGWIN
--- 
-2.22.0
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-bitbang-Make-bitbang_swd-extern-definition.patch b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-bitbang-Make-bitbang_swd-extern-definition.patch
deleted file mode 100644
index d42b628..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd/0001-bitbang-Make-bitbang_swd-extern-definition.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 428f9f3c4a5be973e4c7fc1325ae9dbe41040df2 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 13 Aug 2020 17:47:35 -0700
-Subject: [PATCH] bitbang: Make bitbang_swd extern definition
-
-Fixes build with gcc10+
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/jtag/drivers/bitbang.c | 1 +
- src/jtag/drivers/bitbang.h | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/jtag/drivers/bitbang.c b/src/jtag/drivers/bitbang.c
-index b5078c080..f8612aade 100644
---- a/src/jtag/drivers/bitbang.c
-+++ b/src/jtag/drivers/bitbang.c
-@@ -43,6 +43,7 @@ static int bitbang_stableclocks(int num_cycles);
- static void bitbang_swd_write_reg(uint8_t cmd, uint32_t value, uint32_t ap_delay_clk);
- 
- struct bitbang_interface *bitbang_interface;
-+const struct swd_driver bitbang_swd;
- 
- /* DANGER!!!! clock absolutely *MUST* be 0 in idle or reset won't work!
-  *
-diff --git a/src/jtag/drivers/bitbang.h b/src/jtag/drivers/bitbang.h
-index 577717ebd..0faf5d9ae 100644
---- a/src/jtag/drivers/bitbang.h
-+++ b/src/jtag/drivers/bitbang.h
-@@ -57,7 +57,7 @@ struct bitbang_interface {
- 	void (*swdio_drive)(bool on);
- };
- 
--const struct swd_driver bitbang_swd;
-+extern const struct swd_driver bitbang_swd;
- 
- extern bool swd_mode;
- 
--- 
-2.28.0
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
index c7d754f..4f6aaa8 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
@@ -9,15 +9,13 @@
     git://repo.or.cz/r/git2cl.git;protocol=http;destsuffix=tools/git2cl;name=git2cl \
     git://repo.or.cz/r/jimtcl.git;protocol=http;destsuffix=git/jimtcl;name=jimtcl \
     git://repo.or.cz/r/libjaylink.git;protocol=http;destsuffix=git/src/jtag/drivers/libjaylink;name=libjaylink \
-    file://0001-Do-not-include-syscrtl.h-with-glibc.patch \
-    file://0001-bitbang-Make-bitbang_swd-extern-definition.patch \
 "
 
 SRCREV_FORMAT = "openocd"
-SRCREV_openocd = "ded67990255cc1e63c77832ffd6e6bef9120873d"
+SRCREV_openocd = "d46f28c2ea2611f5fbbc679a5eed253d3dcd2fe3"
 SRCREV_git2cl = "8373c9f74993e218a08819cbcdbab3f3564bbeba"
-SRCREV_jimtcl = "dc4ba7770d580800634f90b67a24e077b4a26d98"
-SRCREV_libjaylink = "3322dfa5e7aa56f5b12b7f2197e3e6b850b7b66e"
+SRCREV_jimtcl = "0aa0fb4e3a38d38a49de9eb585d93d63a370dcf6"
+SRCREV_libjaylink = "9aa7a5957c07bb6e862fc1a6d3153d109c7407e4"
 
 PV = "0.10+gitr${SRCPV}"
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/debian-php-fixheader.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/debian-php-fixheader.patch
old mode 100755
new mode 100644
index 21050f7..a4804d1
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/debian-php-fixheader.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/debian-php-fixheader.patch
@@ -1,31 +1,32 @@
-php: remove host specific info from header file
+From 1234a8ef7c5ab88e24bc5908f0ccfd55af21aa39 Mon Sep 17 00:00:00 2001
+From: Leon Anavi <leon.anavi@konsulko.com>
+Date: Mon, 31 Aug 2020 16:03:27 +0300
+Subject: [PATCH] php: remove host specific info from header file
 
+Based on:
 https://sources.debian.org/data/main/p/php7.3/7.3.6-1/debian/patches/
         0036-php-5.4.9-fixheader.patch
 
 Upstream-Status: Inappropriate [not author]
 Signed-off-by: Joe Slater <joe.slater@windriver.com>
-
----
-From: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
-Date: Sat, 2 May 2015 10:26:56 +0200
-Subject: php-5.4.9-fixheader
-
-Make generated php_config.h constant across rebuilds.
+Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
 ---
  configure.ac | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/configure.ac b/configure.ac
-index 433d7e6..41893d7 100644
+index 2a474ba36d..6d22a21630 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -1357,7 +1357,7 @@ PHP_BUILD_DATE=`date -u +%Y-%m-%d`
+@@ -1323,7 +1323,7 @@ PHP_BUILD_DATE=`date -u +%Y-%m-%d`
  fi
  AC_DEFINE_UNQUOTED(PHP_BUILD_DATE,"$PHP_BUILD_DATE",[PHP build date])
  
--PHP_UNAME=`uname -a | xargs`
-+PHP_UNAME=`uname | xargs`
+-UNAME=`uname -a | xargs`
++UNAME=`uname | xargs`
+ PHP_UNAME=${PHP_UNAME:-$UNAME}
  AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME",[uname -a output])
  PHP_OS=`uname | xargs`
- AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output])
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.4.bb b/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.9.bb
similarity index 98%
rename from meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.4.bb
rename to meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.9.bb
index f74533c..abd8b16 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.4.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.9.bb
@@ -31,9 +31,10 @@
             file://0001-opcache-config.m4-enable-opcache.patch \
             file://xfail_two_bug_tests.patch \
           "
+
 S = "${WORKDIR}/php-${PV}"
-SRC_URI[md5sum] = "262c258a3b8b5699fcca89a64e58758c"
-SRC_URI[sha256sum] = "308e8f4182ec8a2767b0b1b8e1e7c69fb149b37cfb98ee4a37475e082fa9829f"
+SRC_URI[md5sum] = "e68a66c54b080d108831f6dc2e1e403d"
+SRC_URI[sha256sum] = "2e270958a4216480da7886743438ccc92b6acf32ea96fefda88d07e0a5095deb"
 
 inherit autotools pkgconfig python3native gettext
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.12.3.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.13.0.bb
similarity index 97%
rename from meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.12.3.bb
rename to meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.13.0.bb
index 21ad7a4..f2c5e2b 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.12.3.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.13.0.bb
@@ -10,7 +10,7 @@
 DEPENDS = "zlib"
 DEPENDS_append_class-target = " protobuf-native"
 
-SRCREV = "31ebe2ac71400344a5db91ffc13c4ddfb7589f92"
+SRCREV = "fde7cf7358ec7cd69e8db9be4f1fa6a5c431386a"
 
 SRC_URI = "git://github.com/protocolbuffers/protobuf.git \
            file://run-ptest \
diff --git a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0003-src-Makefile-Fix-Makefile-macro-error.patch b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0003-src-Makefile-Fix-Makefile-macro-error.patch
new file mode 100644
index 0000000..3d861fc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c/0003-src-Makefile-Fix-Makefile-macro-error.patch
@@ -0,0 +1,29 @@
+From ea4ca50ca9cab755f3722096158a46deec0e663a Mon Sep 17 00:00:00 2001
+From: Arthur She <arthur.she@linaro.org>
+Date: Tue, 25 Aug 2020 09:51:26 -0700
+Subject: [PATCH] src/Makefile: Fix Makefile macro error
+
+This error caused the curl library wouldn't be linked correctly.
+
+Upstream-Status: Pending
+Signed-off-by: Arthur She <arthur.she@linaro.org>
+---
+ src/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/Makefile b/src/Makefile
+index 1cdf8b0..acd04dd 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -57,7 +57,7 @@ ifeq ($(MUST_BUILD_CURL_CLIENT),yes)
+   TRANSPORT_MODS += $(BLDDIR)/lib/curl_transport/xmlrpc_curl_transport
+   TRANSPORT_MODS += $(BLDDIR)/lib/curl_transport/curltransaction
+   TRANSPORT_MODS += $(BLDDIR)/lib/curl_transport/curlmulti
+-  TRANSPORT_LIBDEP += $(shell $CURL_CONFIG --libs)
++  TRANSPORT_LIBDEP += $(shell $(CURL_CONFIG) --libs)
+   TRANSPORT_INCLUDES += -Isrcdir/lib/curl_transport
+ endif
+ ifeq ($(MUST_BUILD_LIBWWW_CLIENT),yes)
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.54.02.bb b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.54.02.bb
index c1f0b78..aba6dfd 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.54.02.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.54.02.bb
@@ -8,6 +8,7 @@
 SRC_URI = "git://github.com/mirror/xmlrpc-c.git \
            file://0001-test-cpp-server_abyss-Fix-build-with-clang-libc.patch \
            file://0002-fix-formatting-issues.patch \
+           file://0003-src-Makefile-Fix-Makefile-macro-error.patch \
            "
 
 #Release 1.54.02
diff --git a/meta-openembedded/meta-oe/recipes-extended/brotli/brotli/838.patch b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli/838.patch
new file mode 100644
index 0000000..98b8887
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli/838.patch
@@ -0,0 +1,48 @@
+Upstream-Status: Backport [https://github.com/google/brotli/pull/838]
+From 092446fafb4bfb81738853b7c7f76b293cd92a80 Mon Sep 17 00:00:00 2001
+From: Evgenii Kliuchnikov <eustas.ru@gmail.com>
+Date: Wed, 2 Sep 2020 10:49:49 +0200
+Subject: [PATCH] Revert "Add runtime linker path to pkg-config files (#740)"
+
+This reverts commit 31754d4ffce14153b5c2addf7a11019ec23f51c1.
+---
+ scripts/libbrotlicommon.pc.in | 2 +-
+ scripts/libbrotlidec.pc.in    | 2 +-
+ scripts/libbrotlienc.pc.in    | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/scripts/libbrotlicommon.pc.in b/scripts/libbrotlicommon.pc.in
+index 10ca969e..2a8cf7a3 100644
+--- a/scripts/libbrotlicommon.pc.in
++++ b/scripts/libbrotlicommon.pc.in
+@@ -7,5 +7,5 @@ Name: libbrotlicommon
+ URL: https://github.com/google/brotli
+ Description: Brotli common dictionary library
+ Version: @PACKAGE_VERSION@
+-Libs: -L${libdir} -R${libdir} -lbrotlicommon
++Libs: -L${libdir} -lbrotlicommon
+ Cflags: -I${includedir}
+diff --git a/scripts/libbrotlidec.pc.in b/scripts/libbrotlidec.pc.in
+index e7c3124f..6f8ef2e4 100644
+--- a/scripts/libbrotlidec.pc.in
++++ b/scripts/libbrotlidec.pc.in
+@@ -7,6 +7,6 @@ Name: libbrotlidec
+ URL: https://github.com/google/brotli
+ Description: Brotli decoder library
+ Version: @PACKAGE_VERSION@
+-Libs: -L${libdir} -R${libdir} -lbrotlidec
++Libs: -L${libdir} -lbrotlidec
+ Requires.private: libbrotlicommon >= 1.0.2
+ Cflags: -I${includedir}
+diff --git a/scripts/libbrotlienc.pc.in b/scripts/libbrotlienc.pc.in
+index 4dd0811b..2098afe2 100644
+--- a/scripts/libbrotlienc.pc.in
++++ b/scripts/libbrotlienc.pc.in
+@@ -7,6 +7,6 @@ Name: libbrotlienc
+ URL: https://github.com/google/brotli
+ Description: Brotli encoder library
+ Version: @PACKAGE_VERSION@
+-Libs: -L${libdir} -R${libdir} -lbrotlienc
++Libs: -L${libdir} -lbrotlienc
+ Requires.private: libbrotlicommon >= 1.0.2
+ Cflags: -I${includedir}
diff --git a/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.7.bb b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb
similarity index 80%
rename from meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.7.bb
rename to meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb
index 32f8558..0038ba7 100644
--- a/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.7.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb
@@ -6,9 +6,10 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=941ee9cd1609382f946352712a319b4b"
 
-SRC_URI = "git://github.com/google/brotli.git"
-# tag 1.0.7
-SRCREV= "d6d98957ca8ccb1ef45922e978bb10efca0ea541"
+SRC_URI = "git://github.com/google/brotli.git \
+           file://838.patch "
+# tag 1.0.9
+SRCREV= "e61745a6b7add50d380cfd7d3883dd6c62fc2c71"
 S = "${WORKDIR}/git"
 
 inherit cmake lib_package
diff --git a/meta-openembedded/meta-oe/recipes-extended/byacc/byacc.inc b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc.inc
index 5214715..cffa7f5 100644
--- a/meta-openembedded/meta-oe/recipes-extended/byacc/byacc.inc
+++ b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc.inc
@@ -12,7 +12,7 @@
 
 EXTRA_OECONF += "--program-transform-name='s,^,b,'"
 
-BBCLASSEXTEND = "native"
+BBCLASSEXTEND = "native nativesdk"
 
 inherit autotools
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.11.0.bb b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.12.0.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.11.0.bb
rename to meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.12.0.bb
index a70e82e..40a8442 100644
--- a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.11.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.12.0.bb
@@ -15,8 +15,8 @@
            file://0006-libcollectdclient-Fix-string-overflow-errors.patch \
            file://0001-Remove-including-sys-sysctl.h-on-glibc-based-systems.patch \
            "
-SRC_URI[md5sum] = "13b1c946f6684abe453e24b5cd80ec45"
-SRC_URI[sha256sum] = "37b10a806e34aa8570c1cafa6006c604796fae13cc2e1b3e630d33dcba9e5db2"
+SRC_URI[md5sum] = "2b23a65960bc323d065234776a542e04"
+SRC_URI[sha256sum] = "5bae043042c19c31f77eb8464e56a01a5454e0b39fa07cf7ad0f1bfc9c3a09d6"
 
 inherit autotools python3native update-rc.d pkgconfig systemd
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/238.patch b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/245.patch
similarity index 65%
rename from meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/238.patch
rename to meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/245.patch
index 14c44e6..4305748 100644
--- a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/238.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/245.patch
@@ -1,6 +1,6 @@
-From 214f8c71552fc096077f0b916dad75b31eefea3d Mon Sep 17 00:00:00 2001
+From 57fd61ea5c58a4f9fcd7140b53ac6cd6e971ef47 Mon Sep 17 00:00:00 2001
 From: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
-Date: Fri, 31 Jul 2020 15:26:35 +0200
+Date: Fri, 31 Jul 2020 15:16:02 +0200
 Subject: [PATCH] dlt_offline: fix build failures with gcc-10
 
 see bug report: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=957140
@@ -14,11 +14,26 @@
 /usr/bin/ld: CMakeFiles/dlt-daemon.dir/dlt_daemon_event_handler.c.o:./obj-x86_64-linux-gnu/src/daemon/./src/offlinelogstorage/dlt_offline_logstorage.h:116: multiple definition of `g_logstorage_cache_max'; CMakeFiles/dlt-daemon.dir/dlt-daemon.c.o:./obj-x86_64-linux-gnu/src/daemon/./src/offlinelogstorage/dlt_offline_logstorage.h:116: first defined here
 /usr/bin/ld: CMakeFiles/dlt-daemon.dir/dlt_daemon_offline_logstorage.c.o:./obj-x86_64-linux-gnu/src/daemon/./src/offlinelogstorage/dlt_offline_logstorage.h:116: multiple definition of `g_logstorage_cache_max'; CMakeFiles/dlt-daemon.dir/dlt-daemon.c.o:./obj-x86_64-linux-gnu/src/daemon/./src/offlinelogstorage/dlt_offline_logstorage.h:116: first defined here
 ---
- src/offlinelogstorage/dlt_offline_logstorage.h | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
+ src/daemon/dlt_daemon_offline_logstorage.c              | 1 +
+ src/offlinelogstorage/dlt_offline_logstorage.h          | 4 ++--
+ src/offlinelogstorage/dlt_offline_logstorage_behavior.c | 1 +
+ tests/gtest_dlt_daemon_offline_log.cpp                  | 1 +
+ 4 files changed, 5 insertions(+), 2 deletions(-)
 
+diff --git a/src/daemon/dlt_daemon_offline_logstorage.c b/src/daemon/dlt_daemon_offline_logstorage.c
+index 0b3c14f..db9637e 100644
+--- a/src/daemon/dlt_daemon_offline_logstorage.c
++++ b/src/daemon/dlt_daemon_offline_logstorage.c
+@@ -56,6 +56,7 @@ DLT_STATIC DltReturnValue dlt_logstorage_split_ecuid(char *key,
+     return DLT_RETURN_OK;
+ }
+ 
++unsigned int g_logstorage_cache_max;
+ /**
+  * dlt_logstorage_split_ctid
+  *
 diff --git a/src/offlinelogstorage/dlt_offline_logstorage.h b/src/offlinelogstorage/dlt_offline_logstorage.h
-index b58da70..8ad84b8 100644
+index b58da70..c9bc93b 100644
 --- a/src/offlinelogstorage/dlt_offline_logstorage.h
 +++ b/src/offlinelogstorage/dlt_offline_logstorage.h
 @@ -114,9 +114,9 @@
@@ -26,10 +41,34 @@
  
  /* logstorage max cache */
 -unsigned int g_logstorage_cache_max;
-+static unsigned int g_logstorage_cache_max;
++extern unsigned int g_logstorage_cache_max;
  /* current logstorage cache size */
 -unsigned int g_logstorage_cache_size;
-+static unsigned int g_logstorage_cache_size;
++extern unsigned int g_logstorage_cache_size;
  
  typedef struct
  {
+diff --git a/src/offlinelogstorage/dlt_offline_logstorage_behavior.c b/src/offlinelogstorage/dlt_offline_logstorage_behavior.c
+index afbf8c4..edef482 100644
+--- a/src/offlinelogstorage/dlt_offline_logstorage_behavior.c
++++ b/src/offlinelogstorage/dlt_offline_logstorage_behavior.c
+@@ -32,6 +32,7 @@
+ #include "dlt_offline_logstorage_behavior.h"
+ #include "dlt_offline_logstorage_behavior_internal.h"
+ 
++unsigned int g_logstorage_cache_size;
+ /**
+  * dlt_logstorage_log_file_name
+  *
+diff --git a/tests/gtest_dlt_daemon_offline_log.cpp b/tests/gtest_dlt_daemon_offline_log.cpp
+index b8965de..0bd4d5e 100644
+--- a/tests/gtest_dlt_daemon_offline_log.cpp
++++ b/tests/gtest_dlt_daemon_offline_log.cpp
+@@ -29,6 +29,7 @@ extern "C"
+ #include <fcntl.h>
+ }
+ 
++unsigned int g_logstorage_cache_max;
+ /* Begin Method: dlt_logstorage::t_dlt_logstorage_list_add*/
+ TEST(t_dlt_logstorage_list_add, normal)
+ {
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.5.bb b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.5.bb
index 3a2b405..f3fcee4 100644
--- a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.5.bb
@@ -17,8 +17,8 @@
 SRC_URI = "git://github.com/GENIVI/${BPN}.git;protocol=https \
     file://0002-Don-t-execute-processes-as-a-specific-user.patch \
     file://0004-Modify-systemd-config-directory.patch \
-    file://238.patch \
     file://241.patch \
+    file://245.patch \
 "
 SRCREV = "f1ac087c766827b1d0ed9c3a814b3cc052e948f2"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/hexedit/hexedit_1.4.2.bb b/meta-openembedded/meta-oe/recipes-extended/hexedit/hexedit_1.4.2.bb
index 050b7da..3e7fb2a 100644
--- a/meta-openembedded/meta-oe/recipes-extended/hexedit/hexedit_1.4.2.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/hexedit/hexedit_1.4.2.bb
@@ -13,4 +13,8 @@
 
 S = "${WORKDIR}/git"
 
-inherit autotools-brokensep
+inherit autotools-brokensep update-alternatives
+
+ALTERNATIVE_${PN} = "hexedit"
+ALTERNATIVE_LINK_NAME[hexedit] = "${bindir}/hexedit"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.19.12.bb b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.19.12.bb
index 883a6ff..457a974 100644
--- a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.19.12.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.19.12.bb
@@ -39,8 +39,8 @@
         --enable-foomatic-drv-install \
         --disable-foomatic-ppd-install \
         --disable-foomatic-rip-hplip-install \
-        --with-cupsbackenddir=${libdir}/cups/backend \
-        --with-cupsfilterdir=${libdir}/cups/filter \
+        --with-cupsbackenddir=${libexecdir}/cups/backend \
+        --with-cupsfilterdir=${libexecdir}/cups/filter \
 "
 
 EXTRA_OEMAKE = "rulessystemdir=${systemd_unitdir}/system/"
@@ -52,7 +52,7 @@
     sed -i -e "s|/usr/bin/python|/usr/bin/env python3|g" ${D}${datadir}/hplip/*.py
 }
 
-PACKAGES += "${PN}-ppd ${PN}-cups ${PN}-backend ${PN}-filter ${PN}-hal"
+PACKAGE_BEFORE_PN += "${PN}-ppd ${PN}-cups ${PN}-backend ${PN}-filter ${PN}-hal"
 
 RDEPENDS_${PN} += " \
         python3\
@@ -70,15 +70,15 @@
 
 # need to snag the debug file or OE will fail on backend package
 FILES_${PN}-dbg += "\
-        ${libdir}/cups/backend/.debug \
+        ${libexecdir}/cups/backend/.debug \
         ${PYTHON_SITEPACKAGES_DIR}/.debug \
-        ${libdir}/cups/filter/.debug "
+        ${libexecdir}/cups/filter/.debug "
 
 FILES_${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la"
 FILES_${PN}-ppd = "${datadir}/ppd"
 FILES_${PN}-cups = "${datadir}/cups"
-FILES_${PN}-backend = "${libdir}/cups/backend"
-FILES_${PN}-filter = "${libdir}/cups/filter"
+FILES_${PN}-backend = "${libexecdir}/cups/backend"
+FILES_${PN}-filter = "${libexecdir}/cups/filter"
 FILES_${PN}-hal = "${datadir}/hal"
 
 FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR}/*.so"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libcec/libcec/0001-Remove-buggy-test-confusing-host-and-target.patch b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec/0001-Remove-buggy-test-confusing-host-and-target.patch
new file mode 100644
index 0000000..7c29e15
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec/0001-Remove-buggy-test-confusing-host-and-target.patch
@@ -0,0 +1,31 @@
+From 8ce50bf569ec2d931735180079bbe507730626c8 Mon Sep 17 00:00:00 2001
+From: Yann Dirson <yann@blade-group.com>
+Date: Mon, 7 Sep 2020 18:17:21 +0200
+Subject: [PATCH] Remove buggy test confusing host and target
+
+---
+ src/libcec/cmake/CheckPlatformSupport.cmake | 8 --------
+ 1 file changed, 8 deletions(-)
+
+diff --git a/src/libcec/cmake/CheckPlatformSupport.cmake b/src/libcec/cmake/CheckPlatformSupport.cmake
+index 1d99bd8..31dac4f 100644
+--- a/src/libcec/cmake/CheckPlatformSupport.cmake
++++ b/src/libcec/cmake/CheckPlatformSupport.cmake
+@@ -266,14 +266,6 @@ else()
+                 DESTINATION python/cec)
+       endif()
+     else()
+-      if(EXISTS "/etc/os-release")
+-        file(READ "/etc/os-release" OS_RELEASE)
+-        string(REGEX MATCH "ID(_LIKE)?=debian" IS_DEBIAN ${OS_RELEASE})
+-        if (IS_DEBIAN)
+-          SET(PYTHON_PKG_DIR "dist-packages")
+-        endif()
+-      endif()
+-
+       if (NOT PYTHON_PKG_DIR)
+         SET(PYTHON_PKG_DIR "site-packages")
+       endif()
+-- 
+2.28.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_6.0.2.bb b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_6.0.2.bb
index 894ee52..48be1fd 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_6.0.2.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_6.0.2.bb
@@ -13,16 +13,22 @@
 SRC_URI = "git://github.com/Pulse-Eight/libcec.git;branch=release \
            file://0001-CheckPlatformSupport.cmake-Do-not-hardcode-lib-path.patch \
            file://0001-Enhance-reproducibility.patch \
+           file://0001-Remove-buggy-test-confusing-host-and-target.patch \
           "
 
 S = "${WORKDIR}/git"
 
 inherit cmake pkgconfig
 
-# Put client tools into a separate package
-PACKAGE_BEFORE_PN += "${PN}-tools"
-FILES_${PN}-tools = "${bindir}"
-RDEPENDS_${PN}-tools = "python3-${BPN} python3-core"
+# default config is for RaspberryPi API, use the Linux 4.10+ API by default
+PLATFORM_CMAKE_FLAGS ?= "-DHAVE_LINUX_API=1 -DHAVE_RPI_API=0"
+EXTRA_OECMAKE += "${PLATFORM_CMAKE_FLAGS}"
+
+# Put client examples into separate packages
+PACKAGE_BEFORE_PN += "${PN}-examples-python ${PN}-examples"
+FILES_${PN}-examples-python = "${bindir}/py*"
+FILES_${PN}-examples = "${bindir}"
+RDEPENDS_${PN}-examples-python = "python3-${BPN} python3-core"
 
 # Create the wrapper for python3
 PACKAGES += "python3-${BPN}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/0001-idn-format-security-warnings.patch b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/0001-idn-format-security-warnings.patch
index 5adc7d9..d5fb8e7 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/0001-idn-format-security-warnings.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/0001-idn-format-security-warnings.patch
@@ -1,6 +1,3 @@
-From 82f98dcbc429bbe89a9837c533cbcbc02e77c790 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <adraszik@tycoint.com>
-Date: Tue, 28 Jun 2016 12:43:31 +0100
 Subject: [PATCH] idn: fix printf() format security warnings
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
@@ -48,35 +45,37 @@
 |      ^
 
 Signed-off-by: André Draszik <adraszik@tycoint.com>
----
+Signed-off-by: Zang Ruochen <zangrc.fnst@cn.fujitsu.com>
+
 Upstream-Status: Pending
 
+---
  src/idn.c | 27 ++++++++++++++-------------
  1 file changed, 14 insertions(+), 13 deletions(-)
 
 diff --git a/src/idn.c b/src/idn.c
-index be1c7d1..68e4291 100644
+index f2fee11..c6e5caa 100644
 --- a/src/idn.c
 +++ b/src/idn.c
-@@ -170,7 +170,7 @@ main (int argc, char *argv[])
+@@ -169,7 +169,7 @@ main (int argc, char *argv[])
        (args_info.idna_to_unicode_given ? 1 : 0) +
        (args_info.nfkc_given ? 1 : 0) != 1)
      {
--      error (0, 0, _("only one of -s, -e, -d, -a, -u or -n can be specified"));
-+      error (0, 0, "%s", _("only one of -s, -e, -d, -a, -u or -n can be specified"));
+-      error (0, 0,
++      error (0, 0, "%s",
+ 	     _("only one of -s, -e, -d, -a, -u or -n can be specified"));
        usage (EXIT_FAILURE);
      }
+@@ -183,7 +183,7 @@ main (int argc, char *argv[])
  
-@@ -185,7 +185,7 @@ main (int argc, char *argv[])
    if (!args_info.quiet_given
-       && args_info.inputs_num == 0
-       && isatty (fileno (stdin)))
+       && args_info.inputs_num == 0 && isatty (fileno (stdin)))
 -    fprintf (stderr, _("Type each input string on a line by itself, "
 +    fprintf (stderr, "%s", _("Type each input string on a line by itself, "
  		       "terminated by a newline character.\n"));
  
    do
-@@ -197,7 +197,7 @@ main (int argc, char *argv[])
+@@ -195,7 +195,7 @@ main (int argc, char *argv[])
  	  if (feof (stdin))
  	    break;
  
@@ -85,7 +84,7 @@
  	}
  
        if (strlen (line) > 0)
-@@ -215,7 +215,7 @@ main (int argc, char *argv[])
+@@ -213,7 +213,7 @@ main (int argc, char *argv[])
  	  if (!q)
  	    {
  	      free (p);
@@ -94,7 +93,7 @@
  		     _("could not convert from UTF-8 to UCS-4"));
  	    }
  
-@@ -240,7 +240,7 @@ main (int argc, char *argv[])
+@@ -238,7 +238,7 @@ main (int argc, char *argv[])
  	  if (!q)
  	    {
  	      free (r);
@@ -103,7 +102,7 @@
  		     _("could not convert from UTF-8 to UCS-4"));
  	    }
  
-@@ -277,7 +277,7 @@ main (int argc, char *argv[])
+@@ -275,7 +275,7 @@ main (int argc, char *argv[])
  	  q = stringprep_utf8_to_ucs4 (p, -1, &len);
  	  free (p);
  	  if (!q)
@@ -112,7 +111,7 @@
  		   _("could not convert from UTF-8 to UCS-4"));
  
  	  if (args_info.debug_given)
-@@ -336,7 +336,7 @@ main (int argc, char *argv[])
+@@ -334,7 +334,7 @@ main (int argc, char *argv[])
  	  r = stringprep_ucs4_to_utf8 (q, -1, NULL, NULL);
  	  free (q);
  	  if (!r)
@@ -121,7 +120,7 @@
  		   _("could not convert from UCS-4 to UTF-8"));
  
  	  p = stringprep_utf8_to_locale (r);
-@@ -360,7 +360,7 @@ main (int argc, char *argv[])
+@@ -358,7 +358,7 @@ main (int argc, char *argv[])
  	  q = stringprep_utf8_to_ucs4 (p, -1, NULL);
  	  free (p);
  	  if (!q)
@@ -130,7 +129,7 @@
  		   _("could not convert from UCS-4 to UTF-8"));
  
  	  if (args_info.debug_given)
-@@ -438,7 +438,7 @@ main (int argc, char *argv[])
+@@ -436,7 +436,7 @@ main (int argc, char *argv[])
  	  if (!q)
  	    {
  	      free (p);
@@ -139,7 +138,7 @@
  		     _("could not convert from UCS-4 to UTF-8"));
  	    }
  
-@@ -494,7 +494,7 @@ main (int argc, char *argv[])
+@@ -492,7 +492,7 @@ main (int argc, char *argv[])
  	  r = stringprep_ucs4_to_utf8 (q, -1, NULL, NULL);
  	  free (q);
  	  if (!r)
@@ -148,7 +147,7 @@
  		   _("could not convert from UTF-8 to UCS-4"));
  
  	  p = stringprep_utf8_to_locale (r);
-@@ -523,7 +523,7 @@ main (int argc, char *argv[])
+@@ -521,7 +521,7 @@ main (int argc, char *argv[])
  	      if (!q)
  		{
  		  free (p);
@@ -157,7 +156,7 @@
  			 _("could not convert from UTF-8 to UCS-4"));
  		}
  
-@@ -537,7 +537,8 @@ main (int argc, char *argv[])
+@@ -535,7 +535,8 @@ main (int argc, char *argv[])
  	  r = stringprep_utf8_nfkc_normalize (p, -1);
  	  free (p);
  	  if (!r)
@@ -167,7 +166,7 @@
  
  	  if (args_info.debug_given)
  	    {
-@@ -547,7 +548,7 @@ main (int argc, char *argv[])
+@@ -545,7 +546,7 @@ main (int argc, char *argv[])
  	      if (!q)
  		{
  		  free (r);
@@ -177,5 +176,5 @@
  		}
  
 -- 
-2.8.1
+2.25.1
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/libidn/libidn_1.35.bb b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn_1.36.bb
similarity index 80%
rename from meta-openembedded/meta-oe/recipes-extended/libidn/libidn_1.35.bb
rename to meta-openembedded/meta-oe/recipes-extended/libidn/libidn_1.36.bb
index 1057403..4c6c8fd 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libidn/libidn_1.35.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn_1.36.bb
@@ -8,8 +8,8 @@
                     file://COPYING.LESSERv3;md5=e6a600fd5e1d9cbde2d983680233ad02 \
                     file://COPYINGv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://COPYINGv3;md5=d32239bcb673463ab874e80d47fae504 \
-                    file://lib/idna.h;endline=21;md5=37cffad24807f446a24de3e7371f20b9 \
-                    file://src/idn.c;endline=20;md5=09e97034a8877b3451cb65065fc2c06e"
+                    file://lib/idna.h;endline=21;md5=c381d797e2d7fbdace7c147b1285d076 \
+                    file://src/idn.c;endline=20;md5=7d88aa87b0494d690bdf7748fe08d536"
 DEPENDS = "virtual/libiconv autoconf-archive"
 
 inherit pkgconfig autotools gettext texinfo gtk-doc
@@ -19,8 +19,8 @@
            file://0001-idn-format-security-warnings.patch \
            "
 
-SRC_URI[md5sum] = "bef634141fe39326cb354b75e891fead"
-SRC_URI[sha256sum] = "f11af1005b46b7b15d057d7f107315a1ad46935c7fcdf243c16e46ec14f0fe1e"
+SRC_URI[md5sum] = "813c7b268d1051ca02c3610986126f38"
+SRC_URI[sha256sum] = "14b67108344d81ba844631640df77c9071d9fb0659b080326ff5424e86b14038"
 
 # command tool is under GPLv3+, while libidn itself is under LGPLv2.1+ or LGPLv3
 # so package command into a separate package
diff --git a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.5.bb b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.6.bb
similarity index 98%
rename from meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.5.bb
rename to meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.6.bb
index 7527298..1e22d3a 100644
--- a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.6.bb
@@ -25,7 +25,7 @@
     gitsm://github.com/ostreedev/ostree \
     file://run-ptest \
 "
-SRCREV = "63797cb750b4b2a05c5143613d89de9df99df9df"
+SRCREV = "5d2183f63ef5ecf0e6e555c3214dd3fc17a8e5a1"
 
 UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+\.\d+)"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/properties-cpp/properties-cpp_git.bb b/meta-openembedded/meta-oe/recipes-extended/properties-cpp/properties-cpp_git.bb
new file mode 100644
index 0000000..5db38ac
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/properties-cpp/properties-cpp_git.bb
@@ -0,0 +1,22 @@
+# Copyright (c) 2019 Christophe Chapuis <chris.chapuis@gmail.com>
+# Copyright (c) 2019 Herman van Hazendonk <github.com@herrie.org>
+
+SUMMARY = "A very simple convenience library for handling properties and signals in C++11."
+SECTION = "libs"
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+PV = "0.0.1+git${SRCPV}"
+
+SRCREV = "45863e849b39c4921d6553e6d27e267a96ac7d77"
+SRC_URI = "git://github.com/lib-cpp/${BPN}.git"
+
+S = "${WORKDIR}/git"
+
+do_configure_prepend() {
+    echo " " > ${S}/tests/CMakeLists.txt
+}
+
+inherit cmake pkgconfig
+
+RDEPENDS_${PN}-dev = ""
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis_6.0.6.bb b/meta-openembedded/meta-oe/recipes-extended/redis/redis_6.0.7.bb
similarity index 93%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis_6.0.6.bb
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis_6.0.7.bb
index c9846c5..791e41e 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis_6.0.6.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis_6.0.7.bb
@@ -17,8 +17,8 @@
            file://GNU_SOURCE.patch \
            "
 
-SRC_URI[md5sum] = "2f65e1f5610d98dd48e10eef49c79b02"
-SRC_URI[sha256sum] = "12ad49b163af5ef39466e8d2f7d212a58172116e5b441eebecb4e6ca22363d94"
+SRC_URI[md5sum] = "ac57b7188b771bbc08e8d7d6dddb3a80"
+SRC_URI[sha256sum] = "c2aaa1a4c7e72c70adedf976fdd5e1d34d395989283dab9d7840e0a304bb2393"
 
 inherit autotools-brokensep update-rc.d systemd useradd
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.2006.0.bb b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.2006.0.bb
index 524cd9e..b6c2a99 100644
--- a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.2006.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.2006.0.bb
@@ -76,7 +76,7 @@
 PACKAGECONFIG[postgresql] = "--enable-pgsql,--disable-pgsql,postgresql,"
 PACKAGECONFIG[libdbi] = "--enable-libdbi,--disable-libdbi,libdbi,"
 PACKAGECONFIG[mail] = "--enable-mail,--disable-mail,,"
-PACKAGECONFIG[valgrind] = "--enable-valgrind,--disable-valgrind,valgrind,"
+PACKAGECONFIG[valgrind] = ",--without-valgrind-testbench,valgrind,"
 
 do_configure_prepend() {
     sed -i -e 's|python |python3 |g' ${S}/tests/*.sh
@@ -106,12 +106,6 @@
     # fix the abs_top_builddir
     sed -i 's,^\(abs_top_builddir = \).*,\1${PTEST_PATH}/,' ${D}${PTEST_PATH}/${TESTDIR}/Makefile
 
-    # valgrind is not compatible with arm and mips,
-    # so remove related test cases if there is no valgrind.
-    if [ x${VALGRIND} = x ]; then
-        sed -i '/udp-msgreduc-/d' ${D}${PTEST_PATH}/${TESTDIR}/Makefile
-    fi
-
     # install test-driver
     install -m 644 ${S}/test-driver ${D}${PTEST_PATH}
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/sanlock/sanlock_3.8.1.bb b/meta-openembedded/meta-oe/recipes-extended/sanlock/sanlock_3.8.2.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-extended/sanlock/sanlock_3.8.1.bb
rename to meta-openembedded/meta-oe/recipes-extended/sanlock/sanlock_3.8.2.bb
index abae362..6f3685c 100644
--- a/meta-openembedded/meta-oe/recipes-extended/sanlock/sanlock_3.8.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/sanlock/sanlock_3.8.2.bb
@@ -16,7 +16,7 @@
 SRC_URI = "git://pagure.io/sanlock.git;protocol=http \
            file://0001-sanlock-Replace-cp-a-with-cp-R-no-dereference-preser.patch;patchdir=../ \
           "
-SRCREV = "07ab65afb10c8f8c008880a73b7b7aaedbde0e15"
+SRCREV = "01b727adf1ce3c0ed5b95299d60f62bc66d98eb5"
 
 S = "${WORKDIR}/git/python"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb_1.4.9.bb b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb_1.4.9.bb
index 3e4ed7c..9a3a66c 100644
--- a/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb_1.4.9.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/sblim-sfcb/sblim-sfcb_1.4.9.bb
@@ -69,10 +69,10 @@
 }
 
 pkg_postinst_${PN} () {
-    if [ x"$D" != "x" ]; then
-        $INTERCEPT_DIR/postinst_intercept delay_to_first_boot ${PKG} mlprefix=${MLPREFIX}
-    fi
+    $INTERCEPT_DIR/postinst_intercept delay_to_first_boot ${PKG} mlprefix=${MLPREFIX}
+}
 
+pkg_postinst_ontarget_${PN} () {
     ${datadir}/sfcb/genSslCert.sh ${sysconfdir}/sfcb
     ${bindir}/sfcbrepos -f
 }
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
index 5193688..e3ad04f 100644
--- a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
@@ -12,4 +12,8 @@
 
 S = "${WORKDIR}/git"
 
-inherit autotools pkgconfig
+inherit autotools pkgconfig update-alternatives
+
+ALTERNATIVE_${PN} = "candump cansend"
+ALTERNATIVE_LINK_NAME[candump] = "${bindir}/candump"
+ALTERNATIVE_LINK_NAME[cansend] = "${bindir}/cansend"
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils_4.0.6.bb b/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils_4.0.6.bb
index e1508af..aaa2653 100644
--- a/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils_4.0.6.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/canutils_4.0.6.bb
@@ -12,9 +12,16 @@
     file://0001-canutils-candump-Add-error-frame-s-handling.patch \
 "
 
+inherit update-alternatives
+
 S = "${WORKDIR}/git"
 
 inherit autotools pkgconfig
 
 # Busybox ip doesn't support can interface configuration, use the real thing
 RDEPENDS_${PN} += "iproute2"
+
+ALTERNATIVE_PRIORITY = "90"
+ALTERNATIVE_${PN} = "candump cansend"
+ALTERNATIVE_LINK_NAME[candump] = "${bindir}/candump"
+ALTERNATIVE_LINK_NAME[cansend] = "${bindir}/cansend"
diff --git a/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_3.1b.bb b/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_3.1b.bb
index fde0ed4..f5078e9 100644
--- a/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_3.1b.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_3.1b.bb
@@ -21,5 +21,5 @@
 do_configure_prepend() {
     # The 'compat' directory is needed for output during the build but it's
     # not automatically created when building outside the source directory.
-    mkdir ${B}/compat
+    mkdir -p ${B}/compat
 }
diff --git a/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities_20040406.bb b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities_20040406.bb
index ed19d1e..8e00cb3 100644
--- a/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities_20040406.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/uml-utilities/uml-utilities_20040406.bb
@@ -15,6 +15,8 @@
 
 S = "${WORKDIR}/tools"
 
+inherit update-alternatives
+
 do_compile() {
     oe_runmake
 }
@@ -25,3 +27,6 @@
 
 FILES_${PN} += "${exec_prefix}${nonarch_base_libdir}"
 FILES_${PN}-dbg += "${exec_prefix}${nonarch_base_libdir}/uml/.debug"
+
+ALTERNATIVE_${PN} = "tunctl"
+ALTERNATIVE_LINK_NAME[tunctl] = "${bindir}/tunctl"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fbida/fbida_2.14.bb b/meta-openembedded/meta-oe/recipes-graphics/fbida/fbida_2.14.bb
index 29d0f64..7ac3028 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/fbida/fbida_2.14.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/fbida/fbida_2.14.bb
@@ -19,7 +19,10 @@
 	   "
 SRC_URI[sha256sum] = "95b7c01556cb6ef9819f358b314ddfeb8a4cbe862b521a3ed62f03d163154438"
 
-inherit pkgconfig
+inherit pkgconfig features_check
+
+# Depends on libepoxy
+REQUIRED_DISTRO_FEATURES = "opengl"
 
 EXTRA_OEMAKE = "STRIP= 'srcdir=${S}' -f ${S}/GNUmakefile"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_2.0.19.bb b/meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_2.0.20.bb
similarity index 76%
rename from meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_2.0.19.bb
rename to meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_2.0.20.bb
index e121ae9..356c78c 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_2.0.19.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/jasper/jasper_2.0.20.bb
@@ -1,10 +1,10 @@
 SUMMARY = "Jpeg 2000 implementation"
-HOMEPAGE = "https://github.com/mdadams/jasper"
+HOMEPAGE = "https://github.com/jasper-software/jasper"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=a80440d1d8f17d041c71c7271d6e06eb"
 
-SRC_URI = "git://github.com/mdadams/jasper.git;protocol=https"
-SRCREV = "7d8cfd8ac16d1af9b51e5ccd781e898f0fbf57cc"
+SRC_URI = "git://github.com/jasper-software/jasper.git;protocol=https"
+SRCREV = "d10a710f31da3d079a984d35ff6cc82a853d25d7"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.79.0.bb b/meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.80.0.bb
similarity index 72%
rename from meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.79.0.bb
rename to meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.80.0.bb
index a6de1f7..a861bba 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.79.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/leptonica/leptonica_1.80.0.bb
@@ -1,13 +1,13 @@
 DESCRIPTION = "A pedagogically-oriented open source site containing software that is broadly useful for image processing and image analysis applications"
 DEPENDS = "jpeg tiff libpng zlib"
 LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://leptonica-license.txt;md5=34aa579294e8284b7b848c8d5d361e8f"
+LIC_FILES_CHKSUM = "file://leptonica-license.txt;md5=809b282cea2df68975fbe0ffe02b560f"
 
 UPSTREAM_CHECK_URI = "https://github.com/DanBloomberg/leptonica/releases"
 
 SRC_URI = "http://www.leptonica.org/source/leptonica-${PV}.tar.gz"
-SRC_URI[md5sum] = "a545654b1dae7d29e2ea346b29095f84"
-SRC_URI[sha256sum] = "045966c9c5d60ebded314a9931007a56d9d2f7a6ac39cb5cc077c816f62300d8"
+SRC_URI[md5sum] = "d640d684234442a84c9e8902f0b3ff36"
+SRC_URI[sha256sum] = "ec9c46c2aefbb960fb6a6b7f800fe39de48343437b6ce08e30a8d9688ed14ba4"
 
 EXTRA_OECONF += " \
     --without-libwebp \
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg/CVE-2020-15389.patch b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg/CVE-2020-15389.patch
new file mode 100644
index 0000000..f5ce11a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg/CVE-2020-15389.patch
@@ -0,0 +1,51 @@
+From e8e258ab049240c2dd1f1051b4e773b21e2d3dc0 Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Sun, 28 Jun 2020 14:19:59 +0200
+Subject: [PATCH] opj_decompress: fix double-free on input directory with mix
+ of valid and invalid images (CVE-2020-15389)
+
+Fixes #1261
+
+Credits to @Ruia-ruia for reporting and analysis.
+---
+ src/bin/jp2/opj_decompress.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+ 
+--- end of original header ---
+
+CVE: CVE-2020-15389
+
+Upstream-Status: Backport [git://github.com/uclouvain/openjpeg.git]
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+---
+diff --git a/src/bin/jp2/opj_decompress.c b/src/bin/jp2/opj_decompress.c
+index 7eeb0952..2634907f 100644
+--- a/src/bin/jp2/opj_decompress.c
++++ b/src/bin/jp2/opj_decompress.c
+@@ -1316,10 +1316,6 @@ static opj_image_t* upsample_image_components(opj_image_t* original)
+ int main(int argc, char **argv)
+ {
+     opj_decompress_parameters parameters;           /* decompression parameters */
+-    opj_image_t* image = NULL;
+-    opj_stream_t *l_stream = NULL;              /* Stream */
+-    opj_codec_t* l_codec = NULL;                /* Handle to a decompressor */
+-    opj_codestream_index_t* cstr_index = NULL;
+ 
+     OPJ_INT32 num_images, imageno;
+     img_fol_t img_fol;
+@@ -1393,6 +1389,10 @@ int main(int argc, char **argv)
+ 
+     /*Decoding image one by one*/
+     for (imageno = 0; imageno < num_images ; imageno++)  {
++        opj_image_t* image = NULL;
++        opj_stream_t *l_stream = NULL;              /* Stream */
++        opj_codec_t* l_codec = NULL;                /* Handle to a decompressor */
++        opj_codestream_index_t* cstr_index = NULL;
+ 
+         if (!parameters.quiet) {
+             fprintf(stderr, "\n");
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.3.1.bb b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.3.1.bb
index 42011ef..a0740a2 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.3.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.3.1.bb
@@ -10,6 +10,7 @@
     file://0002-Do-not-ask-cmake-to-export-binaries-they-don-t-make-.patch \
     file://CVE-2020-6851.patch \
     file://CVE-2020-8112.patch \
+    file://CVE-2020-15389.patch \
 "
 SRCREV = "57096325457f96d8cd07bd3af04fe81d7a2ba788"
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/suckless/st_0.8.4.bb b/meta-openembedded/meta-oe/recipes-graphics/suckless/st_0.8.4.bb
new file mode 100644
index 0000000..9061795
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/suckless/st_0.8.4.bb
@@ -0,0 +1,25 @@
+SECTION = "shadow"
+LICENSE = "MIT-X"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=04c3ca13a702147c62db90f556c5b3ca"
+SRC_URI = "http://dl.suckless.org/${BPN}/${BP}.tar.gz"
+
+inherit pkgconfig features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[sha256sum] = "d42d3ceceb4d6a65e32e90a5336e3d446db612c3fbd9ebc1780bc6c9a03346a6"
+
+DEPENDS += "libx11 libxft fontconfig ncurses-native"
+
+RDEPENDS_${PN} += "libx11-locale"
+
+do_compile() {
+    make INCS='-I. `pkg-config --cflags x11 fontconfig xft`' LIBS='-lm -lutil `pkg-config --libs x11 fontconfig xft`'
+}
+do_install() {
+    make install DESTDIR=${D} PREFIX=/usr TERMINFO=${D}${datadir}/terminfo
+}
+
+FILES_${PN} += " \
+    ${datadir}/terminfo \
+"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract/0001-include-sys-time.h.patch b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract/0001-include-sys-time.h.patch
new file mode 100644
index 0000000..de1fa75
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract/0001-include-sys-time.h.patch
@@ -0,0 +1,34 @@
+From b47fa9532a7090d76521603dbc818bdec100085f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 15 Sep 2020 17:04:27 -0700
+Subject: [PATCH] include sys/time.h
+
+This provides missing definitions of timeval stuct
+
+Fixes
+| ../../../git/src/ccutil/ocrclass.h:154:7: error: member access into
+incomplete type 'struct timeval'
+|     tv->tv_usec = (millisecs.count() % 1000) * 1000;
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/ccutil/ocrclass.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/ccutil/ocrclass.h b/src/ccutil/ocrclass.h
+index d39a6dd6..96395c9b 100644
+--- a/src/ccutil/ocrclass.h
++++ b/src/ccutil/ocrclass.h
+@@ -28,6 +28,8 @@
+ 
+ #include <chrono>
+ #include <ctime>
++#include <sys/time.h>
++
+ #ifdef _WIN32
+ #include <winsock2.h> // for timeval
+ #endif
+-- 
+2.28.0
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_4.1.1.bb b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_4.1.1.bb
new file mode 100644
index 0000000..3b5032f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_4.1.1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "A commercial quality OCR engine "
+HOMEPAGE = "https://github.com/tesseract-ocr/tesseract"
+BUGTRACKER = "https://github.com/tesseract-ocr/tesseract/issues"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+BRANCH = "4.1"
+SRCREV = "f4ef2f2050f4c25b28bdbf0063b7d2eb30f41cf7"
+SRC_URI = "git://github.com/${BPN}-ocr/${BPN}.git;branch=${BRANCH} \
+           file://0001-include-sys-time.h.patch \
+          "
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "leptonica"
+
+EXTRA_OECONF += "LIBLEPT_HEADERSDIR=${STAGING_INCDIR}/leptonica"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/tessdata"
+
+RRECOMMENDS_${PN} += "tesseract-lang-eng"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_git.bb b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_git.bb
deleted file mode 100644
index 89d09a0..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_git.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "A commercial quality OCR engine "
-
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=7ea4f9a43aba9d3c849fe5c203a0ed40"
-
-BRANCH = "3.05"
-PV = "${BRANCH}.01+git${SRCPV}"
-SRCREV = "215866151e774972c9502282111b998d7a053562"
-SRC_URI = "git://github.com/${BPN}-ocr/${BPN}.git;branch=${BRANCH}"
-S = "${WORKDIR}/git"
-
-DEPENDS = "leptonica"
-
-EXTRA_OECONF += "LIBLEPT_HEADERSDIR=${STAGING_INCDIR}/leptonica"
-
-
-inherit autotools pkgconfig
-
-FILES_${PN} += "${datadir}/tessdata"
-
-RRECOMMENDS_${PN} += "tesseract-lang-eng"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-code-pro-fonts/44-source-code-pro-fonts-fontconfig.conf b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-code-pro-fonts/44-source-code-pro-fonts-fontconfig.conf
new file mode 100644
index 0000000..badb1b0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-code-pro-fonts/44-source-code-pro-fonts-fontconfig.conf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+  <alias>
+    <family>monospace</family>
+    <prefer>
+      <family>Source Code Pro</family>
+    </prefer>
+  </alias>
+  <alias>
+    <family>Source Code Pro</family>
+    <default>
+      <family>monospace</family>
+    </default>
+  </alias>
+</fontconfig>
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-code-pro-fonts_2.030_1.050.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-code-pro-fonts_2.030_1.050.bb
new file mode 100644
index 0000000..5d10195
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/source-code-pro-fonts_2.030_1.050.bb
@@ -0,0 +1,29 @@
+require ttf.inc
+
+SUMMARY = "Adobe Source Code Pro"
+HOMEPAGE = "https://github.com/adobe-fonts/source-code-pro"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c7c16bdc2c96af797293d68503e5c65c"
+
+inherit allarch fontcache
+
+SRC_URI = " \
+    https://github.com/adobe-fonts/source-code-pro/releases/download/2.030R-ro/1.050R-it/source-code-pro-2.030R-ro-1.050R-it.zip \
+    file://44-source-code-pro-fonts-fontconfig.conf \
+"
+SRC_URI[sha256sum] = "da2ac159497d31b0c6d9daa8fc390fb8252e75b4a9805ace6a2c9cccaed4932e"
+S = "${WORKDIR}/source-code-pro-2.030R-ro-1.050R-it"
+
+do_install() {
+    install -d ${D}${sysconfdir}/fonts/conf.d/
+    install -m 0644 ${WORKDIR}/44-source-code-pro-fonts-fontconfig.conf ${D}${sysconfdir}/fonts/conf.d/
+
+    install -d ${D}${datadir}/fonts/truetype/
+    find ./ -name '*.otf' -exec install -m 0644 {} ${D}${datadir}/fonts/truetype/ \;
+}
+
+FILES_${PN} = " \
+    ${sysconfdir}/fonts \
+    ${datadir}/fonts \
+"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow_1.07.4.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow_1.07.4.bb
index 5b406bc..57efea8 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow_1.07.4.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-liberation-sans-narrow_1.07.4.bb
@@ -24,6 +24,8 @@
     install -m 0644 LiberationSansNarrow*.ttf ${D}${datadir}/fonts/TTF/
     install -D -m 0644 ${WORKDIR}/30-0-liberation-sans-narrow.conf ${D}${sysconfdir}/conf.avail/30-${PN}-sans.conf
     install -D -m 0644 ${S}/License.txt ${D}${datadir}/licenses/${PN}/LICENSE
+    # normal liberation fonts come from ttf-liberation recipe so delete here
+    rm -rf ${D}${datadir}/fonts/truetype
 }
 
 PACKAGES = "${PN}"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/khronos-cts.inc b/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/khronos-cts.inc
index 4a297c3..e64a935 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/khronos-cts.inc
+++ b/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/khronos-cts.inc
@@ -2,7 +2,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
 SRC_URI = "\
-	git://github.com/KhronosGroup/VK-GL-CTS.git;protocol=https;tag=${BPN}-${PV};name=vk-gl-cts \
+	git://github.com/KhronosGroup/VK-GL-CTS.git;protocol=https;name=vk-gl-cts;nobranch=1 \
 	git://github.com/google/amber;protocol=https;destsuffix=git/external/amber/src;name=amber;branch=main \
 	git://github.com/KhronosGroup/glslang.git;protocol=https;destsuffix=git/external/glslang/src;name=glslang \
 	git://github.com/KhronosGroup/SPIRV-Headers.git;protocol=https;destsuffix=git/external/spirv-headers/src;name=spirv-headers \
@@ -12,7 +12,7 @@
 
 S = "${WORKDIR}/git"
 
-SRCREV_FORMAT = "vk-gl-cts"
+SRCREV_FORMAT = "vk-gl-cts_amber_glslang_spirv-headers_spirv-tools"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/opengl-es-cts_3.2.6.1.bb b/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/opengl-es-cts_3.2.6.1.bb
index 0e50fd9..5e0076b 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/opengl-es-cts_3.2.6.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/opengl-es-cts_3.2.6.1.bb
@@ -1,7 +1,8 @@
 DESCRIPTION = "OpenGL CTS"
 
 require khronos-cts.inc
-
+# opengl-es-cts-3.2.6.1
+SRCREV_vk-gl-cts = "7e023f81b4fff54b558882fe739d7c959d0a02a8"
 SRCREV_amber = "d26ee22dd7faab1845a531d410f7ec1db407402a"
 SRCREV_glslang = "c538b5d796fb24dd418fdd650c7f76e56bcc3dd8"
 SRCREV_spirv-headers = "e4322e3be589e1ddd44afb20ea842a977c1319b8"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/vulkan-cts_1.2.3.0.bb b/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/vulkan-cts_1.2.3.2.bb
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/vulkan-cts_1.2.3.0.bb
rename to meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/vulkan-cts_1.2.3.2.bb
index 77064d4..f07b12d 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/vulkan-cts_1.2.3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/vk-gl-cts/vulkan-cts_1.2.3.2.bb
@@ -1,7 +1,8 @@
 DESCRIPTION = "Vulkan CTS"
 
 require khronos-cts.inc
-
+# vulkan-cts-1.2.3.2
+SRCREV_vk-gl-cts = "5cd2240b60825fbbf6bd9ddda6af176ee3100c70"
 SRCREV_amber = "a40bef4dba98d2d80b48e5a940d8574fbfceb197"
 SRCREV_glslang = "b5f003d7a3ece37db45578a8a3140b370036fc64"
 SRCREV_spirv-headers = "f8bf11a0253a32375c32cad92c841237b96696c0"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xscreensaver/xscreensaver_5.44.bb b/meta-openembedded/meta-oe/recipes-graphics/xscreensaver/xscreensaver_5.44.bb
index 6cad97f..9131c75 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xscreensaver/xscreensaver_5.44.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xscreensaver/xscreensaver_5.44.bb
@@ -1,5 +1,5 @@
 SUMMARY = "X screen saver and locker"
-
+HOMEPAGE = "https://www.jwz.org/xscreensaver/"
 LICENSE = "BSD-0-Clause"
 LIC_FILES_CHKSUM = "file://driver/xscreensaver.h;endline=10;md5=2b97002f72fbfc9329b4336e798f2463"
 
diff --git a/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb b/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb
index 3687c26..2b5ebcc 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb
@@ -20,15 +20,16 @@
 # if you have older kernel than that you need to remove it from PACKAGECONFIG
 PACKAGECONFIG ??= "bpf firmware vm"
 PACKAGECONFIG_remove_x86 = "bpf"
-PACKAGECONFIG_remove_arm = "bpf"
+PACKAGECONFIG_remove_arm = "bpf vm"
 # host ptrace.h is used to compile BPF target but mips ptrace.h is needed
 # progs/loop1.c:21:9: error: incomplete definition of type 'struct user_pt_regs'
 # m = PT_REGS_RC(ctx);
-PACKAGECONFIG_remove_qemumips = "bpf"
+# vm tests need libhugetlbfs starting 5.8+ (https://lkml.org/lkml/2020/4/22/1654)
+PACKAGECONFIG_remove_qemumips = "bpf vm"
 
 PACKAGECONFIG[bpf] = ",,elfutils libcap libcap-ng rsync-native,"
 PACKAGECONFIG[firmware] = ",,libcap, bash"
-PACKAGECONFIG[vm] = ",,libcap,libgcc bash"
+PACKAGECONFIG[vm] = ",,libcap libhugetlbfs,libgcc bash"
 
 do_patch[depends] += "virtual/kernel:do_shared_workdir"
 
@@ -49,10 +50,13 @@
     AR="${AR}" \
     LD="${LD}" \
     DESTDIR="${D}" \
+    MACHINE="${ARCH}" \
 '
 
 KERNEL_SELFTEST_SRC ?= "Makefile \
                         include \
+                        kernel \
+                        lib \
                         tools \
                         scripts \
                         arch \
diff --git a/meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.11.1.bb b/meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.11.2.bb
similarity index 84%
rename from meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.11.1.bb
rename to meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.11.2.bb
index c691400..f59e6d1 100644
--- a/meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.11.1.bb
+++ b/meta-openembedded/meta-oe/recipes-shells/dash/dash_0.5.11.2.bb
@@ -8,8 +8,8 @@
 inherit autotools update-alternatives
 
 SRC_URI = "http://gondor.apana.org.au/~herbert/${BPN}/files/${BP}.tar.gz"
-SRC_URI[md5sum] = "df978fd0324f60a6ff45f686fe269fdc"
-SRC_URI[sha256sum] = "73c881f146e329ac54962766760fd62cb8bdff376cd6c2f5772eecc1570e1611"
+SRC_URI[md5sum] = "b9b71c72e40fdc4db9b4ffb81fc3bebc"
+SRC_URI[sha256sum] = "00fb7d68b7599cc41ab151051c06c01e9500540183d8aa72116cb9c742bd6d5f"
 
 EXTRA_OECONF += "--bindir=${base_bindir}"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/asio/asio_1.16.1.bb b/meta-openembedded/meta-oe/recipes-support/asio/asio_1.18.0.bb
similarity index 73%
rename from meta-openembedded/meta-oe/recipes-support/asio/asio_1.16.1.bb
rename to meta-openembedded/meta-oe/recipes-support/asio/asio_1.18.0.bb
index f381d12..7709075 100644
--- a/meta-openembedded/meta-oe/recipes-support/asio/asio_1.16.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/asio/asio_1.18.0.bb
@@ -17,11 +17,13 @@
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=de86c8210a433f72bd3cc98e797a6084"
 
-SRC_URI[md5sum] = "569f4b082c652ae8a8ad94fb470016f9"
-SRC_URI[sha256sum] = "e271db76dbbcda9835ed1c9c94deb2ba3f4589c3ebcaa71d99ac694b8d62638c"
+SRC_URI[md5sum] = "ed1f2dc4cf24aa2da8361179ade01682"
+SRC_URI[sha256sum] = "9d539e7c09aa6394d512c433c5601c1f26dc4975f022ad7d5e8e57c3b635b370"
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/asio/${BP}.tar.bz2"
 
 PACKAGECONFIG ??= "boost"
 
-PACKAGECONFIG[boost] = "--with-boost,--without-boost,boost"
+PACKAGECONFIG[boost] = "--with-boost=${STAGING_LIBDIR},--without-boost,boost"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/consolation/consolation_0.0.8.bb b/meta-openembedded/meta-oe/recipes-support/consolation/consolation_0.0.8.bb
new file mode 100644
index 0000000..90bd560
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/consolation/consolation_0.0.8.bb
@@ -0,0 +1,29 @@
+SUMMARY = "copy-paste for the Linux console"
+DESCRIPTION = "Consolation is a daemon that provides copy-paste and scrolling \
+support to the Linux console. It is based on the libinput library and \
+supports all pointer devices and settings provided by this library. Similar \
+software include gpm and jamd."
+HOMEPAGE = "https://salsa.debian.org/consolation-team/consolation"
+SECTION = "console/utils"
+LICENSE = "GPL-2.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=73ca626e1d9048abfc7d599370650827"
+
+DEPENDS = " \
+    libevdev \
+    libinput \
+    udev \
+"
+
+SRC_URI = "git://salsa.debian.org/consolation-team/consolation.git"
+SRCREV = "4581eaece6e49fa2b687efbdbe23b2de452e7902"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig systemd
+
+do_install_append() {
+    install -d ${D}${systemd_system_unitdir}
+    install -m 644 ${B}/consolation.service ${D}${systemd_system_unitdir}
+}
+
+SYSTEMD_SERVICE_${PN} = "consolation.service"
diff --git a/meta-openembedded/meta-oe/recipes-support/emacs/emacs_27.1.bb b/meta-openembedded/meta-oe/recipes-support/emacs/emacs_27.1.bb
new file mode 100644
index 0000000..9b3adcf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/emacs/emacs_27.1.bb
@@ -0,0 +1,261 @@
+SUMMARY = "Emacs is the extensible, customizable, self-documenting real-time display editor"
+HOMEPAGE = "https://www.gnu.org/software/emacs/"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
+
+SRC_URI = "https://ftp.gnu.org/pub/gnu/emacs/emacs-${PV}.tar.xz"
+
+SRC_URI_append_class-target = " file://usemake-docfile-native.patch"
+
+SRC_URI[sha256sum] = "4a4c128f915fc937d61edfc273c98106711b540c9be3cd5d2e2b9b5b2f172e41"
+
+PACKAGECONFIG[gnutls] = "--with-gnutls=yes,--with-gnutls=no,gnutls"
+PACKAGECONFIG[kerberos] = "--with-kerberos=yes,--with-kerberos=no,krb5"
+PACKAGECONFIG[libgmp] = "--with-libgmp=yes,--with-libgmp=no,gmp"
+
+PACKAGECONFIG ??= "gnutls kerberos libgmp"
+
+# We could use --without-all but its better to
+# split it into several packages (size of minimal doesnt change)
+EXTRA_OECONF = " --with-x=no --with-dumping=none"
+
+DEPENDS = "ncurses"
+DEPENDS_append_class-target = " emacs-native"
+
+inherit autotools mime-xdg
+
+
+do_compile_class-native (){
+    cd ${B}/lib-src
+    oe_runmake make-docfile
+    oe_runmake make-fingerprint
+}
+do_install_class-native(){
+    install -d ${D}${bindir}
+    install -m 755 ${B}/lib-src/make-docfile ${D}/${bindir}/
+    install -m 755 ${B}/lib-src/make-fingerprint ${D}/${bindir}/
+}
+
+
+do_install_append(){
+    # Delete systemd stuff, extend using DISTRO_FEATURES?
+    rm -rf ${D}/${libdir}
+    # Extra stuff which isnt needed
+    rm -rf ${D}/${datadir}/metainfo
+    rm -rf ${D}/${datadir}/info
+    # Emacs copies files to ${D} while building, which were unpacked
+    # by a different user, we need to restore those
+    chown -R root:root ${D}${datadir}
+}
+
+
+# Use a similar strategy to how we build python:
+# Create three packages
+# minimal - A working lisp based text editor
+# base - What would probably work for most
+# full - A fully working emacs
+# The lists of files are long but are worth it
+# Installing "emacs" installs the base package
+PACKAGE_BEFORE_PN = "${PN}-minimal ${PN}-base ${PN}-full"
+RPROVIDES_${PN}-base = "${PN}"
+RDEPENDS_${PN}-base_class-target = "${PN}-minimal"
+RDEPENDS_${PN}-full_class-target = "${PN}"
+
+
+# A minimal version of emacs that works
+FILES_${PN}-minimal = " \
+    ${datadir}/${BPN}/${PV}/lisp/loadup.el \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/byte-run.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/backquote.elc \
+    ${datadir}/${BPN}/${PV}/lisp/subr.elc \
+    ${datadir}/${BPN}/${PV}/lisp/version.elc \
+    ${datadir}/${BPN}/${PV}/lisp/widget.elc \
+    ${datadir}/${BPN}/${PV}/lisp/custom.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/map-ynp.elc \
+    ${datadir}/${BPN}/${PV}/lisp/international/mule.elc \
+    ${datadir}/${BPN}/${PV}/lisp/international/mule-conf.elc \
+    ${datadir}/${BPN}/${PV}/lisp/env.elc \
+    ${datadir}/${BPN}/${PV}/lisp/format.elc \
+    ${datadir}/${BPN}/${PV}/lisp/bindings.elc \
+    ${datadir}/${BPN}/${PV}/lisp/window.elc \
+    ${datadir}/${BPN}/${PV}/lisp/files.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/macroexp.elc \
+    ${datadir}/${BPN}/${PV}/lisp/cus-face.elc \
+    ${datadir}/${BPN}/${PV}/lisp/faces.elc \
+    ${datadir}/${BPN}/${PV}/lisp/button.elc \
+    ${datadir}/${BPN}/${PV}/lisp/loaddefs.el \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/nadvice.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-preloaded.elc \
+    ${datadir}/${BPN}/${PV}/lisp/obarray.elc \
+    ${datadir}/${BPN}/${PV}/lisp/abbrev.elc \
+    ${datadir}/${BPN}/${PV}/lisp/simple.elc \
+    ${datadir}/${BPN}/${PV}/lisp/jka-cmpr-hook.elc \
+    ${datadir}/${BPN}/${PV}/lisp/epa-hook.elc \
+    ${datadir}/${BPN}/${PV}/lisp/international/mule-cmds.elc \
+    ${datadir}/${BPN}/${PV}/lisp/case-table.elc \
+    ${datadir}/${BPN}/${PV}/lisp/international/charprop.el \
+    ${datadir}/${BPN}/${PV}/lisp/international/characters.elc \
+    ${datadir}/${BPN}/${PV}/lisp/international/charscript.elc \
+    ${datadir}/${BPN}/${PV}/lisp/composite.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/chinese.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/cyrillic.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/indian.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/sinhala.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/english.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/ethiopic.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/european.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/czech.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/slovak.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/romanian.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/greek.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/hebrew.elc \
+    ${datadir}/${BPN}/${PV}/lisp/international/cp51932.elc \
+    ${datadir}/${BPN}/${PV}/lisp/international/eucjp-ms.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/japanese.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/korean.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/lao.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/tai-viet.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/thai.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/tibetan.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/vietnamese.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/misc-lang.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/utf-8-lang.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/georgian.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/khmer.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/burmese.elc \
+    ${datadir}/${BPN}/${PV}/lisp/language/cham.elc \
+    ${datadir}/${BPN}/${PV}/lisp/indent.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-generic.elc \
+    ${datadir}/${BPN}/${PV}/lisp/minibuffer.elc \
+    ${datadir}/${BPN}/${PV}/lisp/frame.elc \
+    ${datadir}/${BPN}/${PV}/lisp/startup.elc \
+    ${datadir}/${BPN}/${PV}/lisp/term/tty-colors.elc \
+    ${datadir}/${BPN}/${PV}/lisp/font-core.elc \
+    ${datadir}/${BPN}/${PV}/lisp/facemenu.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/syntax.elc \
+    ${datadir}/${BPN}/${PV}/lisp/font-lock.elc \
+    ${datadir}/${BPN}/${PV}/lisp/jit-lock.elc \
+    ${datadir}/${BPN}/${PV}/lisp/mouse.elc \
+    ${datadir}/${BPN}/${PV}/lisp/select.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/timer.elc \
+    ${datadir}/${BPN}/${PV}/lisp/isearch.elc \
+    ${datadir}/${BPN}/${PV}/lisp/rfn-eshadow.elc \
+    ${datadir}/${BPN}/${PV}/lisp/menu-bar.elc \
+    ${datadir}/${BPN}/${PV}/lisp/tab-bar.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/lisp.elc \
+    ${datadir}/${BPN}/${PV}/lisp/textmodes/page.elc \
+    ${datadir}/${BPN}/${PV}/lisp/register.elc \
+    ${datadir}/${BPN}/${PV}/lisp/textmodes/paragraphs.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/prog-mode.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/lisp-mode.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/elisp-mode.elc \
+    ${datadir}/${BPN}/${PV}/lisp/textmodes/text-mode.elc \
+    ${datadir}/${BPN}/${PV}/lisp/textmodes/fill.elc \
+    ${datadir}/${BPN}/${PV}/lisp/newcomment.elc \
+    ${datadir}/${BPN}/${PV}/lisp/replace.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/tabulated-list.elc \
+    ${datadir}/${BPN}/${PV}/lisp/buff-menu.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/float-sup.elc \
+    ${datadir}/${BPN}/${PV}/lisp/vc/vc-hooks.elc \
+    ${datadir}/${BPN}/${PV}/lisp/vc/ediff-hook.elc \
+    ${datadir}/${BPN}/${PV}/lisp/uniquify.elc \
+    ${datadir}/${BPN}/${PV}/lisp/electric.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/eldoc.elc \
+    ${datadir}/${BPN}/${PV}/lisp/cus-start.elc \
+    ${datadir}/${BPN}/${PV}/lisp/tooltip.elc \
+    ${datadir}/${BPN}/${PV}/lisp/simple.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/regexp-opt.elc \
+    ${datadir}/${BPN}/${PV}/lisp/term/xterm.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/bytecomp.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cconv.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/gv.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/byte-opt.elc \
+    ${datadir}/${BPN}/${PV}/lisp/image.elc \
+    ${datadir}/${BPN}/${PV}/lisp/ldefs-boot.el \
+    ${datadir}/${BPN}/${PV}/lisp/help.elc \
+    ${datadir}/${BPN}/${PV}/lisp/international/uni*.el \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/vc/warnings.elc \
+    ${datadir}/${BPN}/${PV}/etc/charsets/ \
+    ${bindir}/emacs* \
+    ${prefix}/libexec \
+"
+
+
+# What works for "most" is relative, but this can be easily extended if needed
+FILES_${PN}-base = " \
+    ${datadir}/${BPN}/${PV}/etc/srecode \
+    ${datadir}/${BPN}/${PV}/etc/e \
+    ${datadir}/${BPN}/${PV}/etc/forms \
+    ${datadir}/${BPN}/${PV}/lisp/cedet \
+    ${datadir}/${BPN}/${PV}/site-lisp/ \
+    ${datadir}/${BPN}/${PV}/lisp/subdirs.el \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-mode.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-defs.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-vars.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-engine.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-styles.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-fonts.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-cmds.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-align.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-menus.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cc-guess.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-lib.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-macs.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/pcase.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/inline.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/cl-seq.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/easymenu.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/python* \
+    ${datadir}/${BPN}/${PV}/lisp/ansi-color.elc \
+    ${datadir}/${BPN}/${PV}/lisp/comint.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/ring.elc \
+    ${datadir}/${BPN}/${PV}/lisp/json.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/map.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/seq.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/subr-x.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/seq.elc \
+    ${datadir}/${BPN}/${PV}/lisp/net/tramp-sh.elc \
+    ${datadir}/${BPN}/${PV}/lisp/net/tramp.elc \
+    ${datadir}/${BPN}/${PV}/lisp/net/tramp-compat.elc \
+    ${datadir}/${BPN}/${PV}/lisp/auth-source.elc \
+    ${datadir}/${BPN}/${PV}/lisp/password-cache.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/eieio.elc \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/eieio-core.elc \
+    ${datadir}/${BPN}/${PV}/lisp/format-spec.elc \
+    ${datadir}/${BPN}/${PV}/lisp/ls-lisp.elc \
+    ${datadir}/${BPN}/${PV}/lisp/calendar/parse-time.elc \
+    ${datadir}/${BPN}/${PV}/lisp/calendar/iso8601.elc \
+    ${datadir}/${BPN}/${PV}/lisp/calendar/time-date.elc \
+    ${datadir}/${BPN}/${PV}/lisp/shell.elc \
+    ${datadir}/${BPN}/${PV}/lisp/pcomplete.elc \
+    ${datadir}/${BPN}/${PV}/lisp/net/tramp-integration.elc \
+    ${datadir}/${BPN}/${PV}/lisp/files-x.elc \
+    ${datadir}/${BPN}/${PV}/lisp/net/trampver.elc \
+    ${datadir}/${BPN}/${PV}/lisp/net/tramp-loaddefs.el \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/*perl* \
+    ${datadir}/${BPN}/${PV}/lisp/emacs-lisp/smie.elc \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/*asm* \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/cpp* \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/make* \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/sh-script* \
+    ${datadir}/${BPN}/${PV}/etc/themes/adwaita-theme.el \
+    ${datadir}/${BPN}/${PV}/etc/themes/wheatgrass-theme.el \
+    ${datadir}/${BPN}/${PV}/etc/themes/deeper-blue-theme.el \
+    ${datadir}/${BPN}/${PV}/etc/themes/light-blue-theme.el \
+    ${datadir}/${BPN}/${PV}/etc/themes/misterioso-theme.el \
+    ${datadir}/${BPN}/${PV}/etc/themes/tango-theme.el \
+    ${datadir}/${BPN}/${PV}/etc/themes/wombat-theme.el \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/prog* \
+    ${datadir}/${BPN}/${PV}/lisp/progmodes/executable* \
+"
+
+# Restore FILES for the full package to catch everything left
+FILES_${PN}-full = "${FILES_${PN}}"
+FILES_${PN}-full_append = " ${datadir}/icons"
+
+
+# The following does NOT build a native emacs.
+# It only builds some parts of it that are
+# required to by the build for target emacs.
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/emacs/files/usemake-docfile-native.patch b/meta-openembedded/meta-oe/recipes-support/emacs/files/usemake-docfile-native.patch
new file mode 100644
index 0000000..cc0b05c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/emacs/files/usemake-docfile-native.patch
@@ -0,0 +1,85 @@
+Upstream-Status: Inappropriate  [OE-Specific]
+
+When building emacs, it builds some tools for the HOST
+that are then used to build for target, such as
+make-fingerprint and make-docfile, this needs to be
+adapted to be used by bitbake, otherwise the compiled
+executables arent compatible with the HOST.
+
+Use the above mentioned tools provided by the native
+version of the recipe instead.
+
+Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandro@enedino.org>
+
+Index: emacs-27.1/src/Makefile.in
+===================================================================
+--- emacs-27.1.orig/src/Makefile.in
++++ emacs-27.1/src/Makefile.in
+@@ -472,7 +472,7 @@ ifeq ($(CHECK_STRUCTS),true)
+ pdumper.o: dmpstruct.h
+ endif
+ dmpstruct.h: $(srcdir)/dmpstruct.awk
+-dmpstruct.h: $(libsrc)/make-fingerprint$(EXEEXT) $(dmpstruct_headers)
++dmpstruct.h:  $(dmpstruct_headers)
+ 	$(AM_V_GEN)POSIXLY_CORRECT=1 awk -f $(srcdir)/dmpstruct.awk \
+ 		$(dmpstruct_headers) > $@
+ 
+@@ -566,8 +566,7 @@ ${lispintdir}/characters.elc: ${charscri
+ ## Strictly speaking, emacs does not depend directly on all of $lisp,
+ ## since not all pieces are used on all platforms.  But DOC depends
+ ## on all of $lisp, and emacs depends on DOC, so it is ok to use $lisp here.
+-emacs$(EXEEXT): temacs$(EXEEXT) \
+-                lisp.mk $(etc)/DOC $(lisp) \
++emacs$(EXEEXT): lisp.mk $(etc)/DOC $(lisp) \
+                 $(lispsource)/international/charprop.el ${charsets}
+ ifeq ($(DUMPING),unexec)
+ 	LC_ALL=C $(RUN_TEMACS) -batch $(BUILD_DETAILS) -l loadup --temacs=dump
+@@ -596,15 +595,15 @@ endif
+ ## for the first time, this prevents any variation between configurations
+ ## in the contents of the DOC file.
+ ##
+-$(etc)/DOC: lisp.mk $(libsrc)/make-docfile$(EXEEXT) $(obj) $(lisp)
++$(etc)/DOC: lisp.mk $(obj) $(lisp)
+ 	$(AM_V_GEN)$(MKDIR_P) $(etc)
+ 	$(AM_V_at)rm -f $(etc)/DOC
+-	$(AM_V_at)$(libsrc)/make-docfile -d $(srcdir) \
++	make-docfile -d $(srcdir) \
+ 	  $(SOME_MACHINE_OBJECTS) $(obj) > $(etc)/DOC
+-	$(AM_V_at)$(libsrc)/make-docfile -a $(etc)/DOC -d $(lispsource) \
++	make-docfile -a $(etc)/DOC -d $(lispsource) \
+ 	  $(shortlisp)
+ 
+-$(libsrc)/make-docfile$(EXEEXT) $(libsrc)/make-fingerprint$(EXEEXT): \
++$(libsrc)/make-fingerprint$(EXEEXT): \
+   $(lib)/libgnu.a
+ 	$(MAKE) -C $(dir $@) $(notdir $@)
+ 
+@@ -622,8 +621,8 @@ am__v_GLOBALS_ = $(am__v_GLOBALS_@AM_DEF
+ am__v_GLOBALS_0 = @echo "  GEN     " globals.h;
+ am__v_GLOBALS_1 =
+ 
+-gl-stamp: $(libsrc)/make-docfile$(EXEEXT) $(GLOBAL_SOURCES)
+-	$(AM_V_GLOBALS)$(libsrc)/make-docfile -d $(srcdir) -g $(obj) > globals.tmp
++gl-stamp: $(GLOBAL_SOURCES)
++	make-docfile -d $(srcdir) -g $(obj) > globals.tmp
+ 	$(AM_V_at)$(top_srcdir)/build-aux/move-if-change globals.tmp globals.h
+ 	$(AM_V_at)echo timestamp > $@
+ 
+@@ -637,7 +636,7 @@ $(LIBEGNU_ARCHIVE): $(config_h)
+ 	$(MAKE) -C $(dir $@) all
+ 
+ ifeq ($(HAVE_PDUMPER),yes)
+-  MAKE_PDUMPER_FINGERPRINT = $(libsrc)/make-fingerprint$(EXEEXT)
++  MAKE_PDUMPER_FINGERPRINT = make-fingerprint
+ else
+   MAKE_PDUMPER_FINGERPRINT =
+ endif
+@@ -647,7 +646,7 @@ endif
+ ## This goes on to affect various things, and the emacs binary fails
+ ## to start if Vinstallation_directory has the wrong value.
+ temacs$(EXEEXT): $(LIBXMENU) $(ALLOBJS) $(LIBEGNU_ARCHIVE) $(EMACSRES) \
+-  $(charsets) $(charscript) $(MAKE_PDUMPER_FINGERPRINT)
++  $(charsets) $(charscript)
+ 	$(AM_V_CCLD)$(CC) -o $@.tmp \
+ 	  $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \
+ 	  $(ALLOBJS) $(LIBEGNU_ARCHIVE) $(W32_RES_LINK) $(LIBES)
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.2.0.bb b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.2.0.bb
index 6a97c24..d446a31 100644
--- a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.2.0.bb
@@ -38,7 +38,7 @@
 
 X11_DEPS = "virtual/libx11 libxinerama libxext libxcursor libxv libxi libxrender libxfixes libxdamage libxrandr libxkbfile"
 PACKAGECONFIG[x11] = "-DWITH_X11=ON -DWITH_XINERAMA=ON -DWITH_XEXT=ON -DWITH_XCURSOR=ON -DWITH_XV=ON -DWITH_XI=ON -DWITH_XRENDER=ON -DWITH_XFIXES=ON -DWITH_XDAMAGE=ON -DWITH_XRANDR=ON -DWITH_XKBFILE=ON,-DWITH_X11=OFF,${X11_DEPS}"
-PACKAGECONFIG[wayland] = "-DWITH_WAYLAND=ON,-DWITH_WAYLAND=OFF,wayland wayland-native"
+PACKAGECONFIG[wayland] = "-DWITH_WAYLAND=ON,-DWITH_WAYLAND=OFF,wayland wayland-native libxkbcommon"
 PACKAGECONFIG[directfb] = "-DWITH_DIRECTFB=ON,-DWITH_DIRECTFB=OFF,directfb"
 PACKAGECONFIG[pam] = "-DWITH_PAM=ON,-DWITH_PAM=OFF,libpam"
 PACKAGECONFIG[pulseaudio] = "-DWITH_PULSEAUDIO=ON,-DWITH_PULSEAUDIO=OFF,pulseaudio"
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.90.bb b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.8.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.90.bb
rename to meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.8.bb
index b7b7839..662777b 100644
--- a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.90.bb
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.8.bb
@@ -3,7 +3,7 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://COPYING;md5=762732742c73dc6c7fbe8632f06c059a"
 
-SRCREV = "db7aa547abb5abdd558587a15502584cbc825438"
+SRCREV = "180bfa10d7cb38e8b3784d60943d50e8fcef0dcb"
 SRC_URI = "git://github.com/gperftools/gperftools \
            file://0001-Support-Atomic-ops-on-clang.patch \
            file://0001-fix-build-with-musl-libc.patch \
diff --git a/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.105.bb b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.106.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.105.bb
rename to meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.106.bb
index 70807de..0249d09 100644
--- a/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.105.bb
+++ b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.106.bb
@@ -7,8 +7,8 @@
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}2/${BPN}_${PV}.zip \
            "
-SRC_URI[md5sum] = "ce91e46d3abc1d720566b13298fbc367"
-SRC_URI[sha256sum] = "aa20c535cf08f1576bebad97cc6159ca57c68bc43acfc9a296e4e9faf041097e"
+SRC_URI[md5sum] = "0925d25bc455047b01d4fe9814d30173"
+SRC_URI[sha256sum] = "4e74838baf5437e95ae17aa3efb48bd0621f483bff4424f6255fcf327ff80765"
 
 inherit autotools
 
diff --git a/meta-openembedded/meta-oe/recipes-support/htop/files/0001-Ask-for-python3-specifically.patch b/meta-openembedded/meta-oe/recipes-support/htop/files/0001-Ask-for-python3-specifically.patch
deleted file mode 100644
index 6153bde..0000000
--- a/meta-openembedded/meta-oe/recipes-support/htop/files/0001-Ask-for-python3-specifically.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 08aca4816cc798fce58b6235c26585a0063fa8af Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 26 Nov 2019 10:43:49 -0800
-Subject: [PATCH] Ask for python3 specifically
-
-python2 is on its way out
-
-Upstream-Status: Submitted [https://github.com/hishamhm/htop/pull/968]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- scripts/MakeHeader.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/scripts/MakeHeader.py b/scripts/MakeHeader.py
-index 7c48fdd..7a7586d 100755
---- a/scripts/MakeHeader.py
-+++ b/scripts/MakeHeader.py
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
- import os, sys, string, io
- try:
-    from StringIO import StringIO
--- 
-2.24.0
-
diff --git a/meta-openembedded/meta-oe/recipes-support/htop/files/htop-gcc10.patch b/meta-openembedded/meta-oe/recipes-support/htop/files/htop-gcc10.patch
deleted file mode 100644
index 5be0627..0000000
--- a/meta-openembedded/meta-oe/recipes-support/htop/files/htop-gcc10.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Fix build with -fno-common
-
-Upstream-Staus: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
---- a/CRT.h
-+++ b/CRT.h
-@@ -140,7 +140,7 @@ extern const char **CRT_treeStr;
- 
- extern int CRT_delay;
- 
--int* CRT_colors;
-+extern int* CRT_colors;
- 
- extern int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT];
- 
-@@ -150,13 +150,13 @@ extern int CRT_scrollHAmount;
- 
- extern int CRT_scrollWheelVAmount;
- 
--char* CRT_termType;
-+extern char* CRT_termType;
- 
- // TODO move color scheme to Settings, perhaps?
- 
- extern int CRT_colorScheme;
- 
--void *backtraceArray[128];
-+extern void *backtraceArray[128];
- 
- #if HAVE_SETUID_ENABLED
- 
diff --git a/meta-openembedded/meta-oe/recipes-support/htop/htop_2.2.0.bb b/meta-openembedded/meta-oe/recipes-support/htop/htop_3.0.1.bb
similarity index 61%
rename from meta-openembedded/meta-oe/recipes-support/htop/htop_2.2.0.bb
rename to meta-openembedded/meta-oe/recipes-support/htop/htop_3.0.1.bb
index c608077..d677e36 100644
--- a/meta-openembedded/meta-oe/recipes-support/htop/htop_2.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/htop/htop_3.0.1.bb
@@ -1,28 +1,25 @@
 SUMMARY = "Interactive process viewer"
-HOMEPAGE = "http://hisham.hm/htop"
+HOMEPAGE = "https://htop.dev"
 SECTION = "console/utils"
 LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c312653532e8e669f30e5ec8bdc23be3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4099d367cd5e59b6d4fc1ee33accb891"
 
 DEPENDS = "ncurses"
 
-SRC_URI = "http://hisham.hm/htop/releases/${PV}/${BP}.tar.gz \
+SRC_URI = "git://github.com/htop-dev/htop.git \
            file://0001-Use-pkg-config.patch \
-           file://0001-Ask-for-python3-specifically.patch \
-           file://htop-gcc10.patch \
            "
-SRC_URI[md5sum] = "0d816b6beed31edc75babcfbf863ffa8"
-SRC_URI[sha256sum] = "d9d6826f10ce3887950d709b53ee1d8c1849a70fa38e91d5896ad8cbc6ba3c57"
+SRCREV = "dace850fa6e27b5626115b366059258cfe4d60c9"
+
+S = "${WORKDIR}/git"
 
 inherit autotools pkgconfig
 
-PACKAGECONFIG ??= "proc \
-                   cgroup \
+PACKAGECONFIG ??= "cgroup \
                    taskstats \
                    unicode \
                    linux-affinity \
                    delayacct"
-PACKAGECONFIG[proc] = "--enable-proc,--disable-proc"
 PACKAGECONFIG[openvz] = "--enable-openvz,--disable-openvz"
 PACKAGECONFIG[cgroup] = "--enable-cgroup,--disable-cgroup"
 PACKAGECONFIG[vserver] = "--enable-vserver,--disable-vserver"
@@ -32,7 +29,3 @@
 PACKAGECONFIG[hwloc] = "--enable-hwloc,--disable-hwloc,hwloc"
 PACKAGECONFIG[setuid] = "--enable-setuid,--disable-setuid"
 PACKAGECONFIG[delayacct] = "--enable-delayacct,--disable-delayacct,libnl"
-
-do_configure_prepend () {
-    rm -rf ${S}/config.h
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb
index 035a11c..42b9210 100644
--- a/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb
@@ -5,8 +5,8 @@
 LICENSE = "GPL-2.0+"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=1556547711e8246992b999edd9445a57"
 
-PV = "0.336"
-SRCREV = "e0e15bc7930f6d7befa4e7060fd03cc4935f6190"
+PV = "0.339"
+SRCREV = "1cd8ee29eb2dcb954961be008b96cfbf982f0700"
 SRC_URI = "git://github.com/vcrhonek/${BPN}.git"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.10.bb b/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.10.bb
index 804faf0..70cb237 100644
--- a/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.10.bb
+++ b/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.10.bb
@@ -46,7 +46,7 @@
 ALTERNATIVE_PRIORITY = "100"
 
 ALTERNATIVE_${PN} = "animate compare composite conjure convert display \
-    identify import mogrify montage stream"
+    identify import magick-script mogrify montage stream"
 
 ALTERNATIVE_TARGET[animate] = "${bindir}/animate.im7"
 ALTERNATIVE_TARGET[compare] = "${bindir}/compare.im7"
@@ -56,12 +56,13 @@
 ALTERNATIVE_TARGET[display] = "${bindir}/display.im7"
 ALTERNATIVE_TARGET[identify] = "${bindir}/identify.im7"
 ALTERNATIVE_TARGET[import] = "${bindir}/import.im7"
+ALTERNATIVE_TARGET[magick-script] = "${bindir}/magick-script.im7"
 ALTERNATIVE_TARGET[mogrify] = "${bindir}/mogrify.im7"
 ALTERNATIVE_TARGET[montage] = "${bindir}/montage.im7"
 ALTERNATIVE_TARGET[stream] = "${bindir}/stream.im7"
 
 ALTERNATIVE_${PN}-doc = "animate.1 compare.1 composite.1 conjure.1 \
-    convert.1 display.1 identify.1 import.1 mogrify.1 montage.1 stream.1"
+    convert.1 display.1 identify.1 import.1 magick-script.1 mogrify.1 montage.1 stream.1"
 
 ALTERNATIVE_LINK_NAME[animate.1] = "${mandir}/man1/animate.1"
 ALTERNATIVE_TARGET[animate.1] = "${mandir}/man1/animate.im7.1"
@@ -79,6 +80,8 @@
 ALTERNATIVE_TARGET[identify.1] = "${mandir}/man1/identify.im7.1"
 ALTERNATIVE_LINK_NAME[import.1] = "${mandir}/man1/import.1"
 ALTERNATIVE_TARGET[import.1] = "${mandir}/man1/import.im7.1"
+ALTERNATIVE_LINK_NAME[magick-script.1] = "${mandir}/man1/magick-script.1"
+ALTERNATIVE_TARGET[magick-script.1] = "${mandir}/man1/magick-script.im7.1"
 ALTERNATIVE_LINK_NAME[mogrify.1] = "${mandir}/man1/mogrify.1"
 ALTERNATIVE_TARGET[mogrify.1] = "${mandir}/man1/mogrify.im7.1"
 ALTERNATIVE_LINK_NAME[montage.1] = "${mandir}/man1/montage.1"
diff --git a/meta-openembedded/meta-oe/recipes-support/imapfilter/imapfilter/ldflags.patch b/meta-openembedded/meta-oe/recipes-support/imapfilter/imapfilter/ldflags.patch
new file mode 100644
index 0000000..ceda839
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/imapfilter/imapfilter/ldflags.patch
@@ -0,0 +1,16 @@
+Append to LDFLAGS so it can respect the LDFLAGS passed from environment. This helps
+with using propert GNU_HASH settings during link on mips/arm
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -24,7 +24,7 @@ CFLAGS = -Wall -Wextra -O \
+ 	 -DCONFIG_SSL_CAPATH='"$(SSLCAPATH)"' \
+ 	 -DCONFIG_SSL_CAFILE='"$(SSLCAFILE)"' \
+ 	 $(INCDIRS) $(MYCFLAGS)
+-LDFLAGS = $(LIBDIRS) $(MYLDFLAGS)
++LDFLAGS += $(LIBDIRS) $(MYLDFLAGS)
+ LIBS = -lm -ldl $(LIBLUA) $(LIBPCRE) $(LIBSSL) $(LIBCRYPTO) $(MYLIBS)
+ 
+ MAN1 = imapfilter.1
diff --git a/meta-openembedded/meta-oe/recipes-support/imapfilter/imapfilter_2.6.16.bb b/meta-openembedded/meta-oe/recipes-support/imapfilter/imapfilter_2.6.16.bb
index 7d4e12d..86553b5 100644
--- a/meta-openembedded/meta-oe/recipes-support/imapfilter/imapfilter_2.6.16.bb
+++ b/meta-openembedded/meta-oe/recipes-support/imapfilter/imapfilter_2.6.16.bb
@@ -2,7 +2,9 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=ccca8573ead8e965c130b6b2946a36ab"
 
-SRC_URI = "https://codeload.github.com/lefcha/${BPN}/tar.gz/v${PV};downloadfilename=v${PV}.tar.gz"
+SRC_URI = "https://codeload.github.com/lefcha/${BPN}/tar.gz/v${PV};downloadfilename=${BP}.tar.gz \
+           file://ldflags.patch \
+"
 SRC_URI[sha256sum] = "90af9bc9875e03fb5a09a3233287b74dd817867cb18ec9ff52fead615755563e"
 
 DEPENDS= "openssl lua libpcre"
@@ -15,3 +17,5 @@
     # No need for manuals at this point, MANDIR is hardcoded to depend on prefix
     rm -rf ${D}${prefix}/man
 }
+
+ASNEEDED = ""
diff --git a/meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.11.bb b/meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.11.bb
new file mode 100644
index 0000000..4f10f35
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.11.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Little cms is a small-footprint, speed optimized color management engine"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9391499b030def18e7bb25bab4bee052"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/lcms/lcms2-${PV}.tar.gz"
+SRC_URI[md5sum] = "598dae499e58f877ff6788254320f43e"
+SRC_URI[sha256sum] = "dc49b9c8e4d7cdff376040571a722902b682a795bf92985a85b48854c270772e"
+
+DEPENDS = "tiff"
+
+BBCLASSEXTEND = "native"
+
+S = "${WORKDIR}/lcms2-${PV}"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.9.bb b/meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.9.bb
deleted file mode 100644
index be72d76..0000000
--- a/meta-openembedded/meta-oe/recipes-support/lcms/lcms_2.9.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SUMMARY = "Little cms is a small-footprint, speed optimized color management engine"
-SECTION = "libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6c786c3b7a4afbd3c990f1b81261d516"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/lcms/lcms2-${PV}.tar.gz"
-SRC_URI[md5sum] = "8de1b7724f578d2995c8fdfa35c3ad0e"
-SRC_URI[sha256sum] = "48c6fdf98396fa245ed86e622028caf49b96fa22f3e5734f853f806fbc8e7d20"
-
-DEPENDS = "tiff"
-
-BBCLASSEXTEND = "native"
-
-S = "${WORKDIR}/lcms2-${PV}"
-
-inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.7.bb b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.7.bb
index f638848..6ce318d 100644
--- a/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.7.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.7.bb
@@ -4,11 +4,11 @@
 LICENSE = "MPL-2.0"
 LIC_FILES_CHKSUM = "file://COPYING.MPL2;md5=815ca599c9df247a0c7f619bab123dad"
 
-SRC_URI = "https://bitbucket.org/eigen/eigen/get/${PV}.tar.bz2;downloadfilename=${BP}.tar.bz2"
-SRC_URI[md5sum] = "05b1f7511c93980c385ebe11bd3c93fa"
-SRC_URI[sha256sum] = "9f13cf90dedbe3e52a19f43000d71fdf72e986beb9a5436dddcd61ff9d77a3ce"
+SRC_URI = "git://gitlab.com/libeigen/eigen.git;protocol=http;nobranch=1"
 
-S = "${WORKDIR}/eigen-eigen-323c052e1731"
+SRCREV = "21ae2afd4edaa1b69782c67a54182d34efe43f9c"
+
+S = "${WORKDIR}/git"
 
 inherit cmake
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.3.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.4.bb
similarity index 80%
rename from meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.3.bb
rename to meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.4.bb
index a6320da..a9a4628 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.4.bb
@@ -2,8 +2,8 @@
 
 DEPENDS += "autoconf-archive-native"
 
-SRC_URI[md5sum] = "d4826720a8de13379436f9c207237bc0"
-SRC_URI[sha256sum] = "0ad080d1eb89c422cf13001293ffa72869ca13028e85dab5f6b3ba90f88da46d"
+SRC_URI[md5sum] = "064c2627397e6641c52de09a26951112"
+SRC_URI[sha256sum] = "f1cda2789e6a13a92aefc012a76e5a7cc57a1b402d66f71df8719ee314b67699"
 
 # enable cxx bindings
 PACKAGECONFIG ?= "cxx"
diff --git a/meta-openembedded/meta-oe/recipes-support/liburing/liburing_0.7.bb b/meta-openembedded/meta-oe/recipes-support/liburing/liburing_0.7.bb
new file mode 100644
index 0000000..3a1eaef
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/liburing/liburing_0.7.bb
@@ -0,0 +1,24 @@
+SUMMARY = "This is the io_uring library, liburing."
+DESCRIPTION = "liburing provides helpers to setup and teardown io_uring \
+instances, and also a simplified interface for applications that don't need \
+(or want) to deal with the full kernel side implementation."
+HOMEPAGE = "https://github.com/axboe/liburing"
+BUGTRACKER = "https://github.com/axboe/liburing/issues"
+SECTION = "libs"
+
+LICENSE = "LGPLv2.1 | MIT"
+LIC_FILES_CHKSUM = "file://README;beginline=41;endline=44;md5=d51b5805e2a675685e6a66ca50904cf9"
+
+SRC_URI = "git://github.com/axboe/liburing.git;branch=master;protocol=https"
+SRCREV = "45f0735219a615ae848033c47c7e2d85d101d43e"
+S = "${WORKDIR}/git"
+
+DEPENDS_append_libc-musl = " libucontext"
+XCFLAGS = "-pthread"
+XCFLAGS_append_libc-musl = " -lucontext"
+
+EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'LDFLAGS=${LDFLAGS}' 'XCFLAGS=${XCFLAGS}' 'BUILDDIR=${S}'"
+
+do_install () {
+    oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg_git.bb b/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg_git.bb
index 97d60a6..b1c4663 100644
--- a/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libusbg/libusbg_git.bb
@@ -4,7 +4,7 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c"
 
-inherit autotools
+inherit autotools update-alternatives
 
 PV = "0.1.0"
 SRCREV = "a826d136e0e8fa53815f1ba05893e6dd74208c15"
@@ -14,3 +14,6 @@
 
 S = "${WORKDIR}/git"
 
+ALTERNATIVE_${PN} = "gadget-acm-ecm show-gadgets"
+ALTERNATIVE_LINK_NAME[gadget-acm-ecm] = "${bindir}/gadget-acm-ecm"
+ALTERNATIVE_LINK_NAME[show-gadgets] = "${bindir}/show-gadgets"
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx_git.bb b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
index d73ca61..48fc911 100644
--- a/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
@@ -5,7 +5,7 @@
 
 DEPENDS = "libconfig"
 
-inherit autotools pkgconfig systemd update-rc.d
+inherit autotools pkgconfig systemd update-rc.d update-alternatives
 
 PV = "0.2.0+git${SRCPV}"
 SRCREV = "45c14ef4d5d7ced0fbf984208de44ced6d5ed898"
@@ -38,3 +38,8 @@
 }
 
 RDEPENDS_${PN} += "libusbgx-config"
+
+ALTERNATIVE_PRIORITY = "90"
+ALTERNATIVE_${PN} = "gadget-acm-ecm show-gadgets"
+ALTERNATIVE_LINK_NAME[gadget-acm-ecm] = "${bindir}/gadget-acm-ecm"
+ALTERNATIVE_LINK_NAME[show-gadgets] = "${bindir}/show-gadgets"
diff --git a/meta-openembedded/meta-oe/recipes-support/links/links_2.20.2.bb b/meta-openembedded/meta-oe/recipes-support/links/links_2.21.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-support/links/links_2.20.2.bb
rename to meta-openembedded/meta-oe/recipes-support/links/links_2.21.bb
index 1a36291..b6048c1 100644
--- a/meta-openembedded/meta-oe/recipes-support/links/links_2.20.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/links/links_2.21.bb
@@ -9,7 +9,7 @@
                 --without-directfb --without-pmshell --without-atheos \
                 --without-x"
 
-SRC_URI[md5sum] = "ee39e612249440d0497535d0dafc3c0e"
-SRC_URI[sha256sum] = "4b4f07d0e6261118d1365a5a5bfa31e1eafdbd280cfae6f0e9eedfea51a2f424"
+SRC_URI[md5sum] = "b88a46733d6932442ed8a6b751aac6b4"
+SRC_URI[sha256sum] = "285eed8591c7781ec26213df82786665aaa1b9286782e8a7a1a7e2a6e1630d63"
 SRC_URI[icon.md5sum] = "477e8787927c634614bac01b44355a33"
 SRC_URI[icon.sha256sum] = "eddcd8b8c8698aa621d1a453943892d77b72ed492e0d14e0dbac5c6a57e52f47"
diff --git a/meta-openembedded/meta-oe/recipes-support/mailcap/mailcap_2.1.49.bb b/meta-openembedded/meta-oe/recipes-support/mailcap/mailcap_2.1.49.bb
index ff3047f..537c458 100644
--- a/meta-openembedded/meta-oe/recipes-support/mailcap/mailcap_2.1.49.bb
+++ b/meta-openembedded/meta-oe/recipes-support/mailcap/mailcap_2.1.49.bb
@@ -21,6 +21,11 @@
 SRC_URI[md5sum] = "d5701a1a541383c0eda328f4a6518751"
 SRC_URI[sha256sum] = "f7381516bc1a937348efd1d0e14618e0a2afc5d59fe821dd248632d5601b59b5"
 
+inherit update-alternatives
+
 do_install() {
     oe_runmake install DESTDIR=${D} sysconfdir=${sysconfdir} mandir=${mandir}
 }
+
+ALTERNATIVE_${PN} = "mime.types"
+ALTERNATIVE_LINK_NAME[mime.types] = "${sysconfdir}/mime.types"
diff --git a/meta-openembedded/meta-oe/recipes-support/mime-support/mime-support_3.48.bb b/meta-openembedded/meta-oe/recipes-support/mime-support/mime-support_3.48.bb
index d617b66..1137f50 100644
--- a/meta-openembedded/meta-oe/recipes-support/mime-support/mime-support_3.48.bb
+++ b/meta-openembedded/meta-oe/recipes-support/mime-support/mime-support_3.48.bb
@@ -10,6 +10,8 @@
 SRC_URI = "${DEBIAN_MIRROR}/main/m/mime-support/mime-support_${PV}-1.tar.gz"
 S = "${WORKDIR}/${BPN}"
 
+inherit update-alternatives
+
 FILES_${PN} += " ${libdir}/mime"
 
 docdir_append = "/${BPN}"
@@ -56,3 +58,7 @@
 
 SRC_URI[md5sum] = "d6e5d715e331147352c50c158dbdec6d"
 SRC_URI[sha256sum] = "a529c7892cb786f514af71f4ca5a4c3ebc58b538a49ff959c0d97592d38f040a"
+
+ALTERNATIVE_PRIORITY = "90"
+ALTERNATIVE_${PN} = "mime.types"
+ALTERNATIVE_LINK_NAME[mime.types] = "${sysconfdir}/mime.types"
diff --git a/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb b/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb
deleted file mode 100644
index 44f55b5..0000000
--- a/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (C) 2012 Khem Raj <raj.khem@gmail.com>
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-SUMMARY = "A minimal iconv implementation w/ support for UTF-8, ASCII, ISO-8859-1"
-HOMEPAGE = "http://tinderbox.dev.gentoo.org/portage/local/misc/mini-iconv/"
-LICENSE = "MPL-1.1"
-SECTION = "libs"
-DEPENDS = ""
-PROVIDES = "virtual/libiconv"
-LIC_FILES_CHKSUM = "file://iconv.c;beginline=1;endline=6;md5=35af9d9924327fe8a0a1fe3a2cb454c8"
-SRC_URI = "http://mirror.meleeweb.net/pub/linux/gentoo/distfiles/mini-iconv.tar.bz2"
-SRC_URI[md5sum] = "84412221e26505a2b3855d4a1cdcd0e0"
-SRC_URI[sha256sum] = "3552262bf1bcf8e859a2a3a7adfb0367af8593383e730c492e981477aac0a0d4"
-
-
-S = "${WORKDIR}/${BPN}"
-
-do_install() {
-    oe_runmake install DESTDIR=${D} PREFIX=${prefix} LIB=${base_libdir}
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/nano/nano_5.0.bb b/meta-openembedded/meta-oe/recipes-support/nano/nano_5.2.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-support/nano/nano_5.0.bb
rename to meta-openembedded/meta-oe/recipes-support/nano/nano_5.2.bb
index e97c01f..f2cd290 100644
--- a/meta-openembedded/meta-oe/recipes-support/nano/nano_5.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/nano/nano_5.2.bb
@@ -12,7 +12,7 @@
 PV_MAJOR = "${@d.getVar('PV').split('.')[0]}"
 
 SRC_URI = "https://nano-editor.org/dist/v${PV_MAJOR}/nano-${PV}.tar.xz"
-SRC_URI[sha256sum] = "7c0d94be69cd066f20df2868a2da02f7b1d416ce8d47c0850a8bd270897caa36"
+SRC_URI[sha256sum] = "32c2da43e1ae9a5e43437d8c6e1ec0388af870c7762c479e5bffb5f292bda7e1"
 
 UPSTREAM_CHECK_URI = "https://ftp.gnu.org/gnu/nano"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-freebl-add-a-configure-option-to-disable-ARM-HW-cryp.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-freebl-add-a-configure-option-to-disable-ARM-HW-cryp.patch
index 1a87a05..bfc375e 100644
--- a/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-freebl-add-a-configure-option-to-disable-ARM-HW-cryp.patch
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-freebl-add-a-configure-option-to-disable-ARM-HW-cryp.patch
@@ -14,21 +14,18 @@
  nss/lib/freebl/gcm.c    | 2 ++
  2 files changed, 6 insertions(+)
 
-diff --git a/nss/lib/freebl/Makefile b/nss/lib/freebl/Makefile
-index f99f769..b0ec81b 100644
 --- a/nss/lib/freebl/Makefile
 +++ b/nss/lib/freebl/Makefile
-@@ -125,6 +125,9 @@ else
-         DEFINES += -DNSS_X86
+@@ -126,6 +126,8 @@ else
  endif
  endif
-+
+ ifdef NS_USE_GCC
 +ifdef NSS_USE_ARM_HW_CRYPTO
 +    DEFINES += -DNSS_USE_ARM_HW_CRYPTO
  ifeq ($(CPU_ARCH),aarch64)
-     DEFINES += -DUSE_HW_AES -DUSE_HW_SHA2
-     EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha256-armv8.c
-@@ -148,6 +151,7 @@ endif
+     DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2
+     EXTRA_SRCS += aes-armv8.c gcm-aarch64.c sha1-armv8.c sha256-armv8.c
+@@ -150,6 +152,7 @@ endif
          endif
      endif
  endif
@@ -36,23 +33,15 @@
  
  ifeq ($(OS_TARGET),OSF1)
      DEFINES += -DMP_ASSEMBLY_MULTIPLY -DMP_NO_MP_WORD
-diff --git a/nss/lib/freebl/gcm.c b/nss/lib/freebl/gcm.c
-index c2cc18d..b77f573 100644
 --- a/nss/lib/freebl/gcm.c
 +++ b/nss/lib/freebl/gcm.c
-@@ -18,6 +18,7 @@
- 
- #include <limits.h>
- 
-+#ifdef NSS_USE_ARM_HW_CRYPTO
+@@ -21,7 +21,9 @@
  /* old gcc doesn't support some poly64x2_t intrinsic */
  #if defined(__aarch64__) && defined(IS_LITTLE_ENDIAN) && \
      (defined(__clang__) || defined(__GNUC__) && __GNUC__ > 6)
-@@ -27,6 +28,7 @@
- /* We don't test on big endian platform, so disable this on big endian. */
++# ifdef NSS_USE_ARM_HW_CRYPTO
  #define USE_ARM_GCM
- #endif
-+#endif
- 
- /* Forward declarations */
- SECStatus gcm_HashInit_hw(gcmHashContext *ghash);
++# endif
+ #elif defined(__arm__) && defined(IS_LITTLE_ENDIAN) && \
+     !defined(NSS_DISABLE_ARM32_NEON)
+ /* We don't test on big endian platform, so disable this on big endian. */
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-pkix-Do-not-use-NULL-where-0-is-needed.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-pkix-Do-not-use-NULL-where-0-is-needed.patch
new file mode 100644
index 0000000..432312d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-pkix-Do-not-use-NULL-where-0-is-needed.patch
@@ -0,0 +1,46 @@
+From 1136cad77c2dc7d8e1daa317877676733e805f29 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 26 Aug 2020 17:30:40 -0700
+Subject: [PATCH] pkix: Do not use NULL where 0 is needed
+
+Clang finds this error
+
+pkix_logger.c:316:32: error: cast to smaller integer type 'PKIX_ERRORCLASS' from 'void *' [-Werror,-Wvoid-pointer-to-enum-cast]
+        logger->logComponent = (PKIX_ERRORCLASS)NULL;
+                               ^~~~~~~~~~~~~~~~~~~~~
+pkix_logger.c:617:32: error: cast to smaller integer type 'PKIX_ERRORCLASS' from 'void *' [-Werror,-Wvoid-pointer-to-enum-cast]
+        logger->logComponent = (PKIX_ERRORCLASS)NULL;
+                               ^~~~~~~~~~~~~~~~~~~~~
+2 errors generated.
+
+Upstream-Status: Submitted [https://bugzilla.mozilla.org/show_bug.cgi?id=1661378]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ nss/lib/libpkix/pkix/util/pkix_logger.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/nss/lib/libpkix/pkix/util/pkix_logger.c b/nss/lib/libpkix/pkix/util/pkix_logger.c
+index a916e6e..10f537a 100644
+--- a/nss/lib/libpkix/pkix/util/pkix_logger.c
++++ b/nss/lib/libpkix/pkix/util/pkix_logger.c
+@@ -313,7 +313,7 @@ pkix_Logger_Destroy(
+ 
+         logger->callback = NULL;
+         PKIX_DECREF(logger->context);
+-        logger->logComponent = (PKIX_ERRORCLASS)NULL;
++        logger->logComponent = (PKIX_ERRORCLASS)0;
+ 
+ cleanup:
+ 
+@@ -614,7 +614,7 @@ PKIX_Logger_Create(
+ 
+         logger->callback = callback;
+         logger->maxLevel = 0;
+-        logger->logComponent = (PKIX_ERRORCLASS)NULL;
++        logger->logComponent = (PKIX_ERRORCLASS)0;
+ 
+         PKIX_INCREF(loggerContext);
+         logger->context = loggerContext;
+-- 
+2.28.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/signlibs.sh b/meta-openembedded/meta-oe/recipes-support/nss/nss/signlibs.sh
deleted file mode 100644
index a74e499..0000000
--- a/meta-openembedded/meta-oe/recipes-support/nss/nss/signlibs.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-
-# signlibs.sh
-#
-# (c)2010 Wind River Systems, Inc.
-#
-# regenerates the .chk files for the NSS libraries that require it
-# since the ones that are built have incorrect checksums that were
-# calculated on the host where they really need to be done on the
-# target
-
-CHK_FILES=`ls /lib*/*.chk /usr/lib*/*.chk 2>/dev/null`
-SIGN_BINARY=`which shlibsign`
-for I in $CHK_FILES
-do
-       DN=`dirname $I`
-       BN=`basename $I .chk`
-       FN=$DN/$BN.so
-       $SIGN_BINARY -i $FN
-done
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss_3.54.bb b/meta-openembedded/meta-oe/recipes-support/nss/nss_3.56.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-support/nss/nss_3.54.bb
rename to meta-openembedded/meta-oe/recipes-support/nss/nss_3.56.bb
index 4923f68..997f895 100644
--- a/meta-openembedded/meta-oe/recipes-support/nss/nss_3.54.bb
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss_3.56.bb
@@ -21,7 +21,6 @@
 
 SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/${VERSION_DIR}/src/${BP}.tar.gz \
            file://nss.pc.in \
-           file://signlibs.sh \
            file://0001-nss-fix-support-cross-compiling.patch \
            file://nss-no-rpath-for-cross-compiling.patch \
            file://nss-fix-incorrect-shebang-of-perl.patch \
@@ -32,9 +31,9 @@
            file://system-pkcs11.txt \
            file://nss-fix-nsinstall-build.patch \
            file://0001-freebl-add-a-configure-option-to-disable-ARM-HW-cryp.patch \
+           file://0001-pkix-Do-not-use-NULL-where-0-is-needed.patch \
            "
-
-SRC_URI[sha256sum] = "dab18bbfcf5e347934cda664df75ce9fd912a5772686c40d3c805e53c08d6e43"
+SRC_URI[sha256sum] = "f875e0e8ed3b5ce92d675be4a55aa25a8c1199789a4a01f69b5f2327e2048e9c"
 
 UPSTREAM_CHECK_URI = "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_Releases"
 UPSTREAM_CHECK_REGEX = "NSS_(?P<pver>.+)_release_notes"
@@ -57,7 +56,6 @@
 do_compile_prepend_class-native() {
     export NSPR_INCLUDE_DIR=${STAGING_INCDIR_NATIVE}/nspr
     export NSPR_LIB_DIR=${STAGING_LIBDIR_NATIVE}
-    export NSS_ENABLE_WERROR=0
 }
 
 do_compile_prepend_class-nativesdk() {
@@ -71,6 +69,7 @@
 
 do_compile() {
     export NSPR_INCLUDE_DIR=${STAGING_INCDIR}/nspr
+    export NSS_ENABLE_WERROR=0
 
     export CROSS_COMPILE=1
     export NATIVE_CC="${BUILD_CC}"
@@ -214,7 +213,6 @@
         touch ${D}/${libdir}/$file
         chmod 755 ${D}/${libdir}/$file
     done
-    install -D -m 755 ${WORKDIR}/signlibs.sh ${D}/${bindir}/signlibs.sh
 
     install -d ${D}${libdir}/pkgconfig/
     sed 's/%NSS_VERSION%/${PV}/' ${WORKDIR}/nss.pc.in | sed 's/%NSPR_VERSION%/4.9.2/' > ${D}${libdir}/pkgconfig/nss.pc
@@ -238,20 +236,17 @@
 }
 
 PACKAGE_WRITE_DEPS += "nss-native"
+
 pkg_postinst_${PN} () {
-    if [ -n "$D" ]; then
-        for I in $D${libdir}/lib*.chk; do
-            DN=`dirname $I`
-            BN=`basename $I .chk`
-            FN=$DN/$BN.so
-            shlibsign -i $FN
-            if [ $? -ne 0 ]; then
-                exit 1
-            fi
-        done
-    else
-        signlibs.sh
-    fi
+    for I in $D${libdir}/lib*.chk; do
+        DN=`dirname $I`
+        BN=`basename $I .chk`
+        FN=$DN/$BN.so
+        shlibsign -i $FN
+        if [ $? -ne 0 ]; then
+            echo "shlibsign -i $FN failed"
+        fi
+    done
 }
 
 PACKAGES =+ "${PN}-smime"
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv_4.4.0.bb b/meta-openembedded/meta-oe/recipes-support/opencv/opencv_4.4.0.bb
index 372e15c..c83186d 100644
--- a/meta-openembedded/meta-oe/recipes-support/opencv/opencv_4.4.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv_4.4.0.bb
@@ -199,6 +199,13 @@
 
 RDEPENDS_${PN}-apps  = "bash"
 
+do_compile_prepend() {
+    # remove the build host info to improve reproducibility
+    if [ -f ${WORKDIR}/build/modules/core/version_string.inc ]; then
+        sed -i "s#${WORKDIR}#/workdir#g" ${WORKDIR}/build/modules/core/version_string.inc
+    fi
+}
+
 do_install_append() {
     # Move Python files into correct library folder (for multilib build)
     if [ "$libdir" != "/usr/lib" -a -d ${D}/usr/lib ]; then
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.50.bb b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.51.bb
similarity index 98%
rename from meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.50.bb
rename to meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.51.bb
index 3a130f9..d2c5746 100644
--- a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.50.bb
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.51.bb
@@ -25,8 +25,8 @@
     file://remove-user-host-pwd-from-version.patch \
 "
 
-SRC_URI[md5sum] = "f9ed44ef373abed04c9e4c8586260f9e"
-SRC_URI[sha256sum] = "5cb57d958bf5c55a678c6a0f06821e0e5504d5a92e6a33240841fbca1db586b8"
+SRC_URI[md5sum] = "0d2025896cf1c17af7304ecc57ec9531"
+SRC_URI[sha256sum] = "f490775ea4c6506b7210ee55a102c8f4aacfe9d1c8eaa633c7316d33a714be62"
 
 DEPENDS = "util-linux groff-native"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/pidgin/purple-skypeweb_git.bb b/meta-openembedded/meta-oe/recipes-support/pidgin/purple-skypeweb_git.bb
index eacd4ab..277d120 100644
--- a/meta-openembedded/meta-oe/recipes-support/pidgin/purple-skypeweb_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/pidgin/purple-skypeweb_git.bb
@@ -8,10 +8,10 @@
 inherit pkgconfig
 
 SRC_URI = "git://github.com/EionRobb/skype4pidgin;branch=master;protocol=git"
-SRCREV = "77f94b55bfb8b0dbc7fafa7461057d33b6802236"
+SRCREV = "b226d1c457d73900ae89b8a7469247fbe33677a6"
 
 S = "${WORKDIR}/git"
-PV = "1.6+git${SRCPV}"
+PV = "1.7+git${SRCPV}"
 
 do_compile() {
     oe_runmake -C skypeweb;
diff --git a/meta-openembedded/meta-oe/recipes-support/poppler/poppler_20.08.0.bb b/meta-openembedded/meta-oe/recipes-support/poppler/poppler_20.09.0.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-support/poppler/poppler_20.08.0.bb
rename to meta-openembedded/meta-oe/recipes-support/poppler/poppler_20.09.0.bb
index c3f9716..ceff2d0 100644
--- a/meta-openembedded/meta-oe/recipes-support/poppler/poppler_20.08.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/poppler/poppler_20.09.0.bb
@@ -7,7 +7,7 @@
            file://0001-Do-not-overwrite-all-our-build-flags.patch \
            file://basename-include.patch \
            "
-SRC_URI[sha256sum] = "ae65fef04bbf63259a6352e7b620719115d4fb97f5079b0b8b00a8eb0c86eca5"
+SRC_URI[sha256sum] = "4ed6eb5ddc4c37f2435c9d78ff9c7c4036455aea3507d1ce8400070aab745363"
 
 DEPENDS = "fontconfig zlib cairo lcms glib-2.0"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.30.bb b/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.31.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.30.bb
rename to meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.31.bb
index 7831dd9..e99f8ac 100644
--- a/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.30.bb
+++ b/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.31.bb
@@ -10,7 +10,7 @@
 SRC_URI = "git://github.com/abrt/satyr.git \
            file://0002-fix-compile-failure-against-musl-C-library.patch \
 "
-SRCREV = "871a07001c64cfce15dffd7e93a5c3d55af6d5e8"
+SRCREV = "79506592fa61fa10aa2e186158eecfa10b39e905"
 S = "${WORKDIR}/git"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
diff --git a/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
index 48eb268..8bbc681 100644
--- a/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
@@ -4,7 +4,7 @@
 LICENSE="GPLv3+"
 LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
 
-inherit gettext autotools
+inherit gettext autotools update-alternatives
 
 SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \
            file://0001-Fix-build-with-clang.patch \
@@ -25,3 +25,7 @@
 }
 
 BBCLASSEXTEND = "native nativesdk"
+
+ALTERNATIVE_${PN} = "uudecode uuencode"
+ALTERNATIVE_LINK_NAME[uudecode] = "${bindir}/uudecode"
+ALTERNATIVE_LINK_NAME[uuencode] = "${bindir}/uuencode"
diff --git a/meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.7.0.bb b/meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.8.0.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.7.0.bb
rename to meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.8.0.bb
index ce491da..b79eb7c 100644
--- a/meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.7.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.8.0.bb
@@ -3,7 +3,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
 
-SRCREV = "616caa5d30172b65cc3a06800894c575d70cb8e6"
+SRCREV = "4a9ccf7e38e257feecce0c579a782741254eaeef"
 SRC_URI = "git://github.com/gabime/spdlog.git;protocol=git;branch=v1.x;"
 
 DEPENDS += "fmt"
diff --git a/meta-openembedded/meta-oe/recipes-support/spitools/spitools_git.bb b/meta-openembedded/meta-oe/recipes-support/spitools/spitools_git.bb
index 6257568..06fb82b 100644
--- a/meta-openembedded/meta-oe/recipes-support/spitools/spitools_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/spitools/spitools_git.bb
@@ -4,9 +4,9 @@
 LICENSE="GPLv2"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=8c16666ae6c159876a0ba63099614381"
 
-BPV = "0.8.4"
+BPV = "0.8.5"
 PV = "${BPV}"
-SRCREV = "4a36a84f7df291ddaebd397aecf0c8515256a8e0"
+SRCREV = "3c93b9038a7c4d9de4302ab6f14372e9fa381f3c"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc
index ff6d9d2..2b38f4d 100644
--- a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc
@@ -131,10 +131,6 @@
 
 CONFFILES_${PN} = "${sysconfdir}/${BPN}.conf ${sysconfdir}/scl.conf"
 
-# syslog initscript is handled explicitly because order of
-# update-rc.d and update-alternatives is important
-RDEPENDS_${PN} += " ${@oe.utils.conditional("ONLINE_PACKAGE_MANAGEMENT", "none", "", "update-rc.d", d)}"
-
 RCONFLICTS_${PN} = "busybox-syslog sysklogd rsyslog"
 RCONFLICTS_${PN}-libs = "busybox-syslog sysklogd rsyslog"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-fixes_for_mm_struct.patch b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-fixes_for_mm_struct.patch
deleted file mode 100644
index 1ad5ce5..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-fixes_for_mm_struct.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-From 98070c936931879d2b8e22939724b5a0689721d0 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 18 Aug 2020 17:48:29 +0800
-Subject: [PATCH 1/3] fixes_for_mm_struct
-
-Upstream-Status: Backport [https://www.virtualbox.org/ticket/19644]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- .../Runtime/r0drv/linux/memobj-r0drv-linux.c  | 74 +++++++++++++++++--
- 1 file changed, 67 insertions(+), 7 deletions(-)
-
-diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
-index 37389bcc..cdc7e8e6 100644
---- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
-+++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
-@@ -222,9 +222,17 @@ static void *rtR0MemObjLinuxDoMmap(RTR3PTR R3PtrFixed, size_t cb, size_t uAlignm
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
-         ulAddr = vm_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0);
- #else
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-         down_write(&pTask->mm->mmap_sem);
-+#else
-+        down_write(&pTask->mm->mmap_lock);
-+#endif
-         ulAddr = do_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-         up_write(&pTask->mm->mmap_sem);
-+#else
-+        up_write(&pTask->mm->mmap_lock);
-+#endif
- #endif
-     }
-     else
-@@ -232,9 +240,17 @@ static void *rtR0MemObjLinuxDoMmap(RTR3PTR R3PtrFixed, size_t cb, size_t uAlignm
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
-         ulAddr = vm_mmap(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0);
- #else
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-         down_write(&pTask->mm->mmap_sem);
-+#else
-+        down_write(&pTask->mm->mmap_lock);
-+#endif
-         ulAddr = do_mmap(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-         up_write(&pTask->mm->mmap_sem);
-+#else
-+        up_write(&pTask->mm->mmap_lock);
-+#endif
- #endif
-         if (    !(ulAddr & ~PAGE_MASK)
-             &&  (ulAddr & (uAlignment - 1)))
-@@ -269,13 +285,29 @@ static void rtR0MemObjLinuxDoMunmap(void *pv, size_t cb, struct task_struct *pTa
-     Assert(pTask == current); RT_NOREF_PV(pTask);
-     vm_munmap((unsigned long)pv, cb);
- #elif defined(USE_RHEL4_MUNMAP)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-     down_write(&pTask->mm->mmap_sem);
-+#else
-+    down_write(&pTask->mm->mmap_lock);
-+#endif
-     do_munmap(pTask->mm, (unsigned long)pv, cb, 0); /* should it be 1 or 0? */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-     up_write(&pTask->mm->mmap_sem);
- #else
-+    up_write(&pTask->mm->mmap_lock);
-+#endif
-+#else
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-     down_write(&pTask->mm->mmap_sem);
-+#else
-+    down_write(&pTask->mm->mmap_lock);
-+#endif
-     do_munmap(pTask->mm, (unsigned long)pv, cb);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-     up_write(&pTask->mm->mmap_sem);
-+#else
-+    up_write(&pTask->mm->mmap_lock);
-+#endif
- #endif
- }
- 
-@@ -593,7 +625,11 @@ DECLHIDDEN(int) rtR0MemObjNativeFree(RTR0MEMOBJ pMem)
-                 size_t              iPage;
-                 Assert(pTask);
-                 if (pTask && pTask->mm)
--                    down_read(&pTask->mm->mmap_sem);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-+		    down_read(&pTask->mm->mmap_sem);
-+#else
-+		    down_read(&pTask->mm->mmap_lock);
-+#endif
- 
-                 iPage = pMemLnx->cPages;
-                 while (iPage-- > 0)
-@@ -608,7 +644,11 @@ DECLHIDDEN(int) rtR0MemObjNativeFree(RTR0MEMOBJ pMem)
-                 }
- 
-                 if (pTask && pTask->mm)
--                    up_read(&pTask->mm->mmap_sem);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-+		    up_read(&pTask->mm->mmap_sem);
-+#else
-+		    up_read(&pTask->mm->mmap_lock);
-+#endif
-             }
-             /* else: kernel memory - nothing to do here. */
-             break;
-@@ -1076,7 +1116,11 @@ DECLHIDDEN(int) rtR0MemObjNativeLockUser(PPRTR0MEMOBJINTERNAL ppMem, RTR3PTR R3P
-     papVMAs = (struct vm_area_struct **)RTMemAlloc(sizeof(*papVMAs) * cPages);
-     if (papVMAs)
-     {
--        down_read(&pTask->mm->mmap_sem);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-+	down_read(&pTask->mm->mmap_sem);
-+#else
-+	down_read(&pTask->mm->mmap_lock);
-+#endif
- 
-         /*
-          * Get user pages.
-@@ -1162,7 +1206,11 @@ DECLHIDDEN(int) rtR0MemObjNativeLockUser(PPRTR0MEMOBJINTERNAL ppMem, RTR3PTR R3P
-                 papVMAs[rc]->vm_flags |= VM_DONTCOPY | VM_LOCKED;
-             }
- 
--            up_read(&pTask->mm->mmap_sem);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-+	    up_read(&pTask->mm->mmap_sem);
-+#else
-+	    up_read(&pTask->mm->mmap_lock);
-+#endif
- 
-             RTMemFree(papVMAs);
- 
-@@ -1189,7 +1237,11 @@ DECLHIDDEN(int) rtR0MemObjNativeLockUser(PPRTR0MEMOBJINTERNAL ppMem, RTR3PTR R3P
- #endif
-         }
- 
--        up_read(&pTask->mm->mmap_sem);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-+	up_read(&pTask->mm->mmap_sem);
-+#else
-+	up_read(&pTask->mm->mmap_lock);
-+#endif
- 
-         RTMemFree(papVMAs);
-         rc = VERR_LOCK_FAILED;
-@@ -1604,7 +1656,11 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ p
-             const size_t    cPages    = (offSub + cbSub) >> PAGE_SHIFT;
-             size_t          iPage;
- 
--            down_write(&pTask->mm->mmap_sem);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-+	    down_write(&pTask->mm->mmap_sem);
-+#else
-+	    down_write(&pTask->mm->mmap_lock);
-+#endif
- 
-             rc = VINF_SUCCESS;
-             if (pMemLnxToMap->cPages)
-@@ -1721,7 +1777,11 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ p
-             }
- #endif /* CONFIG_NUMA_BALANCING */
- 
--            up_write(&pTask->mm->mmap_sem);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-+	    up_write(&pTask->mm->mmap_sem);
-+#else
-+	    up_write(&pTask->mm->mmap_lock);
-+#endif
- 
-             if (RT_SUCCESS(rc))
-             {
--- 
-2.18.2
-
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-fixes_for_module_memory.patch b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-fixes_for_module_memory.patch
deleted file mode 100644
index a3cfc3b..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0002-fixes_for_module_memory.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From bb580f7b601e5395a2f8fcb2485387035273320f Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 18 Aug 2020 17:49:34 +0800
-Subject: [PATCH 2/3] fixes_for_module_memory
-
-Upstream-Status: Backport [https://www.virtualbox.org/ticket/19644]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- .../Runtime/r0drv/linux/alloc-r0drv-linux.c    | 18 ++++++++++++++++--
- 1 file changed, 16 insertions(+), 2 deletions(-)
-
-diff --git a/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c b/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c
-index bbb8acc6..45cd34c7 100644
---- a/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c
-+++ b/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c
-@@ -153,6 +153,8 @@ RT_EXPORT_SYMBOL(RTR0MemExecDonate);
- 
- 
- #ifdef RTMEMALLOC_EXEC_VM_AREA
-+
-+
- /**
-  * Allocate executable kernel memory in the module range.
-  *
-@@ -168,7 +170,12 @@ static PRTMEMHDR rtR0MemAllocExecVmArea(size_t cb)
-     struct vm_struct   *pVmArea;
-     size_t              iPage;
- 
-+# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
-+    pVmArea = __get_vm_area_caller(cbAlloc, VM_ALLOC, MODULES_VADDR, MODULES_END,
-+		    		   __builtin_return_address(0));
-+#else
-     pVmArea = __get_vm_area(cbAlloc, VM_ALLOC, MODULES_VADDR, MODULES_END);
-+#endif
-     if (!pVmArea)
-         return NULL;
-     pVmArea->nr_pages = 0;    /* paranoia? */
-@@ -201,14 +208,21 @@ static PRTMEMHDR rtR0MemAllocExecVmArea(size_t cb)
- # endif
-         pVmArea->nr_pages = cPages;
-         pVmArea->pages    = papPages;
--        if (!map_vm_area(pVmArea, PAGE_KERNEL_EXEC,
-+# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
-+	unsigned long start = (unsigned long)pVmArea->addr;
-+	unsigned long size = get_vm_area_size(pVmArea);
-+
-+	if (!map_kernel_range(start, size, PAGE_KERNEL_EXEC, papPages))
-+#else
-+	if (!map_vm_area(pVmArea, PAGE_KERNEL_EXEC,
- # if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
-                          &papPagesIterator
- # else
-                          papPages
- # endif
-                          ))
--        {
-+#endif
-+	{
-             PRTMEMLNXHDREX pHdrEx = (PRTMEMLNXHDREX)pVmArea->addr;
-             pHdrEx->pVmArea     = pVmArea;
-             pHdrEx->pvDummy     = NULL;
--- 
-2.18.2
-
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0003-fixes_for_changes_in_cpu_tlbstate.patch b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0003-fixes_for_changes_in_cpu_tlbstate.patch
deleted file mode 100644
index 6a3e63f..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0003-fixes_for_changes_in_cpu_tlbstate.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 6089974a81b1b44e1d2dfa5af1fdc110dfee40c1 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 18 Aug 2020 17:51:24 +0800
-Subject: [PATCH 3/3] fixes_for_changes_in_cpu_tlbstate
-
-Upstream-Status: Backport [https://www.virtualbox.org/ticket/19644]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
-index c7d0d99a..2e7aa6e1 100644
---- a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
-+++ b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
-@@ -757,12 +757,19 @@ EXPORT_SYMBOL(SUPDrvLinuxIDC);
- RTCCUINTREG VBOXCALL supdrvOSChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask)
- {
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-     RTCCUINTREG uOld = this_cpu_read(cpu_tlbstate.cr4);
-+#else
-+    RTCCUINTREG uOld = __read_cr4();
-+#endif
-     RTCCUINTREG uNew = (uOld & fAndMask) | fOrMask;
-     if (uNew != uOld)
-     {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-         this_cpu_write(cpu_tlbstate.cr4, uNew);
-         __write_cr4(uNew);
-+#endif
-+        ASMSetCR4(uNew);
-     }
- #else
-     RTCCUINTREG uOld = ASMGetCR4();
--- 
-2.18.2
-
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/021-linux-5-8.patch b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/021-linux-5-8.patch
new file mode 100644
index 0000000..9d45750
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/021-linux-5-8.patch
@@ -0,0 +1,5046 @@
+fix Linux 5.8
+
+This is a squashed patch with following upstream revisions:
+
+  r85208
+  r85430
+  r85431
+  r85432
+  r85447 # context required adjustment
+  r85453
+  r85460
+  r85461 # context required adjustment
+  r85500
+  r85501
+  r85503
+  r85504
+  r85505
+  r85506
+  r85507 # context required adjustment
+  r85509
+  r85510
+  r85511
+  r85514
+  r85516
+  r85517
+  r85518
+  r85525
+  r85526
+  r85527
+  r85533
+  r85534
+  r85540
+  r85541
+  r85545
+  r85546
+  r85552
+  r85555
+  r85556
+  r85590
+
+Thanks a lot to loqs for his hard work on FS#67488!
+
+--- a/src/VBox/Runtime/r0drv/linux/time-r0drv-linux.c
++++ b/src/VBox/Runtime/r0drv/linux/time-r0drv-linux.c
+@@ -31,6 +31,12 @@
+ #define LOG_GROUP RTLOGGROUP_TIME
+ #include "the-linux-kernel.h"
+ #include "internal/iprt.h"
++/* Make sure we have the setting functions we need for RTTimeNow: */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16)
++# define RTTIME_INCL_TIMEVAL
++#elif LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
++# define RTTIME_INCL_TIMESPEC
++#endif
+ #include <iprt/time.h>
+ #include <iprt/asm.h>
+ 
+@@ -181,22 +187,19 @@ RT_EXPORT_SYMBOL(RTTimeSystemMilliTS);
+ RTDECL(PRTTIMESPEC) RTTimeNow(PRTTIMESPEC pTime)
+ {
+     IPRT_LINUX_SAVE_EFL_AC();
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16)
+-/* On Linux 4.20, time.h includes time64.h and we have to use 64-bit times. */
+-# ifdef _LINUX_TIME64_H
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0)
+     struct timespec64 Ts;
+-    ktime_get_real_ts64(&Ts);
+-# else
+-    struct timespec Ts;
+-    ktime_get_real_ts(&Ts);
+-# endif
++    ktime_get_real_ts64(&Ts);   /* ktime_get_real_ts64 was added as a macro in 3.17, function since 4.18. */
+     IPRT_LINUX_RESTORE_EFL_AC();
+-# ifdef _LINUX_TIME64_H
+     return RTTimeSpecSetTimespec64(pTime, &Ts);
+-# else
++
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16)
++    struct timespec Ts;
++    ktime_get_real_ts(&Ts);     /* ktime_get_real_ts was removed in Linux 4.20. */
++    IPRT_LINUX_RESTORE_EFL_AC();
+     return RTTimeSpecSetTimespec(pTime, &Ts);
+-# endif
+-#else   /* < 2.6.16 */
++
++#else /* < 2.6.16 */
+     struct timeval Tv;
+     do_gettimeofday(&Tv);
+     IPRT_LINUX_RESTORE_EFL_AC();
+--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
++++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
+@@ -52,6 +52,14 @@
+ # define PAGE_READONLY_EXEC PAGE_READONLY
+ #endif
+ 
++/** @def IPRT_USE_ALLOC_VM_AREA_FOR_EXEC
++ * Whether we use alloc_vm_area (3.2+) for executable memory.
++ * This is a must for 5.8+, but we enable it all the way back to 3.2.x for
++ * better W^R compliance (fExecutable flag). */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) || defined(DOXYGEN_RUNNING)
++# define IPRT_USE_ALLOC_VM_AREA_FOR_EXEC
++#endif
++
+ /*
+  * 2.6.29+ kernels don't work with remap_pfn_range() anymore because
+  * track_pfn_vma_new() is apparently not defined for non-RAM pages.
+@@ -72,12 +80,27 @@
+ # define gfp_t  unsigned
+ #endif
+ 
++/*
++ * Wrappers around mmap_lock/mmap_sem difference.
++ */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
++# define LNX_MM_DOWN_READ(a_pMm)    down_read(&(a_pMm)->mmap_lock)
++# define LNX_MM_UP_READ(a_pMm)        up_read(&(a_pMm)->mmap_lock)
++# define LNX_MM_DOWN_WRITE(a_pMm)   down_write(&(a_pMm)->mmap_lock)
++# define LNX_MM_UP_WRITE(a_pMm)       up_write(&(a_pMm)->mmap_lock)
++#else
++# define LNX_MM_DOWN_READ(a_pMm)    down_read(&(a_pMm)->mmap_sem)
++# define LNX_MM_UP_READ(a_pMm)        up_read(&(a_pMm)->mmap_sem)
++# define LNX_MM_DOWN_WRITE(a_pMm)   down_write(&(a_pMm)->mmap_sem)
++# define LNX_MM_UP_WRITE(a_pMm)       up_write(&(a_pMm)->mmap_sem)
++#endif
++
+ 
+ /*********************************************************************************************************************************
+ *   Structures and Typedefs                                                                                                      *
+ *********************************************************************************************************************************/
+ /**
+- * The Darwin version of the memory object structure.
++ * The Linux version of the memory object structure.
+  */
+ typedef struct RTR0MEMOBJLNX
+ {
+@@ -90,11 +113,20 @@ typedef struct RTR0MEMOBJLNX
+     bool                fExecutable;
+     /** Set if we've vmap'ed the memory into ring-0. */
+     bool                fMappedToRing0;
++#ifdef IPRT_USE_ALLOC_VM_AREA_FOR_EXEC
++    /** Return from alloc_vm_area() that we now need to use for executable
++     *  memory. */
++    struct vm_struct   *pArea;
++    /** PTE array that goes along with pArea (must be freed). */
++    pte_t             **papPtesForArea;
++#endif
+     /** The pages in the apPages array. */
+     size_t              cPages;
+     /** Array of struct page pointers. (variable size) */
+     struct page        *apPages[1];
+-} RTR0MEMOBJLNX, *PRTR0MEMOBJLNX;
++} RTR0MEMOBJLNX;
++/** Pointer to the linux memory object. */
++typedef RTR0MEMOBJLNX *PRTR0MEMOBJLNX;
+ 
+ 
+ static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx);
+@@ -182,7 +214,7 @@ static pgprot_t rtR0MemObjLinuxConvertPr
+  * Worker for rtR0MemObjNativeReserveUser and rtR0MemObjNativerMapUser that creates
+  * an empty user space mapping.
+  *
+- * We acquire the mmap_sem of the task!
++ * We acquire the mmap_sem/mmap_lock of the task!
+  *
+  * @returns Pointer to the mapping.
+  *          (void *)-1 on failure.
+@@ -222,9 +254,9 @@ static void *rtR0MemObjLinuxDoMmap(RTR3P
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
+         ulAddr = vm_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0);
+ #else
+-        down_write(&pTask->mm->mmap_sem);
++        LNX_MM_DOWN_WRITE(pTask->mm);
+         ulAddr = do_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0);
+-        up_write(&pTask->mm->mmap_sem);
++        LNX_MM_UP_WRITE(pTask->mm);
+ #endif
+     }
+     else
+@@ -232,9 +264,9 @@ static void *rtR0MemObjLinuxDoMmap(RTR3P
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
+         ulAddr = vm_mmap(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0);
+ #else
+-        down_write(&pTask->mm->mmap_sem);
++        LNX_MM_DOWN_WRITE(pTask->mm);
+         ulAddr = do_mmap(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0);
+-        up_write(&pTask->mm->mmap_sem);
++        LNX_MM_UP_WRITE(pTask->mm);
+ #endif
+         if (    !(ulAddr & ~PAGE_MASK)
+             &&  (ulAddr & (uAlignment - 1)))
+@@ -257,7 +289,7 @@ static void *rtR0MemObjLinuxDoMmap(RTR3P
+  * Worker that destroys a user space mapping.
+  * Undoes what rtR0MemObjLinuxDoMmap did.
+  *
+- * We acquire the mmap_sem of the task!
++ * We acquire the mmap_sem/mmap_lock of the task!
+  *
+  * @param   pv          The ring-3 mapping.
+  * @param   cb          The size of the mapping.
+@@ -269,13 +301,13 @@ static void rtR0MemObjLinuxDoMunmap(void
+     Assert(pTask == current); RT_NOREF_PV(pTask);
+     vm_munmap((unsigned long)pv, cb);
+ #elif defined(USE_RHEL4_MUNMAP)
+-    down_write(&pTask->mm->mmap_sem);
++    LNX_MM_DOWN_WRITE(pTask->mm);
+     do_munmap(pTask->mm, (unsigned long)pv, cb, 0); /* should it be 1 or 0? */
+-    up_write(&pTask->mm->mmap_sem);
++    LNX_MM_UP_WRITE(pTask->mm);
+ #else
+-    down_write(&pTask->mm->mmap_sem);
++    LNX_MM_DOWN_WRITE(pTask->mm);
+     do_munmap(pTask->mm, (unsigned long)pv, cb);
+-    up_write(&pTask->mm->mmap_sem);
++    LNX_MM_UP_WRITE(pTask->mm);
+ #endif
+ }
+ 
+@@ -520,15 +552,49 @@ static int rtR0MemObjLinuxVMap(PRTR0MEMO
+             pgprot_val(fPg) |= _PAGE_NX;
+ # endif
+ 
++# ifdef IPRT_USE_ALLOC_VM_AREA_FOR_EXEC
++        if (fExecutable)
++        {
++            pte_t **papPtes = (pte_t **)kmalloc_array(pMemLnx->cPages, sizeof(papPtes[0]), GFP_KERNEL);
++            if (papPtes)
++            {
++                pMemLnx->pArea = alloc_vm_area(pMemLnx->Core.cb, papPtes); /* Note! pArea->nr_pages is not set. */
++                if (pMemLnx->pArea)
++                {
++                    size_t i;
++                    Assert(pMemLnx->pArea->size >= pMemLnx->Core.cb);   /* Note! includes guard page. */
++                    Assert(pMemLnx->pArea->addr);
++#  ifdef _PAGE_NX
++                    pgprot_val(fPg) |= _PAGE_NX; /* Uses RTR0MemObjProtect to clear NX when memory ready, W^X fashion. */
++#  endif
++                    pMemLnx->papPtesForArea = papPtes;
++                    for (i = 0; i < pMemLnx->cPages; i++)
++                        *papPtes[i] = mk_pte(pMemLnx->apPages[i], fPg);
++                    pMemLnx->Core.pv = pMemLnx->pArea->addr;
++                    pMemLnx->fMappedToRing0 = true;
++                }
++                else
++                {
++                    kfree(papPtes);
++                    rc = VERR_MAP_FAILED;
++                }
++            }
++            else
++                rc = VERR_MAP_FAILED;
++        }
++        else
++# endif
++        {
+ # ifdef VM_MAP
+-        pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, VM_MAP, fPg);
++            pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, VM_MAP, fPg);
+ # else
+-        pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, VM_ALLOC, fPg);
++            pMemLnx->Core.pv = vmap(&pMemLnx->apPages[0], pMemLnx->cPages, VM_ALLOC, fPg);
+ # endif
+-        if (pMemLnx->Core.pv)
+-            pMemLnx->fMappedToRing0 = true;
+-        else
+-            rc = VERR_MAP_FAILED;
++            if (pMemLnx->Core.pv)
++                pMemLnx->fMappedToRing0 = true;
++            else
++                rc = VERR_MAP_FAILED;
++        }
+ #else   /* < 2.4.22 */
+         rc = VERR_NOT_SUPPORTED;
+ #endif
+@@ -554,6 +620,22 @@ static int rtR0MemObjLinuxVMap(PRTR0MEMO
+ static void rtR0MemObjLinuxVUnmap(PRTR0MEMOBJLNX pMemLnx)
+ {
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 22)
++# ifdef IPRT_USE_ALLOC_VM_AREA_FOR_EXEC
++    if (pMemLnx->pArea)
++    {
++#  if 0
++        pte_t **papPtes = pMemLnx->papPtesForArea;
++        size_t  i;
++        for (i = 0; i < pMemLnx->cPages; i++)
++            *papPtes[i] = 0;
++#  endif
++        free_vm_area(pMemLnx->pArea);
++        kfree(pMemLnx->papPtesForArea);
++        pMemLnx->pArea = NULL;
++        pMemLnx->papPtesForArea = NULL;
++    }
++    else
++# endif
+     if (pMemLnx->fMappedToRing0)
+     {
+         Assert(pMemLnx->Core.pv);
+@@ -593,7 +675,7 @@ DECLHIDDEN(int) rtR0MemObjNativeFree(RTR
+                 size_t              iPage;
+                 Assert(pTask);
+                 if (pTask && pTask->mm)
+-                    down_read(&pTask->mm->mmap_sem);
++                    LNX_MM_DOWN_READ(pTask->mm);
+ 
+                 iPage = pMemLnx->cPages;
+                 while (iPage-- > 0)
+@@ -608,7 +690,7 @@ DECLHIDDEN(int) rtR0MemObjNativeFree(RTR
+                 }
+ 
+                 if (pTask && pTask->mm)
+-                    up_read(&pTask->mm->mmap_sem);
++                    LNX_MM_UP_READ(pTask->mm);
+             }
+             /* else: kernel memory - nothing to do here. */
+             break;
+@@ -1076,7 +1158,7 @@ DECLHIDDEN(int) rtR0MemObjNativeLockUser
+     papVMAs = (struct vm_area_struct **)RTMemAlloc(sizeof(*papVMAs) * cPages);
+     if (papVMAs)
+     {
+-        down_read(&pTask->mm->mmap_sem);
++        LNX_MM_DOWN_READ(pTask->mm);
+ 
+         /*
+          * Get user pages.
+@@ -1162,7 +1244,7 @@ DECLHIDDEN(int) rtR0MemObjNativeLockUser
+                 papVMAs[rc]->vm_flags |= VM_DONTCOPY | VM_LOCKED;
+             }
+ 
+-            up_read(&pTask->mm->mmap_sem);
++            LNX_MM_UP_READ(pTask->mm);
+ 
+             RTMemFree(papVMAs);
+ 
+@@ -1189,7 +1271,7 @@ DECLHIDDEN(int) rtR0MemObjNativeLockUser
+ #endif
+         }
+ 
+-        up_read(&pTask->mm->mmap_sem);
++        LNX_MM_UP_READ(pTask->mm);
+ 
+         RTMemFree(papVMAs);
+         rc = VERR_LOCK_FAILED;
+@@ -1422,6 +1504,7 @@ DECLHIDDEN(int) rtR0MemObjNativeMapKerne
+              * Use vmap - 2.4.22 and later.
+              */
+             pgprot_t fPg = rtR0MemObjLinuxConvertProt(fProt, true /* kernel */);
++            /** @todo We don't really care too much for EXEC here... 5.8 always adds NX. */
+             Assert(((offSub + cbSub) >> PAGE_SHIFT) <= pMemLnxToMap->cPages);
+ # ifdef VM_MAP
+             pMemLnx->Core.pv = vmap(&pMemLnxToMap->apPages[offSub >> PAGE_SHIFT], cbSub >> PAGE_SHIFT, VM_MAP, fPg);
+@@ -1604,7 +1687,7 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(
+             const size_t    cPages    = (offSub + cbSub) >> PAGE_SHIFT;
+             size_t          iPage;
+ 
+-            down_write(&pTask->mm->mmap_sem);
++            LNX_MM_DOWN_WRITE(pTask->mm);
+ 
+             rc = VINF_SUCCESS;
+             if (pMemLnxToMap->cPages)
+@@ -1721,7 +1804,7 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(
+             }
+ #endif /* CONFIG_NUMA_BALANCING */
+ 
+-            up_write(&pTask->mm->mmap_sem);
++            LNX_MM_UP_WRITE(pTask->mm);
+ 
+             if (RT_SUCCESS(rc))
+             {
+@@ -1753,6 +1836,29 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(
+ 
+ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt)
+ {
++# ifdef IPRT_USE_ALLOC_VM_AREA_FOR_EXEC
++    /*
++     * Currently only supported when we've got addresses PTEs from the kernel.
++     */
++    PRTR0MEMOBJLNX pMemLnx = (PRTR0MEMOBJLNX)pMem;
++    if (pMemLnx->pArea && pMemLnx->papPtesForArea)
++    {
++        pgprot_t const  fPg     = rtR0MemObjLinuxConvertProt(fProt, true /*fKernel*/);
++        size_t const    cPages  = (offSub + cbSub) >> PAGE_SHIFT;
++        pte_t         **papPtes = pMemLnx->papPtesForArea;
++        size_t          i;
++
++        for (i = offSub >> PAGE_SHIFT; i < cPages; i++)
++        {
++            set_pte(papPtes[i], mk_pte(pMemLnx->apPages[i], fPg));
++        }
++        preempt_disable();
++        __flush_tlb_all();
++        preempt_enable();
++        return VINF_SUCCESS;
++    }
++# endif
++
+     NOREF(pMem);
+     NOREF(offSub);
+     NOREF(cbSub);
+--- a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
++++ b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
+@@ -144,9 +144,9 @@ static int force_async_tsc = 0;
+  * Memory for the executable memory heap (in IPRT).
+  */
+ # ifdef DEBUG
+-#  define EXEC_MEMORY_SIZE   8388608    /* 8 MB */
++#  define EXEC_MEMORY_SIZE   10485760   /* 10 MB */
+ # else
+-#  define EXEC_MEMORY_SIZE   2097152    /* 2 MB */
++#  define EXEC_MEMORY_SIZE   8388608    /* 8 MB */
+ # endif
+ extern uint8_t g_abExecMemory[EXEC_MEMORY_SIZE];
+ # ifndef VBOX_WITH_TEXT_MODMEM_HACK
+@@ -756,20 +756,25 @@ EXPORT_SYMBOL(SUPDrvLinuxIDC);
+ 
+ RTCCUINTREG VBOXCALL supdrvOSChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask)
+ {
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0)
+-    RTCCUINTREG uOld = this_cpu_read(cpu_tlbstate.cr4);
+-    RTCCUINTREG uNew = (uOld & fAndMask) | fOrMask;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
++    RTCCUINTREG const uOld = __read_cr4();
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0)
++    RTCCUINTREG const uOld = this_cpu_read(cpu_tlbstate.cr4);
++#else
++    RTCCUINTREG const uOld = ASMGetCR4();
++#endif
++    RTCCUINTREG const uNew = (uOld & fAndMask) | fOrMask;
+     if (uNew != uOld)
+     {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
++        ASMSetCR4(uNew);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0)
+         this_cpu_write(cpu_tlbstate.cr4, uNew);
+         __write_cr4(uNew);
+-    }
+ #else
+-    RTCCUINTREG uOld = ASMGetCR4();
+-    RTCCUINTREG uNew = (uOld & fAndMask) | fOrMask;
+-    if (uNew != uOld)
+         ASMSetCR4(uNew);
+ #endif
++    }
+     return uOld;
+ }
+ 
+--- a/src/VBox/Additions/linux/sharedfolders/vfsmod.c
++++ b/src/VBox/Additions/linux/sharedfolders/vfsmod.c
+@@ -52,7 +52,7 @@
+ #endif
+ #include <linux/seq_file.h>
+ #include <linux/vfs.h>
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 62)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 62) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
+ # include <linux/vermagic.h>
+ #endif
+ #include <VBox/err.h>
+--- a/Config.kmk
++++ b/Config.kmk
+@@ -4462,15 +4462,20 @@ endif # pe
+ 
+ ifeq ($(VBOX_LDR_FMT),elf)
+ TEMPLATE_VBoxR0_TOOL                = $(VBOX_GCC_TOOL)
+-TEMPLATE_VBoxR0_CFLAGS              = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C)   $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-hidden) -std=gnu99 $(VBOX_GCC_IPRT_FMT_CHECK)
+-TEMPLATE_VBoxR0_CXXFLAGS            = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK)
+-TEMPLATE_VBoxR0_CFLAGS.amd64        = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fasynchronous-unwind-tables -ffreestanding
+-TEMPLATE_VBoxR0_CXXFLAGS.amd64      = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fasynchronous-unwind-tables
++TEMPLATE_VBoxR0_CFLAGS              = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) \
++	$(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions \
++	$(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-hidden) -std=gnu99 $(VBOX_GCC_IPRT_FMT_CHECK)
++TEMPLATE_VBoxR0_CXXFLAGS            = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) \
++	$(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions \
++	$(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) \
++	-fno-rtti $(VBOX_GCC_std) $(VBOX_GCC_IPRT_FMT_CHECK)
+++TEMPLATE_VBoxR0_CFLAGS.amd64        = -m64 -mno-red-zone -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fasynchronous-unwind-tables -ffreestanding
+++TEMPLATE_VBoxR0_CXXFLAGS.amd64      = -m64 -mno-red-zone -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fasynchronous-unwind-tables
+ TEMPLATE_VBoxR0_CXXFLAGS.freebsd    = -ffreestanding
+  if $(VBOX_GCC_VERSION_CC) < 30400
+   TEMPLATE_VBoxR0_DEFS             += RT_WITHOUT_PRAGMA_ONCE
+  endif
+-ifeq ($(KBUILD_TARGET),solaris)
++ ifeq ($(KBUILD_TARGET),solaris)
+  TEMPLATE_VBoxR0_LDFLAGS            = -r
+  TEMPLATE_VBoxR0_LDFLAGS.solaris    = -u _init -u _info
+  TEMPLATE_VBoxR0_LIBS.solaris       = \
+@@ -4481,19 +4486,32 @@ ifeq ($(KBUILD_TARGET),solaris)
+  endif
+  # Solaris driver signing.
+  TEMPLATE_VBoxR0_POST_CMDS          = $(VBOX_SIGN_DRIVER_CMDS)
+-else
++ else
+  TEMPLATE_VBoxR0_LDFLAGS            = -nostdlib -Bsymbolic -g
+  ## @todo WTF doesn't the globals work? Debug info is supposed to be split everywhere. GRR
+  TEMPLATE_VBoxR0_LD_DEBUG           = split
+-endif
+-ifn1of ($(KBUILD_TARGET),solaris freebsd)
++ endif
++ if1of ($(KBUILD_TARGET), linux)
++VBOX_WITH_VBOXR0_AS_DLL = 1
++TEMPLATE_VBoxR0_DLLSUFF             = .r0
++TEMPLATE_VBoxR0_CFLAGS             += -fPIC
++TEMPLATE_VBoxR0_CXXFLAGS           += -fPIC
++TEMPLATE_VBoxR0_LDFLAGS            +=
++TEMPLATE_VBoxR0_DTRACE_HDR_FLAGS   += --pic
++TEMPLATE_VBoxR0_DTRACE_OBJ_FLAGS   += --pic
++ else
++TEMPLATE_VBoxR0_CFLAGS.amd64       += -mcmodel=kernel
++TEMPLATE_VBoxR0_CXXFLAGS.amd64     += -mcmodel=kernel
++ endif
++ ifn1of ($(KBUILD_TARGET),solaris freebsd)
+  TEMPLATE_VBoxR0_LIBS               = \
+ 	$(VBOX_GCC_LIBGCC) # intrinsics
+-endif
+-if1of ($(KBUILD_TARGET),linux)
+- TEMPLATE_VBoxR0_POST_CMDS          =  $(if $(eq $(tool_do),LINK_SYSMOD),if readelf -S $(out)|grep -q "[cd]tors"; then echo "Found ctors/dtors in $(out)!"; exit 1; fi)
+-endif
+-endif
++ endif
++ if1of ($(KBUILD_TARGET),linux)
++ TEMPLATE_VBoxR0_POST_CMDS         += $(NLTAB)\
++ 	$(if $(eq $(tool_do),LINK_SYSMOD),if readelf -S $(out)|grep -q "[cd]tors"; then echo "Found ctors/dtors in $(out)!"; exit 1; fi)
++ endif
++endif # elf
+ 
+ ifeq ($(VBOX_LDR_FMT),macho)
+ TEMPLATE_VBoxR0_TOOL                = $(VBOX_GCC_TOOL)
+--- a/tools/bin/gen-slickedit-workspace.sh
++++ b/tools/bin/gen-slickedit-workspace.sh
+@@ -496,11 +496,13 @@ my_generate_usercpp_h()
+     #
+     # Probe the slickedit user config, picking the most recent version.
+     #
++    MY_VSLICK_DB_OLD=
+     if test -z "${MY_SLICK_CONFIG}"; then
+         if test -d "${HOME}/Library/Application Support/SlickEdit"; then
+             MY_SLICKDIR_="${HOME}/Library/Application Support/SlickEdit"
+             MY_USERCPP_H="unxcpp.h"
+             MY_VSLICK_DB="vslick.sta" # was .stu earlier, 24 is using .sta.
++            MY_VSLICK_DB_OLD="vslick.stu"
+         elif test -d "${HOMEDRIVE}${HOMEPATH}/Documents/My SlickEdit Config"; then
+             MY_SLICKDIR_="${HOMEDRIVE}${HOMEPATH}/Documents/My SlickEdit Config"
+             MY_USERCPP_H="usercpp.h"
+@@ -508,7 +510,8 @@ my_generate_usercpp_h()
+         else
+             MY_SLICKDIR_="${HOME}/.slickedit"
+             MY_USERCPP_H="unxcpp.h"
+-            MY_VSLICK_DB="vslick.stu"
++            MY_VSLICK_DB="vslick.sta"
++            MY_VSLICK_DB_OLD="vslick.stu"
+         fi
+     else
+         MY_SLICKDIR_="${MY_SLICK_CONFIG}"
+@@ -517,7 +520,8 @@ my_generate_usercpp_h()
+             MY_VSLICK_DB="vslick.sta"
+         else
+             MY_USERCPP_H="unxcpp.h"
+-            MY_VSLICK_DB="vslick.stu"
++            MY_VSLICK_DB="vslick.sta"
++            MY_VSLICK_DB_OLD="vslick.stu"
+         fi
+         # MacOS: Implement me!
+     fi
+@@ -526,7 +530,9 @@ my_generate_usercpp_h()
+     MY_VER="0.0.0"
+     for subdir in "${MY_SLICKDIR_}/"*;
+     do
+-        if test -f "${subdir}/${MY_USERCPP_H}"  -o  -f "${subdir}/${MY_VSLICK_DB}"; then
++        if test    -f "${subdir}/${MY_USERCPP_H}"  \
++                -o -f "${subdir}/${MY_VSLICK_DB}" \
++                -o '(' -n "${MY_VSLICK_DB_OLD}" -a -f "${subdir}/${MY_VSLICK_DB_OLD}" ')'; then
+             MY_CUR_VER_NUM=0
+             MY_CUR_VER=`echo "${subdir}" | ${MY_SED} -e 's,^.*/,,g'`
+ 
+@@ -561,6 +567,7 @@ my_generate_usercpp_h()
+         echo "Found SlickEdit v${MY_VER} preprocessor file: ${MY_USERCPP_H_FULL}"
+     else
+         echo "Failed to locate SlickEdit preprocessor file. You need to manually merge ${MY_USERCPP_H}."
++        echo "dbg: MY_SLICKDIR=${MY_SLICKDIR}  MY_USERCPP_H_FULL=${MY_USERCPP_H_FULL}"
+         MY_USERCPP_H_FULL=""
+     fi
+ 
+@@ -717,6 +724,10 @@ EOF
+ #define RTASN1TYPE_STANDARD_PROTOTYPES_NO_GET_CORE(a_TypeNm, a_DeclMacro, a_ImplExtNm) int  a_ImplExtNm##_Init(P##a_TypeNm pThis, PCRTASN1ALLOCATORVTABLE pAllocator); int  a_ImplExtNm##_Clone(P##a_TypeNm pThis, PC##a_TypeNm) pSrc, PCRTASN1ALLOCATORVTABLE pAllocator); void a_ImplExtNm##_Delete(P##a_TypeNm pThis); int  a_ImplExtNm##_Enum(P##a_TypeNm pThis, PFNRTASN1ENUMCALLBACK pfnCallback, uint32_t uDepth, void *pvUser); int  a_ImplExtNm##_Compare(PC##a_TypeNm) pLeft, PC##a_TypeNm pRight); int  a_ImplExtNm##_DecodeAsn1(PRTASN1CURSOR pCursor, uint32_t fFlags, P##a_TypeNm pThis, const char *pszErrorTag); int  a_ImplExtNm##_CheckSanity(PC##a_TypeNm pThis, uint32_t fFlags, PRTERRINFO pErrInfo, const char *pszErrorTag)
+ #define RTASN1TYPE_STANDARD_PROTOTYPES(a_TypeNm, a_DeclMacro, a_ImplExtNm, a_Asn1CoreNm) inline PRTASN1CORE a_ImplExtNm##_GetAsn1Core(PC##a_TypeNm pThis) { return (PRTASN1CORE)&pThis->a_Asn1CoreNm; } inline bool a_ImplExtNm##_IsPresent(PC##a_TypeNm pThis) { return pThis && RTASN1CORE_IS_PRESENT(&pThis->a_Asn1CoreNm); } RTASN1TYPE_STANDARD_PROTOTYPES_NO_GET_CORE(a_TypeNm, a_DeclMacro, a_ImplExtNm)
+ 
++#define RTLDRELF_NAME(name)             rtldrELF64##name
++#define RTLDRELF_SUFF(name)             name##64
++#define RTLDRELF_MID(pre,suff)          pre##64##suff
++
+ #define BS3_DECL(type)                  type
+ #define BS3_DECL_CALLBACK(type)         type
+ #define TMPL_NM(name)                   name##_mmm
+--- a/include/iprt/asmdefs.mac
++++ b/include/iprt/asmdefs.mac
+@@ -841,18 +841,18 @@ size NAME(%1 %+ _EndProc)   0
+ ; is defined and RT_WITHOUT_NOCRT_WRAPPERS isn't.
+ ;
+ %macro RT_NOCRT_BEGINPROC 1
+-%ifdef RT_WITH_NOCRT_ALIASES
+-BEGINPROC RT_NOCRT(%1)
+-%ifdef ASM_FORMAT_ELF
++ %ifdef RT_WITH_NOCRT_ALIASES
++BEGINPROC_EXPORTED RT_NOCRT(%1)
++  %ifdef ASM_FORMAT_ELF
+ global NAME(%1)
+ weak NAME(%1)
+ NAME(%1):
+-%else
++  %else
+ GLOBALNAME %1
+-%endif
+-%else  ; !RT_WITH_NOCRT_ALIASES
+-BEGINPROC RT_NOCRT(%1)
+-%endif ; !RT_WITH_NOCRT_ALIASES
++  %endif
++ %else  ; !RT_WITH_NOCRT_ALIASES
++BEGINPROC_EXPORTED RT_NOCRT(%1)
++ %endif ; !RT_WITH_NOCRT_ALIASES
+ %endmacro ; RT_NOCRT_BEGINPROC
+ 
+ %ifdef RT_WITH_NOCRT_ALIASES
+--- a/src/VBox/Runtime/testcase/tstLdr-4.cpp
++++ b/src/VBox/Runtime/testcase/tstLdr-4.cpp
+@@ -35,9 +35,9 @@
+ #include <iprt/assert.h>
+ #include <iprt/param.h>
+ #include <iprt/path.h>
+-#include <iprt/initterm.h>
+ #include <iprt/err.h>
+ #include <iprt/string.h>
++#include <iprt/test.h>
+ 
+ #include <VBox/sup.h>
+ 
+@@ -45,8 +45,9 @@
+ /*********************************************************************************************************************************
+ *   Global Variables                                                                                                             *
+ *********************************************************************************************************************************/
+-static SUPGLOBALINFOPAGE g_MyGip = { SUPGLOBALINFOPAGE_MAGIC, SUPGLOBALINFOPAGE_VERSION, SUPGIPMODE_INVARIANT_TSC, 42 };
+-static PSUPGLOBALINFOPAGE g_pMyGip = &g_MyGip;
++static RTTEST               g_hTest;
++static SUPGLOBALINFOPAGE    g_MyGip = { SUPGLOBALINFOPAGE_MAGIC, SUPGLOBALINFOPAGE_VERSION, SUPGIPMODE_INVARIANT_TSC, 42 };
++static PSUPGLOBALINFOPAGE   g_pMyGip = &g_MyGip;
+ 
+ extern "C" DECLEXPORT(int) DisasmTest1(void);
+ 
+@@ -58,6 +59,60 @@ static DECLCALLBACK(int) testEnumSegment
+              "     link=%RTptr LB %RTptr align=%RTptr fProt=%#x offFile=%RTfoff\n"
+              , *piSeg, pSeg->RVA, pSeg->cbMapped, pSeg->pszName,
+              pSeg->LinkAddress, pSeg->cb, pSeg->Alignment, pSeg->fProt, pSeg->offFile);
++
++    if (pSeg->RVA != NIL_RTLDRADDR)
++    {
++        RTTESTI_CHECK(pSeg->cbMapped != NIL_RTLDRADDR);
++        RTTESTI_CHECK(pSeg->cbMapped >= pSeg->cb);
++    }
++    else
++    {
++        RTTESTI_CHECK(pSeg->cbMapped == NIL_RTLDRADDR);
++    }
++
++    /*
++     * Do some address conversion tests:
++     */
++    if (pSeg->cbMapped != NIL_RTLDRADDR)
++    {
++        /* RTLdrRvaToSegOffset: */
++        uint32_t    iSegConv   = ~(uint32_t)42;
++        RTLDRADDR   offSegConv = ~(RTLDRADDR)22;
++        int rc = RTLdrRvaToSegOffset(hLdrMod, pSeg->RVA, &iSegConv, &offSegConv);
++        if (RT_FAILURE(rc))
++            RTTestIFailed("RTLdrRvaToSegOffset failed on Seg #%u / RVA %#RTptr: %Rrc", *piSeg, pSeg->RVA, rc);
++        else if (iSegConv != *piSeg || offSegConv != 0)
++                RTTestIFailed("RTLdrRvaToSegOffset on Seg #%u / RVA %#RTptr returned: iSegConv=%#x offSegConv=%RTptr, expected %#x and 0",
++                              *piSeg, pSeg->RVA, iSegConv, offSegConv, *piSeg);
++
++        /* RTLdrSegOffsetToRva: */
++        RTLDRADDR uRvaConv = ~(RTLDRADDR)22;
++        rc = RTLdrSegOffsetToRva(hLdrMod, *piSeg, 0, &uRvaConv);
++        if (RT_FAILURE(rc))
++            RTTestIFailed("RTLdrSegOffsetToRva failed on Seg #%u / off 0: %Rrc", *piSeg, rc);
++        else if (uRvaConv != pSeg->RVA)
++            RTTestIFailed("RTLdrSegOffsetToRva on Seg #%u / off 0 returned: %RTptr, expected %RTptr", *piSeg, uRvaConv, pSeg->RVA);
++
++        /* RTLdrLinkAddressToRva: */
++        uRvaConv = ~(RTLDRADDR)22;
++        rc = RTLdrLinkAddressToRva(hLdrMod, pSeg->LinkAddress, &uRvaConv);
++        if (RT_FAILURE(rc))
++            RTTestIFailed("RTLdrLinkAddressToRva failed on Seg #%u / %RTptr: %Rrc", *piSeg, pSeg->LinkAddress, rc);
++        else if (uRvaConv != pSeg->RVA)
++            RTTestIFailed("RTLdrLinkAddressToRva on Seg #%u / %RTptr returned: %RTptr, expected %RTptr",
++                          *piSeg, pSeg->LinkAddress, uRvaConv, pSeg->RVA);
++
++        /* RTLdrLinkAddressToSegOffset: */
++        iSegConv   = ~(uint32_t)42;
++        offSegConv = ~(RTLDRADDR)22;
++        rc = RTLdrLinkAddressToSegOffset(hLdrMod, pSeg->LinkAddress, &iSegConv, &offSegConv);
++        if (RT_FAILURE(rc))
++            RTTestIFailed("RTLdrLinkAddressToSegOffset failed on Seg #%u / %#RTptr: %Rrc", *piSeg, pSeg->LinkAddress, rc);
++        else if (iSegConv != *piSeg || offSegConv != 0)
++                RTTestIFailed("RTLdrLinkAddressToSegOffset on Seg #%u / %#RTptr returned: iSegConv=%#x offSegConv=%RTptr, expected %#x and 0",
++                              *piSeg, pSeg->LinkAddress, iSegConv, offSegConv, *piSeg);
++    }
++
+     *piSeg += 1;
+     RT_NOREF(hLdrMod);
+     return VINF_SUCCESS;
+@@ -125,12 +180,12 @@ static DECLCALLBACK(int) testGetImport(R
+  * regions the for compare usage. The third is loaded into one
+  * and then relocated between the two and other locations a few times.
+  *
+- * @returns number of errors.
+  * @param   pszFilename     The file to load the mess with.
+  */
+-static int testLdrOne(const char *pszFilename)
++static void testLdrOne(const char *pszFilename)
+ {
+-    int             cErrors = 0;
++    RTTestSub(g_hTest, RTPathFilename(pszFilename));
++
+     size_t          cbImage = 0;
+     struct Load
+     {
+@@ -155,9 +210,8 @@ static int testLdrOne(const char *pszFil
+         rc = RTLdrOpen(pszFilename, 0, RTLDRARCH_WHATEVER, &aLoads[i].hLdrMod);
+         if (RT_FAILURE(rc))
+         {
+-            RTPrintf("tstLdr-4: Failed to open '%s'/%d, rc=%Rrc. aborting test.\n", pszFilename, i, rc);
++            RTTestIFailed("tstLdr-4: Failed to open '%s'/%d, rc=%Rrc. aborting test.", pszFilename, i, rc);
+             Assert(aLoads[i].hLdrMod == NIL_RTLDRMOD);
+-            cErrors++;
+             break;
+         }
+ 
+@@ -165,8 +219,7 @@ static int testLdrOne(const char *pszFil
+         size_t cb = RTLdrSize(aLoads[i].hLdrMod);
+         if (cbImage && cb != cbImage)
+         {
+-            RTPrintf("tstLdr-4: Size mismatch '%s'/%d. aborting test.\n", pszFilename, i);
+-            cErrors++;
++            RTTestIFailed("tstLdr-4: Size mismatch '%s'/%d. aborting test.", pszFilename, i);
+             break;
+         }
+         aLoads[i].cbBits = cbImage = cb;
+@@ -175,8 +228,7 @@ static int testLdrOne(const char *pszFil
+         aLoads[i].pvBits = RTMemExecAlloc(cb);
+         if (!aLoads[i].pvBits)
+         {
+-            RTPrintf("tstLdr-4: Out of memory '%s'/%d cbImage=%d. aborting test.\n", pszFilename, i, cbImage);
+-            cErrors++;
++            RTTestIFailed("Out of memory '%s'/%d cbImage=%d. aborting test.", pszFilename, i, cbImage);
+             break;
+         }
+ 
+@@ -184,8 +236,7 @@ static int testLdrOne(const char *pszFil
+         rc = RTLdrGetBits(aLoads[i].hLdrMod, aLoads[i].pvBits, (uintptr_t)aLoads[i].pvBits, testGetImport, NULL);
+         if (RT_FAILURE(rc))
+         {
+-            RTPrintf("tstLdr-4: Failed to get bits for '%s'/%d, rc=%Rrc. aborting test\n", pszFilename, i, rc);
+-            cErrors++;
++            RTTestIFailed("Failed to get bits for '%s'/%d, rc=%Rrc. aborting test", pszFilename, i, rc);
+             break;
+         }
+     }
+@@ -193,7 +244,7 @@ static int testLdrOne(const char *pszFil
+     /*
+      * Execute the code.
+      */
+-    if (!cErrors)
++    if (!RTTestSubErrorCount(g_hTest))
+     {
+         for (i = 0; i < RT_ELEMENTS(aLoads); i += 1)
+         {
+@@ -209,22 +260,18 @@ static int testLdrOne(const char *pszFil
+                                       UINT32_MAX, "_DisasmTest1", &Value);
+             if (RT_FAILURE(rc))
+             {
+-                RTPrintf("tstLdr-4: Failed to get symbol \"DisasmTest1\" from load #%d: %Rrc\n", i, rc);
+-                cErrors++;
++                RTTestIFailed("Failed to get symbol \"DisasmTest1\" from load #%d: %Rrc", i, rc);
+                 break;
+             }
+             DECLCALLBACKPTR(int, pfnDisasmTest1)(void) = (DECLCALLBACKPTR(int, RT_NOTHING)(void))(uintptr_t)Value; /* eeeh. */
+-            RTPrintf("tstLdr-4: pfnDisasmTest1=%p / add-symbol-file %s %#x\n", pfnDisasmTest1, pszFilename, aLoads[i].pvBits);
++            RTPrintf("tstLdr-4: pfnDisasmTest1=%p / add-symbol-file %s %#p\n", pfnDisasmTest1, pszFilename, aLoads[i].pvBits);
+             uint32_t iSeg = 0;
+             RTLdrEnumSegments(aLoads[i].hLdrMod, testEnumSegment, &iSeg);
+ 
+             /* call the test function. */
+             rc = pfnDisasmTest1();
+             if (rc)
+-            {
+-                RTPrintf("tstLdr-4: load #%d Test1 -> %#x\n", i, rc);
+-                cErrors++;
+-            }
++                RTTestIFailed("load #%d Test1 -> %#x", i, rc);
+ 
+             /* While we're here, check a couple of RTLdrQueryProp calls too */
+             void *pvBits = aLoads[i].pvBits;
+@@ -255,56 +302,42 @@ static int testLdrOne(const char *pszFil
+         {
+             rc = RTLdrClose(aLoads[i].hLdrMod);
+             if (RT_FAILURE(rc))
+-            {
+-                RTPrintf("tstLdr-4: Failed to close '%s' i=%d, rc=%Rrc.\n", pszFilename, i, rc);
+-                cErrors++;
+-            }
++                RTTestIFailed("Failed to close '%s' i=%d, rc=%Rrc.", pszFilename, i, rc);
+         }
+     }
+ 
+-    return cErrors;
+ }
+ 
+ 
+ 
+-int main(int argc, char **argv)
++int main()
+ {
+-    int cErrors = 0;
+-    RTR3InitExe(argc, &argv, 0);
++    RTEXITCODE rcExit = RTTestInitAndCreate("tstLdr-4", &g_hTest);
++    if (rcExit != RTEXITCODE_SUCCESS)
++        return rcExit;
+ 
+     /*
+      * Sanity check.
+      */
+     int rc = DisasmTest1();
+-    if (rc)
++    if (rc == 0)
+     {
+-        RTPrintf("tstLdr-4: FATAL ERROR - DisasmTest1 is buggy: rc=%#x\n", rc);
+-        return 1;
+-    }
++        /*
++         * Execute the test.
++         */
++        char szPath[RTPATH_MAX];
++        rc = RTPathExecDir(szPath, sizeof(szPath) - sizeof("/tstLdrObjR0.r0"));
++        if (RT_SUCCESS(rc))
++        {
++            strcat(szPath, "/tstLdrObjR0.r0");
+ 
+-    /*
+-     * Execute the test.
+-     */
+-    char szPath[RTPATH_MAX];
+-    rc = RTPathExecDir(szPath, sizeof(szPath) - sizeof("/tstLdrObjR0.r0"));
+-    if (RT_SUCCESS(rc))
+-    {
+-        strcat(szPath, "/tstLdrObjR0.r0");
+-        RTPrintf("tstLdr-4: TESTING '%s'...\n", szPath);
+-        cErrors += testLdrOne(szPath);
++            testLdrOne(szPath);
++        }
++        else
++            RTTestIFailed("RTPathExecDir -> %Rrc", rc);
+     }
+     else
+-    {
+-        RTPrintf("tstLdr-4: RTPathExecDir -> %Rrc\n", rc);
+-        cErrors++;
+-    }
++        RTTestIFailed("FATAL ERROR - DisasmTest1 is buggy: rc=%#x", rc);
+ 
+-    /*
+-     * Test result summary.
+-     */
+-    if (!cErrors)
+-        RTPrintf("tstLdr-4: SUCCESS\n");
+-    else
+-        RTPrintf("tstLdr-4: FAILURE - %d errors\n", cErrors);
+-    return !!cErrors;
++    return RTTestSummaryAndDestroy(g_hTest);
+ }
+--- a/include/iprt/formats/elf-common.h
++++ b/include/iprt/formats/elf-common.h
+@@ -198,6 +198,12 @@ typedef struct {
+ #define PT_LOPROC       0x70000000      /* First processor-specific type. */
+ #define PT_HIPROC       0x7fffffff      /* Last processor-specific type. */
+ 
++#define PT_GNU_EH_FRAME 0x6474e550 /**< GNU/Linux -> .eh_frame_hdr */
++#define PT_GNU_STACK    0x6474e551 /**< GNU/Linux -> stack prot (RWX or RW) */
++#define PT_GNU_RELRO    0x6474e552 /**< GNU/Linux -> make RO after relocations */
++#define PT_GNU_PROPERTY 0x6474e553 /**< GNU/Linux -> .note.gnu.property */
++
++
+ /* Values for p_flags. */
+ #define PF_X            0x1     /* Executable. */
+ #define PF_W            0x2     /* Writable. */
+--- a/src/VBox/Runtime/common/ldr/ldrELF.cpp
++++ b/src/VBox/Runtime/common/ldr/ldrELF.cpp
+@@ -51,9 +51,11 @@
+ *   Defined Constants And Macros                                                                                                 *
+ *********************************************************************************************************************************/
+ /** Finds an ELF symbol table string. */
+-#define ELF_STR(pHdrs, iStr) ((pHdrs)->pStr + (iStr))
++#define ELF_STR(pHdrs, iStr)        ((pHdrs)->Rel.pStr + (iStr))
++/** Finds an ELF symbol table string. */
++#define ELF_DYN_STR(pHdrs, iStr)    ((pHdrs)->Dyn.pStr + (iStr))
+ /** Finds an ELF section header string. */
+-#define ELF_SH_STR(pHdrs, iStr) ((pHdrs)->pShStr + (iStr))
++#define ELF_SH_STR(pHdrs, iStr)     ((pHdrs)->pShStr + (iStr))
+ 
+ 
+ 
+@@ -62,6 +64,7 @@
+ *********************************************************************************************************************************/
+ #ifdef LOG_ENABLED
+ static const char *rtldrElfGetShdrType(uint32_t iType);
++static const char *rtldrElfGetPhdrType(uint32_t iType);
+ #endif
+ 
+ 
+@@ -81,6 +84,7 @@ static const char *rtldrElfGetShdrType(u
+ 
+ 
+ #ifdef LOG_ENABLED
++
+ /**
+  * Gets the section type.
+  *
+@@ -91,23 +95,51 @@ static const char *rtldrElfGetShdrType(u
+ {
+     switch (iType)
+     {
+-        case SHT_NULL:          return "SHT_NULL";
+-        case SHT_PROGBITS:      return "SHT_PROGBITS";
+-        case SHT_SYMTAB:        return "SHT_SYMTAB";
+-        case SHT_STRTAB:        return "SHT_STRTAB";
+-        case SHT_RELA:          return "SHT_RELA";
+-        case SHT_HASH:          return "SHT_HASH";
+-        case SHT_DYNAMIC:       return "SHT_DYNAMIC";
+-        case SHT_NOTE:          return "SHT_NOTE";
+-        case SHT_NOBITS:        return "SHT_NOBITS";
+-        case SHT_REL:           return "SHT_REL";
+-        case SHT_SHLIB:         return "SHT_SHLIB";
+-        case SHT_DYNSYM:        return "SHT_DYNSYM";
++        RT_CASE_RET_STR(SHT_NULL);
++        RT_CASE_RET_STR(SHT_PROGBITS);
++        RT_CASE_RET_STR(SHT_SYMTAB);
++        RT_CASE_RET_STR(SHT_STRTAB);
++        RT_CASE_RET_STR(SHT_RELA);
++        RT_CASE_RET_STR(SHT_HASH);
++        RT_CASE_RET_STR(SHT_DYNAMIC);
++        RT_CASE_RET_STR(SHT_NOTE);
++        RT_CASE_RET_STR(SHT_NOBITS);
++        RT_CASE_RET_STR(SHT_REL);
++        RT_CASE_RET_STR(SHT_SHLIB);
++        RT_CASE_RET_STR(SHT_DYNSYM);
+         default:
+             return "";
+     }
+ }
+-#endif
++
++/**
++ * Gets the program header type.
++ *
++ * @returns Pointer to read only string.
++ * @param   iType       The section type index.
++ */
++static const char *rtldrElfGetPhdrType(uint32_t iType)
++{
++    switch (iType)
++    {
++        RT_CASE_RET_STR(PT_NULL);
++        RT_CASE_RET_STR(PT_LOAD);
++        RT_CASE_RET_STR(PT_DYNAMIC);
++        RT_CASE_RET_STR(PT_INTERP);
++        RT_CASE_RET_STR(PT_NOTE);
++        RT_CASE_RET_STR(PT_SHLIB);
++        RT_CASE_RET_STR(PT_PHDR);
++        RT_CASE_RET_STR(PT_TLS);
++        RT_CASE_RET_STR(PT_GNU_EH_FRAME);
++        RT_CASE_RET_STR(PT_GNU_STACK);
++        RT_CASE_RET_STR(PT_GNU_RELRO);
++        RT_CASE_RET_STR(PT_GNU_PROPERTY);
++        default:
++            return "";
++    }
++}
++
++#endif /* LOG_ENABLED*/
+ 
+ 
+ /**
+@@ -124,8 +156,6 @@ DECLHIDDEN(int) rtldrELFOpen(PRTLDRREADE
+ {
+     const char *pszLogName = pReader->pfnLogName(pReader); NOREF(pszLogName);
+ 
+-    RT_NOREF_PV(pErrInfo); /** @todo implement */
+-
+     /*
+      * Read the ident to decide if this is 32-bit or 64-bit
+      * and worth dealing with.
+@@ -134,6 +164,7 @@ DECLHIDDEN(int) rtldrELFOpen(PRTLDRREADE
+     int rc = pReader->pfnRead(pReader, &e_ident, sizeof(e_ident), 0);
+     if (RT_FAILURE(rc))
+         return rc;
++
+     if (    e_ident[EI_MAG0] != ELFMAG0
+         ||  e_ident[EI_MAG1] != ELFMAG1
+         ||  e_ident[EI_MAG2] != ELFMAG2
+@@ -141,19 +172,17 @@ DECLHIDDEN(int) rtldrELFOpen(PRTLDRREADE
+         ||  (   e_ident[EI_CLASS] != ELFCLASS32
+              && e_ident[EI_CLASS] != ELFCLASS64)
+        )
+-    {
+-        Log(("RTLdrELF: %s: Unsupported/invalid ident %.*Rhxs\n", pszLogName, sizeof(e_ident), e_ident));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: Unsupported/invalid ident %.*Rhxs", pszLogName, sizeof(e_ident), e_ident);
++
+     if (e_ident[EI_DATA] != ELFDATA2LSB)
+-    {
+-        Log(("RTLdrELF: %s: ELF endian %x is unsupported\n", pszLogName, e_ident[EI_DATA]));
+-        return VERR_LDRELF_ODD_ENDIAN;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_LDRELF_ODD_ENDIAN,
++                                   "%s: ELF endian %x is unsupported", pszLogName, e_ident[EI_DATA]);
++
+     if (e_ident[EI_CLASS] == ELFCLASS32)
+-        rc = rtldrELF32Open(pReader, fFlags, enmArch, phLdrMod);
++        rc = rtldrELF32Open(pReader, fFlags, enmArch, phLdrMod, pErrInfo);
+     else
+-        rc = rtldrELF64Open(pReader, fFlags, enmArch, phLdrMod);
++        rc = rtldrELF64Open(pReader, fFlags, enmArch, phLdrMod, pErrInfo);
+     return rc;
+ }
+ 
+--- a/src/VBox/Runtime/common/ldr/ldrELFRelocatable.cpp.h
++++ b/src/VBox/Runtime/common/ldr/ldrELFRelocatable.cpp.h
+@@ -29,31 +29,37 @@
+ *   Defined Constants And Macros                                               *
+ *******************************************************************************/
+ #if ELF_MODE == 32
+-#define RTLDRELF_NAME(name) rtldrELF32##name
+-#define RTLDRELF_SUFF(name) name##32
+-#define RTLDRELF_MID(pre,suff) pre##32##suff
+-#define FMT_ELF_ADDR    "%08RX32"
+-#define FMT_ELF_HALF    "%04RX16"
+-#define FMT_ELF_OFF     "%08RX32"
+-#define FMT_ELF_SIZE    "%08RX32"
+-#define FMT_ELF_SWORD   "%RI32"
+-#define FMT_ELF_WORD    "%08RX32"
+-#define FMT_ELF_XWORD   "%08RX32"
+-#define FMT_ELF_SXWORD  "%RI32"
++# define RTLDRELF_NAME(name)    rtldrELF32##name
++# define RTLDRELF_SUFF(name)    name##32
++# define RTLDRELF_MID(pre,suff) pre##32##suff
++# define FMT_ELF_ADDR           "%08RX32"
++# define FMT_ELF_ADDR7          "%07RX32"
++# define FMT_ELF_HALF           "%04RX16"
++# define FMT_ELF_OFF            "%08RX32"
++# define FMT_ELF_SIZE           "%08RX32"
++# define FMT_ELF_SWORD          "%RI32"
++# define FMT_ELF_WORD           "%08RX32"
++# define FMT_ELF_XWORD          "%08RX32"
++# define FMT_ELF_SXWORD         "%RI32"
++# define Elf_Xword              Elf32_Word
++# define Elf_Sxword             Elf32_Sword
+ 
+ #elif ELF_MODE == 64
+-#define RTLDRELF_NAME(name) rtldrELF64##name
+-#define RTLDRELF_SUFF(name) name##64
+-#define RTLDRELF_MID(pre,suff) pre##64##suff
+-#define FMT_ELF_ADDR    "%016RX64"
+-#define FMT_ELF_HALF    "%04RX16"
+-#define FMT_ELF_SHALF   "%RI16"
+-#define FMT_ELF_OFF     "%016RX64"
+-#define FMT_ELF_SIZE    "%016RX64"
+-#define FMT_ELF_SWORD   "%RI32"
+-#define FMT_ELF_WORD    "%08RX32"
+-#define FMT_ELF_XWORD   "%016RX64"
+-#define FMT_ELF_SXWORD  "%RI64"
++# define RTLDRELF_NAME(name)    rtldrELF64##name
++# define RTLDRELF_SUFF(name)    name##64
++# define RTLDRELF_MID(pre,suff) pre##64##suff
++# define FMT_ELF_ADDR           "%016RX64"
++# define FMT_ELF_ADDR7          "%08RX64"
++# define FMT_ELF_HALF           "%04RX16"
++# define FMT_ELF_SHALF          "%RI16"
++# define FMT_ELF_OFF            "%016RX64"
++# define FMT_ELF_SIZE           "%016RX64"
++# define FMT_ELF_SWORD          "%RI32"
++# define FMT_ELF_WORD           "%08RX32"
++# define FMT_ELF_XWORD          "%016RX64"
++# define FMT_ELF_SXWORD         "%RI64"
++# define Elf_Xword              Elf64_Xword
++# define Elf_Sxword             Elf64_Sxword
+ #endif
+ 
+ #define Elf_Ehdr            RTLDRELF_MID(Elf,_Ehdr)
+@@ -74,6 +80,9 @@
+ #define RTLDRMODELF         RTLDRELF_MID(RTLDRMODELF,RT_NOTHING)
+ #define PRTLDRMODELF        RTLDRELF_MID(PRTLDRMODELF,RT_NOTHING)
+ 
++#define RTLDRMODELFSHX      RTLDRELF_MID(RTLDRMODELFSHX,RT_NOTHING)
++#define PRTLDRMODELFSHX     RTLDRELF_MID(PRTLDRMODELFSHX,RT_NOTHING)
++
+ #define ELF_R_SYM(info)     RTLDRELF_MID(ELF,_R_SYM)(info)
+ #define ELF_R_TYPE(info)    RTLDRELF_MID(ELF,_R_TYPE)(info)
+ #define ELF_R_INFO(sym, type) RTLDRELF_MID(ELF,_R_INFO)(sym, type)
+@@ -86,6 +95,20 @@
+ *   Structures and Typedefs                                                    *
+ *******************************************************************************/
+ /**
++ * Extra section info.
++ */
++typedef struct RTLDRMODELFSHX
++{
++    /** The corresponding program header. */
++    uint16_t        idxPhdr;
++    /** The corresponding dynamic section entry (address). */
++    uint16_t        idxDt;
++    /** The DT tag. */
++    uint32_t        uDtTag;
++} RTLDRMODELFSHX;
++typedef RTLDRMODELFSHX *PRTLDRMODELFSHX;
++
++/**
+  * The ELF loader structure.
+  */
+ typedef struct RTLDRMODELF
+@@ -105,36 +128,82 @@ typedef struct RTLDRMODELF
+     /** Unmodified section headers (allocated after paShdrs, so no need to free).
+      * Not valid if the image is DONE. */
+     Elf_Shdr const         *paOrgShdrs;
++    /** Runs parallel to paShdrs and is part of the same allocation. */
++    PRTLDRMODELFSHX         paShdrExtras;
++    /** Base section number, either 1 or zero depending on whether we've
++     *  re-used the NULL entry for .elf.headers in ET_EXEC/ET_DYN. */
++    unsigned                iFirstSect;
++    /** Set if the SHF_ALLOC section headers are in order of sh_addr. */
++    bool                    fShdrInOrder;
+     /** The size of the loaded image. */
+     size_t                  cbImage;
+ 
+     /** The image base address if it's an EXEC or DYN image. */
+     Elf_Addr                LinkAddress;
+ 
+-    /** The symbol section index. */
+-    unsigned                iSymSh;
+-    /** Number of symbols in the table. */
+-    unsigned                cSyms;
+-    /** Pointer to symbol table within RTLDRMODELF::pvBits. */
+-    const Elf_Sym          *paSyms;
+-
+-    /** The string section index. */
+-    unsigned                iStrSh;
+-    /** Size of the string table. */
+-    unsigned                cbStr;
+-    /** Pointer to string table within RTLDRMODELF::pvBits. */
+-    const char             *pStr;
++    struct
++    {
++        /** The symbol section index. */
++        unsigned            iSymSh;
++        /** Number of symbols in the table. */
++        unsigned            cSyms;
++        /** Pointer to symbol table within RTLDRMODELF::pvBits. */
++        const Elf_Sym      *paSyms;
++
++        /** The string section index. */
++        unsigned            iStrSh;
++        /** Size of the string table. */
++        unsigned            cbStr;
++        /** Pointer to string table within RTLDRMODELF::pvBits. */
++        const char         *pStr;
++    } Rel /**< Regular symbols and strings. */
++    , Dyn /**< Dynamic symbols and strings. */;
+ 
+-    /** Size of the section header string table. */
+-    unsigned                cbShStr;
+     /** Pointer to section header string table within RTLDRMODELF::pvBits. */
+     const char             *pShStr;
++    /** Size of the section header string table. */
++    unsigned                cbShStr;
+ 
+     /** The '.eh_frame' section index.  Zero if not searched for, ~0U if not found. */
+     unsigned                iShEhFrame;
+     /** The '.eh_frame_hdr' section index.  Zero if not searched for, ~0U if not found. */
+     unsigned                iShEhFrameHdr;
+-} RTLDRMODELF, *PRTLDRMODELF;
++
++    /** The '.dynamic' / SHT_DYNAMIC section index.  ~0U if not present. */
++    unsigned                iShDynamic;
++    /** Number of entries in paDynamic. */
++    unsigned                cDynamic;
++    /** The dynamic section (NULL for ET_REL). */
++    Elf_Dyn                *paDynamic;
++    /** Program headers (NULL for ET_REL). */
++    Elf_Phdr               *paPhdrs;
++
++    /** Info extracted from PT_DYNAMIC and the program headers. */
++    struct
++    {
++        /** DT_RELA/DT_REL. */
++        Elf_Addr            uPtrRelocs;
++        /** DT_RELASZ/DT_RELSZ. */
++        Elf_Xword           cbRelocs;
++        /** Non-zero if we've seen DT_RELAENT/DT_RELENT. */
++        unsigned            cbRelocEntry;
++        /** DT_RELA or DT_REL. */
++        unsigned            uRelocType;
++        /** The index of the section header matching DT_RELA/DT_REL. */
++        unsigned            idxShRelocs;
++
++        /** DT_JMPREL. */
++        Elf_Addr            uPtrJmpRelocs;
++        /** DT_PLTRELSZ. */
++        Elf_Xword           cbJmpRelocs;
++        /** DT_RELA or DT_REL (if we've seen DT_PLTREL). */
++        unsigned            uJmpRelocType;
++        /** The index of the section header matching DT_JMPREL. */
++        unsigned            idxShJmpRelocs;
++    } DynInfo;
++} RTLDRMODELF;
++/** Pointer to an ELF module instance. */
++typedef RTLDRMODELF *PRTLDRMODELF;
+ 
+ 
+ /**
+@@ -154,11 +223,15 @@ static int RTLDRELF_NAME(MapBits)(PRTLDR
+     if (RT_SUCCESS(rc))
+     {
+         const uint8_t *pu8 = (const uint8_t *)pModElf->pvBits;
+-        if (pModElf->iSymSh != ~0U)
+-            pModElf->paSyms = (const Elf_Sym *)(pu8 + pModElf->paShdrs[pModElf->iSymSh].sh_offset);
+-        if (pModElf->iStrSh != ~0U)
+-            pModElf->pStr   =    (const char *)(pu8 + pModElf->paShdrs[pModElf->iStrSh].sh_offset);
+-        pModElf->pShStr     =    (const char *)(pu8 + pModElf->paShdrs[pModElf->Ehdr.e_shstrndx].sh_offset);
++        if (pModElf->Rel.iSymSh != ~0U)
++            pModElf->Rel.paSyms = (const Elf_Sym *)(pu8 + pModElf->paShdrs[pModElf->Rel.iSymSh].sh_offset);
++        if (pModElf->Rel.iStrSh != ~0U)
++            pModElf->Rel.pStr   =    (const char *)(pu8 + pModElf->paShdrs[pModElf->Rel.iStrSh].sh_offset);
++        if (pModElf->Dyn.iSymSh != ~0U)
++            pModElf->Dyn.paSyms = (const Elf_Sym *)(pu8 + pModElf->paShdrs[pModElf->Dyn.iSymSh].sh_offset);
++        if (pModElf->Dyn.iStrSh != ~0U)
++            pModElf->Dyn.pStr   =    (const char *)(pu8 + pModElf->paShdrs[pModElf->Dyn.iStrSh].sh_offset);
++        pModElf->pShStr         =    (const char *)(pu8 + pModElf->paShdrs[pModElf->Ehdr.e_shstrndx].sh_offset);
+ 
+         /*
+          * Verify that the ends of the string tables have a zero terminator
+@@ -167,8 +240,12 @@ static int RTLDRELF_NAME(MapBits)(PRTLDR
+          * sh_offset and sh_size were verfied in RTLDRELF_NAME(ValidateSectionHeader)() already so they
+          * are safe to use.
+          */
+-        AssertMsgStmt(   pModElf->iStrSh == ~0U
+-                      || pModElf->pStr[pModElf->paShdrs[pModElf->iStrSh].sh_size - 1] == '\0',
++        AssertMsgStmt(   pModElf->Rel.iStrSh == ~0U
++                      || pModElf->Rel.pStr[pModElf->paShdrs[pModElf->Rel.iStrSh].sh_size - 1] == '\0',
++                      ("The string table is not zero terminated!\n"),
++                      rc = VERR_LDRELF_UNTERMINATED_STRING_TAB);
++        AssertMsgStmt(   pModElf->Dyn.iStrSh == ~0U
++                      || pModElf->Dyn.pStr[pModElf->paShdrs[pModElf->Dyn.iStrSh].sh_size - 1] == '\0',
+                       ("The string table is not zero terminated!\n"),
+                       rc = VERR_LDRELF_UNTERMINATED_STRING_TAB);
+         AssertMsgStmt(pModElf->pShStr[pModElf->paShdrs[pModElf->Ehdr.e_shstrndx].sh_size - 1] == '\0',
+@@ -180,10 +257,12 @@ static int RTLDRELF_NAME(MapBits)(PRTLDR
+             /* Unmap. */
+             int rc2 = pModElf->Core.pReader->pfnUnmap(pModElf->Core.pReader, pModElf->pvBits);
+             AssertRC(rc2);
+-            pModElf->pvBits = NULL;
+-            pModElf->paSyms = NULL;
+-            pModElf->pStr   = NULL;
+-            pModElf->pShStr = NULL;
++            pModElf->pvBits     = NULL;
++            pModElf->Rel.paSyms = NULL;
++            pModElf->Rel.pStr   = NULL;
++            pModElf->Dyn.paSyms = NULL;
++            pModElf->Dyn.pStr   = NULL;
++            pModElf->pShStr     = NULL;
+         }
+     }
+     return rc;
+@@ -200,6 +279,101 @@ static int RTLDRELF_NAME(MapBits)(PRTLDR
+  *
+  */
+ 
++/**
++ * Get the symbol and symbol value.
++ *
++ * @returns iprt status code.
++ * @param   pModElf         The ELF loader module instance data.
++ * @param   BaseAddr        The base address which the module is being fixedup to.
++ * @param   pfnGetImport    The callback function to use to resolve imports (aka unresolved externals).
++ * @param   pvUser          User argument to pass to the callback.
++ * @param   iSym            The symbol to get.
++ * @param   ppSym           Where to store the symbol pointer on success. (read only)
++ * @param   pSymValue       Where to store the symbol value on success.
++ */
++static int RTLDRELF_NAME(SymbolExecDyn)(PRTLDRMODELF pModElf, Elf_Addr BaseAddr, PFNRTLDRIMPORT pfnGetImport, void *pvUser,
++                                        Elf_Size iSym, const Elf_Sym **ppSym, Elf_Addr *pSymValue)
++{
++    /*
++     * Validate and find the symbol.
++     */
++    AssertMsgReturn(iSym < pModElf->Dyn.cSyms, ("iSym=%d is an invalid symbol index!\n", iSym), VERR_LDRELF_INVALID_SYMBOL_INDEX);
++    const Elf_Sym *pSym = &pModElf->Dyn.paSyms[iSym];
++    *ppSym = pSym;
++
++    AssertMsgReturn(pSym->st_name < pModElf->Dyn.cbStr,
++                    ("iSym=%d st_name=%d str sh_size=%d\n", iSym, pSym->st_name, pModElf->Dyn.cbStr),
++                    VERR_LDRELF_INVALID_SYMBOL_NAME_OFFSET);
++    const char * const pszName = pModElf->Dyn.pStr + pSym->st_name;
++
++    /*
++     * Determine the symbol value.
++     *
++     * Symbols needs different treatment depending on which section their are in.
++     * Undefined and absolute symbols goes into special non-existing sections.
++     */
++    switch (pSym->st_shndx)
++    {
++        /*
++         * Undefined symbol, needs resolving.
++         *
++         * Since ELF has no generic concept of importing from specific module (the OS/2 ELF format
++         * has but that's an OS extension and only applies to programs and dlls), we'll have to ask
++         * the resolver callback to do a global search.
++         */
++        case SHN_UNDEF:
++        {
++            /* Try to resolve the symbol. */
++            RTUINTPTR Value;
++            int rc = pfnGetImport(&pModElf->Core, "", pszName, ~0U, &Value, pvUser);
++            AssertMsgRCReturn(rc, ("Failed to resolve '%s' (iSym=" FMT_ELF_SIZE " rc=%Rrc\n", pszName, iSym, rc), rc);
++
++            *pSymValue = (Elf_Addr)Value;
++            AssertMsgReturn((RTUINTPTR)*pSymValue == Value,
++                            ("Symbol value overflowed! '%s' (iSym=" FMT_ELF_SIZE "\n", pszName, iSym), VERR_SYMBOL_VALUE_TOO_BIG);
++
++            Log2(("rtldrELF: #%-3d - UNDEF " FMT_ELF_ADDR " '%s'\n", iSym, *pSymValue, pszName));
++            break;
++        }
++
++        /*
++         * Absolute symbols needs no fixing since they are, well, absolute.
++         */
++        case SHN_ABS:
++            *pSymValue = pSym->st_value;
++            Log2(("rtldrELF: #%-3d - ABS   " FMT_ELF_ADDR " '%s'\n", iSym, *pSymValue, pszName));
++            break;
++
++        /*
++         * All other symbols are addressed relative the image base in DYN and EXEC binaries.
++         */
++        default:
++            AssertMsgReturn(pSym->st_shndx < pModElf->Ehdr.e_shnum,
++                            ("iSym=%d st_shndx=%d e_shnum=%d pszName=%s\n", iSym, pSym->st_shndx, pModElf->Ehdr.e_shnum, pszName),
++                            VERR_BAD_EXE_FORMAT);
++            *pSymValue = pSym->st_value + BaseAddr;
++            Log2(("rtldrELF: #%-3d - %5d " FMT_ELF_ADDR " '%s'\n", iSym, pSym->st_shndx, *pSymValue, pszName));
++            break;
++    }
++
++    return VINF_SUCCESS;
++}
++
++
++#if   ELF_MODE == 32
++/** Helper for RelocateSectionExecDyn. */
++DECLINLINE(const Elf_Shdr *) RTLDRELF_NAME(RvaToSectionHeader)(PRTLDRMODELF pModElf, Elf_Addr uRva)
++{
++    const Elf_Shdr * const pShdrFirst = pModElf->paShdrs;
++    const Elf_Shdr *pShdr = pShdrFirst + pModElf->Ehdr.e_shnum;
++    while (--pShdr != pShdrFirst)
++        if (uRva - pShdr->sh_addr /*rva*/ < pShdr->sh_size)
++            return pShdr;
++    AssertFailed();
++    return pShdr;
++}
++#endif
++
+ 
+ /**
+  * Applies the fixups for a section in an executable image.
+@@ -230,84 +404,106 @@ static int RTLDRELF_NAME(RelocateSection
+      * Iterate the relocations.
+      * The relocations are stored in an array of Elf32_Rel records and covers the entire relocation section.
+      */
++#if   ELF_MODE == 32
++    const Elf_Shdr   *pShdr    = pModElf->paShdrs;
+     const Elf_Addr    offDelta = BaseAddr - pModElf->LinkAddress;
++#endif
+     const Elf_Reloc  *paRels   = (const Elf_Reloc *)pvRelocs;
+-    const unsigned    iRelMax   = (unsigned)(cbRelocs / sizeof(paRels[0]));
++    const unsigned    iRelMax  = (unsigned)(cbRelocs / sizeof(paRels[0]));
+     AssertMsgReturn(iRelMax == cbRelocs / sizeof(paRels[0]), (FMT_ELF_SIZE "\n", cbRelocs / sizeof(paRels[0])),
+                     VERR_IMAGE_TOO_BIG);
+     for (unsigned iRel = 0; iRel < iRelMax; iRel++)
+     {
+         /*
+-         * Skip R_XXX_NONE entries early to avoid confusion in the symbol
+-         * getter code.
++         * Apply fixups not taking a symbol (will 'continue' rather than 'break').
+          */
++        AssertMsgReturn(paRels[iRel].r_offset < cbSec, (FMT_ELF_ADDR " " FMT_ELF_SIZE "\n", paRels[iRel].r_offset, cbSec),
++                        VERR_LDRELF_INVALID_RELOCATION_OFFSET);
+ #if   ELF_MODE == 32
+-        if (ELF_R_TYPE(paRels[iRel].r_info) == R_386_NONE)
+-            continue;
+-#elif ELF_MODE == 64
+-        if (ELF_R_TYPE(paRels[iRel].r_info) == R_X86_64_NONE)
+-            continue;
++        if (paRels[iRel].r_offset - pShdr->sh_addr /*rva*/ >= pShdr->sh_size)
++            pShdr = RTLDRELF_NAME(RvaToSectionHeader)(pModElf, paRels[iRel].r_offset);
++        static const Elf_Addr s_uZero = 0;
++        const Elf_Addr *pAddrR = RT_LIKELY(pShdr->sh_type != SHT_NOBITS)                     /* Where to read the addend. */
++                               ? (const Elf_Addr *)(pu8SecBaseR + paRels[iRel].r_offset - pShdr->sh_addr /*rva*/
++                                                    + pShdr->sh_offset)
++                               : &s_uZero;
+ #endif
+-
+-        /*
+-         * Validate and find the symbol, resolve undefined ones.
+-         */
+-        Elf_Size iSym = ELF_R_SYM(paRels[iRel].r_info);
+-        if (iSym >= pModElf->cSyms)
+-        {
+-            AssertMsgFailed(("iSym=%d is an invalid symbol index!\n", iSym));
+-            return VERR_LDRELF_INVALID_SYMBOL_INDEX;
+-        }
+-        const Elf_Sym *pSym = &pModElf->paSyms[iSym];
+-        if (pSym->st_name >= pModElf->cbStr)
++        Elf_Addr       *pAddrW =       (Elf_Addr *)(pu8SecBaseW + paRels[iRel].r_offset);    /* Where to write the fixup. */
++        switch (ELF_R_TYPE(paRels[iRel].r_info))
+         {
+-            AssertMsgFailed(("iSym=%d st_name=%d str sh_size=%d\n", iSym, pSym->st_name, pModElf->cbStr));
+-            return VERR_LDRELF_INVALID_SYMBOL_NAME_OFFSET;
+-        }
++            /*
++             * Image relative (addend + base).
++             */
++#if   ELF_MODE == 32
++            case R_386_RELATIVE:
++            {
++                const Elf_Addr Value = *pAddrR + BaseAddr;
++                *(uint32_t *)pAddrW = Value;
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_386_RELATIVE Value=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, Value));
++                AssertCompile(sizeof(Value) == sizeof(uint32_t));
++                continue;
++            }
++#elif ELF_MODE == 64
++            case R_X86_64_RELATIVE:
++            {
++                const Elf_Addr Value = paRels[iRel].r_addend + BaseAddr;
++                *(uint64_t *)pAddrW = (uint64_t)Value;
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_X86_64_RELATIVE Value=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, Value));
++                AssertCompile(sizeof(Value) == sizeof(uint64_t));
++                continue;
++            }
++#endif
+ 
+-        Elf_Addr SymValue = 0;
+-        if (pSym->st_shndx == SHN_UNDEF)
+-        {
+-            /* Try to resolve the symbol. */
+-            const char *pszName = ELF_STR(pModElf, pSym->st_name);
+-            RTUINTPTR   ExtValue;
+-            int rc = pfnGetImport(&pModElf->Core, "", pszName, ~0U, &ExtValue, pvUser);
+-            AssertMsgRCReturn(rc, ("Failed to resolve '%s' rc=%Rrc\n", pszName, rc), rc);
+-            SymValue = (Elf_Addr)ExtValue;
+-            AssertMsgReturn((RTUINTPTR)SymValue == ExtValue, ("Symbol value overflowed! '%s'\n", pszName),
+-                            VERR_SYMBOL_VALUE_TOO_BIG);
+-            Log2(("rtldrELF: #%-3d - UNDEF " FMT_ELF_ADDR " '%s'\n", iSym, SymValue, pszName));
+-        }
+-        else
+-        {
+-            AssertMsgReturn(pSym->st_shndx < pModElf->Ehdr.e_shnum || pSym->st_shndx == SHN_ABS, ("%#x\n", pSym->st_shndx),
+-                            VERR_LDRELF_INVALID_RELOCATION_OFFSET);
+-#if   ELF_MODE == 64
+-            SymValue = pSym->st_value;
++            /*
++             * R_XXX_NONE.
++             */
++#if   ELF_MODE == 32
++            case R_386_NONE:
++#elif ELF_MODE == 64
++            case R_X86_64_NONE:
+ #endif
++                continue;
+         }
+ 
+-#if   ELF_MODE == 64
+-        /* Calc the value (indexes checked above; assumes SHN_UNDEF == 0). */
+-        Elf_Addr Value;
+-        if (pSym->st_shndx < pModElf->Ehdr.e_shnum)
+-            Value = SymValue + offDelta;
+-        else /* SHN_ABS: */
+-            Value = SymValue + paRels[iRel].r_addend;
+-#endif
++        /*
++         * Validate and find the symbol, resolve undefined ones.
++         */
++        const Elf_Sym  *pSym = NULL; /* shut up gcc */
++        Elf_Addr        SymValue = 0; /* shut up gcc-4 */
++        int rc = RTLDRELF_NAME(SymbolExecDyn)(pModElf, BaseAddr, pfnGetImport, pvUser, ELF_R_SYM(paRels[iRel].r_info), &pSym, &SymValue);
++        if (RT_FAILURE(rc))
++            return rc;
+ 
+         /*
+          * Apply the fixup.
+          */
+-        AssertMsgReturn(paRels[iRel].r_offset < cbSec, (FMT_ELF_ADDR " " FMT_ELF_SIZE "\n", paRels[iRel].r_offset, cbSec), VERR_LDRELF_INVALID_RELOCATION_OFFSET);
+-#if   ELF_MODE == 32
+-        const Elf_Addr *pAddrR = (const Elf_Addr *)(pu8SecBaseR + paRels[iRel].r_offset);    /* Where to read the addend. */
+-#endif
+-        Elf_Addr       *pAddrW =       (Elf_Addr *)(pu8SecBaseW + paRels[iRel].r_offset);    /* Where to write the fixup. */
+         switch (ELF_R_TYPE(paRels[iRel].r_info))
+         {
+ #if   ELF_MODE == 32
+             /*
++             * GOT/PLT.
++             */
++            case R_386_GLOB_DAT:
++            {
++                *(uint32_t *)pAddrW = (uint32_t)SymValue;
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_386_GLOB_DAT Value=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, SymValue));
++                AssertCompile(sizeof(SymValue) == sizeof(uint32_t));
++                break;
++            }
++
++            case R_386_JMP_SLOT:
++            {
++                *(uint32_t *)pAddrW = (uint32_t)SymValue;
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_386_JMP_SLOT Value=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, SymValue));
++                AssertCompile(sizeof(SymValue) == sizeof(uint32_t));
++                break;
++            }
++
++            /*
+              * Absolute addressing.
+              */
+             case R_386_32:
+@@ -322,7 +518,8 @@ static int RTLDRELF_NAME(RelocateSection
+                 else
+                     AssertFailedReturn(VERR_LDR_GENERAL_FAILURE); /** @todo SHN_COMMON */
+                 *(uint32_t *)pAddrW = Value;
+-                Log4((FMT_ELF_ADDR": R_386_32   Value=" FMT_ELF_ADDR "\n", SecAddr + paRels[iRel].r_offset + BaseAddr, Value));
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_386_32   Value=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, Value));
+                 break;
+             }
+ 
+@@ -344,20 +541,42 @@ static int RTLDRELF_NAME(RelocateSection
+                 }
+                 else
+                     AssertFailedReturn(VERR_LDR_GENERAL_FAILURE); /** @todo SHN_COMMON */
+-                Log4((FMT_ELF_ADDR": R_386_PC32 Value=" FMT_ELF_ADDR "\n", SecAddr + paRels[iRel].r_offset + BaseAddr, Value));
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_386_PC32 Value=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, Value));
+                 break;
+             }
+ 
+ #elif ELF_MODE == 64
++            /*
++             * GOT/PLT.
++             */
++            case R_X86_64_GLOB_DAT:
++            {
++                *(uint64_t *)pAddrW = (uint64_t)SymValue;
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_X86_64_GLOB_DAT Value=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, SymValue));
++                AssertCompile(sizeof(SymValue) == sizeof(uint64_t));
++                break;
++            }
++
++            case R_X86_64_JMP_SLOT:
++            {
++                *(uint64_t *)pAddrW = (uint64_t)SymValue;
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_X86_64_JMP_SLOT Value=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, SymValue));
++                AssertCompile(sizeof(SymValue) == sizeof(uint64_t));
++                break;
++            }
+ 
+             /*
+-             * Absolute addressing
++             * Absolute addressing.
+              */
+             case R_X86_64_64:
+             {
++                const Elf_Addr Value = SymValue + paRels[iRel].r_addend;
+                 *(uint64_t *)pAddrW = Value;
+-                Log4((FMT_ELF_ADDR": R_X86_64_64   Value=" FMT_ELF_ADDR " SymValue=" FMT_ELF_ADDR "\n",
+-                      SecAddr + paRels[iRel].r_offset + BaseAddr, Value, SymValue));
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_X86_64_64   Value=" FMT_ELF_ADDR " SymValue=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, Value, SymValue));
+                 break;
+             }
+ 
+@@ -366,9 +585,10 @@ static int RTLDRELF_NAME(RelocateSection
+              */
+             case R_X86_64_32:
+             {
++                const Elf_Addr Value = SymValue + paRels[iRel].r_addend;
+                 *(uint32_t *)pAddrW = (uint32_t)Value;
+-                Log4((FMT_ELF_ADDR": R_X86_64_32   Value=" FMT_ELF_ADDR " SymValue=" FMT_ELF_ADDR "\n",
+-                      SecAddr + paRels[iRel].r_offset + BaseAddr, Value, SymValue));
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_X86_64_32   Value=" FMT_ELF_ADDR " SymValue=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, Value, SymValue));
+                 AssertMsgReturn((Elf_Addr)*(uint32_t *)pAddrW == SymValue, ("Value=" FMT_ELF_ADDR "\n", SymValue),
+                                 VERR_SYMBOL_VALUE_TOO_BIG);
+                 break;
+@@ -379,9 +599,10 @@ static int RTLDRELF_NAME(RelocateSection
+              */
+             case R_X86_64_32S:
+             {
++                const Elf_Addr Value = SymValue + paRels[iRel].r_addend;
+                 *(int32_t *)pAddrW = (int32_t)Value;
+-                Log4((FMT_ELF_ADDR": R_X86_64_32S  Value=" FMT_ELF_ADDR " SymValue=" FMT_ELF_ADDR "\n",
+-                      SecAddr + paRels[iRel].r_offset + BaseAddr, Value, SymValue));
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_X86_64_32S  Value=" FMT_ELF_ADDR " SymValue=" FMT_ELF_ADDR "\n",
++                      SecAddr + paRels[iRel].r_offset + BaseAddr, paRels[iRel].r_offset, Value, SymValue));
+                 AssertMsgReturn((Elf_Addr)*(int32_t *)pAddrW == Value, ("Value=" FMT_ELF_ADDR "\n", Value), VERR_SYMBOL_VALUE_TOO_BIG); /** @todo check the sign-extending here. */
+                 break;
+             }
+@@ -390,18 +611,17 @@ static int RTLDRELF_NAME(RelocateSection
+              * PC relative addressing.
+              */
+             case R_X86_64_PC32:
+-            case R_X86_64_PLT32: /* binutils commit 451875b4f976a527395e9303224c7881b65e12ed feature/regression. */
+             {
+-                const Elf_Addr SourceAddr = SecAddr + paRels[iRel].r_offset + BaseAddr; /* Where the source really is. */
+-                Value -= SourceAddr;
++                const Elf_Addr SourceAddr = SecAddr  + paRels[iRel].r_offset + BaseAddr; /* Where the source really is. */
++                const Elf_Addr Value      = SymValue + paRels[iRel].r_addend - SourceAddr;
+                 *(int32_t *)pAddrW = (int32_t)Value;
+-                Log4((FMT_ELF_ADDR": R_X86_64_PC32 Value=" FMT_ELF_ADDR " SymValue=" FMT_ELF_ADDR "\n",
+-                      SourceAddr, Value, SymValue));
++                Log4((FMT_ELF_ADDR "/" FMT_ELF_ADDR7 ": R_X86_64_PC32 Value=" FMT_ELF_ADDR " SymValue=" FMT_ELF_ADDR "\n",
++                      SourceAddr, paRels[iRel].r_offset, Value, SymValue));
+                 AssertMsgReturn((Elf_Addr)*(int32_t *)pAddrW == Value, ("Value=" FMT_ELF_ADDR "\n", Value), VERR_SYMBOL_VALUE_TOO_BIG); /** @todo check the sign-extending here. */
+                 break;
+             }
+-#endif
+ 
++#endif
+             default:
+                 AssertMsgFailed(("Unknown relocation type: %d (iRel=%d iRelMax=%d)\n",
+                                  ELF_R_TYPE(paRels[iRel].r_info), iRel, iRelMax));
+@@ -442,19 +662,13 @@ static int RTLDRELF_NAME(Symbol)(PRTLDRM
+     /*
+      * Validate and find the symbol.
+      */
+-    if (iSym >= pModElf->cSyms)
+-    {
+-        AssertMsgFailed(("iSym=%d is an invalid symbol index!\n", iSym));
+-        return VERR_LDRELF_INVALID_SYMBOL_INDEX;
+-    }
+-    const Elf_Sym *pSym = &pModElf->paSyms[iSym];
++    AssertMsgReturn(iSym < pModElf->Rel.cSyms, ("iSym=%d is an invalid symbol index!\n", iSym), VERR_LDRELF_INVALID_SYMBOL_INDEX);
++    const Elf_Sym *pSym = &pModElf->Rel.paSyms[iSym];
+     *ppSym = pSym;
+ 
+-    if (pSym->st_name >= pModElf->cbStr)
+-    {
+-        AssertMsgFailed(("iSym=%d st_name=%d str sh_size=%d\n", iSym, pSym->st_name, pModElf->cbStr));
+-        return VERR_LDRELF_INVALID_SYMBOL_NAME_OFFSET;
+-    }
++    AssertMsgReturn(pSym->st_name < pModElf->Rel.cbStr,
++                    ("iSym=%d st_name=%d str sh_size=%d\n", iSym, pSym->st_name, pModElf->Rel.cbStr),
++                    VERR_LDRELF_INVALID_SYMBOL_NAME_OFFSET);
+     const char *pszName = ELF_STR(pModElf, pSym->st_name);
+ 
+     /*
+@@ -469,7 +683,7 @@ static int RTLDRELF_NAME(Symbol)(PRTLDRM
+          * Undefined symbol, needs resolving.
+          *
+          * Since ELF has no generic concept of importing from specific module (the OS/2 ELF format
+-         * has but that's a OS extension and only applies to programs and dlls), we'll have to ask
++         * has but that's an OS extension and only applies to programs and dlls), we'll have to ask
+          * the resolver callback to do a global search.
+          */
+         case SHN_UNDEF:
+@@ -477,17 +691,12 @@ static int RTLDRELF_NAME(Symbol)(PRTLDRM
+             /* Try to resolve the symbol. */
+             RTUINTPTR Value;
+             int rc = pfnGetImport(&pModElf->Core, "", pszName, ~0U, &Value, pvUser);
+-            if (RT_FAILURE(rc))
+-            {
+-                AssertMsgFailed(("Failed to resolve '%s' rc=%Rrc\n", pszName, rc));
+-                return rc;
+-            }
++            AssertMsgRCReturn(rc, ("Failed to resolve '%s' (iSym=" FMT_ELF_SIZE " rc=%Rrc\n", pszName, iSym, rc), rc);
+             *pSymValue = (Elf_Addr)Value;
+-            if ((RTUINTPTR)*pSymValue != Value)
+-            {
+-                AssertMsgFailed(("Symbol value overflowed! '%s'\n", pszName));
+-                return VERR_SYMBOL_VALUE_TOO_BIG;
+-            }
++
++            AssertMsgReturn((RTUINTPTR)*pSymValue == Value,
++                            ("Symbol value overflowed! '%s' (iSym=" FMT_ELF_SIZE ")\n", pszName, iSym),
++                            VERR_SYMBOL_VALUE_TOO_BIG);
+ 
+             Log2(("rtldrELF: #%-3d - UNDEF " FMT_ELF_ADDR " '%s'\n", iSym, *pSymValue, pszName));
+             break;
+@@ -536,9 +745,9 @@ static int RTLDRELF_NAME(Symbol)(PRTLDRM
+  * @param   pvRelocs        Pointer to where we read the relocations from.
+  * @param   cbRelocs        Size of the relocations.
+  */
+-static int RTLDRELF_NAME(RelocateSection)(PRTLDRMODELF pModElf, Elf_Addr BaseAddr, PFNRTLDRIMPORT pfnGetImport, void *pvUser,
+-                                          const Elf_Addr SecAddr, Elf_Size cbSec, const uint8_t *pu8SecBaseR, uint8_t *pu8SecBaseW,
+-                                          const void *pvRelocs, Elf_Size cbRelocs)
++static int RTLDRELF_NAME(RelocateSectionRel)(PRTLDRMODELF pModElf, Elf_Addr BaseAddr, PFNRTLDRIMPORT pfnGetImport, void *pvUser,
++                                             const Elf_Addr SecAddr, Elf_Size cbSec, const uint8_t *pu8SecBaseR,
++                                             uint8_t *pu8SecBaseW, const void *pvRelocs, Elf_Size cbRelocs)
+ {
+ #if ELF_MODE != 32
+     NOREF(pu8SecBaseR);
+@@ -702,6 +911,18 @@ static DECLCALLBACK(int) RTLDRELF_NAME(C
+         pModElf->paShdrs = NULL;
+     }
+ 
++    if (pModElf->paPhdrs)
++    {
++        RTMemFree(pModElf->paPhdrs);
++        pModElf->paPhdrs = NULL;
++    }
++
++    if (pModElf->paDynamic)
++    {
++        RTMemFree(pModElf->paDynamic);
++        pModElf->paDynamic = NULL;
++    }
++
+     if (pModElf->pvBits)
+     {
+         pModElf->Core.pReader->pfnUnmap(pModElf->Core.pReader, pModElf->pvBits);
+@@ -721,9 +942,9 @@ static DECLCALLBACK(int) RTLDRELF_NAME(D
+ }
+ 
+ 
+-/** @copydoc RTLDROPS::EnumSymbols */
+-static DECLCALLBACK(int) RTLDRELF_NAME(EnumSymbols)(PRTLDRMODINTERNAL pMod, unsigned fFlags, const void *pvBits, RTUINTPTR BaseAddress,
+-                                                    PFNRTLDRENUMSYMS pfnCallback, void *pvUser)
++/** @copydoc RTLDROPS::pfnEnumSymbols */
++static DECLCALLBACK(int) RTLDRELF_NAME(EnumSymbols)(PRTLDRMODINTERNAL pMod, unsigned fFlags, const void *pvBits,
++                                                    RTUINTPTR BaseAddress, PFNRTLDRENUMSYMS pfnCallback, void *pvUser)
+ {
+     PRTLDRMODELF pModElf = (PRTLDRMODELF)pMod;
+     NOREF(pvBits);
+@@ -744,8 +965,20 @@ static DECLCALLBACK(int) RTLDRELF_NAME(E
+     /*
+      * Enumerate the symbol table.
+      */
+-    const Elf_Sym  *paSyms = pModElf->paSyms;
+-    unsigned        cSyms  = pModElf->cSyms;
++    const Elf_Sym  *paSyms  = pModElf->Rel.paSyms;
++    unsigned        cSyms   = pModElf->Rel.cSyms;
++    const char     *pszzStr = pModElf->Rel.pStr;
++    unsigned        cbStr   = pModElf->Rel.cbStr;
++    if (   (   !(fFlags & RTLDR_ENUM_SYMBOL_FLAGS_ALL)
++            && pModElf->Dyn.cSyms > 0)
++        || cSyms == 0)
++    {
++        paSyms  = pModElf->Dyn.paSyms;
++        cSyms   = pModElf->Dyn.cSyms;
++        pszzStr = pModElf->Dyn.pStr;
++        cbStr   = pModElf->Dyn.cbStr;
++    }
++
+     for (unsigned iSym = 1; iSym < cSyms; iSym++)
+     {
+         /*
+@@ -774,22 +1007,21 @@ static DECLCALLBACK(int) RTLDRELF_NAME(E
+                 return VERR_BAD_EXE_FORMAT;
+             }
+ 
+-            AssertMsgReturn(paSyms[iSym].st_name < pModElf->cbStr,
++            AssertMsgReturn(paSyms[iSym].st_name < cbStr,
+                             ("String outside string table! iSym=%d paSyms[iSym].st_name=%#x\n", iSym, paSyms[iSym].st_name),
+                             VERR_LDRELF_INVALID_SYMBOL_NAME_OFFSET);
++            const char * const pszName = pszzStr + paSyms[iSym].st_name;
+ 
+-            const char *pszName = ELF_STR(pModElf, paSyms[iSym].st_name);
+             /* String termination was already checked when the string table was mapped. */
+-            if (    (pszName && *pszName)
++            if (    *pszName != '\0'
+                 &&  (   (fFlags & RTLDR_ENUM_SYMBOL_FLAGS_ALL)
+-                     || ELF_ST_BIND(paSyms[iSym].st_info) == STB_GLOBAL)
+-               )
++                     || ELF_ST_BIND(paSyms[iSym].st_info) == STB_GLOBAL) )
+             {
+                 /*
+                  * Call back.
+                  */
+                 AssertMsgReturn(Value == (RTUINTPTR)Value, (FMT_ELF_ADDR "\n", Value), VERR_SYMBOL_VALUE_TOO_BIG);
+-                rc = pfnCallback(pMod, pszName, ~0U, (RTUINTPTR)Value, pvUser);
++                rc = pfnCallback(pMod, pszName, iSym, (RTUINTPTR)Value, pvUser);
+                 if (rc)
+                     return rc;
+             }
+@@ -820,13 +1052,11 @@ static DECLCALLBACK(int) RTLDRELF_NAME(G
+     switch (pModElf->Ehdr.e_type)
+     {
+         case ET_REL:
++        case ET_DYN:
+             break;
+         case ET_EXEC:
+             Log(("RTLdrELF: %s: Executable images are not supported yet!\n", pModElf->Core.pReader->pfnLogName(pModElf->Core.pReader)));
+             return VERR_LDRELF_EXEC;
+-        case ET_DYN:
+-            Log(("RTLdrELF: %s: Dynamic images are not supported yet!\n", pModElf->Core.pReader->pfnLogName(pModElf->Core.pReader)));
+-            return VERR_LDRELF_DYN;
+         default: AssertFailedReturn(VERR_BAD_EXE_FORMAT);
+     }
+ 
+@@ -885,13 +1115,11 @@ static DECLCALLBACK(int) RTLDRELF_NAME(R
+     switch (pModElf->Ehdr.e_type)
+     {
+         case ET_REL:
++        case ET_DYN:
+             break;
+         case ET_EXEC:
+             Log(("RTLdrELF: %s: Executable images are not supported yet!\n", pszLogName));
+             return VERR_LDRELF_EXEC;
+-        case ET_DYN:
+-            Log(("RTLdrELF: %s: Dynamic images are not supported yet!\n", pszLogName));
+-            return VERR_LDRELF_DYN;
+         default: AssertFailedReturn(VERR_BAD_EXE_FORMAT);
+     }
+ 
+@@ -910,8 +1138,9 @@ static DECLCALLBACK(int) RTLDRELF_NAME(R
+ 
+     /*
+      * Iterate the sections looking for interesting SHT_REL[A] sections.
+-     * SHT_REL[A] sections have the section index of the section they contain fixups
+-     * for in the sh_info member.
++     *
++     * In ET_REL files the SHT_REL[A] sections have the section index of
++     * the section they contain fixups for in the sh_info member.
+      */
+     const Elf_Shdr *paShdrs = pModElf->paShdrs;
+     Log2(("rtLdrElf: %s: Fixing up image\n", pszLogName));
+@@ -928,36 +1157,37 @@ static DECLCALLBACK(int) RTLDRELF_NAME(R
+         if (pShdrRel->sh_type != SHT_RELA)
+ #endif
+             continue;
+-        if (pShdrRel->sh_info >= pModElf->Ehdr.e_shnum)
+-            continue;
+-        const Elf_Shdr *pShdr = &paShdrs[pShdrRel->sh_info]; /* the section to fixup. */
+-        if (!(pShdr->sh_flags & SHF_ALLOC))
+-            continue;
+-
+-        /*
+-         * Relocate the section.
+-         */
+-        Log2(("rtldrELF: %s: Relocation records for #%d [%s] (sh_info=%d sh_link=%d) found in #%d [%s] (sh_info=%d sh_link=%d)\n",
+-              pszLogName, (int)pShdrRel->sh_info, ELF_SH_STR(pModElf, pShdr->sh_name), (int)pShdr->sh_info, (int)pShdr->sh_link,
+-              iShdr, ELF_SH_STR(pModElf, pShdrRel->sh_name), (int)pShdrRel->sh_info, (int)pShdrRel->sh_link));
+-
+-        /** @todo Make RelocateSection a function pointer so we can select the one corresponding to the machine when opening the image. */
+         if (pModElf->Ehdr.e_type == ET_REL)
+-            rc = RTLDRELF_NAME(RelocateSection)(pModElf, BaseAddr, pfnGetImport, pvUser,
+-                                                pShdr->sh_addr,
+-                                                pShdr->sh_size,
+-                                                (const uint8_t *)pModElf->pvBits + pShdr->sh_offset,
+-                                                (uint8_t *)pvBits + pShdr->sh_addr,
+-                                                (const uint8_t *)pModElf->pvBits + pShdrRel->sh_offset,
+-                                                pShdrRel->sh_size);
++        {
++            if (pShdrRel->sh_info >= pModElf->Ehdr.e_shnum)
++                continue;
++            const Elf_Shdr *pShdr = &paShdrs[pShdrRel->sh_info]; /* the section to fixup. */
++            if (!(pShdr->sh_flags & SHF_ALLOC))
++                continue;
++
++            /*
++             * Relocate the section.
++             */
++            Log2(("rtldrELF: %s: Relocation records for #%d [%s] (sh_info=%d sh_link=%d) found in #%d [%s] (sh_info=%d sh_link=%d)\n",
++                  pszLogName, (int)pShdrRel->sh_info, ELF_SH_STR(pModElf, pShdr->sh_name), (int)pShdr->sh_info, (int)pShdr->sh_link,
++                  iShdr, ELF_SH_STR(pModElf, pShdrRel->sh_name), (int)pShdrRel->sh_info, (int)pShdrRel->sh_link));
++
++            rc = RTLDRELF_NAME(RelocateSectionRel)(pModElf, BaseAddr, pfnGetImport, pvUser,
++                                                   pShdr->sh_addr,
++                                                   pShdr->sh_size,
++                                                   (const uint8_t *)pModElf->pvBits + pShdr->sh_offset,
++                                                   (uint8_t *)pvBits + pShdr->sh_addr,
++                                                   (const uint8_t *)pModElf->pvBits + pShdrRel->sh_offset,
++                                                   pShdrRel->sh_size);
++        }
+         else
+             rc = RTLDRELF_NAME(RelocateSectionExecDyn)(pModElf, BaseAddr, pfnGetImport, pvUser,
+-                                                       pShdr->sh_addr,
+-                                                       pShdr->sh_size,
+-                                                       (const uint8_t *)pModElf->pvBits + pShdr->sh_offset,
+-                                                       (uint8_t *)pvBits + pShdr->sh_addr,
++                                                       0, (Elf_Size)pModElf->cbImage,
++                                                       (const uint8_t *)pModElf->pvBits /** @todo file offset ?? */,
++                                                       (uint8_t *)pvBits,
+                                                        (const uint8_t *)pModElf->pvBits + pShdrRel->sh_offset,
+                                                        pShdrRel->sh_size);
++
+         if (RT_FAILURE(rc))
+             return rc;
+     }
+@@ -1016,11 +1246,20 @@ static DECLCALLBACK(int) RTLDRELF_NAME(G
+     /*
+      * Calc all kinds of pointers before we start iterating the symbol table.
+      */
+-    const Elf_Sym     *paSyms = pModElf->paSyms;
+-    unsigned            cSyms = pModElf->cSyms;
++    const Elf_Sym *paSyms  = pModElf->Rel.paSyms;
++    unsigned       cSyms   = pModElf->Rel.cSyms;
++    const char    *pszzStr = pModElf->Rel.pStr;
++    unsigned       cbStr   = pModElf->Rel.cbStr;
++    if (pModElf->Dyn.cSyms > 0)
++    {
++        paSyms  = pModElf->Dyn.paSyms;
++        cSyms   = pModElf->Dyn.cSyms;
++        pszzStr = pModElf->Dyn.pStr;
++        cbStr   = pModElf->Dyn.cbStr;
++    }
++
+     if (iOrdinal == UINT32_MAX)
+     {
+-        const char     *pStr  = pModElf->pStr;
+         for (unsigned iSym = 1; iSym < cSyms; iSym++)
+         {
+             /* Undefined symbols are not exports, they are imports. */
+@@ -1029,18 +1268,13 @@ static DECLCALLBACK(int) RTLDRELF_NAME(G
+                      || ELF_ST_BIND(paSyms[iSym].st_info) == STB_WEAK))
+             {
+                 /* Validate the name string and try match with it. */
+-                if (paSyms[iSym].st_name < pModElf->cbStr)
+-                {
+-                    if (!strcmp(pszSymbol, pStr + paSyms[iSym].st_name))
+-                    {
+-                        /* matched! */
+-                        return RTLDRELF_NAME(ReturnSymbol)(pModElf, &paSyms[iSym], uBaseAddr, pValue);
+-                    }
+-                }
+-                else
++                AssertMsgReturn(paSyms[iSym].st_name < cbStr,
++                                ("String outside string table! iSym=%d paSyms[iSym].st_name=%#x\n", iSym, paSyms[iSym].st_name),
++                                VERR_LDRELF_INVALID_SYMBOL_NAME_OFFSET);
++                if (!strcmp(pszSymbol, pszzStr + paSyms[iSym].st_name))
+                 {
+-                    AssertMsgFailed(("String outside string table! iSym=%d paSyms[iSym].st_name=%#x\n", iSym, paSyms[iSym].st_name));
+-                    return VERR_LDRELF_INVALID_SYMBOL_NAME_OFFSET;
++                    /* matched! */
++                    return RTLDRELF_NAME(ReturnSymbol)(pModElf, &paSyms[iSym], uBaseAddr, pValue);
+                 }
+             }
+         }
+@@ -1127,23 +1361,47 @@ static DECLCALLBACK(int) RTLDRELF_NAME(E
+ 
+ 
+ /**
+- * Helper that locates the first allocated section.
++ * Locate the next allocated section by RVA (sh_addr).
++ *
++ * This is a helper for EnumSegments and SegOffsetToRva.
+  *
+  * @returns Pointer to the section header if found, NULL if none.
+- * @param   pShdr   The section header to start searching at.
+- * @param   cLeft   The number of section headers left to search. Can be 0.
++ * @param   pModElf     The module instance.
++ * @param   iShdrCur    The current section header.
+  */
+-static const Elf_Shdr *RTLDRELF_NAME(GetFirstAllocatedSection)(const Elf_Shdr *pShdr, unsigned cLeft)
++static const Elf_Shdr *RTLDRELF_NAME(GetNextAllocatedSection)(PRTLDRMODELF pModElf, unsigned iShdrCur)
+ {
+-    while (cLeft-- > 0)
++    unsigned const          cShdrs  = pModElf->Ehdr.e_shnum;
++    const Elf_Shdr * const  paShdrs = pModElf->paShdrs;
++    if (pModElf->fShdrInOrder)
++    {
++        for (unsigned iShdr = iShdrCur + 1; iShdr < cShdrs; iShdr++)
++            if (paShdrs[iShdr].sh_flags & SHF_ALLOC)
++                return &paShdrs[iShdr];
++    }
++    else
+     {
+-        if (pShdr->sh_flags & SHF_ALLOC)
+-            return pShdr;
+-        pShdr++;
++        Elf_Addr const uEndCur = paShdrs[iShdrCur].sh_addr + paShdrs[iShdrCur].sh_size;
++        Elf_Addr       offBest = ~(Elf_Addr)0;
++        unsigned       iBest   = cShdrs;
++        for (unsigned iShdr = pModElf->iFirstSect; iShdr < cShdrs; iShdr++)
++            if ((paShdrs[iShdr].sh_flags & SHF_ALLOC) && iShdr != iShdrCur)
++            {
++                Elf_Addr const offDelta = paShdrs[iShdr].sh_addr - uEndCur;
++                if (   offDelta < offBest
++                    && paShdrs[iShdr].sh_addr >= uEndCur)
++                {
++                    offBest = offDelta;
++                    iBest   = iShdr;
++                }
++            }
++        if (iBest < cShdrs)
++            return &paShdrs[iBest];
+     }
+     return NULL;
+ }
+ 
++
+ /** @copydoc RTLDROPS::pfnEnumSegments. */
+ static DECLCALLBACK(int) RTLDRELF_NAME(EnumSegments)(PRTLDRMODINTERNAL pMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser)
+ {
+@@ -1163,15 +1421,23 @@ static DECLCALLBACK(int) RTLDRELF_NAME(E
+     Elf_Addr        uPrevMappedRva = 0;
+     const Elf_Shdr *paShdrs    = pModElf->paShdrs;
+     const Elf_Shdr *paOrgShdrs = pModElf->paOrgShdrs;
+-    for (unsigned iShdr = 1; iShdr < pModElf->Ehdr.e_shnum; iShdr++)
++    for (unsigned iShdr = pModElf->iFirstSect; iShdr < pModElf->Ehdr.e_shnum; iShdr++)
+     {
+         RTLDRSEG Seg;
+-        Seg.pszName     = ELF_SH_STR(pModElf, paShdrs[iShdr].sh_name);
+-        Seg.cchName     = (uint32_t)strlen(Seg.pszName);
+-        if (Seg.cchName == 0)
++        if (iShdr != 0)
++        {
++            Seg.pszName     = ELF_SH_STR(pModElf, paShdrs[iShdr].sh_name);
++            Seg.cchName     = (uint32_t)strlen(Seg.pszName);
++            if (Seg.cchName == 0)
++            {
++                Seg.pszName = szName;
++                Seg.cchName = (uint32_t)RTStrPrintf(szName, sizeof(szName), "UnamedSect%02u", iShdr);
++            }
++        }
++        else
+         {
+-            Seg.pszName = szName;
+-            Seg.cchName = (uint32_t)RTStrPrintf(szName, sizeof(szName), "UnamedSect%02u", iShdr);
++            Seg.pszName = ".elf.headers";
++            Seg.cchName = 12;
+         }
+         Seg.SelFlat     = 0;
+         Seg.Sel16bit    = 0;
+@@ -1187,14 +1453,11 @@ static DECLCALLBACK(int) RTLDRELF_NAME(E
+         {
+             Seg.LinkAddress = paOrgShdrs[iShdr].sh_addr;
+             Seg.RVA         = paShdrs[iShdr].sh_addr;
+-            const Elf_Shdr *pShdr2 = RTLDRELF_NAME(GetFirstAllocatedSection)(&paShdrs[iShdr + 1],
+-                                                                             pModElf->Ehdr.e_shnum - iShdr - 1);
+-            if (   pShdr2
+-                && pShdr2->sh_addr >= paShdrs[iShdr].sh_addr
+-                && Seg.RVA >= uPrevMappedRva)
++            const Elf_Shdr *pShdr2 = RTLDRELF_NAME(GetNextAllocatedSection)(pModElf, iShdr);
++            if (pShdr2)
+                 Seg.cbMapped = pShdr2->sh_addr - paShdrs[iShdr].sh_addr;
+             else
+-                Seg.cbMapped = RT_MAX(paShdrs[iShdr].sh_size, paShdrs[iShdr].sh_addralign);
++                Seg.cbMapped = pModElf->cbImage - paShdrs[iShdr].sh_addr;
+             uPrevMappedRva = Seg.RVA;
+         }
+         else
+@@ -1230,10 +1493,11 @@ static DECLCALLBACK(int) RTLDRELF_NAME(L
+     PRTLDRMODELF pModElf = (PRTLDRMODELF)pMod;
+ 
+     const Elf_Shdr *pShdrEnd = NULL;
+-    unsigned        cLeft    = pModElf->Ehdr.e_shnum - 1;
+-    const Elf_Shdr *pShdr    = &pModElf->paOrgShdrs[cLeft];
++    unsigned        cLeft    = pModElf->Ehdr.e_shnum - pModElf->iFirstSect;
++    const Elf_Shdr *pShdr    = &pModElf->paOrgShdrs[pModElf->Ehdr.e_shnum];
+     while (cLeft-- > 0)
+     {
++        pShdr--;
+         if (pShdr->sh_flags & SHF_ALLOC)
+         {
+             RTLDRADDR offSeg = LinkAddress - pShdr->sh_addr;
+@@ -1246,13 +1510,12 @@ static DECLCALLBACK(int) RTLDRELF_NAME(L
+             if (offSeg == pShdr->sh_size)
+                 pShdrEnd = pShdr;
+         }
+-        pShdr--;
+     }
+ 
+     if (pShdrEnd)
+     {
+         *poffSeg = pShdrEnd->sh_size;
+-        *piSeg   = pShdrEnd - pModElf->paOrgShdrs - 1;
++        *piSeg   = pShdrEnd - pModElf->paOrgShdrs - pModElf->iFirstSect;
+         return VINF_SUCCESS;
+     }
+ 
+@@ -1268,7 +1531,7 @@ static DECLCALLBACK(int) RTLDRELF_NAME(L
+     RTLDRADDR    offSeg;
+     int rc = RTLDRELF_NAME(LinkAddressToSegOffset)(pMod, LinkAddress, &iSeg, &offSeg);
+     if (RT_SUCCESS(rc))
+-        *pRva = pModElf->paShdrs[iSeg + 1].sh_addr + offSeg;
++        *pRva = pModElf->paShdrs[iSeg + pModElf->iFirstSect].sh_addr + offSeg;
+     return rc;
+ }
+ 
+@@ -1278,14 +1541,13 @@ static DECLCALLBACK(int) RTLDRELF_NAME(S
+                                                        PRTLDRADDR pRva)
+ {
+     PRTLDRMODELF pModElf = (PRTLDRMODELF)pMod;
+-    if (iSeg >= pModElf->Ehdr.e_shnum - 1U)
++    if (iSeg >= pModElf->Ehdr.e_shnum - pModElf->iFirstSect)
+         return VERR_LDR_INVALID_SEG_OFFSET;
+ 
+-    iSeg++; /* skip section 0 */
++    iSeg += pModElf->iFirstSect; /* skip section 0 if not used */
+     if (offSeg > pModElf->paShdrs[iSeg].sh_size)
+     {
+-        const Elf_Shdr *pShdr2 = RTLDRELF_NAME(GetFirstAllocatedSection)(&pModElf->paShdrs[iSeg + 1],
+-                                                                         pModElf->Ehdr.e_shnum - iSeg - 1);
++        const Elf_Shdr *pShdr2 = RTLDRELF_NAME(GetNextAllocatedSection)(pModElf, iSeg);
+         if (   !pShdr2
+             || offSeg > (pShdr2->sh_addr - pModElf->paShdrs[iSeg].sh_addr))
+             return VERR_LDR_INVALID_SEG_OFFSET;
+@@ -1303,13 +1565,13 @@ static DECLCALLBACK(int) RTLDRELF_NAME(S
+ static DECLCALLBACK(int) RTLDRELF_NAME(RvaToSegOffset)(PRTLDRMODINTERNAL pMod, RTLDRADDR Rva,
+                                                        uint32_t *piSeg, PRTLDRADDR poffSeg)
+ {
+-    PRTLDRMODELF pModElf = (PRTLDRMODELF)pMod;
+-
++    PRTLDRMODELF    pModElf  = (PRTLDRMODELF)pMod;
+     Elf_Addr        PrevAddr = 0;
+-    unsigned        cLeft    = pModElf->Ehdr.e_shnum - 1;
+-    const Elf_Shdr *pShdr    = &pModElf->paShdrs[cLeft];
++    unsigned        cLeft    = pModElf->Ehdr.e_shnum - pModElf->iFirstSect;
++    const Elf_Shdr *pShdr    = &pModElf->paShdrs[pModElf->Ehdr.e_shnum];
+     while (cLeft-- > 0)
+     {
++        pShdr--;
+         if (pShdr->sh_flags & SHF_ALLOC)
+         {
+             Elf_Addr    cbSeg  = PrevAddr ? PrevAddr - pShdr->sh_addr : pShdr->sh_size;
+@@ -1322,7 +1584,6 @@ static DECLCALLBACK(int) RTLDRELF_NAME(R
+             }
+             PrevAddr = pShdr->sh_addr;
+         }
+-        pShdr--;
+     }
+ 
+     return VERR_LDR_INVALID_RVA;
+@@ -1413,14 +1674,14 @@ static DECLCALLBACK(int) RTLDRELF_NAME(R
+          * Apply the relocations.
+          */
+         if (pThis->Ehdr.e_type == ET_REL)
+-            rc = RTLDRELF_NAME(RelocateSection)(pThis, pThis->LinkAddress,
+-                                                RTLDRELF_NAME(GetImportStubCallback), NULL /*pvUser*/,
+-                                                pThis->paShdrs[iDbgInfo].sh_addr,
+-                                                pThis->paShdrs[iDbgInfo].sh_size,
+-                                                (const uint8_t *)pvBuf,
+-                                                (uint8_t *)pvBuf,
+-                                                pbRelocs,
+-                                                pThis->paShdrs[iRelocs].sh_size);
++            rc = RTLDRELF_NAME(RelocateSectionRel)(pThis, pThis->LinkAddress,
++                                                   RTLDRELF_NAME(GetImportStubCallback), NULL /*pvUser*/,
++                                                   pThis->paShdrs[iDbgInfo].sh_addr,
++                                                   pThis->paShdrs[iDbgInfo].sh_size,
++                                                   (const uint8_t *)pvBuf,
++                                                   (uint8_t *)pvBuf,
++                                                   pbRelocs,
++                                                   pThis->paShdrs[iRelocs].sh_size);
+         else
+             rc = RTLDRELF_NAME(RelocateSectionExecDyn)(pThis, pThis->LinkAddress,
+                                                        RTLDRELF_NAME(GetImportStubCallback), NULL /*pvUser*/,
+@@ -1562,11 +1823,13 @@ static RTLDROPS RTLDRELF_MID(s_rtldrElf,
+  *
+  * @returns iprt status code.
+  * @param   pEhdr       Pointer to the ELF header.
+- * @param   pszLogName  The log name.
+  * @param   cbRawImage  The size of the raw image.
++ * @param   pszLogName  The log name.
++ * @param   penmArch    Where to return the architecture.
++ * @param   pErrInfo    Where to return extended error info. Optional.
+  */
+-static int RTLDRELF_NAME(ValidateElfHeader)(const Elf_Ehdr *pEhdr, const char *pszLogName, uint64_t cbRawImage,
+-                                            PRTLDRARCH penmArch)
++static int RTLDRELF_NAME(ValidateElfHeader)(const Elf_Ehdr *pEhdr, uint64_t cbRawImage, const char *pszLogName,
++                                            PRTLDRARCH penmArch, PRTERRINFO pErrInfo)
+ {
+     Log3(("RTLdrELF:     e_ident: %.*Rhxs\n"
+           "RTLdrELF:      e_type: " FMT_ELF_HALF "\n"
+@@ -1588,48 +1851,31 @@ static int RTLDRELF_NAME(ValidateElfHead
+     if (    pEhdr->e_ident[EI_MAG0] != ELFMAG0
+         ||  pEhdr->e_ident[EI_MAG1] != ELFMAG1
+         ||  pEhdr->e_ident[EI_MAG2] != ELFMAG2
+-        ||  pEhdr->e_ident[EI_MAG3] != ELFMAG3
+-       )
+-    {
+-        Log(("RTLdrELF: %s: Invalid ELF magic (%.*Rhxs)\n", pszLogName, sizeof(pEhdr->e_ident), pEhdr->e_ident)); NOREF(pszLogName);
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        ||  pEhdr->e_ident[EI_MAG3] != ELFMAG3)
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: Invalid ELF magic (%.*Rhxs)", pszLogName, sizeof(pEhdr->e_ident), pEhdr->e_ident);
+     if (pEhdr->e_ident[EI_CLASS] != RTLDRELF_SUFF(ELFCLASS))
+-    {
+-        Log(("RTLdrELF: %s: Invalid ELF class (%.*Rhxs)\n", pszLogName, sizeof(pEhdr->e_ident), pEhdr->e_ident));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: Invalid ELF class (%.*Rhxs)", pszLogName, sizeof(pEhdr->e_ident), pEhdr->e_ident);
+     if (pEhdr->e_ident[EI_DATA] != ELFDATA2LSB)
+-    {
+-        Log(("RTLdrELF: %s: ELF endian %x is unsupported\n", pszLogName, pEhdr->e_ident[EI_DATA]));
+-        return VERR_LDRELF_ODD_ENDIAN;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_LDRELF_ODD_ENDIAN,
++                                   "%s: ELF endian %x is unsupported", pszLogName, pEhdr->e_ident[EI_DATA]);
+     if (pEhdr->e_version != EV_CURRENT)
+-    {
+-        Log(("RTLdrELF: %s: ELF version %x is unsupported\n", pszLogName, pEhdr->e_version));
+-        return VERR_LDRELF_VERSION;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_LDRELF_VERSION,
++                                   "%s: ELF version %x is unsupported", pszLogName, pEhdr->e_version);
+ 
+     if (sizeof(Elf_Ehdr) != pEhdr->e_ehsize)
+-    {
+-        Log(("RTLdrELF: %s: Elf header e_ehsize is %d expected %d!\n",
+-             pszLogName, pEhdr->e_ehsize, sizeof(Elf_Ehdr)));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: Elf header e_ehsize is %d expected %d!", pszLogName, pEhdr->e_ehsize, sizeof(Elf_Ehdr));
+     if (    sizeof(Elf_Phdr) != pEhdr->e_phentsize
+-        &&  (    pEhdr->e_phnum != 0
+-             ||  pEhdr->e_type == ET_DYN))
+-    {
+-        Log(("RTLdrELF: %s: Elf header e_phentsize is %d expected %d!\n",
+-             pszLogName, pEhdr->e_phentsize, sizeof(Elf_Phdr)));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        &&  (   pEhdr->e_phnum != 0
++             || pEhdr->e_type == ET_DYN
++             || pEhdr->e_type == ET_EXEC))
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Elf header e_phentsize is %d expected %d!",
++                                   pszLogName, pEhdr->e_phentsize, sizeof(Elf_Phdr));
+     if (sizeof(Elf_Shdr) != pEhdr->e_shentsize)
+-    {
+-        Log(("RTLdrELF: %s: Elf header e_shentsize is %d expected %d!\n",
+-             pszLogName, pEhdr->e_shentsize, sizeof(Elf_Shdr)));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Elf header e_shentsize is %d expected %d!",
++                                   pszLogName, pEhdr->e_shentsize, sizeof(Elf_Shdr));
+ 
+     switch (pEhdr->e_type)
+     {
+@@ -1638,8 +1884,8 @@ static int RTLDRELF_NAME(ValidateElfHead
+         case ET_DYN:
+             break;
+         default:
+-            Log(("RTLdrELF: %s: image type %#x is not supported!\n", pszLogName, pEhdr->e_type));
+-            return VERR_BAD_EXE_FORMAT;
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: image type %#x is not supported!",
++                                       pszLogName, pEhdr->e_type);
+     }
+ 
+     switch (pEhdr->e_machine)
+@@ -1655,52 +1901,43 @@ static int RTLDRELF_NAME(ValidateElfHead
+             break;
+ #endif
+         default:
+-            Log(("RTLdrELF: %s: machine type %u is not supported!\n", pszLogName, pEhdr->e_machine));
+-            return VERR_LDRELF_MACHINE;
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_LDRELF_MACHINE,
++                                       "%s: machine type %u is not supported!", pszLogName, pEhdr->e_machine);
+     }
+ 
+     if (    pEhdr->e_phoff < pEhdr->e_ehsize
+         &&  !(pEhdr->e_phoff && pEhdr->e_phnum)
+         &&  pEhdr->e_phnum)
+-    {
+-        Log(("RTLdrELF: %s: The program headers overlap with the ELF header! e_phoff=" FMT_ELF_OFF "\n",
+-             pszLogName, pEhdr->e_phoff));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: The program headers overlap with the ELF header! e_phoff=" FMT_ELF_OFF,
++                                   pszLogName, pEhdr->e_phoff);
+     if (    pEhdr->e_phoff + pEhdr->e_phnum * pEhdr->e_phentsize > cbRawImage
+         ||  pEhdr->e_phoff + pEhdr->e_phnum * pEhdr->e_phentsize < pEhdr->e_phoff)
+-    {
+-        Log(("RTLdrELF: %s: The program headers extends beyond the file! e_phoff=" FMT_ELF_OFF " e_phnum=" FMT_ELF_HALF "\n",
+-             pszLogName, pEhdr->e_phoff, pEhdr->e_phnum));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: The program headers extends beyond the file! e_phoff=" FMT_ELF_OFF " e_phnum=" FMT_ELF_HALF,
++                                   pszLogName, pEhdr->e_phoff, pEhdr->e_phnum);
+ 
+ 
+     if (    pEhdr->e_shoff < pEhdr->e_ehsize
+         &&  !(pEhdr->e_shoff && pEhdr->e_shnum))
+-    {
+-        Log(("RTLdrELF: %s: The section headers overlap with the ELF header! e_shoff=" FMT_ELF_OFF "\n",
+-             pszLogName, pEhdr->e_shoff));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: The section headers overlap with the ELF header! e_shoff=" FMT_ELF_OFF,
++                                   pszLogName, pEhdr->e_shoff);
+     if (    pEhdr->e_shoff + pEhdr->e_shnum * pEhdr->e_shentsize > cbRawImage
+         ||  pEhdr->e_shoff + pEhdr->e_shnum * pEhdr->e_shentsize < pEhdr->e_shoff)
+-    {
+-        Log(("RTLdrELF: %s: The section headers extends beyond the file! e_shoff=" FMT_ELF_OFF " e_shnum=" FMT_ELF_HALF "\n",
+-             pszLogName, pEhdr->e_shoff, pEhdr->e_shnum));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: The section headers extends beyond the file! e_shoff=" FMT_ELF_OFF " e_shnum=" FMT_ELF_HALF,
++                                   pszLogName, pEhdr->e_shoff, pEhdr->e_shnum);
+ 
+     if (pEhdr->e_shstrndx == 0 || pEhdr->e_shstrndx > pEhdr->e_shnum)
+-    {
+-        Log(("RTLdrELF: %s: The section headers string table is out of bounds! e_shstrndx=" FMT_ELF_HALF " e_shnum=" FMT_ELF_HALF "\n",
+-             pszLogName, pEhdr->e_shstrndx, pEhdr->e_shnum));
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: The section headers string table is out of bounds! e_shstrndx=" FMT_ELF_HALF " e_shnum=" FMT_ELF_HALF,
++                                   pszLogName, pEhdr->e_shstrndx, pEhdr->e_shnum);
+ 
+     return VINF_SUCCESS;
+ }
+ 
++
+ /**
+  * Gets the section header name.
+  *
+@@ -1741,10 +1978,12 @@ const char *RTLDRELF_NAME(GetSHdrName)(P
+  * @param   pModElf     Pointer to the module structure.
+  * @param   iShdr       The index of section header which should be validated.
+  *                      The section headers are found in the pModElf->paShdrs array.
+- * @param   pszLogName  The log name.
+  * @param   cbRawImage  The size of the raw image.
++ * @param   pszLogName  The log name.
++ * @param   pErrInfo    Where to return extended error info. Optional.
+  */
+-static int RTLDRELF_NAME(ValidateSectionHeader)(PRTLDRMODELF pModElf, unsigned iShdr, const char *pszLogName, uint64_t cbRawImage)
++static int RTLDRELF_NAME(ValidateSectionHeader)(PRTLDRMODELF pModElf, unsigned iShdr, uint64_t cbRawImage,
++                                                const char *pszLogName, PRTERRINFO pErrInfo)
+ {
+     const Elf_Shdr *pShdr = &pModElf->paShdrs[iShdr];
+     char szSectionName[80]; NOREF(szSectionName);
+@@ -1776,37 +2015,29 @@ static int RTLDRELF_NAME(ValidateSection
+             || pShdr->sh_link       != SHN_UNDEF
+             || pShdr->sh_addralign  != 0
+             || pShdr->sh_entsize    != 0 )
+-        {
+-            Log(("RTLdrELF: %s: Bad #0 section: %.*Rhxs\n", pszLogName, sizeof(*pShdr), pShdr ));
+-            return VERR_BAD_EXE_FORMAT;
+-        }
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                       "%s: Bad #0 section: %.*Rhxs", pszLogName, sizeof(*pShdr), pShdr);
+         return VINF_SUCCESS;
+     }
+ 
+     if (pShdr->sh_name >= pModElf->cbShStr)
+-    {
+-        Log(("RTLdrELF: %s: Shdr #%d: sh_name (%d) is beyond the end of the section header string table (%d)!\n",
+-             pszLogName, iShdr, pShdr->sh_name, pModElf->cbShStr)); NOREF(pszLogName);
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: Shdr #%d: sh_name (%d) is beyond the end of the section header string table (%d)!",
++                                   pszLogName, iShdr, pShdr->sh_name, pModElf->cbShStr);
+ 
+     if (pShdr->sh_link >= pModElf->Ehdr.e_shnum)
+-    {
+-        Log(("RTLdrELF: %s: Shdr #%d: sh_link (%d) is beyond the end of the section table (%d)!\n",
+-             pszLogName, iShdr, pShdr->sh_link, pModElf->Ehdr.e_shnum)); NOREF(pszLogName);
+-        return VERR_BAD_EXE_FORMAT;
+-    }
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: Shdr #%d: sh_link (%d) is beyond the end of the section table (%d)!",
++                                   pszLogName, iShdr, pShdr->sh_link, pModElf->Ehdr.e_shnum);
+ 
+     switch (pShdr->sh_type)
+     {
+         /** @todo find specs and check up which sh_info fields indicates section table entries */
+         case 12301230:
+             if (pShdr->sh_info >= pModElf->Ehdr.e_shnum)
+-            {
+-                Log(("RTLdrELF: %s: Shdr #%d: sh_info (%d) is beyond the end of the section table (%d)!\n",
+-                     pszLogName, iShdr, pShdr->sh_link, pModElf->Ehdr.e_shnum));
+-                return VERR_BAD_EXE_FORMAT;
+-            }
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                           "%s: Shdr #%d: sh_info (%d) is beyond the end of the section table (%d)!",
++                                           pszLogName, iShdr, pShdr->sh_link, pModElf->Ehdr.e_shnum);
+             break;
+ 
+         case SHT_NULL:
+@@ -1840,18 +2071,740 @@ static int RTLDRELF_NAME(ValidateSection
+         uint64_t offEnd = pShdr->sh_offset + pShdr->sh_size;
+         if (    offEnd > cbRawImage
+             ||  offEnd < (uint64_t)pShdr->sh_offset)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                       "%s: Shdr #%d: sh_offset (" FMT_ELF_OFF ") + sh_size (" FMT_ELF_XWORD " = %RX64) is beyond the end of the file (%RX64)!",
++                                       pszLogName, iShdr, pShdr->sh_offset, pShdr->sh_size, offEnd, cbRawImage);
++        if (pShdr->sh_offset < sizeof(Elf_Ehdr))
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                       "%s: Shdr #%d: sh_offset (" FMT_ELF_OFF ") + sh_size (" FMT_ELF_XWORD ") is starting in the ELF header!",
++                                       pszLogName, iShdr, pShdr->sh_offset, pShdr->sh_size);
++    }
++
++    return VINF_SUCCESS;
++}
++
++
++/**
++ * Process the section headers.
++ *
++ * @returns iprt status code.
++ * @param   pModElf     Pointer to the module structure.
++ * @param   paShdrs     The section headers.
++ * @param   cbRawImage  The size of the raw image.
++ * @param   pszLogName  The log name.
++ * @param   pErrInfo    Where to return extended error info. Optional.
++ */
++static int RTLDRELF_NAME(ValidateAndProcessSectionHeaders)(PRTLDRMODELF pModElf, Elf_Shdr *paShdrs, uint64_t cbRawImage,
++                                                           const char *pszLogName, PRTERRINFO pErrInfo)
++{
++    Elf_Addr uNextAddr = 0;
++    for (unsigned i = 0; i < pModElf->Ehdr.e_shnum; i++)
++    {
++        int rc = RTLDRELF_NAME(ValidateSectionHeader)(pModElf, i, cbRawImage, pszLogName, pErrInfo);
++        if (RT_FAILURE(rc))
++            return rc;
++
++        /*
++         * We're looking for symbol tables.
++         */
++        if (paShdrs[i].sh_type == SHT_SYMTAB)
+         {
+-            Log(("RTLdrELF: %s: Shdr #%d: sh_offset (" FMT_ELF_OFF ") + sh_size (" FMT_ELF_XWORD " = %RX64) is beyond the end of the file (%RX64)!\n",
+-                 pszLogName, iShdr, pShdr->sh_offset, pShdr->sh_size, offEnd, cbRawImage));
+-            return VERR_BAD_EXE_FORMAT;
++            if (pModElf->Rel.iSymSh != ~0U)
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_LDRELF_MULTIPLE_SYMTABS,
++                                           "%s: Multiple symbol tabs! iSymSh=%d i=%d", pszLogName, pModElf->Rel.iSymSh, i);
++            pModElf->Rel.iSymSh = i;
++            pModElf->Rel.cSyms  = (unsigned)(paShdrs[i].sh_size / sizeof(Elf_Sym));
++            AssertBreakStmt(pModElf->Rel.cSyms == paShdrs[i].sh_size / sizeof(Elf_Sym), rc = VERR_IMAGE_TOO_BIG);
++            pModElf->Rel.iStrSh = paShdrs[i].sh_link;
++            pModElf->Rel.cbStr  = (unsigned)paShdrs[pModElf->Rel.iStrSh].sh_size;
++            AssertBreakStmt(pModElf->Rel.cbStr == paShdrs[pModElf->Rel.iStrSh].sh_size, rc = VERR_IMAGE_TOO_BIG);
++        }
++        else if (paShdrs[i].sh_type == SHT_DYNSYM)
++        {
++            if (pModElf->Dyn.iSymSh != ~0U)
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_LDRELF_MULTIPLE_SYMTABS,
++                                           "%s: Multiple dynamic symbol tabs! iSymSh=%d i=%d", pszLogName, pModElf->Dyn.iSymSh, i);
++            if (pModElf->Ehdr.e_type != ET_DYN && pModElf->Ehdr.e_type != ET_EXEC)
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                           "%s: Unexpected SHT_DYNSYM (i=%d) for e_type=%d", pszLogName, i, pModElf->Ehdr.e_type);
++            pModElf->Dyn.iSymSh = i;
++            pModElf->Dyn.cSyms  = (unsigned)(paShdrs[i].sh_size / sizeof(Elf_Sym));
++            AssertBreakStmt(pModElf->Dyn.cSyms == paShdrs[i].sh_size / sizeof(Elf_Sym), rc = VERR_IMAGE_TOO_BIG);
++            pModElf->Dyn.iStrSh = paShdrs[i].sh_link;
++            pModElf->Dyn.cbStr  = (unsigned)paShdrs[pModElf->Dyn.iStrSh].sh_size;
++            AssertBreakStmt(pModElf->Dyn.cbStr == paShdrs[pModElf->Dyn.iStrSh].sh_size, rc = VERR_IMAGE_TOO_BIG);
+         }
+-        if (pShdr->sh_offset < sizeof(Elf_Ehdr))
++        /*
++         * We're also look for the dynamic section.
++         */
++        else if (paShdrs[i].sh_type == SHT_DYNAMIC)
++        {
++            if (pModElf->iShDynamic != ~0U)
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                           "%s: Multiple dynamic sections! iShDynamic=%d i=%d",
++                                           pszLogName, pModElf->iShDynamic, i);
++            if (pModElf->Ehdr.e_type != ET_DYN && pModElf->Ehdr.e_type != ET_EXEC)
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                           "%s: Unexpected SHT_DYNAMIC (i=%d) for e_type=%d", pszLogName, i, pModElf->Ehdr.e_type);
++            if (paShdrs[i].sh_entsize != sizeof(Elf_Dyn))
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                           "%s: SHT_DYNAMIC (i=%d) sh_entsize=" FMT_ELF_XWORD ",  expected %#zx",
++                                           pszLogName, i, paShdrs[i].sh_entsize, sizeof(Elf_Dyn));
++            pModElf->iShDynamic = i;
++            Elf_Xword const cDynamic = paShdrs[i].sh_size / sizeof(Elf_Dyn);
++            if (cDynamic > _64K || cDynamic < 2)
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                           "%s: SHT_DYNAMIC (i=%d) sh_size=" FMT_ELF_XWORD " is out of range (2..64K)",
++                                           pszLogName, i, paShdrs[i].sh_size);
++            pModElf->cDynamic = (unsigned)cDynamic;
++        }
++
++        /*
++         * Special checks for the section string table.
++         */
++        if (i == pModElf->Ehdr.e_shstrndx)
+         {
+-            Log(("RTLdrELF: %s: Shdr #%d: sh_offset (" FMT_ELF_OFF ") + sh_size (" FMT_ELF_XWORD ") is starting in the ELF header!\n",
+-                 pszLogName, iShdr, pShdr->sh_offset, pShdr->sh_size));
+-            return VERR_BAD_EXE_FORMAT;
++            if (paShdrs[i].sh_type != SHT_STRTAB)
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                           "%s: Section header string table is not a SHT_STRTAB: %#x",
++                                           pszLogName, paShdrs[i].sh_type);
++            if (paShdrs[i].sh_size == 0)
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Section header string table is empty", pszLogName);
+         }
++
++        /*
++         * Kluge for the .data..percpu segment in 64-bit linux kernels.
++         */
++        if (paShdrs[i].sh_flags & SHF_ALLOC)
++        {
++            if (   paShdrs[i].sh_addr == 0
++                && paShdrs[i].sh_addr < uNextAddr)
++            {
++                Elf_Addr uAddr = RT_ALIGN_T(uNextAddr, paShdrs[i].sh_addralign, Elf_Addr);
++                Log(("RTLdrElf: Out of order section #%d; adjusting sh_addr from " FMT_ELF_ADDR " to " FMT_ELF_ADDR "\n",
++                     i, paShdrs[i].sh_addr, uAddr));
++                paShdrs[i].sh_addr = uAddr;
++            }
++            uNextAddr = paShdrs[i].sh_addr + paShdrs[i].sh_size;
++        }
++    } /* for each section header */
++
++    return VINF_SUCCESS;
++}
++
++
++/**
++ * Process the section headers.
++ *
++ * @returns iprt status code.
++ * @param   pModElf     Pointer to the module structure.
++ * @param   paShdrs     The section headers.
++ * @param   cbRawImage  The size of the raw image.
++ * @param   pszLogName  The log name.
++ * @param   pErrInfo    Where to return extended error info. Optional.
++ */
++static int RTLDRELF_NAME(ValidateAndProcessDynamicInfo)(PRTLDRMODELF pModElf, uint64_t cbRawImage, uint32_t fFlags,
++                                                        const char *pszLogName, PRTERRINFO pErrInfo)
++{
++    /*
++     * Check preconditions.
++     */
++    AssertReturn(pModElf->Ehdr.e_type == ET_DYN || pModElf->Ehdr.e_type == ET_EXEC, VERR_INTERNAL_ERROR_2);
++    if (pModElf->Ehdr.e_phnum <= 1 || pModElf->Ehdr.e_phnum >= _32K)
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                   "%s: e_phnum=%u is out of bounds (2..32K)", pszLogName, pModElf->Ehdr.e_phnum);
++    if (pModElf->iShDynamic == ~0U)
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: no .dynamic section", pszLogName);
++    AssertReturn(pModElf->cDynamic > 1 && pModElf->cDynamic <= _64K, VERR_INTERNAL_ERROR_3);
++
++    /* ASSUME that the sections are ordered by address.  That simplifies
++       validation code further down. */
++    AssertReturn(pModElf->Ehdr.e_shnum >= 2, VERR_INTERNAL_ERROR_4);
++    Elf_Shdr const *paShdrs  = pModElf->paShdrs;
++    Elf_Addr        uPrevEnd = paShdrs[1].sh_addr + paShdrs[1].sh_size;
++    for (unsigned i = 2; i < pModElf->Ehdr.e_shnum; i++)
++        if (paShdrs[i].sh_flags & SHF_ALLOC)
++        {
++            if (uPrevEnd > paShdrs[i].sh_addr)
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                           "%s: section %u is out of order: uPrevEnd=" FMT_ELF_ADDR " sh_addr=" FMT_ELF_ADDR,
++                                           pszLogName, i, uPrevEnd, paShdrs[i].sh_addr);
++            uPrevEnd = paShdrs[i].sh_addr + paShdrs[i].sh_size;
++        }
++
++    /* Must have string and symbol tables. */
++    if (pModElf->Dyn.iStrSh == ~0U)
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: No dynamic string table section", pszLogName);
++    if (pModElf->Dyn.iSymSh == ~0U)
++        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: No dynamic symbol table section", pszLogName);
++
++    /*
++     * Load the program headers.
++     */
++    size_t const cbPhdrs = sizeof(pModElf->paPhdrs[0]) * pModElf->Ehdr.e_phnum;
++    Elf_Phdr    *paPhdrs = (Elf_Phdr *)RTMemAllocZ(cbPhdrs);
++    pModElf->paPhdrs = paPhdrs;
++    AssertReturn(paPhdrs, VERR_NO_MEMORY);
++
++    int rc = pModElf->Core.pReader->pfnRead(pModElf->Core.pReader, paPhdrs, cbPhdrs, pModElf->Ehdr.e_phoff);
++    if (RT_FAILURE(rc))
++        return RTERRINFO_LOG_SET_F(pErrInfo, rc, "%s: pfnRead(,,%#zx, " FMT_ELF_OFF ") -> %Rrc",
++                                   pszLogName, cbPhdrs, pModElf->Ehdr.e_phoff, rc);
++
++    /*
++     * Validate them.
++     */
++    unsigned cbPage = _4K; /** @todo generalize architecture specific stuff using its own code template header.  */
++    switch (pModElf->Core.enmArch)
++    {
++        case RTLDRARCH_AMD64:
++        case RTLDRARCH_X86_32:
++            break;
++        default:
++            AssertFailedBreak(/** @todo page size for got.plt hacks */);
+     }
++    unsigned iLoad          = 0;
++    unsigned iLoadShdr      = 1; /* ASSUMES ordered (checked above). */
++    unsigned cDynamic       = 0;
++    Elf_Addr cbImage        = 0;
++    Elf_Addr uLinkAddress   = ~(Elf_Addr)0;
++    for (unsigned i = 0; i < pModElf->Ehdr.e_phnum; i++)
++    {
++        const Elf_Phdr * const pPhdr = &paPhdrs[i];
++        Log3(("RTLdrELF: Program Header #%d:\n"
++              "RTLdrELF:   p_type: " FMT_ELF_WORD " (%s)\n"
++              "RTLdrELF:  p_flags: " FMT_ELF_WORD "\n"
++              "RTLdrELF: p_offset: " FMT_ELF_OFF "\n"
++              "RTLdrELF:  p_vaddr: " FMT_ELF_ADDR "\n"
++              "RTLdrELF:  p_paddr: " FMT_ELF_ADDR "\n"
++              "RTLdrELF: p_filesz: " FMT_ELF_XWORD "\n"
++              "RTLdrELF:  p_memsz: " FMT_ELF_XWORD "\n"
++              "RTLdrELF:  p_align: " FMT_ELF_XWORD "\n",
++              i,
++              pPhdr->p_type, rtldrElfGetPhdrType(pPhdr->p_type), pPhdr->p_flags, pPhdr->p_offset,
++              pPhdr->p_vaddr, pPhdr->p_paddr, pPhdr->p_filesz, pPhdr->p_memsz, pPhdr->p_align));
++
++        if (pPhdr->p_type == DT_NULL)
++            continue;
++
++        if (   pPhdr->p_filesz != 0
++            && (   pPhdr->p_offset >= cbRawImage
++                || pPhdr->p_filesz > cbRawImage
++                || pPhdr->p_offset + pPhdr->p_filesz > cbRawImage))
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                       "%s: Prog Hdr #%u: bogus p_offset=" FMT_ELF_OFF " & p_filesz=" FMT_ELF_XWORD " (file size %#RX64)",
++                                       pszLogName, i, pPhdr->p_offset, pPhdr->p_filesz, cbRawImage);
++
++        if (pPhdr->p_flags & ~(Elf64_Word)(PF_X | PF_R | PF_W))
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Prog Hdr #%u: bogus p_flags=" FMT_ELF_WORD,
++                                       pszLogName, i, pPhdr->p_flags);
++
++        if (!RT_IS_POWER_OF_TWO(pPhdr->p_align))
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Prog Hdr #%u: bogus p_align=" FMT_ELF_XWORD,
++                                       pszLogName, i, pPhdr->p_align);
++
++        if (   pPhdr->p_align  > 1
++            && pPhdr->p_memsz  > 0
++            && pPhdr->p_filesz > 0
++            && (pPhdr->p_offset & (pPhdr->p_align - 1)) != (pPhdr->p_vaddr & (pPhdr->p_align - 1)))
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                       "%s: Prog Hdr #%u: misaligned p_offset=" FMT_ELF_OFF " p_vaddr=" FMT_ELF_ADDR " p_align=" FMT_ELF_XWORD,
++                                       pszLogName, i, pPhdr->p_offset, pPhdr->p_vaddr, pPhdr->p_align);
++
++        /* Do some type specfic checks: */
++        switch (pPhdr->p_type)
++        {
++            case PT_LOAD:
++            {
++                if (pPhdr->p_memsz < pPhdr->p_filesz)
++                    return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                               "%s: Prog Hdr #%u/LOAD#%u: bogus p_memsz=" FMT_ELF_XWORD " or p_filesz=" FMT_ELF_XWORD,
++                                               pszLogName, i, iLoad, pPhdr->p_memsz, pPhdr->p_filesz);
++                cbImage = pPhdr->p_vaddr + pPhdr->p_memsz;
++                if (iLoad == 0)
++                    uLinkAddress = pPhdr->p_vaddr;
++
++                /* Find the corresponding sections, checking their addresses and
++                   file offsets since the rest of the code is still section based
++                   rather than using program headers as it should... */
++                Elf_Off         off     = pPhdr->p_offset;
++                Elf_Addr        uAddr   = pPhdr->p_vaddr;
++                Elf_Xword       cbMem   = pPhdr->p_memsz;
++                Elf_Xword       cbFile  = pPhdr->p_filesz;
++                while (cbMem > 0)
++                {
++                    if (iLoadShdr < pModElf->Ehdr.e_shnum)
++                    { /* likely */ }
++                    else if (iLoadShdr == pModElf->Ehdr.e_shnum)
++                    {
++                        /** @todo anything else to check here? */
++                        iLoadShdr++;
++                        break;
++                    }
++                    else
++                        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                                   "%s: Prog Hdr #%u/LOAD#%u: Out of sections at " FMT_ELF_ADDR " LB " FMT_ELF_XWORD,
++                                                   pszLogName, i, iLoad, uAddr, cbMem);
++                    if (!(paShdrs[iLoadShdr].sh_flags & SHF_ALLOC))
++                    {
++                        if (   paShdrs[iLoadShdr].sh_type != SHT_NOBITS
++                            && paShdrs[iLoadShdr].sh_size > 0
++                            && off < paShdrs[iLoadShdr].sh_offset + paShdrs[iLoadShdr].sh_size
++                            && paShdrs[iLoadShdr].sh_offset < off + cbMem)
++                            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                                       "%s: Prog Hdr #%u/LOAD#%u: Overlaps with !SHF_ALLOC section at " FMT_ELF_OFF " LB " FMT_ELF_XWORD,
++                                                       pszLogName, i, iLoad, paShdrs[iLoadShdr].sh_offset, paShdrs[iLoadShdr].sh_size);
++                        pModElf->paShdrExtras[iLoadShdr].idxPhdr = UINT16_MAX;
++                        iLoadShdr++;
++                        continue;
++                    }
++
++                    if (uAddr != paShdrs[iLoadShdr].sh_addr)
++                    {
++                        /* Before the first section we expect headers to be loaded, so
++                           that the file is simply mapped from file offset zero. */
++                        if (   iLoadShdr == 1
++                            && iLoad     == 0
++                            && paShdrs[1].sh_addr == paShdrs[1].sh_offset
++                            && cbFile    >= paShdrs[1].sh_offset
++                            && cbMem     >= paShdrs[1].sh_offset)
++                        {
++                            /* Modify paShdrs[0] to describe the gap. ".elf.headers" */
++                            pModElf->iFirstSect              = 0;
++                            pModElf->paShdrs[0].sh_name      = 0;
++                            pModElf->paShdrs[0].sh_type      = SHT_PROGBITS;
++                            pModElf->paShdrs[0].sh_flags     = SHF_ALLOC
++                                                             | (pPhdr->p_flags & PF_W ? SHF_WRITE     : 0)
++                                                             | (pPhdr->p_flags & PF_X ? SHF_EXECINSTR : 0);
++                            pModElf->paShdrs[0].sh_addr      = uAddr;
++                            pModElf->paShdrs[0].sh_offset    = off;
++                            pModElf->paShdrs[0].sh_size      = paShdrs[1].sh_offset;
++                            pModElf->paShdrs[0].sh_link      = 0;
++                            pModElf->paShdrs[0].sh_info      = 0;
++                            pModElf->paShdrs[0].sh_addralign = pPhdr->p_align;
++                            pModElf->paShdrs[0].sh_entsize   = 0;
++                            *(Elf_Shdr *)pModElf->paOrgShdrs = pModElf->paShdrs[0]; /* (necessary for segment enumeration) */
++
++                            uAddr  += paShdrs[1].sh_offset;
++                            cbMem  -= paShdrs[1].sh_offset;
++                            cbFile -= paShdrs[1].sh_offset;
++                            off     = paShdrs[1].sh_offset;
++                        }
++                        /* Alignment padding?  Allow up to a page size. */
++                        else if (   paShdrs[iLoadShdr].sh_addr > uAddr
++                                 &&   paShdrs[iLoadShdr].sh_addr - uAddr
++                                    < RT_MAX(paShdrs[iLoadShdr].sh_addralign, cbPage /*got.plt hack*/))
++                        {
++                            Elf_Xword cbAlignPadding = paShdrs[iLoadShdr].sh_addr - uAddr;
++                            if (cbAlignPadding >= cbMem)
++                                break;
++                            cbMem -= cbAlignPadding;
++                            uAddr += cbAlignPadding;
++                            if (cbFile > cbAlignPadding)
++                            {
++                                off    += cbAlignPadding;
++                                cbFile -= cbAlignPadding;
++                            }
++                            else
++                            {
++                                off   += cbFile;
++                                cbFile = 0;
++                            }
++                        }
++                    }
++
++                    if (   uAddr == paShdrs[iLoadShdr].sh_addr
++                        && cbMem >= paShdrs[iLoadShdr].sh_size
++                        && (  paShdrs[iLoadShdr].sh_type != SHT_NOBITS
++                            ?    off    == paShdrs[iLoadShdr].sh_offset
++                              && cbFile >= paShdrs[iLoadShdr].sh_size /* this might be too strict... */
++                            : cbFile == 0) )
++                    {
++                        if (paShdrs[iLoadShdr].sh_type != SHT_NOBITS)
++                        {
++                            off    += paShdrs[iLoadShdr].sh_size;
++                            cbFile -= paShdrs[iLoadShdr].sh_size;
++                        }
++                        uAddr += paShdrs[iLoadShdr].sh_size;
++                        cbMem -= paShdrs[iLoadShdr].sh_size;
++                    }
++                    else
++                        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                                   "%s: Prog Hdr #%u/LOAD#%u: Mismatch at " FMT_ELF_ADDR " LB " FMT_ELF_XWORD " (file " FMT_ELF_OFF " LB " FMT_ELF_XWORD ") with section #%u " FMT_ELF_ADDR " LB " FMT_ELF_XWORD " (file " FMT_ELF_OFF " sh_type=" FMT_ELF_WORD ")",
++                                                   pszLogName, i, iLoad, uAddr, cbMem, off, cbFile,
++                                                   iLoadShdr, paShdrs[iLoadShdr].sh_addr, paShdrs[iLoadShdr].sh_size,
++                                                   paShdrs[iLoadShdr].sh_offset, paShdrs[iLoadShdr].sh_type);
++
++                    pModElf->paShdrExtras[iLoadShdr].idxPhdr = iLoad;
++                    iLoadShdr++;
++                } /* section loop */
++
++                iLoad++;
++                break;
++            }
++
++            case PT_DYNAMIC:
++            {
++                const Elf_Shdr *pShdr = &pModElf->paShdrs[pModElf->iShDynamic];
++                if (pPhdr->p_offset != pShdr->sh_offset)
++                    return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                               "%s: Prog Hdr #%u/DYNAMIC: p_offset=" FMT_ELF_OFF " expected " FMT_ELF_OFF,
++                                               pszLogName, i, pPhdr->p_offset, pShdr->sh_offset);
++                if (RT_MAX(pPhdr->p_memsz, pPhdr->p_filesz) != pShdr->sh_size)
++                    return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                               "%s: Prog Hdr #%u/DYNAMIC: expected " FMT_ELF_XWORD " for RT_MAX(p_memsz=" FMT_ELF_XWORD ", p_filesz=" FMT_ELF_XWORD ")",
++                                               pszLogName, i, pShdr->sh_size, pPhdr->p_memsz, pPhdr->p_filesz);
++                cDynamic++;
++                break;
++            }
++        }
++    }
++
++    if (iLoad == 0)
++        return RTERRINFO_LOG_SET_F(pErrInfo, rc, "%s: No PT_LOAD program headers", pszLogName);
++    if (cDynamic != 1)
++        return RTERRINFO_LOG_SET_F(pErrInfo, rc, "%s: No program header for the DYNAMIC section", pszLogName);
++
++    cbImage -= uLinkAddress;
++    pModElf->cbImage     = (uint64_t)cbImage;
++    pModElf->LinkAddress = uLinkAddress;
++    AssertReturn(pModElf->cbImage == cbImage, VERR_INTERNAL_ERROR_5);
++    Log3(("RTLdrELF: LinkAddress=" FMT_ELF_ADDR " cbImage=" FMT_ELF_ADDR " (from PT_LOAD)\n", uLinkAddress, cbImage));
++
++    for (; iLoadShdr < pModElf->Ehdr.e_shnum; iLoadShdr++)
++        if (   !(paShdrs[iLoadShdr].sh_flags & SHF_ALLOC)
++            || paShdrs[iLoadShdr].sh_size == 0)
++            pModElf->paShdrExtras[iLoadShdr].idxPhdr = UINT16_MAX;
++        else
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                       "%s: No PT_LOAD for section #%u " FMT_ELF_ADDR " LB " FMT_ELF_XWORD " (file " FMT_ELF_OFF " sh_type=" FMT_ELF_WORD ")",
++                                       pszLogName, iLoadShdr, paShdrs[iLoadShdr].sh_addr, paShdrs[iLoadShdr].sh_size,
++                                       paShdrs[iLoadShdr].sh_offset, paShdrs[iLoadShdr].sh_type);
++
++    /*
++     * Load and validate the dynamic table.  We have got / will get most of the
++     * info we need from the section table, so we must make sure this matches up.
++     */
++    Log3(("RTLdrELF: Dynamic section - %u entries\n", pModElf->cDynamic));
++    size_t const    cbDynamic = pModElf->cDynamic * sizeof(pModElf->paDynamic[0]);
++    Elf_Dyn * const paDynamic = (Elf_Dyn *)RTMemAlloc(cbDynamic);
++    AssertReturn(paDynamic, VERR_NO_MEMORY);
++    pModElf->paDynamic = paDynamic;
++
++    rc = pModElf->Core.pReader->pfnRead(pModElf->Core.pReader, paDynamic, cbDynamic, paShdrs[pModElf->iShDynamic].sh_offset);
++    if (RT_FAILURE(rc))
++        return RTERRINFO_LOG_SET_F(pErrInfo, rc, "%s: pfnRead(,,%#zx, " FMT_ELF_OFF ") -> %Rrc",
++                                   pszLogName, cbDynamic, paShdrs[pModElf->iShDynamic].sh_offset, rc);
++
++    for (uint32_t i = 0; i < pModElf->cDynamic; i++)
++    {
++#define LOG_VALIDATE_PTR_RET(szName) do { \
++            Log3(("RTLdrELF: DT[%u]: %16s " FMT_ELF_ADDR "\n", i, szName, paDynamic[i].d_un.d_ptr)); \
++            if ((uint64_t)paDynamic[i].d_un.d_ptr - uLinkAddress < cbImage) { /* likely */ } \
++            else return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/" szName ": Invalid address " FMT_ELF_ADDR " (valid range: " FMT_ELF_ADDR " LB " FMT_ELF_ADDR ")", \
++                                            pszLogName, i, paDynamic[i].d_un.d_ptr, uLinkAddress, cbImage); \
++        } while (0)
++#define LOG_VALIDATE_PTR_VAL_RET(szName, uExpected) do { \
++            Log3(("RTLdrELF: DT[%u]: %16s " FMT_ELF_ADDR "\n", i, szName, (uint64_t)paDynamic[i].d_un.d_ptr)); \
++            if (paDynamic[i].d_un.d_ptr == (Elf_Addr)(uExpected)) { /* likely */ } \
++            else return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/" szName ": " FMT_ELF_ADDR ", expected " FMT_ELF_ADDR, \
++                                            pszLogName, i, paDynamic[i].d_un.d_ptr, (Elf_Addr)(uExpected)); \
++        } while (0)
++#define LOG_VALIDATE_STR_RET(szName) do { \
++            Log3(("RTLdrELF: DT[%u]: %16s %#RX64\n", i, szName, (uint64_t)paDynamic[i].d_un.d_val)); \
++            if ((uint64_t)paDynamic[i].d_un.d_val < pModElf->Dyn.cbStr) { /* likely */ } \
++            else return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/" szName ": Invalid string table offset %#RX64 (max %#x)", \
++                                            pszLogName, i, (uint64_t)paDynamic[i].d_un.d_val, pModElf->Dyn.cbStr); \
++        } while (0)
++#define LOG_VALIDATE_VAL_RET(szName, uExpected) do { \
++            Log3(("RTLdrELF: DT[%u]: %16s %#RX64\n", i, szName, (uint64_t)paDynamic[i].d_un.d_val)); \
++            if ((uint64_t)paDynamic[i].d_un.d_val == (uint64_t)(uExpected)) { /* likely */ } \
++            else return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/" szName ": %#RX64, expected %#RX64", \
++                                            pszLogName, i, (uint64_t)paDynamic[i].d_un.d_val, (uint64_t)(uExpected)); \
++        } while (0)
++#define SET_RELOC_TYPE_RET(a_szName, a_uType) do { \
++            if (pModElf->DynInfo.uRelocType == 0 || pModElf->DynInfo.uRelocType == (a_uType)) \
++                pModElf->DynInfo.uRelocType = (a_uType); \
++            else return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/" a_szName ": Mixing DT_RELA and DT_REL", pszLogName, i); \
++        } while (0)
++#define SET_INFO_FIELD_RET(a_szName, a_Field, a_Value, a_UnsetValue, a_szFmt) do { \
++            if ((a_Field) == (a_UnsetValue) && (a_Value) != (a_UnsetValue)) \
++                (a_Field) = (a_Value); /* likely */ \
++            else if ((a_Field) != (a_UnsetValue)) \
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/" a_szName ": Multiple entries (first value " a_szFmt ", second " a_szFmt ")", pszLogName, i, (a_Field), (a_Value)); \
++            else if ((a_Value) != (a_UnsetValue)) \
++                return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/" a_szName ": Unexpected value " a_szFmt, pszLogName, i, (a_Value)); \
++        } while (0)
++#define FIND_MATCHING_SECTION_RET(a_szName, a_ExtraMatchExpr, a_idxShFieldToSet) do { \
++            unsigned iSh; \
++            for (iSh = 1; iSh < pModElf->Ehdr.e_shnum; iSh++) \
++                if (   paShdrs[iSh].sh_addr == paDynamic[i].d_un.d_ptr \
++                    && (a_ExtraMatchExpr)) \
++                { \
++                    (a_idxShFieldToSet) = iSh; \
++                    if (pModElf->paShdrExtras[iSh].idxDt != UINT16_MAX) \
++                        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, \
++                                                   "%s: DT[%u]/" a_szName ": section #%u (" FMT_ELF_ADDR ") already referenced by DT[%u]", \
++                                                   pszLogName, i, iSh, paShdrs[iSh].sh_addr, pModElf->paShdrExtras[iSh].idxDt); \
++                    pModElf->paShdrExtras[iSh].idxDt  = i; \
++                    pModElf->paShdrExtras[iSh].uDtTag = (uint32_t)paDynamic[i].d_tag; \
++                    break; \
++                } \
++            if (iSh < pModElf->Ehdr.e_shnum) { /* likely */ } \
++            else return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/" a_szName ": No matching section for " FMT_ELF_ADDR, pszLogName, i, paDynamic[i].d_un.d_ptr); \
++        } while (0)
++#define ONLY_FOR_DEBUG_OR_VALIDATION_RET(a_szName) do { \
++            if (fFlags & (RTLDR_O_FOR_DEBUG | RTLDR_O_FOR_VALIDATION)) { /* likely */ } \
++            else return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/" a_szName ": Not supported (" FMT_ELF_ADDR ")", pszLogName, i, paDynamic[i].d_un.d_ptr); \
++        } while (0)
++#define LOG_NON_VALUE_ENTRY(a_szName) Log3(("RTLdrELF: DT[%u]: %16s (%#RX64)\n", i, a_szName, (uint64_t)paDynamic[i].d_un.d_val))
++
++        switch (paDynamic[i].d_tag)
++        {
++            case DT_NULL:
++                LOG_NON_VALUE_ENTRY("DT_NULL");
++                for (unsigned iNull = i + 1; iNull < pModElf->cDynamic; iNull++)
++                    if (paDynamic[i].d_tag == DT_NULL) /* Not technically a bug, but let's try being extremely strict for now */
++                        LOG_NON_VALUE_ENTRY("DT_NULL");
++                    else if (!(fFlags & (RTLDR_O_FOR_DEBUG | RTLDR_O_FOR_VALIDATION)))
++                        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                                   "%s: DT[%u]/DT_NULL: Dynamic section isn't zero padded (extra #%u of #%u)",
++                                                   pszLogName, i, iNull - i, pModElf->cDynamic - i);
++                i = pModElf->cDynamic;
++                break;
++            case DT_NEEDED:
++                LOG_VALIDATE_STR_RET("DT_NEEDED");
++                break;
++            case DT_PLTRELSZ:
++                Log3(("RTLdrELF: DT[%u]: %16s %#RX64 bytes\n", i, "DT_PLTRELSZ", (uint64_t)paDynamic[i].d_un.d_val));
++                SET_INFO_FIELD_RET("DT_PLTRELSZ", pModElf->DynInfo.cbJmpRelocs, (Elf_Xword)paDynamic[i].d_un.d_val, 0, FMT_ELF_XWORD);
++                break;
++            case DT_PLTGOT:
++                LOG_VALIDATE_PTR_RET("DT_PLTGOT");
++                break;
++            case DT_HASH:
++                LOG_VALIDATE_PTR_RET("DT_HASH");
++                break;
++            case DT_STRTAB:
++                LOG_VALIDATE_PTR_VAL_RET("DT_STRTAB", paShdrs[pModElf->Dyn.iStrSh].sh_addr);
++                pModElf->paShdrExtras[pModElf->Dyn.iStrSh].idxDt  = i;
++                pModElf->paShdrExtras[pModElf->Dyn.iSymSh].uDtTag = DT_STRTAB;
++                break;
++            case DT_SYMTAB:
++                LOG_VALIDATE_PTR_VAL_RET("DT_SYMTAB", paShdrs[pModElf->Dyn.iSymSh].sh_addr);
++                pModElf->paShdrExtras[pModElf->Dyn.iSymSh].idxDt  = i;
++                pModElf->paShdrExtras[pModElf->Dyn.iSymSh].uDtTag = DT_SYMTAB;
++                break;
++            case DT_RELA:
++                LOG_VALIDATE_PTR_RET("DT_RELA");
++                SET_RELOC_TYPE_RET("DT_RELA", DT_RELA);
++                SET_INFO_FIELD_RET("DT_RELA", pModElf->DynInfo.uPtrRelocs, paDynamic[i].d_un.d_ptr, ~(Elf_Addr)0, FMT_ELF_ADDR);
++                FIND_MATCHING_SECTION_RET("DT_RELA", paShdrs[iSh].sh_type == SHT_RELA, pModElf->DynInfo.idxShRelocs);
++                break;
++            case DT_RELASZ:
++                Log3(("RTLdrELF: DT[%u]: %16s %#RX64 bytes\n", i, "DT_RELASZ", (uint64_t)paDynamic[i].d_un.d_val));
++                SET_RELOC_TYPE_RET("DT_RELASZ", DT_RELA);
++                SET_INFO_FIELD_RET("DT_RELASZ", pModElf->DynInfo.cbRelocs, (Elf_Xword)paDynamic[i].d_un.d_val, 0, FMT_ELF_XWORD);
++                break;
++            case DT_RELAENT:
++                LOG_VALIDATE_VAL_RET("DT_RELAENT", sizeof(Elf_Rela));
++                SET_RELOC_TYPE_RET("DT_RELAENT", DT_RELA);
++                SET_INFO_FIELD_RET("DT_RELAENT", pModElf->DynInfo.cbRelocEntry, (unsigned)sizeof(Elf_Rela), 0, "%u");
++                break;
++            case DT_STRSZ:
++                LOG_VALIDATE_VAL_RET("DT_STRSZ", pModElf->Dyn.cbStr);
++                break;
++            case DT_SYMENT:
++                LOG_VALIDATE_VAL_RET("DT_SYMENT", sizeof(Elf_Sym));
++                break;
++            case DT_INIT:
++                LOG_VALIDATE_PTR_RET("DT_INIT");
++                ONLY_FOR_DEBUG_OR_VALIDATION_RET("DT_INIT");
++                break;
++            case DT_FINI:
++                LOG_VALIDATE_PTR_RET("DT_FINI");
++                ONLY_FOR_DEBUG_OR_VALIDATION_RET("DT_FINI");
++                break;
++            case DT_SONAME:
++                LOG_VALIDATE_STR_RET("DT_SONAME");
++                break;
++            case DT_RPATH:
++                LOG_VALIDATE_STR_RET("DT_RPATH");
++                break;
++            case DT_SYMBOLIC:
++                LOG_NON_VALUE_ENTRY("DT_SYMBOLIC");
++                break;
++            case DT_REL:
++                LOG_VALIDATE_PTR_RET("DT_REL");
++                SET_RELOC_TYPE_RET("DT_REL", DT_REL);
++                SET_INFO_FIELD_RET("DT_REL", pModElf->DynInfo.uPtrRelocs, paDynamic[i].d_un.d_ptr, ~(Elf_Addr)0, FMT_ELF_ADDR);
++                FIND_MATCHING_SECTION_RET("DT_REL", paShdrs[iSh].sh_type == SHT_REL, pModElf->DynInfo.idxShRelocs);
++                break;
++            case DT_RELSZ:
++                Log3(("RTLdrELF: DT[%u]: %16s %#RX64 bytes\n", i, "DT_RELSZ", (uint64_t)paDynamic[i].d_un.d_val));
++                SET_RELOC_TYPE_RET("DT_RELSZ", DT_REL);
++                SET_INFO_FIELD_RET("DT_RELSZ", pModElf->DynInfo.cbRelocs, (Elf_Xword)paDynamic[i].d_un.d_val, 0, FMT_ELF_XWORD);
++                break;
++            case DT_RELENT:
++                LOG_VALIDATE_VAL_RET("DT_RELENT", sizeof(Elf_Rel));
++                SET_RELOC_TYPE_RET("DT_RELENT", DT_REL);
++                SET_INFO_FIELD_RET("DT_RELENT", pModElf->DynInfo.cbRelocEntry, (unsigned)sizeof(Elf_Rel), 0, "%u");
++                break;
++            case DT_PLTREL:
++                if (paDynamic[i].d_un.d_val != DT_RELA && paDynamic[i].d_un.d_val != DT_REL)
++                    return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT[%u]/DT_PLTREL: Invalid value %#RX64",
++                                               pszLogName, i, (uint64_t)paDynamic[i].d_un.d_val);
++                Log3(("RTLdrELF: DT[%u]: %16s DT_REL%s\n", i, "DT_PLTREL", paDynamic[i].d_un.d_val == DT_RELA ? "A" : ""));
++                SET_INFO_FIELD_RET("DT_PLTREL", pModElf->DynInfo.uJmpRelocType, (unsigned)paDynamic[i].d_un.d_val, 0, "%u");
++                break;
++            case DT_DEBUG:
++                LOG_VALIDATE_PTR_RET("DT_DEBUG");
++                break;
++            case DT_TEXTREL:
++                LOG_NON_VALUE_ENTRY("DT_TEXTREL");
++                break;
++            case DT_JMPREL:
++                LOG_VALIDATE_PTR_RET("DT_JMPREL");
++                SET_INFO_FIELD_RET("DT_JMPREL", pModElf->DynInfo.uPtrJmpRelocs, paDynamic[i].d_un.d_ptr, ~(Elf_Addr)0, FMT_ELF_ADDR);
++                FIND_MATCHING_SECTION_RET("DT_JMPREL", 1, pModElf->DynInfo.idxShJmpRelocs);
++                break;
++            case DT_BIND_NOW:
++                LOG_NON_VALUE_ENTRY("DT_BIND_NOW");
++                break;
++            case DT_INIT_ARRAY:
++                LOG_VALIDATE_PTR_RET("DT_INIT_ARRAY");
++                ONLY_FOR_DEBUG_OR_VALIDATION_RET("DT_INIT_ARRAY");
++                break;
++            case DT_FINI_ARRAY:
++                LOG_VALIDATE_PTR_RET("DT_FINI_ARRAY");
++                ONLY_FOR_DEBUG_OR_VALIDATION_RET("DT_FINI_ARRAY");
++                break;
++            case DT_INIT_ARRAYSZ:
++                Log3(("RTLdrELF: DT[%u]: %16s %#RX64 bytes\n", i, "DT_INIT_ARRAYSZ", (uint64_t)paDynamic[i].d_un.d_val));
++                ONLY_FOR_DEBUG_OR_VALIDATION_RET("DT_INIT_ARRAYSZ");
++                break;
++            case DT_FINI_ARRAYSZ:
++                Log3(("RTLdrELF: DT[%u]: %16s %#RX64 bytes\n", i, "DT_FINI_ARRAYSZ", (uint64_t)paDynamic[i].d_un.d_val));
++                ONLY_FOR_DEBUG_OR_VALIDATION_RET("DT_FINI_ARRAYSZ");
++                break;
++            case DT_RUNPATH:
++                LOG_VALIDATE_STR_RET("DT_RUNPATH");
++                break;
++            case DT_FLAGS:
++                Log3(("RTLdrELF: DT[%u]: %16s %#RX64\n", i, "DT_FLAGS", (uint64_t)paDynamic[i].d_un.d_val));
++                break;
++            case DT_PREINIT_ARRAY:
++                LOG_VALIDATE_PTR_RET("DT_PREINIT_ARRAY");
++                ONLY_FOR_DEBUG_OR_VALIDATION_RET("DT_PREINIT_ARRAY");
++                break;
++            case DT_PREINIT_ARRAYSZ:
++                Log3(("RTLdrELF: DT[%u]: %16s %#RX64 bytes\n", i, "DT_PREINIT_ARRAYSZ", (uint64_t)paDynamic[i].d_un.d_val));
++                ONLY_FOR_DEBUG_OR_VALIDATION_RET("DT_PREINIT_ARRAYSZ");
++                break;
++            default:
++                if (   paDynamic[i].d_un.d_val < DT_ENCODING
++                    || (paDynamic[i].d_un.d_val & 1))
++                    Log3(("RTLdrELF: DT[%u]: %#010RX64       %#RX64%s\n", i, (uint64_t)paDynamic[i].d_tag,
++                          (uint64_t)paDynamic[i].d_un.d_val, paDynamic[i].d_un.d_val >= DT_ENCODING ? " (val)" : ""));
++                else
++                {
++                    Log3(("RTLdrELF: DT[%u]: %#010RX64       " FMT_ELF_ADDR " (addr)\n",
++                          i, (uint64_t)paDynamic[i].d_tag, paDynamic[i].d_un.d_ptr));
++                    if ((uint64_t)paDynamic[i].d_un.d_ptr - uLinkAddress >= cbImage)
++                        return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                                   "%s: DT[%u]/%#RX64: Invalid address " FMT_ELF_ADDR " (valid range: " FMT_ELF_ADDR " LB " FMT_ELF_ADDR ")",
++                                                   pszLogName, i, (uint64_t)paDynamic[i].d_tag,
++                                                   paDynamic[i].d_un.d_ptr, uLinkAddress, cbImage);
++                }
++                break;
++        }
++#undef LOG_VALIDATE_VAL_RET
++#undef LOG_VALIDATE_STR_RET
++#undef LOG_VALIDATE_PTR_VAL_RET
++#undef LOG_VALIDATE_PTR_RET
++#undef SET_RELOC_TYPE_RET
++#undef SET_INFO_FIELD_RET
++#undef FIND_MATCHING_SECTION_RET
++#undef ONLY_FOR_DEBUG_OR_VALIDATION_RET
++    }
++
++    /*
++     * Validate the relocation information we've gathered.
++     */
++    Elf_Word uShTypeArch = SHT_RELA; /** @todo generalize architecture specific stuff using its own code template header.  */
++    switch (pModElf->Core.enmArch)
++    {
++        case RTLDRARCH_AMD64:
++            break;
++        case RTLDRARCH_X86_32:
++            uShTypeArch = SHT_REL;
++            break;
++        default:
++            AssertFailedBreak(/** @todo page size for got.plt hacks */);
++
++    }
++
++    if (pModElf->DynInfo.uRelocType != 0)
++    {
++        const char * const pszModifier = pModElf->DynInfo.uRelocType == DT_RELA ? "A" : "";
++        if (pModElf->DynInfo.uPtrRelocs == ~(Elf_Addr)0)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Missing DT_REL%s", pszLogName, pszModifier);
++        if (pModElf->DynInfo.cbRelocs == 0)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Missing DT_REL%sSZ", pszLogName, pszModifier);
++        if (pModElf->DynInfo.cbRelocEntry == 0)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Missing DT_REL%sENT", pszLogName, pszModifier);
++        Elf_Shdr const *pShdrRelocs = &paShdrs[pModElf->DynInfo.idxShRelocs];
++        Elf_Word const  uShType     = pModElf->DynInfo.uJmpRelocType == DT_RELA ? SHT_RELA : SHT_REL;
++        if (pShdrRelocs->sh_type != uShType)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT_REL%s* does not match section type: %u vs %u",
++                                       pszLogName, pszModifier, pShdrRelocs->sh_type, uShType);
++        if (pShdrRelocs->sh_size != pModElf->DynInfo.cbRelocs)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT_REL%sSZ does not match section size: %u vs %u",
++                                       pszLogName, pszModifier, pShdrRelocs->sh_size, pModElf->DynInfo.cbRelocs);
++        if (uShType != uShTypeArch)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT_REL%s* does not match architecture: %u, arch wants %u",
++                                       pszLogName, pszModifier, uShType, uShTypeArch);
++    }
++
++    if (   pModElf->DynInfo.uPtrJmpRelocs != ~(Elf_Addr)0
++        || pModElf->DynInfo.cbJmpRelocs   != 0
++        || pModElf->DynInfo.uJmpRelocType != 0)
++    {
++        if (pModElf->DynInfo.uPtrJmpRelocs == ~(Elf_Addr)0)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Missing DT_JMPREL", pszLogName);
++        if (pModElf->DynInfo.cbJmpRelocs == 0)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Missing DT_PLTRELSZ", pszLogName);
++        if (pModElf->DynInfo.uJmpRelocType == 0)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: Missing DT_PLTREL", pszLogName);
++        Elf_Shdr const *pShdrRelocs = &paShdrs[pModElf->DynInfo.idxShJmpRelocs];
++        Elf_Word const  uShType     = pModElf->DynInfo.uJmpRelocType == DT_RELA ? SHT_RELA : SHT_REL;
++        if (pShdrRelocs->sh_type != uShType)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT_PLTREL does not match section type: %u vs %u",
++                                       pszLogName, pShdrRelocs->sh_type, uShType);
++        if (pShdrRelocs->sh_size != pModElf->DynInfo.cbJmpRelocs)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT_PLTRELSZ does not match section size: %u vs %u",
++                                       pszLogName, pShdrRelocs->sh_size, pModElf->DynInfo.cbJmpRelocs);
++        if (uShType != uShTypeArch)
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT, "%s: DT_PLTREL does not match architecture: %u, arch wants %u",
++                                       pszLogName, uShType, uShTypeArch);
++    }
++
++    /*
++     * Check that there aren't any other relocations hiding in the section table.
++     */
++    for (uint32_t i = 1; i < pModElf->Ehdr.e_shnum; i++)
++        if (   (paShdrs[i].sh_type == SHT_REL || paShdrs[i].sh_type == SHT_RELA)
++            && pModElf->paShdrExtras[i].uDtTag != DT_REL
++            && pModElf->paShdrExtras[i].uDtTag != DT_RELA
++            && pModElf->paShdrExtras[i].uDtTag != DT_JMPREL)
++        {
++            char szSecHdrNm[80];
++            return RTERRINFO_LOG_SET_F(pErrInfo, VERR_BAD_EXE_FORMAT,
++                                       "%s: section header #%u (%s type=" FMT_ELF_WORD " size=" FMT_ELF_XWORD ") contains relocations not referenced by the dynamic section",
++                                       pszLogName, i,
++                                       RTLDRELF_NAME(GetSHdrName)(pModElf, paShdrs[i].sh_name, szSecHdrNm, sizeof(szSecHdrNm)),
++                                       paShdrs[i].sh_type, paShdrs[i].sh_size);
++        }
+ 
+     return VINF_SUCCESS;
+ }
+@@ -1866,8 +2819,9 @@ static int RTLDRELF_NAME(ValidateSection
+  * @param   fFlags      Reserved, MBZ.
+  * @param   enmArch     Architecture specifier.
+  * @param   phLdrMod    Where to store the handle.
++ * @param   pErrInfo    Where to return extended error info. Optional.
+  */
+-static int RTLDRELF_NAME(Open)(PRTLDRREADER pReader, uint32_t fFlags, RTLDRARCH enmArch, PRTLDRMOD phLdrMod)
++static int RTLDRELF_NAME(Open)(PRTLDRREADER pReader, uint32_t fFlags, RTLDRARCH enmArch, PRTLDRMOD phLdrMod, PRTERRINFO pErrInfo)
+ {
+     const char *pszLogName = pReader->pfnLogName(pReader);
+     uint64_t    cbRawImage = pReader->pfnSize(pReader);
+@@ -1891,21 +2845,42 @@ static int RTLDRELF_NAME(Open)(PRTLDRREA
+ #else
+     pModElf->Core.enmArch   = RTLDRARCH_AMD64;
+ #endif
+-    //pModElf->pvBits         = NULL;
+-    //pModElf->Ehdr           = {0};
+-    //pModElf->paShdrs        = NULL;
+-    //pModElf->paSyms         = NULL;
+-    pModElf->iSymSh         = ~0U;
+-    //pModElf->cSyms          = 0;
+-    pModElf->iStrSh         = ~0U;
+-    //pModElf->cbStr          = 0;
+-    //pModElf->cbImage        = 0;
+-    //pModElf->LinkAddress    = 0;
+-    //pModElf->pStr           = NULL;
+-    //pModElf->cbShStr        = 0;
+-    //pModElf->pShStr         = NULL;
+-    //pModElf->iShEhFrame      = 0;
+-    //pModElf->iShEhFrameHdr   = 0;
++    //pModElf->pvBits       = NULL;
++    //pModElf->Ehdr         = {0};
++    //pModElf->paShdrs      = NULL;
++    //pModElf->Rel.paSyms   = NULL;
++    pModElf->Rel.iSymSh     = ~0U;
++    //pModElf->Rel.cSyms    = 0;
++    pModElf->Rel.iStrSh     = ~0U;
++    //pModElf->Rel.cbStr    = 0;
++    //pModElf->Rel.pStr     = NULL;
++    //pModElf->Dyn.paSyms   = NULL;
++    pModElf->Dyn.iSymSh     = ~0U;
++    //pModElf->Dyn.cSyms    = 0;
++    pModElf->Dyn.iStrSh     = ~0U;
++    //pModElf->Dyn.cbStr    = 0;
++    //pModElf->Dyn.pStr     = NULL;
++    pModElf->iFirstSect     = 1;
++    //pModElf->fShdrInOrder = false;
++    //pModElf->cbImage      = 0;
++    pModElf->LinkAddress    = ~(Elf_Addr)0;
++    //pModElf->cbShStr      = 0;
++    //pModElf->pShStr       = NULL;
++    //pModElf->iShEhFrame   = 0;
++    //pModElf->iShEhFrameHdr= 0;
++    pModElf->iShDynamic     = ~0U;
++    //pModElf->cDynamic     = 0;
++    //pModElf->paDynamic    = NULL;
++    //pModElf->paPhdrs      = NULL;
++    pModElf->DynInfo.uPtrRelocs         = ~(Elf_Addr)0;
++    //pModElf->DynInfo.cbRelocs         = 0;
++    //pModElf->DynInfo.cbRelocEntry     = 0;
++    //pModElf->DynInfo.uRelocType       = 0;
++    //pModElf->DynInfo.idxShRelocs      = 0;
++    pModElf->DynInfo.uPtrJmpRelocs      = ~(Elf_Addr)0;
++    //pModElf->DynInfo.cbJmpRelocs      = 0;
++    //pModElf->DynInfo.uJmpRelocType    = 0;
++    //pModElf->DynInfo.idxShJmpRelocs   = 0;
+ 
+     /*
+      * Read and validate the ELF header and match up the CPU architecture.
+@@ -1914,7 +2889,7 @@ static int RTLDRELF_NAME(Open)(PRTLDRREA
+     if (RT_SUCCESS(rc))
+     {
+         RTLDRARCH enmArchImage = RTLDRARCH_INVALID; /* shut up gcc */
+-        rc = RTLDRELF_NAME(ValidateElfHeader)(&pModElf->Ehdr, pszLogName, cbRawImage, &enmArchImage);
++        rc = RTLDRELF_NAME(ValidateElfHeader)(&pModElf->Ehdr, cbRawImage, pszLogName, &enmArchImage, pErrInfo);
+         if (RT_SUCCESS(rc))
+         {
+             if (    enmArch != RTLDRARCH_WHATEVER
+@@ -1929,7 +2904,7 @@ static int RTLDRELF_NAME(Open)(PRTLDRREA
+          * introspection methods.
+          */
+         size_t const cbShdrs = pModElf->Ehdr.e_shnum * sizeof(Elf_Shdr);
+-        Elf_Shdr *paShdrs = (Elf_Shdr *)RTMemAlloc(cbShdrs * 2);
++        Elf_Shdr *paShdrs = (Elf_Shdr *)RTMemAlloc(cbShdrs * 2 + sizeof(RTLDRMODELFSHX) * pModElf->Ehdr.e_shnum);
+         if (paShdrs)
+         {
+             pModElf->paShdrs = paShdrs;
+@@ -1939,111 +2914,77 @@ static int RTLDRELF_NAME(Open)(PRTLDRREA
+                 memcpy(&paShdrs[pModElf->Ehdr.e_shnum], paShdrs, cbShdrs);
+                 pModElf->paOrgShdrs = &paShdrs[pModElf->Ehdr.e_shnum];
+ 
++                pModElf->paShdrExtras = (PRTLDRMODELFSHX)&pModElf->paOrgShdrs[pModElf->Ehdr.e_shnum];
++                memset(pModElf->paShdrExtras, 0xff, sizeof(RTLDRMODELFSHX) * pModElf->Ehdr.e_shnum);
++
+                 pModElf->cbShStr = paShdrs[pModElf->Ehdr.e_shstrndx].sh_size;
+ 
+                 /*
+                  * Validate the section headers and find relevant sections.
+                  */
+-                Elf_Addr uNextAddr = 0;
+-                for (unsigned i = 0; i < pModElf->Ehdr.e_shnum; i++)
+-                {
+-                    rc = RTLDRELF_NAME(ValidateSectionHeader)(pModElf, i, pszLogName, cbRawImage);
+-                    if (RT_FAILURE(rc))
+-                        break;
+-
+-                    /* We're looking for symbol tables. */
+-                    if (paShdrs[i].sh_type == SHT_SYMTAB)
+-                    {
+-                        if (pModElf->iSymSh != ~0U)
+-                        {
+-                            Log(("RTLdrElf: %s: Multiple symbol tabs! iSymSh=%d i=%d\n", pszLogName, pModElf->iSymSh, i));
+-                            rc = VERR_LDRELF_MULTIPLE_SYMTABS;
+-                            break;
+-                        }
+-                        pModElf->iSymSh = i;
+-                        pModElf->cSyms  = (unsigned)(paShdrs[i].sh_size / sizeof(Elf_Sym));
+-                        AssertBreakStmt(pModElf->cSyms == paShdrs[i].sh_size / sizeof(Elf_Sym), rc = VERR_IMAGE_TOO_BIG);
+-                        pModElf->iStrSh = paShdrs[i].sh_link;
+-                        pModElf->cbStr  = (unsigned)paShdrs[pModElf->iStrSh].sh_size;
+-                        AssertBreakStmt(pModElf->cbStr == paShdrs[pModElf->iStrSh].sh_size, rc = VERR_IMAGE_TOO_BIG);
+-                    }
+-
+-                    /* Special checks for the section string table. */
+-                    if (i == pModElf->Ehdr.e_shstrndx)
+-                    {
+-                        if (paShdrs[i].sh_type != SHT_STRTAB)
+-                        {
+-                            Log(("RTLdrElf: Section header string table is not a SHT_STRTAB: %#x\n", paShdrs[i].sh_type));
+-                            rc = VERR_BAD_EXE_FORMAT;
+-                            break;
+-                        }
+-                        if (paShdrs[i].sh_size == 0)
+-                        {
+-                            Log(("RTLdrElf: Section header string table is empty\n"));
+-                            rc = VERR_BAD_EXE_FORMAT;
+-                            break;
+-                        }
+-                    }
++                rc = RTLDRELF_NAME(ValidateAndProcessSectionHeaders)(pModElf, paShdrs, cbRawImage, pszLogName, pErrInfo);
+ 
+-                    /* Kluge for the .data..percpu segment in 64-bit linux kernels. */
+-                    if (paShdrs[i].sh_flags & SHF_ALLOC)
+-                    {
+-                        if (   paShdrs[i].sh_addr == 0
+-                            && paShdrs[i].sh_addr < uNextAddr)
+-                        {
+-                            Elf_Addr uAddr = RT_ALIGN_T(uNextAddr, paShdrs[i].sh_addralign, Elf_Addr);
+-                            Log(("RTLdrElf: Out of order section #%d; adjusting sh_addr from " FMT_ELF_ADDR " to " FMT_ELF_ADDR "\n",
+-                                 i, paShdrs[i].sh_addr, uAddr));
+-                            paShdrs[i].sh_addr = uAddr;
+-                        }
+-                        uNextAddr = paShdrs[i].sh_addr + paShdrs[i].sh_size;
+-                    }
+-                } /* for each section header */
++                /*
++                 * Read validate and process program headers if ET_DYN or ET_EXEC.
++                 */
++                if (RT_SUCCESS(rc) && (pModElf->Ehdr.e_type == ET_DYN || pModElf->Ehdr.e_type == ET_EXEC))
++                    rc = RTLDRELF_NAME(ValidateAndProcessDynamicInfo)(pModElf, cbRawImage, fFlags, pszLogName, pErrInfo);
+ 
+                 /*
+-                 * Calculate the image base address if the image isn't relocatable.
++                 * Massage the section headers.
+                  */
+-                if (RT_SUCCESS(rc) && pModElf->Ehdr.e_type != ET_REL)
++                if (RT_SUCCESS(rc))
+                 {
+-                    pModElf->LinkAddress = ~(Elf_Addr)0;
+-                    for (unsigned i = 0; i < pModElf->Ehdr.e_shnum; i++)
+-                        if (   (paShdrs[i].sh_flags & SHF_ALLOC)
+-                            && paShdrs[i].sh_addr < pModElf->LinkAddress)
+-                            pModElf->LinkAddress = paShdrs[i].sh_addr;
+-                    if (pModElf->LinkAddress == ~(Elf_Addr)0)
++                    if (pModElf->Ehdr.e_type == ET_REL)
+                     {
+-                        AssertFailed();
+-                        rc = VERR_LDR_GENERAL_FAILURE;
+-                    }
+-                    if (pModElf->Ehdr.e_type == ET_DYN && pModElf->LinkAddress < 0x1000)
++                        /* Do allocations and figure the image size: */
+                         pModElf->LinkAddress = 0;
++                        for (unsigned i = 1; i < pModElf->Ehdr.e_shnum; i++)
++                            if (paShdrs[i].sh_flags & SHF_ALLOC)
++                            {
++                                paShdrs[i].sh_addr = paShdrs[i].sh_addralign
++                                                   ? RT_ALIGN_T(pModElf->cbImage, paShdrs[i].sh_addralign, Elf_Addr)
++                                                   : (Elf_Addr)pModElf->cbImage;
++                                Elf_Addr EndAddr = paShdrs[i].sh_addr + paShdrs[i].sh_size;
++                                if (pModElf->cbImage < EndAddr)
++                                {
++                                    pModElf->cbImage = (size_t)EndAddr;
++                                    AssertMsgBreakStmt(pModElf->cbImage == EndAddr, (FMT_ELF_ADDR "\n", EndAddr), rc = VERR_IMAGE_TOO_BIG);
++                                }
++                                Log2(("RTLdrElf: %s: Assigned " FMT_ELF_ADDR " to section #%d\n", pszLogName, paShdrs[i].sh_addr, i));
++                            }
++                    }
++                    else
++                    {
++                        /* Convert sh_addr to RVA: */
++                        Assert(pModElf->LinkAddress != ~(Elf_Addr)0);
++                        for (unsigned i = 0 /*!*/; i < pModElf->Ehdr.e_shnum; i++)
++                            if (paShdrs[i].sh_flags & SHF_ALLOC)
++                                    paShdrs[i].sh_addr -= pModElf->LinkAddress;
++                    }
+                 }
+ 
+                 /*
+-                 * Perform allocations / RVA calculations, determine the image size.
++                 * Check if the sections are in order by address, as that will simplify
++                 * enumeration and address translation.
+                  */
+-                if (RT_SUCCESS(rc))
+-                    for (unsigned i = 0; i < pModElf->Ehdr.e_shnum; i++)
+-                        if (paShdrs[i].sh_flags & SHF_ALLOC)
++                pModElf->fShdrInOrder = true;
++                Elf_Addr uEndAddr = 0;
++                for (unsigned i = pModElf->iFirstSect; i < pModElf->Ehdr.e_shnum; i++)
++                    if (paShdrs[i].sh_flags & SHF_ALLOC)
++                    {
++                        if (uEndAddr <= paShdrs[i].sh_addr)
++                            uEndAddr = paShdrs[i].sh_addr + paShdrs[i].sh_size;
++                        else
+                         {
+-                            if (pModElf->Ehdr.e_type == ET_REL)
+-                                paShdrs[i].sh_addr = paShdrs[i].sh_addralign
+-                                                   ? RT_ALIGN_T(pModElf->cbImage, paShdrs[i].sh_addralign, Elf_Addr)
+-                                                   : (Elf_Addr)pModElf->cbImage;
+-                            else
+-                                paShdrs[i].sh_addr -= pModElf->LinkAddress;
+-                            Elf_Addr EndAddr = paShdrs[i].sh_addr + paShdrs[i].sh_size;
+-                            if (pModElf->cbImage < EndAddr)
+-                            {
+-                                pModElf->cbImage = (size_t)EndAddr;
+-                                AssertMsgBreakStmt(pModElf->cbImage == EndAddr, (FMT_ELF_ADDR "\n", EndAddr), rc = VERR_IMAGE_TOO_BIG);
+-                            }
+-                            Log2(("RTLdrElf: %s: Assigned " FMT_ELF_ADDR " to section #%d\n", pszLogName, paShdrs[i].sh_addr, i));
++                            pModElf->fShdrInOrder = false;
++                            break;
+                         }
++                    }
+ 
+-                Log2(("RTLdrElf: iSymSh=%u cSyms=%u iStrSh=%u cbStr=%u rc=%Rrc cbImage=%#zx LinkAddress=" FMT_ELF_ADDR "\n",
+-                      pModElf->iSymSh, pModElf->cSyms, pModElf->iStrSh, pModElf->cbStr, rc,
+-                      pModElf->cbImage, pModElf->LinkAddress));
++                Log2(("RTLdrElf: iSymSh=%u cSyms=%u iStrSh=%u cbStr=%u rc=%Rrc cbImage=%#zx LinkAddress=" FMT_ELF_ADDR " fShdrInOrder=%RTbool\n",
++                      pModElf->Rel.iSymSh, pModElf->Rel.cSyms, pModElf->Rel.iStrSh, pModElf->Rel.cbStr, rc,
++                      pModElf->cbImage, pModElf->LinkAddress, pModElf->fShdrInOrder));
+                 if (RT_SUCCESS(rc))
+                 {
+                     pModElf->Core.pOps      = &RTLDRELF_MID(s_rtldrElf,Ops);
+@@ -2077,6 +3018,7 @@ static int RTLDRELF_NAME(Open)(PRTLDRREA
+ #undef RTLDRELF_MID
+ 
+ #undef FMT_ELF_ADDR
++#undef FMT_ELF_ADDR7
+ #undef FMT_ELF_HALF
+ #undef FMT_ELF_SHALF
+ #undef FMT_ELF_OFF
+@@ -2102,6 +3044,8 @@ static int RTLDRELF_NAME(Open)(PRTLDRREA
+ #undef Elf_Size
+ #undef Elf_Sword
+ #undef Elf_Word
++#undef Elf_Xword
++#undef Elf_Sxword
+ 
+ #undef RTLDRMODELF
+ #undef PRTLDRMODELF
+--- a/include/iprt/memobj.h
++++ b/include/iprt/memobj.h
+@@ -127,7 +127,10 @@ RTR0DECL(int) RTR0MemObjFree(RTR0MEMOBJ
+  * @returns IPRT status code.
+  * @param   pMemObj         Where to store the ring-0 memory object handle.
+  * @param   cb              Number of bytes to allocate. This is rounded up to nearest page.
+- * @param   fExecutable     Flag indicating whether it should be permitted to executed code in the memory object.
++ * @param   fExecutable     Flag indicating whether it should be permitted to
++ *                          executed code in the memory object.  The user must
++ *                          use RTR0MemObjProtect after initialization the
++ *                          allocation to actually make it executable.
+  */
+ #define RTR0MemObjAllocPage(pMemObj, cb, fExecutable) \
+     RTR0MemObjAllocPageTag((pMemObj), (cb), (fExecutable), RTMEM_TAG)
+@@ -140,7 +143,10 @@ RTR0DECL(int) RTR0MemObjFree(RTR0MEMOBJ
+  * @returns IPRT status code.
+  * @param   pMemObj         Where to store the ring-0 memory object handle.
+  * @param   cb              Number of bytes to allocate. This is rounded up to nearest page.
+- * @param   fExecutable     Flag indicating whether it should be permitted to executed code in the memory object.
++ * @param   fExecutable     Flag indicating whether it should be permitted to
++ *                          executed code in the memory object.  The user must
++ *                          use RTR0MemObjProtect after initialization the
++ *                          allocation to actually make it executable.
+  * @param   pszTag          Allocation tag used for statistics and such.
+  */
+ RTR0DECL(int) RTR0MemObjAllocPageTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag);
+@@ -154,7 +160,10 @@ RTR0DECL(int) RTR0MemObjAllocPageTag(PRT
+  * @returns IPRT status code.
+  * @param   pMemObj         Where to store the ring-0 memory object handle.
+  * @param   cb              Number of bytes to allocate. This is rounded up to nearest page.
+- * @param   fExecutable     Flag indicating whether it should be permitted to executed code in the memory object.
++ * @param   fExecutable     Flag indicating whether it should be permitted to
++ *                          executed code in the memory object.  The user must
++ *                          use RTR0MemObjProtect after initialization the
++ *                          allocation to actually make it executable.
+  */
+ #define RTR0MemObjAllocLow(pMemObj, cb, fExecutable) \
+     RTR0MemObjAllocLowTag((pMemObj), (cb), (fExecutable), RTMEM_TAG)
+@@ -168,7 +177,10 @@ RTR0DECL(int) RTR0MemObjAllocPageTag(PRT
+  * @returns IPRT status code.
+  * @param   pMemObj         Where to store the ring-0 memory object handle.
+  * @param   cb              Number of bytes to allocate. This is rounded up to nearest page.
+- * @param   fExecutable     Flag indicating whether it should be permitted to executed code in the memory object.
++ * @param   fExecutable     Flag indicating whether it should be permitted to
++ *                          executed code in the memory object.  The user must
++ *                          use RTR0MemObjProtect after initialization the
++ *                          allocation to actually make it executable.
+  * @param   pszTag          Allocation tag used for statistics and such.
+  */
+ RTR0DECL(int) RTR0MemObjAllocLowTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag);
+@@ -182,7 +194,10 @@ RTR0DECL(int) RTR0MemObjAllocLowTag(PRTR
+  * @returns IPRT status code.
+  * @param   pMemObj         Where to store the ring-0 memory object handle.
+  * @param   cb              Number of bytes to allocate. This is rounded up to nearest page.
+- * @param   fExecutable     Flag indicating whether it should be permitted to executed code in the memory object.
++ * @param   fExecutable     Flag indicating whether it should be permitted to
++ *                          executed code in the memory object.  The user must
++ *                          use RTR0MemObjProtect after initialization the
++ *                          allocation to actually make it executable.
+  */
+ #define RTR0MemObjAllocCont(pMemObj, cb, fExecutable) \
+     RTR0MemObjAllocContTag((pMemObj), (cb), (fExecutable), RTMEM_TAG)
+@@ -196,7 +211,10 @@ RTR0DECL(int) RTR0MemObjAllocLowTag(PRTR
+  * @returns IPRT status code.
+  * @param   pMemObj         Where to store the ring-0 memory object handle.
+  * @param   cb              Number of bytes to allocate. This is rounded up to nearest page.
+- * @param   fExecutable     Flag indicating whether it should be permitted to executed code in the memory object.
++ * @param   fExecutable     Flag indicating whether it should be permitted to
++ *                          executed code in the memory object.  The user must
++ *                          use RTR0MemObjProtect after initialization the
++ *                          allocation to actually make it executable.
+  * @param   pszTag          Allocation tag used for statistics and such.
+  */
+ RTR0DECL(int) RTR0MemObjAllocContTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag);
+--- a/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c
++++ b/src/VBox/Runtime/r0drv/linux/alloc-r0drv-linux.c
+@@ -38,7 +38,7 @@
+ 
+ 
+ #if (defined(RT_ARCH_AMD64) || defined(DOXYGEN_RUNNING)) && !defined(RTMEMALLOC_EXEC_HEAP)
+-# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23)
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
+ /**
+  * Starting with 2.6.23 we can use __get_vm_area and map_vm_area to allocate
+  * memory in the moduel range.  This is preferrable to the exec heap below.
+--- a/include/VBox/sup.h
++++ b/include/VBox/sup.h
+@@ -1553,8 +1553,11 @@ SUPR3DECL(int) SUPR3GetSymbolR0(void *pv
+  *
+  * @returns VBox status code.
+  * @deprecated  Use SUPR3LoadModule(pszFilename, "VMMR0.r0", &pvImageBase)
++ * @param   pszFilename     Full path to the VMMR0.r0 file (silly).
++ * @param   pErrInfo        Where to return extended error information.
++ *                          Optional.
+  */
+-SUPR3DECL(int) SUPR3LoadVMM(const char *pszFilename);
++SUPR3DECL(int) SUPR3LoadVMM(const char *pszFilename, PRTERRINFO pErrInfo);
+ 
+ /**
+  * Unloads R0 HC VMM code.
+--- a/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp
++++ b/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp
+@@ -846,7 +846,7 @@ extern "C" DECLEXPORT(int) TrustedMain(i
+         return 1;
+     }
+ 
+-    rc = SUPR3LoadVMM(szAbsPath);
++    rc = SUPR3LoadVMM(szAbsPath, NULL);
+     if (RT_FAILURE(rc))
+     {
+         RTPrintf("tstIntNet-1: SUPR3LoadVMM(\"%s\") -> %Rrc\n", szAbsPath, rc);
+--- a/src/VBox/NetworkServices/Dhcpd/VBoxNetDhcpd.cpp
++++ b/src/VBox/NetworkServices/Dhcpd/VBoxNetDhcpd.cpp
+@@ -259,7 +259,7 @@ int VBoxNetDhcpd::vmmInit()
+     if (RT_SUCCESS(rc))
+         rc = RTPathAppend(szPathVMMR0, sizeof(szPathVMMR0), "VMMR0.r0");
+     if (RT_SUCCESS(rc))
+-        rc = SUPR3LoadVMM(szPathVMMR0);
++        rc = SUPR3LoadVMM(szPathVMMR0, NULL /*pErrInfo*/);
+     return rc;
+ }
+ 
+--- a/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.cpp
++++ b/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.cpp
+@@ -383,7 +383,7 @@ int VBoxNetBaseService::tryGoOnline(void
+         return rc;
+     }
+ 
+-    rc = SUPR3LoadVMM(strcat(szPath, "/VMMR0.r0"));
++    rc = SUPR3LoadVMM(strcat(szPath, "/VMMR0.r0"), NULL);
+     if (RT_FAILURE(rc))
+     {
+         LogRel(("VBoxNetBaseService: SUPR3LoadVMM(\"%s\") -> %Rrc\n", szPath, rc));
+--- a/src/VBox/VMM/testcase/tstGlobalConfig.cpp
++++ b/src/VBox/VMM/testcase/tstGlobalConfig.cpp
+@@ -102,7 +102,7 @@ extern "C" DECLEXPORT(int) TrustedMain(i
+         return 1;
+     }
+ 
+-    rc = SUPR3LoadVMM("./VMMR0.r0");
++    rc = SUPR3LoadVMM("./VMMR0.r0", NULL /*pErrInfo*/);
+     if (RT_SUCCESS(rc))
+     {
+         Req.pSession = pSession;
+--- a/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
++++ b/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
+@@ -334,6 +334,372 @@ static DECLCALLBACK(int) supLoadModuleCr
+ }
+ 
+ 
++/** Argument package for supLoadModuleCompileSegmentsCB. */
++typedef struct SUPLDRCOMPSEGTABARGS
++{
++    uint32_t        uStartRva;
++    uint32_t        uEndRva;
++    uint32_t        fProt;
++    uint32_t        iSegs;
++    uint32_t        cSegsAlloc;
++    PSUPLDRSEG      paSegs;
++    PRTERRINFO      pErrInfo;
++} SUPLDRCOMPSEGTABARGS, *PSUPLDRCOMPSEGTABARGS;
++
++/**
++ * @callback_method_impl{FNRTLDRENUMSEGS,
++ *  Compile list of segments with the same memory protection.}
++ */
++static DECLCALLBACK(int) supLoadModuleCompileSegmentsCB(RTLDRMOD hLdrMod, PCRTLDRSEG pSeg, void *pvUser)
++{
++    PSUPLDRCOMPSEGTABARGS pArgs = (PSUPLDRCOMPSEGTABARGS)pvUser;
++    AssertCompile(RTMEM_PROT_READ  == SUPLDR_PROT_READ);
++    AssertCompile(RTMEM_PROT_WRITE == SUPLDR_PROT_WRITE);
++    AssertCompile(RTMEM_PROT_EXEC  == SUPLDR_PROT_EXEC);
++    RT_NOREF(hLdrMod);
++
++    Log2(("supLoadModuleCompileSegmentsCB: %RTptr/%RTptr LB %RTptr/%RTptr prot %#x %s\n",
++          pSeg->LinkAddress, pSeg->RVA, pSeg->cbMapped, pSeg->cb, pSeg->fProt, pSeg->pszName));
++
++    /* Ignore segments not part of the loaded image. */
++    if (pSeg->RVA == NIL_RTLDRADDR || pSeg->cbMapped == 0)
++    {
++        Log2(("supLoadModuleCompileSegmentsCB: -> skipped\n"));
++        return VINF_SUCCESS;
++    }
++
++    /* We currently ASSUME that all relevant segments are in ascending RVA order. */
++    AssertReturn(pSeg->RVA >= pArgs->uEndRva,
++                 RTERRINFO_LOG_REL_SET_F(pArgs->pErrInfo, VERR_BAD_EXE_FORMAT, "Out of order segment: %p LB %#zx #%.*s",
++                                         pSeg->RVA, pSeg->cb, pSeg->cchName, pSeg->pszName));
++
++    /* We ASSUME the cbMapped field is implemented. */
++    AssertReturn(pSeg->cbMapped != NIL_RTLDRADDR, VERR_INTERNAL_ERROR_2);
++    AssertReturn(pSeg->cbMapped < _1G, VERR_INTERNAL_ERROR_4);
++    uint32_t cbMapped = (uint32_t)pSeg->cbMapped;
++    AssertReturn(pSeg->RVA      < _1G, VERR_INTERNAL_ERROR_3);
++    uint32_t uRvaSeg  = (uint32_t)pSeg->RVA;
++
++    /*
++     * If the protection is the same as the previous segment,
++     * just update uEndRva and continue.
++     */
++    uint32_t fProt = pSeg->fProt;
++#if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
++    if (fProt & RTMEM_PROT_EXEC)
++        fProt |= fProt & RTMEM_PROT_READ;
++#endif
++    if (pSeg->fProt == pArgs->fProt)
++    {
++        pArgs->uEndRva = uRvaSeg + cbMapped;
++        Log2(("supLoadModuleCompileSegmentsCB: -> merged, end %#x\n", pArgs->uEndRva));
++        return VINF_SUCCESS;
++    }
++
++    /*
++     * The protection differs, so commit current segment and start a new one.
++     * However, if the new segment and old segment share a page, this becomes
++     * a little more complicated...
++     */
++    if (pArgs->uStartRva < pArgs->uEndRva)
++    {
++        if (((pArgs->uEndRva - 1) >> PAGE_SHIFT) != (uRvaSeg >> PAGE_SHIFT))
++        {
++            /* No common page, so make the new segment start on a page boundrary. */
++            cbMapped += uRvaSeg & PAGE_OFFSET_MASK;
++            uRvaSeg &= ~(uint32_t)PAGE_OFFSET_MASK;
++            Assert(pArgs->uEndRva <= uRvaSeg);
++            Log2(("supLoadModuleCompileSegmentsCB: -> new, no common\n"));
++        }
++        else if ((fProt & pArgs->fProt) == fProt)
++        {
++            /* The current segment includes the memory protections of the
++               previous, so include the common page in it: */
++            uint32_t const cbCommon = PAGE_SIZE - (uRvaSeg & PAGE_OFFSET_MASK);
++            if (cbCommon >= cbMapped)
++            {
++                pArgs->uEndRva = uRvaSeg + cbMapped;
++                Log2(("supLoadModuleCompileSegmentsCB: -> merge, %#x common, upgrading prot to %#x, end %#x\n",
++                      cbCommon, pArgs->fProt, pArgs->uEndRva));
++                return VINF_SUCCESS; /* New segment was smaller than a page. */
++            }
++            cbMapped -= cbCommon;
++            uRvaSeg  += cbCommon;
++            Assert(pArgs->uEndRva <= uRvaSeg);
++            Log2(("supLoadModuleCompileSegmentsCB: -> new, %#x common into previous\n", cbCommon));
++        }
++        else if ((fProt & pArgs->fProt) == pArgs->fProt)
++        {
++            /* The new segment includes the memory protections of the
++               previous, so include the common page in it: */
++            cbMapped += uRvaSeg & PAGE_OFFSET_MASK;
++            uRvaSeg &= ~(uint32_t)PAGE_OFFSET_MASK;
++            if (uRvaSeg == pArgs->uStartRva)
++            {
++                pArgs->fProt   = fProt;
++                pArgs->uEndRva = uRvaSeg + cbMapped;
++                Log2(("supLoadModuleCompileSegmentsCB: -> upgrade current protection, end %#x\n", pArgs->uEndRva));
++                return VINF_SUCCESS; /* Current segment was smaller than a page. */
++            }
++            Log2(("supLoadModuleCompileSegmentsCB: -> new, %#x common into new\n", (uint32_t)(pSeg->RVA & PAGE_OFFSET_MASK)));
++        }
++        else
++        {
++            /* Create a new segment for the common page with the combined protection. */
++            Log2(("supLoadModuleCompileSegmentsCB: -> it's complicated...\n"));
++            pArgs->uEndRva &= ~(uint32_t)PAGE_OFFSET_MASK;
++            if (pArgs->uEndRva > pArgs->uStartRva)
++            {
++                Log2(("supLoadModuleCompileSegmentsCB: SUP Seg #%u: %#x LB %#x prot %#x\n",
++                      pArgs->iSegs, pArgs->uStartRva, pArgs->uEndRva - pArgs->uStartRva, pArgs->fProt));
++                if (pArgs->paSegs)
++                {
++                    AssertReturn(pArgs->iSegs < pArgs->cSegsAlloc, VERR_INTERNAL_ERROR_5);
++                    pArgs->paSegs[pArgs->iSegs].off     = pArgs->uStartRva;
++                    pArgs->paSegs[pArgs->iSegs].cb      = pArgs->uEndRva - pArgs->uStartRva;
++                    pArgs->paSegs[pArgs->iSegs].fProt   = pArgs->fProt;
++                    pArgs->paSegs[pArgs->iSegs].fUnused = 0;
++                }
++                pArgs->iSegs++;
++                pArgs->uStartRva = pArgs->uEndRva;
++            }
++            pArgs->fProt |= fProt;
++
++            uint32_t const cbCommon = PAGE_SIZE - (uRvaSeg & PAGE_OFFSET_MASK);
++            if (cbCommon >= cbMapped)
++            {
++                fProt |= pArgs->fProt;
++                pArgs->uEndRva = uRvaSeg + cbMapped;
++                return VINF_SUCCESS; /* New segment was smaller than a page. */
++            }
++            cbMapped -= cbCommon;
++            uRvaSeg  += cbCommon;
++            Assert(uRvaSeg - pArgs->uStartRva == PAGE_SIZE);
++        }
++
++        /* The current segment should end where the new one starts, no gaps. */
++        pArgs->uEndRva = uRvaSeg;
++
++        /* Emit the current segment */
++        Log2(("supLoadModuleCompileSegmentsCB: SUP Seg #%u: %#x LB %#x prot %#x\n",
++              pArgs->iSegs, pArgs->uStartRva, pArgs->uEndRva - pArgs->uStartRva, pArgs->fProt));
++        if (pArgs->paSegs)
++        {
++            AssertReturn(pArgs->iSegs < pArgs->cSegsAlloc, VERR_INTERNAL_ERROR_5);
++            pArgs->paSegs[pArgs->iSegs].off     = pArgs->uStartRva;
++            pArgs->paSegs[pArgs->iSegs].cb      = pArgs->uEndRva - pArgs->uStartRva;
++            pArgs->paSegs[pArgs->iSegs].fProt   = pArgs->fProt;
++            pArgs->paSegs[pArgs->iSegs].fUnused = 0;
++        }
++        pArgs->iSegs++;
++    }
++    /* else: current segment is empty */
++
++    /* Start the new segment. */
++    Assert(!(uRvaSeg & PAGE_OFFSET_MASK));
++    pArgs->fProt     = fProt;
++    pArgs->uStartRva = uRvaSeg;
++    pArgs->uEndRva   = uRvaSeg + cbMapped;
++    return VINF_SUCCESS;
++}
++
++
++/**
++ * Worker for supLoadModule().
++ */
++static int supLoadModuleInner(RTLDRMOD hLdrMod, PSUPLDRLOAD pLoadReq, uint32_t cbImageWithEverything,
++                              RTR0PTR uImageBase, size_t cbImage, const char *pszModule, const char *pszFilename,
++                              bool fNativeLoader, bool fIsVMMR0, const char *pszSrvReqHandler,
++                              uint32_t offSymTab, uint32_t cSymbols,
++                              uint32_t offStrTab, size_t cbStrTab,
++                              uint32_t offSegTab, uint32_t cSegments,
++                              PRTERRINFO pErrInfo)
++{
++    /*
++     * Get the image bits.
++     */
++    SUPLDRRESIMPARGS Args = { pszModule, pErrInfo };
++    int rc = RTLdrGetBits(hLdrMod, &pLoadReq->u.In.abImage[0], uImageBase, supLoadModuleResolveImport, &Args);
++    if (RT_FAILURE(rc))
++    {
++        LogRel(("SUP: RTLdrGetBits failed for %s (%s). rc=%Rrc\n", pszModule, pszFilename, rc));
++        if (!RTErrInfoIsSet(pErrInfo))
++            RTErrInfoSetF(pErrInfo, rc, "RTLdrGetBits failed");
++        return rc;
++    }
++
++    /*
++     * Get the entry points.
++     */
++    RTUINTPTR VMMR0EntryFast = 0;
++    RTUINTPTR VMMR0EntryEx = 0;
++    RTUINTPTR SrvReqHandler = 0;
++    RTUINTPTR ModuleInit = 0;
++    RTUINTPTR ModuleTerm = 0;
++    const char *pszEp = NULL;
++    if (fIsVMMR0)
++    {
++        rc = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], uImageBase,
++                              UINT32_MAX, pszEp = "VMMR0EntryFast", &VMMR0EntryFast);
++        if (RT_SUCCESS(rc))
++            rc = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], uImageBase,
++                                  UINT32_MAX, pszEp = "VMMR0EntryEx", &VMMR0EntryEx);
++    }
++    else if (pszSrvReqHandler)
++        rc = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], uImageBase,
++                              UINT32_MAX, pszEp = pszSrvReqHandler, &SrvReqHandler);
++    if (RT_SUCCESS(rc))
++    {
++        int rc2 = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], uImageBase,
++                                   UINT32_MAX, pszEp = "ModuleInit", &ModuleInit);
++        if (RT_FAILURE(rc2))
++            ModuleInit = 0;
++
++        rc2 = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], uImageBase,
++                               UINT32_MAX, pszEp = "ModuleTerm", &ModuleTerm);
++        if (RT_FAILURE(rc2))
++            ModuleTerm = 0;
++    }
++    if (RT_FAILURE(rc))
++    {
++        LogRel(("SUP: Failed to get entry point '%s' for %s (%s) rc=%Rrc\n", pszEp, pszModule, pszFilename, rc));
++        return RTErrInfoSetF(pErrInfo, rc, "Failed to resolve entry point '%s'", pszEp);
++    }
++
++    /*
++     * Create the symbol and string tables.
++     */
++    SUPLDRCREATETABSARGS CreateArgs;
++    CreateArgs.cbImage = cbImage;
++    CreateArgs.pSym    = (PSUPLDRSYM)&pLoadReq->u.In.abImage[offSymTab];
++    CreateArgs.pszBase =     (char *)&pLoadReq->u.In.abImage[offStrTab];
++    CreateArgs.psz     = CreateArgs.pszBase;
++    rc = RTLdrEnumSymbols(hLdrMod, 0, NULL, 0, supLoadModuleCreateTabsCB, &CreateArgs);
++    if (RT_FAILURE(rc))
++    {
++        LogRel(("SUP: RTLdrEnumSymbols failed for %s (%s) rc=%Rrc\n", pszModule, pszFilename, rc));
++        return RTErrInfoSetF(pErrInfo, rc, "RTLdrEnumSymbols #2 failed");
++    }
++    AssertRelease((size_t)(CreateArgs.psz  - CreateArgs.pszBase) <= cbStrTab);
++    AssertRelease((size_t)(CreateArgs.pSym - (PSUPLDRSYM)&pLoadReq->u.In.abImage[offSymTab]) <= cSymbols);
++
++    /*
++     * Create the segment table.
++     */
++    SUPLDRCOMPSEGTABARGS SegArgs;
++    SegArgs.uStartRva   = 0;
++    SegArgs.uEndRva     = 0;
++    SegArgs.fProt       = RTMEM_PROT_READ;
++    SegArgs.iSegs       = 0;
++    SegArgs.cSegsAlloc  = cSegments;
++    SegArgs.paSegs      = (PSUPLDRSEG)&pLoadReq->u.In.abImage[offSegTab];
++    SegArgs.pErrInfo    = pErrInfo;
++    rc = RTLdrEnumSegments(hLdrMod, supLoadModuleCompileSegmentsCB, &SegArgs);
++    if (RT_FAILURE(rc))
++    {
++        LogRel(("SUP: RTLdrEnumSegments failed for %s (%s) rc=%Rrc\n", pszModule, pszFilename, rc));
++        return RTErrInfoSetF(pErrInfo, rc, "RTLdrEnumSegments #2 failed");
++    }
++    SegArgs.uEndRva = (uint32_t)cbImage;
++    AssertReturn(SegArgs.uEndRva == cbImage, VERR_OUT_OF_RANGE);
++    if (SegArgs.uEndRva > SegArgs.uStartRva)
++    {
++        SegArgs.paSegs[SegArgs.iSegs].off     = SegArgs.uStartRva;
++        SegArgs.paSegs[SegArgs.iSegs].cb      = SegArgs.uEndRva - SegArgs.uStartRva;
++        SegArgs.paSegs[SegArgs.iSegs].fProt   = SegArgs.fProt;
++        SegArgs.paSegs[SegArgs.iSegs].fUnused = 0;
++        SegArgs.iSegs++;
++    }
++    for (uint32_t i = 0; i < SegArgs.iSegs; i++)
++        LogRel(("SUP: seg #%u: %c%c%c %#010RX32 LB %#010RX32\n", i, /** @todo LogRel2 */
++                SegArgs.paSegs[i].fProt & SUPLDR_PROT_READ  ? 'R' : ' ',
++                SegArgs.paSegs[i].fProt & SUPLDR_PROT_WRITE ? 'W' : ' ',
++                SegArgs.paSegs[i].fProt & SUPLDR_PROT_EXEC  ? 'X' : ' ',
++                SegArgs.paSegs[i].off, SegArgs.paSegs[i].cb));
++    AssertRelease(SegArgs.iSegs == cSegments);
++    AssertRelease(SegArgs.cSegsAlloc == cSegments);
++
++    /*
++     * Upload the image.
++     */
++    pLoadReq->Hdr.u32Cookie = g_u32Cookie;
++    pLoadReq->Hdr.u32SessionCookie = g_u32SessionCookie;
++    pLoadReq->Hdr.cbIn = SUP_IOCTL_LDR_LOAD_SIZE_IN(cbImageWithEverything);
++    pLoadReq->Hdr.cbOut = SUP_IOCTL_LDR_LOAD_SIZE_OUT;
++    pLoadReq->Hdr.fFlags = SUPREQHDR_FLAGS_MAGIC | SUPREQHDR_FLAGS_EXTRA_IN;
++    pLoadReq->Hdr.rc = VERR_INTERNAL_ERROR;
++
++    pLoadReq->u.In.pfnModuleInit              = (RTR0PTR)ModuleInit;
++    pLoadReq->u.In.pfnModuleTerm              = (RTR0PTR)ModuleTerm;
++    if (fIsVMMR0)
++    {
++        pLoadReq->u.In.eEPType                = SUPLDRLOADEP_VMMR0;
++        pLoadReq->u.In.EP.VMMR0.pvVMMR0       = uImageBase;
++        pLoadReq->u.In.EP.VMMR0.pvVMMR0EntryFast= (RTR0PTR)VMMR0EntryFast;
++        pLoadReq->u.In.EP.VMMR0.pvVMMR0EntryEx  = (RTR0PTR)VMMR0EntryEx;
++    }
++    else if (pszSrvReqHandler)
++    {
++        pLoadReq->u.In.eEPType                = SUPLDRLOADEP_SERVICE;
++        pLoadReq->u.In.EP.Service.pfnServiceReq = (RTR0PTR)SrvReqHandler;
++        pLoadReq->u.In.EP.Service.apvReserved[0] = NIL_RTR0PTR;
++        pLoadReq->u.In.EP.Service.apvReserved[1] = NIL_RTR0PTR;
++        pLoadReq->u.In.EP.Service.apvReserved[2] = NIL_RTR0PTR;
++    }
++    else
++        pLoadReq->u.In.eEPType                = SUPLDRLOADEP_NOTHING;
++    pLoadReq->u.In.offStrTab                  = offStrTab;
++    pLoadReq->u.In.cbStrTab                   = (uint32_t)cbStrTab;
++    AssertRelease(pLoadReq->u.In.cbStrTab == cbStrTab);
++    pLoadReq->u.In.cbImageBits                = (uint32_t)cbImage;
++    pLoadReq->u.In.offSymbols                 = offSymTab;
++    pLoadReq->u.In.cSymbols                   = cSymbols;
++    pLoadReq->u.In.offSegments                = offSegTab;
++    pLoadReq->u.In.cSegments                  = cSegments;
++    pLoadReq->u.In.cbImageWithEverything      = cbImageWithEverything;
++    pLoadReq->u.In.pvImageBase                = uImageBase;
++    if (!g_uSupFakeMode)
++    {
++        rc = suplibOsIOCtl(&g_supLibData, SUP_IOCTL_LDR_LOAD, pLoadReq, SUP_IOCTL_LDR_LOAD_SIZE(cbImageWithEverything));
++        if (RT_SUCCESS(rc))
++            rc = pLoadReq->Hdr.rc;
++        else
++            LogRel(("SUP: SUP_IOCTL_LDR_LOAD ioctl for %s (%s) failed rc=%Rrc\n", pszModule, pszFilename, rc));
++    }
++    else
++        rc = VINF_SUCCESS;
++    if (    RT_SUCCESS(rc)
++        ||  rc == VERR_ALREADY_LOADED /* A competing process. */
++       )
++    {
++        LogRel(("SUP: Loaded %s (%s) at %#RKv - ModuleInit at %RKv and ModuleTerm at %RKv%s\n",
++                pszModule, pszFilename, uImageBase, (RTR0PTR)ModuleInit, (RTR0PTR)ModuleTerm,
++                fNativeLoader ? " using the native ring-0 loader" : ""));
++        if (fIsVMMR0)
++        {
++            g_pvVMMR0 = uImageBase;
++            LogRel(("SUP: VMMR0EntryEx located at %RKv and VMMR0EntryFast at %RKv\n", (RTR0PTR)VMMR0EntryEx, (RTR0PTR)VMMR0EntryFast));
++        }
++#ifdef RT_OS_WINDOWS
++        LogRel(("SUP: windbg> .reload /f %s=%#RKv\n", pszFilename, uImageBase));
++#endif
++        return VINF_SUCCESS;
++    }
++
++    /*
++     * Failed, bail out.
++     */
++    LogRel(("SUP: Loading failed for %s (%s) rc=%Rrc\n", pszModule, pszFilename, rc));
++    if (   pLoadReq->u.Out.uErrorMagic == SUPLDRLOAD_ERROR_MAGIC
++        && pLoadReq->u.Out.szError[0] != '\0')
++    {
++        LogRel(("SUP: %s\n", pLoadReq->u.Out.szError));
++        return RTErrInfoSet(pErrInfo, rc, pLoadReq->u.Out.szError);
++    }
++    return RTErrInfoSet(pErrInfo, rc, "SUP_IOCTL_LDR_LOAD failed");
++}
++
++
+ /**
+  * Worker for SUPR3LoadModule().
+  *
+@@ -356,6 +722,7 @@ static int supLoadModule(const char *psz
+     AssertPtrReturn(pszFilename, VERR_INVALID_PARAMETER);
+     AssertPtrReturn(pszModule, VERR_INVALID_PARAMETER);
+     AssertPtrReturn(ppvImageBase, VERR_INVALID_PARAMETER);
++    /** @todo abspath it right into SUPLDROPEN */
+     AssertReturn(strlen(pszModule) < RT_SIZEOFMEMB(SUPLDROPEN, u.In.szName), VERR_FILENAME_TOO_LONG);
+     char szAbsFilename[RT_SIZEOFMEMB(SUPLDROPEN, u.In.szFilename)];
+     rc = RTPathAbs(pszFilename, szAbsFilename, sizeof(szAbsFilename));
+@@ -371,8 +738,8 @@ static int supLoadModule(const char *psz
+      * Open image file and figure its size.
+      */
+     RTLDRMOD hLdrMod;
+-    rc = RTLdrOpen(pszFilename, 0, RTLDRARCH_HOST, &hLdrMod);
+-    if (!RT_SUCCESS(rc))
++    rc = RTLdrOpenEx(pszFilename, 0 /*fFlags*/, RTLDRARCH_HOST, &hLdrMod, pErrInfo);
++    if (RT_FAILURE(rc))
+     {
+         LogRel(("SUP: RTLdrOpen failed for %s (%s) %Rrc\n", pszModule, pszFilename, rc));
+         return rc;
+@@ -385,230 +752,109 @@ static int supLoadModule(const char *psz
+     rc = RTLdrEnumSymbols(hLdrMod, 0, NULL, 0, supLoadModuleCalcSizeCB, &CalcArgs);
+     if (RT_SUCCESS(rc))
+     {
+-        const uint32_t  offSymTab = RT_ALIGN_32(CalcArgs.cbImage, 8);
+-        const uint32_t  offStrTab = offSymTab + CalcArgs.cSymbols * sizeof(SUPLDRSYM);
+-        const uint32_t  cbImageWithTabs = RT_ALIGN_32(offStrTab + CalcArgs.cbStrings, 8);
+-
+         /*
+-         * Open the R0 image.
++         * Figure out the number of segments needed first.
+          */
+-        SUPLDROPEN OpenReq;
+-        OpenReq.Hdr.u32Cookie = g_u32Cookie;
+-        OpenReq.Hdr.u32SessionCookie = g_u32SessionCookie;
+-        OpenReq.Hdr.cbIn = SUP_IOCTL_LDR_OPEN_SIZE_IN;
+-        OpenReq.Hdr.cbOut = SUP_IOCTL_LDR_OPEN_SIZE_OUT;
+-        OpenReq.Hdr.fFlags = SUPREQHDR_FLAGS_DEFAULT;
+-        OpenReq.Hdr.rc = VERR_INTERNAL_ERROR;
+-        OpenReq.u.In.cbImageWithTabs = cbImageWithTabs;
+-        OpenReq.u.In.cbImageBits = (uint32_t)CalcArgs.cbImage;
+-        strcpy(OpenReq.u.In.szName, pszModule);
+-        strcpy(OpenReq.u.In.szFilename, pszFilename);
+-        if (!g_uSupFakeMode)
+-        {
+-            rc = suplibOsIOCtl(&g_supLibData, SUP_IOCTL_LDR_OPEN, &OpenReq, SUP_IOCTL_LDR_OPEN_SIZE);
+-            if (RT_SUCCESS(rc))
+-                rc = OpenReq.Hdr.rc;
+-        }
+-        else
+-        {
+-            OpenReq.u.Out.fNeedsLoading = true;
+-            OpenReq.u.Out.pvImageBase = 0xef423420;
+-        }
+-        *ppvImageBase = (void *)OpenReq.u.Out.pvImageBase;
+-        if (    RT_SUCCESS(rc)
+-            &&  OpenReq.u.Out.fNeedsLoading)
++        SUPLDRCOMPSEGTABARGS SegArgs;
++        SegArgs.uStartRva   = 0;
++        SegArgs.uEndRva     = 0;
++        SegArgs.fProt       = RTMEM_PROT_READ;
++        SegArgs.iSegs       = 0;
++        SegArgs.cSegsAlloc  = 0;
++        SegArgs.paSegs      = NULL;
++        SegArgs.pErrInfo    = pErrInfo;
++        rc = RTLdrEnumSegments(hLdrMod, supLoadModuleCompileSegmentsCB, &SegArgs);
++        if (RT_SUCCESS(rc))
+         {
++            Assert(SegArgs.uEndRva <= RTLdrSize(hLdrMod));
++            SegArgs.uEndRva = (uint32_t)CalcArgs.cbImage; /* overflow is checked later */
++            if (SegArgs.uEndRva > SegArgs.uStartRva)
++            {
++                Log2(("supLoadModule:                  SUP Seg #%u: %#x LB %#x prot %#x\n",
++                      SegArgs.iSegs, SegArgs.uStartRva, SegArgs.uEndRva - SegArgs.uStartRva, SegArgs.fProt));
++                SegArgs.iSegs++;
++            }
++
++            const uint32_t offSymTab = RT_ALIGN_32(CalcArgs.cbImage, 8);
++            const uint32_t offStrTab = offSymTab + CalcArgs.cSymbols * sizeof(SUPLDRSYM);
++            const uint32_t offSegTab = RT_ALIGN_32(offStrTab + CalcArgs.cbStrings, 8);
++            const uint32_t cbImageWithEverything = RT_ALIGN_32(offSegTab + sizeof(SUPLDRSEG) * SegArgs.iSegs, 8);
++
+             /*
+-             * We need to load it.
+-             * Allocate memory for the image bits.
++             * Open the R0 image.
+              */
+-            PSUPLDRLOAD pLoadReq = (PSUPLDRLOAD)RTMemTmpAlloc(SUP_IOCTL_LDR_LOAD_SIZE(cbImageWithTabs));
+-            if (pLoadReq)
++            SUPLDROPEN OpenReq;
++            OpenReq.Hdr.u32Cookie              = g_u32Cookie;
++            OpenReq.Hdr.u32SessionCookie       = g_u32SessionCookie;
++            OpenReq.Hdr.cbIn                   = SUP_IOCTL_LDR_OPEN_SIZE_IN;
++            OpenReq.Hdr.cbOut                  = SUP_IOCTL_LDR_OPEN_SIZE_OUT;
++            OpenReq.Hdr.fFlags                 = SUPREQHDR_FLAGS_DEFAULT;
++            OpenReq.Hdr.rc                     = VERR_INTERNAL_ERROR;
++            OpenReq.u.In.cbImageWithEverything = cbImageWithEverything;
++            OpenReq.u.In.cbImageBits           = (uint32_t)CalcArgs.cbImage;
++            strcpy(OpenReq.u.In.szName, pszModule);
++            strcpy(OpenReq.u.In.szFilename, pszFilename);
++            if (!g_uSupFakeMode)
++            {
++                rc = suplibOsIOCtl(&g_supLibData, SUP_IOCTL_LDR_OPEN, &OpenReq, SUP_IOCTL_LDR_OPEN_SIZE);
++                if (RT_SUCCESS(rc))
++                    rc = OpenReq.Hdr.rc;
++            }
++            else
++            {
++                OpenReq.u.Out.fNeedsLoading = true;
++                OpenReq.u.Out.pvImageBase = 0xef423420;
++            }
++            *ppvImageBase = (void *)OpenReq.u.Out.pvImageBase;
++            if (    RT_SUCCESS(rc)
++                &&  OpenReq.u.Out.fNeedsLoading)
+             {
+                 /*
+-                 * Get the image bits.
++                 * We need to load it.
++                 *
++                 * Allocate the request and pass it to an inner work function
++                 * that populates it and sends it off to the driver.
+                  */
+-
+-                SUPLDRRESIMPARGS Args = { pszModule, pErrInfo };
+-                rc = RTLdrGetBits(hLdrMod, &pLoadReq->u.In.abImage[0], (uintptr_t)OpenReq.u.Out.pvImageBase,
+-                                  supLoadModuleResolveImport, &Args);
+-
+-                if (RT_SUCCESS(rc))
++                const uint32_t cbLoadReq = SUP_IOCTL_LDR_LOAD_SIZE(cbImageWithEverything);
++                PSUPLDRLOAD    pLoadReq  = (PSUPLDRLOAD)RTMemTmpAlloc(cbLoadReq);
++                if (pLoadReq)
+                 {
+-                    /*
+-                     * Get the entry points.
+-                     */
+-                    RTUINTPTR VMMR0EntryFast = 0;
+-                    RTUINTPTR VMMR0EntryEx = 0;
+-                    RTUINTPTR SrvReqHandler = 0;
+-                    RTUINTPTR ModuleInit = 0;
+-                    RTUINTPTR ModuleTerm = 0;
+-                    const char *pszEp = NULL;
+-                    if (fIsVMMR0)
+-                    {
+-                        rc = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], (uintptr_t)OpenReq.u.Out.pvImageBase,
+-                                              UINT32_MAX, pszEp = "VMMR0EntryFast", &VMMR0EntryFast);
+-                        if (RT_SUCCESS(rc))
+-                            rc = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], (uintptr_t)OpenReq.u.Out.pvImageBase,
+-                                                  UINT32_MAX, pszEp = "VMMR0EntryEx", &VMMR0EntryEx);
+-                    }
+-                    else if (pszSrvReqHandler)
+-                        rc = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], (uintptr_t)OpenReq.u.Out.pvImageBase,
+-                                              UINT32_MAX, pszEp = pszSrvReqHandler, &SrvReqHandler);
+-                    if (RT_SUCCESS(rc))
+-                    {
+-                        int rc2 = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], (uintptr_t)OpenReq.u.Out.pvImageBase,
+-                                                   UINT32_MAX, pszEp = "ModuleInit", &ModuleInit);
+-                        if (RT_FAILURE(rc2))
+-                            ModuleInit = 0;
+-
+-                        rc2 = RTLdrGetSymbolEx(hLdrMod, &pLoadReq->u.In.abImage[0], (uintptr_t)OpenReq.u.Out.pvImageBase,
+-                                               UINT32_MAX, pszEp = "ModuleTerm", &ModuleTerm);
+-                        if (RT_FAILURE(rc2))
+-                            ModuleTerm = 0;
+-                    }
+-                    if (RT_SUCCESS(rc))
+-                    {
+-                        /*
+-                         * Create the symbol and string tables.
+-                         */
+-                        SUPLDRCREATETABSARGS CreateArgs;
+-                        CreateArgs.cbImage = CalcArgs.cbImage;
+-                        CreateArgs.pSym    = (PSUPLDRSYM)&pLoadReq->u.In.abImage[offSymTab];
+-                        CreateArgs.pszBase =     (char *)&pLoadReq->u.In.abImage[offStrTab];
+-                        CreateArgs.psz     = CreateArgs.pszBase;
+-                        rc = RTLdrEnumSymbols(hLdrMod, 0, NULL, 0, supLoadModuleCreateTabsCB, &CreateArgs);
+-                        if (RT_SUCCESS(rc))
+-                        {
+-                            AssertRelease((size_t)(CreateArgs.psz - CreateArgs.pszBase) <= CalcArgs.cbStrings);
+-                            AssertRelease((size_t)(CreateArgs.pSym - (PSUPLDRSYM)&pLoadReq->u.In.abImage[offSymTab]) <= CalcArgs.cSymbols);
+-
+-                            /*
+-                             * Upload the image.
+-                             */
+-                            pLoadReq->Hdr.u32Cookie = g_u32Cookie;
+-                            pLoadReq->Hdr.u32SessionCookie = g_u32SessionCookie;
+-                            pLoadReq->Hdr.cbIn = SUP_IOCTL_LDR_LOAD_SIZE_IN(cbImageWithTabs);
+-                            pLoadReq->Hdr.cbOut = SUP_IOCTL_LDR_LOAD_SIZE_OUT;
+-                            pLoadReq->Hdr.fFlags = SUPREQHDR_FLAGS_MAGIC | SUPREQHDR_FLAGS_EXTRA_IN;
+-                            pLoadReq->Hdr.rc = VERR_INTERNAL_ERROR;
+-
+-                            pLoadReq->u.In.pfnModuleInit              = (RTR0PTR)ModuleInit;
+-                            pLoadReq->u.In.pfnModuleTerm              = (RTR0PTR)ModuleTerm;
+-                            if (fIsVMMR0)
+-                            {
+-                                pLoadReq->u.In.eEPType                = SUPLDRLOADEP_VMMR0;
+-                                pLoadReq->u.In.EP.VMMR0.pvVMMR0       = OpenReq.u.Out.pvImageBase;
+-                                pLoadReq->u.In.EP.VMMR0.pvVMMR0EntryFast= (RTR0PTR)VMMR0EntryFast;
+-                                pLoadReq->u.In.EP.VMMR0.pvVMMR0EntryEx  = (RTR0PTR)VMMR0EntryEx;
+-                            }
+-                            else if (pszSrvReqHandler)
+-                            {
+-                                pLoadReq->u.In.eEPType                = SUPLDRLOADEP_SERVICE;
+-                                pLoadReq->u.In.EP.Service.pfnServiceReq = (RTR0PTR)SrvReqHandler;
+-                                pLoadReq->u.In.EP.Service.apvReserved[0] = NIL_RTR0PTR;
+-                                pLoadReq->u.In.EP.Service.apvReserved[1] = NIL_RTR0PTR;
+-                                pLoadReq->u.In.EP.Service.apvReserved[2] = NIL_RTR0PTR;
+-                            }
+-                            else
+-                                pLoadReq->u.In.eEPType                = SUPLDRLOADEP_NOTHING;
+-                            pLoadReq->u.In.offStrTab                  = offStrTab;
+-                            pLoadReq->u.In.cbStrTab                   = (uint32_t)CalcArgs.cbStrings;
+-                            AssertRelease(pLoadReq->u.In.cbStrTab == CalcArgs.cbStrings);
+-                            pLoadReq->u.In.cbImageBits                = (uint32_t)CalcArgs.cbImage;
+-                            pLoadReq->u.In.offSymbols                 = offSymTab;
+-                            pLoadReq->u.In.cSymbols                   = CalcArgs.cSymbols;
+-                            pLoadReq->u.In.cbImageWithTabs            = cbImageWithTabs;
+-                            pLoadReq->u.In.pvImageBase                = OpenReq.u.Out.pvImageBase;
+-                            if (!g_uSupFakeMode)
+-                            {
+-                                rc = suplibOsIOCtl(&g_supLibData, SUP_IOCTL_LDR_LOAD, pLoadReq, SUP_IOCTL_LDR_LOAD_SIZE(cbImageWithTabs));
+-                                if (RT_SUCCESS(rc))
+-                                    rc = pLoadReq->Hdr.rc;
+-                                else
+-                                    LogRel(("SUP: SUP_IOCTL_LDR_LOAD ioctl for %s (%s) failed rc=%Rrc\n", pszModule, pszFilename, rc));
+-                            }
+-                            else
+-                                rc = VINF_SUCCESS;
+-                            if (    RT_SUCCESS(rc)
+-                                ||  rc == VERR_ALREADY_LOADED /* A competing process. */
+-                               )
+-                            {
+-                                LogRel(("SUP: Loaded %s (%s) at %#RKv - ModuleInit at %RKv and ModuleTerm at %RKv%s\n",
+-                                        pszModule, pszFilename, OpenReq.u.Out.pvImageBase, (RTR0PTR)ModuleInit, (RTR0PTR)ModuleTerm,
+-                                        OpenReq.u.Out.fNativeLoader ? " using the native ring-0 loader" : ""));
+-                                if (fIsVMMR0)
+-                                {
+-                                    g_pvVMMR0 = OpenReq.u.Out.pvImageBase;
+-                                    LogRel(("SUP: VMMR0EntryEx located at %RKv and VMMR0EntryFast at %RKv\n", (RTR0PTR)VMMR0EntryEx, (RTR0PTR)VMMR0EntryFast));
+-                                }
+-#ifdef RT_OS_WINDOWS
+-                                LogRel(("SUP: windbg> .reload /f %s=%#RKv\n", pszFilename, OpenReq.u.Out.pvImageBase));
+-#endif
+-
+-                                RTMemTmpFree(pLoadReq);
+-                                RTLdrClose(hLdrMod);
+-                                return VINF_SUCCESS;
+-                            }
+-
+-                            /*
+-                             * Failed, bail out.
+-                             */
+-                            LogRel(("SUP: Loading failed for %s (%s) rc=%Rrc\n", pszModule, pszFilename, rc));
+-                            if (   pLoadReq->u.Out.uErrorMagic == SUPLDRLOAD_ERROR_MAGIC
+-                                && pLoadReq->u.Out.szError[0] != '\0')
+-                            {
+-                                LogRel(("SUP: %s\n", pLoadReq->u.Out.szError));
+-                                RTErrInfoSet(pErrInfo, rc, pLoadReq->u.Out.szError);
+-                            }
+-                            else
+-                                RTErrInfoSet(pErrInfo, rc, "SUP_IOCTL_LDR_LOAD failed");
+-                        }
+-                        else
+-                        {
+-                            LogRel(("SUP: RTLdrEnumSymbols failed for %s (%s) rc=%Rrc\n", pszModule, pszFilename, rc));
+-                            RTErrInfoSetF(pErrInfo, rc, "RTLdrEnumSymbols #2 failed");
+-                        }
+-                    }
+-                    else
+-                    {
+-                        LogRel(("SUP: Failed to get entry point '%s' for %s (%s) rc=%Rrc\n", pszEp, pszModule, pszFilename, rc));
+-                        RTErrInfoSetF(pErrInfo, rc, "Failed to resolve entry point '%s'", pszEp);
+-                    }
++                    rc = supLoadModuleInner(hLdrMod, pLoadReq, cbImageWithEverything, OpenReq.u.Out.pvImageBase, CalcArgs.cbImage,
++                                            pszModule, pszFilename, OpenReq.u.Out.fNativeLoader, fIsVMMR0, pszSrvReqHandler,
++                                            offSymTab, CalcArgs.cSymbols,
++                                            offStrTab, CalcArgs.cbStrings,
++                                            offSegTab, SegArgs.iSegs,
++                                            pErrInfo);
++                    RTMemTmpFree(pLoadReq);
+                 }
+                 else
+                 {
+-                    LogRel(("SUP: RTLdrGetBits failed for %s (%s). rc=%Rrc\n", pszModule, pszFilename, rc));
+-                    if (!RTErrInfoIsSet(pErrInfo))
+-                        RTErrInfoSetF(pErrInfo, rc, "RTLdrGetBits failed");
++                    AssertMsgFailed(("failed to allocated %u bytes for SUPLDRLOAD_IN structure!\n", SUP_IOCTL_LDR_LOAD_SIZE(cbImageWithEverything)));
++                    rc = RTErrInfoSetF(pErrInfo, VERR_NO_TMP_MEMORY, "Failed to allocate %u bytes for the load request",
++                                       SUP_IOCTL_LDR_LOAD_SIZE(cbImageWithEverything));
+                 }
+-                RTMemTmpFree(pLoadReq);
+             }
+-            else
++            /*
++             * Already loaded?
++             */
++            else if (RT_SUCCESS(rc))
+             {
+-                AssertMsgFailed(("failed to allocated %u bytes for SUPLDRLOAD_IN structure!\n", SUP_IOCTL_LDR_LOAD_SIZE(cbImageWithTabs)));
+-                rc = VERR_NO_TMP_MEMORY;
+-                RTErrInfoSetF(pErrInfo, rc, "Failed to allocate %u bytes for the load request", SUP_IOCTL_LDR_LOAD_SIZE(cbImageWithTabs));
+-            }
+-        }
+-        /*
+-         * Already loaded?
+-         */
+-        else if (RT_SUCCESS(rc))
+-        {
+-            if (fIsVMMR0)
+-                g_pvVMMR0 = OpenReq.u.Out.pvImageBase;
+-            LogRel(("SUP: Opened %s (%s) at %#RKv%s.\n", pszModule, pszFilename, OpenReq.u.Out.pvImageBase,
+-                    OpenReq.u.Out.fNativeLoader ? " loaded by the native ring-0 loader" : ""));
++                if (fIsVMMR0)
++                    g_pvVMMR0 = OpenReq.u.Out.pvImageBase;
++                LogRel(("SUP: Opened %s (%s) at %#RKv%s.\n", pszModule, pszFilename, OpenReq.u.Out.pvImageBase,
++                        OpenReq.u.Out.fNativeLoader ? " loaded by the native ring-0 loader" : ""));
+ #ifdef RT_OS_WINDOWS
+-            LogRel(("SUP: windbg> .reload /f %s=%#RKv\n", pszFilename, OpenReq.u.Out.pvImageBase));
++                LogRel(("SUP: windbg> .reload /f %s=%#RKv\n", pszFilename, OpenReq.u.Out.pvImageBase));
+ #endif
++            }
++            /*
++             * No, failed.
++             */
++            else
++                RTErrInfoSet(pErrInfo, rc, "SUP_IOCTL_LDR_OPEN failed");
+         }
+-        /*
+-         * No, failed.
+-         */
+-        else
+-            RTErrInfoSet(pErrInfo, rc, "SUP_IOCTL_LDR_OPEN failed");
++        else if (!RTErrInfoIsSet(pErrInfo) && pErrInfo)
++            RTErrInfoSetF(pErrInfo, rc, "RTLdrEnumSegments #1 failed");
+     }
+     else
+         RTErrInfoSetF(pErrInfo, rc, "RTLdrEnumSymbols #1 failed");
+@@ -682,10 +928,10 @@ SUPR3DECL(int) SUPR3GetSymbolR0(void *pv
+ }
+ 
+ 
+-SUPR3DECL(int) SUPR3LoadVMM(const char *pszFilename)
++SUPR3DECL(int) SUPR3LoadVMM(const char *pszFilename, PRTERRINFO pErrInfo)
+ {
+     void *pvImageBase;
+-    return SUPR3LoadModule(pszFilename, "VMMR0.r0", &pvImageBase, NULL /*pErrInfo*/);
++    return SUPR3LoadModule(pszFilename, "VMMR0.r0", &pvImageBase, pErrInfo);
+ }
+ 
+ 
+--- a/src/VBox/HostDrivers/Support/testcase/tstInt.cpp
++++ b/src/VBox/HostDrivers/Support/testcase/tstInt.cpp
+@@ -76,7 +76,8 @@ int main(int argc, char **argv)
+         /*
+          * Load VMM code.
+          */
+-        rc = SUPR3LoadVMM(szAbsFile);
++        RTERRINFOSTATIC ErrInfo;
++        rc = SUPR3LoadVMM(szAbsFile, RTErrInfoInitStatic(&ErrInfo));
+         if (RT_SUCCESS(rc))
+         {
+             /*
+@@ -208,7 +209,7 @@ int main(int argc, char **argv)
+         }
+         else
+         {
+-            RTPrintf("tstInt: SUPR3LoadVMM failed with rc=%Rrc\n", rc);
++            RTPrintf("tstInt: SUPR3LoadVMM failed with rc=%Rrc%#RTeim\n", rc, &ErrInfo.Core);
+             rcRet++;
+         }
+ 
+--- a/src/VBox/Devices/Makefile.kmk
++++ b/src/VBox/Devices/Makefile.kmk
+@@ -52,7 +52,7 @@ if !defined(VBOX_ONLY_EXTPACKS)
+  if1of ($(KBUILD_TARGET_ARCH), $(VBOX_SUPPORTED_HOST_ARCHS))
+   LIBRARIES += ServicesR0
+   DLLS      += VBoxDDU VBoxDD VBoxDD2
+-  SYSMODS   += VBoxDDR0
++  $(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += VBoxDDR0
+   ifdef VBOX_WITH_RAW_MODE
+    SYSMODS   += VBoxDDRC
+   endif
+@@ -1370,7 +1370,7 @@ if defined(VBOX_WITH_EXTPACK) && defined
+ 	USB/DevXHCI.cpp
+   $(call VBOX_SET_VER_INFO_DLL,VBoxEhciR3,PUEL Extension Pack - EHCI Device)
+ 
+-  SYSMODS += VBoxEhciR0
++  $(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += VBoxEhciR0
+   VBoxEhciR0_TEMPLATE = VBoxR0ExtPackPuel
+   VBoxEhciR0_SOURCES  = \
+ 	USB/DevEHCI.cpp \
+@@ -1406,7 +1406,7 @@ if defined(VBOX_WITH_EXTPACK) && defined
+   VBoxPciRawDrv_SOURCES     = Bus/DrvPciRaw.cpp
+   $(call VBOX_SET_VER_INFO_DLL,VBoxPciRawDrv,PUEL Extension Pack - PCI Passthrough Driver)
+ 
+-  SYSMODS += VBoxPciRawR0
++  $(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += VBoxPciRawR0
+   VBoxPciRawR0_TEMPLATE     = VBoxR0ExtPackPuel
+   VBoxPciRawR0_SOURCES      = Bus/DevPciRaw.cpp
+   $(call VBOX_SET_VER_INFO_R0,VBoxPciRawR0,PUEL Extension Pack - PCI Passthrough Driver$(COMMA) ring-0)
+@@ -1424,7 +1424,7 @@ if defined(VBOX_WITH_EXTPACK) && defined
+   	Storage/DevNVMe.cpp
+   $(call VBOX_SET_VER_INFO_DLL,VBoxNvmeR3,PUEL Extension Pack - NVMe Device)
+ 
+-  SYSMODS += VBoxNvmeR0
++  $(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += VBoxNvmeR0
+   VBoxNvmeR0_TEMPLATE = VBoxR0ExtPackPuel
+   VBoxNvmeR0_SOURCES  = \
+   	Storage/DevNVMe.cpp
+--- a/src/VBox/ExtPacks/VBoxDTrace/Makefile.kmk
++++ b/src/VBox/ExtPacks/VBoxDTrace/Makefile.kmk
+@@ -242,7 +242,7 @@ if defined(VBOX_WITH_EXTPACK_VBOXDTRACE)
+  # The ring-0 part of VBoxDTrace.
+  #
+  ifneq ($(KBUILD_TARGET),solaris) # disabled on solaris - neiter needed nor currently able to build it here.
+-  SYSMODS += VBoxDTraceR0
++  $(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += VBoxDTraceR0
+  endif
+  VBoxDTraceR0_TEMPLATE = VBoxR0ExtPackDTrace
+  VBoxDTraceR0_DEFS = IN_VBOXDTRACE_R0 IN_RT_R0
+--- a/src/VBox/ExtPacks/BusMouseSample/Makefile.kmk
++++ b/src/VBox/ExtPacks/BusMouseSample/Makefile.kmk
+@@ -83,7 +83,7 @@ DLLS += VBoxBusMouseR3
+ VBoxBusMouseR3_TEMPLATE = VBoxR3ExtPackBusMouse
+ VBoxBusMouseR3_SOURCES  = DevBusMouse.cpp
+ 
+-SYSMODS += VBoxBusMouseR0
++$(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += VBoxBusMouseR0
+ VBoxBusMouseR0_TEMPLATE = VBoxR0ExtPackBusMouse
+ VBoxBusMouseR0_SOURCES  = DevBusMouse.cpp
+ 
+--- a/src/VBox/Runtime/testcase/Makefile.kmk
++++ b/src/VBox/Runtime/testcase/Makefile.kmk
+@@ -210,13 +210,13 @@ if1of ($(KBUILD_TARGET_ARCH), amd64 x86)
+   	tstRTR0ThreadDriver
+  endif
+  if1of ($(KBUILD_TARGET_ARCH), $(VBOX_SUPPORTED_HOST_ARCHS))
+-  SYSMODS += \
++  $(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += \
+   	tstLdrObjR0
+   ifdef VBOX_WITH_RAW_MODE
+    SYSMODS += tstLdrObj
+   endif
+  endif
+- SYSMODS += \
++ $(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += \
+  	tstRTR0MemUserKernel \
+  	tstRTR0SemMutex \
+  	tstRTR0Timer \
+@@ -224,7 +224,7 @@ if1of ($(KBUILD_TARGET_ARCH), amd64 x86)
+  	tstRTR0Thread
+  if1of ($(KBUILD_TARGET), solaris darwin)
+   PROGRAMS += tstRTR0DbgKrnlInfoDriver
+-  SYSMODS += tstRTR0DbgKrnlInfo
++  $(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += tstRTR0DbgKrnlInfo
+  endif # VBOX_SUPPORTED_HOST_ARCHS only
+ 
+ endif
+--- a/src/VBox/VMM/Makefile.kmk
++++ b/src/VBox/VMM/Makefile.kmk
+@@ -435,7 +435,7 @@ ifndef VBOX_ONLY_EXTPACKS
+ #
+ # VMMR0.r0
+ #
+-SYSMODS += VMMR0
++$(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += VMMR0
+ VMMR0_TEMPLATE  = VBoxR0
+ VMMR0_SYSSUFF   = .r0
+ 
+--- a/src/VBox/ValidationKit/utils/misc/Makefile.kmk
++++ b/src/VBox/ValidationKit/utils/misc/Makefile.kmk
+@@ -31,7 +31,7 @@ PROGRAMS += LoadGenerator
+ LoadGenerator_TEMPLATE = VBoxValidationKitR3Host
+ LoadGenerator_SOURCES  = loadgenerator.cpp
+ 
+-SYSMODS += loadgeneratorR0
++$(if-expr defined(VBOX_WITH_VBOXR0_AS_DLL),DLLS,SYSMODS) += loadgeneratorR0
+ loadgeneratorR0_TEMPLATE = VBoxValidationKitR0
+ loadgeneratorR0_SOURCES = loadgeneratorR0.cpp
+ 
+--- a/src/VBox/HostDrivers/Support/SUPLib.cpp
++++ b/src/VBox/HostDrivers/Support/SUPLib.cpp
+@@ -275,9 +275,9 @@ SUPR3DECL(int) SUPR3InitEx(bool fUnrestr
+         CookieReq.Hdr.rc = VERR_INTERNAL_ERROR;
+         strcpy(CookieReq.u.In.szMagic, SUPCOOKIE_MAGIC);
+         CookieReq.u.In.u32ReqVersion = SUPDRV_IOC_VERSION;
+-        const uint32_t uMinVersion = (SUPDRV_IOC_VERSION & 0xffff0000) == 0x002d0000
++        const uint32_t uMinVersion = /*(SUPDRV_IOC_VERSION & 0xffff0000) == 0x002d0000
+                                    ? 0x002d0001
+-                                   : SUPDRV_IOC_VERSION & 0xffff0000;
++                                   :*/ SUPDRV_IOC_VERSION & 0xffff0000;
+         CookieReq.u.In.u32MinVersion = uMinVersion;
+         rc = suplibOsIOCtl(&g_supLibData, SUP_IOCTL_COOKIE, &CookieReq, SUP_IOCTL_COOKIE_SIZE);
+         if (    RT_SUCCESS(rc)
+--- a/src/VBox/HostDrivers/Support/SUPDrvIOC.h
++++ b/src/VBox/HostDrivers/Support/SUPDrvIOC.h
+@@ -220,9 +220,10 @@ typedef SUPREQHDR *PSUPREQHDR;
+  *  -# When increment the major number, execute all pending work.
+  *
+  * @todo Pending work on next major version change:
+- *          - Move SUP_IOCTL_FAST_DO_NOP and SUP_VMMR0_DO_NEM_RUN after NEM.
++ *          - Nothing.
++ * @note 0x002f0000 is used by 6.0. The next version number must be 0x00300000.
+  */
+-#define SUPDRV_IOC_VERSION                              0x002d0001
++#define SUPDRV_IOC_VERSION                              0x002e0000
+ 
+ /** SUP_IOCTL_COOKIE. */
+ typedef struct SUPCOOKIE
+@@ -314,8 +315,8 @@ typedef struct SUPLDROPEN
+     {
+         struct
+         {
+-            /** Size of the image we'll be loading (including tables). */
+-            uint32_t        cbImageWithTabs;
++            /** Size of the image we'll be loading (including all tables). */
++            uint32_t        cbImageWithEverything;
+             /** The size of the image bits. (Less or equal to cbImageWithTabs.) */
+             uint32_t        cbImageBits;
+             /** Image name.
+@@ -390,6 +391,29 @@ typedef SUPLDRSYM *PSUPLDRSYM;
+ /** Pointer to a const symbol table entry. */
+ typedef SUPLDRSYM const *PCSUPLDRSYM;
+ 
++#define SUPLDR_PROT_READ    1   /**< Grant read access (RTMEM_PROT_READ). */
++#define SUPLDR_PROT_WRITE   2   /**< Grant write access (RTMEM_PROT_WRITE). */
++#define SUPLDR_PROT_EXEC    4   /**< Grant execute access (RTMEM_PROT_EXEC). */
++
++/**
++ * A segment table entry - chiefly for conveying memory protection.
++ */
++typedef struct SUPLDRSEG
++{
++    /** The RVA of the segment. */
++    uint32_t        off;
++    /** The size of the segment. */
++    uint32_t        cb : 28;
++    /** The segment protection (SUPLDR_PROT_XXX). */
++    uint32_t        fProt : 3;
++    /** MBZ. */
++    uint32_t        fUnused;
++} SUPLDRSEG;
++/** Pointer to a segment table entry. */
++typedef SUPLDRSEG *PSUPLDRSEG;
++/** Pointer to a const segment table entry. */
++typedef SUPLDRSEG const *PCSUPLDRSEG;
++
+ /**
+  * SUPLDRLOAD::u::In::EP type.
+  */
+@@ -443,7 +467,7 @@ typedef struct SUPLDRLOAD
+             /** The size of the image bits (starting at offset 0 and
+              * approaching offSymbols). */
+             uint32_t        cbImageBits;
+-            /** The offset of the symbol table. */
++            /** The offset of the symbol table (SUPLDRSYM array). */
+             uint32_t        offSymbols;
+             /** The number of entries in the symbol table. */
+             uint32_t        cSymbols;
+@@ -451,8 +475,12 @@ typedef struct SUPLDRLOAD
+             uint32_t        offStrTab;
+             /** Size of the string table. */
+             uint32_t        cbStrTab;
++            /** Offset to the segment table (SUPLDRSEG array). */
++            uint32_t        offSegments;
++            /** Number of segments. */
++            uint32_t        cSegments;
+             /** Size of image data in achImage. */
+-            uint32_t        cbImageWithTabs;
++            uint32_t        cbImageWithEverything;
+             /** The image data. */
+             uint8_t         abImage[1];
+         } In;
+--- a/src/VBox/HostDrivers/Support/SUPDrvInternal.h
++++ b/src/VBox/HostDrivers/Support/SUPDrvInternal.h
+@@ -145,6 +145,12 @@
+ # define SUPDRV_USE_MUTEX_FOR_GIP
+ #endif
+ 
++#if defined(RT_OS_LINUX) /** @todo make everyone do this */
++/** Use the RTR0MemObj API rather than the RTMemExecAlloc for the images.
++ * This is a good idea in general, but a necessity for @bugref{9801}. */
++# define SUPDRV_USE_MEMOBJ_FOR_LDR_IMAGE
++#endif
++
+ 
+ /**
+  * OS debug print macro.
+@@ -326,15 +332,20 @@ typedef struct SUPDRVLDRIMAGE
+     struct SUPDRVLDRIMAGE * volatile pNext;
+     /** Pointer to the image. */
+     void                           *pvImage;
++#ifdef SUPDRV_USE_MEMOBJ_FOR_LDR_IMAGE
++    /** The memory object for the module allocation. */
++    RTR0MEMOBJ                      hMemObjImage;
++#else
+     /** Pointer to the allocated image buffer.
+      * pvImage is 32-byte aligned or it may governed by the native loader (this
+      * member is NULL then). */
+     void                           *pvImageAlloc;
++#endif
+     /** Magic value (SUPDRVLDRIMAGE_MAGIC). */
+     uint32_t                        uMagic;
+     /** Size of the image including the tables. This is mainly for verification
+      * of the load request. */
+-    uint32_t                        cbImageWithTabs;
++    uint32_t                        cbImageWithEverything;
+     /** Size of the image. */
+     uint32_t                        cbImageBits;
+     /** The number of entries in the symbol table. */
+@@ -345,6 +356,10 @@ typedef struct SUPDRVLDRIMAGE
+     char                           *pachStrTab;
+     /** Size of the string table. */
+     uint32_t                        cbStrTab;
++    /** Number of segments. */
++    uint32_t                        cSegments;
++    /** Segments (for memory protection). */
++    PSUPLDRSEG                      paSegments;
+     /** Pointer to the optional module initialization callback. */
+     PFNR0MODULEINIT                 pfnModuleInit;
+     /** Pointer to the optional module termination callback. */
+--- a/src/VBox/HostDrivers/Support/SUPDrv.cpp
++++ b/src/VBox/HostDrivers/Support/SUPDrv.cpp
+@@ -1734,11 +1734,10 @@ static int supdrvIOCtlInnerUnrestricted(
+             /* validate */
+             PSUPLDROPEN pReq = (PSUPLDROPEN)pReqHdr;
+             REQ_CHECK_SIZES(SUP_IOCTL_LDR_OPEN);
+-            REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageWithTabs > 0);
+-            REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageWithTabs < 16*_1M);
++            REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageWithEverything > 0);
++            REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageWithEverything < 16*_1M);
+             REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageBits > 0);
+-            REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageBits > 0);
+-            REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageBits < pReq->u.In.cbImageWithTabs);
++            REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.cbImageBits < pReq->u.In.cbImageWithEverything);
+             REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, pReq->u.In.szName[0]);
+             REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, RTStrEnd(pReq->u.In.szName, sizeof(pReq->u.In.szName)));
+             REQ_CHECK_EXPR(SUP_IOCTL_LDR_OPEN, supdrvIsLdrModuleNameValid(pReq->u.In.szName));
+@@ -1754,19 +1753,29 @@ static int supdrvIOCtlInnerUnrestricted(
+             /* validate */
+             PSUPLDRLOAD pReq = (PSUPLDRLOAD)pReqHdr;
+             REQ_CHECK_EXPR(Name, pReq->Hdr.cbIn >= SUP_IOCTL_LDR_LOAD_SIZE_IN(32));
+-            REQ_CHECK_SIZES_EX(SUP_IOCTL_LDR_LOAD, SUP_IOCTL_LDR_LOAD_SIZE_IN(pReq->u.In.cbImageWithTabs), SUP_IOCTL_LDR_LOAD_SIZE_OUT);
+-            REQ_CHECK_EXPR(SUP_IOCTL_LDR_LOAD, pReq->u.In.cSymbols <= 16384);
++            REQ_CHECK_SIZES_EX(SUP_IOCTL_LDR_LOAD, SUP_IOCTL_LDR_LOAD_SIZE_IN(pReq->u.In.cbImageWithEverything), SUP_IOCTL_LDR_LOAD_SIZE_OUT);
+             REQ_CHECK_EXPR_FMT(     !pReq->u.In.cSymbols
+-                               ||   (   pReq->u.In.offSymbols < pReq->u.In.cbImageWithTabs
+-                                     && pReq->u.In.offSymbols + pReq->u.In.cSymbols * sizeof(SUPLDRSYM) <= pReq->u.In.cbImageWithTabs),
+-                               ("SUP_IOCTL_LDR_LOAD: offSymbols=%#lx cSymbols=%#lx cbImageWithTabs=%#lx\n", (long)pReq->u.In.offSymbols,
+-                                (long)pReq->u.In.cSymbols, (long)pReq->u.In.cbImageWithTabs));
++                               ||   (   pReq->u.In.cSymbols <= 16384
++                                     && pReq->u.In.offSymbols >= pReq->u.In.cbImageBits
++                                     && pReq->u.In.offSymbols < pReq->u.In.cbImageWithEverything
++                                     && pReq->u.In.offSymbols + pReq->u.In.cSymbols * sizeof(SUPLDRSYM) <= pReq->u.In.cbImageWithEverything),
++                               ("SUP_IOCTL_LDR_LOAD: offSymbols=%#lx cSymbols=%#lx cbImageWithEverything=%#lx\n", (long)pReq->u.In.offSymbols,
++                                (long)pReq->u.In.cSymbols, (long)pReq->u.In.cbImageWithEverything));
+             REQ_CHECK_EXPR_FMT(     !pReq->u.In.cbStrTab
+-                               ||   (   pReq->u.In.offStrTab < pReq->u.In.cbImageWithTabs
+-                                     && pReq->u.In.offStrTab + pReq->u.In.cbStrTab <= pReq->u.In.cbImageWithTabs
+-                                     && pReq->u.In.cbStrTab <= pReq->u.In.cbImageWithTabs),
+-                               ("SUP_IOCTL_LDR_LOAD: offStrTab=%#lx cbStrTab=%#lx cbImageWithTabs=%#lx\n", (long)pReq->u.In.offStrTab,
+-                                (long)pReq->u.In.cbStrTab, (long)pReq->u.In.cbImageWithTabs));
++                               ||   (   pReq->u.In.offStrTab < pReq->u.In.cbImageWithEverything
++                                     && pReq->u.In.offStrTab >= pReq->u.In.cbImageBits
++                                     && pReq->u.In.offStrTab + pReq->u.In.cbStrTab <= pReq->u.In.cbImageWithEverything
++                                     && pReq->u.In.cbStrTab <= pReq->u.In.cbImageWithEverything),
++                               ("SUP_IOCTL_LDR_LOAD: offStrTab=%#lx cbStrTab=%#lx cbImageWithEverything=%#lx\n", (long)pReq->u.In.offStrTab,
++                                (long)pReq->u.In.cbStrTab, (long)pReq->u.In.cbImageWithEverything));
++            REQ_CHECK_EXPR_FMT(   pReq->u.In.cSegments >= 1
++                               && pReq->u.In.cSegments <= 128
++                               && pReq->u.In.cSegments <= pReq->u.In.cbImageBits / PAGE_SIZE
++                               && pReq->u.In.offSegments >= pReq->u.In.cbImageBits
++                               && pReq->u.In.offSegments < pReq->u.In.cbImageWithEverything
++                               && pReq->u.In.offSegments + pReq->u.In.cSegments * sizeof(SUPLDRSEG) <= pReq->u.In.cbImageWithEverything,
++                               ("SUP_IOCTL_LDR_LOAD: offSegments=%#lx cSegments=%#lx cbImageWithEverything=%#lx\n", (long)pReq->u.In.offSegments,
++                                (long)pReq->u.In.cSegments, (long)pReq->u.In.cbImageWithEverything));
+ 
+             if (pReq->u.In.cSymbols)
+             {
+@@ -1774,15 +1783,37 @@ static int supdrvIOCtlInnerUnrestricted(
+                 PSUPLDRSYM paSyms = (PSUPLDRSYM)&pReq->u.In.abImage[pReq->u.In.offSymbols];
+                 for (i = 0; i < pReq->u.In.cSymbols; i++)
+                 {
+-                    REQ_CHECK_EXPR_FMT(paSyms[i].offSymbol < pReq->u.In.cbImageWithTabs,
+-                                       ("SUP_IOCTL_LDR_LOAD: sym #%ld: symb off %#lx (max=%#lx)\n", (long)i, (long)paSyms[i].offSymbol, (long)pReq->u.In.cbImageWithTabs));
++                    REQ_CHECK_EXPR_FMT(paSyms[i].offSymbol < pReq->u.In.cbImageWithEverything,
++                                       ("SUP_IOCTL_LDR_LOAD: sym #%ld: symb off %#lx (max=%#lx)\n", (long)i, (long)paSyms[i].offSymbol, (long)pReq->u.In.cbImageWithEverything));
+                     REQ_CHECK_EXPR_FMT(paSyms[i].offName < pReq->u.In.cbStrTab,
+-                                       ("SUP_IOCTL_LDR_LOAD: sym #%ld: name off %#lx (max=%#lx)\n", (long)i, (long)paSyms[i].offName, (long)pReq->u.In.cbImageWithTabs));
++                                       ("SUP_IOCTL_LDR_LOAD: sym #%ld: name off %#lx (max=%#lx)\n", (long)i, (long)paSyms[i].offName, (long)pReq->u.In.cbImageWithEverything));
+                     REQ_CHECK_EXPR_FMT(RTStrEnd((char const *)&pReq->u.In.abImage[pReq->u.In.offStrTab + paSyms[i].offName],
+                                                 pReq->u.In.cbStrTab - paSyms[i].offName),
+-                                       ("SUP_IOCTL_LDR_LOAD: sym #%ld: unterminated name! (%#lx / %#lx)\n", (long)i, (long)paSyms[i].offName, (long)pReq->u.In.cbImageWithTabs));
++                                       ("SUP_IOCTL_LDR_LOAD: sym #%ld: unterminated name! (%#lx / %#lx)\n", (long)i, (long)paSyms[i].offName, (long)pReq->u.In.cbImageWithEverything));
+                 }
+             }
++            {
++                uint32_t i;
++                uint32_t offPrevEnd = 0;
++                PSUPLDRSEG paSegs = (PSUPLDRSEG)&pReq->u.In.abImage[pReq->u.In.offSegments];
++                for (i = 0; i < pReq->u.In.cSegments; i++)
++                {
++                    REQ_CHECK_EXPR_FMT(paSegs[i].off < pReq->u.In.cbImageBits && !(paSegs[i].off & PAGE_OFFSET_MASK),
++                                       ("SUP_IOCTL_LDR_LOAD: seg #%ld: off %#lx (max=%#lx)\n", (long)i, (long)paSegs[i].off, (long)pReq->u.In.cbImageBits));
++                    REQ_CHECK_EXPR_FMT(paSegs[i].cb <= pReq->u.In.cbImageBits,
++                                       ("SUP_IOCTL_LDR_LOAD: seg #%ld: cb %#lx (max=%#lx)\n", (long)i, (long)paSegs[i].cb, (long)pReq->u.In.cbImageBits));
++                    REQ_CHECK_EXPR_FMT(paSegs[i].off + paSegs[i].cb <= pReq->u.In.cbImageBits,
++                                       ("SUP_IOCTL_LDR_LOAD: seg #%ld: off %#lx + cb %#lx = %#lx (max=%#lx)\n", (long)i, (long)paSegs[i].off, (long)paSegs[i].cb, (long)(paSegs[i].off + paSegs[i].cb), (long)pReq->u.In.cbImageBits));
++                    REQ_CHECK_EXPR_FMT(paSegs[i].fProt != 0,
++                                       ("SUP_IOCTL_LDR_LOAD: seg #%ld: off %#lx + cb %#lx\n", (long)i, (long)paSegs[i].off, (long)paSegs[i].cb));
++                    REQ_CHECK_EXPR_FMT(paSegs[i].fUnused == 0, ("SUP_IOCTL_LDR_LOAD: seg #%ld: fUnused=1\n", (long)i));
++                    REQ_CHECK_EXPR_FMT(offPrevEnd == paSegs[i].off,
++                                       ("SUP_IOCTL_LDR_LOAD: seg #%ld: off %#lx offPrevEnd %#lx\n", (long)i, (long)paSegs[i].off, (long)offPrevEnd));
++                    offPrevEnd = paSegs[i].off + paSegs[i].cb;
++                }
++                REQ_CHECK_EXPR_FMT(offPrevEnd == pReq->u.In.cbImageBits,
++                                   ("SUP_IOCTL_LDR_LOAD: offPrevEnd %#lx cbImageBits %#lx\n", (long)i, (long)offPrevEnd, (long)pReq->u.In.cbImageBits));
++            }
+ 
+             /* execute */
+             pReq->Hdr.rc = supdrvIOCtl_LdrLoad(pDevExt, pSession, pReq);
+@@ -5021,7 +5052,7 @@ static int supdrvIOCtl_LdrOpen(PSUPDRVDE
+     size_t          cchName = strlen(pReq->u.In.szName); /* (caller checked < 32). */
+     SUPDRV_CHECK_SMAP_SETUP();
+     SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING);
+-    LogFlow(("supdrvIOCtl_LdrOpen: szName=%s cbImageWithTabs=%d\n", pReq->u.In.szName, pReq->u.In.cbImageWithTabs));
++    LogFlow(("supdrvIOCtl_LdrOpen: szName=%s cbImageWithEverything=%d\n", pReq->u.In.szName, pReq->u.In.cbImageWithEverything));
+ 
+     /*
+      * Check if we got an instance of the image already.
+@@ -5035,7 +5066,8 @@ static int supdrvIOCtl_LdrOpen(PSUPDRVDE
+         {
+             if (RT_LIKELY(pImage->cUsage < UINT32_MAX / 2U))
+             {
+-                /** @todo check cbImageBits and cbImageWithTabs here, if they differs that indicates that the images are different. */
++                /** @todo check cbImageBits and cbImageWithEverything here, if they differs
++                 *        that indicates that the images are different. */
+                 pImage->cUsage++;
+                 pReq->u.Out.pvImageBase   = pImage->pvImage;
+                 pReq->u.Out.fNeedsLoading = pImage->uState == SUP_IOCTL_LDR_OPEN;
+@@ -5078,13 +5110,19 @@ static int supdrvIOCtl_LdrOpen(PSUPDRVDE
+      */
+     pImage = (PSUPDRVLDRIMAGE)pv;
+     pImage->pvImage         = NULL;
++#ifdef SUPDRV_USE_MEMOBJ_FOR_LDR_IMAGE
++    pImage->hMemObjImage    = NIL_RTR0MEMOBJ;
++#else
+     pImage->pvImageAlloc    = NULL;
+-    pImage->cbImageWithTabs = pReq->u.In.cbImageWithTabs;
++#endif
++    pImage->cbImageWithEverything = pReq->u.In.cbImageWithEverything;
+     pImage->cbImageBits     = pReq->u.In.cbImageBits;
+     pImage->cSymbols        = 0;
+     pImage->paSymbols       = NULL;
+     pImage->pachStrTab      = NULL;
+     pImage->cbStrTab        = 0;
++    pImage->cSegments       = 0;
++    pImage->paSegments      = NULL;
+     pImage->pfnModuleInit   = NULL;
+     pImage->pfnModuleTerm   = NULL;
+     pImage->pfnServiceReqHandler = NULL;
+@@ -5102,10 +5140,19 @@ static int supdrvIOCtl_LdrOpen(PSUPDRVDE
+     rc = supdrvOSLdrOpen(pDevExt, pImage, pReq->u.In.szFilename);
+     if (rc == VERR_NOT_SUPPORTED)
+     {
++#ifdef SUPDRV_USE_MEMOBJ_FOR_LDR_IMAGE
++        rc = RTR0MemObjAllocPage(&pImage->hMemObjImage, pImage->cbImageBits, true /*fExecutable*/);
++        if (RT_SUCCESS(rc))
++        {
++            pImage->pvImage = RTR0MemObjAddress(pImage->hMemObjImage);
++            pImage->fNative = false;
++        }
++#else
+         pImage->pvImageAlloc = RTMemExecAlloc(pImage->cbImageBits + 31);
+         pImage->pvImage     = RT_ALIGN_P(pImage->pvImageAlloc, 32);
+         pImage->fNative     = false;
+         rc = pImage->pvImageAlloc ? VINF_SUCCESS : VERR_NO_EXEC_MEMORY;
++#endif
+         SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING);
+     }
+     if (RT_FAILURE(rc))
+@@ -5138,41 +5185,90 @@ static int supdrvIOCtl_LdrOpen(PSUPDRVDE
+ 
+ 
+ /**
++ * Formats a load error message.
++ *
++ * @returns @a rc
++ * @param   rc                  Return code.
++ * @param   pReq                The request.
++ * @param   pszFormat           The error message format string.
++ * @param   ...                 Argument to the format string.
++ */
++int VBOXCALL supdrvLdrLoadError(int rc, PSUPLDRLOAD pReq, const char *pszFormat, ...)
++{
++    va_list va;
++    va_start(va, pszFormat);
++    pReq->u.Out.uErrorMagic = SUPLDRLOAD_ERROR_MAGIC;
++    RTStrPrintfV(pReq->u.Out.szError, sizeof(pReq->u.Out.szError), pszFormat, va);
++    va_end(va);
++    Log(("SUP_IOCTL_LDR_LOAD: %s [rc=%Rrc]\n", pReq->u.Out.szError, rc));
++    return rc;
++}
++
++
++/**
+  * Worker that validates a pointer to an image entrypoint.
+  *
++ * Calls supdrvLdrLoadError on error.
++ *
+  * @returns IPRT status code.
+  * @param   pDevExt         The device globals.
+  * @param   pImage          The loader image.
+  * @param   pv              The pointer into the image.
+  * @param   fMayBeNull      Whether it may be NULL.
+- * @param   fCheckNative    Whether to check with the native loaders.
+- * @param   pszSymbol       The entrypoint name or log name.  If the symbol
++ * @param   pszSymbol       The entrypoint name or log name.  If the symbol is
+  *                          capitalized it signifies a specific symbol, otherwise it
+  *                          for logging.
+  * @param   pbImageBits     The image bits prepared by ring-3.
++ * @param   pReq            The request for passing to supdrvLdrLoadError.
+  *
+- * @remarks Will leave the lock on failure.
++ * @note    Will leave the loader lock on failure!
+  */
+ static int supdrvLdrValidatePointer(PSUPDRVDEVEXT pDevExt, PSUPDRVLDRIMAGE pImage, void *pv, bool fMayBeNull,
+-                                    bool fCheckNative, const uint8_t *pbImageBits, const char *pszSymbol)
++                                    const uint8_t *pbImageBits, const char *pszSymbol, PSUPLDRLOAD pReq)
+ {
+     if (!fMayBeNull || pv)
+     {
+-        if ((uintptr_t)pv - (uintptr_t)pImage->pvImage >= pImage->cbImageBits)
++        uint32_t iSeg;
++
++        /* Must be within the image bits: */
++        uintptr_t const uRva = (uintptr_t)pv - (uintptr_t)pImage->pvImage;
++        if (uRva >= pImage->cbImageBits)
+         {
+             supdrvLdrUnlock(pDevExt);
+-            Log(("Out of range (%p LB %#x): %s=%p\n", pImage->pvImage, pImage->cbImageBits, pszSymbol, pv));
+-            return VERR_INVALID_PARAMETER;
++            return supdrvLdrLoadError(VERR_INVALID_PARAMETER, pReq,
++                                      "Invalid entry point address %p given for %s: RVA %#zx, image size %#zx",
++                                      pv, pszSymbol, uRva, pImage->cbImageBits);
+         }
+ 
+-        if (pImage->fNative && fCheckNative)
++        /* Must be in an executable segment: */
++        for (iSeg = 0; iSeg < pImage->cSegments; iSeg++)
++            if (uRva - pImage->paSegments[iSeg].off < (uintptr_t)pImage->paSegments[iSeg].cb)
++            {
++                if (pImage->paSegments[iSeg].fProt & SUPLDR_PROT_EXEC)
++                    break;
++                supdrvLdrUnlock(pDevExt);
++                return supdrvLdrLoadError(VERR_INVALID_PARAMETER, pReq,
++                                          "Bad entry point %p given for %s: not executable (seg #%u: %#RX32 LB %#RX32 prot %#x)",
++                                          pv, pszSymbol, iSeg, pImage->paSegments[iSeg].off, pImage->paSegments[iSeg].cb,
++                                          pImage->paSegments[iSeg].fProt);
++            }
++        if (iSeg >= pImage->cSegments)
+         {
++            supdrvLdrUnlock(pDevExt);
++            return supdrvLdrLoadError(VERR_INVALID_PARAMETER, pReq,
++                                      "Bad entry point %p given for %s: no matching segment found (RVA %#zx)!",
++                                      pv, pszSymbol, uRva);
++        }
++
++        if (pImage->fNative)
++        {
++            /** @todo pass pReq along to the native code.   */
+             int rc = supdrvOSLdrValidatePointer(pDevExt, pImage, pv, pbImageBits, pszSymbol);
+             if (RT_FAILURE(rc))
+             {
+                 supdrvLdrUnlock(pDevExt);
+-                Log(("Bad entry point address: %s=%p (rc=%Rrc)\n", pszSymbol, pv, rc));
+-                return rc;
++                return supdrvLdrLoadError(VERR_INVALID_PARAMETER, pReq,
++                                          "Bad entry point address %p for %s: rc=%Rrc\n", pv, pszSymbol, rc);
+             }
+         }
+     }
+@@ -5223,27 +5319,6 @@ int VBOXCALL supdrvLdrLoadError(int rc,
+ 
+ 
+ /**
+- * Formats a load error message.
+- *
+- * @returns @a rc
+- * @param   rc                  Return code.
+- * @param   pReq                The request.
+- * @param   pszFormat           The error message format string.
+- * @param   ...                 Argument to the format string.
+- */
+-int VBOXCALL supdrvLdrLoadError(int rc, PSUPLDRLOAD pReq, const char *pszFormat, ...)
+-{
+-    va_list va;
+-    va_start(va, pszFormat);
+-    pReq->u.Out.uErrorMagic = SUPLDRLOAD_ERROR_MAGIC;
+-    RTStrPrintfV(pReq->u.Out.szError, sizeof(pReq->u.Out.szError), pszFormat, va);
+-    va_end(va);
+-    Log(("SUP_IOCTL_LDR_LOAD: %s [rc=%Rrc]\n", pReq->u.Out.szError, rc));
+-    return rc;
+-}
+-
+-
+-/**
+  * Loads the image bits.
+  *
+  * This is the 2nd step of the loading.
+@@ -5259,7 +5334,7 @@ static int supdrvIOCtl_LdrLoad(PSUPDRVDE
+     PSUPDRVLDRIMAGE pImage;
+     int             rc;
+     SUPDRV_CHECK_SMAP_SETUP();
+-    LogFlow(("supdrvIOCtl_LdrLoad: pvImageBase=%p cbImageWithBits=%d\n", pReq->u.In.pvImageBase, pReq->u.In.cbImageWithTabs));
++    LogFlow(("supdrvIOCtl_LdrLoad: pvImageBase=%p cbImageWithEverything=%d\n", pReq->u.In.pvImageBase, pReq->u.In.cbImageWithEverything));
+     SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING);
+ 
+     /*
+@@ -5281,12 +5356,12 @@ static int supdrvIOCtl_LdrLoad(PSUPDRVDE
+     /*
+      * Validate input.
+      */
+-    if (   pImage->cbImageWithTabs != pReq->u.In.cbImageWithTabs
+-        || pImage->cbImageBits     != pReq->u.In.cbImageBits)
++    if (   pImage->cbImageWithEverything != pReq->u.In.cbImageWithEverything
++        || pImage->cbImageBits           != pReq->u.In.cbImageBits)
+     {
+         supdrvLdrUnlock(pDevExt);
+-        return supdrvLdrLoadError(VERR_INVALID_HANDLE, pReq, "Image size mismatch found: %d(prep) != %d(load) or %d != %d",
+-                                  pImage->cbImageWithTabs, pReq->u.In.cbImageWithTabs, pImage->cbImageBits, pReq->u.In.cbImageBits);
++        return supdrvLdrLoadError(VERR_INVALID_HANDLE, pReq, "Image size mismatch found: %u(prep) != %u(load) or %u != %u",
++                                  pImage->cbImageWithEverything, pReq->u.In.cbImageWithEverything, pImage->cbImageBits, pReq->u.In.cbImageBits);
+     }
+ 
+     if (pImage->uState != SUP_IOCTL_LDR_OPEN)
+@@ -5306,35 +5381,56 @@ static int supdrvIOCtl_LdrLoad(PSUPDRVDE
+         return supdrvLdrLoadError(VERR_PERMISSION_DENIED, pReq, "Loader is locked down");
+     }
+ 
++    /*
++     * Copy the segments before we start using supdrvLdrValidatePointer for entrypoint validation.
++     */
++    pImage->cSegments = pReq->u.In.cSegments;
++    {
++        size_t  cbSegments = pImage->cSegments * sizeof(SUPLDRSEG);
++        pImage->paSegments = (PSUPLDRSEG)RTMemDup(&pReq->u.In.abImage[pReq->u.In.offSegments], cbSegments);
++        if (pImage->paSegments) /* Align the last segment size to avoid upsetting RTR0MemObjProtect. */ /** @todo relax RTR0MemObjProtect */
++            pImage->paSegments[pImage->cSegments - 1].cb = RT_ALIGN_32(pImage->paSegments[pImage->cSegments - 1].cb, PAGE_SIZE);
++        else
++        {
++            supdrvLdrUnlock(pDevExt);
++            return supdrvLdrLoadError(VERR_NO_MEMORY, pReq, "Out of memory for segment table: %#x", cbSegments);
++        }
++        SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING);
++    }
++
++    /*
++     * Validate entrypoints.
++     */
+     switch (pReq->u.In.eEPType)
+     {
+         case SUPLDRLOADEP_NOTHING:
+             break;
+ 
+         case SUPLDRLOADEP_VMMR0:
+-            rc = supdrvLdrValidatePointer(    pDevExt, pImage, pReq->u.In.EP.VMMR0.pvVMMR0,          false, false, pReq->u.In.abImage, "pvVMMR0");
+-            if (RT_SUCCESS(rc))
+-                rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.VMMR0.pvVMMR0EntryFast, false,  true, pReq->u.In.abImage, "VMMR0EntryFast");
+-            if (RT_SUCCESS(rc))
+-                rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.VMMR0.pvVMMR0EntryEx,   false,  true, pReq->u.In.abImage, "VMMR0EntryEx");
++            if (pReq->u.In.EP.VMMR0.pvVMMR0 != pImage->pvImage)
++            {
++                supdrvLdrUnlock(pDevExt);
++                return supdrvLdrLoadError(VERR_INVALID_PARAMETER, pReq, "Invalid pvVMMR0 pointer: %p, expected %p", pReq->u.In.EP.VMMR0.pvVMMR0, pImage->pvImage);
++            }
++            rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.VMMR0.pvVMMR0EntryFast, false, pReq->u.In.abImage, "VMMR0EntryFast", pReq);
++            if (RT_FAILURE(rc))
++                return rc;
++            rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.VMMR0.pvVMMR0EntryEx,   false, pReq->u.In.abImage, "VMMR0EntryEx", pReq);
+             if (RT_FAILURE(rc))
+-                return supdrvLdrLoadError(rc, pReq, "Invalid VMMR0 pointer");
++                return rc;
+             break;
+ 
+         case SUPLDRLOADEP_SERVICE:
+-            rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.Service.pfnServiceReq, false,  true, pReq->u.In.abImage, "pfnServiceReq");
++            rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.EP.Service.pfnServiceReq, false, pReq->u.In.abImage, "pfnServiceReq", pReq);
+             if (RT_FAILURE(rc))
+-                return supdrvLdrLoadError(rc, pReq, "Invalid pfnServiceReq pointer: %p", pReq->u.In.EP.Service.pfnServiceReq);
++                return rc;
+             if (    pReq->u.In.EP.Service.apvReserved[0] != NIL_RTR0PTR
+                 ||  pReq->u.In.EP.Service.apvReserved[1] != NIL_RTR0PTR
+                 ||  pReq->u.In.EP.Service.apvReserved[2] != NIL_RTR0PTR)
+             {
+                 supdrvLdrUnlock(pDevExt);
+-                return supdrvLdrLoadError(VERR_INVALID_PARAMETER, pReq,
+-                                          "Out of range (%p LB %#x): apvReserved={%p,%p,%p} MBZ!",
+-                                          pImage->pvImage, pReq->u.In.cbImageWithTabs,
+-                                          pReq->u.In.EP.Service.apvReserved[0],
+-                                          pReq->u.In.EP.Service.apvReserved[1],
++                return supdrvLdrLoadError(VERR_INVALID_PARAMETER, pReq, "apvReserved={%p,%p,%p} MBZ!",
++                                          pReq->u.In.EP.Service.apvReserved[0], pReq->u.In.EP.Service.apvReserved[1],
+                                           pReq->u.In.EP.Service.apvReserved[2]);
+             }
+             break;
+@@ -5344,12 +5440,12 @@ static int supdrvIOCtl_LdrLoad(PSUPDRVDE
+             return supdrvLdrLoadError(VERR_INVALID_PARAMETER, pReq, "Invalid eEPType=%d", pReq->u.In.eEPType);
+     }
+ 
+-    rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.pfnModuleInit, true, true, pReq->u.In.abImage, "ModuleInit");
++    rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.pfnModuleInit, true, pReq->u.In.abImage, "ModuleInit", pReq);
+     if (RT_FAILURE(rc))
+-        return supdrvLdrLoadError(rc, pReq, "Invalid pfnModuleInit pointer: %p", pReq->u.In.pfnModuleInit);
+-    rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.pfnModuleTerm, true, true, pReq->u.In.abImage, "ModuleTerm");
++        return rc;
++    rc = supdrvLdrValidatePointer(pDevExt, pImage, pReq->u.In.pfnModuleTerm, true, pReq->u.In.abImage, "ModuleTerm", pReq);
+     if (RT_FAILURE(rc))
+-        return supdrvLdrLoadError(rc, pReq, "Invalid pfnModuleTerm pointer: %p", pReq->u.In.pfnModuleTerm);
++        return rc;
+     SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING);
+ 
+     /*
+@@ -5361,10 +5457,8 @@ static int supdrvIOCtl_LdrLoad(PSUPDRVDE
+         pImage->cbStrTab = pReq->u.In.cbStrTab;
+         if (pImage->cbStrTab)
+         {
+-            pImage->pachStrTab = (char *)RTMemAlloc(pImage->cbStrTab);
+-            if (pImage->pachStrTab)
+-                memcpy(pImage->pachStrTab, &pReq->u.In.abImage[pReq->u.In.offStrTab], pImage->cbStrTab);
+-            else
++            pImage->pachStrTab = (char *)RTMemDup(&pReq->u.In.abImage[pReq->u.In.offStrTab], pImage->cbStrTab);
++            if (!pImage->pachStrTab)
+                 rc = supdrvLdrLoadError(VERR_NO_MEMORY, pReq, "Out of memory for string table: %#x", pImage->cbStrTab);
+             SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING);
+         }
+@@ -5373,17 +5467,15 @@ static int supdrvIOCtl_LdrLoad(PSUPDRVDE
+         if (RT_SUCCESS(rc) && pImage->cSymbols)
+         {
+             size_t  cbSymbols = pImage->cSymbols * sizeof(SUPLDRSYM);
+-            pImage->paSymbols = (PSUPLDRSYM)RTMemAlloc(cbSymbols);
+-            if (pImage->paSymbols)
+-                memcpy(pImage->paSymbols, &pReq->u.In.abImage[pReq->u.In.offSymbols], cbSymbols);
+-            else
++            pImage->paSymbols = (PSUPLDRSYM)RTMemDup(&pReq->u.In.abImage[pReq->u.In.offSymbols], cbSymbols);
++            if (!pImage->paSymbols)
+                 rc = supdrvLdrLoadError(VERR_NO_MEMORY, pReq, "Out of memory for symbol table: %#x", cbSymbols);
+             SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING);
+         }
+     }
+ 
+     /*
+-     * Copy the bits / complete native loading.
++     * Copy the bits and apply permissions / complete native loading.
+      */
+     if (RT_SUCCESS(rc))
+     {
+@@ -5395,7 +5487,26 @@ static int supdrvIOCtl_LdrLoad(PSUPDRVDE
+             rc = supdrvOSLdrLoad(pDevExt, pImage, pReq->u.In.abImage, pReq);
+         else
+         {
++#ifdef SUPDRV_USE_MEMOBJ_FOR_LDR_IMAGE
++            uint32_t i;
+             memcpy(pImage->pvImage, &pReq->u.In.abImage[0], pImage->cbImageBits);
++
++            for (i = 0; i < pImage->cSegments; i++)
++            {
++                rc = RTR0MemObjProtect(pImage->hMemObjImage, pImage->paSegments[i].off, pImage->paSegments[i].cb,
++                                       pImage->paSegments[i].fProt);
++                if (RT_SUCCESS(rc))
++                    continue;
++                if (rc == VERR_NOT_SUPPORTED)
++                    rc = VINF_SUCCESS;
++                else
++                    rc = supdrvLdrLoadError(rc, pReq, "RTR0MemObjProtect failed on seg#%u %#RX32 LB %#RX32 fProt=%#x",
++                                            i, pImage->paSegments[i].off, pImage->paSegments[i].cb, pImage->paSegments[i].fProt);
++                break;
++            }
++#else
++            memcpy(pImage->pvImage, &pReq->u.In.abImage[0], pImage->cbImageBits);
++#endif
+             Log(("vboxdrv: Loaded '%s' at %p\n", pImage->szName, pImage->pvImage));
+         }
+         SUPDRV_CHECK_SMAP_CHECK(pDevExt, RT_NOTHING);
+@@ -5990,12 +6101,20 @@ static void supdrvLdrFree(PSUPDRVDEVEXT
+     pImage->pDevExt = NULL;
+     pImage->pNext   = NULL;
+     pImage->uState  = SUP_IOCTL_LDR_FREE;
++#ifdef SUPDRV_USE_MEMOBJ_FOR_LDR_IMAGE
++    RTR0MemObjFree(pImage->hMemObjImage, true /*fMappings*/);
++    pImage->hMemObjImage = NIL_RTR0MEMOBJ;
++#else
+     RTMemExecFree(pImage->pvImageAlloc, pImage->cbImageBits + 31);
+     pImage->pvImageAlloc = NULL;
++#endif
++    pImage->pvImage = NULL;
+     RTMemFree(pImage->pachStrTab);
+     pImage->pachStrTab = NULL;
+     RTMemFree(pImage->paSymbols);
+     pImage->paSymbols = NULL;
++    RTMemFree(pImage->paSegments);
++    pImage->paSegments = NULL;
+     RTMemFree(pImage);
+ }
+ 
+--- a/src/VBox/Runtime/r0drv/linux/the-linux-kernel.h
++++ b/src/VBox/Runtime/r0drv/linux/the-linux-kernel.h
+@@ -176,6 +176,11 @@
+ # include <asm/set_memory.h>
+ #endif
+ 
++/* for __flush_tlb_all() */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
++# include <asm/tlbflush.h>
++#endif
++
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 7, 0)
+ # include <asm/smap.h>
+ #else
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/kernel-5.8-4.patch b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/kernel-5.8-4.patch
deleted file mode 100644
index cb4148f..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/kernel-5.8-4.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Description: Fix kernel 5.8 forbidding use of vermagic.h header file
-Author: Gianfranco Costamagna <locutusofborg@debian.org>
-Origin: https://www.virtualbox.org/ticket/19644
-Bug-Ubuntu: https://launchpad.net/bugs/1884652
-Last-Update: 2020-08-10
-
---- virtualbox-6.1.12-dfsg.orig/src/VBox/Additions/linux/sharedfolders/vfsmod.c
-+++ virtualbox-6.1.12-dfsg/src/VBox/Additions/linux/sharedfolders/vfsmod.c
-@@ -53,7 +53,9 @@
- #include <linux/seq_file.h>
- #include <linux/vfs.h>
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 62)
--# include <linux/vermagic.h>
-+# if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
-+#  include <linux/vermagic.h>
-+# endif
- #endif
- #include <VBox/err.h>
- #include <iprt/path.h>
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.12.bb b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.12.bb
index e57df58..6c036d4 100644
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.12.bb
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.12.bb
@@ -12,10 +12,7 @@
 VBOX_NAME = "VirtualBox-${PV}"
 
 SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \
-    file://0001-fixes_for_mm_struct.patch \
-    file://0002-fixes_for_module_memory.patch \
-    file://0003-fixes_for_changes_in_cpu_tlbstate.patch \
-    file://kernel-5.8-4.patch \
+    file://021-linux-5-8.patch \
     file://Makefile.utils \
 "
 SRC_URI[md5sum] = "3c351f7fd6376e0bb3c8489505a9450c"
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.30.bb b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.30.bb
index 20c7b2d..93b0d6a 100644
--- a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.30.bb
+++ b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.30.bb
@@ -32,7 +32,7 @@
 PACKAGECONFIG ??= "gnutls libgcrypt nss openssl des"
 PACKAGECONFIG[gnutls] = ",,gnutls"
 PACKAGECONFIG[libgcrypt] = ",,libgcrypt"
-PACKAGECONFIG[nss] = "--with-nss=${STAGING_DIR_HOST} --with-nspr=${STAGING_DIR_HOST},,nss nspr"
+PACKAGECONFIG[nss] = "--with-nss=${STAGING_DIR_HOST} --with-nspr=${STAGING_DIR_HOST},--with-nss=no --with-nspr=no,nss nspr"
 PACKAGECONFIG[openssl] = ",,openssl"
 PACKAGECONFIG[des] = ",--disable-des,,"
 
diff --git a/meta-openembedded/meta-oe/recipes-test/cukinia/cukinia_0.5.1.bb b/meta-openembedded/meta-oe/recipes-test/cukinia/cukinia_0.5.1.bb
new file mode 100644
index 0000000..34dd8c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/cukinia/cukinia_0.5.1.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Linux firmware validation framework" 
+DESCRIPTION = "Cukinia is designed to help Linux-based embedded firmware \
+developers run simple system-level validation tests on their firmware." 
+HOMEPAGE = "https://github.com/savoirfairelinux/cukinia"
+LICENSE = "GPLv3 & Apache-2.0"
+
+LIC_FILES_CHKSUM = "file://LICENSE.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \
+                    file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
+
+SRC_URI = "git://github.com/savoirfairelinux/cukinia.git;protocol=https;branch=master"
+
+SRCREV = "ea934c5393ad99c37bec3c621a364122720cce02"
+
+S = "${WORKDIR}/git"
+
+do_install () {
+    install -d ${D}${sbindir}
+    install -m 0755 ${S}/cukinia ${D}${sbindir}
+}
diff --git a/meta-openembedded/meta-perl/recipes-perl/images/meta-perl-image.bb b/meta-openembedded/meta-perl/recipes-perl/images/meta-perl-image.bb
index c10d20a..b8d3a76 100644
--- a/meta-openembedded/meta-perl/recipes-perl/images/meta-perl-image.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/images/meta-perl-image.bb
@@ -2,4 +2,4 @@
 
 SUMMARY = "meta-perl build test image"
 
-IMAGE_INSTALL += "packagegroup-meta-perl"
+IMAGE_INSTALL += "packagegroup-meta-perl packagegroup-meta-perl-extended"
diff --git a/meta-openembedded/meta-perl/recipes-perl/images/meta-perl-ptest-image.bb b/meta-openembedded/meta-perl/recipes-perl/images/meta-perl-ptest-image.bb
index 3b776f8..a9b4cc3 100644
--- a/meta-openembedded/meta-perl/recipes-perl/images/meta-perl-ptest-image.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/images/meta-perl-ptest-image.bb
@@ -2,4 +2,8 @@
 
 SUMMARY = "meta-perl build ptest image"
 
+inherit features_check
+
+REQUIRED_DISTRO_FEATURES += "ptest"
+
 IMAGE_INSTALL += "packagegroup-meta-perl-ptest"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdata/libdata-hexdump-perl_0.02.bb b/meta-openembedded/meta-perl/recipes-perl/libdata/libdata-hexdump-perl_0.02.bb
index 6ab5a42..44c651c 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libdata/libdata-hexdump-perl_0.02.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libdata/libdata-hexdump-perl_0.02.bb
@@ -23,7 +23,7 @@
 
 S = "${WORKDIR}/Data-HexDump-${PV}"
 
-inherit cpan ptest
+inherit cpan ptest update-alternatives
 
 do_install_ptest () {
     install -d ${D}${PTEST_PATH}/t
@@ -31,3 +31,8 @@
 }
 
 BBCLASSEXTEND = "native"
+
+ALTERNATIVES_PRIORITY = "100"
+ALTERNATIVE_${PN} = "hexdump"
+ALTERNATIVE_LINK_NAME[hexdump] = "${bindir}/hexdump"
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.64.bb b/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.66.bb
similarity index 90%
rename from meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.64.bb
rename to meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.66.bb
index 468add9..aef1d34 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.64.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.66.bb
@@ -14,8 +14,8 @@
            file://sqlite-perl-test.pl \
 "
 
-SRC_URI[md5sum] = "10796495b52927eb2e1df34c86924027"
-SRC_URI[sha256sum] = "f4ae8f7b50842305566aadd90f7bfd12a9e32b6c603a9b1c1529e73eb82aff01"
+SRC_URI[md5sum] = "38581209de5c981f0e79840c8937fa16"
+SRC_URI[sha256sum] = "89e75dff9f66c273e0e459d51f151f88960eb7d82e2821e6902f18688ba592fe"
 
 UPSTREAM_CHECK_REGEX = "DBD\-SQLite\-(?P<pver>(\d+\.\d+))(?!_\d+).tar"
 
diff --git a/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.06.bb b/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.07.bb
similarity index 95%
rename from meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.06.bb
rename to meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.07.bb
index 24bde21..4b0c1d8 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.06.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.07.bb
@@ -15,8 +15,8 @@
 LIC_FILES_CHKSUM = "file://META.json;beginline=8;endline=10;md5=b12e3be1e17a7e99ca4f429ff32c28b5"
 
 SRC_URI = "${CPAN_MIRROR}/authors/id/D/DA/DANKOGAI/Encode-${PV}.tar.gz"
-SRC_URI[md5sum] = "d2e51a37b4e1d5b16816604f02363637"
-SRC_URI[sha256sum] = "5b2dcd6861287880584e63b2e518840d483aa38da70194cf64d9957282851eea"
+SRC_URI[md5sum] = "a63fa96cbe236b2f7bb5a5e9fd740837"
+SRC_URI[sha256sum] = "34a4ec9b574b7a6c6132c4ab3ded490fd600bc7ce382124aeda58bb1e112910f"
 
 UPSTREAM_CHECK_REGEX = "Encode\-(?P<pver>(\d+\.\d+))(?!_\d+).tar"
 
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.25.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.26.bb
similarity index 92%
rename from meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.25.bb
rename to meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.26.bb
index bda6ec1..3b96077 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.25.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.26.bb
@@ -9,8 +9,8 @@
 
 SRC_URI = "http://search.cpan.org/CPAN/authors/id/N/NL/NLNETLABS/Net-DNS-${PV}.tar.gz"
 
-SRC_URI[md5sum] = "5c0d1a6de317993e146ce6d37c897be5"
-SRC_URI[sha256sum] = "10931927d32d771817f9cd7d5502794f245a86cb403310db33656e493f67ff25"
+SRC_URI[md5sum] = "6db2562b6c42619e9c7d7e62422af8c4"
+SRC_URI[sha256sum] = "eabaecd0fdb3e6adef8c9e016e8509319f19caa8c76836253f7db72bafe56498"
 
 UPSTREAM_CHECK_REGEX = "Net\-DNS\-(?P<pver>(\d+\.\d+))(?!_\d+).tar"
 
diff --git a/meta-openembedded/meta-perl/recipes-perl/packagegroups/packagegroup-meta-perl.bb b/meta-openembedded/meta-perl/recipes-perl/packagegroups/packagegroup-meta-perl.bb
index 9b2406b..3fa56d4 100644
--- a/meta-openembedded/meta-perl/recipes-perl/packagegroups/packagegroup-meta-perl.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/packagegroups/packagegroup-meta-perl.bb
@@ -3,40 +3,87 @@
 inherit packagegroup
 
 PROVIDES = "${PACKAGES}"
-PACKAGES = ' \
+PACKAGES = "\
     packagegroup-meta-perl \
     packagegroup-meta-perl-extended \
-'
+    ${@bb.utils.contains("DISTRO_FEATURES", "ptest", "packagegroup-meta-perl-ptest-packages", "", d)} \
+"
 
 RDEPENDS_packagegroup-meta-perl = "\
-    libproc-waitstat-perl libmoo-perl libterm-readkey-perl \
-    libunicode-linebreak-perl libcurses-perl libmime-types-perl \
-    libmime-charset-perl libio-socket-ssl-perl libio-stringy-perl \
-    libtext-iconv-perl libtext-charwidth-perl libtext-diff-perl \
-    libtext-wrapi18n-perl liblocale-gettext-perl libdata-hexdump-perl \
-    libextutils-installpaths-perl libextutils-helpers-perl libextutils-parsexs-perl \
-    libextutils-config-perl libextutils-cppguess-perl libimport-into-perl \
-    libcrypt-openssl-rsa-perl libcrypt-openssl-guess-perl libcrypt-openssl-random-perl \
-    libxml-sax-writer-perl libxml-libxml-perl libxml-filter-buffertext-perl \
     adduser \
-    libauthen-sasl-perl libnet-ldap-perl libnet-dns-perl \
-    libnet-dns-sec-perl libnet-libidn-perl libnet-ssleay-perl \
-    libnet-telnet-perl libdevel-globaldestruction-perl libipc-signal-perl \
-    librole-tiny-perl libencode-perl libencode-locale-perl \
-    libfile-slurp-perl libcapture-tiny-perl \
+    libalgorithm-diff-perl \
+    libauthen-sasl-perl \
+    libauthen-radius-perl \
+    libcapture-tiny-perl \
+    libcgi-perl \
+    libdbd-sqlite-perl \
+    libclass-method-modifiers-perl \
+    libdigest-hmac-perl \
+    libdigest-sha1-perl \
+    libconfig-autoconf-perl \
+    libcrypt-openssl-guess-perl \
+    libcrypt-openssl-random-perl \
+    libcrypt-openssl-rsa-perl \
+    libhtml-parser-perl \
+    libhtml-tree-perl \
+    libhtml-tagset-perl \
+    libimport-into-perl \
+    libio-socket-ssl-perl \
+    libio-stringy-perl \
+    libipc-signal-perl \
+    libcurses-perl \
+    libmime-charset-perl \
+    libmime-types-perl \
+    libmodule-pluggable-perl \
+    libmodule-runtime-perl \
+    libmodule-build-tiny-perl \
+    libdata-hexdump-perl \
+    libnet-dns-perl \
+    libnet-libidn-perl \
+    libnet-dns-sec-perl \
+    libnet-ldap-perl \
+    libnet-ssleay-perl \
+    libnet-telnet-perl \
+    libproc-waitstat-perl \
+    libdevel-globaldestruction-perl \
+    libenv-perl \
+    libfile-slurp-perl \
+    libfile-slurper-perl \
+    libtext-iconv-perl \
+    libtext-diff-perl \
+    libtext-charwidth-perl \
+    libtext-wrapi18n-perl \
+    libxml-libxml-perl \
+    libxml-filter-buffertext-perl \
+    libxml-sax-writer-perl \
+    libextutils-config-perl \
+    libextutils-cppguess-perl \
+    libextutils-helpers-perl \
+    libextutils-installpaths-perl \
+    libextutils-parsexs-perl \
+    liblocale-gettext-perl \
+    libmoo-perl \
+    librole-tiny-perl \
+    libunix-statgrab \
+    libstrictures-perl \
+    libsub-exporter-progressive-perl \
+    libsub-uplevel-perl \
+    libterm-readkey-perl \
+    libtest-deep-perl \
+    libtest-harness-perl \
+    libtest-nowarnings-perl \
+    libtest-warn-perl \
+    libtest-warnings-perl \
+    libunicode-linebreak-perl \
     po4a \
-    libstrictures-perl libtest-harness-perl libsub-exporter-progressive-perl \
-    libclass-method-modifiers-perl libhtml-parser-perl libhtml-tree-perl \
-    libmodule-pluggable-perl libmodule-build-perl libmodule-runtime-perl \
-    libmodule-build-tiny-perl libcgi-perl libalgorithm-diff-perl \
-    libdbd-sqlite-perl libdigest-sha1-perl libdigest-hmac-perl \
-    " 
+"
 
 RDEPENDS_packagegroup-meta-perl-extended = "\
-    logcheck mime-construct \
-    "
+    logcheck \
+    mime-construct \
+"
 
-RDEPENDS_packagegroup-meta-perl-ptest = "\
+RDEPENDS_packagegroup-meta-perl-ptest-packages = "\
     libmime-types-perl-ptest \
     libio-socket-ssl-perl-ptest \
     libdata-hexdump-perl-ptest \
@@ -47,6 +94,9 @@
     libtest-harness-perl-ptest \
     libdigest-sha1-perl-ptest \
     libdigest-hmac-perl-ptest \
-    "
+"
 
 EXCLUDE_FROM_WORLD = "1"
+
+# perl-module-encode is preferred over libencode-perl
+# libencode-locale-perl depends on libencode-perl
diff --git a/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb b/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb
index 5db5b8f..1b3aca5 100644
--- a/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb
@@ -6,7 +6,7 @@
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=a96fc9b4cc36d80659e694ea109f0325"
 
-SRC_URI = "git://alioth.debian.org/anonscm/git/po4a/po4a.git;protocol=https"
+SRC_URI = "git://github.com/mquinson/po4a.git;protocol=https"
 
 # v0.49
 SRCREV = "79ed87a577a543538fe39c7b60079981f5997072"
diff --git a/meta-openembedded/meta-python/licenses/WTFPL b/meta-openembedded/meta-python/licenses/WTFPL
new file mode 100644
index 0000000..5a8e332
--- /dev/null
+++ b/meta-openembedded/meta-python/licenses/WTFPL
@@ -0,0 +1,14 @@
+            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+                    Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. You just DO WHAT THE FUCK YOU WANT TO.
+
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc b/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc
deleted file mode 100644
index 11971dc..0000000
--- a/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-SUMMARY = "A simple connection pool for gevent"
-DESCRIPTION = "creates a pool of connections that can be used with gevent"
-HOMEPAGE = "https://github.com/studio-ousia/gsocketpool"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=4ba825394aec026b5f94edca44426859"
-DEPENDS += "${PYTHON_PN}-gevent"
-RDEPENDS_${PN} += "${PYTHON_PN}-gevent"
-
-SRC_URI[md5sum] = "49f5f292ef1b60944ae92ca426a5e550"
-SRC_URI[sha256sum] = "f2e2749aceadce6b27ca52e2b0a64af99797746a8681e1a2963f72007c14cb14"
-
-inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb b/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb
index 883621e..d3e7d48 100644
--- a/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb
@@ -1,2 +1,12 @@
-require python-gsocketpool.inc
-inherit setuptools3
+SUMMARY = "A simple connection pool for gevent"
+DESCRIPTION = "creates a pool of connections that can be used with gevent"
+HOMEPAGE = "https://github.com/studio-ousia/gsocketpool"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ba825394aec026b5f94edca44426859"
+DEPENDS += "${PYTHON_PN}-gevent"
+RDEPENDS_${PN} += "${PYTHON_PN}-gevent"
+
+SRC_URI[md5sum] = "49f5f292ef1b60944ae92ca426a5e550"
+SRC_URI[sha256sum] = "f2e2749aceadce6b27ca52e2b0a64af99797746a8681e1a2963f72007c14cb14"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python-hpack.inc b/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python-hpack.inc
deleted file mode 100644
index eccfa8c..0000000
--- a/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python-hpack.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-DESCRIPTION = "Pure-Python HPACK header compression"
-HOMEPAGE = "https://github.com/python-hyper/hpack"
-LICENSE = "MIT"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5bf1c68e73fbaec2b1687b7e71514393"
-
-SRC_URI[md5sum] = "556b0ae66180f54c2ce8029a0952088b"
-SRC_URI[sha256sum] = "8eec9c1f4bfae3408a3f30500261f7e6a65912dc138526ea054f9ad98892e9d2"
-
-inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python3-hpack_3.0.0.bb b/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python3-hpack_3.0.0.bb
deleted file mode 100644
index e196c55..0000000
--- a/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python3-hpack_3.0.0.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require python-hpack.inc
-
-inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python3-hpack_4.0.0.bb b/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python3-hpack_4.0.0.bb
new file mode 100644
index 0000000..afba98e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-hpack/python3-hpack_4.0.0.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Pure-Python HPACK header compression"
+HOMEPAGE = "https://github.com/python-hyper/hpack"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5bf1c68e73fbaec2b1687b7e71514393"
+
+SRC_URI[md5sum] = "27e01514ef06dc9fa0798d3dcb7de47c"
+SRC_URI[sha256sum] = "fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python-hyperframe.inc b/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python-hyperframe.inc
deleted file mode 100644
index 0066bf8..0000000
--- a/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python-hyperframe.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-DESCRIPTION = "HTTP/2 framing layer for Python"
-HOMEPAGE = "https://github.com/python-hyper/hyperframe"
-LICENSE = "MIT"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5bf1c68e73fbaec2b1687b7e71514393"
-
-SRC_URI[md5sum] = "6919183242feb26d8bce3b4cba81defd"
-SRC_URI[sha256sum] = "a9f5c17f2cc3c719b917c4f33ed1c61bd1f8dfac4b1bd23b7c80b3400971b41f"
-
-inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python3-hyperframe_5.2.0.bb b/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python3-hyperframe_5.2.0.bb
deleted file mode 100644
index f10fb6d..0000000
--- a/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python3-hyperframe_5.2.0.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require python-hyperframe.inc
-
-inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python3-hyperframe_6.0.0.bb b/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python3-hyperframe_6.0.0.bb
new file mode 100644
index 0000000..4a936b4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-hyperframe/python3-hyperframe_6.0.0.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "HTTP/2 framing layer for Python"
+HOMEPAGE = "https://github.com/python-hyper/hyperframe"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5bf1c68e73fbaec2b1687b7e71514393"
+
+SRC_URI[md5sum] = "30136a712e092b1a45ae3cad3ae93131"
+SRC_URI[sha256sum] = "742d2a4bc3152a340a49d59f32e33ec420aa8e7054c1444ef5c7efff255842f1"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc b/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc
deleted file mode 100644
index e9eebe8..0000000
--- a/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "A gevent based messagpack rpc library"
-DESCRIPTION = "mprpc is a fast implementation of the messagepack rpc protocol for python. \
-It is based on gevent for handling connections and enabling concurrent connections."
-HOMEPAGE = "https://github.com/studio-ousia/mprpc"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=4ba825394aec026b5f94edca44426859"
-DEPENDS += "${PYTHON_PN}-gevent"
-RDEPENDS_${PN} += "${PYTHON_PN}-gevent ${PYTHON_PN}-msgpack ${PYTHON_PN}-gsocketpool"
-
-SRC_URI[md5sum] = "8d97961051422f3de315613434982d3b"
-SRC_URI[sha256sum] = "3589fd127482e291b1ec314d6f0e55cc13311c12932ace356d6178ea1ca28f6a"
-
-inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.17.bb b/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.17.bb
index 837d604..14eef96 100644
--- a/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.17.bb
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.17.bb
@@ -1,2 +1,13 @@
-require python-mprpc.inc
-inherit setuptools3
+SUMMARY = "A gevent based messagpack rpc library"
+DESCRIPTION = "mprpc is a fast implementation of the messagepack rpc protocol for python. \
+It is based on gevent for handling connections and enabling concurrent connections."
+HOMEPAGE = "https://github.com/studio-ousia/mprpc"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ba825394aec026b5f94edca44426859"
+DEPENDS += "${PYTHON_PN}-gevent"
+RDEPENDS_${PN} += "${PYTHON_PN}-gevent ${PYTHON_PN}-msgpack ${PYTHON_PN}-gsocketpool"
+
+SRC_URI[md5sum] = "8d97961051422f3de315613434982d3b"
+SRC_URI[sha256sum] = "3589fd127482e291b1ec314d6f0e55cc13311c12932ace356d6178ea1ca28f6a"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-priority/python-priority.inc b/meta-openembedded/meta-python/recipes-connectivity/python-priority/python-priority.inc
deleted file mode 100644
index aa93819..0000000
--- a/meta-openembedded/meta-python/recipes-connectivity/python-priority/python-priority.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-DESCRIPTION = "A pure-Python implementation of the HTTP/2 priority tree"
-HOMEPAGE = "https://github.com/python-hyper/priority"
-LICENSE = "MIT"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae57d8a09fc8b6b164d7357339619045"
-
-SRC_URI[md5sum] = "4f1ff52f7fa448e9d9cb46337ae86d1e"
-SRC_URI[sha256sum] = "6bc1961a6d7fcacbfc337769f1a382c8e746566aaa365e78047abe9f66b2ffbe"
-
-inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-priority/python3-priority_1.3.0.bb b/meta-openembedded/meta-python/recipes-connectivity/python-priority/python3-priority_1.3.0.bb
index fe756b5..5d84571 100644
--- a/meta-openembedded/meta-python/recipes-connectivity/python-priority/python3-priority_1.3.0.bb
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-priority/python3-priority_1.3.0.bb
@@ -1,3 +1,10 @@
-require python-priority.inc
+DESCRIPTION = "A pure-Python implementation of the HTTP/2 priority tree"
+HOMEPAGE = "https://github.com/python-hyper/priority"
+LICENSE = "MIT"
 
-inherit setuptools3
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae57d8a09fc8b6b164d7357339619045"
+
+SRC_URI[md5sum] = "4f1ff52f7fa448e9d9cb46337ae86d1e"
+SRC_URI[sha256sum] = "6bc1961a6d7fcacbfc337769f1a382c8e746566aaa365e78047abe9f66b2ffbe"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-core/images/meta-python-image.bb b/meta-openembedded/meta-python/recipes-core/images/meta-python-image.bb
index cc75fe6..6353d38 100644
--- a/meta-openembedded/meta-python/recipes-core/images/meta-python-image.bb
+++ b/meta-openembedded/meta-python/recipes-core/images/meta-python-image.bb
@@ -2,5 +2,4 @@
 
 SUMMARY = "meta-python build test image"
 
-IMAGE_INSTALL += "packagegroup-meta-python \
-                  packagegroup-meta-python3"
+IMAGE_INSTALL += "packagegroup-meta-python3"
diff --git a/meta-openembedded/meta-python/recipes-core/images/meta-python-ptest-image.bb b/meta-openembedded/meta-python/recipes-core/images/meta-python-ptest-image.bb
index 7ee1535..d497016 100644
--- a/meta-openembedded/meta-python/recipes-core/images/meta-python-ptest-image.bb
+++ b/meta-openembedded/meta-python/recipes-core/images/meta-python-ptest-image.bb
@@ -2,4 +2,4 @@
 
 SUMMARY = "meta-python ptest test image"
 
-IMAGE_INSTALL += "packagegroup-meta-python-ptest"
+IMAGE_INSTALL += "packagegroup-meta-python3-ptest"
diff --git a/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb b/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb
index c03f610..61623ac 100644
--- a/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb
+++ b/meta-openembedded/meta-python/recipes-core/packagegroups/packagegroup-meta-python.bb
@@ -1,4 +1,4 @@
-SUMMARY = "Meta-oe ptest packagegroups"
+SUMMARY = "Meta-python ptest packagegroups"
 
 inherit packagegroup
 
@@ -13,62 +13,447 @@
 "
 
 RDEPENDS_packagegroup-meta-python3 = "\
-    python3-pyserial python3-gevent python3-alembic python3-robotframework-seriallibrary \
-    python3-rfc3987 python3-xlrd python3-bandit python3-constantly python3-inflection \
-    python3-javaobj-py3 python3-sh python3-pycrypto python3-pyasn1 python3-pydbus python3-wtforms \
-    python3-pybluez python3-babel python3-parse-type python3-bitarray python3-django-south \
-    python3-pyusb python3-prctl python3-jinja2 python3-werkzeug python3-pyjks python3-requests-ftp \
-    python3-behave python3-pyyaml python3-tzlocal python3-pretend python3-stevedore \
-    python3-sijax python3-langtable python3-requests-file python3-crcmod python3-robotframework \
-    python3-pint python3-coverage python3-iso8601 python3-ndg-httpsclient python3-yappi python3-twofish \
-    python3-speaklater python3-smbus python3-djangorestframework python3-msgpack python3-jsonpointer \
-    python3-flask-script python3-cassandra-driver python3-ujson python3-aws-iot-device-sdk-python \
-    python3-pytest-runner python3-pyiface python3-flask-login python3-markupsafe python3-setuptools-scm \
-    python3-semver python3-sdnotify python3-flask-user python3-tornado python3-jsonpatch python3-pexpect \
-    python3-progress python3-jsonschema python3-xstatic python3-pyroute2 python3-idna python3-sqlalchemy \
-    python3-urllib3 python3-flask-mail python3-asn1crypto python3-pyinotify python3-intervals python3-pyperclip \
-    python3-flask-bootstrap python3-pyudev python3-decorator python3-pybind11 python3-pluggy python3-redis \
-    python3-pycryptodome python3-passlib python3-dominate python3-ply python3-ntplib python3-serpent python3-wrapt \
-    python3-attrs python3-appdirs python3-isort python3-evdev python3-incremental python3-click python3-flask-nav \
-    python3-webcolors python3-dateutil python3-blinker python3-hyperlink python3-lxml python3-pylint \
-    python3-flask-migrate python3-pytest-tempdir python3-flask-restful python3-feedformatter \
-    python3-pyasn1-modules python3-scapy python3-html5lib python3-dnspython python3-automat \
-    python3-itsdangerous python3-pandas python3-pyfirmata python3-protobuf  \
-    python3-flask-babel python3-anyjson python3-flask-xstatic python3-multidict python3-prompt-toolkit \
-    python3-periphery python3-greenlet python3-pytz python3-pyexpect python3-zopeinterface \
-    python3-bcrypt python3-xstatic-font-awesome python3-m2crypto python3-parse python3-attr \
-    python3-beautifulsoup4 python3-pycodestyle python3-oauthlib python3-grpcio python3-scrypt \
-    python3-pyjwt python3-astroid python3-flask-pymongo python3-wcwidth python3-lazy-object-proxy \
-    python3-websockets python3-pyzmq python3-pytest python3-chardet python3-vcversioner python3-whoosh \
-    python3-pymisp python3-certifi python3-psutil python3-flask-sqlalchemy python3-humanize \
-    python3-grpcio-tools python3-configparser python3-strict-rfc3339 python3-paho-mqtt \
-    python3-pytest-helpers-namespace python3-flask python3-flask-wtf python3-visitor python3-pynetlinux \
-    python3-requests python3-cryptography-vectors python3-spidev python3-pid python3-pymongo \
-    python3-future python3-django python3-unidiff python3-webencodings python3-can python3-pyalsaaudio \
-    python3-flask-sijax python3-cryptography python3-twisted python3-netaddr python3-pycparser \
-    python3-flask-uploads python3-pysocks python3-cffi python3-editor python3-ptyprocess \
-    python3-pyopenssl python3-ordered-set python3-simplejson python3-py \
+    pamela \
+    pyrtm \
     ${@bb.utils.contains("DISTRO_FEATURES", "systemd", "python3-systemd", "", d)} \
+    python3-bcrypt \
+    python3-flask-mail \
+    python3-editor \
+    python3-flask-pymongo \
+    python3-cffi \
+    python3-pillow \
+    python3-markupsafe \
+    python3-flask-nav \
+    python3-asciitree \
+    python3-flask-sqlalchemy \
+    python3-gevent \
+    python3-attrs \
+    python3-aenum \
+    python3-gast \
+    python3-blinker \
+    python3-prettytable \
+    python3-cmd2 \
+    python3-aiofiles \
+    python3-anyjson \
+    python3-isodate \
+    python3-incremental \
+    python3-aiohttp-jinja2 \
+    python3-aiohttp \
+    python3-alembic \
+    python3-ansi2html \
+    python3-ansicolors \
+    python3-argexec \
+    python3-appdirs \
+    python3-apply-defaults \
+    python3-argh \
+    python3-ply \
+    python3-astroid \
+    python3-ndg-httpsclient \
+    python3-arpeggio \
+    python3-astor \
+    python3-pika \
+    python3-asn1crypto \
+    python3-async-timeout \
+    python3-absl \
+    python3-atomicwrites \
+    python3-attr \
+    python3-flask \
+    python3-autobahn \
+    python3-babel \
+    python3-pretend \
+    python3-automat \
+    python3-ptyprocess \
+    python3-aws-iot-device-sdk-python \
+    python3-bandit \
+    python3-backcall \
+    python3-backports-functools-lru-cache \
+    python3-beautifulsoup4 \
+    python3-betamax \
+    python3-behave \
+    python3-jsonpointer \
+    python3-bitarray \
+    python3-bitstring \
+    python3-bitstruct \
+    python3-cachecontrol \
+    python3-booleanpy \
+    python3-cachetools \
+    python3-can \
+    python3-cantools \
+    python3-cassandra-driver \
+    python3-cbor2 \
+    python3-chardet \
+    python3-certifi \
+    python3-isort \
+    python3-colorama \
+    python3-cheetah \
+    python3-click \
+    python3-huey \
+    python3-coloredlogs \
+    python3-colorlog \
+    python3-wheel \
+    python3-configshell-fb \
+    python3-constantly \
+    python3-contextlib2 \
+    python3-configargparse \
+    python3-crcmod \
+    python3-configobj \
+    python3-configparser \
+    python3-cppy \
+    python3-dbussy \
+    python3-dateutil \
+    python3-distro \
+    python3-click-repl \
+    python3-redis \
+    python3-dominate \
+    python3-et-xmlfile \
+    python3-feedformatter \
+    python3-flask-jsonpify \
+    python3-flask-jwt \
+    python3-flask-migrate \
+    python3-pyinotify \
+    python3-flask-restful \
+    python3-flask-socketio \
+    python3-gmqtt \
+    python3-dateparser \
+    python3-defusedxml \
+    python3-rsa \
+    python3-django-south \
+    python3-grpcio \
+    python3-pybind11-json \
+    python3-google-api-python-client \
+    python3-h5py \
+    python3-dt-schema \
+    python3-haversine \
+    python3-fasteners \
+    python3-flask-bootstrap \
+    python3-dbus-next \
+    python3-dnspython \
+    python3-traitlets \
+    python3-pybind11 \
+    python3-flask-script \
+    python3-flask-sijax \
+    python3-html2text \
+    python3-html5lib \
+    python3-intervals \
+    python3-ipy \
+    python3-ipaddress \
+    python3-iso8601 \
+    python3-humanfriendly \
+    python3-lrparsing \
+    python3-itsdangerous \
+    python3-hyperlink \
+    python3-idna-ssl \
+    python3-jdcal \
+    python3-greenstalk \
+    python3-icu \
+    python3-jsonschema \
+    python3-keras-applications \
+    python3-idna \
+    python3-sympy \
+    python3-importlib-metadata \
+    python3-langtable \
+    python3-lockfile \
+    python3-nmap \
+    python3-jdatetime \
+    python3-monotonic \
+    python3-mpmath \
+    python3-jedi \
+    python3-jsonpatch \
+    python3-jsonrpcserver \
+    python3-libconf \
+    python3-netifaces \
+    python3-msm \
+    python3-nocaselist \
+    python3-keras-preprocessing \
+    python3-flask-babel \
+    python3-lorem \
+    python3-javaobj-py3 \
+    python3-passlib \
+    python3-pathlib2 \
+    python3-pexpect \
+    python3-luma-oled \
+    python3-pluggy \
+    python3-lxml \
+    python3-precise-runner \
+    python3-padaos \
+    python3-progress \
+    python3-sqlalchemy \
+    python3-sh \
+    python3-petact \
+    python3-mock \
+    python3-msgpack \
+    python3-pyasn1 \
+    python3-msk \
+    python3-openpyxl \
+    python3-prctl \
+    python3-pyatspi \
+    python3-multidict \
+    python3-netaddr \
+    python3-parse \
+    python3-oauthlib \
+    python3-pyfirmata \
+    python3-pandas \
+    python3-padatious \
+    python3-prompt-toolkit \
+    python3-parse-type \
+    python3-cycler \
+    python3-decorator \
+    python3-django \
+    python3-croniter \
+    python3-flask-user \
+    python3-twitter \
+    python3-evdev \
+    python3-dynamic-dispatch \
+    python3-click-spinner \
+    python3-future \
+    python3-geojson \
+    python3-gunicorn \
+    python3-engineio \
+    python3-gmpy2 \
+    python3-coverage \
+    python3-fastnumbers \
+    python3-fann2 \
+    python3-gnupg \
+    python3-flask-login \
+    python3-pyzmq \
+    python3-cryptography-vectors \
+    python3-flask-uploads \
+    python3-ecdsa \
+    python3-networkx \
+    python3-flask-xstatic \
+    python3-pint \
+    python3-iso3166 \
+    python3-imageio \
+    python3-mccabe \
+    python3-kconfiglib \
+    python3-grpcio-tools \
+    python3-jinja2 \
+    python3-jsmin \
+    python3-greenlet \
+    python3-idna \
+    python3-flask-versioned \
+    python3-httplib2 \
+    python3-ipython-genutils \
+    python3-kiwisolver \
+    python3-lz4 \
+    python3-obd \
+    python3-markdown \
+    python3-m2crypto \
+    python3-paho-mqtt \
+    python3-graphviz \
+    python3-pyaudio \
+    python3-pako \
+    python3-meld3 \
+    python3-parallax \
+    python3-lazy-object-proxy \
+    python3-license-expression \
+    python3-luma-core \
+    python3-natsort \
+    python3-polyline \
+    python3-ordered-set \
+    python3-packaging \
+    python3-parso \
+    python3-pycparser \
+    python3-pycrypto \
+    python3-pydbus \
+    python3-pathtools3 \
+    python3-periphery \
+    python3-pyiface \
+    python3-pyjwt \
+    python3-pykwalify \
+    python3-pylint \
+    python3-pynetlinux \
+    python3-pickleshare \
+    python3-pyopenssl \
+    python3-protobuf \
+    python3-py \
+    python3-pyasn1-modules \
+    python3-pyscaffold \
+    python3-pyserial \
+    python3-pysocks \
+    python3-pytoml \
+    python3-pytest-helpers-namespace \
+    python3-more-itertools \
+    python3-pytest-tempdir \
+    python3-pyflakes \
+    python3-pyrad \
+    python3-pyusb \
+    python3-pyhamcrest \
+    python3-custom-inherit \
+    python3-pymysql \
+    python3-pyperclip \
+    python3-rfc3339-validator \
+    python3-pytz \
+    python3-scrypt \
+    python3-rdflib \
+    python3-sijax \
+    python3-regex \
+    python3-slip-dbus \
+    python3-smbus2 \
+    python3-pytest-metadata \
+    python3-term \
+    python3-pystache \
+    python3-pep8 \
+    python3-pytest-runner \
+    python3-pybluez \
+    python3-rfc3986-validator \
+    python3-pocketsphinx \
+    python3-sdnotify \
+    python3-pycodestyle \
+    python3-pytest \
+    python3-speaklater \
+    python3-wtforms \
+    python3-speedtest-cli \
+    python3-pyudev \
+    python3-sqlparse \
+    python3-pyexpect \
+    python3-pytest-html \
+    python3-uritemplate \
+    python3-cryptography \
+    python3-requests \
+    python3-test-generator \
+    python3-whoosh \
+    python3-xstatic-font-awesome \
+    python3-tqdm \
+    python3-vcversioner \
+    python3-semver \
+    python3-serpent \
+    python3-spidev \
+    python3-sqlsoup \
+    python3-tornado \
+    python3-trafaret \
+    python3-urllib3 \
+    python3-yappi \
+    python3-zipp \
+    python3-texttable \
+    python3-humanize \
+    python3-strict-rfc3339 \
+    python3-supervisor \
+    python3-toml \
+    python3-diskcache \
+    python3-requests-futures \
+    python3-matplotlib \
+    python3-sentry-sdk \
+    python3-xlrd \
+    python3-xstatic \
+    python3-tzlocal \
+    python3-wcwidth \
+    python3-ntplib \
+    python3-u-msgpack-python \
+    python3-python-vlc \
+    python3-xlsxwriter \
+    python3-inflection \
+    python3-tabulate \
+    python3-typing-extensions \
+    python3-pystemd \
+    python3-pid \
+    python3-pkgconfig \
+    python3-pylyrics \
+    python3-pyyaml \
+    python3-raven \
+    python3-stevedore \
+    python3-requests-oauthlib \
+    python3-rfc3987 \
+    python3-psutil \
+    python3-robotframework-seriallibrary \
+    python3-pulsectl \
+    python3-py-ubjson \
+    python3-pyalsaaudio \
+    python3-simpleeval \
+    python3-smbus \
+    python3-pychromecast \
+    python3-pyjks \
+    python3-pymongo \
+    python3-spidev \
+    python3-pynacl \
+    python3-termcolor \
+    python3-pyperf \
+    python3-qrcode \
+    python3-visitor \
+    python3-pyroute2 \
+    python3-webencodings \
+    python3-pyrsistent \
+    python3-werkzeug \
+    python3-pydicti \
+    python3-xmlrunner \
+    python3-smpplib \
+    python3-pymisp \
+    python3-requests-file \
+    python3-requests-toolbelt \
+    python3-ruamel-yaml \
+    python3-setuptools-scm \
+    python3-socketio \
+    python3-soupsieve \
+    python3-textparser \
+    python3-tinyrecord \
+    python3-twine \
+    python3-unidiff \
+    python3-watchdog \
+    python3-webcolors \
+    python3-robotframework \
+    python3-xxhash \
+    python3-yarl \
+    python3-zopeinterface \
+    python3-requests-ftp \
+    python3-scapy \
+    python3-paramiko \
+    python3-twofish \
+    python3-simplejson \
+    python3-snappy \
+    python3-versiontools \
+    python3-flask-wtf \
+    python3-websockets \
+    python3-werkzeug \
+    python3-wrapt \
+    python3-xmltodict \
+    python3-trafaret-config \
+    python3-twisted \
+    python3-txaio \
+    python3-typeguard \
+    python3-pytest-timeout \
+    python3-ujson \
+    python3-waitress \
+    python3-websocket-client \
+    python3-xmodem \
+    python3-djangorestframework \
+    python3-pytest-asyncio \
+    python3-nocasedict \
+    python3-yamlloader \
+    python3-ipython \
+    python3-pycurl \
+    gyp \
+    python3-jsonref \
 "
 
 RDEPENDS_packagegroup-meta-python3-extended = "\
-    python3-pykickstart \
-    python3-meh \
     python3-blivet \
-    python3-pywbem \
-    python3-pyparted \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "python3-blivetgui", "", d)} \
+    python3-cson \
+    python3-meh \
+    python3-pyephem \
+    python3-pykickstart \
+    python3-pyparted \
+    python3-pywbem \
+    python3-pywbemtools \
 "
 
 RDEPENDS_packagegroup-meta-python3-connectivity = "\
-    python3-pytun \
-    python3-mprpc \
-    python3-pyconnman \
     python3-gsocketpool \
+    python3-h2 \
+    python3-hpack \
+    python3-hyperframe \
+    python3-mprpc \
+    python3-priority \
+    python3-pyconnman \
+    python3-pyro4 \
+    python3-thrift \
+    python3-txws \
+    python3-pytun \
+    telepathy-python3 \
 "
 
 RDEPENDS_packagegroup-meta-python3-ptest = "\
-    python3-cryptography \
+    python3-cryptography-ptest \
     "
 
 EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-openembedded/meta-python/recipes-devtools/gyp/gyp.inc b/meta-openembedded/meta-python/recipes-devtools/gyp/gyp.inc
deleted file mode 100644
index 98ed42c..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/gyp/gyp.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "GYP is a Meta-Build system: a build system that generates other build systems."
-HOMEPAGE = "https://gyp.gsrc.io/"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ab828cb8ce4c62ee82945a11247b6bbd"
-SECTION = "devel"
-
-SRC_URI = "git://chromium.googlesource.com/external/gyp;protocol=https"
-SRCREV = "fcd686f1880fa52a1ee78d3e98af1b88cb334528"
-
-S = "${WORKDIR}/git"
-PV = "0.1+git${SRCPV}"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/gyp/gyp_git.bb b/meta-openembedded/meta-python/recipes-devtools/gyp/gyp_git.bb
index 8e48a27..d668d1c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/gyp/gyp_git.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/gyp/gyp_git.bb
@@ -1,2 +1,15 @@
+DESCRIPTION = "GYP is a Meta-Build system: a build system that generates other build systems."
+HOMEPAGE = "https://gyp.gsrc.io/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ab828cb8ce4c62ee82945a11247b6bbd"
+SECTION = "devel"
+
+SRC_URI = "git://chromium.googlesource.com/external/gyp;protocol=https"
+SRCREV = "caa60026e223fc501e8b337fd5086ece4028b1c6"
+
+S = "${WORKDIR}/git"
+PV = "0.1+git${SRCPV}"
+
 inherit setuptools3
-require gyp.inc
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-fann2.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-fann2.inc
deleted file mode 100644
index c415b35..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-fann2.inc
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY = "Python bindings for Fast Artificial Neural Networks 2.2.0 (FANN >= 2.2.0)"
-SECTION = "devel/python"
-LICENSE = "LGPLv2"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=c73b943dc75f6f65e007c56ac6515c8f"
-
-SRC_URI[md5sum] = "0b85b418018746d63ed66b55465697a9"
-SRC_URI[sha256sum] = "cdca0a65ad48e08320672affe38c3dd4ea15e27821e5e1db9fa2b34299bdd41e"
-
-DEPENDS += "swig-native libfann"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc
deleted file mode 100644
index 0df276d..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-SUMMARY = "Flask extension for sending email"
-DESCRIPTION = "A Flask extension for sending email"
-HOMEPAGE = " https://github.com/rduplain/flask-email"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5b16dfa6d3f275ace5985bb92949f770"
-
-SRC_URI[md5sum] = "04b35a42a44ec7aa724ec8ce55e2e08e"
-SRC_URI[sha256sum] = "22e5eb9a940bf407bcf30410ecc3708f3c56cc44b29c34e1726fe85006935f41"
-
-PYPI_PACKAGE = "Flask-Mail"
-
-RDEPENDS_${PN} = "${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc
deleted file mode 100644
index 932ccdf..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Easily create navigation for Flask applications."
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://PKG-INFO;md5=2729ee82259d601d90d28b0574d12416"
-
-SRC_URI[md5sum] = "4d51cfd06d58f8d0fe85775a6696c0e5"
-SRC_URI[sha256sum] = "44e40b755380a1e68ab521a2f9174de259a2c94ddcdaabf36b3aca2e110a33f4"
-
-PYPI_PACKAGE = "flask-nav"
-
-RDEPENDS_${PN} += "\
-    ${PYTHON_PN}-blinker \
-    ${PYTHON_PN}-flask \
-    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc
deleted file mode 100644
index 5fc35c1..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-SUMMARY = "PyMongo support for Flask applications"
-DESCRIPTION = "PyMongo support for Flask applications."
-HOMEPAGE = "https://github.com/mitsuhiko/flask/"
-SECTION = "devel/python"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://flask_pymongo/wrappers.py;beginline=1;endline=24;md5=424c4e1047d28e01b4e4634a069c019d"
-
-SRC_URI[md5sum] = "94df71e6800b1d7915cc91a74b70f959"
-SRC_URI[sha256sum] = "620eb02dc8808a5fcb90f26cab6cba9d6bf497b15032ae3ca99df80366e33314"
-
-PYPI_PACKAGE = "Flask-PyMongo"
-
-DEPENDS = "${PYTHON_PN}-vcversioner ${PYTHON_PN}-vcversioner-native"
-
-RDEPENDS_${PN} = "${PYTHON_PN}-pymongo ${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc
deleted file mode 100644
index adef32c..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Customizable user account management for Flask"
-DESCRIPTION = "Customizable User Account Management for Flask; Register \
-Confirm email, Login, Change username, Change password, Forgot Password \
-and more."
-HOMEPAGE = " https://github.com/lingthio/Flask-User"
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=97de97cd9d6e23c88129d884588ce71a"
-
-SRC_URI[md5sum] = "f7965e66ca139c8436896da07e66c21f"
-SRC_URI[sha256sum] = "601abcc0343dfbae0c56273d98362d5cdc266ac84d20b3f65a212e4a2c83b302"
-
-PYPI_PACKAGE = "Flask-User"
-
-RDEPENDS_${PN} = "${PYTHON_PN}-flask \
-    ${PYTHON_PN}-flask-login \
-    ${PYTHON_PN}-flask-mail \
-    ${PYTHON_PN}-babel"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/0002-setup.py-do-not-query-for-include-dir.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/0002-setup.py-do-not-query-for-include-dir.patch
deleted file mode 100644
index 7536b71..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/0002-setup.py-do-not-query-for-include-dir.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From a53ed6b2f967a5f95e69d51cad3f8c120d7df65b Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Thu, 7 Feb 2019 15:21:15 +0100
-Subject: [PATCH] setup.py: do not query for include dir
-
-As this will return the native python directory erroneously.
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
----
- setup.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/setup.py b/setup.py
-index 86d6c5a..5d22291 100755
---- a/setup.py
-+++ b/setup.py
-@@ -52,7 +52,7 @@ from _setupares import ARES
- # Get access to the greenlet header file.
- # The sysconfig dir is not enough if we're in a virtualenv
- # See https://github.com/pypa/pip/issues/4610
--include_dirs = [sysconfig.get_path("include")]
-+include_dirs = []
- venv_include_dir = os.path.join(sys.prefix, 'include', 'site',
-                                 'python' + sysconfig.get_python_version())
- venv_include_dir = os.path.abspath(venv_include_dir)
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc
deleted file mode 100644
index b14f825..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-SUMMARY = "Python interface for libsystemd"
-HOMEPAGE = "https://github.com/systemd/python-systemd"
-LICENSE = "LGPLv2.1+"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4fbd65380cdd255951079008b364516c"
-
-PYPI_PACKAGE = "systemd-python"
-DEPENDS += "systemd (<=234)"
-RDEPENDS_${PN} += "systemd ${PYTHON_PN}-syslog ${PYTHON_PN}-logging"
-REQUIRED_DISTRO_FEATURES = "systemd"
-inherit pypi features_check
-
-SRC_URI[md5sum] = "5071ea5bcb976186e92a3f5e75df221d"
-SRC_URI[sha256sum] = "fd0e44bf70eadae45aadc292cb0a7eb5b0b6372cd1b391228047d33895db83e7"
-
-# allow for common patches for python- and python3-systemd
-FILESEXTRAPATHS_prepend := "${THISDIR}/python-systemd:"
-
-SRC_URI += "file://endian.patch"
-
-SRC_URI_append_libc-musl = " file://0001-Provide-implementation-of-strndupa-for-musl.patch"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.10.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.10.0.bb
new file mode 100644
index 0000000..5be00cc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.10.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Abseil Python Common Libraries"
+HOMEPAGE = "https://github.com/abseil/abseil-py"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[md5sum] = "9cb38ddf7a2f000e2c92e5d9dfa36ffa"
+SRC_URI[sha256sum] = "b20f504a7871a580be5268a18fbad48af4203df5d33dbc9272426cb806245a45"
+
+PYPI_PACKAGE = "absl-py"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.9.0.bb
deleted file mode 100644
index a8f47ba..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-absl_0.9.0.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-SUMMARY = "Abseil Python Common Libraries"
-HOMEPAGE = "https://github.com/abseil/abseil-py"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-
-SRC_URI = "git://github.com/abseil/abseil-py.git"
-SRCREV ?= "06edd9c20592cec39178b94240b5e86f32e19768"
-
-inherit setuptools3
-
-S = "${WORKDIR}/git"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.4.3.bb
similarity index 69%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.4.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.4.3.bb
index 2263060..0e7f629 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.4.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.4.3.bb
@@ -4,8 +4,8 @@
 
 inherit pypi setuptools3
 
-SRC_URI[md5sum] = "1d67bdbd3abd33f0319afcd29bc59686"
-SRC_URI[sha256sum] = "035ab00497217628bf5d0be82d664d8713ab13d37b630084da8e1f98facf4dbf"
+SRC_URI[md5sum] = "6051576d8e25e3d4a9fd818d79531bad"
+SRC_URI[sha256sum] = "5334f32314fb2a56d86b4c4dd1ae34b08c03cae4cb888bc699942104d66bc245"
 
 PYPI_PACKAGE = "alembic"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-asciitree_0.3.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-asciitree_0.3.3.bb
new file mode 100644
index 0000000..833732b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-asciitree_0.3.3.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Draws ASCII trees."
+HOMEPAGE = "http://github.com/mbr/asciitree"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a985ccb0df374f2a8cab75010bf8db73"
+
+SRC_URI[md5sum] = "2570b31e563b69da1aff54509db8ac6a"
+SRC_URI[sha256sum] = "4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_19.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_20.2.0.bb
similarity index 74%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_19.3.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_20.2.0.bb
index 7ff8049..c2a5b90 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_19.3.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_20.2.0.bb
@@ -3,8 +3,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=d4ab25949a73fe7d4fdee93bcbdbf8ff"
 
-SRC_URI[sha256sum] = "f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
-SRC_URI[md5sum] = "5b2db50fcc31be34d32798183c9bd062"
+SRC_URI[sha256sum] = "26b54ddbbb9ee1d34d5d3668dd37d6cf74990ab23c828c2888dccdceee395594"
+SRC_URI[md5sum] = "7be95e1b35e9385d71a0017a48217efc"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_1.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_1.5.3.bb
similarity index 68%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_1.5.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_1.5.3.bb
index 1539300..e36a170 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_1.5.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_1.5.3.bb
@@ -3,8 +3,8 @@
 LICENSE = "PSF"
 LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=2ad702cdcd49e8d2ac01d7e7d0810d2d"
 
-SRC_URI[md5sum] = "ccd872c5effef77bf4028c67c0619f6c"
-SRC_URI[sha256sum] = "38fe66d5f7720835703a07fe8d0a4b5eda87f692f3cf4fb01543407b79857edf"
+SRC_URI[md5sum] = "7cfa242b99351646fab0d76b05aab747"
+SRC_URI[sha256sum] = "567631fc922b1c2c528c376795f18dcc0604d18702e0b8b50e8e35f0474214a5"
 
 inherit setuptools3 pypi
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.3.bb
similarity index 75%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.3.bb
index 57c2895..dbdd16f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.14.3.bb
@@ -4,8 +4,8 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=5677e2fdbf7cdda61d6dd2b57df547bf"
 DEPENDS += "libffi ${PYTHON_PN}-pycparser"
 
-SRC_URI[md5sum] = "3cc2f1daf62dd66eda79b4d6281cebfc"
-SRC_URI[sha256sum] = "ae8f34d50af2c2154035984b8b5fc5d9ed63f32fe615646ab435b05b132ca91b"
+SRC_URI[md5sum] = "c2a47ffd5d183b193ac8ed3414dcfd07"
+SRC_URI[sha256sum] = "f92f789e4f9241cd262ad7a555ca2c648a98178a953af117ef7fad46aa1d5591"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-click-repl_0.1.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-click-repl_0.1.6.bb
new file mode 100644
index 0000000..fce9f98
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-click-repl_0.1.6.bb
@@ -0,0 +1,9 @@
+SUMMARY = "REPL plugin for Click"
+HOMEPAGE = "https://github.com/untitaker/click-repl"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fee2943fdd4d8afbac9ccc1c8ac137d5"
+
+SRC_URI[md5sum] = "2d5f4d42cbd1da9a50a49dff4d6087ca"
+SRC_URI[sha256sum] = "b9f29d52abc4d6059f8e276132a111ab8d94980afe6a5432b9d996544afa95d5"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-click-spinner_0.1.10.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-click-spinner_0.1.10.bb
new file mode 100644
index 0000000..418f8a3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-click-spinner_0.1.10.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Spinner for Click"
+HOMEPAGE = "https://github.com/click-contrib/click-spinner"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "ab68ed404401421819c81cc6c0677a87"
+SRC_URI[sha256sum] = "87eacf9d7298973a25d7615ef57d4782aebf913a532bba4b28a37e366e975daf"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_1.3.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_1.3.9.bb
similarity index 75%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_1.3.3.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_1.3.9.bb
index a44f02f..e677a69 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_1.3.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cmd2_1.3.9.bb
@@ -5,8 +5,8 @@
 
 DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
 
-SRC_URI[md5sum] = "c8ffa926c50673f00fd8ff8533e9f959"
-SRC_URI[sha256sum] = "38015008ff4639edfd66591063a0e9bb75a62dccb14ee3ec7bf3a6cb130de5cf"
+SRC_URI[md5sum] = "f5fbd528e7b5977ad71466947af61f99"
+SRC_URI[sha256sum] = "7f8035faafda15d26098bf2ffe16aaba1c78511ce13e0815d2efe58ba392b501"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_5.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_5.3.bb
similarity index 61%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_5.2.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_5.3.bb
index 48e352c..2354c5e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_5.2.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_5.3.bb
@@ -3,8 +3,8 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ee41112a44fe7014dce33e26468ba93"
 
-SRC_URI[md5sum] = "9e6165146b9bda60a779953c79e8ca54"
-SRC_URI[sha256sum] = "a34cb28e0747ea15e82d13e14de606747e9e484fb28d63c999483f5d5188e89b"
+SRC_URI[md5sum] = "c2faf2ccc498ce16fd48cc9201c520d7"
+SRC_URI[sha256sum] = "280baa8ec489c4f542f8940f9c4c2181f0306a8ee1a54eceba071a449fb870a0"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.9.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_3.1.bb
similarity index 73%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.9.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_3.1.bb
index 60316fc..59347c9 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.9.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_3.1.bb
@@ -4,8 +4,8 @@
 LICENSE = "Apache-2.0 | BSD"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4"
 
-SRC_URI[md5sum] = "657349b8de73959fc49ba15fd7346b58"
-SRC_URI[sha256sum] = "99ac91c4d89572399b097240809af1b8f67f4bedf43398d290c9b2b3d9f491b4"
+SRC_URI[md5sum] = "1ba5b0743e2876e909f7cfc28b744f27"
+SRC_URI[sha256sum] = "2660bc3a720d3955341803195ae5352a236c5f26e01a178c44fc5ee1f0ef1182"
 
 PYPI_PACKAGE = "cryptography_vectors"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_3.1.bb
similarity index 90%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_3.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_3.1.bb
index 05a2350..9ac23cd 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_3.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_3.1.bb
@@ -6,8 +6,8 @@
 
 LDSHARED += "-pthread"
 
-SRC_URI[md5sum] = "163608a7cb838c6b39360e1e64377d54"
-SRC_URI[sha256sum] = "8e924dbc025206e97756e8903039662aa58aa9ba357d8e1d8fc29e3092322053"
+SRC_URI[md5sum] = "aa91e4974981b29e99b863c54034c361"
+SRC_URI[sha256sum] = "26409a473cc6278e4c90f782cd5968ebad04d3911ed1c402fc86908c17633e08"
 
 SRC_URI += " \
     file://run-ptest \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-custom-inherit_2.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-custom-inherit_2.3.0.bb
new file mode 100644
index 0000000..489e719
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-custom-inherit_2.3.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "A Python package that provides customized docstring inheritance schemes between derived classes and their parents."
+HOMEPAGE = "https://github.com/rsokl/custom_inherit"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=adc1f231c76ee2f1f36025d56926ba2c"
+
+PYPI_PACKAGE = "custom_inherit"
+PYPI_SRC_URI = "https://files.pythonhosted.org/packages/0e/82/c5bb7ec49a7892a2c583e1017597e3921c59171f10602086ca93c8a83baa/custom_inherit-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "adf2850dc0e488df959821a5d4c16cbd"
+SRC_URI[sha256sum] = "1609d283c2cffce3a58baf7c0c22b655c55f85e1ec39c4717a4423d34610723a"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-next_0.1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-next_0.1.4.bb
similarity index 68%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-next_0.1.3.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-next_0.1.4.bb
index 4da4be8..0a5f199 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-next_0.1.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-next_0.1.4.bb
@@ -3,8 +3,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=94e750c96e56788499b56c81de91431c"
 
-SRC_URI[md5sum] = "a823270b11c8dd7932c12adc6b2fadbb"
-SRC_URI[sha256sum] = "4dd9097778224c69228f7f2a0f52e9b13ec2c75e87974ad312525c927835e8fb"
+SRC_URI[md5sum] = "0d44e12e8689637a0c048ec7bb51d842"
+SRC_URI[sha256sum] = "1b1942bffcc8c9a5bd6834257df227a55ee28e07dd413ead82ddd23115652363"
 
 PYPI_PACKAGE = "dbus_next"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-diskcache_4.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-diskcache_4.1.0.bb
deleted file mode 100644
index 91cff0c..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-diskcache_4.1.0.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "Disk Cache -- Disk and file backed persistent cache."
-HOMEPAGE = "http://www.grantjenks.com/docs/diskcache/"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=9e046ce8fae71087134866418f646ec3"
-
-SRC_URI[md5sum] = "21c9945e7707799e1c64956f8a54d4c3"
-SRC_URI[sha256sum] = "bcee5a59f9c264e2809e58d01be6569a3bbb1e36a1e0fb83f7ef9b2075f95ce0"
-
-PYPI_PACKAGE = "diskcache"
-
-inherit pypi setuptools3
-
-CLEANBROKEN = "1"
-
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-diskcache_5.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-diskcache_5.0.3.bb
new file mode 100644
index 0000000..7e89fa6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-diskcache_5.0.3.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Disk Cache -- Disk and file backed persistent cache."
+HOMEPAGE = "http://www.grantjenks.com/docs/diskcache/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c985b6a9269e57a1073d5f142d68eb68"
+
+SRC_URI[md5sum] = "86fb97b0ff87cc5f1b31654ee0d341a1"
+SRC_URI[sha256sum] = "5f4bc2018d653a1d7bbdcdecce45ea12061bf8d3b5f0323b7a5402054a285c52"
+
+PYPI_PACKAGE = "diskcache"
+
+inherit pypi setuptools3
+
+CLEANBROKEN = "1"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.13.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.13.bb
deleted file mode 100644
index 55eacdf..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.13.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require python-django.inc
-inherit setuptools3
-
-SRC_URI[md5sum] = "30c688af9b63c4800ef9b044e0dd4145"
-SRC_URI[sha256sum] = "84f370f6acedbe1f3c41e1a02de44ac206efda3355e427139ecb785b5f596d80"
-
-RDEPENDS_${PN} += "\
-    ${PYTHON_PN}-sqlparse \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.16.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.16.bb
new file mode 100644
index 0000000..0715abb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_2.2.16.bb
@@ -0,0 +1,9 @@
+require python-django.inc
+inherit setuptools3
+
+SRC_URI[md5sum] = "93faf5bbd54a19ea49f4932a813b9758"
+SRC_URI[sha256sum] = "62cf45e5ee425c52e411c0742e641a6588b7e8af0d2c274a27940931b2786594"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-sqlparse \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_3.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_3.1.1.bb
new file mode 100644
index 0000000..ed6513d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_3.1.1.bb
@@ -0,0 +1,14 @@
+require python-django.inc
+inherit setuptools3
+
+SRC_URI[md5sum] = "d5e894fb3c46064e84e9dc68a08a46d0"
+SRC_URI[sha256sum] = "59c8125ca873ed3bdae9c12b146fbbd6ed8d0f743e4cf5f5817af50c51f1fc2f"
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-sqlparse \
+"
+
+# Set DEFAULT_PREFERENCE so that the LTS version of django is built by
+# default. To build the 3.x branch, 
+# PREFERRED_VERSION_python3-django = "3.1.1" can be added to local.conf
+DEFAULT_PREFERENCE = "-1"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.5.2.bb
similarity index 78%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.5.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.5.2.bb
index 75dd4ef..2044338 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.5.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.5.2.bb
@@ -2,8 +2,8 @@
 LICENSE = "LGPLv3"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b52f2d57d10c4f7ee67a7eb9615d5d24"
 
-SRC_URI[md5sum] = "35eeb6b5587c8c9a51cd22c83e07ac49"
-SRC_URI[sha256sum] = "9b05481605ea8c0afd0a98c0156a9fb78d9c406368d66b3e6fedf36920fb9d78"
+SRC_URI[md5sum] = "4a249c71cb009815923e9a47fa03ca08"
+SRC_URI[sha256sum] = "456facce7a7ccfd9363948109cf1e978d48c58e46a46b01c71b4c0adc73b1928"
 
 inherit pypi setuptools3 ptest
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ecdsa_0.15.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ecdsa_0.16.0.bb
similarity index 69%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-ecdsa_0.15.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-ecdsa_0.16.0.bb
index aba62f3..36bb246 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ecdsa_0.15.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ecdsa_0.16.0.bb
@@ -6,7 +6,8 @@
 DEPENDS += "python3-pip python3-pbr"
 
 PYPI_PACKAGE = "ecdsa"
-SRC_URI[sha256sum] = "8f12ac317f8a1318efa75757ef0a651abe12e51fc1af8838fb91079445227277"
+SRC_URI[md5sum] = "d593df1ab57da611dca76f7328c47b21"
+SRC_URI[sha256sum] = "494c6a853e9ed2e9be33d160b41d47afc50a6629b993d2b9c5ad7bb226add892"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2_1.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2_1.1.2.bb
index a04c961..3fdc136 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2_1.1.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-fann2_1.1.2.bb
@@ -1,4 +1,13 @@
-require python-fann2.inc
-inherit pypi setuptools3
+SUMMARY = "Python bindings for Fast Artificial Neural Networks 2.2.0 (FANN >= 2.2.0)"
+SECTION = "devel/python"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c73b943dc75f6f65e007c56ac6515c8f"
+
+SRC_URI[md5sum] = "0b85b418018746d63ed66b55465697a9"
+SRC_URI[sha256sum] = "cdca0a65ad48e08320672affe38c3dd4ea15e27821e5e1db9fa2b34299bdd41e"
 
 SRC_URI += " file://0001-setup.py-Don-t-hardcode-swig-and-fann2-binary-locati.patch"
+
+inherit pypi setuptools3
+
+DEPENDS += "swig-native libfann"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_1.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_2.0.0.bb
similarity index 70%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_1.0.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_2.0.0.bb
index d968be3..8a01b49 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_1.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_2.0.0.bb
@@ -2,7 +2,8 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=51917f3e8e858f5ae295a7d0e2eb3cc9"
 
-SRC_URI[sha256sum] = "d6a70468f9a8919d59fba2a291a003da3a05ff884275dddbd965f3b98b09ab3e"
+SRC_URI[md5sum] = "50d5e92d96ef58787bf85b5a1b0a5567"
+SRC_URI[sha256sum] = "f9faf45cdb2e1a32ea2ec14403587d4295108f35017a7821a2b1acb8cfd9257d"
 
 PYPI_PACKAGE = "Flask-Babel"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb
index 0b963be..7a89cac 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb
@@ -1,2 +1,14 @@
+SUMMARY = "Flask extension for sending email"
+DESCRIPTION = "A Flask extension for sending email"
+HOMEPAGE = " https://github.com/rduplain/flask-email"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5b16dfa6d3f275ace5985bb92949f770"
+
+SRC_URI[md5sum] = "04b35a42a44ec7aa724ec8ce55e2e08e"
+SRC_URI[sha256sum] = "22e5eb9a940bf407bcf30410ecc3708f3c56cc44b29c34e1726fe85006935f41"
+
+PYPI_PACKAGE = "Flask-Mail"
+
 inherit pypi setuptools3
-require python-flask-mail.inc
+
+RDEPENDS_${PN} = "${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.5.2.bb
deleted file mode 100644
index c98cbfd..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.5.2.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit pypi setuptools3
-require python-flask-migrate.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.5.3.bb
similarity index 65%
rename from meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.5.3.bb
index 5202f8b..54fa1dd 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.5.3.bb
@@ -2,11 +2,13 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85"
 
-SRC_URI[md5sum] = "bedeb0366740fda6912fea683be11968"
-SRC_URI[sha256sum] = "a96ff1875a49a40bd3e8ac04fce73fdb0870b9211e6168608cbafa4eb839d502"
+SRC_URI[md5sum] = "707d4a5fd4e11d3113a1228aa7793176"
+SRC_URI[sha256sum] = "a69d508c2e09d289f6e55a417b3b8c7bfe70e640f53d2d9deb0d056a384f37ee"
 
 PYPI_PACKAGE = "Flask-Migrate"
 
+inherit pypi setuptools3
+
 RDEPENDS_${PN} += "\
     ${PYTHON_PN}-flask-sqlalchemy \
     ${PYTHON_PN}-alembic \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb
index d251152..77735e3 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb
@@ -1,2 +1,15 @@
+DESCRIPTION = "Easily create navigation for Flask applications."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=2729ee82259d601d90d28b0574d12416"
+
+SRC_URI[md5sum] = "4d51cfd06d58f8d0fe85775a6696c0e5"
+SRC_URI[sha256sum] = "44e40b755380a1e68ab521a2f9174de259a2c94ddcdaabf36b3aca2e110a33f4"
+
+PYPI_PACKAGE = "flask-nav"
+
 inherit pypi setuptools3
-require python-flask-nav.inc
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-blinker \
+    ${PYTHON_PN}-flask \
+    "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb
index 2102554..e3c744d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_2.3.0.bb
@@ -1,2 +1,17 @@
+SUMMARY = "PyMongo support for Flask applications"
+DESCRIPTION = "PyMongo support for Flask applications."
+HOMEPAGE = "https://github.com/mitsuhiko/flask/"
+SECTION = "devel/python"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://flask_pymongo/wrappers.py;beginline=1;endline=24;md5=424c4e1047d28e01b4e4634a069c019d"
+
+SRC_URI[md5sum] = "94df71e6800b1d7915cc91a74b70f959"
+SRC_URI[sha256sum] = "620eb02dc8808a5fcb90f26cab6cba9d6bf497b15032ae3ca99df80366e33314"
+
+PYPI_PACKAGE = "Flask-PyMongo"
+
 inherit pypi setuptools3
-require python-flask-pymongo.inc
+
+DEPENDS = "${PYTHON_PN}-vcversioner ${PYTHON_PN}-vcversioner-native"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pymongo ${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.7.bb
deleted file mode 100644
index 6bff59a..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.7.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-flask-restful.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.8.bb
similarity index 70%
rename from meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.8.bb
index dcbcd0d..3de916a 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.8.bb
@@ -6,10 +6,10 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=685bb55ed99a366bb431995f5eef2783"
 
-SRC_URI[md5sum] = "a7217ef1159be38af5faf61aa09aabef"
-SRC_URI[sha256sum] = "f8240ec12349afe8df1db168ea7c336c4e5b0271a36982bff7394f93275f2ca9"
+SRC_URI[md5sum] = "e8051ff104ab4b3b867ba18d28953fae"
+SRC_URI[sha256sum] = "5ea9a5991abf2cb69b4aac19793faac6c032300505b325687d7c305ffaa76915"
 
-inherit pypi
+inherit pypi setuptools3
 
 PYPI_PACKAGE = "Flask-RESTful"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_4.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_4.2.1.bb
deleted file mode 100644
index ffc4aa7..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_4.2.1.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit setuptools3
-require python-flask-socketio.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-socketio.inc b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_4.3.1.bb
similarity index 67%
rename from meta-openembedded/meta-python/recipes-devtools/python/python-flask-socketio.inc
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_4.3.1.bb
index 8d778d4..b8631bf 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-socketio.inc
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-socketio_4.3.1.bb
@@ -5,12 +5,12 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=38cc21254909604298ce763a6e4440a0"
 
-inherit pypi
+inherit pypi setuptools3
 
 PYPI_PACKAGE = "Flask-SocketIO"
 
-SRC_URI[md5sum] = "b23222fb7dd2f0676d78bbe24153fd80"
-SRC_URI[sha256sum] = "2172dff1e42415ba480cee02c30c2fc833671ff326f1598ee3d69aa02cf768ec"
+SRC_URI[md5sum] = "d7992b0b4aaf473b7eff21fc14e8d1b2"
+SRC_URI[sha256sum] = "36c1d5765010d1f4e4f05b4cc9c20c289d9dc70698c88d1addd0afcfedc5b062"
 
 RDEPENDS_${PN} += "\
     ${PYTHON_PN}-flask \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.4.1.bb
deleted file mode 100644
index 07f45bc..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.4.1.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit pypi setuptools3
-require python-flask-sqlalchemy.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.4.4.bb
similarity index 61%
rename from meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.4.4.bb
index 86ba9dd..2755c7d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.4.4.bb
@@ -2,9 +2,11 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
 
-SRC_URI[md5sum] = "1f5781cf3e1a2b1aabda47a5b20d2073"
-SRC_URI[sha256sum] = "6974785d913666587949f7c2946f7001e4fa2cb2d19f4e69ead02e4b8f50b33d"
+SRC_URI[md5sum] = "63a522cb82a75292dc8bc77b6d26187a"
+SRC_URI[sha256sum] = "bfc7150eaf809b1c283879302f04c42791136060c6eeb12c0c6674fb1291fae5"
 
 PYPI_PACKAGE = "Flask-SQLAlchemy"
 
+inherit pypi setuptools3
+
 RDEPENDS_${PN} = "${PYTHON_PN}-sqlalchemy ${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb
index 251017f..a59019a 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb
@@ -1,2 +1,19 @@
+SUMMARY = "Customizable user account management for Flask"
+DESCRIPTION = "Customizable User Account Management for Flask; Register \
+Confirm email, Login, Change username, Change password, Forgot Password \
+and more."
+HOMEPAGE = " https://github.com/lingthio/Flask-User"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=97de97cd9d6e23c88129d884588ce71a"
+
+SRC_URI[md5sum] = "f7965e66ca139c8436896da07e66c21f"
+SRC_URI[sha256sum] = "601abcc0343dfbae0c56273d98362d5cdc266ac84d20b3f65a212e4a2c83b302"
+
+PYPI_PACKAGE = "Flask-User"
+
 inherit pypi setuptools3
-require python-flask-user.inc
+
+RDEPENDS_${PN} = "${PYTHON_PN}-flask \
+    ${PYTHON_PN}-flask-login \
+    ${PYTHON_PN}-flask-mail \
+    ${PYTHON_PN}-babel"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb
deleted file mode 100644
index 52362a8..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit pypi setuptools3
-require python-flask-wtf.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.3.bb
similarity index 65%
rename from meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.3.bb
index 8636711..213a0b5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.3.bb
@@ -2,11 +2,13 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3ca6bb31670492f791e6a9f2fb9f8a80"
 
-SRC_URI[md5sum] = "586f50f233926cade42e3d744aca3e8f"
-SRC_URI[sha256sum] = "5d14d55cfd35f613d99ee7cba0fc3fbbe63ba02f544d349158c14ca15561cc36"
+SRC_URI[md5sum] = "1b60b7dd1245b0d0173c21123717af61"
+SRC_URI[sha256sum] = "d417e3a0008b5ba583da1763e4db0f55a1269d9dd91dcc3eb3c026d3c5dbd720"
 
 PYPI_PACKAGE = "Flask-WTF"
 
+inherit pypi setuptools3
+
 RDEPENDS_${PN} = "\
     ${PYTHON_PN}-flask \
     ${PYTHON_PN}-itsdangerous \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.1.1.bb
deleted file mode 100644
index cd43990..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.1.1.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit pypi setuptools3
-require python-flask.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.1.2.bb
similarity index 75%
rename from meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.1.2.bb
index 1263383..2379961 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_1.1.2.bb
@@ -6,11 +6,13 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=ffeffa59c90c9c4a033c7574f8f3fb75"
 
-SRC_URI[md5sum] = "0e3ed44ece1c489ed835d1b7047e349c"
-SRC_URI[sha256sum] = "13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52"
-
-CLEANBROKEN = "1"
+SRC_URI[md5sum] = "0da4145d172993cd28a6c619630cc19c"
+SRC_URI[sha256sum] = "4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060"
 
 PYPI_PACKAGE = "Flask"
 
+inherit pypi setuptools3
+
+CLEANBROKEN = "1"
+
 RDEPENDS_${PN} = "${PYTHON_PN}-werkzeug ${PYTHON_PN}-jinja2 ${PYTHON_PN}-itsdangerous ${PYTHON_PN}-click"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.4.0.bb
deleted file mode 100644
index df688e4..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.4.0.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require python-gevent.inc
-inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc b/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_20.6.2.bb
similarity index 83%
rename from meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_20.6.2.bb
index bc89d10..dbeb3a6 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_20.6.2.bb
@@ -18,11 +18,10 @@
 
 SRC_URI_append = " \
     file://libev-conf.patch;patch=1;pnum=1 \
-    file://0002-setup.py-do-not-query-for-include-dir.patch \
 "
 
-SRC_URI[md5sum] = "6b9dd98917061803d9158e5258b8f412"
-SRC_URI[sha256sum] = "1eb7fa3b9bd9174dfe9c3b59b7a09b768ecd496debfc4976a9530a3e15c990d1"
+SRC_URI[md5sum] = "27b07fe9fdfff2d75e3d140e890489b1"
+SRC_URI[sha256sum] = "a23c2abf08e851c988723f6a2996d495f513a2c0dc70f9956af03af8debdb5d1"
 
 # The python-gevent has no autoreconf ability
 # and the logic for detecting a cross compile is flawed
@@ -32,4 +31,4 @@
 	sed -i -e 's/^cross_compiling=no/cross_compiling=yes/' ${S}/deps/c-ares/configure
 }
 
-inherit pypi
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_1.10.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_1.12.1.bb
similarity index 69%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_1.10.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_1.12.1.bb
index 37b6fc6..d79ac3c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_1.10.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_1.12.1.bb
@@ -3,7 +3,7 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=94023d14f6b58272fd885e4e3f2f08b3"
 
-SRC_URI[md5sum] = "a0064953388af9f9c61d8347f1e2ae0c"
-SRC_URI[sha256sum] = "fa24f07f6124ff2e91ee9b7550e240481bcb31b8f77a75e8d481be1c44a6ff07"
+SRC_URI[md5sum] = "92106822131f76ca77b77009674e78e4"
+SRC_URI[sha256sum] = "ddadc243ce627512c2a27e11d369f5ddf658ef80dbffb247787499486ef1ea98"
 
 inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-greenstalk_1.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-greenstalk_1.0.1.bb
new file mode 100644
index 0000000..9447c18
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-greenstalk_1.0.1.bb
@@ -0,0 +1,12 @@
+SUMMARY = "A Python 3 client for the beanstalkd work queue"
+HOMEPAGE = "https://github.com/mayhewj/greenstalk"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f98432ba1fce3933c556430fd47298f"
+
+SRC_URI[md5sum] = "3374649586a8016fecaf0ce5ecf9985d"
+SRC_URI[sha256sum] = "0c9f2af79ac8ea526891ae8d7e9500341a0f657465a541d6eaedb35ff70f4fe3"
+
+RDEPENDS_${PN} += "python3-io python3-core"
+
+inherit pypi
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb
similarity index 65%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.2.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb
index fc2cc7d..6e02fcf 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-haversine_2.3.0.bb
@@ -2,8 +2,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
 
-SRC_URI[md5sum] = "6b1badeb63aac6214c978d07a4ecd171"
-SRC_URI[sha256sum] = "b710aaf32c442a6d04aa89678be55e3f6c11f9752fc01c216e89b13120b36269"
+SRC_URI[md5sum] = "ff2d43a74195ec00c42ccd5da2a3f3de"
+SRC_URI[sha256sum] = "72c76855ac25e6ad054c7ed380e95c1a96803185f005dd11f40ccaa9620b551f"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.5.1.bb
similarity index 77%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.5.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.5.1.bb
index 0a3b773..b5cde66 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.5.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-inflection_0.5.1.bb
@@ -4,8 +4,8 @@
 SECTION = "devel/python"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=2fb6fa1a6f1792d78de19ad1bb653c31"
 
-SRC_URI[md5sum] = "87b2ab6ffdd6e15aa31d109ce5ff10bb"
-SRC_URI[sha256sum] = "f576e85132d34f5bf7df5183c2c6f94cfb32e528f53065345cf71329ba0b8924"
+SRC_URI[md5sum] = "c3287d4f0e3bdf625a52d655cc514403"
+SRC_URI[sha256sum] = "1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"
 
 inherit pypi setuptools3 ptest
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.17.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.18.1.bb
similarity index 83%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.17.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.18.1.bb
index ddcddd6..8ee9216 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.17.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_7.18.1.bb
@@ -6,8 +6,8 @@
 
 PYPI_PACKAGE = "ipython"
 
-SRC_URI[md5sum] = "1f2257d771de9d2fb40d9e3cfcea429d"
-SRC_URI[sha256sum] = "b70974aaa2674b05eb86a910c02ed09956a33f2dd6c71afc60f0b128a77e7f28"
+SRC_URI[md5sum] = "f2db1158dc40d70a31b6bbef86e74789"
+SRC_URI[sha256sum] = "a331e78086001931de9424940699691ad49dfb457cea31f5471eae7b78222d5e"
 
 RDEPENDS_${PN} = "\
     ${PYTHON_PN}-setuptools \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.13.bb
similarity index 69%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.13.bb
index 74b5bdc..9e7494b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.13.bb
@@ -3,8 +3,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=b05625f2336fa024e8d57e65c6595844"
 
-SRC_URI[md5sum] = "4de940f691c5ea759fb254384c8ddcf6"
-SRC_URI[sha256sum] = "49c4b20e1f38aa5cf109ddcd39647ac419f928512c869dc01d5c7098eddede82"
+SRC_URI[md5sum] = "df6e924305fd799d90be63336b2ab8b3"
+SRC_URI[sha256sum] = "f7dec22af52025d4526be94cc1303c7d8f5379b746a3f54a8c8446384392eeb1"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.5.2.bb
similarity index 73%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.4.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.5.2.bb
index 6b1cee4..0d04157 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.4.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_5.5.2.bb
@@ -4,8 +4,8 @@
 SECTION = "devel/python"
 LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=8227180126797a0148f94f483f3e1489"
 
-SRC_URI[md5sum] = "59592b6e14beba48149d651e900e3815"
-SRC_URI[sha256sum] = "d488ba1c5a2db721669cc180180d5acf84ebdc5af7827f7aaeaa75f73cf0e2b8"
+SRC_URI[md5sum] = "844c49ad1bf16a957b490c27b3b9844f"
+SRC_URI[sha256sum] = "171c5f365791073426b5ed3a156c2081a47f88c329161fd28228ff2da4c97ddb"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.51.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.52.bb
similarity index 79%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.51.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.52.bb
index 8340382..e6ccd7b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.51.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.52.bb
@@ -6,8 +6,8 @@
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
 
-SRC_URI[md5sum] = "5d28198fa933dac5c037108d8f5cf3bb"
-SRC_URI[sha256sum] = "8d4615cc0bb0fa49faa05b55ff49b1f41122b8092ca18a5d10f1e1699d6d7b3c"
+SRC_URI[md5sum] = "240a62b84ed29f6530ceae60609f7eff"
+SRC_URI[sha256sum] = "a2c499704c91c0a23e5db92e80ad1d45e51466b82ffaee478e5bb781460b3db5"
 
 inherit pypi setuptools3 python3native
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-core_1.15.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-core_1.16.1.bb
similarity index 75%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-luma-core_1.15.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-luma-core_1.16.1.bb
index 17445e7..3428dbe 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-core_1.15.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-luma-core_1.16.1.bb
@@ -6,8 +6,8 @@
 
 inherit pypi setuptools3
 
-SRC_URI[md5sum] = "9c890fa8e387a035ff0d1ae96a0715f1"
-SRC_URI[sha256sum] = "e0e14c762695fb8758e8b15cfd28cd4c1618bf2fd93157c8770a2e8e0e254ae5"
+SRC_URI[md5sum] = "de7bda49c4146ba242923a88c587cd7a"
+SRC_URI[sha256sum] = "2181a60906fea3104dcfa3923f9654928502cd7541ff9b4d76c6ae29c6a9d9fc"
 
 CLEANBROKEN = "1"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-matplotlib_3.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-matplotlib_3.3.2.bb
similarity index 83%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-matplotlib_3.3.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-matplotlib_3.3.2.bb
index 6273ee2..a2e7074 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-matplotlib_3.3.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-matplotlib_3.3.2.bb
@@ -7,7 +7,7 @@
 SECTION = "devel/python"
 LICENSE = "PSF"
 LIC_FILES_CHKSUM = "\
-    file://setup.py;beginline=251;endline=251;md5=e0ef37de7122ce842bcd1fb54482b353 \
+    file://setup.py;beginline=259;endline=259;md5=e0ef37de7122ce842bcd1fb54482b353 \
     file://LICENSE/LICENSE;md5=afec61498aa5f0c45936687da9a53d74 \
 "
 DEPENDS = "\
@@ -19,8 +19,8 @@
     python3-certifi-native \
 "
 
-SRC_URI[md5sum] = "f3a405f340be5b151cb2042c4d8d16f7"
-SRC_URI[sha256sum] = "87f53bcce90772f942c2db56736788b39332d552461a5cb13f05ff45c1680f0e"
+SRC_URI[md5sum] = "a85791908e78818bd425ba9ab38500fa"
+SRC_URI[sha256sum] = "3d2edbf59367f03cd9daf42939ca06383a7d7803e3993eb5ff1bee8e8a3fbb6b"
 
 inherit pypi setuptools3 pkgconfig
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.2.1.bb
deleted file mode 100644
index d3a9971..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.2.1.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "McCabe checker, plugin for flake8"
-HOMEPAGE = "https://github.com/dreamhost/cliff"
-SECTION = "devel/python"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://README.rst;md5=aa0383f6aee4f5c20084a97cd13164c4"
-
-SRC_URI[md5sum] = "5a3f3fa6a4bad126c88aaaa7dab682f5"
-SRC_URI[sha256sum] = "5a2a170e47de5593a6abfae1e9542bd2c3924ac62bbe4e6ed96c953c0352243a"
-
-inherit pypi setuptools3
-
-RDEPENDS_${PN} += "${PYTHON_PN}-prettytable \
-            ${PYTHON_PN}-cmd2 \
-            ${PYTHON_PN}-pyparsing \
-           "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.6.1.bb
new file mode 100644
index 0000000..63a9e35
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.6.1.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "McCabe checker, plugin for flake8"
+HOMEPAGE = "https://github.com/dreamhost/cliff"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a489dc62bacbdad3335c0f160a974f0f"
+
+SRC_URI[md5sum] = "723df2f7b1737b8887475bac4c763e1e"
+SRC_URI[sha256sum] = "dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
+
+inherit pypi setuptools3
+
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-prettytable \
+            ${PYTHON_PN}-cmd2 \
+            ${PYTHON_PN}-pyparsing \
+           "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools_8.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools_8.5.0.bb
similarity index 77%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools_8.4.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools_8.5.0.bb
index f040b1a..e924b0f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools_8.4.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-more-itertools_8.5.0.bb
@@ -3,8 +3,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3396ea30f9d21389d7857719816f83b5"
 
-SRC_URI[md5sum] = "0912041c05148ed079984cff69af2e99"
-SRC_URI[sha256sum] = "68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5"
+SRC_URI[md5sum] = "2588b5a7042576b99574779582be9292"
+SRC_URI[sha256sum] = "6f83822ae94818eae2612063a5101a7311e68ae8002005b5e05f03fd74a86a20"
 
 inherit pypi setuptools3 ptest
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-msk_0.3.15.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-msk_0.3.16.bb
similarity index 69%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-msk_0.3.15.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-msk_0.3.16.bb
index af011cc..a3206f7 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-msk_0.3.15.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-msk_0.3.16.bb
@@ -3,8 +3,8 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://README.md;md5=2f90e43663eddf1c33087419fbb35e28"
 
-SRC_URI[md5sum] = "dcb286c489d24d8b0fb8413835f7478a"
-SRC_URI[sha256sum] = "56d3557889ee2ceebc72284f979aa6ddd4c7fbe2af31142eb6f51404f14516d5"
+SRC_URI[md5sum] = "8a4fc92a074544f81f482da2c21ef989"
+SRC_URI[sha256sum] = "c6a717fc068f7c69ddc8cb21dbeeda7cfa97a4e9f41690459c9fbec68b16ee87"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-msm_0.8.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-msm_0.8.8.bb
similarity index 74%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-msm_0.8.7.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-msm_0.8.8.bb
index de930f9..f5e3f59 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-msm_0.8.7.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-msm_0.8.8.bb
@@ -3,8 +3,8 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=e23fadd6ceef8c618fc1c65191d846fa"
 
-SRC_URI[md5sum] = "16f755ea554c332cdb666dfc1109f7f2"
-SRC_URI[sha256sum] = "9878eecbf7255d4907637700ecfeeacb9fe586409ee3ae05d406683ad18d7e5e"
+SRC_URI[md5sum] = "cf1fc0d1d86af68003cae53c71ec6288"
+SRC_URI[sha256sum] = "a502aee54917cd394217b31c977a1ba3d9541a0120e0a045c49fd77b328e4a29"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.4.bb
deleted file mode 100644
index 5708e35..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.4.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Python package for creating and manipulating graphs and networks"
-HOMEPAGE = "http://networkx.github.io/"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b68290ee1026b204170a23bbdb27a4fd"
-
-SRC_URI[md5sum] = "63e3fdc9d3a46bcabc776acc5ea5fe48"
-SRC_URI[sha256sum] = "f8f4ff0b6f96e4f9b16af6b84622597b5334bf9cae8cf9b2e42e7985d5c95c64"
-
-inherit pypi setuptools3
-
-RDEPENDS_${PN} += "\
-                   ${PYTHON_PN}-decorator \
-                   "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.5.bb
new file mode 100644
index 0000000..7057382
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-networkx_2.5.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Python package for creating and manipulating graphs and networks"
+HOMEPAGE = "http://networkx.github.io/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a24ea029adac8935699bf69b2e38c728"
+
+SRC_URI[md5sum] = "21f25be1f4373e19153a9beca63346e7"
+SRC_URI[sha256sum] = "7978955423fbc9639c10498878be59caf99b44dc304c2286162fd24b458c1602"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+                   ${PYTHON_PN}-decorator \
+                   "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-nmap_1.4.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-nmap_1.4.8.bb
similarity index 73%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-nmap_1.4.7.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-nmap_1.4.8.bb
index 5ebd757..2037d49 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-nmap_1.4.7.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-nmap_1.4.8.bb
@@ -8,8 +8,8 @@
 
 PYPI_PACKAGE = "python3-nmap"
 
-SRC_URI[md5sum] = "4dce15e7889b1e9bfa8e1e2e0904795c"
-SRC_URI[sha256sum] = "127b7ad604a3fd34578a6ad848a603ccf1608c607577eb3bba097a1e2fc8f48a"
+SRC_URI[md5sum] = "e7904b39b64a8a44f275388862659a0d"
+SRC_URI[sha256sum] = "8d7da78142bee665289a243f71c5f48407d8ab7e5a02ee672ded05f339044759"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-nocasedict_1.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-nocasedict_1.0.0.bb
new file mode 100644
index 0000000..dae1ebf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-nocasedict_1.0.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "A case-insensitive ordered dictionary for Python"
+HOMEPAGE = "https://github.com/pywbem/nocasedict"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1803fa9c2c3ce8cb06b4861d75310742"
+
+SRC_URI[md5sum] = "14b405bf7ffe9d0f784aa9c3c39e277b"
+SRC_URI[sha256sum] = "22840b434e40f20da6d2ccf0821baba54589e2476499b65420b6e4c2e669aa04"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-nocaselist_1.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-nocaselist_1.0.2.bb
new file mode 100644
index 0000000..8509cd0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-nocaselist_1.0.2.bb
@@ -0,0 +1,9 @@
+SUMMARY = "A case-insensitive list for Python"
+HOMEPAGE = "https://nocaselist.readthedocs.io/en/latest/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI[md5sum] = "10e58542c1225aff3f057e89e9ae4394"
+SRC_URI[sha256sum] = "3cfe964c436991cd6bd9f2cf23375c484ec7cf0c7488471381eff13a4fdac902"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb
deleted file mode 100644
index ce2618b..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "This module offers a simple interface to query NTP servers from Python."
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://ntplib.py;beginline=1;endline=23;md5=afa07338a9595257e94c205c3e72224d"
-
-SRCNAME = "ntplib"
-SRC_URI[md5sum] = "c7cc8e9b09f40c84819859d70b7784ca"
-SRC_URI[sha256sum] = "c4621b64d50be9461d9bd9a71ba0b4af06fbbf818bbd483752d95c1a4e273ede"
-
-S = "${WORKDIR}/${SRCNAME}-${PV}"
-
-inherit setuptools3 python3native pypi
-
-RDEPENDS_${PN} += "${PYTHON_PN}-datetime ${PYTHON_PN}-io"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.4.bb
new file mode 100644
index 0000000..ae4c10f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.4.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "This module offers a simple interface to query NTP servers from Python."
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://ntplib.py;beginline=1;endline=23;md5=afa07338a9595257e94c205c3e72224d"
+
+SRC_URI = "git://github.com/cf-natali/ntplib.git"
+SRCREV ?= "aea7925c26152024ca8cf207e77f403f8127727a"
+
+S = "${WORKDIR}/git"
+
+inherit setuptools3 python3native
+
+RDEPENDS_${PN} += "${PYTHON_PN}-datetime ${PYTHON_PN}-io"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-openpyxl_3.0.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-openpyxl_3.0.5.bb
similarity index 81%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-openpyxl_3.0.4.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-openpyxl_3.0.5.bb
index d0946e4..0aa9fb0 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-openpyxl_3.0.4.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-openpyxl_3.0.5.bb
@@ -9,7 +9,7 @@
 
 inherit pypi setuptools3
 
-SRC_URI[md5sum] = "8491219f6bd83ca6ad8334bf77435cf5"
-SRC_URI[sha256sum] = "d88dd1480668019684c66cfff3e52a5de4ed41e9df5dd52e008cbf27af0dbf87"
+SRC_URI[md5sum] = "526b7149538575d58e55df1bd37807c1"
+SRC_URI[sha256sum] = "18e11f9a650128a12580a58e3daba14e00a11d9e907c554a17ea016bf1a2c71b"
 
 RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-io ${PYTHON_PN}-pprint ${PYTHON_PN}-shell ${PYTHON_PN}-jdcal ${PYTHON_PN}-et-xmlfile"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.1.2.bb
similarity index 82%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.1.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.1.2.bb
index 7d65287..1eade98 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_1.1.2.bb
@@ -6,8 +6,8 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=c2a8f987b2ce77c368c6b3e1b5b10774"
 
-SRC_URI[md5sum] = "512da48424b85bf198002bdbdf38af5a"
-SRC_URI[sha256sum] = "b39508562ad0bb3f384b0db24da7d68a2608b9ddc85b1d931ccaaa92d5e45273"
+SRC_URI[md5sum] = "b4ce7c64f549ed48b47877fc64281031"
+SRC_URI[sha256sum] = "b64ffd87a2cfd31b40acd4b92cb72ea9a52a48165aec4c140e78fd69c45d1444"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_2.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_2.7.2.bb
similarity index 66%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_2.7.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_2.7.2.bb
index 0ead236..324847c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_2.7.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_2.7.2.bb
@@ -3,8 +3,8 @@
 LICENSE = "LGPL-2.1"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=fd0120fc2e9f841c73ac707a30389af5"
 
-SRC_URI[md5sum] = "bf8239dc820ca86dd3c3226f4281c35f"
-SRC_URI[sha256sum] = "920492895db8013f6cc0179293147f830b8c7b21fdfc839b6bad760c27459d9f"
+SRC_URI[md5sum] = "44136d79da4cd7619e368018ad022619"
+SRC_URI[sha256sum] = "7f36f4ba2c0d81d219f4595e35f70d56cc94f9ac40a6acdf51d6ca210ce65035"
 
 PYPI_PACKAGE = "paramiko"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.16.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.18.0.bb
similarity index 77%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.16.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.18.0.bb
index a1e9452..ed9204e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.16.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-parse_1.18.0.bb
@@ -3,8 +3,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=8ab458ad281b60e6f1b39b3feafbfc05"
 
-SRC_URI[md5sum] = "ba263b3143e9528ae960bbba4d56bf25"
-SRC_URI[sha256sum] = "cd89e57aed38dcf3e0ff8253f53121a3b23e6181758993323658bffc048a5c19"
+SRC_URI[md5sum] = "42ea0002cf36bfd2bd74f3c05bf25f60"
+SRC_URI[sha256sum] = "91666032d6723dc5905248417ef0dc9e4c51df9526aaeef271eacad6491f06a4"
 
 inherit pypi setuptools3 ptest
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-explicitly-set-compile-options.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-explicitly-set-compile-options.patch
index 35aee42..005fea5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-explicitly-set-compile-options.patch
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow/0001-explicitly-set-compile-options.patch
@@ -1,6 +1,6 @@
-From 862a981ce462cd83a99e3db9faeeda1f8c64983f Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Mon, 18 Mar 2019 23:23:55 -0400
+From 27bfa4028453dc79a72569823e97da8fd1994ffc Mon Sep 17 00:00:00 2001
+From: Leon Anavi <leon.anavi@konsulko.com>
+Date: Tue, 1 Sep 2020 11:53:53 +0000
 Subject: [PATCH] explicitly set compile options
 
 OE does not support to install egg package, so
@@ -10,19 +10,19 @@
 Upstream-Status: Inappropriate [oe specific]
 
 Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-
+Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
 ---
  setup.cfg | 12 ++++++++++++
  1 file changed, 12 insertions(+)
 
 diff --git a/setup.cfg b/setup.cfg
-index 1c6ebc84..1ccc3d69 100644
+index 19979cf7..ed27dfe1 100644
 --- a/setup.cfg
 +++ b/setup.cfg
-@@ -13,3 +13,15 @@ multi_line_output = 3
- 
+@@ -11,3 +11,15 @@ multi_line_output = 3
  [tool:pytest]
- addopts = -rs
+ addopts = -ra --color=yes
+ testpaths = Tests
 +
 +[build_ext]
 +disable-platform-guessing = 1
@@ -35,3 +35,6 @@
 +disable-webp = 1
 +disable-webpmux = 1
 +disable-imagequant = 1
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_6.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_7.2.0.bb
similarity index 78%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_6.2.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_7.2.0.bb
index a383a3f..13cab43 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_6.2.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_7.2.0.bb
@@ -3,13 +3,13 @@
 Contributors."
 HOMEPAGE = "https://pillow.readthedocs.io"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=55c0f320370091249c1755c0d2b48e89"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ea2dc3f5611e69058503d4b940049d03"
 
-SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=6.2.x \
+SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=7.2.x \
            file://0001-support-cross-compiling.patch \
            file://0001-explicitly-set-compile-options.patch \
 "
-SRCREV ?= "6e0f07bbe38def22d36ee176b2efd9ea74b453a6"
+SRCREV ?= "2bd74943fb9f320def6c066e732b701d1c15f677"
 
 
 inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.14.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.16.bb
similarity index 82%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.14.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.16.bb
index 333b015..7775d73 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.14.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pint_0.16.bb
@@ -10,8 +10,8 @@
 
 inherit pypi ptest setuptools3
 
-SRC_URI[md5sum] = "e5e409806bc82f518230117b30ae23ed"
-SRC_URI[sha256sum] = "9aa450ebb9d722ed03fa9a450104cfd16c479b49f862d547c6f77320de597f72"
+SRC_URI[md5sum] = "ec78e4e42512b93f80b9093416ad7417"
+SRC_URI[sha256sum] = "e437420e65fa72a2805f4036f986669c48d54944eeb0e47c8ba16f98cbdcd599"
 
 DEPENDS += "python3-setuptools-scm-native"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.7.bb
similarity index 79%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.6.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.7.bb
index 806e67c..7b0d1a0 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.6.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.7.bb
@@ -3,8 +3,8 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=b2cde7da89f0c1f3e49bf968d00d554f"
 
-SRC_URI[md5sum] = "e50cb328715b338480d8d29dda54ff5d"
-SRC_URI[sha256sum] = "7630ab85a23302839a0f26b31cc24f518e6155dea1ed395ea61b42c45941b6a6"
+SRC_URI[md5sum] = "f1b34c688ef7dccccb951130f008f6fe"
+SRC_URI[sha256sum] = "822f4605f28f7d2ba6b0b09a31e25e140871e96364d1d377667b547bb3bf4489"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_7.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_7.3.0.bb
similarity index 66%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_7.2.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_7.3.0.bb
index 257778b..b444df0 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_7.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pychromecast_7.3.0.bb
@@ -3,8 +3,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=b1dbd4e85f47b389bdadee9c694669f5"
 
-SRC_URI[md5sum] = "20ed7ec024fd4739446d42f8d19813b8"
-SRC_URI[sha256sum] = "c522c5ecb554471ca8e5690c05530b1c237c301349061d3839c506984f8d3c2d"
+SRC_URI[md5sum] = "7ab862743ff33dafc93206c1435abc5e"
+SRC_URI[sha256sum] = "f594231efb34b86eeb463611662bca21a6962793885d3ad68195286940f7473d"
 
 PYPI_PACKAGE = "PyChromecast"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pycurl_7.43.0.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycurl_7.43.0.6.bb
similarity index 80%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pycurl_7.43.0.5.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pycurl_7.43.0.6.bb
index 5a1c179..0437a6c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pycurl_7.43.0.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycurl_7.43.0.6.bb
@@ -12,8 +12,8 @@
                     file://COPYING-MIT;md5=60872a112595004233b769b6cbfd65b6 \
                     "
 
-SRC_URI[md5sum] = "0b387d4609ed20c88baede8579a4d425"
-SRC_URI[sha256sum] = "ec7dd291545842295b7b56c12c90ffad2976cc7070c98d7b1517b7b6cd5994b3"
+SRC_URI[md5sum] = "3e121d895101022c30619e1bbf97eb97"
+SRC_URI[sha256sum] = "8301518689daefa53726b59ded6b48f33751c383cf987b0ccfbbc4ed40281325"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pydicti_1.1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pydicti_1.1.3.bb
new file mode 100644
index 0000000..bca0ba7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pydicti_1.1.3.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Case insensitive derivable dictionary"
+HOMEPAGE = "https://github.com/coldfix/pydicti"
+LICENSE = "WTFPL"
+LIC_FILES_CHKSUM = "file://COPYING;md5=389a9e29629d1f05e115f8f05c283df5"
+
+SRC_URI[md5sum] = "b02ed35da91e400f1f17a57ab02ba06b"
+SRC_URI[sha256sum] = "eea50576baa751a9b6b862f09f081c47d557e0298623ca8742851da72b00eec4"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.128.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.131.bb
similarity index 77%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.128.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.131.bb
index e27bf99..82ab803 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.128.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.131.bb
@@ -3,8 +3,8 @@
 LICENSE = "BSD-2-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20"
 
-SRC_URI[md5sum] = "a90a25def591c6a265bc904f801646f1"
-SRC_URI[sha256sum] = "714b8b5c8debb4b5e0e602a5fe8a599206e89c1313244ed0e69d9e0bc816f1f7"
+SRC_URI[md5sum] = "8844204f8b059ff2fc508ba9ac07dcb2"
+SRC_URI[sha256sum] = "59adb7ee95bfb1b5c35abbc01b5372df7327baea4a8df9efe30140ea64b73c18"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_0.10.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_0.10.1.bb
similarity index 76%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_0.10.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_0.10.1.bb
index 895c47b..15ace44 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_0.10.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymysql_0.10.1.bb
@@ -8,8 +8,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=528175c84163bb800d23ad835c7fa0fc"
 
-SRC_URI[md5sum] = "d08058b1592724d5808c43f56050f245"
-SRC_URI[sha256sum] = "e14070bc84e050e0f80bf6063e31d276f03a0bb4d46b9eca2854566c4ae19837"
+SRC_URI[md5sum] = "4a1fe973afbbdd78928650118ce8ff68"
+SRC_URI[sha256sum] = "263040d2779a3b84930f7ac9da5132be0fefcd6f453a885756656103f8ee1fdd"
 
 PYPI_PACKAGE = "PyMySQL"
 inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.13.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.14.bb
similarity index 85%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.13.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.14.bb
index 4fb4019..84397b6 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.13.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.5.14.bb
@@ -3,8 +3,8 @@
 LIC_FILES_CHKSUM = "file://LICENSE.GPL.v2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://LICENSE.Apache.v2;md5=34281e312165f843a2b7d1f114fe65ce"
 
-SRC_URI[md5sum] = "6c72ffa7147bbfa1610942e5734c8c87"
-SRC_URI[sha256sum] = "518365f3313e73b0f024b9fa7a580b29bfa2fe2c5230be0bc69c068bbf6637e9"
+SRC_URI[md5sum] = "6bde3624a6f22bdfb630bb54243a0d1d"
+SRC_URI[sha256sum] = "774c5ecf05fe40f0f601a7ab33c19ca0b24f00bf4a094e58deaa5333b7ca49b5"
 
 inherit setuptools3 pypi ptest
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.16.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.17.3.bb
similarity index 66%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.16.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.17.3.bb
index dec6611..72736c8 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.16.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyrsistent_0.17.3.bb
@@ -3,14 +3,13 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENCE.mit;md5=ca574f2891cf528b3e7a2ee570337e7c"
 
-SRC_URI[md5sum] = "4ba30da6f0a63554e70ac6c4c1904929"
-SRC_URI[sha256sum] = "28669905fe725965daa16184933676547c5bb40a5153055a8dee2a4bd7933ad3"
+SRC_URI[md5sum] = "cd38658ea772a7f9b12b6f9485a7018b"
+SRC_URI[sha256sum] = "2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"
 
 inherit pypi setuptools3
 
 RDEPENDS_${PN} += " \
     ${PYTHON_PN}-numbers \
-    ${PYTHON_PN}-six \
 "
 
 BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb
deleted file mode 100644
index 44c24f4..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-SUMMARY = "PyUSB provides USB access on the Python language"
-HOMEPAGE = "http://pyusb.sourceforge.net/"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=51691ed11cc2c7ae93e383f60ed49b0f"
-DEPENDS += "libusb1"
-
-SRC_URI[md5sum] = "862b56452c64948c787ad8ef9498590b"
-SRC_URI[sha256sum] = "4e9b72cc4a4205ca64fbf1f3fff39a335512166c151ad103e55c8223ac147362"
-
-inherit pypi setuptools3
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.1.0.bb
new file mode 100644
index 0000000..6b48d6a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.1.0.bb
@@ -0,0 +1,12 @@
+SUMMARY = "PyUSB provides USB access on the Python language"
+HOMEPAGE = "http://pyusb.sourceforge.net/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c52a96fd9a0cadcb9270904c8eb5416c"
+DEPENDS += "libusb1 ${PYTHON_PN}-setuptools-scm-native"
+
+SRC_URI[md5sum] = "3b2e38e9f697d2f90d86376bd10a9505"
+SRC_URI[sha256sum] = "d69ed64bff0e2102da11b3f49567256867853b861178689671a163d30865c298"
+
+inherit pypi setuptools3
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_19.0.2.bb
similarity index 86%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_19.0.2.bb
index 2369f06..3c4e32b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_17.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyzmq_19.0.2.bb
@@ -8,8 +8,8 @@
 FILESEXTRAPATHS_prepend := "${THISDIR}/python-pyzmq:"
 
 SRC_URI += "file://club-rpath-out.patch"
-SRC_URI[md5sum] = "aecdfc328193fbd81f6dc23228319943"
-SRC_URI[sha256sum] = "2199f753a230e26aec5238b0518b036780708a4c887d4944519681a920b9dee4"
+SRC_URI[md5sum] = "200abc1a75bdcfff7adf61304f46f55e"
+SRC_URI[sha256sum] = "296540a065c8c21b26d63e3cea2d1d57902373b16e4256afe46422691903a438"
 
 inherit pypi pkgconfig setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.2.2.bb
similarity index 86%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.2.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.2.2.bb
index a5e3a2a..10f031c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.2.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.2.2.bb
@@ -12,8 +12,8 @@
 inherit pypi setuptools3
 
 PYPI_PACKAGE_EXT = "zip"
-SRC_URI[md5sum] = "ac8aaad885e48c6b6cd5461be5b8149f"
-SRC_URI[sha256sum] = "d693e6d06b17f48669e2a8c4cb6c1f0d56e5f1a74835d18b8ea2118da7bf2d79"
+SRC_URI[md5sum] = "ac6b77c223821856e8ac077acf5a7c1d"
+SRC_URI[sha256sum] = "a0786a916d0572bd9d6afe26e95c6021e3df5dcafa0ece6b302e36366e58c24e"
 
 RDEPENDS_${PN} += " \
     ${PYTHON_PN}-shell \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.16.10.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.16.12.bb
similarity index 72%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.16.10.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.16.12.bb
index 076721a..ec8545d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.16.10.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ruamel-yaml_0.16.12.bb
@@ -8,8 +8,8 @@
 
 inherit pypi setuptools3
 
-SRC_URI[md5sum] = "02774e7ed3273b3d8eee6c08326b91c4"
-SRC_URI[sha256sum] = "099c644a778bf72ffa00524f78dd0b6476bca94a1da344130f4bf3381ce5b954"
+SRC_URI[md5sum] = "c7e4b216d9554d80be42011b448b7c61"
+SRC_URI[sha256sum] = "076cc0bc34f1966d920a49f18b52b6ad559fbe656a0748e3535cf7b3f29ebf9e"
 
 do_install_prepend() {
     export RUAMEL_NO_PIP_INSTALL_CHECK=1
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_0.16.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_0.17.5.bb
similarity index 72%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_0.16.5.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_0.17.5.bb
index ad01f6f..5495fa0 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_0.16.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_0.17.5.bb
@@ -5,8 +5,8 @@
 LICENSE = "BSD-2-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=0c79f8d3c91fc847350efd28bfe0a341"
 
-SRC_URI[md5sum] = "6d65fda758929b6a8d16e6030302c811"
-SRC_URI[sha256sum] = "e12eb1c2c01cd9e9cfe70608dbda4ef451f37ef0b7cbb92e5d43f87c341d6334"
+SRC_URI[md5sum] = "dcdf0d4f84f4f6ea02ad3f15dfcff2d9"
+SRC_URI[sha256sum] = "02f2a72698453f722b102562eb6430d2a82d6c6c40f2b991ed69e7628142de6a"
 
 PYPI_PACKAGE = "sentry-sdk"
 inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.13.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.14.0.bb
similarity index 78%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.13.1.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.14.0.bb
index 2a6d9bc..7724f4b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.13.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-sh_1.14.0.bb
@@ -3,8 +3,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5317094292296f03405f59ae5f6544b6"
 
-SRC_URI[md5sum] = "7e3dd3a6b49c06db93746994a68cb8cf"
-SRC_URI[sha256sum] = "97a3d2205e3c6a842d87ebbc9ae93acae5a352b1bc4609b428d0fd5bb9e286a3"
+SRC_URI[md5sum] = "4cbbcb85c081d78f4b0f00d634db9bb9"
+SRC_URI[sha256sum] = "05c7e520cdf70f70a7228a03b589da9f96c6e0d06fc487ab21fc62b26a592e59"
 
 PYPI_PACKAGE = "sh"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_3.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_3.2.2.bb
similarity index 71%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_3.2.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_3.2.2.bb
index 0a2bffd..18eae35 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_3.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-stevedore_3.2.2.bb
@@ -3,8 +3,8 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
-SRC_URI[md5sum] = "6a39764d7aecc63a0990cf4635cb430d"
-SRC_URI[sha256sum] = "38791aa5bed922b0a844513c5f9ed37774b68edc609e5ab8ab8d8fe0ce4315e5"
+SRC_URI[md5sum] = "c78357a02888490ef27a0d898eb97172"
+SRC_URI[sha256sum] = "f845868b3a3a77a2489d226568abe7328b5c2d4f6a011cc759dfa99144a521f0"
 
 DEPENDS += "${PYTHON_PN}-pbr-native"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb
index 78ec431..6914cf9 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb
@@ -1,3 +1,20 @@
-require python-systemd.inc
-RDEPENDS_${PN} += "python3-syslog"
-inherit setuptools3
+SUMMARY = "Python interface for libsystemd"
+HOMEPAGE = "https://github.com/systemd/python-systemd"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4fbd65380cdd255951079008b364516c"
+
+PYPI_PACKAGE = "systemd-python"
+DEPENDS += "systemd (<=234)"
+RDEPENDS_${PN} += "systemd ${PYTHON_PN}-syslog ${PYTHON_PN}-logging python3-syslog"
+REQUIRED_DISTRO_FEATURES = "systemd"
+inherit pypi features_check setuptools3
+
+SRC_URI[md5sum] = "5071ea5bcb976186e92a3f5e75df221d"
+SRC_URI[sha256sum] = "fd0e44bf70eadae45aadc292cb0a7eb5b0b6372cd1b391228047d33895db83e7"
+
+# allow for common patches for python- and python3-systemd
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-systemd:"
+
+SRC_URI += "file://endian.patch"
+
+SRC_URI_append_libc-musl = " file://0001-Provide-implementation-of-strndupa-for-musl.patch"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tabulate_0.8.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tabulate_0.8.7.bb
new file mode 100644
index 0000000..def35ff
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-tabulate_0.8.7.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Pretty-print tabular data"
+HOMEPAGE = "https://github.com/astanin/python-tabulate"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fad5a39bdfe452b13775adda41023ba7"
+
+SRC_URI[md5sum] = "a766c6eecfe3765821909c4ddf082b3b"
+SRC_URI[sha256sum] = "db2723a20d04bcda8522165c73eea7c300eda74e0ce852d9022e0159d7895007"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator/run-ptest b/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator/run-ptest
new file mode 100644
index 0000000..5cec711
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+pytest
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator_0.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator_0.1.2.bb
index 14943a4..a83ee5e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator_0.1.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-test-generator_0.1.2.bb
@@ -5,10 +5,24 @@
 LICENSE = "ISC"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=041a2bff595d40ccb4b36356f89dab00"
 
+SRC_URI += " \
+	file://run-ptest \
+"
+
 SRC_URI[md5sum] = "6c69e73ba5b4b3ed62f7bcda071c64f1"
 SRC_URI[sha256sum] = "ad5925c814bfe79497b43df096e3bb52c166d1577f7aff160137301676232f4a"
 
-inherit pypi setuptools3
+inherit pypi setuptools3 ptest
+
+RDEPENDS_${PN}-ptest += " \
+	${PYTHON_PN}-pytest \
+	${PYTHON_PN}-mock \
+"
+
+do_install_ptest() {
+	install -d ${D}${PTEST_PATH}/tests
+	cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+}
 
 DEPENDS += "python3-nose-native"
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.3.bb
new file mode 100644
index 0000000..03ebd01
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.3.bb
@@ -0,0 +1,11 @@
+SUMMARY = "module for creating simple ASCII tables"
+HOMEPAGE = "https://github.com/foutaise/texttable/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7a97cdac2d9679ffdcfef3dc036d24f6"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "68e6b31d36f5c20221da7d5db3eca772"
+SRC_URI[sha256sum] = "ce0faf21aa77d806bbff22b107cc22cce68dc9438f97a2df32c93e9afa4ce436"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.48.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.49.0.bb
similarity index 65%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.48.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.49.0.bb
index 8314680..26eb107 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.48.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-tqdm_4.49.0.bb
@@ -5,8 +5,8 @@
 LICENSE = "MIT & MPL-2.0"
 LIC_FILES_CHKSUM = "file://LICENCE;md5=7ea57584e3f8bbde2ae3e1537551de25"
 
-SRC_URI[md5sum] = "d29c836d74d2f2ec6a10d052937f7371"
-SRC_URI[sha256sum] = "564d632ea2b9cb52979f7956e093e831c28d441c11751682f84c86fc46e4fd21"
+SRC_URI[md5sum] = "c2afde3f1d5aa108376fdd0f4b20821d"
+SRC_URI[sha256sum] = "faf9c671bd3fad5ebaeee366949d969dca2b2be32c872a7092a1e1a9048d105b"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-trafaret_2.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-trafaret_2.1.0.bb
similarity index 71%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-trafaret_2.0.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-trafaret_2.1.0.bb
index 4e81407..9660201 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-trafaret_2.0.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-trafaret_2.1.0.bb
@@ -3,7 +3,8 @@
 LICENSE = "BSD-2-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=21ecc7aa8f699874e706fc1354903437"
 
-SRC_URI[sha256sum] = "61dfc25b574f70bfdf7ee3a808ec423061811c13a10b8d3c9e11ab539b96ab65"
+SRC_URI[sha256sum] = "72c342ede27fb34cd219b62855119380ae1c87006b6106be163c01159eb955ff"
+SRC_URI[md5sum] = "228675376012fb27dd7f70ab685e7766"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_4.3.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.0.4.bb
similarity index 69%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_4.3.3.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.0.4.bb
index edfb3ab..194193f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_4.3.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.0.4.bb
@@ -6,12 +6,11 @@
 
 PYPI_PACKAGE = "traitlets"
 
-SRC_URI[md5sum] = "3a4f263af65d3d79f1c279f0247077ef"
-SRC_URI[sha256sum] = "d023ee369ddd2763310e4c3eae1ff649689440d4ae59d7485eb4cfbbe3e359f7"
+SRC_URI[md5sum] = "592dde72b6b706d09ea624cce9af3cf5"
+SRC_URI[sha256sum] = "86c9351f94f95de9db8a04ad8e892da299a088a64fd283f9f6f18770ae5eae1b"
 
 RDEPENDS_${PN} = "\
     ${PYTHON_PN}-ipython-genutils \
-    ${PYTHON_PN}-six \
     ${PYTHON_PN}-decorator \
 "
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-twitter_3.8.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-twitter_3.8.0.bb
deleted file mode 100644
index 78f66a4..0000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-twitter_3.8.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Twitter for Python"
-DESCRIPTION = "Python module to support twitter API"
-
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://PKG-INFO;md5=8f702b489acb6863cec8b261a55931d8"
-
-SRC_URI[md5sum] = "8aeff278b7cefcd384c65929bc921e2c"
-SRC_URI[sha256sum] = "8abd828ba51a85a2b5bb7373715d6d3bb32d18ac624e3a4db02e4ef8ab48316b"
-
-PYPI_PACKAGE = "tweepy"
-
-inherit pypi setuptools3
-
-RDEPENDS_${PN} += "\
-    ${PYTHON_PN}-pip \
-    ${PYTHON_PN}-pysocks \
-    ${PYTHON_PN}-requests \
-    ${PYTHON_PN}-six \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-twitter_3.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-twitter_3.9.0.bb
new file mode 100644
index 0000000..01bbf83
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-twitter_3.9.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Twitter for Python"
+DESCRIPTION = "Python module to support twitter API"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "b5bc640fa9f6baff6471c127aba1fec0"
+SRC_URI[sha256sum] = "bfd19a5c11f35f7f199c795f99d9cbf8a52eb33f0ecfb6c91ee10b601180f604"
+
+PYPI_PACKAGE = "tweepy"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += "\
+    ${PYTHON_PN}-pip \
+    ${PYTHON_PN}-pysocks \
+    ${PYTHON_PN}-requests \
+    ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.3.bb
similarity index 66%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.2.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.3.bb
index 51e9eda..8ef15fa 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-typing-extensions_3.7.4.3.bb
@@ -5,8 +5,8 @@
 # The name on PyPi is slightly different.
 PYPI_PACKAGE = "typing_extensions"
 
-SRC_URI[md5sum] = "f2674282966dc088d10170c2347431cc"
-SRC_URI[sha256sum] = "79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae"
+SRC_URI[md5sum] = "5fcbfcb22e6f8c9bf23fb9f8e020f6ee"
+SRC_URI[sha256sum] = "99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_3.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_3.2.0.bb
similarity index 83%
rename from meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_3.1.0.bb
rename to meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_3.2.0.bb
index ef57b2a..e1d7d9d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_3.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_3.2.0.bb
@@ -4,8 +4,8 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=10fa10456417c0252bcb8a498e498ffe"
 
-SRC_URI[md5sum] = "875ac729018f3cac786d471422306fa8"
-SRC_URI[sha256sum] = "00bda1de275ed6fe81817902189c75dfd156b4fa29b44dc1f4620775d2f50cf7"
+SRC_URI[md5sum] = "a524264ef4069e18d742e32e90845a3f"
+SRC_URI[sha256sum] = "abb1996ba1c1d2faf5b1e38efa97da7f64e5373a31f705b96fe0587f5f778db4"
 
 inherit pypi ptest setuptools3
 
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-yamlloader_0.5.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-yamlloader_0.5.5.bb
new file mode 100644
index 0000000..dbf84d4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-yamlloader_0.5.5.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Ordered YAML loader and dumper for PyYAML."
+HOMEPAGE = "https://github.com/Phynix/yamlloader"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6831ef36faa29329bce2420c5356f97e"
+
+SRC_URI[md5sum] = "2e0750ace81235f750c072833d79c4c3"
+SRC_URI[sha256sum] = "dcab5f16b39bb03d10dda4cd4f30c943675ec4c7771807fc67e7f1bb319bf4c8"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-pyyaml \
+"
diff --git a/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.48.bb b/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.49.bb
similarity index 89%
rename from meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.48.bb
rename to meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.49.bb
index 9ca7a56..7fba21f 100644
--- a/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.48.bb
+++ b/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.49.bb
@@ -3,6 +3,7 @@
 exceptions."
 HOMEPAGE = "http://git.fedorahosted.org/git/?p=python-meh.git"
 LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 
 inherit setuptools3
 
@@ -10,8 +11,7 @@
 
 SRC_URI = "git://github.com/rhinstaller/python-meh.git;protocol=https;branch=master \
 "
-SRCREV = "760f78a634ecf0e2380abcbd751bc233d29300ef"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+SRCREV = "50c09e5c4c76757099d686c316b4bf42f72db71b"
 
 FILES_${PN} += "${datadir}/*"
 
diff --git a/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_0.17.4.bb b/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_1.0.2.bb
similarity index 77%
rename from meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_0.17.4.bb
rename to meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_1.0.2.bb
index a804b0c..da73198 100644
--- a/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_0.17.4.bb
+++ b/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_1.0.2.bb
@@ -16,8 +16,8 @@
 LICENSE = "LGPLv2.1"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=fbc093901857fcd118f065f900982c24"
 
-SRC_URI[md5sum] = "b65c03026bf2174e58e3e47a5e7e4825"
-SRC_URI[sha256sum] = "5b54b65a5434bb16432415743c0d154feee0c6d7a8a2fee208719c67d6d24c97"
+SRC_URI[md5sum] = "0f171e365e294554f8e7624ccf511067"
+SRC_URI[sha256sum] = "66d8ec82d30f2b95d8b4bd51659429066c2879d3f46292561f5fdbc7fed10f3d"
 
 inherit pypi setuptools3 update-alternatives
 
@@ -27,12 +27,6 @@
     ${PYTHON_PN}-six-native \
 "
 
-do_install_append() {
-    mv ${D}${bindir}/wbemcli.py ${D}${bindir}/pywbemcli
-
-    rm -f ${D}${bindir}/*.bat
-}
-
 RDEPENDS_${PN}_class-target += "\
     ${PYTHON_PN}-datetime \
     ${PYTHON_PN}-io \
@@ -46,10 +40,8 @@
     ${PYTHON_PN}-xml \
 "
 
-ALTERNATIVE_${PN} = "mof_compiler pywbemcli wbemcli"
+ALTERNATIVE_${PN} = "mof_compiler"
 ALTERNATIVE_TARGET[mof_compiler] = "${bindir}/mof_compiler"
-ALTERNATIVE_TARGET[pywbemcli] = "${bindir}/pywbemcli"
-ALTERNATIVE_TARGET[wbemcli] = "${bindir}/wbemcli"
 
 ALTERNATIVE_PRIORITY = "60"
 
diff --git a/meta-openembedded/meta-python/recipes-extended/pywbemtools/python3-pywbemtools_0.7.1.bb b/meta-openembedded/meta-python/recipes-extended/pywbemtools/python3-pywbemtools_0.7.1.bb
new file mode 100644
index 0000000..05f7728
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/pywbemtools/python3-pywbemtools_0.7.1.bb
@@ -0,0 +1,40 @@
+SUMMARY = "A set of tools using pywbem"
+DESCRIPTION = "A set of tools using pywbem to communicate with WBEM servers"
+HOMEPAGE = "https://pywbemtools.readthedocs.io/en/stable/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e23fadd6ceef8c618fc1c65191d846fa"
+
+SRC_URI[md5sum] = "a789da735c04ddc08ba828cd8022243e"
+SRC_URI[sha256sum] = "d2fe776c78a740215142f4f033055093f2283fd9327440c59734716e51e19989"
+
+inherit pypi setuptools3
+
+DEPENDS += " \
+    ${PYTHON_PN}-pyyaml-native \
+    ${PYTHON_PN}-pywbem-native \
+    ${PYTHON_PN}-six-native \
+    ${PYTHON_PN}-click-native \
+"
+
+RDEPENDS_${PN}_class-target += "\
+    ${PYTHON_PN}-ply \
+    ${PYTHON_PN}-pyyaml \
+    ${PYTHON_PN}-six \
+    ${PYTHON_PN}-pywbem \
+    ${PYTHON_PN}-click \
+    ${PYTHON_PN}-requests \
+    ${PYTHON_PN}-prompt-toolkit \
+    ${PYTHON_PN}-mock \
+    ${PYTHON_PN}-packaging \
+    ${PYTHON_PN}-nocasedict \
+    ${PYTHON_PN}-yamlloader \
+    ${PYTHON_PN}-click-repl \
+    ${PYTHON_PN}-click-spinner \
+    ${PYTHON_PN}-asciitree \
+    ${PYTHON_PN}-tabulate \
+    ${PYTHON_PN}-pydicti \
+    ${PYTHON_PN}-nocaselist \
+    ${PYTHON_PN}-custom-inherit \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-webserver/recipes-core/packagesgroups/packagegroup-meta-webserver.bb b/meta-openembedded/meta-webserver/recipes-core/packagesgroups/packagegroup-meta-webserver.bb
index f5d5deb..e3e6858 100644
--- a/meta-openembedded/meta-webserver/recipes-core/packagesgroups/packagegroup-meta-webserver.bb
+++ b/meta-openembedded/meta-webserver/recipes-core/packagesgroups/packagegroup-meta-webserver.bb
@@ -19,20 +19,31 @@
 "
 
 RDEPENDS_packagegroup-meta-webserver-http = "\
-    nginx monkey hiawatha nostromo apache-websocket \
-    apache2 sthttpd \
+    apache-websocket \
+    apache2 \
     ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "cherokee", "", d)} \
-    "
+    hiawatha \
+    monkey \
+    nginx \
+    nginx \
+    nostromo \
+    sthttpd \
+"
 
 RDEPENDS_packagegroup-meta-webserver-php = "\
-    phpmyadmin xdebug \
-    "
+    phpmyadmin \
+    xdebug \
+"
 
 RDEPENDS_packagegroup-meta-webserver-support = "\
-    spawn-fcgi fcgi \
-    "
+    spawn-fcgi \
+    fcgi \
+"
 
 RDEPENDS_packagegroup-meta-webserver-webadmin = "\
-    netdata webmin \
-    "
+    cockpit \
+    webmin \
+    netdata \
+"
+
 EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.43.bb b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.46.bb
similarity index 98%
rename from meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.43.bb
rename to meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.46.bb
index a7083d8..197cb83 100644
--- a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.43.bb
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.46.bb
@@ -26,8 +26,8 @@
            "
 
 LIC_FILES_CHKSUM = "file://LICENSE;md5=bddeddfac80b2c9a882241d008bb41c3"
-SRC_URI[md5sum] = "791c986b1e70fe61eb44060aacc89a64"
-SRC_URI[sha256sum] = "a497652ab3fc81318cdc2a203090a999150d86461acff97c1065dc910fe10f43"
+SRC_URI[md5sum] = "7d661ea5e736dac5e2761d9f49fe8361"
+SRC_URI[sha256sum] = "740eddf6e1c641992b22359cabc66e6325868c3c5e2e3f98faf349b61ecf41ea"
 
 S = "${WORKDIR}/httpd-${PV}"
 
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.init b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.init
index 40b2118..55446f0 100644
--- a/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.init
+++ b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.init
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 PATH=/sbin:/bin:/usr/sbin:/usr/bin
-DAEMON=/usr/bin/monkey
+DAEMON=/usr/sbin/monkey
 NAME=monkey
 DESC="Monkey HTTP Server"
 OPTS="--daemon"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.service b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.service
index f9aa57f..4f3b7be 100644
--- a/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.service
+++ b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.service
@@ -4,7 +4,7 @@
 
 [Service]
 Type=forking
-ExecStart=/usr/bin/monkey --daemon
+ExecStart=/usr/sbin/monkey --daemon
 PIDFile=/var/run/monkey.pid.2001
 TimeoutSec=10
 
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/monkey/monkey_1.6.9.bb b/meta-openembedded/meta-webserver/recipes-httpd/monkey/monkey_1.6.9.bb
index 289f069..698f860 100644
--- a/meta-openembedded/meta-webserver/recipes-httpd/monkey/monkey_1.6.9.bb
+++ b/meta-openembedded/meta-webserver/recipes-httpd/monkey/monkey_1.6.9.bb
@@ -39,6 +39,7 @@
 
 do_install_append() {
     rm -rf ${D}/run
+    rm -rf ${D}${localstatedir}/run
     install -Dm 0755 ${WORKDIR}/monkey.init ${D}${sysconfdir}/init.d/monkey
 
     if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
diff --git a/meta-openembedded/meta-xfce/conf/layer.conf b/meta-openembedded/meta-xfce/conf/layer.conf
index 199c69e..7e4bb17 100644
--- a/meta-openembedded/meta-xfce/conf/layer.conf
+++ b/meta-openembedded/meta-xfce/conf/layer.conf
@@ -20,3 +20,10 @@
 LAYERDEPENDS_xfce-layer += "networking-layer"
 
 LAYERSERIES_COMPAT_xfce-layer = "thud warrior zeus dunfell"
+
+SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += "\
+  openzone->gdk-pixbuf \
+  openzone->gtk+3 \
+  rodent-icon-theme->gdk-pixbuf \
+  rodent-icon-theme->gtk+3 \
+"