diff --git a/tools/libtool/Makefile b/tools/libtool/Makefile
index b237884b64..2bc9db7d0d 100644
--- a/tools/libtool/Makefile
+++ b/tools/libtool/Makefile
@@ -8,11 +8,11 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libtool
 PKG_CPE_ID:=cpe:/a:gnu:libtool
-PKG_VERSION:=2.4.6
+PKG_VERSION:=2.4.2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
-PKG_HASH:=7c87a8c2c8c0fc9cd5019e402bed4292462d00a718a7cd5f11218153bf28b26f
+PKG_HASH:=1d7b6862c1ed162e327f083a6f78f40eae29218f0db8c38393d61dab764c4407
 
 HOST_BUILD_PARALLEL:=1
 
@@ -24,12 +24,7 @@ HOST_CONFIGURE_VARS += \
 define Host/Prepare
 	$(call Host/Prepare/Default)
 	(cd $(STAGING_DIR_HOST)/share/aclocal/ && rm -f libtool.m4 ltdl.m4 lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4)
-	$(if $(QUILT),,(cd $(HOST_BUILD_DIR); touch README-release; $(AM_TOOL_PATHS) ./bootstrap --skip-git --skip-po --force))
-endef
-
-define Host/Configure
-	$(if $(QUILT),(cd $(HOST_BUILD_DIR); touch README-release; $(AM_TOOL_PATHS) ./bootstrap --skip-git --skip-po --force))
-	$(call Host/Configure/Default)
+	(cd $(HOST_BUILD_DIR); $(AM_TOOL_PATHS) ./bootstrap)
 endef
 
 define Host/Install
diff --git a/tools/libtool/patches/000-relocatable.patch b/tools/libtool/patches/000-relocatable.patch
index 88d1eaed02..6d1651be31 100644
--- a/tools/libtool/patches/000-relocatable.patch
+++ b/tools/libtool/patches/000-relocatable.patch
@@ -1,24 +1,17 @@
-From ca10caa502f971f90d8c041aa2476de54ef0ce2b Mon Sep 17 00:00:00 2001
-From: Eneas U de Queiroz <cotequeiroz@gmail.com>
-Date: Tue, 20 Jul 2021 16:41:11 -0300
-Subject: openwrt: make relocatable, search resources relative to STAGING_DIR
-
-This was originally commited to openwrt by Jo-Philipp Wich
-<jow@openwrt.org>.
-
-(adjusted to v2.4.6)
-Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
-
---- a/libtoolize.in
-+++ b/libtoolize.in
-@@ -40,11 +40,18 @@
- 
- : ${AUTOCONF="autoconf"}
- : ${AUTOMAKE="automake"}
+--- a/libltdl/config/general.m4sh
++++ b/libltdl/config/general.m4sh
+@@ -45,15 +45,22 @@ progpath="$0"
+ M4SH_VERBATIM([[
+ : ${CP="cp -f"}
+ test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
 -: ${EGREP="@EGREP@"}
 -: ${FGREP="@FGREP@"}
 -: ${GREP="@GREP@"}
  : ${LN_S="@LN_S@"}
+ : ${MAKE="make"}
+ : ${MKDIR="mkdir"}
+ : ${MV="mv -f"}
+ : ${RM="rm -f"}
 -: ${SED="@SED@"}
 +if test -n "$STAGING_DIR"; then
 +	: ${EGREP="$STAGING_DIR/../host/bin/grep -E"}
@@ -31,12 +24,87 @@ Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
 +	: ${GREP="@GREP@"}
 +	: ${SED="@SED@"}
 +fi
+ : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+ : ${Xsed="$SED -e 1s/^X//"}
  
+--- a/libtoolize.in
++++ b/libtoolize.in
+@@ -334,15 +334,22 @@ as_unset=as_fn_unset
  
- ## -------------------------- ##
---- a/m4/libtool.m4
-+++ b/m4/libtool.m4
-@@ -929,9 +929,8 @@ dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+ : ${CP="cp -f"}
+ test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+-: ${EGREP="@EGREP@"}
+-: ${FGREP="@FGREP@"}
+-: ${GREP="@GREP@"}
+ : ${LN_S="@LN_S@"}
+ : ${MAKE="make"}
+ : ${MKDIR="mkdir"}
+ : ${MV="mv -f"}
+ : ${RM="rm -f"}
+-: ${SED="@SED@"}
++if test -n "$STAGING_DIR"; then
++	: ${EGREP="$STAGING_DIR/../host/bin/grep -E"}
++	: ${FGREP="$STAGING_DIR/../host/bin/grep -F"}
++	: ${GREP="$STAGING_DIR/../host/bin/grep"}
++	: ${SED="$STAGING_DIR/../host/bin/sed"}
++else
++	: ${EGREP="@EGREP@"}
++	: ${FGREP="@FGREP@"}
++	: ${GREP="@GREP@"}
++	: ${SED="@SED@"}
++fi
+ : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+ : ${Xsed="$SED -e 1s/^X//"}
+ 
+@@ -2487,10 +2494,17 @@ func_check_macros ()
+ 
+   # Locations for important files:
+   prefix=@prefix@
+-  datadir=@datadir@
+-  pkgdatadir=@pkgdatadir@
+-  pkgltdldir=@pkgdatadir@
+-  aclocaldir=@aclocaldir@
++  if test -n "$STAGING_DIR"; then
++    datadir="$STAGING_DIR/../host/share"
++    pkgdatadir="$STAGING_DIR/../host/share/libtool"
++    pkgltdldir="$STAGING_DIR/../host/share/libtool"
++    aclocaldir="$STAGING_DIR/../host/share/aclocal"
++  else
++    datadir=@datadir@
++    pkgdatadir=@pkgdatadir@
++    pkgltdldir=@pkgdatadir@
++    aclocaldir=@aclocaldir@
++  fi
+   auxdir=
+   macrodir=
+   configure_ac=configure.in
+--- a/libtoolize.m4sh
++++ b/libtoolize.m4sh
+@@ -1453,10 +1453,17 @@ func_check_macros ()
+ 
+   # Locations for important files:
+   prefix=@prefix@
+-  datadir=@datadir@
+-  pkgdatadir=@pkgdatadir@
+-  pkgltdldir=@pkgdatadir@
+-  aclocaldir=@aclocaldir@
++  if test -n "$STAGING_DIR"; then
++    datadir="$STAGING_DIR/../host/share"
++    pkgdatadir="$STAGING_DIR/../host/share/libtool"
++    pkgltdldir="$STAGING_DIR/../host/share/libtool"
++    aclocaldir="$STAGING_DIR/../host/share/aclocal"
++  else
++    datadir=@datadir@
++    pkgdatadir=@pkgdatadir@
++    pkgltdldir=@pkgdatadir@
++    aclocaldir=@aclocaldir@
++  fi
+   auxdir=
+   macrodir=
+   configure_ac=configure.in
+--- a/libltdl/m4/libtool.m4
++++ b/libltdl/m4/libtool.m4
+@@ -907,9 +907,8 @@ dnl AC_DEFUN([AC_LIBTOOL_RC], [])
  # ----------------
  m4_defun([_LT_TAG_COMPILER],
  [AC_REQUIRE([AC_PROG_CC])dnl
@@ -47,7 +115,7 @@ Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
  _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
  _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
  
-@@ -8160,9 +8159,9 @@ m4_defun([_LT_DECL_EGREP],
+@@ -7660,9 +7659,9 @@ m4_defun([_LT_DECL_EGREP],
  [AC_REQUIRE([AC_PROG_EGREP])dnl
  AC_REQUIRE([AC_PROG_FGREP])dnl
  test -z "$GREP" && GREP=grep
@@ -60,7 +128,7 @@ Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
  dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
  AC_SUBST([GREP])
  ])
-@@ -8195,9 +8194,8 @@ AC_SUBST([DLLTOOL])
+@@ -7695,9 +7694,8 @@ AC_SUBST([DLLTOOL])
  # as few characters as possible.  Prefer GNU sed if found.
  m4_defun([_LT_DECL_SED],
  [AC_PROG_SED
diff --git a/tools/libtool/patches/100-libdir-fixes.patch b/tools/libtool/patches/100-libdir-fixes.patch
index dd17dd97e5..3df2b14b60 100644
--- a/tools/libtool/patches/100-libdir-fixes.patch
+++ b/tools/libtool/patches/100-libdir-fixes.patch
@@ -1,56 +1,83 @@
-From 67ffe8e8582a7ba1f1d1307a419098e6dd88bdaf Mon Sep 17 00:00:00 2001
-From: Eneas U de Queiroz <cotequeiroz@gmail.com>
-Date: Tue, 20 Jul 2021 16:41:11 -0300
-Subject: openwrt: cross-compilation path adjustments
-
-Comments from the patch:
-
-Adding 'libdir' from the .la file to our library search paths
-breaks crosscompilation horribly.  We cheat here and don't add
-it, instead adding the path where we found the .la.  -CL
-
-OE sets installed=no in staging. We need to look in $objdir and $absdir,
-preferring $objdir. RP 31/04/2008
-
-This was originally commited to openwrt by Jo-Philipp Wich
-<jow@openwrt.org>.
-
-(adjusted to v2.4.6)
-Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
-
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -6049,8 +6049,14 @@ func_mode_link ()
- 	    absdir=$abs_ladir
- 	    libdir=$abs_ladir
+--- a/libltdl/config/ltmain.m4sh
++++ b/libltdl/config/ltmain.m4sh
+@@ -5731,8 +5731,14 @@ func_mode_link ()
+ 	    absdir="$abs_ladir"
+ 	    libdir="$abs_ladir"
  	  else
--	    dir=$lt_sysroot$libdir
--	    absdir=$lt_sysroot$libdir
+-	    dir="$lt_sysroot$libdir"
+-	    absdir="$lt_sysroot$libdir"
 +	    # Adding 'libdir' from the .la file to our library search paths
 +	    # breaks crosscompilation horribly.  We cheat here and don't add
 +	    # it, instead adding the path where we found the .la.  -CL
 +	    dir="$lt_sysroot$abs_ladir"
 +	    absdir="$abs_ladir"
 +	    libdir="$abs_ladir"
-+	    #dir=$lt_sysroot$libdir
-+	    #absdir=$lt_sysroot$libdir
++	    #dir="$libdir"
++	    #absdir="$lt_sysroot$libdir"
  	  fi
- 	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
+ 	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
  	else
-@@ -6448,8 +6454,6 @@ func_mode_link ()
- 		add=$libdir/$linklib
+@@ -6130,8 +6136,6 @@ func_mode_link ()
+ 		add="$libdir/$linklib"
  	      fi
  	    else
 -	      # We cannot seem to hardcode it, guess we'll fake it.
--	      add_dir=-L$libdir
+-	      add_dir="-L$libdir"
  	      # Try looking first in the location we're being installed to.
  	      if test -n "$inst_prefix_dir"; then
  		case $libdir in
-@@ -6604,7 +6608,17 @@ func_mode_link ()
+@@ -6286,7 +6290,17 @@ func_mode_link ()
  		  fi
  		  ;;
  		*)
--		  path=-L$absdir/$objdir
+-		  path="-L$absdir/$objdir"
++                  # OE sets installed=no in staging. We need to look in $objdir and $absdir, 
++                  # preferring $objdir. RP 31/04/2008
++                  if test -f "$absdir/$objdir/$depdepl" ; then
++		    depdepl="$absdir/$objdir/$depdepl"
++		    path="-L$absdir/$objdir"
++                  elif test -f "$absdir/$depdepl" ; then
++		    depdepl="$absdir/$depdepl"
++		    path="-L$absdir"
++                  else
++		    path="-L$absdir/$objdir"
++                  fi
+ 		  ;;
+ 		esac
+ 		else
+--- a/libltdl/config/ltmain.sh
++++ b/libltdl/config/ltmain.sh
+@@ -6518,8 +6518,14 @@ func_mode_link ()
+ 	    absdir="$abs_ladir"
+ 	    libdir="$abs_ladir"
+ 	  else
+-	    dir="$lt_sysroot$libdir"
+-	    absdir="$lt_sysroot$libdir"
++	    # Adding 'libdir' from the .la file to our library search paths
++	    # breaks crosscompilation horribly.  We cheat here and don't add
++	    # it, instead adding the path where we found the .la.  -CL
++	    dir="$lt_sysroot$abs_ladir"
++	    absdir="$abs_ladir"
++	    libdir="$abs_ladir"
++	    #dir="$libdir"
++	    #absdir="$lt_sysroot$libdir"
+ 	  fi
+ 	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+ 	else
+@@ -6917,8 +6923,6 @@ func_mode_link ()
+ 		add="$libdir/$linklib"
+ 	      fi
+ 	    else
+-	      # We cannot seem to hardcode it, guess we'll fake it.
+-	      add_dir="-L$libdir"
+ 	      # Try looking first in the location we're being installed to.
+ 	      if test -n "$inst_prefix_dir"; then
+ 		case $libdir in
+@@ -7073,7 +7077,17 @@ func_mode_link ()
+ 		  fi
+ 		  ;;
+ 		*)
+-		  path="-L$absdir/$objdir"
 +                  # OE sets installed=no in staging. We need to look in $objdir and $absdir, 
 +                  # preferring $objdir. RP 31/04/2008
 +                  if test -f "$absdir/$objdir/$depdepl" ; then
diff --git a/tools/libtool/patches/110-dont-use-target-dir-for-relinking.patch b/tools/libtool/patches/110-dont-use-target-dir-for-relinking.patch
index d613440167..bbfd125003 100644
--- a/tools/libtool/patches/110-dont-use-target-dir-for-relinking.patch
+++ b/tools/libtool/patches/110-dont-use-target-dir-for-relinking.patch
@@ -1,33 +1,20 @@
-From 375833af93999f8b0a747c8a1dfa3ec8d347743d Mon Sep 17 00:00:00 2001
-From: Eneas U de Queiroz <cotequeiroz@gmail.com>
-Date: Tue, 20 Jul 2021 16:52:37 -0300
-Subject: openwrt: don't use target dir for relinking
-
-This was originally commited to openwrt by Jo-Philipp Wich
-<jow@openwrt.org>.
-
-(adjusted to v2.4.6)
-Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
-
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -6434,13 +6434,13 @@ func_mode_link ()
- 	    add_dir=
- 	    add=
- 	    # Finalize command for both is simple: just hardcode it.
--	    if test yes = "$hardcode_direct" &&
--	       test no = "$hardcode_direct_absolute"; then
--	      add=$libdir/$linklib
--	    elif test yes = "$hardcode_minus_L"; then
-+	    if test "$hardcode_direct" = yes &&
-+	       test "$hardcode_direct_absolute" = no; then
-+	      add="$libdir/$linklib"
-+	    elif test "$hardcode_minus_L" = yes; then
- 	      add_dir=-L$libdir
--	      add=-l$name
--	    elif test yes = "$hardcode_shlibpath_var"; then
-+	      add="-l$name"
-+	    elif test "$hardcode_shlibpath_var" = yes; then
+--- a/libltdl/config/ltmain.m4sh
++++ b/libltdl/config/ltmain.m4sh
+@@ -6120,7 +6120,6 @@ func_mode_link ()
+ 	       test "$hardcode_direct_absolute" = no; then
+ 	      add="$libdir/$linklib"
+ 	    elif test "$hardcode_minus_L" = yes; then
+-	      add_dir="-L$libdir"
+ 	      add="-l$name"
+ 	    elif test "$hardcode_shlibpath_var" = yes; then
+ 	      case :$finalize_shlibpath: in
+--- a/libltdl/config/ltmain.sh
++++ b/libltdl/config/ltmain.sh
+@@ -6907,7 +6907,6 @@ func_mode_link ()
+ 	       test "$hardcode_direct_absolute" = no; then
+ 	      add="$libdir/$linklib"
+ 	    elif test "$hardcode_minus_L" = yes; then
+-	      add_dir="-L$libdir"
+ 	      add="-l$name"
+ 	    elif test "$hardcode_shlibpath_var" = yes; then
  	      case :$finalize_shlibpath: in
- 	      *":$libdir:"*) ;;
- 	      *) func_append finalize_shlibpath "$libdir:" ;;
diff --git a/tools/libtool/patches/120-strip-unsafe-dirs-for-relinking.patch b/tools/libtool/patches/120-strip-unsafe-dirs-for-relinking.patch
index 715c254999..8840ee0569 100644
--- a/tools/libtool/patches/120-strip-unsafe-dirs-for-relinking.patch
+++ b/tools/libtool/patches/120-strip-unsafe-dirs-for-relinking.patch
@@ -1,26 +1,24 @@
-From 7f2b8a1ab4fa1475eeeddfb84eb5b92594bfce43 Mon Sep 17 00:00:00 2001
-From: Eneas U de Queiroz <cotequeiroz@gmail.com>
-Date: Tue, 20 Jul 2021 16:54:12 -0300
-Subject: openwrt: strip unsave directories from relink command
-
-strip unsave directories from relink command, nuke every -L that looks
-like /usr/lib or /lib
-
-This was originally commited to openwrt by Jo-Philipp Wich
-<jow@openwrt.org>.
-
-(adjusted to v2.4.6)
-Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
-
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -2382,6 +2382,9 @@ func_mode_install ()
+--- a/libltdl/config/ltmain.m4sh
++++ b/libltdl/config/ltmain.m4sh
+@@ -2183,6 +2183,9 @@ func_mode_install ()
  	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
  	  fi
  
 +	  relink_command=`$ECHO "$relink_command" | $SED "s%-L[[:space:]]*/lib[^[:space:]]*%%"`
 +	  relink_command=`$ECHO "$relink_command" | $SED "s%-L[[:space:]]*/usr/lib[^[:space:]]*%%"`
 +
- 	  func_warning "relinking '$file'"
+ 	  func_warning "relinking \`$file'"
  	  func_show_eval "$relink_command" \
- 	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
+ 	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+--- a/libltdl/config/ltmain.sh
++++ b/libltdl/config/ltmain.sh
+@@ -2973,6 +2973,9 @@ func_mode_install ()
+ 	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ 	  fi
+ 
++	  relink_command=`$ECHO "$relink_command" | $SED "s%-L[[:space:]]*/lib[^[:space:]]*%%"`
++	  relink_command=`$ECHO "$relink_command" | $SED "s%-L[[:space:]]*/usr/lib[^[:space:]]*%%"`
++
+ 	  func_warning "relinking \`$file'"
+ 	  func_show_eval "$relink_command" \
+ 	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
diff --git a/tools/libtool/patches/140-don-t-quote-SHELL-in-Makefile.am.patch b/tools/libtool/patches/140-don-t-quote-SHELL-in-Makefile.am.patch
deleted file mode 100644
index 513b521834..0000000000
--- a/tools/libtool/patches/140-don-t-quote-SHELL-in-Makefile.am.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 879578d3f4dc9bc42aa433b1fb6b584564f83617 Mon Sep 17 00:00:00 2001
-From: Eneas U de Queiroz <cotequeiroz@gmail.com>
-Date: Wed, 21 Jul 2021 13:38:24 -0300
-Subject: openwrt: don't quote $(SHELL) in Makefile.am
-
-This allows to use SHELL="env bash" to get a controlled enviroment.
-
-Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
-
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -46,7 +46,7 @@ EXTRA_LTLIBRARIES	=
- # Using 'cd' in backquotes may print the directory name, use this instead:
- lt__cd		= CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
- 
--git_version_gen = '$(SHELL)' '$(aux_dir)/git-version-gen' '--fallback' '$(VERSION)' '.tarball-version'
-+git_version_gen = $(SHELL) '$(aux_dir)/git-version-gen' '--fallback' '$(VERSION)' '.tarball-version'
- rebuild = rebuild=:; revision=`$(lt__cd) $(srcdir) && $(git_version_gen) | $(SED) 's|-.*$$||'`
- 
- 
-@@ -301,7 +301,7 @@ libtool: $(ltmain_sh) $(config_status) $
- 	  if test 0 = '$(AM_DEFAULT_VERBOSITY)' && test 1 != '$(V)'; \
- 	    then echo "  GEN     " $@; \
- 	  else echo '$(SHELL) $(top_builddir)/config.status "$@"'; fi; \
--	  cd '$(top_builddir)' && '$(SHELL)' ./config.status '$@'; \
-+	  cd '$(top_builddir)' && $(SHELL) ./config.status '$@'; \
- 	fi
- 
- 
-@@ -788,13 +788,13 @@ testsuite_deps_uninstalled = $(testsuite
- # Hook the test suite into the check rule
- check-local: $(testsuite_deps_uninstalled)
- 	$(AM_V_at)$(CD_TESTDIR); \
--	CONFIG_SHELL='$(SHELL)' '$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" \
-+	CONFIG_SHELL=$(SHELL) $(SHELL) "$$abs_srcdir/$(TESTSUITE)" \
- 	  $(TESTS_ENVIRONMENT) $(BUILDCHECK_ENVIRONMENT) $(TESTSUITEFLAGS)
- 
- # Run the test suite on the *installed* tree.
- installcheck-local: $(testsuite_deps)
- 	$(AM_V_at)$(CD_TESTDIR); \
--	CONFIG_SHELL='$(SHELL)' '$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" \
-+	CONFIG_SHELL=$(SHELL) $(SHELL) "$$abs_srcdir/$(TESTSUITE)" \
- 	  $(TESTS_ENVIRONMENT) $(INSTALLCHECK_ENVIRONMENT) $(TESTSUITEFLAGS) \
- 	  AUTOTEST_PATH='$(exec_prefix)/bin'
- 
-@@ -806,7 +806,7 @@ check-noninteractive-old:
- .PHONY: check-noninteractive-new
- check-noninteractive-new: $(testsuite_deps_uninstalled)
- 	$(AM_V_at)$(CD_TESTDIR); \
--	CONFIG_SHELL='$(SHELL)' '$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" \
-+	CONFIG_SHELL=$(SHELL) $(SHELL) "$$abs_srcdir/$(TESTSUITE)" \
- 	  $(TESTS_ENVIRONMENT) $(BUILDCHECK_ENVIRONMENT) \
- 	  -k '!interactive' INNER_TESTSUITEFLAGS=',!interactive' \
- 	  $(TESTSUITEFLAGS)
-@@ -815,7 +815,7 @@ check-noninteractive-new: $(testsuite_de
- .PHONY: check-interactive
- check-interactive: $(testsuite_deps_uninstalled)
- 	$(AM_V_at)$(CD_TESTDIR); \
--	CONFIG_SHELL='$(SHELL)' '$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" \
-+	CONFIG_SHELL=$(SHELL) $(SHELL) "$$abs_srcdir/$(TESTSUITE)" \
- 	  $(TESTS_ENVIRONMENT) $(BUILDCHECK_ENVIRONMENT) \
- 	  -k interactive -k recursive INNER_TESTSUITEFLAGS=',interactive' \
- 	  $(TESTSUITEFLAGS)
-@@ -827,7 +827,7 @@ check-noninteractive: check-noninteracti
- clean-local:
- 	-$(CD_TESTDIR); \
- 	test -f "$$abs_srcdir/$(TESTSUITE)" && \
--	    '$(SHELL)' "$$abs_srcdir/$(TESTSUITE)" --clean
-+	    $(SHELL) "$$abs_srcdir/$(TESTSUITE)" --clean
- 
- ## An empty target to depend on when a rule needs to always run
- ## whenever it is visited.
diff --git a/tools/libtool/patches/150-libtool-mitigate-the-sed_quote_subst-slowdown.patch b/tools/libtool/patches/150-libtool-mitigate-the-sed_quote_subst-slowdown.patch
deleted file mode 100644
index 27ea6a1d53..0000000000
--- a/tools/libtool/patches/150-libtool-mitigate-the-sed_quote_subst-slowdown.patch
+++ /dev/null
@@ -1,224 +0,0 @@
-From 3adadb568fbf15d952bd25a005b6a9afb7e59dc7 Mon Sep 17 00:00:00 2001
-From: Pavel Raiskup <praiskup@redhat.com>
-Date: Sun, 4 Oct 2015 21:55:03 +0200
-Subject: libtool: mitigate the $sed_quote_subst slowdown
-
-When it is reasonably possible, use shell implementation for
-quoting.
-
-References:
-http://lists.gnu.org/archive/html/libtool/2015-03/msg00005.html
-http://lists.gnu.org/archive/html/libtool/2015-02/msg00000.html
-https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20006
-
-* gl/build-aux/funclib.sh (func_quote): New function that can be
-used as substitution for '$SED $sed_quote_subst' call.
-* build-aux/ltmain.in (func_emit_wrapper): Use func_quote instead
-of '$SED $sed_quote_subst'.
-(func_mode_link): Likewise.
-* NEWS: Document.
-* bootstrap: Sync with funclib.sh.
-
-(cherry picked from commit 32f0df9835ac15ac17e04be57c368172c3ad1d19)
-(skipping NEWS change)
-Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
-
---- a/bootstrap
-+++ b/bootstrap
-@@ -230,7 +230,7 @@ vc_ignore=
- 
- # Source required external libraries:
- # Set a version string for this script.
--scriptversion=2015-01-20.17; # UTC
-+scriptversion=2015-10-04.22; # UTC
- 
- # General shell script boiler plate, and helper functions.
- # Written by Gary V. Vaughan, 2004
-@@ -1257,6 +1257,57 @@ func_relative_path ()
- }
- 
- 
-+# func_quote ARG
-+# --------------
-+# Aesthetically quote one ARG, store the result into $func_quote_result.  Note
-+# that we keep attention to performance here (so far O(N) complexity as long as
-+# func_append is O(1)).
-+func_quote ()
-+{
-+    $debug_cmd
-+
-+    func_quote_result=$1
-+
-+    case $func_quote_result in
-+      *[\\\`\"\$]*)
-+        case $func_quote_result in
-+          *'*'*|*'['*)
-+            func_quote_result=`$ECHO "$func_quote_result" | $SED "$sed_quote_subst"`
-+            return 0
-+            ;;
-+        esac
-+
-+        func_quote_old_IFS=$IFS
-+        for _G_char in '\' '`' '"' '$'
-+        do
-+          # STATE($1) PREV($2) SEPARATOR($3)
-+          set start "" ""
-+          func_quote_result=dummy"$_G_char$func_quote_result$_G_char"dummy
-+          IFS=$_G_char
-+          for _G_part in $func_quote_result
-+          do
-+            case $1 in
-+            quote)
-+              func_append func_quote_result "$3$2"
-+              set quote "$_G_part" "\\$_G_char"
-+              ;;
-+            start)
-+              set first "" ""
-+              func_quote_result=
-+              ;;
-+            first)
-+              set quote "$_G_part" ""
-+              ;;
-+            esac
-+          done
-+          IFS=$func_quote_old_IFS
-+        done
-+        ;;
-+      *) ;;
-+    esac
-+}
-+
-+
- # func_quote_for_eval ARG...
- # --------------------------
- # Aesthetically quote ARGs to be evaled later.
-@@ -1273,12 +1324,8 @@ func_quote_for_eval ()
-     func_quote_for_eval_unquoted_result=
-     func_quote_for_eval_result=
-     while test 0 -lt $#; do
--      case $1 in
--        *[\\\`\"\$]*)
--	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
--        *)
--          _G_unquoted_arg=$1 ;;
--      esac
-+      func_quote "$1"
-+      _G_unquoted_arg=$func_quote_result
-       if test -n "$func_quote_for_eval_unquoted_result"; then
- 	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
-       else
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -3356,7 +3356,8 @@ else
-   if test \"\$libtool_execute_magic\" != \"$magic\"; then
-     file=\"\$0\""
- 
--    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
-+    func_quote "$ECHO"
-+    qECHO=$func_quote_result
-     $ECHO "\
- 
- # A function that is used when there is no print builtin or printf.
-@@ -8618,8 +8619,8 @@ EOF
- 	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
- 	  fi
- 	done
--	relink_command="(cd `pwd`; $relink_command)"
--	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
-+	func_quote "(cd `pwd`; $relink_command)"
-+	relink_command=$func_quote_result
-       fi
- 
-       # Only actually do things if not in dry run mode.
-@@ -8865,7 +8866,8 @@ EOF
-       done
-       # Quote the link command for shipping.
-       relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
--      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
-+      func_quote "$relink_command"
-+      relink_command=$func_quote_result
-       if test yes = "$hardcode_automatic"; then
- 	relink_command=
-       fi
---- a/build-aux/funclib.sh
-+++ b/build-aux/funclib.sh
-@@ -1,5 +1,5 @@
- # Set a version string for this script.
--scriptversion=2015-01-20.17; # UTC
-+scriptversion=2015-10-04.22; # UTC
- 
- # General shell script boiler plate, and helper functions.
- # Written by Gary V. Vaughan, 2004
-@@ -1026,6 +1026,57 @@ func_relative_path ()
- }
- 
- 
-+# func_quote ARG
-+# --------------
-+# Aesthetically quote one ARG, store the result into $func_quote_result.  Note
-+# that we keep attention to performance here (so far O(N) complexity as long as
-+# func_append is O(1)).
-+func_quote ()
-+{
-+    $debug_cmd
-+
-+    func_quote_result=$1
-+
-+    case $func_quote_result in
-+      *[\\\`\"\$]*)
-+        case $func_quote_result in
-+          *[\[\*\?]*)
-+            func_quote_result=`$ECHO "$func_quote_result" | $SED "$sed_quote_subst"`
-+            return 0
-+            ;;
-+        esac
-+
-+        func_quote_old_IFS=$IFS
-+        for _G_char in '\' '`' '"' '$'
-+        do
-+          # STATE($1) PREV($2) SEPARATOR($3)
-+          set start "" ""
-+          func_quote_result=dummy"$_G_char$func_quote_result$_G_char"dummy
-+          IFS=$_G_char
-+          for _G_part in $func_quote_result
-+          do
-+            case $1 in
-+            quote)
-+              func_append func_quote_result "$3$2"
-+              set quote "$_G_part" "\\$_G_char"
-+              ;;
-+            start)
-+              set first "" ""
-+              func_quote_result=
-+              ;;
-+            first)
-+              set quote "$_G_part" ""
-+              ;;
-+            esac
-+          done
-+          IFS=$func_quote_old_IFS
-+        done
-+        ;;
-+      *) ;;
-+    esac
-+}
-+
-+
- # func_quote_for_eval ARG...
- # --------------------------
- # Aesthetically quote ARGs to be evaled later.
-@@ -1042,12 +1093,8 @@ func_quote_for_eval ()
-     func_quote_for_eval_unquoted_result=
-     func_quote_for_eval_result=
-     while test 0 -lt $#; do
--      case $1 in
--        *[\\\`\"\$]*)
--	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
--        *)
--          _G_unquoted_arg=$1 ;;
--      esac
-+      func_quote "$1"
-+      _G_unquoted_arg=$func_quote_result
-       if test -n "$func_quote_for_eval_unquoted_result"; then
- 	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
-       else
diff --git a/tools/libtool/patches/130-trailingslash.patch b/tools/libtool/patches/150-trailingslash.patch
similarity index 57%
rename from tools/libtool/patches/130-trailingslash.patch
rename to tools/libtool/patches/150-trailingslash.patch
index fc28027a05..423911cf4b 100644
--- a/tools/libtool/patches/130-trailingslash.patch
+++ b/tools/libtool/patches/150-trailingslash.patch
@@ -1,8 +1,3 @@
-From 1b45c3c0d6682be7f4876b620780ee246a5acbaa Mon Sep 17 00:00:00 2001
-From: Eneas U de Queiroz <cotequeiroz@gmail.com>
-Date: Tue, 20 Jul 2021 16:56:16 -0300
-Subject: openwrt: remove trailing slash in install destdir
-
 A command like /bin/sh ../../i586-poky-linux-libtool   --mode=install /usr/bin/install -c   gck-roots-store-standalone.la '/media/data1/builds/poky1/tmp/work/core2-poky-linux/gnome-keyring-2.26.1-r1/image/usr/lib/gnome-keyring/standalone/' fails (e.g. gnome-keyring or pulseaudio)
 
 This is because libdir has a trailing slash which breaks the comparision.
@@ -14,12 +9,28 @@ Merged a patch received from Gary Thomas <gary@mlbassoc.com>
 Date: 2010/07/12
 Nitin A Kamble <nitin.a.kamble@intel.com>
 
-(adjusted to v2.4.6)
-Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
-
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -2363,8 +2363,15 @@ func_mode_install ()
+--- a/libltdl/config/ltmain.m4sh
++++ b/libltdl/config/ltmain.m4sh
+@@ -2167,8 +2167,15 @@ func_mode_install ()
+ 	func_append dir "$objdir"
+ 
+ 	if test -n "$relink_command"; then
++      # Strip any trailing slash from the destination.
++      func_stripname '' '/' "$libdir"
++      destlibdir=$func_stripname_result
++
++      func_stripname '' '/' "$destdir"
++      s_destdir=$func_stripname_result
++
+ 	  # Determine the prefix the user has applied to our future dir.
+-	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
++	  inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"`
+ 
+ 	  # Don't allow the user to place us outside of our expected
+ 	  # location b/c this prevents finding dependent libraries that
+--- a/libltdl/config/ltmain.sh
++++ b/libltdl/config/ltmain.sh
+@@ -2954,8 +2954,15 @@ func_mode_install ()
  	func_append dir "$objdir"
  
  	if test -n "$relink_command"; then
diff --git a/tools/libtool/patches/160-passthrough-ssp.patch b/tools/libtool/patches/160-passthrough-ssp.patch
new file mode 100644
index 0000000000..da44c614e3
--- /dev/null
+++ b/tools/libtool/patches/160-passthrough-ssp.patch
@@ -0,0 +1,12 @@
+diff -ur libtool-2.4.orig/libltdl/config/ltmain.m4sh libtool-2.4/libltdl/config/ltmain.m4sh
+--- libtool-2.4.orig/libltdl/config/ltmain.m4sh	2015-06-18 10:46:15.499996979 +0200
++++ libtool-2.4/libltdl/config/ltmain.m4sh	2015-06-18 10:48:24.686882213 +0200
+@@ -5076,7 +5076,7 @@
+       # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+-      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
++      -O*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*)
+         func_quote_for_eval "$arg"
+ 	arg="$func_quote_for_eval_result"
+         func_append compile_command " $arg"
diff --git a/tools/libtool/patches/200-openwrt-branding.patch b/tools/libtool/patches/200-openwrt-branding.patch
index 95fa8c0f37..3fc0afb866 100644
--- a/tools/libtool/patches/200-openwrt-branding.patch
+++ b/tools/libtool/patches/200-openwrt-branding.patch
@@ -1,24 +1,112 @@
-From 90707200efadc8e230635c7c204c9c272cbc8631 Mon Sep 17 00:00:00 2001
-From: Eneas U de Queiroz <cotequeiroz@gmail.com>
-Date: Tue, 20 Jul 2021 17:01:03 -0300
-Subject: openwrt: add openwrt branding
-
-This prepends program name with "OpenWrt-".
-
-This was originally commited to openwrt by Jo-Philipp Wich
-<jow@openwrt.org>.
-
-(adjusted to v2.4.6)
-Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
-
---- a/build-aux/ltmain.in
-+++ b/build-aux/ltmain.in
-@@ -82,7 +82,7 @@ func_echo ()
-     IFS=$nl
-     for _G_line in $_G_message; do
-       IFS=$func_echo_IFS
--      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
-+      $ECHO "OpenWrt-$progname${opt_mode+: $opt_mode}: $_G_line"
-     done
-     IFS=$func_echo_IFS
+--- a/libltdl/config/general.m4sh
++++ b/libltdl/config/general.m4sh
+@@ -359,7 +359,7 @@ opt_warning=:
+ # name if it has been set yet.
+ func_echo ()
+ {
+-    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
++    $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }$*"
  }
+ 
+ # func_verbose arg...
+@@ -385,14 +385,14 @@ func_echo_all ()
+ # Echo program name prefixed message to standard error.
+ func_error ()
+ {
+-    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
++    $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+ }
+ 
+ # func_warning arg...
+ # Echo program name prefixed warning message to standard error.
+ func_warning ()
+ {
+-    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
++    $opt_warning && $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+ 
+     # bash bug again:
+     :
+--- a/libltdl/config/ltmain.sh
++++ b/libltdl/config/ltmain.sh
+@@ -439,7 +439,7 @@ opt_warning=:
+ # name if it has been set yet.
+ func_echo ()
+ {
+-    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
++    $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }$*"
+ }
+ 
+ # func_verbose arg...
+@@ -465,14 +465,14 @@ func_echo_all ()
+ # Echo program name prefixed message to standard error.
+ func_error ()
+ {
+-    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
++    $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+ }
+ 
+ # func_warning arg...
+ # Echo program name prefixed warning message to standard error.
+ func_warning ()
+ {
+-    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
++    $opt_warning && $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+ 
+     # bash bug again:
+     :
+--- a/libtoolize.in
++++ b/libtoolize.in
+@@ -648,7 +648,7 @@ opt_warning=:
+ # name if it has been set yet.
+ func_echo ()
+ {
+-    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
++    $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }$*"
+ }
+ 
+ # func_verbose arg...
+@@ -674,14 +674,14 @@ func_echo_all ()
+ # Echo program name prefixed message to standard error.
+ func_error ()
+ {
+-    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
++    $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+ }
+ 
+ # func_warning arg...
+ # Echo program name prefixed warning message to standard error.
+ func_warning ()
+ {
+-    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
++    $opt_warning && $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+ 
+     # bash bug again:
+     :
+--- a/tests/defs.in
++++ b/tests/defs.in
+@@ -596,7 +596,7 @@ opt_warning=:
+ # name if it has been set yet.
+ func_echo ()
+ {
+-    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
++    $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }$*"
+ }
+ 
+ # func_verbose arg...
+@@ -622,14 +622,14 @@ func_echo_all ()
+ # Echo program name prefixed message to standard error.
+ func_error ()
+ {
+-    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
++    $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+ }
+ 
+ # func_warning arg...
+ # Echo program name prefixed warning message to standard error.
+ func_warning ()
+ {
+-    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
++    $opt_warning && $ECHO "OpenWrt-$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+ 
+     # bash bug again:
+     :